@skalenetwork/upgrade-tools 4.0.0-ownership-helpers.1 → 4.0.0-ownership-helpers.2

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.
@@ -1,14 +1,35 @@
1
1
  import { Instance } from "@skalenetwork/skale-contracts-ethers-v6";
2
+ interface OwnershipAdminOptions {
3
+ newOwner?: string;
4
+ readonly?: boolean;
5
+ rolesToCheck?: string[];
6
+ managerRolesToCheck?: number[];
7
+ }
2
8
  export declare class OwnershipAdmin {
3
9
  private instance;
4
10
  private contractMetadata;
5
11
  private contractNames;
6
12
  private isMetadataLoaded;
13
+ private transactionsByContractName;
14
+ private transactions;
15
+ private bytes32RolesToCheck;
16
+ private managerRolesToCheck;
17
+ private newOwner;
18
+ private newOwnerConfirmed;
7
19
  private readonly;
8
- constructor(instance: Instance, contractNames: string[], readonly?: boolean);
20
+ constructor(instance: Instance, contractNames: string[], options?: OwnershipAdminOptions);
9
21
  loadContractMetadata(confirmFindings?: boolean): Promise<void>;
22
+ createNecessaryTransactions(): Promise<void>;
10
23
  private confirmMetadata;
11
- private displayFindings;
24
+ private displayMetadataFindings;
12
25
  private handleUserRejection;
13
26
  private groupMetadataByPattern;
27
+ private createTUPPOwnershipTransaction;
28
+ private createOwnableOwnershipTransaction;
29
+ private createAssignRolesTransactions;
30
+ private createTxsToChangeContractOwnership;
31
+ private promptConfirmNewOwner;
32
+ private promptConfirmTransactions;
33
+ private isDuplicateTransaction;
14
34
  }
35
+ export {};
@@ -4,19 +4,49 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.OwnershipAdmin = void 0;
7
+ /* eslint-disable max-lines */
8
+ // Cspell:words TUPP keccak
7
9
  const utils_1 = require("./utils");
8
10
  const permission_utils_1 = require("./permission-utils");
11
+ const ethers_1 = require("ethers");
9
12
  const chalk_1 = __importDefault(require("chalk"));
13
+ const ZERO = 0;
10
14
  class OwnershipAdmin {
11
- constructor(instance, contractNames, readonly = true) {
15
+ // eslint-disable-next-line max-statements
16
+ constructor(instance, contractNames, options = {}) {
17
+ this.transactions = [];
18
+ this.bytes32RolesToCheck = [];
19
+ this.managerRolesToCheck = [];
20
+ this.newOwnerConfirmed = false;
12
21
  this.instance = instance;
13
22
  this.contractMetadata = new Map();
14
23
  this.isMetadataLoaded = false;
24
+ this.transactionsByContractName = new Map();
15
25
  // If true, does not allow to send transactions to blockchain
16
- this.readonly = readonly;
26
+ this.readonly = options.readonly ?? true;
27
+ this.newOwner = options.newOwner ?? "MOCK_NEW_OWNER_ADDRESS";
28
+ this.bytes32RolesToCheck = (options.rolesToCheck ?? []).map(role =>
29
+ // Convert to keccak256 hash
30
+ ethers_1.ethers.id(role));
31
+ // Always check DEFAULT_ADMIN_ROLE at the end!
32
+ this.bytes32RolesToCheck.push(ethers_1.ethers.ZeroHash);
33
+ this.managerRolesToCheck = options.managerRolesToCheck ?? [];
34
+ this.managerRolesToCheck.forEach(role => {
35
+ if (typeof role !== "number" || !Number.isInteger(role) || role < ZERO) {
36
+ throw new Error(`Invalid manager role: ${role}. Must be a non-negative integer.`);
37
+ }
38
+ });
39
+ this.managerRolesToCheck.push(ZERO);
40
+ if (!this.readonly && this.newOwner === "MOCK_NEW_OWNER_ADDRESS") {
41
+ throw new Error("New owner address must be provided in options when in write mode.");
42
+ }
17
43
  this.contractNames = contractNames;
18
44
  }
19
45
  async loadContractMetadata(confirmFindings = true) {
46
+ if (this.isMetadataLoaded) {
47
+ console.log(chalk_1.default.yellow("Contract metadata is already loaded. Skipping reload."));
48
+ return;
49
+ }
20
50
  await Promise.all(this.contractNames.map(async (contractName) => {
21
51
  // Already checks the contractName is in the instance
22
52
  const address = await this.instance.getContractAddress(contractName);
@@ -39,15 +69,28 @@ class OwnershipAdmin {
39
69
  await this.confirmMetadata();
40
70
  }
41
71
  }
72
+ async createNecessaryTransactions() {
73
+ // Clear previous transactions
74
+ console.log(chalk_1.default.grey("INFO: The next Following steps will NOT submit any transactions to the blockchain."));
75
+ if (!this.readonly) {
76
+ await this.promptConfirmNewOwner();
77
+ }
78
+ for (const contract of this.contractMetadata.values()) {
79
+ // eslint-disable-next-line no-await-in-loop
80
+ const txs = await this.createTxsToChangeContractOwnership(contract);
81
+ this.transactionsByContractName.set(contract.name, txs);
82
+ txs.forEach(txData => this.transactions.push(txData.transaction));
83
+ }
84
+ }
42
85
  async confirmMetadata() {
43
- this.displayFindings();
86
+ this.displayMetadataFindings();
44
87
  const userConfirmed = await (0, utils_1.promptUserConfirmation)();
45
88
  if (!userConfirmed) {
46
89
  this.handleUserRejection();
47
90
  }
48
91
  console.log(chalk_1.default.green("\nUser confirmed. Proceeding...\n"));
49
92
  }
50
- displayFindings() {
93
+ displayMetadataFindings() {
51
94
  console.log(chalk_1.default.cyan("\n=== Contract Pattern Detection Results ===\n"));
52
95
  const groupedByPattern = this.groupMetadataByPattern();
53
96
  for (const [pattern, contracts] of Object.entries(groupedByPattern)) {
@@ -62,10 +105,11 @@ class OwnershipAdmin {
62
105
  console.log(chalk_1.default.cyan("\n==========================================\n"));
63
106
  }
64
107
  handleUserRejection() {
65
- console.log(chalk_1.default.yellow("\nUser did not confirm. Aborting and clearing metadata..."));
108
+ console.log(chalk_1.default.red("User did not confirm. Aborting and clearing all data..."));
66
109
  this.contractMetadata.clear();
110
+ this.transactions.length = 0;
67
111
  this.isMetadataLoaded = false;
68
- throw new Error("User aborted the operation. Metadata has been cleared.");
112
+ throw new Error("User aborted the operation. Data has been cleared.");
69
113
  }
70
114
  groupMetadataByPattern() {
71
115
  const grouped = Object.values(utils_1.Pattern).
@@ -78,6 +122,140 @@ class OwnershipAdmin {
78
122
  }
79
123
  return grouped;
80
124
  }
125
+ async createTUPPOwnershipTransaction(contractData) {
126
+ const admin = await (0, utils_1.getAdminAddress)(contractData.address);
127
+ const tx = await (0, permission_utils_1.transferOwnership)(admin, this.newOwner);
128
+ if (typeof tx === "boolean" && tx) {
129
+ console.log(chalk_1.default.gray(` -> Owner of ProxyAdmin of ${contractData.address} is already ${this.newOwner}.`));
130
+ return true;
131
+ }
132
+ else if (this.isDuplicateTransaction(tx)) {
133
+ console.log(chalk_1.default.gray(` -> Transaction to change Owner of Proxy Admin of ${contractData.name} was already prepared.`));
134
+ console.log(chalk_1.default.gray(` NOTE: It's likely ${contractData.name} shares the same Proxy Admin of another contract.`));
135
+ return true;
136
+ }
137
+ console.log(chalk_1.default.yellow(` -> Tx to change Proxy Admin at ${admin} of ${contractData.name} created.`));
138
+ return {
139
+ description: `-> Tx to change Proxy Admin at ${admin} to ${this.newOwner}`,
140
+ transaction: tx
141
+ };
142
+ }
143
+ async createOwnableOwnershipTransaction(contractData) {
144
+ const tx = await (0, permission_utils_1.transferOwnership)(contractData.address, this.newOwner);
145
+ if (typeof tx === "boolean" && tx) {
146
+ console.log(chalk_1.default.gray(` -> Owner of ${contractData.name} at ${contractData.address} is already ${this.newOwner}.`));
147
+ return true;
148
+ }
149
+ else if (this.isDuplicateTransaction(tx)) {
150
+ throw new Error(`Error: Transaction to change Owner of ${contractData.name} was already created.`);
151
+ }
152
+ console.log(chalk_1.default.yellow(` -> Tx to change Owner of ${contractData.name} at ${contractData.address} created.`));
153
+ return {
154
+ description: `-> Tx to change Owner of ${contractData.name} at ${contractData.address} to ${this.newOwner} created`,
155
+ transaction: tx
156
+ };
157
+ }
158
+ async createAssignRolesTransactions(contractData) {
159
+ const txs = [];
160
+ for (const role of this.bytes32RolesToCheck) {
161
+ // eslint-disable-next-line no-await-in-loop
162
+ const tx = await (0, permission_utils_1.grantRole)(contractData.address, role, this.newOwner);
163
+ if (typeof tx === "boolean" && tx) {
164
+ console.log(chalk_1.default.gray(` -> Role ${role} already granted to ${this.newOwner} in ${contractData.name}.`));
165
+ }
166
+ else if (this.isDuplicateTransaction(tx)) {
167
+ throw new Error(`Error: Transaction to grant role ${role} in ${contractData.name} was already created.`);
168
+ }
169
+ else {
170
+ console.log(chalk_1.default.yellow(` -> Tx to grant role ${role} to ${this.newOwner} in ${contractData.name} created.`));
171
+ txs.push({
172
+ description: `-> Tx to grant role ${role} to ${this.newOwner} in ${contractData.name}`,
173
+ transaction: tx
174
+ });
175
+ }
176
+ }
177
+ return txs;
178
+ }
179
+ // TODO: Remove this
180
+ // eslint-disable-next-line max-statements
181
+ async createTxsToChangeContractOwnership(contractData) {
182
+ console.log(chalk_1.default.white(`* Creating Transactions to change Ownership of ${contractData.name}.`));
183
+ const txs = [];
184
+ if (contractData.pattern === utils_1.Pattern.TUPP) {
185
+ const tx = await this.createTUPPOwnershipTransaction(contractData);
186
+ if (tx !== true) {
187
+ txs.push(tx);
188
+ }
189
+ }
190
+ if (contractData.permissionModel?.includes(permission_utils_1.PermissionModel.OWNABLE)) {
191
+ const tx = await this.createOwnableOwnershipTransaction(contractData);
192
+ if (tx !== true) {
193
+ txs.push(tx);
194
+ }
195
+ }
196
+ if (contractData.permissionModel?.includes(permission_utils_1.PermissionModel.ROLE_BASED)) {
197
+ const txList = await this.createAssignRolesTransactions(contractData);
198
+ if (txList.length) {
199
+ txList.forEach(tx => txs.push(tx));
200
+ }
201
+ }
202
+ if (contractData.permissionModel?.includes(permission_utils_1.PermissionModel.ACCESS_MANAGER)) {
203
+ console.log(chalk_1.default.yellow("Not implemented yet: Access Manager role assignments."));
204
+ }
205
+ return txs;
206
+ }
207
+ // eslint-disable-next-line max-statements
208
+ async promptConfirmNewOwner() {
209
+ if (this.newOwnerConfirmed) {
210
+ console.log(chalk_1.default.white("INFO: New owner already confirmed. Skipping confirmation."));
211
+ return;
212
+ }
213
+ const message1 = `You have specified the new owner address as ${this.newOwner}.`;
214
+ let message2 = "";
215
+ let message3 = "";
216
+ const isContract = await (0, utils_1.isContractAddress)(this.newOwner);
217
+ if (isContract) {
218
+ message2 = chalk_1.default.green(`INFO: It appears to be a contract address.`);
219
+ const { owners, threshold } = await (0, permission_utils_1.tryGetMultiSigInfo)(this.newOwner);
220
+ if (owners) {
221
+ const ownersList = owners.join(", ");
222
+ message3 = chalk_1.default.green(`INFO: Found owners of new Owner Multi-Sig: ${ownersList}`);
223
+ }
224
+ else {
225
+ message3 = chalk_1.default.red(`WARNING: The script was unable to collect owners details.`);
226
+ }
227
+ if (threshold) {
228
+ message3 += chalk_1.default.green(`INFO: Multi-Sig threshold is set to ${threshold}.`);
229
+ }
230
+ else {
231
+ message3 += chalk_1.default.red(`WARNING: The script was unable to determine the Multi-Sig threshold.`);
232
+ }
233
+ }
234
+ const message = `${message1}\n${message2 || ""}\n${message3 || ""}\nDo you confirm this is correct?`;
235
+ const userConfirmed = await (0, utils_1.promptUserConfirmation)(message);
236
+ if (!userConfirmed) {
237
+ throw new Error("User did not confirm the new owner address. Aborting...");
238
+ }
239
+ this.newOwnerConfirmed = true;
240
+ }
241
+ // TODO: Remove disable
242
+ // eslint-disable-next-line class-methods-use-this
243
+ async promptConfirmTransactions(transactions) {
244
+ if (!transactions.length) {
245
+ return true;
246
+ }
247
+ console.log(chalk_1.default.white("\n=== Prepared Following Ownership Transfer Transactions ===\n"));
248
+ transactions.forEach((txData, index) => {
249
+ console.log(chalk_1.default.gray(` - Transaction ${index}: ${txData.description || "No description"}`));
250
+ });
251
+ const msg = "Do you confirm these transactions? They will NOT be sent to the blockchain yet.";
252
+ const userConfirmed = await (0, utils_1.promptUserConfirmation)(msg);
253
+ return userConfirmed;
254
+ }
255
+ isDuplicateTransaction(transaction) {
256
+ return this.transactions.some((existingTx) => existingTx.to === transaction.to &&
257
+ existingTx.data === transaction.data);
258
+ }
81
259
  }
82
260
  exports.OwnershipAdmin = OwnershipAdmin;
83
261
  //# sourceMappingURL=ownershipAdmin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ownershipAdmin.js","sourceRoot":"","sources":["../../../src/ownership-transfer/ownershipAdmin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ownershipAdmin.js","sourceRoot":"","sources":["../../../src/ownership-transfer/ownershipAdmin.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,18 @@
1
- import { AddressLike } from "ethers";
1
+ import { AddressLike, Transaction } from "ethers";
2
2
  export declare enum PermissionModel {
3
3
  OWNABLE = "OWNABLE",
4
4
  ROLE_BASED = "ROLE_BASED",
5
- ACCESS_MANAGED = "ACCESS_MANAGED"
5
+ ACCESS_MANAGED = "ACCESS_MANAGED",
6
+ ACCESS_MANAGER = "ACCESS_MANAGER"
6
7
  }
7
8
  export declare const isOwnable: (contractAddress: AddressLike) => Promise<boolean>;
8
9
  export declare const isAccessControl: (contractAddress: AddressLike) => Promise<boolean>;
10
+ export declare const isAccessManager: (contractAddress: AddressLike) => Promise<boolean>;
9
11
  export declare const isAccessManaged: (contractAddress: AddressLike) => Promise<boolean>;
10
- export declare const transferOwnership: (contractAddress: AddressLike, newOwner: AddressLike) => Promise<{
11
- to: string;
12
- data: string;
13
- } | boolean>;
12
+ export declare const tryGetMultiSigInfo: (contractAddress: AddressLike) => Promise<{
13
+ owners: string[] | null;
14
+ threshold: bigint | null;
15
+ }>;
16
+ export declare const transferOwnership: (contractAddress: AddressLike, newOwner: AddressLike) => Promise<Transaction | true>;
17
+ export declare const grantRole: (contractAddress: AddressLike, role: string, account: AddressLike) => Promise<Transaction | true>;
14
18
  export declare const getPermissionModels: (address: AddressLike) => Promise<PermissionModel[]>;
@@ -3,7 +3,8 @@ 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.getPermissionModels = exports.transferOwnership = exports.isAccessManaged = exports.isAccessControl = exports.isOwnable = exports.PermissionModel = void 0;
6
+ exports.getPermissionModels = exports.grantRole = exports.transferOwnership = exports.tryGetMultiSigInfo = exports.isAccessManaged = exports.isAccessManager = exports.isAccessControl = exports.isOwnable = exports.PermissionModel = void 0;
7
+ /* eslint-disable max-lines */
7
8
  const ethers_1 = require("ethers");
8
9
  const utils_1 = require("./utils");
9
10
  const chalk_1 = __importDefault(require("chalk"));
@@ -12,9 +13,10 @@ var PermissionModel;
12
13
  (function (PermissionModel) {
13
14
  // Does not fully complete the process of Ownable2Step
14
15
  PermissionModel["OWNABLE"] = "OWNABLE";
15
- // This works also for ACCESS_MANAGER contracts - i.e they are ROLE_BASED
16
+ // This does NOT work for ACCESS_MANAGER contracts
16
17
  PermissionModel["ROLE_BASED"] = "ROLE_BASED";
17
18
  PermissionModel["ACCESS_MANAGED"] = "ACCESS_MANAGED";
19
+ PermissionModel["ACCESS_MANAGER"] = "ACCESS_MANAGER";
18
20
  })(PermissionModel || (exports.PermissionModel = PermissionModel = {}));
19
21
  /*
20
22
  * ABI for Ownable interface - includes owner() function
@@ -31,12 +33,24 @@ const ACCESS_CONTROL_ABI = [
31
33
  "function grantRole(bytes32 role, address account)",
32
34
  "function revokeRole(bytes32 role, address account)"
33
35
  ];
36
+ const ACCESS_MANAGER_ABI = [
37
+ "function hasRole(uint64 role, address account) view returns (bool)",
38
+ "function grantRole(uint64 role, address account, uint32 executionDelay)",
39
+ "function revokeRole(uint64 role, address account)"
40
+ ];
34
41
  /*
35
42
  * ABI for AccessManaged interface - includes authority() function
36
43
  */
37
44
  const ACCESS_MANAGED_ABI = [
38
45
  "function authority() view returns (address)"
39
46
  ];
47
+ /*
48
+ * ABI for Gnosis Safe MultiSig interface
49
+ */
50
+ const MULTISIG_ABI = [
51
+ "function getOwners() view returns (address[])",
52
+ "function getThreshold() view returns (uint256)"
53
+ ];
40
54
  const verifyOwnableInterface = async (contract, contractAddress) => {
41
55
  /*
42
56
  * Verify owner() exists and returns non-zero address
@@ -105,6 +119,42 @@ const isAccessControl = async (contractAddress) => {
105
119
  }
106
120
  };
107
121
  exports.isAccessControl = isAccessControl;
122
+ const verifyAccessManagerInterface = async (contract, contractAddress) => {
123
+ /*
124
+ * Verify hasRole(uint64,address) view function exists
125
+ * AccessManager uses uint64 for roleId instead of bytes32
126
+ */
127
+ const zeroRole = 0n;
128
+ await contract.hasRole(zeroRole, hardhat_1.ethers.ZeroAddress);
129
+ /*
130
+ * Verify grantRole(uint64,address,uint32) exists by checking bytecode
131
+ * AccessManager's grantRole includes an executionDelay parameter
132
+ */
133
+ return await (0, utils_1.hasFunctionSelector)(contractAddress, "grantRole(uint64,address,uint32)") &&
134
+ await (0, utils_1.hasFunctionSelector)(contractAddress, "revokeRole(uint64,address)");
135
+ };
136
+ /*
137
+ * Checks if a contract implements the AccessManager interface.
138
+ * A contract is considered AccessManager if it has hasRole(uint64,address) and
139
+ * grantRole(uint64,address,uint32) functions with uint64 role parameter.
140
+ *
141
+ * @param contractAddress - The address of the contract to check
142
+ * @returns true if the contract is AccessManager, false otherwise
143
+ */
144
+ const isAccessManager = async (contractAddress) => {
145
+ try {
146
+ const resolvedAddress = await hardhat_1.ethers.resolveAddress(contractAddress);
147
+ if (!await (0, utils_1.isContractAddress)(resolvedAddress)) {
148
+ return false;
149
+ }
150
+ const contract = new ethers_1.Contract(resolvedAddress, ACCESS_MANAGER_ABI, hardhat_1.ethers.provider);
151
+ return await verifyAccessManagerInterface(contract, resolvedAddress);
152
+ }
153
+ catch {
154
+ return false;
155
+ }
156
+ };
157
+ exports.isAccessManager = isAccessManager;
108
158
  /*
109
159
  * Checks if a contract implements the AccessManaged interface.
110
160
  * A contract is considered AccessManaged if it has an authority() function
@@ -133,6 +183,30 @@ const isAccessManaged = async (contractAddress) => {
133
183
  }
134
184
  };
135
185
  exports.isAccessManaged = isAccessManaged;
186
+ /*
187
+ * Checks if a contract is a MultiSig (Gnosis Safe).
188
+ * A contract is considered a MultiSig if it has both getOwners() and getThreshold() functions
189
+ * and returns valid data (at least one owner and threshold > 0).
190
+ *
191
+ * @param contractAddress - The address of the contract to check
192
+ * @returns An object containing owners and threshold if the contract is a MultiSig, null otherwise
193
+ */
194
+ const tryGetMultiSigInfo = async (contractAddress) => {
195
+ let owners = null;
196
+ let threshold = null;
197
+ try {
198
+ const resolvedAddress = await hardhat_1.ethers.resolveAddress(contractAddress);
199
+ const contract = new ethers_1.Contract(resolvedAddress, MULTISIG_ABI, hardhat_1.ethers.provider);
200
+ owners = await contract.getOwners();
201
+ threshold = await contract.getThreshold();
202
+ return { owners, threshold };
203
+ }
204
+ catch (err) {
205
+ console.warn(`Error calling usual Multi-sig getter functions: ${err}`);
206
+ return { owners, threshold };
207
+ }
208
+ };
209
+ exports.tryGetMultiSigInfo = tryGetMultiSigInfo;
136
210
  /*
137
211
  * Transfers ownership of an Ownable contract to a new owner.
138
212
  * This function encodes the transferOwnership call data for the transaction.
@@ -144,6 +218,7 @@ exports.isAccessManaged = isAccessManaged;
144
218
  *
145
219
  * @dev The address must have already been verified as an Ownable contract before calling this function.
146
220
  */
221
+ // eslint-disable-next-line max-statements
147
222
  const transferOwnership = async (contractAddress, newOwner) => {
148
223
  const resolvedContractAddress = await hardhat_1.ethers.resolveAddress(contractAddress);
149
224
  const resolvedNewOwner = await hardhat_1.ethers.resolveAddress(newOwner);
@@ -153,12 +228,42 @@ const transferOwnership = async (contractAddress, newOwner) => {
153
228
  }
154
229
  const data = contract.interface.encodeFunctionData("transferOwnership", [resolvedNewOwner]);
155
230
  console.log(chalk_1.default.green(`Prepared transferOwnership transaction for ${resolvedContractAddress} to new owner ${resolvedNewOwner}`));
156
- return {
157
- data,
158
- "to": resolvedContractAddress
159
- };
231
+ const transaction = new ethers_1.Transaction();
232
+ transaction.to = resolvedContractAddress;
233
+ transaction.data = data;
234
+ return transaction;
160
235
  };
161
236
  exports.transferOwnership = transferOwnership;
237
+ /*
238
+ * Grants a role to an address in a ROLE_BASED (AccessControl) contract.
239
+ * This function encodes the grantRole call data for the transaction.
240
+ *
241
+ * @param contractAddress - The address of the AccessControl contract
242
+ * @param role - The bytes32 role identifier to grant
243
+ * @param account - The address to grant the role to
244
+ * @returns Transaction object with the encoded grantRole call or true
245
+ * if the account already has the role
246
+ *
247
+ * @dev The contract address must be a ROLE_BASED contract (not validated by this function)
248
+ */
249
+ const grantRole = async (contractAddress, role, account) => {
250
+ const resolvedContractAddress = await hardhat_1.ethers.resolveAddress(contractAddress);
251
+ const resolvedAccount = await hardhat_1.ethers.resolveAddress(account);
252
+ const contract = new ethers_1.Contract(resolvedContractAddress, ACCESS_CONTROL_ABI, hardhat_1.ethers.provider);
253
+ /*
254
+ * Check if the account already has the role
255
+ */
256
+ if (await contract.hasRole(role, resolvedAccount)) {
257
+ return true;
258
+ }
259
+ const data = contract.interface.encodeFunctionData("grantRole", [role, resolvedAccount]);
260
+ const transaction = new ethers_1.Transaction();
261
+ transaction.to = resolvedContractAddress;
262
+ transaction.data = data;
263
+ return transaction;
264
+ };
265
+ exports.grantRole = grantRole;
266
+ // eslint-disable-next-line max-statements
162
267
  const getPermissionModels = async (address) => {
163
268
  const models = [];
164
269
  if (await (0, exports.isOwnable)(address)) {
@@ -167,9 +272,15 @@ const getPermissionModels = async (address) => {
167
272
  if (await (0, exports.isAccessControl)(address)) {
168
273
  models.push(PermissionModel.ROLE_BASED);
169
274
  }
275
+ if (await (0, exports.isAccessManager)(address)) {
276
+ models.push(PermissionModel.ACCESS_MANAGER);
277
+ }
170
278
  if (await (0, exports.isAccessManaged)(address)) {
171
279
  models.push(PermissionModel.ACCESS_MANAGED);
172
280
  }
281
+ if (models.includes(PermissionModel.ACCESS_MANAGER) && models.includes(PermissionModel.ROLE_BASED)) {
282
+ throw new Error(`Address ${address} cannot be both ACCESS_MANAGER and ROLE_BASED permission models.`);
283
+ }
173
284
  return models;
174
285
  };
175
286
  exports.getPermissionModels = getPermissionModels;
@@ -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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"}
@@ -11,6 +11,6 @@ export declare const getImplementationAddress: (address: string) => Promise<stri
11
11
  export declare const isTUPPPattern: (address: string) => Promise<boolean>;
12
12
  export declare const isBeaconPattern: (address: string) => Promise<boolean>;
13
13
  export declare const identifyProxyPattern: (address: string) => Promise<Pattern>;
14
- export declare const promptUserConfirmation: () => Promise<boolean>;
14
+ export declare const promptUserConfirmation: (message?: string) => Promise<boolean>;
15
15
  export declare const detectPattern: (address: AddressLike) => Promise<Pattern>;
16
16
  export declare const hasFunctionSelector: (address: string, signature: string) => Promise<boolean>;
@@ -120,13 +120,14 @@ exports.identifyProxyPattern = identifyProxyPattern;
120
120
  * Accepts "yes" or "y" (case-insensitive) as confirmation.
121
121
  * Returns a Promise that resolves to true if confirmed, false otherwise.
122
122
  */
123
- const promptUserConfirmation = () => {
123
+ const promptUserConfirmation = (message) => {
124
124
  const rl = readline_1.default.createInterface({
125
125
  "input": process.stdin,
126
126
  "output": process.stdout
127
127
  });
128
+ const msg = message || "Do you confirm these findings?";
128
129
  return new Promise((resolve) => {
129
- rl.question(chalk_1.default.yellow("Do you confirm these findings? (yes/y to confirm): "), (answer) => {
130
+ rl.question(chalk_1.default.yellow(`${msg} (yes/y to confirm): `), (answer) => {
130
131
  rl.close();
131
132
  const normalizedAnswer = answer.trim().toLowerCase();
132
133
  resolve(normalizedAnswer === "yes" || normalizedAnswer === "y");
@@ -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.1",
3
+ "version": "4.0.0-ownership-helpers.2",
4
4
  "description": "Scripts to support upgrades of smart contracts",
5
5
  "files": [
6
6
  "dist/**/*"