@skalenetwork/upgrade-tools 1.0.0-develop.2 → 1.0.0-develop.20

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.
@@ -18,7 +18,7 @@ const config = {
18
18
  ]
19
19
  },
20
20
  typechain: {
21
- externalArtifacts: ['node_modules/@openzeppelin/upgrades-core/artifacts/*.json']
21
+ externalArtifacts: ['node_modules/@openzeppelin/upgrades-core/artifacts/[!b]*.json']
22
22
  }
23
23
  };
24
24
  exports.default = config;
@@ -90,7 +90,9 @@ function getContractFactory(contract) {
90
90
  Object.assign(libraryArtifacts, manifest.libraries);
91
91
  }
92
92
  finally {
93
- Object.assign(manifest, { libraries: libraryArtifacts });
93
+ if (manifest !== undefined) {
94
+ Object.assign(manifest, { libraries: libraryArtifacts });
95
+ }
94
96
  yield fs_1.promises.writeFile(yield getManifestFile(), JSON.stringify(manifest, null, 4));
95
97
  }
96
98
  return yield getLinkedContractFactory(contract, libraries);
@@ -20,6 +20,6 @@ interface SafeMultisigTransaction {
20
20
  }
21
21
  export declare function getSafeTransactionUrl(chainId: number): string;
22
22
  export declare function getSafeRelayUrl(chainId: number): string;
23
- export declare function createMultiSendTransaction(ethers: Ethers, safeAddress: string, privateKey: string, transactions: string[], isSafeMock?: boolean): Promise<SafeMultisigTransaction>;
23
+ export declare function createMultiSendTransaction(ethers: Ethers, safeAddress: string, privateKey: string, transactions: string[], nonce?: number): Promise<SafeMultisigTransaction>;
24
24
  export declare function sendSafeTransaction(safe: string, chainId: number, safeTx: SafeMultisigTransaction): Promise<void>;
25
25
  export {};
@@ -47,6 +47,7 @@ var Network;
47
47
  Network[Network["GANACHE"] = 1337] = "GANACHE";
48
48
  Network[Network["HARDHAT"] = 31337] = "HARDHAT";
49
49
  })(Network || (Network = {}));
50
+ // constants
50
51
  const ADDRESSES = {
51
52
  multiSend: {
52
53
  [Network.MAINNET]: "0x8D29bE29923b68abfDD21e541b9374737B49cdAD",
@@ -63,20 +64,7 @@ const URLS = {
63
64
  [Network.RINKEBY]: "https://safe-relay.rinkeby.gnosis.io",
64
65
  }
65
66
  };
66
- function getMultiSendAddress(chainId) {
67
- if (chainId === Network.MAINNET) {
68
- return ADDRESSES.multiSend[chainId];
69
- }
70
- else if (chainId === Network.RINKEBY) {
71
- return ADDRESSES.multiSend[chainId];
72
- }
73
- else if ([Network.GANACHE, Network.HARDHAT].includes(chainId)) {
74
- return ethers_1.ethers.constants.AddressZero;
75
- }
76
- else {
77
- throw Error(`Can't get multiSend contract at network with chainId = ${chainId}`);
78
- }
79
- }
67
+ // public functions
80
68
  function getSafeTransactionUrl(chainId) {
81
69
  if (chainId === Network.MAINNET) {
82
70
  return URLS.safe_transaction[chainId];
@@ -101,17 +89,7 @@ function getSafeRelayUrl(chainId) {
101
89
  }
102
90
  }
103
91
  exports.getSafeRelayUrl = getSafeRelayUrl;
104
- function concatTransactions(transactions) {
105
- return "0x" + transactions.map((transaction) => {
106
- if (transaction.startsWith("0x")) {
107
- return transaction.slice(2);
108
- }
109
- else {
110
- return transaction;
111
- }
112
- }).join("");
113
- }
114
- function createMultiSendTransaction(ethers, safeAddress, privateKey, transactions, isSafeMock = false) {
92
+ function createMultiSendTransaction(ethers, safeAddress, privateKey, transactions, nonce) {
115
93
  return __awaiter(this, void 0, void 0, function* () {
116
94
  const chainId = (yield ethers.provider.getNetwork()).chainId;
117
95
  const multiSendAddress = getMultiSendAddress(chainId);
@@ -119,11 +97,29 @@ function createMultiSendTransaction(ethers, safeAddress, privateKey, transaction
119
97
  const multiSend = new ethers.Contract(multiSendAddress, new ethers.utils.Interface(multiSendAbi), ethers.provider);
120
98
  const safeAbi = [{ "constant": true, "inputs": [{ "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "enum Enum.Operation", "name": "operation", "type": "uint8" }, { "internalType": "uint256", "name": "safeTxGas", "type": "uint256" }, { "internalType": "uint256", "name": "baseGas", "type": "uint256" }, { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, { "internalType": "address", "name": "gasToken", "type": "address" }, { "internalType": "address", "name": "refundReceiver", "type": "address" }, { "internalType": "uint256", "name": "_nonce", "type": "uint256" }], "name": "getTransactionHash", "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "payable": false, "stateMutability": "view", "type": "function" }];
121
99
  const safe = new ethers.Contract(safeAddress, new ethers.utils.Interface(safeAbi), ethers.provider);
122
- let nonce = 0;
123
- if (!isSafeMock) {
100
+ let nonceValue = 0;
101
+ if (nonce === undefined) {
124
102
  try {
125
- const nonceResponse = yield axios_1.default.get(`${getSafeTransactionUrl(chainId)}/api/v1/safes/${safeAddress}/`);
126
- nonce = nonceResponse.data.nonce;
103
+ if (process.env.NONCE) {
104
+ // NONCE variable is set
105
+ if (isNaN(Number.parseInt(process.env.NONCE))) {
106
+ // NONCE variable is not a number
107
+ if (process.env.NONCE.toLowerCase() === "pending") {
108
+ nonceValue = yield getSafeNonceWithPending(chainId, safeAddress);
109
+ }
110
+ else {
111
+ nonceValue = yield getSafeNonce(chainId, safeAddress);
112
+ }
113
+ }
114
+ else {
115
+ // NONCE variable is a number
116
+ nonceValue = Number.parseInt(process.env.NONCE);
117
+ }
118
+ }
119
+ else {
120
+ // NONCE variable is not set
121
+ nonceValue = yield getSafeNonce(chainId, safeAddress);
122
+ }
127
123
  }
128
124
  catch (e) {
129
125
  if (!(e instanceof Error) || !e.toString().startsWith("Error: Can't get safe-transaction url")) {
@@ -131,6 +127,10 @@ function createMultiSendTransaction(ethers, safeAddress, privateKey, transaction
131
127
  }
132
128
  }
133
129
  }
130
+ else {
131
+ nonceValue = nonce;
132
+ }
133
+ console.log("Will send tx to Gnosis with nonce", nonceValue);
134
134
  const tx = {
135
135
  "safe": safeAddress,
136
136
  "to": multiSend.address,
@@ -142,7 +142,7 @@ function createMultiSendTransaction(ethers, safeAddress, privateKey, transaction
142
142
  "baseGas": 0,
143
143
  "gasPrice": 0,
144
144
  "refundReceiver": ethers.constants.AddressZero,
145
- "nonce": nonce, // Nonce of the Safe, transaction cannot be executed until Safe's nonce is not equal to this nonce
145
+ "nonce": nonceValue, // Nonce of the Safe, transaction cannot be executed until Safe's nonce is not equal to this nonce
146
146
  };
147
147
  const digestHex = yield safe.getTransactionHash(tx.to, tx.value, tx.data, tx.operation, tx.safeTxGas, tx.baseGas, tx.gasPrice, tx.gasToken, tx.refundReceiver, tx.nonce);
148
148
  const privateKeyBuffer = ethUtil.toBuffer(privateKey);
@@ -187,3 +187,45 @@ function sendSafeTransaction(safe, chainId, safeTx) {
187
187
  });
188
188
  }
189
189
  exports.sendSafeTransaction = sendSafeTransaction;
190
+ // private functions
191
+ function getMultiSendAddress(chainId) {
192
+ if (chainId === Network.MAINNET) {
193
+ return ADDRESSES.multiSend[chainId];
194
+ }
195
+ else if (chainId === Network.RINKEBY) {
196
+ return ADDRESSES.multiSend[chainId];
197
+ }
198
+ else if ([Network.GANACHE, Network.HARDHAT].includes(chainId)) {
199
+ return ethers_1.ethers.constants.AddressZero;
200
+ }
201
+ else {
202
+ throw Error(`Can't get multiSend contract at network with chainId = ${chainId}`);
203
+ }
204
+ }
205
+ function concatTransactions(transactions) {
206
+ return "0x" + transactions.map((transaction) => {
207
+ if (transaction.startsWith("0x")) {
208
+ return transaction.slice(2);
209
+ }
210
+ else {
211
+ return transaction;
212
+ }
213
+ }).join("");
214
+ }
215
+ function getSafeNonce(chainId, safeAddress) {
216
+ return __awaiter(this, void 0, void 0, function* () {
217
+ const safeInfo = yield axios_1.default.get(`${getSafeTransactionUrl(chainId)}/api/v1/safes/${safeAddress}/`);
218
+ return safeInfo.data.nonce;
219
+ });
220
+ }
221
+ function getSafeNonceWithPending(chainId, safeAddress) {
222
+ return __awaiter(this, void 0, void 0, function* () {
223
+ const allTransactions = yield axios_1.default.get(`${getSafeTransactionUrl(chainId)}/api/v1/safes/${safeAddress}/all-transactions/?executed=false&queued=true&trusted=true`);
224
+ if (allTransactions.data.results.length > 0) {
225
+ return allTransactions.data.results[0].nonce + 1;
226
+ }
227
+ else {
228
+ return 0;
229
+ }
230
+ });
231
+ }
@@ -3,5 +3,6 @@ import { Contract } from "ethers";
3
3
  import { OwnableUpgradeable } from "../typechain-types";
4
4
  export declare function getContractFactoryAndUpdateManifest(contract: string): Promise<import("ethers").ContractFactory>;
5
5
  declare type DeploymentAction<ContractManagerType extends Contract> = (safeTransactions: string[], abi: SkaleABIFile, contractManager: ContractManagerType) => Promise<void>;
6
- export declare function upgrade<ContractManagerType extends OwnableUpgradeable>(projectName: string, targetVersion: string, getDeployedVersion: (abi: SkaleABIFile) => Promise<string | undefined>, setVersion: (safeTransaction: string[], abi: SkaleABIFile, newVersion: string) => Promise<void>, safeMockAccessRequirements: string[], contractNamesToUpgrade: string[], deployNewContracts: DeploymentAction<ContractManagerType>, initialize: DeploymentAction<ContractManagerType>): Promise<void>;
6
+ declare type MultiTransactionAction<ContractManagerType extends Contract> = (abi: SkaleABIFile, contractManager: ContractManagerType) => Promise<string[][]>;
7
+ export declare function upgrade<ContractManagerType extends OwnableUpgradeable>(projectName: string, targetVersion: string, getDeployedVersion: (abi: SkaleABIFile) => Promise<string | undefined>, setVersion: (safeTransaction: string[], abi: SkaleABIFile, newVersion: string) => Promise<void>, safeMockAccessRequirements: string[], contractNamesToUpgrade: string[], deployNewContracts: DeploymentAction<ContractManagerType>, initialize: DeploymentAction<ContractManagerType>, afterUpgrade?: MultiTransactionAction<ContractManagerType>): Promise<void>;
7
8
  export {};
@@ -62,7 +62,7 @@ function getContractFactoryAndUpdateManifest(contract) {
62
62
  });
63
63
  }
64
64
  exports.getContractFactoryAndUpdateManifest = getContractFactoryAndUpdateManifest;
65
- function upgrade(projectName, targetVersion, getDeployedVersion, setVersion, safeMockAccessRequirements, contractNamesToUpgrade, deployNewContracts, initialize) {
65
+ function upgrade(projectName, targetVersion, getDeployedVersion, setVersion, safeMockAccessRequirements, contractNamesToUpgrade, deployNewContracts, initialize, afterUpgrade) {
66
66
  return __awaiter(this, void 0, void 0, function* () {
67
67
  if (!process.env.ABI) {
68
68
  console.log(chalk_1.default.red("Set path to file with ABI and addresses to ABI environment variables"));
@@ -171,10 +171,23 @@ function upgrade(projectName, targetVersion, getDeployedVersion, setVersion, saf
171
171
  // Use random one because we most probable run tests
172
172
  privateKey = hardhat_1.ethers.Wallet.createRandom().privateKey;
173
173
  }
174
- const safeTx = yield (0, gnosis_safe_1.createMultiSendTransaction)(hardhat_1.ethers, safe, privateKey, safeTransactions, safeMock !== undefined);
174
+ const safeTx = yield (0, gnosis_safe_1.createMultiSendTransaction)(hardhat_1.ethers, safe, privateKey, safeTransactions, safeMock !== undefined ? 0 : undefined);
175
+ let transactionsBatches;
176
+ if (afterUpgrade !== undefined) {
177
+ transactionsBatches = yield afterUpgrade(abi, contractManager);
178
+ for (const { index, batch } of transactionsBatches.map((batch, index) => ({ index, batch }))) {
179
+ yield fs_1.promises.writeFile(`data/after-transactions-${index}-${version}-${hardhat_1.network.name}.json`, JSON.stringify(batch, null, 4));
180
+ }
181
+ }
175
182
  if (!safeMock) {
176
183
  const chainId = (yield hardhat_1.ethers.provider.getNetwork()).chainId;
177
184
  yield (0, gnosis_safe_1.sendSafeTransaction)(safe, chainId, safeTx);
185
+ if (transactionsBatches !== undefined) {
186
+ for (const { batch, index } of transactionsBatches.map((batch, index) => ({ batch, index }))) {
187
+ const multiSendTransaction = yield (0, gnosis_safe_1.createMultiSendTransaction)(hardhat_1.ethers, safe, privateKey, batch, safeTx.nonce + index + 1);
188
+ yield (0, gnosis_safe_1.sendSafeTransaction)(safe, chainId, multiSendTransaction);
189
+ }
190
+ }
178
191
  }
179
192
  else {
180
193
  console.log(chalk_1.default.blue("Send upgrade transactions to safe mock"));
@@ -184,8 +197,23 @@ function upgrade(projectName, targetVersion, getDeployedVersion, setVersion, saf
184
197
  value: safeTx.value,
185
198
  data: safeTx.data,
186
199
  })).wait();
200
+ if (transactionsBatches !== undefined) {
201
+ for (const batch of transactionsBatches) {
202
+ const multiSendTransaction = yield (0, gnosis_safe_1.createMultiSendTransaction)(hardhat_1.ethers, safe, privateKey, batch, 0);
203
+ yield (yield deployer.sendTransaction({
204
+ to: safeMock.address,
205
+ value: multiSendTransaction.value,
206
+ data: multiSendTransaction.data,
207
+ })).wait();
208
+ }
209
+ }
187
210
  console.log(chalk_1.default.blue("Transactions have been sent"));
188
211
  }
212
+ catch (exception) {
213
+ console.log(chalk_1.default.red("Error during upgrade"));
214
+ console.log(exception);
215
+ process.exitCode = 13;
216
+ }
189
217
  finally {
190
218
  console.log(chalk_1.default.blue("Return ownership to wallet"));
191
219
  yield (yield safeMock.transferProxyAdminOwnership(contractManager.address, deployer.address)).wait();
@@ -14,7 +14,7 @@ export declare class SafeMock__factory extends ContractFactory {
14
14
  connect(signer: Signer): SafeMock__factory;
15
15
  static readonly contractName: "SafeMock";
16
16
  readonly contractName: "SafeMock";
17
- static readonly bytecode = "0x60806040523480156200001157600080fd5b506000620000206001620000b6565b9050801562000039576000805461ff0019166101001790555b6200004e620001c860201b6200039a1760201c565b604080516020810190915260008152620000689062000230565b8015620000af576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5062000381565b60008054610100900460ff16156200014f578160ff166001148015620000ef5750620000ed30620002bf60201b620003c91760201c565b155b620001475760405162461bcd60e51b815260206004820152602e602482015260008051602062000cb283398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b506000919050565b60005460ff808416911610620001ae5760405162461bcd60e51b815260206004820152602e602482015260008051602062000cb283398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016200013e565b506000805460ff191660ff92909216919091179055600190565b600054610100900460ff16620002245760405162461bcd60e51b815260206004820152602b602482015260008051602062000cd283398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200013e565b6200022e620002ce565b565b805160205b81811015620002ba578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146200027e57600181146200028f576200029a565b6000808585888a5af191506200029a565b6000808585895af491505b5080620002a657600080fd5b505080605501850194505050505062000235565b505050565b6001600160a01b03163b151590565b600054610100900460ff166200032a5760405162461bcd60e51b815260206004820152602b602482015260008051602062000cd283398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200013e565b6200022e33603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61092180620003916000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638d80ff0a116100665780638d80ff0a146101075780638da5cb5b1461011a578063d8d11f7814610135578063f2fde38b14610148578063f5dcb7bb1461015b57600080fd5b806312cc533f146100985780632bf613a5146100ad578063715018a6146100e757806388f8bae1146100ef575b600080fd5b6100ab6100a63660046105a9565b610182565b005b6100d47fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d881565b6040519081526020015b60405180910390f35b6100ab610214565b6100f7600181565b60405190151581526020016100de565b6100ab6101153660046105f8565b61024a565b6033546040516001600160a01b0390911681526020016100de565b6100d46101433660046106b8565b6102d2565b6100ab6101563660046107a2565b6102ff565b6100d47f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921881565b6033546001600160a01b031633146101b55760405162461bcd60e51b81526004016101ac906107c6565b60405180910390fd5b60405163f2fde38b60e01b81526001600160a01b03828116600483015283169063f2fde38b90602401600060405180830381600087803b1580156101f857600080fd5b505af115801561020c573d6000803e3d6000fd5b505050505050565b6033546001600160a01b0316331461023e5760405162461bcd60e51b81526004016101ac906107c6565b61024860006103d8565b565b805160205b818110156102cd578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811461029457600181146102a4576102af565b6000808585888a5af191506102af565b6000808585895af491505b50806102ba57600080fd5b505080605501850194505050505061024f565b505050565b60006102e78c8c8c8c8c8c8c8c8c8c8c61042a565b8051906020012090509b9a5050505050505050505050565b6033546001600160a01b031633146103295760405162461bcd60e51b81526004016101ac906107c6565b6001600160a01b03811661038e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101ac565b610397816103d8565b50565b600054610100900460ff166103c15760405162461bcd60e51b81526004016101ac906107fb565b610248610554565b6001600160a01b03163b151590565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d88d8d8d8d604051610461929190610846565b604051908190038120610487949392918e908e908e908e908e908e908e90602001610856565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b610507604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509b9a5050505050505050505050565b600054610100900460ff1661057b5760405162461bcd60e51b81526004016101ac906107fb565b610248336103d8565b6001600160a01b038116811461039757600080fd5b80356105a481610584565b919050565b600080604083850312156105bc57600080fd5b82356105c781610584565b915060208301356105d781610584565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561060a57600080fd5b813567ffffffffffffffff8082111561062257600080fd5b818401915084601f83011261063657600080fd5b813581811115610648576106486105e2565b604051601f8201601f19908116603f01168101908382118183101715610670576106706105e2565b8160405282815287602084870101111561068957600080fd5b826020860160208301376000928101602001929092525095945050505050565b8035600281106105a457600080fd5b60008060008060008060008060008060006101408c8e0312156106da57600080fd5b8b356106e581610584565b9a5060208c0135995060408c013567ffffffffffffffff8082111561070957600080fd5b818e0191508e601f83011261071d57600080fd5b81358181111561072c57600080fd5b8f602082850101111561073e57600080fd5b602083019b50809a5050505061075660608d016106a9565b965060808c0135955060a08c0135945060c08c0135935061077960e08d01610599565b92506107886101008d01610599565b91506101208c013590509295989b509295989b9093969950565b6000602082840312156107b457600080fd5b81356107bf81610584565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8183823760009101908152919050565b8b81526001600160a01b038b166020820152604081018a90526060810189905261016081016002891061089957634e487b7160e01b600052602160045260246000fd5b8860808301528760a08301528660c08301528560e08301526108c76101008301866001600160a01b03169052565b6001600160a01b03939093166101208201526101400152999850505050505050505056fea264697066735822122009f92f3f8147620e576fa16549dc3b015ae4033d658fbf1ed5e761406ba193ec64736f6c634300080b0033496e697469616c697a61626c653a20636f6e747261637420697320616c726561496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069";
17
+ static readonly bytecode = "0x60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200016d60201b620003301760201c565b15801562000063575060005460ff166001145b620000cc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620000f0576000805461ff0019166101001790555b620001056200017c60201b6200033f1760201c565b6040805160208101909152600081526200011f90620001e4565b801562000166576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5062000326565b6001600160a01b03163b151590565b600054610100900460ff16620001d85760405162461bcd60e51b815260206004820152602b602482015260008051602062000c1283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000c3565b620001e262000273565b565b805160205b818110156200026e578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811462000232576001811462000243576200024e565b6000808585888a5af191506200024e565b6000808585895af491505b50806200025a57600080fd5b5050806055018501945050505050620001e9565b505050565b600054610100900460ff16620002cf5760405162461bcd60e51b815260206004820152602b602482015260008051602062000c1283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000c3565b620001e233603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6108dc80620003366000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638d80ff0a116100665780638d80ff0a146101075780638da5cb5b1461011a578063d8d11f7814610135578063f2fde38b14610148578063f5dcb7bb1461015b57600080fd5b806312cc533f146100985780632bf613a5146100ad578063715018a6146100e757806388f8bae1146100ef575b600080fd5b6100ab6100a6366004610599565b610182565b005b6100d47fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d881565b6040519081526020015b60405180910390f35b6100ab6101e9565b6100f7600181565b60405190151581526020016100de565b6100ab6101153660046105e8565b6101fd565b6033546040516001600160a01b0390911681526020016100de565b6100d46101433660046106a8565b610285565b6100ab610156366004610792565b6102b2565b6100d47f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921881565b61018a61036e565b60405163f2fde38b60e01b81526001600160a01b03828116600483015283169063f2fde38b90602401600060405180830381600087803b1580156101cd57600080fd5b505af11580156101e1573d6000803e3d6000fd5b505050505050565b6101f161036e565b6101fb60006103c8565b565b805160205b81811015610280578083015160f81c6001820184015160601c601583018501516035840186015160558501870160008560008114610247576001811461025757610262565b6000808585888a5af19150610262565b6000808585895af491505b508061026d57600080fd5b5050806055018501945050505050610202565b505050565b600061029a8c8c8c8c8c8c8c8c8c8c8c61041a565b8051906020012090509b9a5050505050505050505050565b6102ba61036e565b6001600160a01b0381166103245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61032d816103c8565b50565b6001600160a01b03163b151590565b600054610100900460ff166103665760405162461bcd60e51b815260040161031b906107b6565b6101fb610544565b6033546001600160a01b031633146101fb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161031b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d88d8d8d8d604051610451929190610801565b604051908190038120610477949392918e908e908e908e908e908e908e90602001610811565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b6104f7604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509b9a5050505050505050505050565b600054610100900460ff1661056b5760405162461bcd60e51b815260040161031b906107b6565b6101fb336103c8565b6001600160a01b038116811461032d57600080fd5b803561059481610574565b919050565b600080604083850312156105ac57600080fd5b82356105b781610574565b915060208301356105c781610574565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156105fa57600080fd5b813567ffffffffffffffff8082111561061257600080fd5b818401915084601f83011261062657600080fd5b813581811115610638576106386105d2565b604051601f8201601f19908116603f01168101908382118183101715610660576106606105d2565b8160405282815287602084870101111561067957600080fd5b826020860160208301376000928101602001929092525095945050505050565b80356002811061059457600080fd5b60008060008060008060008060008060006101408c8e0312156106ca57600080fd5b8b356106d581610574565b9a5060208c0135995060408c013567ffffffffffffffff808211156106f957600080fd5b818e0191508e601f83011261070d57600080fd5b81358181111561071c57600080fd5b8f602082850101111561072e57600080fd5b602083019b50809a5050505061074660608d01610699565b965060808c0135955060a08c0135945060c08c0135935061076960e08d01610589565b92506107786101008d01610589565b91506101208c013590509295989b509295989b9093969950565b6000602082840312156107a457600080fd5b81356107af81610574565b9392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8183823760009101908152919050565b8b81526001600160a01b038b166020820152604081018a90526060810189905261016081016002891061085457634e487b7160e01b600052602160045260246000fd5b8860808301528760a08301528660c08301528560e08301526108826101008301866001600160a01b03169052565b6001600160a01b03939093166101208201526101400152999850505050505050505056fea26469706673582212202ff0141edaf3f76ff4bf691522a740076b0763d16b29f9b28057904188aeb98c64736f6c634300080b0033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069";
18
18
  static readonly abi: ({
19
19
  inputs: never[];
20
20
  stateMutability: string;
@@ -211,7 +211,7 @@ const _abi = [
211
211
  type: "function",
212
212
  },
213
213
  ];
214
- const _bytecode = "0x60806040523480156200001157600080fd5b506000620000206001620000b6565b9050801562000039576000805461ff0019166101001790555b6200004e620001c860201b6200039a1760201c565b604080516020810190915260008152620000689062000230565b8015620000af576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5062000381565b60008054610100900460ff16156200014f578160ff166001148015620000ef5750620000ed30620002bf60201b620003c91760201c565b155b620001475760405162461bcd60e51b815260206004820152602e602482015260008051602062000cb283398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b506000919050565b60005460ff808416911610620001ae5760405162461bcd60e51b815260206004820152602e602482015260008051602062000cb283398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016200013e565b506000805460ff191660ff92909216919091179055600190565b600054610100900460ff16620002245760405162461bcd60e51b815260206004820152602b602482015260008051602062000cd283398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200013e565b6200022e620002ce565b565b805160205b81811015620002ba578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146200027e57600181146200028f576200029a565b6000808585888a5af191506200029a565b6000808585895af491505b5080620002a657600080fd5b505080605501850194505050505062000235565b505050565b6001600160a01b03163b151590565b600054610100900460ff166200032a5760405162461bcd60e51b815260206004820152602b602482015260008051602062000cd283398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200013e565b6200022e33603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61092180620003916000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638d80ff0a116100665780638d80ff0a146101075780638da5cb5b1461011a578063d8d11f7814610135578063f2fde38b14610148578063f5dcb7bb1461015b57600080fd5b806312cc533f146100985780632bf613a5146100ad578063715018a6146100e757806388f8bae1146100ef575b600080fd5b6100ab6100a63660046105a9565b610182565b005b6100d47fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d881565b6040519081526020015b60405180910390f35b6100ab610214565b6100f7600181565b60405190151581526020016100de565b6100ab6101153660046105f8565b61024a565b6033546040516001600160a01b0390911681526020016100de565b6100d46101433660046106b8565b6102d2565b6100ab6101563660046107a2565b6102ff565b6100d47f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921881565b6033546001600160a01b031633146101b55760405162461bcd60e51b81526004016101ac906107c6565b60405180910390fd5b60405163f2fde38b60e01b81526001600160a01b03828116600483015283169063f2fde38b90602401600060405180830381600087803b1580156101f857600080fd5b505af115801561020c573d6000803e3d6000fd5b505050505050565b6033546001600160a01b0316331461023e5760405162461bcd60e51b81526004016101ac906107c6565b61024860006103d8565b565b805160205b818110156102cd578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811461029457600181146102a4576102af565b6000808585888a5af191506102af565b6000808585895af491505b50806102ba57600080fd5b505080605501850194505050505061024f565b505050565b60006102e78c8c8c8c8c8c8c8c8c8c8c61042a565b8051906020012090509b9a5050505050505050505050565b6033546001600160a01b031633146103295760405162461bcd60e51b81526004016101ac906107c6565b6001600160a01b03811661038e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101ac565b610397816103d8565b50565b600054610100900460ff166103c15760405162461bcd60e51b81526004016101ac906107fb565b610248610554565b6001600160a01b03163b151590565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d88d8d8d8d604051610461929190610846565b604051908190038120610487949392918e908e908e908e908e908e908e90602001610856565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b610507604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509b9a5050505050505050505050565b600054610100900460ff1661057b5760405162461bcd60e51b81526004016101ac906107fb565b610248336103d8565b6001600160a01b038116811461039757600080fd5b80356105a481610584565b919050565b600080604083850312156105bc57600080fd5b82356105c781610584565b915060208301356105d781610584565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561060a57600080fd5b813567ffffffffffffffff8082111561062257600080fd5b818401915084601f83011261063657600080fd5b813581811115610648576106486105e2565b604051601f8201601f19908116603f01168101908382118183101715610670576106706105e2565b8160405282815287602084870101111561068957600080fd5b826020860160208301376000928101602001929092525095945050505050565b8035600281106105a457600080fd5b60008060008060008060008060008060006101408c8e0312156106da57600080fd5b8b356106e581610584565b9a5060208c0135995060408c013567ffffffffffffffff8082111561070957600080fd5b818e0191508e601f83011261071d57600080fd5b81358181111561072c57600080fd5b8f602082850101111561073e57600080fd5b602083019b50809a5050505061075660608d016106a9565b965060808c0135955060a08c0135945060c08c0135935061077960e08d01610599565b92506107886101008d01610599565b91506101208c013590509295989b509295989b9093969950565b6000602082840312156107b457600080fd5b81356107bf81610584565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8183823760009101908152919050565b8b81526001600160a01b038b166020820152604081018a90526060810189905261016081016002891061089957634e487b7160e01b600052602160045260246000fd5b8860808301528760a08301528660c08301528560e08301526108c76101008301866001600160a01b03169052565b6001600160a01b03939093166101208201526101400152999850505050505050505056fea264697066735822122009f92f3f8147620e576fa16549dc3b015ae4033d658fbf1ed5e761406ba193ec64736f6c634300080b0033496e697469616c697a61626c653a20636f6e747261637420697320616c726561496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069";
214
+ const _bytecode = "0x60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200016d60201b620003301760201c565b15801562000063575060005460ff166001145b620000cc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620000f0576000805461ff0019166101001790555b620001056200017c60201b6200033f1760201c565b6040805160208101909152600081526200011f90620001e4565b801562000166576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5062000326565b6001600160a01b03163b151590565b600054610100900460ff16620001d85760405162461bcd60e51b815260206004820152602b602482015260008051602062000c1283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000c3565b620001e262000273565b565b805160205b818110156200026e578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811462000232576001811462000243576200024e565b6000808585888a5af191506200024e565b6000808585895af491505b50806200025a57600080fd5b5050806055018501945050505050620001e9565b505050565b600054610100900460ff16620002cf5760405162461bcd60e51b815260206004820152602b602482015260008051602062000c1283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000c3565b620001e233603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6108dc80620003366000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638d80ff0a116100665780638d80ff0a146101075780638da5cb5b1461011a578063d8d11f7814610135578063f2fde38b14610148578063f5dcb7bb1461015b57600080fd5b806312cc533f146100985780632bf613a5146100ad578063715018a6146100e757806388f8bae1146100ef575b600080fd5b6100ab6100a6366004610599565b610182565b005b6100d47fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d881565b6040519081526020015b60405180910390f35b6100ab6101e9565b6100f7600181565b60405190151581526020016100de565b6100ab6101153660046105e8565b6101fd565b6033546040516001600160a01b0390911681526020016100de565b6100d46101433660046106a8565b610285565b6100ab610156366004610792565b6102b2565b6100d47f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921881565b61018a61036e565b60405163f2fde38b60e01b81526001600160a01b03828116600483015283169063f2fde38b90602401600060405180830381600087803b1580156101cd57600080fd5b505af11580156101e1573d6000803e3d6000fd5b505050505050565b6101f161036e565b6101fb60006103c8565b565b805160205b81811015610280578083015160f81c6001820184015160601c601583018501516035840186015160558501870160008560008114610247576001811461025757610262565b6000808585888a5af19150610262565b6000808585895af491505b508061026d57600080fd5b5050806055018501945050505050610202565b505050565b600061029a8c8c8c8c8c8c8c8c8c8c8c61041a565b8051906020012090509b9a5050505050505050505050565b6102ba61036e565b6001600160a01b0381166103245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61032d816103c8565b50565b6001600160a01b03163b151590565b600054610100900460ff166103665760405162461bcd60e51b815260040161031b906107b6565b6101fb610544565b6033546001600160a01b031633146101fb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161031b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d88d8d8d8d604051610451929190610801565b604051908190038120610477949392918e908e908e908e908e908e908e90602001610811565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b6104f7604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509b9a5050505050505050505050565b600054610100900460ff1661056b5760405162461bcd60e51b815260040161031b906107b6565b6101fb336103c8565b6001600160a01b038116811461032d57600080fd5b803561059481610574565b919050565b600080604083850312156105ac57600080fd5b82356105b781610574565b915060208301356105c781610574565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156105fa57600080fd5b813567ffffffffffffffff8082111561061257600080fd5b818401915084601f83011261062657600080fd5b813581811115610638576106386105d2565b604051601f8201601f19908116603f01168101908382118183101715610660576106606105d2565b8160405282815287602084870101111561067957600080fd5b826020860160208301376000928101602001929092525095945050505050565b80356002811061059457600080fd5b60008060008060008060008060008060006101408c8e0312156106ca57600080fd5b8b356106d581610574565b9a5060208c0135995060408c013567ffffffffffffffff808211156106f957600080fd5b818e0191508e601f83011261070d57600080fd5b81358181111561071c57600080fd5b8f602082850101111561072e57600080fd5b602083019b50809a5050505061074660608d01610699565b965060808c0135955060a08c0135945060c08c0135935061076960e08d01610589565b92506107786101008d01610589565b91506101208c013590509295989b509295989b9093969950565b6000602082840312156107a457600080fd5b81356107af81610574565b9392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8183823760009101908152919050565b8b81526001600160a01b038b166020820152604081018a90526060810189905261016081016002891061085457634e487b7160e01b600052602160045260246000fd5b8860808301528760a08301528660c08301528560e08301526108826101008301866001600160a01b03169052565b6001600160a01b03939093166101208201526101400152999850505050505050505056fea26469706673582212202ff0141edaf3f76ff4bf691522a740076b0763d16b29f9b28057904188aeb98c64736f6c634300080b0033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069";
215
215
  const isSuperArgs = (xs) => xs.length > 1;
216
216
  class SafeMock__factory extends ethers_1.ContractFactory {
217
217
  constructor(...args) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skalenetwork/upgrade-tools",
3
- "version": "1.0.0-develop.2",
3
+ "version": "1.0.0-develop.20",
4
4
  "description": "Scripts to support upgrades of smart contracts",
5
5
  "files": [
6
6
  "dist/**/*"