@skalenetwork/upgrade-tools 3.0.0-skale-contracts.6 → 3.0.0-skale-contracts.7
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,25 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
type Ethers = typeof ethers & HardhatEthersHelpers;
|
|
4
|
-
interface SafeMultisigTransaction {
|
|
5
|
-
safe: string;
|
|
6
|
-
to: string;
|
|
7
|
-
value: number;
|
|
8
|
-
data?: string;
|
|
9
|
-
operation: number;
|
|
10
|
-
gasToken?: string;
|
|
11
|
-
safeTxGas: number;
|
|
12
|
-
baseGas: number;
|
|
13
|
-
gasPrice: number;
|
|
14
|
-
refundReceiver?: string;
|
|
15
|
-
nonce: number;
|
|
16
|
-
contractTransactionHash: string;
|
|
17
|
-
sender: string;
|
|
18
|
-
signature?: string;
|
|
19
|
-
origin?: string;
|
|
20
|
-
}
|
|
21
|
-
export declare function getSafeTransactionUrl(chainId: number): string;
|
|
22
|
-
export declare function getSafeRelayUrl(chainId: number): string;
|
|
23
|
-
export declare function createMultiSendTransaction(ethers: Ethers, safeAddress: string, privateKey: string, transactions: string[], chainId: number, nonce?: number): Promise<SafeMultisigTransaction>;
|
|
24
|
-
export declare function sendSafeTransaction(safe: string, chainId: number, safeTx: SafeMultisigTransaction): Promise<void>;
|
|
25
|
-
export {};
|
|
1
|
+
import { UnsignedTransaction } from "ethers";
|
|
2
|
+
export declare function createMultiSendTransaction(safeAddress: string, transactions: UnsignedTransaction[]): Promise<void>;
|
package/dist/src/gnosis-safe.js
CHANGED
|
@@ -26,227 +26,106 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.
|
|
30
|
-
const axios_1 = __importDefault(require("axios"));
|
|
31
|
-
const ethUtil = __importStar(require("ethereumjs-util"));
|
|
29
|
+
exports.createMultiSendTransaction = void 0;
|
|
32
30
|
const chalk_1 = __importDefault(require("chalk"));
|
|
33
|
-
const
|
|
31
|
+
const hardhat_1 = require("hardhat");
|
|
32
|
+
const api_kit_1 = __importDefault(require("@safe-global/api-kit"));
|
|
33
|
+
const protocol_kit_1 = __importStar(require("@safe-global/protocol-kit"));
|
|
34
34
|
var Network;
|
|
35
35
|
(function (Network) {
|
|
36
36
|
Network[Network["MAINNET"] = 1] = "MAINNET";
|
|
37
|
-
Network[Network["RINKEBY"] = 4] = "RINKEBY";
|
|
38
37
|
Network[Network["GOERLI"] = 5] = "GOERLI";
|
|
39
38
|
Network[Network["GANACHE"] = 1337] = "GANACHE";
|
|
40
39
|
Network[Network["HARDHAT"] = 31337] = "HARDHAT";
|
|
41
40
|
})(Network || (Network = {}));
|
|
42
41
|
// constants
|
|
43
|
-
const ADDRESSES = {
|
|
44
|
-
multiSend: {
|
|
45
|
-
[Network.MAINNET]: "0x8D29bE29923b68abfDD21e541b9374737B49cdAD",
|
|
46
|
-
[Network.RINKEBY]: "0x8D29bE29923b68abfDD21e541b9374737B49cdAD",
|
|
47
|
-
[Network.GOERLI]: "0x8D29bE29923b68abfDD21e541b9374737B49cdAD",
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
42
|
const URLS = {
|
|
51
43
|
safe_transaction: {
|
|
52
|
-
[Network.MAINNET]: "https://safe-transaction
|
|
53
|
-
[Network.
|
|
54
|
-
[Network.GOERLI]: "https://safe-transaction.goerli.gnosis.io",
|
|
55
|
-
},
|
|
56
|
-
safe_relay: {
|
|
57
|
-
[Network.MAINNET]: "https://safe-relay.mainnet.gnosis.io",
|
|
58
|
-
[Network.RINKEBY]: "https://safe-relay.rinkeby.gnosis.io",
|
|
59
|
-
[Network.GOERLI]: "https://safe-relay.goerli.gnosis.io",
|
|
44
|
+
[Network.MAINNET]: "https://safe-transaction-mainnet.safe.global",
|
|
45
|
+
[Network.GOERLI]: "https://safe-transaction-goerli.safe.global",
|
|
60
46
|
}
|
|
61
47
|
};
|
|
62
48
|
// public functions
|
|
63
|
-
function
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
function getSafeRelayUrl(chainId) {
|
|
73
|
-
if (Object.keys(URLS.safe_relay).includes(chainId.toString())) {
|
|
74
|
-
return URLS.safe_relay[chainId];
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
throw Error(`Can't get safe-relay url at network with chainId = ${chainId}`);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
exports.getSafeRelayUrl = getSafeRelayUrl;
|
|
81
|
-
async function createMultiSendTransaction(ethers, safeAddress, privateKey, transactions, chainId, nonce) {
|
|
82
|
-
const multiSendAddress = getMultiSendAddress(chainId);
|
|
83
|
-
const multiSendAbi = [{ "constant": false, "inputs": [{ "internalType": "bytes", "name": "transactions", "type": "bytes" }], "name": "multiSend", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }];
|
|
84
|
-
const multiSend = new ethers.Contract(multiSendAddress, new ethers.utils.Interface(multiSendAbi), ethers.provider);
|
|
85
|
-
let nonceValue = 0;
|
|
86
|
-
if (nonce === undefined) {
|
|
87
|
-
try {
|
|
88
|
-
if (process.env.NONCE) {
|
|
89
|
-
// NONCE variable is set
|
|
90
|
-
if (isNaN(Number.parseInt(process.env.NONCE))) {
|
|
91
|
-
// NONCE variable is not a number
|
|
92
|
-
if (process.env.NONCE.toLowerCase() === "pending") {
|
|
93
|
-
nonceValue = await getSafeNonceWithPending(chainId, safeAddress);
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
nonceValue = await getSafeNonce(chainId, safeAddress);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
// NONCE variable is a number
|
|
101
|
-
nonceValue = Number.parseInt(process.env.NONCE);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
// NONCE variable is not set
|
|
106
|
-
nonceValue = await getSafeNonce(chainId, safeAddress);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
catch (e) {
|
|
110
|
-
if (!(e instanceof Error) || !e.toString().startsWith("Error: Can't get safe-transaction url")) {
|
|
111
|
-
throw e;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
nonceValue = nonce;
|
|
49
|
+
async function createMultiSendTransaction(safeAddress, transactions) {
|
|
50
|
+
const safeTransactionData = [];
|
|
51
|
+
for (const transaction of transactions) {
|
|
52
|
+
safeTransactionData.push({
|
|
53
|
+
to: transaction.to ? transaction.to : hardhat_1.ethers.constants.AddressZero,
|
|
54
|
+
data: transaction.data ? transaction.data.toString() : "0x",
|
|
55
|
+
value: transaction.value ? transaction.value.toString() : "0",
|
|
56
|
+
operation: 0,
|
|
57
|
+
});
|
|
117
58
|
}
|
|
118
|
-
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
"
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
"gasPrice": 0,
|
|
129
|
-
"refundReceiver": ethers.constants.AddressZero,
|
|
130
|
-
"nonce": nonceValue, // Nonce of the Safe, transaction cannot be executed until Safe's nonce is not equal to this nonce
|
|
59
|
+
const safeService = await getSafeService();
|
|
60
|
+
const nonce = await safeService.getNextNonce(safeAddress);
|
|
61
|
+
console.log("Will send tx to Gnosis with nonce", nonce);
|
|
62
|
+
const options = {
|
|
63
|
+
safeTxGas: "0",
|
|
64
|
+
baseGas: "0",
|
|
65
|
+
gasPrice: "0",
|
|
66
|
+
gasToken: hardhat_1.ethers.constants.AddressZero,
|
|
67
|
+
refundReceiver: hardhat_1.ethers.constants.AddressZero,
|
|
68
|
+
nonce: nonce // Nonce of the Safe, transaction cannot be executed until Safe's nonce is not equal to this nonce
|
|
131
69
|
};
|
|
132
|
-
const
|
|
133
|
-
const
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
...tx,
|
|
138
|
-
"contractTransactionHash": digestHex,
|
|
139
|
-
// Owner of the Safe proposing the transaction. Must match one of the signatures
|
|
140
|
-
"sender": ethers.utils.getAddress(ethUtil.bufferToHex(ethUtil.privateToAddress(privateKeyBuffer))),
|
|
141
|
-
"signature": signature,
|
|
142
|
-
"origin": "Upgrade skale-manager" // Give more information about the transaction, e.g. "My Custom Safe app"
|
|
143
|
-
};
|
|
144
|
-
return txToSend;
|
|
70
|
+
const ethAdapter = await getEthAdapter();
|
|
71
|
+
const safeSdk = await protocol_kit_1.default.create({ ethAdapter, safeAddress });
|
|
72
|
+
const safeTransaction = await safeSdk.createTransaction({ safeTransactionData, options });
|
|
73
|
+
await estimateSafeTransaction(safeAddress, safeTransactionData);
|
|
74
|
+
await proposeTransaction(safeAddress, safeTransaction);
|
|
145
75
|
}
|
|
146
76
|
exports.createMultiSendTransaction = createMultiSendTransaction;
|
|
147
|
-
async function sendSafeTransaction(safe, chainId, safeTx) {
|
|
148
|
-
try {
|
|
149
|
-
console.log("Estimate gas");
|
|
150
|
-
const estimateRequest = safeTx;
|
|
151
|
-
try {
|
|
152
|
-
const estimateResponse = await axios_1.default.post(`${getSafeRelayUrl(chainId)}/api/v2/safes/${safe}/transactions/estimate/`, estimateRequest);
|
|
153
|
-
console.log(chalk_1.default.cyan(`Recommend to set gas limit to ${parseInt(estimateResponse.data.safeTxGas, 10) + parseInt(estimateResponse.data.baseGas, 10)}`));
|
|
154
|
-
}
|
|
155
|
-
catch (e) {
|
|
156
|
-
console.log(chalk_1.default.red("Failed to estimate gas"));
|
|
157
|
-
console.log(e);
|
|
158
|
-
}
|
|
159
|
-
console.log(chalk_1.default.green("Send transaction to gnosis safe"));
|
|
160
|
-
await axios_1.default.post(`${getSafeTransactionUrl(chainId)}/api/v1/safes/${safe}/multisig-transactions/`, safeTx);
|
|
161
|
-
}
|
|
162
|
-
catch (e) {
|
|
163
|
-
if (axios_1.default.isAxiosError(e)) {
|
|
164
|
-
if (e.response) {
|
|
165
|
-
console.log(JSON.stringify(e.response.data, null, 4));
|
|
166
|
-
console.log(chalk_1.default.red(`Request failed with ${e.response.status} code`));
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
console.log(chalk_1.default.red("Request failed with unknown reason"));
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
throw e;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
exports.sendSafeTransaction = sendSafeTransaction;
|
|
176
77
|
// private functions
|
|
177
|
-
function
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
78
|
+
async function estimateSafeTransaction(safeAddress, safeTransactionData) {
|
|
79
|
+
console.log("Estimate gas");
|
|
80
|
+
const safeService = await getSafeService();
|
|
81
|
+
for (const transaction of safeTransactionData) {
|
|
82
|
+
const estimateResponse = await safeService.estimateSafeTransaction(safeAddress, {
|
|
83
|
+
to: transaction.to,
|
|
84
|
+
value: transaction.value,
|
|
85
|
+
data: transaction.data,
|
|
86
|
+
operation: transaction.operation || 0,
|
|
87
|
+
});
|
|
88
|
+
console.log(chalk_1.default.cyan(`Recommend to set gas limit to ${parseInt(estimateResponse.safeTxGas, 10)}`));
|
|
186
89
|
}
|
|
90
|
+
console.log(chalk_1.default.green("Send transaction to gnosis safe"));
|
|
91
|
+
}
|
|
92
|
+
async function proposeTransaction(safeAddress, safeTransaction) {
|
|
93
|
+
const [safeOwner] = await hardhat_1.ethers.getSigners();
|
|
94
|
+
const ethAdapter = await getEthAdapter();
|
|
95
|
+
const safeSdk = await protocol_kit_1.default.create({ ethAdapter, safeAddress });
|
|
96
|
+
const safeTxHash = await safeSdk.getTransactionHash(safeTransaction);
|
|
97
|
+
const senderSignature = await safeSdk.signTransactionHash(safeTxHash);
|
|
98
|
+
const safeService = await getSafeService();
|
|
99
|
+
await safeService.proposeTransaction({
|
|
100
|
+
safeAddress,
|
|
101
|
+
safeTransactionData: safeTransaction.data,
|
|
102
|
+
safeTxHash,
|
|
103
|
+
senderAddress: safeOwner.address,
|
|
104
|
+
senderSignature: senderSignature.data
|
|
105
|
+
});
|
|
187
106
|
}
|
|
188
|
-
function
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}
|
|
196
|
-
}).join("");
|
|
107
|
+
async function getEthAdapter() {
|
|
108
|
+
const [safeOwner] = await hardhat_1.ethers.getSigners();
|
|
109
|
+
const ethAdapter = new protocol_kit_1.EthersAdapter({
|
|
110
|
+
ethers: hardhat_1.ethers,
|
|
111
|
+
signerOrProvider: safeOwner
|
|
112
|
+
});
|
|
113
|
+
return ethAdapter;
|
|
197
114
|
}
|
|
198
|
-
async function
|
|
199
|
-
const
|
|
200
|
-
|
|
115
|
+
async function getSafeService() {
|
|
116
|
+
const chainId = (await hardhat_1.ethers.provider.getNetwork()).chainId;
|
|
117
|
+
const ethAdapter = await getEthAdapter();
|
|
118
|
+
const safeService = new api_kit_1.default({
|
|
119
|
+
txServiceUrl: getSafeTransactionUrl(chainId),
|
|
120
|
+
ethAdapter
|
|
121
|
+
});
|
|
122
|
+
return safeService;
|
|
201
123
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
return allTransactions.data.results[0].nonce + 1;
|
|
124
|
+
function getSafeTransactionUrl(chainId) {
|
|
125
|
+
if (Object.keys(URLS.safe_transaction).includes(chainId.toString())) {
|
|
126
|
+
return URLS.safe_transaction[chainId];
|
|
206
127
|
}
|
|
207
128
|
else {
|
|
208
|
-
|
|
129
|
+
throw Error(`Can't get safe-transaction url at network with chainId = ${chainId}`);
|
|
209
130
|
}
|
|
210
131
|
}
|
|
211
|
-
function getDomainSeparator(safeAddress, chainId) {
|
|
212
|
-
const DOMAIN_SEPARATOR_TYPEHASH = "0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218";
|
|
213
|
-
return ethers_1.ethers.utils.solidityKeccak256(["bytes"], [
|
|
214
|
-
ethers_1.ethers.utils.defaultAbiCoder.encode(["bytes32", "uint256", "address"], [DOMAIN_SEPARATOR_TYPEHASH, chainId, safeAddress])
|
|
215
|
-
]);
|
|
216
|
-
}
|
|
217
|
-
function encodeTransactionData(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce, safeAddress, chainId) {
|
|
218
|
-
const dataHash = ethers_1.ethers.utils.solidityKeccak256(["bytes"], [data]);
|
|
219
|
-
const SAFE_TX_TYPEHASH = "0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8";
|
|
220
|
-
const encoded = ethers_1.ethers.utils.defaultAbiCoder.encode([
|
|
221
|
-
"bytes32",
|
|
222
|
-
"address",
|
|
223
|
-
"uint256",
|
|
224
|
-
"bytes32",
|
|
225
|
-
"uint256",
|
|
226
|
-
"uint256",
|
|
227
|
-
"uint256",
|
|
228
|
-
"uint256",
|
|
229
|
-
"address",
|
|
230
|
-
"address",
|
|
231
|
-
"uint256"
|
|
232
|
-
], [
|
|
233
|
-
SAFE_TX_TYPEHASH,
|
|
234
|
-
to,
|
|
235
|
-
value,
|
|
236
|
-
dataHash,
|
|
237
|
-
operation,
|
|
238
|
-
safeTxGas,
|
|
239
|
-
baseGas,
|
|
240
|
-
gasPrice,
|
|
241
|
-
gasToken,
|
|
242
|
-
refundReceiver,
|
|
243
|
-
_nonce
|
|
244
|
-
]);
|
|
245
|
-
const encodedHash = ethers_1.ethers.utils.solidityKeccak256(["bytes"], [encoded]);
|
|
246
|
-
return ethers_1.ethers.utils.solidityPack(["bytes1", "bytes1", "bytes32", "bytes32"], ["0x19", "0x01", getDomainSeparator(safeAddress, chainId), encodedHash]);
|
|
247
|
-
}
|
|
248
|
-
function getTransactionHash(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce, safeAddress, chainId) {
|
|
249
|
-
return ethers_1.ethers.utils.solidityKeccak256(["bytes"], [
|
|
250
|
-
encodeTransactionData(to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce, safeAddress, chainId)
|
|
251
|
-
]);
|
|
252
|
-
}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SafeSubmitter = void 0;
|
|
4
|
-
const ethers_1 = require("ethers");
|
|
5
4
|
const hardhat_1 = require("hardhat");
|
|
6
5
|
const gnosis_safe_1 = require("../gnosis-safe");
|
|
7
|
-
const multiSend_1 = require("../multiSend");
|
|
8
6
|
const submitter_1 = require("./submitter");
|
|
9
7
|
class SafeSubmitter extends submitter_1.Submitter {
|
|
10
8
|
constructor(safeAddress, chainId) {
|
|
@@ -13,21 +11,10 @@ class SafeSubmitter extends submitter_1.Submitter {
|
|
|
13
11
|
this.chainId = chainId;
|
|
14
12
|
}
|
|
15
13
|
async submit(transactions) {
|
|
16
|
-
const safeTransactions = [];
|
|
17
|
-
for (const transaction of transactions) {
|
|
18
|
-
safeTransactions.push((0, multiSend_1.encodeTransaction)(0, transaction.to ? transaction.to : hardhat_1.ethers.constants.AddressZero, transaction.value ? ethers_1.BigNumber.from(transaction.value) : 0, transaction.data ? transaction.data.toString() : "0x"));
|
|
19
|
-
}
|
|
20
|
-
let privateKey = hardhat_1.network.config.accounts[0];
|
|
21
|
-
if (hardhat_1.network.config.accounts === "remote") {
|
|
22
|
-
// Don't have an information about private key
|
|
23
|
-
// Use random one because we most probable run tests
|
|
24
|
-
privateKey = hardhat_1.ethers.Wallet.createRandom().privateKey;
|
|
25
|
-
}
|
|
26
14
|
if (!this.chainId) {
|
|
27
15
|
this.chainId = (await hardhat_1.ethers.provider.getNetwork()).chainId;
|
|
28
16
|
}
|
|
29
|
-
|
|
30
|
-
await (0, gnosis_safe_1.sendSafeTransaction)(this.safeAddress, this.chainId, safeTx);
|
|
17
|
+
await (0, gnosis_safe_1.createMultiSendTransaction)(this.safeAddress, transactions);
|
|
31
18
|
}
|
|
32
19
|
}
|
|
33
20
|
exports.SafeSubmitter = SafeSubmitter;
|
|
@@ -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 = "0x60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200016d60201b620003301760201c565b15801562000063575060005460ff166001145b620000cc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620000f0576000805461ff0019166101001790555b620001056200017c60201b6200033f1760201c565b6040805160208101909152600081526200011f90620001e4565b801562000166576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5062000326565b6001600160a01b03163b151590565b600054610100900460ff16620001d85760405162461bcd60e51b815260206004820152602b602482015260008051602062000c1283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000c3565b620001e262000273565b565b805160205b818110156200026e578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811462000232576001811462000243576200024e565b6000808585888a5af191506200024e565b6000808585895af491505b50806200025a57600080fd5b5050806055018501945050505050620001e9565b505050565b600054610100900460ff16620002cf5760405162461bcd60e51b815260206004820152602b602482015260008051602062000c1283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000c3565b620001e233603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6108dc80620003366000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638d80ff0a116100665780638d80ff0a146101075780638da5cb5b1461011a578063d8d11f7814610135578063f2fde38b14610148578063f5dcb7bb1461015b57600080fd5b806312cc533f146100985780632bf613a5146100ad578063715018a6146100e757806388f8bae1146100ef575b600080fd5b6100ab6100a6366004610599565b610182565b005b6100d47fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d881565b6040519081526020015b60405180910390f35b6100ab6101e9565b6100f7600181565b60405190151581526020016100de565b6100ab6101153660046105e8565b6101fd565b6033546040516001600160a01b0390911681526020016100de565b6100d46101433660046106a8565b610285565b6100ab610156366004610792565b6102b2565b6100d47f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921881565b61018a61036e565b60405163f2fde38b60e01b81526001600160a01b03828116600483015283169063f2fde38b90602401600060405180830381600087803b1580156101cd57600080fd5b505af11580156101e1573d6000803e3d6000fd5b505050505050565b6101f161036e565b6101fb60006103c8565b565b805160205b81811015610280578083015160f81c6001820184015160601c601583018501516035840186015160558501870160008560008114610247576001811461025757610262565b6000808585888a5af19150610262565b6000808585895af491505b508061026d57600080fd5b5050806055018501945050505050610202565b505050565b600061029a8c8c8c8c8c8c8c8c8c8c8c61041a565b8051906020012090509b9a5050505050505050505050565b6102ba61036e565b6001600160a01b0381166103245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61032d816103c8565b50565b6001600160a01b03163b151590565b600054610100900460ff166103665760405162461bcd60e51b815260040161031b906107b6565b6101fb610544565b6033546001600160a01b031633146101fb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161031b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d88d8d8d8d604051610451929190610801565b604051908190038120610477949392918e908e908e908e908e908e908e90602001610811565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b6104f7604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509b9a5050505050505050505050565b600054610100900460ff1661056b5760405162461bcd60e51b815260040161031b906107b6565b6101fb336103c8565b6001600160a01b038116811461032d57600080fd5b803561059481610574565b919050565b600080604083850312156105ac57600080fd5b82356105b781610574565b915060208301356105c781610574565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156105fa57600080fd5b813567ffffffffffffffff8082111561061257600080fd5b818401915084601f83011261062657600080fd5b813581811115610638576106386105d2565b604051601f8201601f19908116603f01168101908382118183101715610660576106606105d2565b8160405282815287602084870101111561067957600080fd5b826020860160208301376000928101602001929092525095945050505050565b80356002811061059457600080fd5b60008060008060008060008060008060006101408c8e0312156106ca57600080fd5b8b356106d581610574565b9a5060208c0135995060408c013567ffffffffffffffff808211156106f957600080fd5b818e0191508e601f83011261070d57600080fd5b81358181111561071c57600080fd5b8f602082850101111561072e57600080fd5b602083019b50809a5050505061074660608d01610699565b965060808c0135955060a08c0135945060c08c0135935061076960e08d01610589565b92506107786101008d01610589565b91506101208c013590509295989b509295989b9093969950565b6000602082840312156107a457600080fd5b81356107af81610574565b9392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8183823760009101908152919050565b8b81526001600160a01b038b166020820152604081018a90526060810189905261016081016002891061085457634e487b7160e01b600052602160045260246000fd5b8860808301528760a08301528660c08301528560e08301526108826101008301866001600160a01b03169052565b6001600160a01b03939093166101208201526101400152999850505050505050505056fea2646970667358221220d091f04727a2cb4359f71bc8a6cae926af5999c47b5b4ac4683524db6eae355f64736f6c634300080b0033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069";
|
|
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 = "0x60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200016d60201b620003301760201c565b15801562000063575060005460ff166001145b620000cc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620000f0576000805461ff0019166101001790555b620001056200017c60201b6200033f1760201c565b6040805160208101909152600081526200011f90620001e4565b801562000166576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5062000326565b6001600160a01b03163b151590565b600054610100900460ff16620001d85760405162461bcd60e51b815260206004820152602b602482015260008051602062000c1283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000c3565b620001e262000273565b565b805160205b818110156200026e578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811462000232576001811462000243576200024e565b6000808585888a5af191506200024e565b6000808585895af491505b50806200025a57600080fd5b5050806055018501945050505050620001e9565b505050565b600054610100900460ff16620002cf5760405162461bcd60e51b815260206004820152602b602482015260008051602062000c1283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000c3565b620001e233603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6108dc80620003366000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638d80ff0a116100665780638d80ff0a146101075780638da5cb5b1461011a578063d8d11f7814610135578063f2fde38b14610148578063f5dcb7bb1461015b57600080fd5b806312cc533f146100985780632bf613a5146100ad578063715018a6146100e757806388f8bae1146100ef575b600080fd5b6100ab6100a6366004610599565b610182565b005b6100d47fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d881565b6040519081526020015b60405180910390f35b6100ab6101e9565b6100f7600181565b60405190151581526020016100de565b6100ab6101153660046105e8565b6101fd565b6033546040516001600160a01b0390911681526020016100de565b6100d46101433660046106a8565b610285565b6100ab610156366004610792565b6102b2565b6100d47f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921881565b61018a61036e565b60405163f2fde38b60e01b81526001600160a01b03828116600483015283169063f2fde38b90602401600060405180830381600087803b1580156101cd57600080fd5b505af11580156101e1573d6000803e3d6000fd5b505050505050565b6101f161036e565b6101fb60006103c8565b565b805160205b81811015610280578083015160f81c6001820184015160601c601583018501516035840186015160558501870160008560008114610247576001811461025757610262565b6000808585888a5af19150610262565b6000808585895af491505b508061026d57600080fd5b5050806055018501945050505050610202565b505050565b600061029a8c8c8c8c8c8c8c8c8c8c8c61041a565b8051906020012090509b9a5050505050505050505050565b6102ba61036e565b6001600160a01b0381166103245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61032d816103c8565b50565b6001600160a01b03163b151590565b600054610100900460ff166103665760405162461bcd60e51b815260040161031b906107b6565b6101fb610544565b6033546001600160a01b031633146101fb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161031b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d88d8d8d8d604051610451929190610801565b604051908190038120610477949392918e908e908e908e908e908e908e90602001610811565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b6104f7604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509b9a5050505050505050505050565b600054610100900460ff1661056b5760405162461bcd60e51b815260040161031b906107b6565b6101fb336103c8565b6001600160a01b038116811461032d57600080fd5b803561059481610574565b919050565b600080604083850312156105ac57600080fd5b82356105b781610574565b915060208301356105c781610574565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156105fa57600080fd5b813567ffffffffffffffff8082111561061257600080fd5b818401915084601f83011261062657600080fd5b813581811115610638576106386105d2565b604051601f8201601f19908116603f01168101908382118183101715610660576106606105d2565b8160405282815287602084870101111561067957600080fd5b826020860160208301376000928101602001929092525095945050505050565b80356002811061059457600080fd5b60008060008060008060008060008060006101408c8e0312156106ca57600080fd5b8b356106d581610574565b9a5060208c0135995060408c013567ffffffffffffffff808211156106f957600080fd5b818e0191508e601f83011261070d57600080fd5b81358181111561071c57600080fd5b8f602082850101111561072e57600080fd5b602083019b50809a5050505061074660608d01610699565b965060808c0135955060a08c0135945060c08c0135935061076960e08d01610589565b92506107786101008d01610589565b91506101208c013590509295989b509295989b9093969950565b6000602082840312156107a457600080fd5b81356107af81610574565b9392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8183823760009101908152919050565b8b81526001600160a01b038b166020820152604081018a90526060810189905261016081016002891061085457634e487b7160e01b600052602160045260246000fd5b8860808301528760a08301528660c08301528560e08301526108826101008301866001600160a01b03169052565b6001600160a01b03939093166101208201526101400152999850505050505050505056fea2646970667358221220d091f04727a2cb4359f71bc8a6cae926af5999c47b5b4ac4683524db6eae355f64736f6c634300080b0033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069";
|
|
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": "3.0.0-skale-contracts.
|
|
3
|
+
"version": "3.0.0-skale-contracts.7",
|
|
4
4
|
"description": "Scripts to support upgrades of smart contracts",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/**/*"
|
|
@@ -30,18 +30,21 @@
|
|
|
30
30
|
"@typechain/hardhat": "^8.0.0",
|
|
31
31
|
"@typescript-eslint/eslint-plugin": "^5.23.0",
|
|
32
32
|
"@typescript-eslint/parser": "^5.23.0",
|
|
33
|
-
"cspell": "^
|
|
33
|
+
"cspell": "^7.0.0",
|
|
34
34
|
"eslint": "^8.15.0",
|
|
35
35
|
"install-peers-cli": "^2.2.0",
|
|
36
36
|
"solhint": "^3.3.7",
|
|
37
37
|
"ts-node": "^10.5.0",
|
|
38
38
|
"typechain": "^8.2.0",
|
|
39
|
-
"typescript": "^5.1.
|
|
39
|
+
"typescript": "^5.1.6"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@openzeppelin/contracts-upgradeable": "^4.4.2",
|
|
43
|
+
"@safe-global/api-kit": "^1.3.0",
|
|
44
|
+
"@safe-global/protocol-kit": "^1.2.0",
|
|
45
|
+
"@safe-global/safe-core-sdk-types": "^2.2.0",
|
|
43
46
|
"@skalenetwork/skale-contracts": "^0.0.1-main.20",
|
|
44
|
-
"axios": "^
|
|
47
|
+
"axios": "^1.4.0",
|
|
45
48
|
"ethereumjs-util": "^7.1.4"
|
|
46
49
|
},
|
|
47
50
|
"peerDependencies": {
|
|
@@ -49,7 +52,7 @@
|
|
|
49
52
|
"@openzeppelin/hardhat-upgrades": "^1.14.0",
|
|
50
53
|
"@openzeppelin/upgrades-core": "^1.27.1",
|
|
51
54
|
"@types/mocha": "^9.1.0",
|
|
52
|
-
"ethers": "^5.
|
|
53
|
-
"hardhat": "
|
|
55
|
+
"ethers": "^5.7.2",
|
|
56
|
+
"hardhat": "2.8.3 - 2.16.1"
|
|
54
57
|
}
|
|
55
58
|
}
|