@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.
- package/dist/hardhat.config.js +1 -1
- package/dist/src/deploy.js +3 -1
- package/dist/src/gnosis-safe.d.ts +1 -1
- package/dist/src/gnosis-safe.js +72 -30
- package/dist/src/upgrade.d.ts +2 -1
- package/dist/src/upgrade.js +30 -2
- package/dist/typechain-types/factories/SafeMock__factory.d.ts +1 -1
- package/dist/typechain-types/factories/SafeMock__factory.js +1 -1
- package/package.json +1 -1
package/dist/hardhat.config.js
CHANGED
package/dist/src/deploy.js
CHANGED
|
@@ -90,7 +90,9 @@ function getContractFactory(contract) {
|
|
|
90
90
|
Object.assign(libraryArtifacts, manifest.libraries);
|
|
91
91
|
}
|
|
92
92
|
finally {
|
|
93
|
-
|
|
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[],
|
|
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 {};
|
package/dist/src/gnosis-safe.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
|
123
|
-
if (
|
|
100
|
+
let nonceValue = 0;
|
|
101
|
+
if (nonce === undefined) {
|
|
124
102
|
try {
|
|
125
|
-
|
|
126
|
-
|
|
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":
|
|
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
|
+
}
|
package/dist/src/upgrade.d.ts
CHANGED
|
@@ -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
|
-
|
|
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 {};
|
package/dist/src/upgrade.js
CHANGED
|
@@ -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 = "
|
|
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 = "
|
|
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) {
|