@skalenetwork/upgrade-tools 4.0.0-ownership-helpers.11 → 4.0.0-ownership-helpers.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,4 +8,4 @@ export * from "./version";
8
8
  export * from "./upgrader";
9
9
  export * from "./upgraders/abstractTransparentProxyUpgrader";
10
10
  export * from "./upgraders/beaconUpgrader";
11
- export * from "./ownership-transfer/ownershipAdmin";
11
+ export * from "./ownership-transfer/instanceAdmin";
package/dist/src/index.js CHANGED
@@ -24,5 +24,5 @@ __exportStar(require("./version"), exports);
24
24
  __exportStar(require("./upgrader"), exports);
25
25
  __exportStar(require("./upgraders/abstractTransparentProxyUpgrader"), exports);
26
26
  __exportStar(require("./upgraders/beaconUpgrader"), exports);
27
- __exportStar(require("./ownership-transfer/ownershipAdmin"), exports);
27
+ __exportStar(require("./ownership-transfer/instanceAdmin"), exports);
28
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,2CAAyB;AACzB,gDAA8B;AAC9B,kDAAgC;AAChC,+CAA6B;AAC7B,iDAA+B;AAC/B,4CAA0B;AAC1B,6CAA2B;AAC3B,+EAA6D;AAC7D,6DAA0C;AAC1C,sEAAoD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,2CAAyB;AACzB,gDAA8B;AAC9B,kDAAgC;AAChC,+CAA6B;AAC7B,iDAA+B;AAC/B,4CAA0B;AAC1B,6CAA2B;AAC3B,+EAA6D;AAC7D,6DAA0C;AAC1C,qEAAmD"}
@@ -0,0 +1,44 @@
1
+ import { Pattern } from "./utils";
2
+ import { PermissionModel } from "./permission-utils";
3
+ import { Transaction } from "ethers";
4
+ export interface BytesRole {
5
+ name: string;
6
+ identifier: string;
7
+ }
8
+ export interface ContractMetadataDetails {
9
+ name: string;
10
+ pattern: Pattern;
11
+ address: string;
12
+ permissionModel?: PermissionModel[];
13
+ }
14
+ export interface TransactionData {
15
+ transaction: Transaction;
16
+ description?: string;
17
+ }
18
+ export declare class ContractAdmin {
19
+ contractName: string;
20
+ pattern: Pattern;
21
+ address: string;
22
+ permissionModel: PermissionModel[];
23
+ private grantOwnershipRoleTxs;
24
+ private revokeOwnershipTxs;
25
+ constructor(details: ContractMetadataDetails);
26
+ createGrantOwnershipTransactions(oldOwner: string, newOwner: string, bytes32RolesToCheck: BytesRole[]): Promise<void>;
27
+ createRevokeOwnershipTransactions(oldOwner: string, newOwner: string, bytes32RolesToCheck: BytesRole[]): Promise<void>;
28
+ getGrantOwnershipTransactions(): TransactionData[];
29
+ getRevokeOwnershipTransactions(): TransactionData[];
30
+ clearRevokeTransactions(): void;
31
+ clearGrantTransactions(): void;
32
+ requiresOwnershipGranting(): boolean;
33
+ requiresOwnershipRevoking(): boolean;
34
+ displayData(columnWidths: {
35
+ maxNameWidth: number;
36
+ maxAddressWidth: number;
37
+ maxPermissionsWidth: number;
38
+ }): void;
39
+ private createTUPPGrantOwnershipTransaction;
40
+ private createOwnableOwnershipTransaction;
41
+ private createAssignBytes32RolesTransactions;
42
+ private createRevokeBytes32RolesTransactions;
43
+ private isDuplicateTransaction;
44
+ }
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ContractAdmin = void 0;
7
+ // Cspell:words TUPP
8
+ const utils_1 = require("./utils");
9
+ const permission_utils_1 = require("./permission-utils");
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ class ContractAdmin {
12
+ constructor(details) {
13
+ this.permissionModel = [];
14
+ this.grantOwnershipRoleTxs = [];
15
+ this.revokeOwnershipTxs = [];
16
+ this.contractName = details.name;
17
+ this.pattern = details.pattern;
18
+ this.address = details.address;
19
+ this.permissionModel = details.permissionModel ?? [];
20
+ }
21
+ async createGrantOwnershipTransactions(oldOwner, newOwner, bytes32RolesToCheck) {
22
+ if (!this.grantOwnershipRoleTxs.length) {
23
+ console.log(chalk_1.default.white(`* Creating Transactions to grant Ownership in ${this.contractName}.`));
24
+ if (this.pattern === utils_1.Pattern.TUPP) {
25
+ await this.createTUPPGrantOwnershipTransaction(oldOwner, newOwner);
26
+ }
27
+ if (this.permissionModel.includes(permission_utils_1.PermissionModel.OWNABLE)) {
28
+ await this.createOwnableOwnershipTransaction(oldOwner, newOwner);
29
+ }
30
+ if (this.permissionModel.includes(permission_utils_1.PermissionModel.ROLE_BASED)) {
31
+ await this.createAssignBytes32RolesTransactions(oldOwner, newOwner, bytes32RolesToCheck);
32
+ }
33
+ if (this.permissionModel.includes(permission_utils_1.PermissionModel.ACCESS_MANAGER)) {
34
+ console.log(chalk_1.default.yellow("Not implemented yet: Access Manager role assignments."));
35
+ }
36
+ }
37
+ }
38
+ async createRevokeOwnershipTransactions(oldOwner, newOwner, bytes32RolesToCheck) {
39
+ if (this.revokeOwnershipTxs.length) {
40
+ return;
41
+ }
42
+ console.log(chalk_1.default.white(`* Creating Transactions to revoke Ownership in ${this.contractName}.`));
43
+ if (this.permissionModel.includes(permission_utils_1.PermissionModel.ROLE_BASED)) {
44
+ await this.createRevokeBytes32RolesTransactions(oldOwner, newOwner, bytes32RolesToCheck);
45
+ }
46
+ if (this.permissionModel.includes(permission_utils_1.PermissionModel.ACCESS_MANAGER)) {
47
+ console.log(chalk_1.default.yellow("Not implemented yet: Access Manager role revocations."));
48
+ }
49
+ }
50
+ getGrantOwnershipTransactions() {
51
+ return this.grantOwnershipRoleTxs;
52
+ }
53
+ getRevokeOwnershipTransactions() {
54
+ return this.revokeOwnershipTxs;
55
+ }
56
+ clearRevokeTransactions() {
57
+ this.revokeOwnershipTxs = [];
58
+ }
59
+ clearGrantTransactions() {
60
+ this.grantOwnershipRoleTxs = [];
61
+ }
62
+ requiresOwnershipGranting() {
63
+ return Boolean(this.grantOwnershipRoleTxs.length);
64
+ }
65
+ requiresOwnershipRevoking() {
66
+ return Boolean(this.revokeOwnershipTxs.length);
67
+ }
68
+ displayData(columnWidths) {
69
+ const { maxNameWidth, maxAddressWidth, maxPermissionsWidth } = columnWidths;
70
+ const name = this.contractName.padEnd(maxNameWidth);
71
+ const address = this.address.padEnd(maxAddressWidth);
72
+ const permissions = (this.permissionModel?.join(", ") || "None").padEnd(maxPermissionsWidth);
73
+ let status = chalk_1.default.green("ALL DONE");
74
+ if (this.grantOwnershipRoleTxs.length) {
75
+ status = chalk_1.default.yellow("GRANT OWNERSHIP REQUIRED");
76
+ }
77
+ else if (this.revokeOwnershipTxs.length) {
78
+ status = chalk_1.default.yellow("REVOKE ROLES REQUIRED");
79
+ }
80
+ console.log(chalk_1.default.gray(` ${name} ${address} ${permissions} `) + status);
81
+ }
82
+ // TODO: Handle case where 1 proxy admin manages multiple proxies
83
+ async createTUPPGrantOwnershipTransaction(oldOwner, newOwner) {
84
+ const admin = await (0, utils_1.getAdminAddress)(this.address);
85
+ await this.createOwnableOwnershipTransaction(oldOwner, newOwner, { address: admin, name: `${this.contractName} Proxy Admin` });
86
+ }
87
+ async createOwnableOwnershipTransaction(oldOwner, newOwner, contractId = { address: this.address, name: this.contractName }) {
88
+ const tx = await (0, permission_utils_1.transferOwnership)(contractId.address, newOwner, oldOwner);
89
+ if (tx) {
90
+ if (this.isDuplicateTransaction({ transaction: tx })) {
91
+ // Shares proxy admin with another contract - tx already created
92
+ return;
93
+ }
94
+ const description = `-> Tx to change ${contractId.name} Owner at ${contractId.address} to ${newOwner}`;
95
+ console.log(chalk_1.default.yellow(` ${description} created.`));
96
+ this.grantOwnershipRoleTxs.push({
97
+ description,
98
+ transaction: tx
99
+ });
100
+ }
101
+ }
102
+ async createAssignBytes32RolesTransactions(oldOwner, newOwner, bytes32RolesToCheck) {
103
+ for (const role of bytes32RolesToCheck) {
104
+ // eslint-disable-next-line no-await-in-loop
105
+ const tx = await (0, permission_utils_1.grantRole)(this.address, role.identifier, newOwner, oldOwner);
106
+ if (tx) {
107
+ if (this.isDuplicateTransaction({ transaction: tx })) {
108
+ // Unexpected - better check
109
+ throw new Error(`Error: Transaction to grant role ${role} in ${this.contractName} was already created.`);
110
+ }
111
+ else {
112
+ const description = `-> Tx to grant role ${role.name} to ${newOwner} in ${this.contractName}`;
113
+ console.log(chalk_1.default.yellow(` ${description} created.`));
114
+ this.grantOwnershipRoleTxs.push({ description, transaction: tx });
115
+ }
116
+ }
117
+ }
118
+ }
119
+ async createRevokeBytes32RolesTransactions(oldOwner, newOwner, bytes32RolesToCheck) {
120
+ for (const role of bytes32RolesToCheck) {
121
+ // Required to process sequentially due to order of transactions - 0x00 role last
122
+ // eslint-disable-next-line no-await-in-loop
123
+ const tx = await (0, permission_utils_1.revokeRole)(this.address, role.identifier, oldOwner);
124
+ if (typeof tx !== "boolean" && tx) {
125
+ if (this.isDuplicateTransaction({ transaction: tx })) {
126
+ // Unexpected - better check
127
+ throw new Error(`Error: Transaction to revoke role ${role} in ${this.contractName} was already created.`);
128
+ }
129
+ else {
130
+ const description = `-> Tx to revoke role ${role.name} from ${oldOwner} in ${this.contractName}`;
131
+ console.log(chalk_1.default.yellow(` ${description} created.`));
132
+ this.revokeOwnershipTxs.push({ description, transaction: tx });
133
+ }
134
+ }
135
+ else if (!tx) {
136
+ console.log(chalk_1.default.yellow(` WARNING: Skipping revocation of role ${role.name} in ${this.contractName} as it requires at least 1 member left.`));
137
+ }
138
+ }
139
+ }
140
+ isDuplicateTransaction(transaction) {
141
+ const isGrantDuplicate = this.grantOwnershipRoleTxs.some((existingTx) => existingTx.transaction.to === transaction.transaction.to &&
142
+ existingTx.transaction.data === transaction.transaction.data);
143
+ const isRevokeDuplicate = this.revokeOwnershipTxs.some((existingTx) => existingTx.transaction.to === transaction.transaction.to &&
144
+ existingTx.transaction.data === transaction.transaction.data);
145
+ return isGrantDuplicate || isRevokeDuplicate;
146
+ }
147
+ }
148
+ exports.ContractAdmin = ContractAdmin;
149
+ //# sourceMappingURL=contractAdmin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contractAdmin.js","sourceRoot":"","sources":["../../../src/ownership-transfer/contractAdmin.ts"],"names":[],"mappings":";;;;;;AAAA,oBAAoB;AACpB,mCAAiD;AACjD,yDAA6F;AAE7F,kDAA0B;AAmB1B,MAAa,aAAa;IAStB,YAAY,OAAgC;QALrC,oBAAe,GAAsB,EAAE,CAAC;QAEvC,0BAAqB,GAAsB,EAAE,CAAC;QAC9C,uBAAkB,GAAsB,EAAE,CAAC;QAG/C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC;IACzD,CAAC;IAEM,KAAK,CAAC,gCAAgC,CACzC,QAAgB,EAChB,QAAgB,EAChB,mBAAgC;QAGhC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iDAAiD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YAChG,IAAI,IAAI,CAAC,OAAO,KAAK,eAAO,CAAC,IAAI,EAAE,CAAC;gBAChC,MAAM,IAAI,CAAC,mCAAmC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,kCAAe,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,CAAC,iCAAiC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,kCAAe,CAAC,UAAU,CAAC,EAAC,CAAC;gBAC3D,MAAM,IAAI,CAAC,oCAAoC,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;YAC7F,CAAC;YACD,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,kCAAe,CAAC,cAAc,CAAC,EAAC,CAAC;gBAC/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC,CAAC;YACvF,CAAC;QACL,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,iCAAiC,CAC1C,QAAgB,EAChB,QAAgB,EAChB,mBAAgC;QAGhC,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO;QACX,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kDAAkD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACjG,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,kCAAe,CAAC,UAAU,CAAC,EAAC,CAAC;YAC3D,MAAM,IAAI,CAAC,oCAAoC,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,kCAAe,CAAC,cAAc,CAAC,EAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC,CAAC;QACvF,CAAC;IACL,CAAC;IAEM,6BAA6B;QAChC,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACtC,CAAC;IAEM,8BAA8B;QACjC,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAEM,uBAAuB;QAC1B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;IACjC,CAAC;IAEM,sBAAsB;QACzB,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;IACpC,CAAC;IAEM,yBAAyB;QAC5B,OAAO,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAEM,yBAAyB;QAC5B,OAAO,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAEM,WAAW,CACd,YAA0F;QAE1F,MAAM,EAAC,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAC,GAAG,YAAY,CAAC;QAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC7F,IAAI,MAAM,GAAG,eAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAC,CAAC;YACnC,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACtD,CAAC;aACI,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAC,CAAC;YACrC,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,KAAK,WAAW,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IAChF,CAAC;IAED,iEAAiE;IACzD,KAAK,CAAC,mCAAmC,CAC7C,QAAgB,EAChB,QAAgB;QAEhB,MAAM,KAAK,GAAG,MAAM,IAAA,uBAAe,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,iCAAiC,CACxC,QAAQ,EACR,QAAQ,EACR,EAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,cAAc,EAAC,CAC7D,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,iCAAiC,CAC3C,QAAgB,EAChB,QAAgB,EAChB,aAA8C,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAC;QAE9F,MAAM,EAAE,GAAG,MAAM,IAAA,oCAAiB,EAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC3E,IAAI,EAAE,EAAE,CAAC;YACL,IAAI,IAAI,CAAC,sBAAsB,CAAC,EAAC,WAAW,EAAE,EAAE,EAAC,CAAC,EAAE,CAAC;gBACrD,gEAAgE;gBAC5D,OAAO;YACX,CAAC;YACD,MAAM,WAAW,GAAG,mBAAmB,UAAU,CAAC,IAAI,aAAa,UAAU,CAAC,OAAO,OAAO,QAAQ,EAAE,CAAA;YACtG,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,MAAM,CACR,OAAO,WAAW,WAAW,CAChC,CACJ,CAAC;YACF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;gBAC5B,WAAW;gBACX,WAAW,EAAE,EAAE;aAClB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,oCAAoC,CAC9C,QAAgB,EAChB,QAAgB,EAChB,mBAAgC;QAEhC,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;YACrC,4CAA4C;YAC5C,MAAM,EAAE,GAAG,MAAM,IAAA,4BAAS,EAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9E,IAAI,EAAE,EAAE,CAAC;gBACL,IAAI,IAAI,CAAC,sBAAsB,CAAC,EAAC,WAAW,EAAE,EAAE,EAAC,CAAC,EAAE,CAAC;oBACjD,4BAA4B;oBAC5B,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,OAAO,IAAI,CAAC,YAAY,uBAAuB,CAAC,CAAC;gBAC7G,CAAC;qBACI,CAAC;oBACF,MAAM,WAAW,GAAG,uBAAuB,IAAI,CAAC,IAAI,OAAO,QAAQ,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC9F,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,MAAM,CACR,OAAO,WAAW,WAAW,CAChC,CACJ,CAAC;oBACF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAC,WAAW,EAAE,WAAW,EAAE,EAAE,EAAC,CAAC,CAAC;gBACpE,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,oCAAoC,CAC9C,QAAgB,EAChB,QAAgB,EAChB,mBAAgC;QAEhC,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;YACrC,iFAAiF;YACjF,4CAA4C;YAC5C,MAAM,EAAE,GAAG,MAAM,IAAA,6BAAU,EAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACrE,IAAI,OAAO,EAAE,KAAK,SAAS,IAAI,EAAE,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,sBAAsB,CAAC,EAAC,WAAW,EAAE,EAAE,EAAC,CAAC,EAAE,CAAC;oBACjD,4BAA4B;oBAC5B,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,OAAO,IAAI,CAAC,YAAY,uBAAuB,CAAC,CAAC;gBAC9G,CAAC;qBACI,CAAC;oBACF,MAAM,WAAW,GAAG,wBAAwB,IAAI,CAAC,IAAI,SAAS,QAAQ,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;oBACjG,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,MAAM,CACR,OAAO,WAAW,WAAW,CAChC,CACJ,CAAC;oBACF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAC,WAAW,EAAE,WAAW,EAAE,EAAE,EAAC,CAAC,CAAC;gBACjE,CAAC;YACL,CAAC;iBACI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CACpB,4CAA4C,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,YAAY,yCAAyC,CACzH,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,WAA4B;QACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CACpD,CAAC,UAAU,EAAE,EAAE,CACX,UAAU,CAAC,WAAW,CAAC,EAAE,KAAK,WAAW,CAAC,WAAW,CAAC,EAAE;YACxD,UAAU,CAAC,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,WAAW,CAAC,IAAI,CACnE,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAClD,CAAC,UAAU,EAAE,EAAE,CACX,UAAU,CAAC,WAAW,CAAC,EAAE,KAAK,WAAW,CAAC,WAAW,CAAC,EAAE;YACxD,UAAU,CAAC,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,WAAW,CAAC,IAAI,CACnE,CAAC;QACF,OAAQ,gBAAgB,IAAI,iBAAiB,CAAC;IAClD,CAAC;CACJ;AA9MD,sCA8MC"}
@@ -0,0 +1,41 @@
1
+ import { EoaSubmitter, SafeSubmitter } from "../submitters";
2
+ import { Instance } from "@skalenetwork/skale-contracts-ethers-v6";
3
+ export interface InstanceAdminOptions {
4
+ oldOwner: string;
5
+ submitter: SafeSubmitter | EoaSubmitter;
6
+ revokeRoles: boolean;
7
+ newOwner: string;
8
+ readonly: boolean;
9
+ rolesToCheck?: string[];
10
+ managerRolesToCheck?: number[];
11
+ }
12
+ export declare class InstanceAdmin {
13
+ private instance;
14
+ private contractMetadata;
15
+ private contractNames;
16
+ private bytes32RolesToCheck;
17
+ private managerRolesToCheck;
18
+ private oldOwner;
19
+ private newOwner;
20
+ private readonly;
21
+ private submitter;
22
+ private revokeRoles;
23
+ constructor(instance: Instance, contractNames: string[], options: InstanceAdminOptions);
24
+ private initialize;
25
+ private processGrantStepIfRequired;
26
+ private processRevokeStepIfRequired;
27
+ executeOwnershipTransfer(): Promise<void>;
28
+ private submitRevokeRolesTransactions;
29
+ private submitGrantOwnershipTransactions;
30
+ private ownershipGrantingRequired;
31
+ private ownershipRevokingRequired;
32
+ private loadContractMetadataAndCreateTransactions;
33
+ private confirmData;
34
+ private processOptions;
35
+ private createRequiredTransactions;
36
+ private getColumnWidths;
37
+ private displayPatternGroup;
38
+ private displayFindings;
39
+ private handleUserRejection;
40
+ private groupMetadataByPattern;
41
+ }
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ // Cspell:words keccak
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.InstanceAdmin = void 0;
8
+ const contractAdmin_1 = require("./contractAdmin");
9
+ const utils_1 = require("./utils");
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const hardhat_1 = require("hardhat");
12
+ const permission_utils_1 = require("./permission-utils");
13
+ const ZERO = 0;
14
+ class InstanceAdmin {
15
+ constructor(instance, contractNames, options) {
16
+ this.contractMetadata = new Map();
17
+ this.bytes32RolesToCheck = [];
18
+ this.managerRolesToCheck = [];
19
+ this.instance = instance;
20
+ this.contractNames = contractNames;
21
+ this.processOptions(options);
22
+ }
23
+ async initialize() {
24
+ await this.loadContractMetadataAndCreateTransactions();
25
+ await this.confirmData();
26
+ }
27
+ async processGrantStepIfRequired() {
28
+ if (this.ownershipGrantingRequired()) {
29
+ await this.submitGrantOwnershipTransactions();
30
+ // TODO: Create step to wait for txs to be confirmed in case of Multisig submitter
31
+ if (this.revokeRoles) {
32
+ await this.createRequiredTransactions();
33
+ }
34
+ await this.confirmData();
35
+ }
36
+ }
37
+ async processRevokeStepIfRequired() {
38
+ if (this.revokeRoles && this.ownershipRevokingRequired() === true) {
39
+ await this.submitRevokeRolesTransactions();
40
+ // TODO: Create step to wait for txs to be confirmed in case of Multisig submitter
41
+ await this.createRequiredTransactions();
42
+ }
43
+ }
44
+ async executeOwnershipTransfer() {
45
+ // Confirm data found in initialization
46
+ await this.initialize();
47
+ if (this.readonly) {
48
+ return;
49
+ }
50
+ await this.processGrantStepIfRequired();
51
+ await this.processRevokeStepIfRequired();
52
+ this.displayFindings();
53
+ if (this.ownershipGrantingRequired() || this.ownershipRevokingRequired() && this.revokeRoles) {
54
+ console.error(chalk_1.default.red("Unexpected state: There are still actions requires."));
55
+ }
56
+ else {
57
+ console.log(chalk_1.default.green("Ownership transfer process completed. - Nothing more to do."));
58
+ }
59
+ }
60
+ // eslint-disable-next-line max-statements
61
+ async submitRevokeRolesTransactions() {
62
+ const txsToSubmit = [];
63
+ for (const contract of this.contractMetadata.values()) {
64
+ const revokeTxs = contract.getRevokeOwnershipTransactions();
65
+ txsToSubmit.push(...revokeTxs);
66
+ contract.clearRevokeTransactions();
67
+ }
68
+ console.log(chalk_1.default.green(`Submitting ${txsToSubmit.length} revoke ownership transactions...`));
69
+ for (const [index, txData] of txsToSubmit.entries()) {
70
+ console.log(chalk_1.default.grey(` -> Transaction ${index}: ${txData.description || "No description"}`));
71
+ }
72
+ const confirmation = await (0, utils_1.promptUserConfirmation)("Do you want to proceed with submitting these transactions?");
73
+ if (!confirmation) {
74
+ throw new Error("Transaction submission aborted by user.");
75
+ }
76
+ await this.submitter.submit(txsToSubmit.map(tx => tx.transaction));
77
+ }
78
+ // eslint-disable-next-line max-statements
79
+ async submitGrantOwnershipTransactions() {
80
+ const txsToSubmit = [];
81
+ for (const contract of this.contractMetadata.values()) {
82
+ const grantTxs = contract.getGrantOwnershipTransactions();
83
+ txsToSubmit.push(...grantTxs);
84
+ contract.clearGrantTransactions();
85
+ }
86
+ // Required for ProxyAdmins shared among multiple contracts
87
+ const txsToSubmitFiltered = (0, utils_1.removeDuplicateTransactions)(txsToSubmit);
88
+ console.log(chalk_1.default.green(`Submitting ${txsToSubmitFiltered.length} unique grant ownership transactions...`));
89
+ for (const [index, txData] of txsToSubmitFiltered.entries()) {
90
+ console.log(chalk_1.default.grey(` -> Transaction ${index}: ${txData.description || "No description"}`));
91
+ }
92
+ const confirmation = await (0, utils_1.promptUserConfirmation)("Do you want to proceed with submitting these transactions?");
93
+ if (!confirmation) {
94
+ throw new Error("Transaction submission aborted by user.");
95
+ }
96
+ await this.submitter.submit(txsToSubmitFiltered.map(tx => tx.transaction));
97
+ }
98
+ ownershipGrantingRequired() {
99
+ return Array.from(this.contractMetadata.values()).some(contract => contract.requiresOwnershipGranting());
100
+ }
101
+ ownershipRevokingRequired() {
102
+ return Array.from(this.contractMetadata.values()).some(contract => contract.requiresOwnershipRevoking());
103
+ }
104
+ async loadContractMetadataAndCreateTransactions() {
105
+ /* eslint-disable no-await-in-loop */
106
+ // Do not parallelize to avoid rate limit issues which CAN produce wrong outputs
107
+ for (const contractName of this.contractNames) {
108
+ /*
109
+ * We use getContractAddress to not depend on downloaded ABI artifacts
110
+ * all ABIs are checked locally
111
+ */
112
+ const address = await this.instance.getContractAddress(contractName);
113
+ if (!this.contractMetadata.has(address)) {
114
+ const pattern = await (0, utils_1.detectPattern)(address);
115
+ const details = {
116
+ address,
117
+ name: contractName,
118
+ pattern,
119
+ permissionModel: await (0, permission_utils_1.getPermissionModels)(address)
120
+ };
121
+ this.contractMetadata.set(address, new contractAdmin_1.ContractAdmin(details));
122
+ }
123
+ }
124
+ /* eslint-enable no-await-in-loop */
125
+ await this.createRequiredTransactions();
126
+ }
127
+ async confirmData() {
128
+ this.displayFindings();
129
+ const userConfirmed = await (0, utils_1.promptUserConfirmation)();
130
+ if (!userConfirmed) {
131
+ this.handleUserRejection();
132
+ }
133
+ console.log(chalk_1.default.green("\nUser confirmed. Proceeding...\n"));
134
+ }
135
+ // By 1
136
+ // eslint-disable-next-line max-statements
137
+ processOptions(options) {
138
+ // If true, does not allow to send transactions to blockchain
139
+ this.readonly = options.readonly;
140
+ this.newOwner = options.newOwner;
141
+ this.bytes32RolesToCheck = (options.rolesToCheck ?? []).map(role => ({
142
+ identifier: hardhat_1.ethers.id(role),
143
+ name: role
144
+ }));
145
+ this.submitter = options.submitter;
146
+ // Always have DEFAULT_ADMIN_ROLE at the end!
147
+ this.bytes32RolesToCheck.push({ identifier: hardhat_1.ethers.ZeroHash, name: "DEFAULT_ADMIN_ROLE" });
148
+ if (!this.readonly && this.newOwner === hardhat_1.ethers.ZeroAddress) {
149
+ throw new Error("New owner address must be provided in options when in write mode.");
150
+ }
151
+ this.managerRolesToCheck = (options.managerRolesToCheck ?? []).map(role => {
152
+ if (typeof role !== "number" || !Number.isInteger(role) || role < ZERO) {
153
+ throw new Error(`Invalid manager role: ${role}. Must be a non-negative integer.`);
154
+ }
155
+ return { identifier: role, name: `Role ${role}` };
156
+ });
157
+ // Always have ADMIN_ROLE at the end!
158
+ this.managerRolesToCheck.push({ identifier: ZERO, name: "ADMIN_ROLE" });
159
+ this.oldOwner = options.oldOwner;
160
+ this.revokeRoles = options.revokeRoles;
161
+ }
162
+ async createRequiredTransactions() {
163
+ // Clear previous transactions
164
+ console.log(chalk_1.default.grey("INFO: The next Following steps will NOT submit any transactions to the blockchain."));
165
+ // Required to be processed sequentially - `performance` is not an issue here
166
+ /* eslint-disable no-await-in-loop */
167
+ for (const contract of this.contractMetadata.values()) {
168
+ await contract.createGrantOwnershipTransactions(this.oldOwner, this.newOwner, this.bytes32RolesToCheck
169
+ //TODO: this.managerRolesToCheck
170
+ );
171
+ if (!contract.requiresOwnershipGranting()) {
172
+ await contract.createRevokeOwnershipTransactions(this.oldOwner, this.newOwner, this.bytes32RolesToCheck);
173
+ }
174
+ }
175
+ /* eslint-enable no-await-in-loop */
176
+ }
177
+ getColumnWidths() {
178
+ let maxNameWidth = 0;
179
+ let maxAddressWidth = 0;
180
+ let maxPermissionsWidth = 0;
181
+ for (const contract of this.contractMetadata.values()) {
182
+ maxNameWidth = Math.max(maxNameWidth, contract.contractName.length);
183
+ maxAddressWidth = Math.max(maxAddressWidth, contract.address.length);
184
+ const permissions = contract.permissionModel?.join(", ") || "None";
185
+ maxPermissionsWidth = Math.max(maxPermissionsWidth, permissions.length);
186
+ }
187
+ return { maxAddressWidth, maxNameWidth, maxPermissionsWidth };
188
+ }
189
+ // eslint-disable-next-line max-statements
190
+ displayPatternGroup(pattern, contracts) {
191
+ const columnWidths = this.getColumnWidths();
192
+ console.log(chalk_1.default.bold(`\n${pattern} Pattern (${contracts.length} contracts):`));
193
+ for (const contract of contracts) {
194
+ contract.displayData(columnWidths);
195
+ }
196
+ }
197
+ displayFindings() {
198
+ console.log(chalk_1.default.cyan("\n=== Ownership Status Results ===\n"));
199
+ const groupedByPattern = this.groupMetadataByPattern();
200
+ for (const [pattern, contracts] of Object.entries(groupedByPattern)) {
201
+ if (contracts.length) {
202
+ this.displayPatternGroup(pattern, contracts);
203
+ }
204
+ }
205
+ console.log(chalk_1.default.cyan("\n==========================================\n"));
206
+ }
207
+ handleUserRejection() {
208
+ console.log(chalk_1.default.red("User did not confirm. Aborting and clearing all data..."));
209
+ this.contractMetadata.clear();
210
+ throw new Error("User aborted because some data was inaccurate. Data has been cleared.");
211
+ }
212
+ groupMetadataByPattern() {
213
+ const grouped = Object.values(utils_1.Pattern).
214
+ reduce((acc, pattern) => {
215
+ acc[pattern] = [];
216
+ return acc;
217
+ }, {});
218
+ for (const metadata of this.contractMetadata.values()) {
219
+ grouped[metadata.pattern].push(metadata);
220
+ }
221
+ return grouped;
222
+ }
223
+ }
224
+ exports.InstanceAdmin = InstanceAdmin;
225
+ //# sourceMappingURL=instanceAdmin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instanceAdmin.js","sourceRoot":"","sources":["../../../src/ownership-transfer/instanceAdmin.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ export declare const tryGetMultiSigInfo: (contractAddress: string) => Promise<{
13
13
  owners: string[] | null;
14
14
  threshold: bigint | null;
15
15
  }>;
16
- export declare const transferOwnership: (contractAddress: string, newOwner: string, oldOwner: string) => Promise<Transaction | true>;
17
- export declare const grantRole: (contractAddress: string, role: string, newAccount: AddressLike, oldAccount: AddressLike) => Promise<Transaction | true>;
16
+ export declare const transferOwnership: (contractAddress: string, newOwner: string, oldOwner: string) => Promise<Transaction | false>;
17
+ export declare const grantRole: (contractAddress: string, role: string, newAccount: AddressLike, oldAccount: AddressLike) => Promise<Transaction | false>;
18
18
  export declare const revokeRole: (contractAddress: string, role: string, oldAccount: AddressLike) => Promise<Transaction | boolean>;
19
19
  export declare const getPermissionModels: (address: AddressLike) => Promise<PermissionModel[]>;
@@ -217,7 +217,7 @@ exports.tryGetMultiSigInfo = tryGetMultiSigInfo;
217
217
  const transferOwnership = async (contractAddress, newOwner, oldOwner) => {
218
218
  const contract = new ethers_1.Contract(contractAddress, OWNABLE_ABI, hardhat_1.ethers.provider);
219
219
  if (await contract.owner() === newOwner) {
220
- return true;
220
+ return false;
221
221
  }
222
222
  if (await contract.owner() !== oldOwner) {
223
223
  throw new Error(`Current owner of contract ${contractAddress} does not match the provided old owner address.`);
@@ -249,7 +249,7 @@ const grantRole = async (contractAddress, role, newAccount, oldAccount
249
249
  * Check if the account already has the role OR if the oldAccount does not have it - no action
250
250
  */
251
251
  if (await contract.hasRole(role, newAccount) || !await contract.hasRole(role, oldAccount)) {
252
- return true;
252
+ return false;
253
253
  }
254
254
  if (!await contract.hasRole(hardhat_1.ethers.ZeroHash, oldAccount)) {
255
255
  throw new Error(`Account ${oldAccount} does not have permission to grant roles on contract ${contractAddress}.`);
@@ -1 +1 @@
1
- {"version":3,"file":"permission-utils.js","sourceRoot":"","sources":["../../../src/ownership-transfer/permission-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permission-utils.js","sourceRoot":"","sources":["../../../src/ownership-transfer/permission-utils.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { AddressLike } from "ethers";
2
+ import { TransactionData } from "./contractAdmin";
2
3
  export declare enum Pattern {
3
4
  TUPP = "TUPP",
4
5
  BEACON = "BEACON",
@@ -14,3 +15,4 @@ export declare const identifyProxyPattern: (address: string) => Promise<Pattern>
14
15
  export declare const promptUserConfirmation: (message?: string) => Promise<boolean>;
15
16
  export declare const detectPattern: (address: AddressLike) => Promise<Pattern>;
16
17
  export declare const hasFunctionSelector: (address: string, signature: string) => Promise<boolean>;
18
+ export declare const removeDuplicateTransactions: (items: TransactionData[]) => TransactionData[];
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.hasFunctionSelector = exports.detectPattern = exports.promptUserConfirmation = exports.identifyProxyPattern = exports.isBeaconPattern = exports.isTUPPPattern = exports.getImplementationAddress = exports.getAdminAddress = exports.extractAddressFromSlot = exports.isContractAddress = exports.Pattern = void 0;
6
+ exports.removeDuplicateTransactions = exports.hasFunctionSelector = exports.detectPattern = exports.promptUserConfirmation = exports.identifyProxyPattern = exports.isBeaconPattern = exports.isTUPPPattern = exports.getImplementationAddress = exports.getAdminAddress = exports.extractAddressFromSlot = exports.isContractAddress = exports.Pattern = void 0;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
8
  const hardhat_1 = require("hardhat");
9
9
  const readline_1 = __importDefault(require("readline"));
@@ -176,4 +176,20 @@ const hasFunctionSelector = async (address, signature) => {
176
176
  }
177
177
  };
178
178
  exports.hasFunctionSelector = hasFunctionSelector;
179
+ const removeDuplicateTransactions = (items) => {
180
+ const seen = new Set();
181
+ return items.filter((item) => {
182
+ /*
183
+ * Create a unique composite key for the 'to' and 'data' pair.
184
+ * We use a separator ('|') to ensure 'a' + 'bc' doesn't clash with 'ab' + 'c'
185
+ */
186
+ const uniqueKey = `${item.transaction.to}|${item.transaction.data}`;
187
+ if (seen.has(uniqueKey)) {
188
+ return false;
189
+ }
190
+ seen.add(uniqueKey);
191
+ return true;
192
+ });
193
+ };
194
+ exports.removeDuplicateTransactions = removeDuplicateTransactions;
179
195
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/ownership-transfer/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/ownership-transfer/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skalenetwork/upgrade-tools",
3
- "version": "4.0.0-ownership-helpers.11",
3
+ "version": "4.0.0-ownership-helpers.12",
4
4
  "description": "Scripts to support upgrades of smart contracts",
5
5
  "files": [
6
6
  "dist/**/*"
@@ -1,51 +0,0 @@
1
- import { EoaSubmitter, SafeSubmitter } from "../submitters";
2
- import { Instance } from "@skalenetwork/skale-contracts-ethers-v6";
3
- export interface OwnershipAdminOptions {
4
- oldOwner: string;
5
- submitter: SafeSubmitter | EoaSubmitter;
6
- revokeRoles: boolean;
7
- newOwner: string;
8
- readonly: boolean;
9
- rolesToCheck?: string[];
10
- managerRolesToCheck?: number[];
11
- }
12
- export declare class OwnershipAdmin {
13
- private instance;
14
- private contractMetadata;
15
- private contractNames;
16
- private transactionsByContractName;
17
- private revokeTransactionsByContractName;
18
- private transactions;
19
- private revokeRolesTransactions;
20
- private bytes32RolesToCheck;
21
- private managerRolesToCheck;
22
- private newOwnerConfirmed;
23
- private oldOwner;
24
- private newOwner;
25
- private readonly;
26
- private submitter;
27
- private revokeRoles;
28
- constructor(instance: Instance, contractNames: string[], options: OwnershipAdminOptions);
29
- loadContractMetadataAndCreateTransactions(): Promise<void>;
30
- createRevokeRolesTransactions(): Promise<void>;
31
- submitGrantOwnershipTransactions(): Promise<void>;
32
- submitRevokeRolesTransactions(): Promise<void>;
33
- confirmData(): Promise<void>;
34
- private processOptions;
35
- private createRequiredTransactions;
36
- private getColumnWidths;
37
- private displayPatternGroup;
38
- private displayFindings;
39
- private handleUserRejection;
40
- private groupMetadataByPattern;
41
- private createTUPPOwnershipTransaction;
42
- private createOwnableOwnershipTransaction;
43
- private createAssignRolesTransactions;
44
- private createRevokeBytes32RolesTransactions;
45
- private createTxsToGrantContractOwnership;
46
- private promptConfirmNewOwner;
47
- private isDuplicateTransaction;
48
- private submitTransactions;
49
- private submitTransactionsForContract;
50
- private removeSubmittedTransactions;
51
- }
@@ -1,361 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.OwnershipAdmin = void 0;
7
- const utils_1 = require("./utils");
8
- const permission_utils_1 = require("./permission-utils");
9
- const chalk_1 = __importDefault(require("chalk"));
10
- const hardhat_1 = require("hardhat");
11
- const ZERO = 0;
12
- class OwnershipAdmin {
13
- constructor(instance, contractNames, options) {
14
- this.contractMetadata = new Map();
15
- this.transactionsByContractName = new Map();
16
- this.revokeTransactionsByContractName = new Map();
17
- this.transactions = [];
18
- this.revokeRolesTransactions = [];
19
- this.bytes32RolesToCheck = [];
20
- this.managerRolesToCheck = [];
21
- this.newOwnerConfirmed = false;
22
- this.instance = instance;
23
- this.contractNames = contractNames;
24
- this.processOptions(options);
25
- }
26
- async loadContractMetadataAndCreateTransactions() {
27
- /* eslint-disable no-await-in-loop */
28
- // Do not parallelize to avoid rate limit issues which CAN produce wrong outputs
29
- for (const contractName of this.contractNames) {
30
- /*
31
- * We use getContractAddress to not depend on downloaded ABI artifacts
32
- * all ABIs are checked locally
33
- */
34
- const address = await this.instance.getContractAddress(contractName);
35
- if (!this.contractMetadata.has(address)) {
36
- const pattern = await (0, utils_1.detectPattern)(address);
37
- const details = {
38
- address,
39
- name: contractName,
40
- pattern,
41
- permissionModel: await (0, permission_utils_1.getPermissionModels)(address)
42
- };
43
- this.contractMetadata.set(address, details);
44
- }
45
- }
46
- /* eslint-enable no-await-in-loop */
47
- if (this.contractMetadata.size !== this.contractNames.length) {
48
- throw new Error("Some contract names did not yield metadata. Names duplicated? Aborting...");
49
- }
50
- await this.createRequiredTransactions();
51
- await this.confirmData();
52
- }
53
- async createRevokeRolesTransactions() {
54
- for (const contract of this.contractMetadata.values()) {
55
- if (!this.revokeTransactionsByContractName.has(contract.name)) {
56
- this.revokeTransactionsByContractName.set(contract.name, []);
57
- }
58
- if (contract.permissionModel?.includes(permission_utils_1.PermissionModel.ROLE_BASED)) {
59
- // Required to be in order - Admin last
60
- // eslint-disable-next-line no-await-in-loop
61
- const txs = await this.createRevokeBytes32RolesTransactions(contract);
62
- txs.forEach(txData => {
63
- this.revokeRolesTransactions.push(txData.transaction);
64
- this.revokeTransactionsByContractName.get(contract.name).push(txData);
65
- });
66
- }
67
- if (contract.permissionModel?.includes(permission_utils_1.PermissionModel.ACCESS_MANAGER)) {
68
- console.log(chalk_1.default.yellow("Not implemented yet: Access Manager role revocations."));
69
- }
70
- }
71
- await this.confirmData();
72
- }
73
- async submitGrantOwnershipTransactions() {
74
- await this.submitTransactions(this.transactions, this.transactionsByContractName);
75
- }
76
- async submitRevokeRolesTransactions() {
77
- await this.submitTransactions(this.revokeRolesTransactions, this.revokeTransactionsByContractName);
78
- }
79
- async confirmData() {
80
- this.displayFindings();
81
- const userConfirmed = await (0, utils_1.promptUserConfirmation)();
82
- if (!userConfirmed) {
83
- this.handleUserRejection();
84
- }
85
- console.log(chalk_1.default.green("\nUser confirmed. Proceeding...\n"));
86
- }
87
- // By 1
88
- // eslint-disable-next-line max-statements
89
- processOptions(options) {
90
- // If true, does not allow to send transactions to blockchain
91
- this.readonly = options.readonly;
92
- this.newOwner = options.newOwner;
93
- this.bytes32RolesToCheck = (options.rolesToCheck ?? []).map(role => ({
94
- identifier: hardhat_1.ethers.id(role),
95
- name: role
96
- }));
97
- this.submitter = options.submitter;
98
- // Always have DEFAULT_ADMIN_ROLE at the end!
99
- this.bytes32RolesToCheck.push({ identifier: hardhat_1.ethers.ZeroHash, name: "DEFAULT_ADMIN_ROLE" });
100
- if (!this.readonly && this.newOwner === hardhat_1.ethers.ZeroAddress) {
101
- throw new Error("New owner address must be provided in options when in write mode.");
102
- }
103
- this.managerRolesToCheck = (options.managerRolesToCheck ?? []).map(role => {
104
- if (typeof role !== "number" || !Number.isInteger(role) || role < ZERO) {
105
- throw new Error(`Invalid manager role: ${role}. Must be a non-negative integer.`);
106
- }
107
- return { identifier: role, name: `Role ${role}` };
108
- });
109
- // Always have ADMIN_ROLE at the end!
110
- this.managerRolesToCheck.push({ identifier: ZERO, name: "ADMIN_ROLE" });
111
- this.oldOwner = options.oldOwner;
112
- this.revokeRoles = options.revokeRoles;
113
- }
114
- async createRequiredTransactions() {
115
- // Clear previous transactions
116
- console.log(chalk_1.default.grey("INFO: The next Following steps will NOT submit any transactions to the blockchain."));
117
- if (!this.readonly && !this.newOwnerConfirmed) {
118
- await this.promptConfirmNewOwner();
119
- }
120
- for (const contract of this.contractMetadata.values()) {
121
- // eslint-disable-next-line no-await-in-loop
122
- const txs = await this.createTxsToGrantContractOwnership(contract);
123
- this.transactionsByContractName.set(contract.name, txs);
124
- txs.forEach(txData => this.transactions.push(txData.transaction));
125
- }
126
- if (!this.transactions.length) {
127
- console.log(chalk_1.default.green("No ownership transfer transactions required."));
128
- await this.createRevokeRolesTransactions();
129
- }
130
- }
131
- getColumnWidths() {
132
- let maxNameWidth = 0;
133
- let maxAddressWidth = 0;
134
- let maxPermissionsWidth = 0;
135
- for (const contract of this.contractMetadata.values()) {
136
- maxNameWidth = Math.max(maxNameWidth, contract.name.length);
137
- maxAddressWidth = Math.max(maxAddressWidth, contract.address.length);
138
- const permissions = contract.permissionModel?.join(", ") || "None";
139
- maxPermissionsWidth = Math.max(maxPermissionsWidth, permissions.length);
140
- }
141
- return { maxAddressWidth, maxNameWidth, maxPermissionsWidth };
142
- }
143
- // eslint-disable-next-line max-statements
144
- displayPatternGroup(pattern, contracts) {
145
- const { maxNameWidth, maxAddressWidth, maxPermissionsWidth } = this.getColumnWidths();
146
- console.log(chalk_1.default.bold(`\n${pattern} Pattern (${contracts.length} contracts):`));
147
- for (const contract of contracts) {
148
- const name = contract.name.padEnd(maxNameWidth);
149
- const address = contract.address.padEnd(maxAddressWidth);
150
- const permissions = (contract.permissionModel?.join(", ") || "None").padEnd(maxPermissionsWidth);
151
- let status = chalk_1.default.green("ALL DONE");
152
- if (this.transactionsByContractName.get(contract.name)?.length) {
153
- status = chalk_1.default.yellow("GRANT OWNERSHIP REQUIRED");
154
- }
155
- else if (this.revokeTransactionsByContractName.get(contract.name)?.length) {
156
- status = chalk_1.default.yellow("REVOKE ROLES REQUIRED");
157
- }
158
- console.log(chalk_1.default.gray(` ${name} ${address} ${permissions} `) + status);
159
- }
160
- }
161
- displayFindings() {
162
- console.log(chalk_1.default.cyan("\n=== Ownership Status Results ===\n"));
163
- const groupedByPattern = this.groupMetadataByPattern();
164
- for (const [pattern, contracts] of Object.entries(groupedByPattern)) {
165
- if (contracts.length) {
166
- this.displayPatternGroup(pattern, contracts);
167
- }
168
- }
169
- console.log(chalk_1.default.cyan("\n==========================================\n"));
170
- }
171
- handleUserRejection() {
172
- console.log(chalk_1.default.red("User did not confirm. Aborting and clearing all data..."));
173
- this.contractMetadata.clear();
174
- this.transactions.length = 0;
175
- throw new Error("User aborted the operation. Data has been cleared.");
176
- }
177
- groupMetadataByPattern() {
178
- const grouped = Object.values(utils_1.Pattern).
179
- reduce((acc, pattern) => {
180
- acc[pattern] = [];
181
- return acc;
182
- }, {});
183
- for (const metadata of this.contractMetadata.values()) {
184
- grouped[metadata.pattern].push(metadata);
185
- }
186
- return grouped;
187
- }
188
- async createTUPPOwnershipTransaction(contractData) {
189
- const admin = await (0, utils_1.getAdminAddress)(contractData.address);
190
- const tx = await (0, permission_utils_1.transferOwnership)(admin, this.newOwner, this.oldOwner);
191
- if (typeof tx === "boolean" && tx) {
192
- return true;
193
- }
194
- else if (this.isDuplicateTransaction(tx)) {
195
- // Shares proxy admin with another contract - tx already created
196
- return true;
197
- }
198
- console.log(chalk_1.default.yellow(` -> Tx to change Proxy Admin Owner at ${admin} created.`));
199
- return {
200
- description: `-> Tx to change Proxy Admin Owner at ${admin} to ${this.newOwner}`,
201
- transaction: tx
202
- };
203
- }
204
- async createOwnableOwnershipTransaction(contractData) {
205
- const tx = await (0, permission_utils_1.transferOwnership)(contractData.address, this.newOwner, this.oldOwner);
206
- if (typeof tx === "boolean" && tx) {
207
- return true;
208
- }
209
- else if (this.isDuplicateTransaction(tx)) {
210
- throw new Error(`Error: Transaction to change Owner of ${contractData.name} was already created.`);
211
- }
212
- console.log(chalk_1.default.yellow(` -> Tx to change Owner of ${contractData.name} at ${contractData.address} created.`));
213
- return {
214
- description: `-> Tx to change Owner of ${contractData.name} at ${contractData.address} to ${this.newOwner}.`,
215
- transaction: tx
216
- };
217
- }
218
- async createAssignRolesTransactions(contractData) {
219
- const txs = [];
220
- /* eslint-disable no-await-in-loop */
221
- // Required to process sequentially due to order of transactions
222
- for (const role of this.bytes32RolesToCheck) {
223
- const tx = await (0, permission_utils_1.grantRole)(contractData.address, role.identifier, this.newOwner, this.oldOwner);
224
- if (typeof tx === "boolean" && tx) {
225
- // eslint-disable-next-line no-continue
226
- continue;
227
- }
228
- else if (this.isDuplicateTransaction(tx)) {
229
- // Unexpected - better check
230
- throw new Error(`Error: Transaction to grant role ${role} in ${contractData.name} was already created.`);
231
- }
232
- else {
233
- const description = `-> Tx to grant role ${role.name} to ${this.newOwner} in ${contractData.name}`;
234
- console.log(chalk_1.default.yellow(` ${description} created.`));
235
- txs.push({ description, transaction: tx });
236
- }
237
- }
238
- return txs;
239
- }
240
- async createRevokeBytes32RolesTransactions(contractData) {
241
- const txs = [];
242
- /* eslint-disable no-await-in-loop */
243
- // Required to process sequentially due to order of transactions
244
- for (const role of this.bytes32RolesToCheck) {
245
- const tx = await (0, permission_utils_1.revokeRole)(contractData.address, role.identifier, this.oldOwner);
246
- if (typeof tx === "boolean" && !tx) {
247
- console.log(chalk_1.default.yellow(` WARNING: Skipping revocation of role ${role.name} in ${contractData.name} as it requires at least 1 member left.`));
248
- }
249
- else if (typeof tx !== "boolean" && this.isDuplicateTransaction(tx)) {
250
- // Unexpected - better check
251
- throw new Error(`Error: Transaction to revoke role ${role} in ${contractData.name} was already created.`);
252
- }
253
- else if (typeof tx !== "boolean") {
254
- const description = `-> Tx to revoke role ${role.name} from ${this.oldOwner} in ${contractData.name}`;
255
- console.log(chalk_1.default.yellow(` ${description} created.`));
256
- txs.push({ description, transaction: tx });
257
- }
258
- }
259
- return txs;
260
- }
261
- // eslint-disable-next-line max-statements
262
- async createTxsToGrantContractOwnership(contractData) {
263
- console.log(chalk_1.default.white(`* Creating Transactions to change Ownership of ${contractData.name}.`));
264
- const txs = [];
265
- if (contractData.pattern === utils_1.Pattern.TUPP) {
266
- const tx = await this.createTUPPOwnershipTransaction(contractData);
267
- if (tx !== true) {
268
- txs.push(tx);
269
- }
270
- }
271
- if (contractData.permissionModel?.includes(permission_utils_1.PermissionModel.OWNABLE)) {
272
- const tx = await this.createOwnableOwnershipTransaction(contractData);
273
- if (tx !== true) {
274
- txs.push(tx);
275
- }
276
- }
277
- if (contractData.permissionModel?.includes(permission_utils_1.PermissionModel.ROLE_BASED)) {
278
- const txList = await this.createAssignRolesTransactions(contractData);
279
- if (txList.length) {
280
- txList.forEach(tx => txs.push(tx));
281
- }
282
- }
283
- if (contractData.permissionModel?.includes(permission_utils_1.PermissionModel.ACCESS_MANAGER)) {
284
- console.log(chalk_1.default.yellow("Not implemented yet: Access Manager role assignments."));
285
- }
286
- return txs;
287
- }
288
- // eslint-disable-next-line max-statements
289
- async promptConfirmNewOwner() {
290
- console.log(chalk_1.default.white(`You have specified the new owner address as ${this.newOwner}.`));
291
- const isContract = await (0, utils_1.isContractAddress)(this.newOwner);
292
- if (isContract) {
293
- console.log(chalk_1.default.yellow(` INFO: It appears to be a contract address.`));
294
- const { owners, threshold } = await (0, permission_utils_1.tryGetMultiSigInfo)(this.newOwner);
295
- let message = chalk_1.default.red(`WARNING: The script was unable to collect owners details.`);
296
- if (owners) {
297
- const ownersList = owners.join(", ");
298
- message = chalk_1.default.green(`INFO: Found owners of new Owner Multi-Sig: ${ownersList}`);
299
- }
300
- console.log(message);
301
- message = chalk_1.default.red(`WARNING: The script was unable to determine the Multi-Sig threshold.`);
302
- if (threshold) {
303
- message = chalk_1.default.green(`INFO: Multi-Sig threshold is set to ${threshold}.`);
304
- }
305
- console.log(message);
306
- }
307
- if (!await (0, utils_1.promptUserConfirmation)("")) {
308
- throw new Error("User did not confirm the new owner address. Aborting...");
309
- }
310
- this.newOwnerConfirmed = true;
311
- }
312
- isDuplicateTransaction(transaction) {
313
- return this.transactions.some((existingTx) => existingTx.to === transaction.to &&
314
- existingTx.data === transaction.data) || this.revokeRolesTransactions.some((existingTx) => existingTx.to === transaction.to &&
315
- existingTx.data === transaction.data);
316
- }
317
- async submitTransactions(txList, txByContractName) {
318
- if (this.readonly) {
319
- console.log(chalk_1.default.yellow("INFO: Read-only mode is enabled. No transactions will be submitted."));
320
- console.log(chalk_1.default.yellow("INFO: We will still iterate through transactions to demonstrate the flow."));
321
- }
322
- if (!txList.length) {
323
- console.log(chalk_1.default.yellow("No transactions to submit."));
324
- return;
325
- }
326
- for (const [contract, txs] of txByContractName.entries()) {
327
- if (txs.length) {
328
- // We should process contract by contract - prompting user each time
329
- // eslint-disable-next-line no-await-in-loop
330
- await this.submitTransactionsForContract(contract, txs);
331
- }
332
- }
333
- }
334
- async submitTransactionsForContract(contractName, txs) {
335
- console.log(chalk_1.default.cyan(`\nSubmitting transactions for contract ${contractName}...\n`));
336
- for (const [index, txData] of txs.entries()) {
337
- console.log(chalk_1.default.blue(`Transaction ${index}: ${txData.description || "No description"}`));
338
- }
339
- const userConfirmed = await (0, utils_1.promptUserConfirmation)("Do you confirm submitting these transactions to the blockchain?");
340
- if (!userConfirmed) {
341
- console.log(chalk_1.default.red("User did not confirm. Skipping submission for this contract."));
342
- return;
343
- }
344
- if (!this.readonly) {
345
- await this.submitter.submit(txs.map(txData => txData.transaction));
346
- }
347
- this.removeSubmittedTransactions(contractName, txs.map(txData => txData.transaction));
348
- }
349
- removeSubmittedTransactions(contractName, transactions) {
350
- if (this.transactionsByContractName.get(contractName)?.map(tx => tx.transaction).some((tx) => transactions.includes(tx))) {
351
- this.transactions = this.transactions.filter((tx) => !transactions.includes(tx));
352
- this.transactionsByContractName.set(contractName, []);
353
- }
354
- else if (this.revokeTransactionsByContractName.get(contractName)?.map(tx => tx.transaction).some((tx) => transactions.includes(tx))) {
355
- this.revokeRolesTransactions = this.revokeRolesTransactions.filter((tx) => !transactions.includes(tx));
356
- this.revokeTransactionsByContractName.set(contractName, []);
357
- }
358
- }
359
- }
360
- exports.OwnershipAdmin = OwnershipAdmin;
361
- //# sourceMappingURL=ownershipAdmin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ownershipAdmin.js","sourceRoot":"","sources":["../../../src/ownership-transfer/ownershipAdmin.ts"],"names":[],"mappings":"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"}