@skalenetwork/upgrade-tools 3.0.0-skale-contracts.6 → 3.0.0-skale-contracts.8
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/src/deploy.js +7 -8
- package/dist/src/gnosis-safe.d.ts +2 -25
- package/dist/src/gnosis-safe.js +65 -198
- package/dist/src/submitters/auto-submitter.d.ts +1 -1
- package/dist/src/submitters/auto-submitter.js +4 -9
- package/dist/src/submitters/safe-submitter.js +1 -14
- package/dist/src/submitters/safe-to-ima-submitter.d.ts +1 -1
- package/dist/src/submitters/safe-to-ima-submitter.js +1 -2
- package/dist/src/upgrader.d.ts +1 -1
- package/dist/src/upgrader.js +5 -10
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +3 -3
- package/dist/typechain-types/factories/SafeMock__factory.d.ts +1 -1
- package/dist/typechain-types/factories/SafeMock__factory.js +1 -1
- package/package.json +13 -10
package/dist/src/deploy.js
CHANGED
|
@@ -5,8 +5,7 @@ const upgrades_core_1 = require("@openzeppelin/upgrades-core");
|
|
|
5
5
|
const hardhat_1 = require("hardhat");
|
|
6
6
|
const fs_1 = require("fs");
|
|
7
7
|
async function _deployLibrary(libraryName) {
|
|
8
|
-
const Library = await hardhat_1.ethers.getContractFactory(libraryName);
|
|
9
|
-
const library = await Library.deploy();
|
|
8
|
+
const Library = await hardhat_1.ethers.getContractFactory(libraryName), library = await Library.deploy();
|
|
10
9
|
await library.deployed();
|
|
11
10
|
return library.address;
|
|
12
11
|
}
|
|
@@ -37,9 +36,7 @@ function _linkBytecode(artifact, libraries) {
|
|
|
37
36
|
return bytecode;
|
|
38
37
|
}
|
|
39
38
|
async function getLinkedContractFactory(contractName, libraries) {
|
|
40
|
-
const cArtifact = await hardhat_1.artifacts.readArtifact(contractName);
|
|
41
|
-
const linkedBytecode = _linkBytecode(cArtifact, libraries);
|
|
42
|
-
const ContractFactory = await hardhat_1.ethers.getContractFactory(cArtifact.abi, linkedBytecode);
|
|
39
|
+
const cArtifact = await hardhat_1.artifacts.readArtifact(contractName), linkedBytecode = _linkBytecode(cArtifact, libraries), ContractFactory = await hardhat_1.ethers.getContractFactory(cArtifact.abi, linkedBytecode);
|
|
43
40
|
return ContractFactory;
|
|
44
41
|
}
|
|
45
42
|
exports.getLinkedContractFactory = getLinkedContractFactory;
|
|
@@ -56,11 +53,13 @@ async function getContractFactory(contract) {
|
|
|
56
53
|
const libraryName = Object.keys(linkReferences[key])[0];
|
|
57
54
|
libraryNames.push(libraryName);
|
|
58
55
|
}
|
|
59
|
-
const libraries = await deployLibraries(libraryNames);
|
|
60
|
-
const libraryArtifacts = {};
|
|
56
|
+
const libraries = await deployLibraries(libraryNames), libraryArtifacts = {};
|
|
61
57
|
for (const [libraryName, libraryAddress] of libraries.entries()) {
|
|
62
58
|
const { bytecode } = await hardhat_1.artifacts.readArtifact(libraryName);
|
|
63
|
-
libraryArtifacts[libraryName] = {
|
|
59
|
+
libraryArtifacts[libraryName] = {
|
|
60
|
+
"address": libraryAddress,
|
|
61
|
+
"bytecodeHash": (0, upgrades_core_1.hashBytecode)(bytecode)
|
|
62
|
+
};
|
|
64
63
|
}
|
|
65
64
|
let manifest;
|
|
66
65
|
try {
|
|
@@ -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,94 @@ 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
|
-
|
|
120
|
-
|
|
121
|
-
"
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
"nonce": nonceValue, // Nonce of the Safe, transaction cannot be executed until Safe's nonce is not equal to this nonce
|
|
131
|
-
};
|
|
132
|
-
const digestHex = getTransactionHash(tx.to, tx.value, tx.data, tx.operation, tx.safeTxGas, tx.baseGas, tx.gasPrice, tx.gasToken, tx.refundReceiver, tx.nonce, safeAddress, chainId);
|
|
133
|
-
const privateKeyBuffer = ethUtil.toBuffer(privateKey);
|
|
134
|
-
const { r, s, v } = ethUtil.ecsign(ethUtil.toBuffer(digestHex), privateKeyBuffer);
|
|
135
|
-
const signature = ethUtil.toRpcSig(v, r, s).toString();
|
|
136
|
-
const txToSend = {
|
|
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;
|
|
59
|
+
const safeService = await getSafeService(), nonce = await safeService.getNextNonce(safeAddress);
|
|
60
|
+
console.log("Will send tx to Gnosis with nonce", nonce);
|
|
61
|
+
const options = {
|
|
62
|
+
safeTxGas: "0",
|
|
63
|
+
baseGas: "0",
|
|
64
|
+
gasPrice: "0",
|
|
65
|
+
gasToken: hardhat_1.ethers.constants.AddressZero,
|
|
66
|
+
refundReceiver: hardhat_1.ethers.constants.AddressZero,
|
|
67
|
+
nonce: nonce // Nonce of the Safe, transaction cannot be executed until Safe's nonce is not equal to this nonce
|
|
68
|
+
}, ethAdapter = await getEthAdapter(), safeSdk = await protocol_kit_1.default.create({ ethAdapter, safeAddress }), safeTransaction = await safeSdk.createTransaction({ safeTransactionData, options });
|
|
69
|
+
await estimateSafeTransaction(safeAddress, safeTransactionData);
|
|
70
|
+
await proposeTransaction(safeAddress, safeTransaction);
|
|
145
71
|
}
|
|
146
72
|
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
73
|
// private functions
|
|
177
|
-
function
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
74
|
+
async function estimateSafeTransaction(safeAddress, safeTransactionData) {
|
|
75
|
+
console.log("Estimate gas");
|
|
76
|
+
const safeService = await getSafeService();
|
|
77
|
+
for (const transaction of safeTransactionData) {
|
|
78
|
+
const estimateResponse = await safeService.estimateSafeTransaction(safeAddress, {
|
|
79
|
+
to: transaction.to,
|
|
80
|
+
value: transaction.value,
|
|
81
|
+
data: transaction.data,
|
|
82
|
+
operation: transaction.operation || 0,
|
|
83
|
+
});
|
|
84
|
+
console.log(chalk_1.default.cyan(`Recommend to set gas limit to ${parseInt(estimateResponse.safeTxGas, 10)}`));
|
|
186
85
|
}
|
|
86
|
+
console.log(chalk_1.default.green("Send transaction to gnosis safe"));
|
|
87
|
+
}
|
|
88
|
+
async function proposeTransaction(safeAddress, safeTransaction) {
|
|
89
|
+
const [safeOwner] = await hardhat_1.ethers.getSigners(), ethAdapter = await getEthAdapter(), safeSdk = await protocol_kit_1.default.create({ ethAdapter, safeAddress }), safeTxHash = await safeSdk.getTransactionHash(safeTransaction), senderSignature = await safeSdk.signTransactionHash(safeTxHash), safeService = await getSafeService();
|
|
90
|
+
await safeService.proposeTransaction({
|
|
91
|
+
safeAddress,
|
|
92
|
+
safeTransactionData: safeTransaction.data,
|
|
93
|
+
safeTxHash,
|
|
94
|
+
senderAddress: safeOwner.address,
|
|
95
|
+
senderSignature: senderSignature.data
|
|
96
|
+
});
|
|
187
97
|
}
|
|
188
|
-
function
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
return transaction;
|
|
195
|
-
}
|
|
196
|
-
}).join("");
|
|
98
|
+
async function getEthAdapter() {
|
|
99
|
+
const [safeOwner] = await hardhat_1.ethers.getSigners(), ethAdapter = new protocol_kit_1.EthersAdapter({
|
|
100
|
+
ethers: hardhat_1.ethers,
|
|
101
|
+
signerOrProvider: safeOwner
|
|
102
|
+
});
|
|
103
|
+
return ethAdapter;
|
|
197
104
|
}
|
|
198
|
-
async function
|
|
199
|
-
const
|
|
200
|
-
|
|
105
|
+
async function getSafeService() {
|
|
106
|
+
const chainId = (await hardhat_1.ethers.provider.getNetwork()).chainId, ethAdapter = await getEthAdapter(), safeService = new api_kit_1.default({
|
|
107
|
+
txServiceUrl: getSafeTransactionUrl(chainId),
|
|
108
|
+
ethAdapter
|
|
109
|
+
});
|
|
110
|
+
return safeService;
|
|
201
111
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
return allTransactions.data.results[0].nonce + 1;
|
|
112
|
+
function getSafeTransactionUrl(chainId) {
|
|
113
|
+
if (Object.keys(URLS.safe_transaction).includes(chainId.toString())) {
|
|
114
|
+
return URLS.safe_transaction[chainId];
|
|
206
115
|
}
|
|
207
116
|
else {
|
|
208
|
-
|
|
117
|
+
throw Error(`Can't get safe-transaction url at network with chainId = ${chainId}`);
|
|
209
118
|
}
|
|
210
119
|
}
|
|
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
|
-
}
|
|
@@ -2,7 +2,7 @@ import { Transaction } from "ethers";
|
|
|
2
2
|
import { Submitter } from "./submitter";
|
|
3
3
|
export declare class AutoSubmitter extends Submitter {
|
|
4
4
|
submit(transactions: Transaction[]): Promise<void>;
|
|
5
|
-
_getImaInstance(): Promise<import("@skalenetwork/skale-contracts").Instance
|
|
5
|
+
_getImaInstance(): Promise<import("@skalenetwork/skale-contracts/lib/instance").Instance<import("ethers").BaseContract>>;
|
|
6
6
|
_getSafeAddress(): string;
|
|
7
7
|
_getSchainHash(): string;
|
|
8
8
|
_getMainnetChainId(): number;
|
|
@@ -35,13 +35,12 @@ const safe_submitter_1 = require("./safe-submitter");
|
|
|
35
35
|
const chalk_1 = __importDefault(require("chalk"));
|
|
36
36
|
const safe_ima_legacy_marionette_submitter_1 = require("./safe-ima-legacy-marionette-submitter");
|
|
37
37
|
const marionette_1 = require("./types/marionette");
|
|
38
|
-
const
|
|
38
|
+
const skale_contracts_ethers_v5_1 = require("@skalenetwork/skale-contracts-ethers-v5");
|
|
39
39
|
class AutoSubmitter extends submitter_1.Submitter {
|
|
40
40
|
async submit(transactions) {
|
|
41
41
|
let submitter;
|
|
42
42
|
// TODO: remove unknown when move everything to ethers 6
|
|
43
|
-
const proxyAdmin = await (0, admin_1.getManifestAdmin)(hardhat_1.default);
|
|
44
|
-
const owner = await proxyAdmin.owner();
|
|
43
|
+
const proxyAdmin = await (0, admin_1.getManifestAdmin)(hardhat_1.default), owner = await proxyAdmin.owner();
|
|
45
44
|
if (await hardhat_1.default.ethers.provider.getCode(owner) === "0x") {
|
|
46
45
|
console.log("Owner is not a contract");
|
|
47
46
|
submitter = new eoa_submitter_1.EoaSubmitter();
|
|
@@ -50,10 +49,7 @@ class AutoSubmitter extends submitter_1.Submitter {
|
|
|
50
49
|
console.log("Owner is a contract");
|
|
51
50
|
if (hardhat_1.ethers.utils.getAddress(owner) == hardhat_1.ethers.utils.getAddress(marionette_1.MARIONETTE_ADDRESS)) {
|
|
52
51
|
console.log("Marionette owner is detected");
|
|
53
|
-
const imaInstance = await this._getImaInstance();
|
|
54
|
-
const safeAddress = this._getSafeAddress();
|
|
55
|
-
const schainHash = this._getSchainHash();
|
|
56
|
-
const mainnetChainId = this._getMainnetChainId();
|
|
52
|
+
const imaInstance = await this._getImaInstance(), mainnetChainId = this._getMainnetChainId(), safeAddress = this._getSafeAddress(), schainHash = this._getSchainHash();
|
|
57
53
|
// TODO: after marionette has multiSend functionality
|
|
58
54
|
// query version and properly select a submitter
|
|
59
55
|
// based on it
|
|
@@ -91,8 +87,7 @@ class AutoSubmitter extends submitter_1.Submitter {
|
|
|
91
87
|
console.log(chalk_1.default.red("Set target IMA alias to IMA environment variable"));
|
|
92
88
|
process.exit(1);
|
|
93
89
|
}
|
|
94
|
-
const network = await
|
|
95
|
-
const ima = await network.getProject("ima");
|
|
90
|
+
const network = await skale_contracts_ethers_v5_1.skaleContracts.getNetworkByProvider(hardhat_1.ethers.provider), ima = await network.getProject("ima");
|
|
96
91
|
return await ima.getInstance(process.env.IMA);
|
|
97
92
|
}
|
|
98
93
|
_getSafeAddress() {
|
|
@@ -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;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BytesLike, UnsignedTransaction } from "ethers";
|
|
2
2
|
import { SafeSubmitter } from "./safe-submitter";
|
|
3
|
-
import { Instance } from "@skalenetwork/skale-contracts";
|
|
3
|
+
import { Instance } from "@skalenetwork/skale-contracts-ethers-v5";
|
|
4
4
|
export declare class SafeToImaSubmitter extends SafeSubmitter {
|
|
5
5
|
imaInstance: Instance;
|
|
6
6
|
targetSchainHash: BytesLike;
|
|
@@ -12,8 +12,7 @@ class SafeToImaSubmitter extends safe_submitter_1.SafeSubmitter {
|
|
|
12
12
|
if (transactions.length > 1) {
|
|
13
13
|
this._atomicityWarning();
|
|
14
14
|
}
|
|
15
|
-
const messageProxyForMainnet = await this._getMessageProxyForMainnet()
|
|
16
|
-
const transactionsToIma = transactions.map((transaction) => {
|
|
15
|
+
const messageProxyForMainnet = await this._getMessageProxyForMainnet(), transactionsToIma = transactions.map((transaction) => {
|
|
17
16
|
return {
|
|
18
17
|
to: messageProxyForMainnet.address,
|
|
19
18
|
data: messageProxyForMainnet.interface.encodeFunctionData("postOutgoingMessage", [this.targetSchainHash, transaction.to, transaction.data])
|
package/dist/src/upgrader.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UnsignedTransaction } from "ethers";
|
|
2
2
|
import { Submitter } from "./submitters/submitter";
|
|
3
|
-
import { Instance } from "@skalenetwork/skale-contracts
|
|
3
|
+
import { Instance } from "@skalenetwork/skale-contracts-ethers-v5";
|
|
4
4
|
export declare abstract class Upgrader {
|
|
5
5
|
instance: Instance;
|
|
6
6
|
targetVersion: string;
|
package/dist/src/upgrader.js
CHANGED
|
@@ -52,14 +52,12 @@ class Upgrader {
|
|
|
52
52
|
// Deploy new implementations
|
|
53
53
|
const contractsToUpgrade = [];
|
|
54
54
|
for (const contract of this.contractNamesToUpgrade) {
|
|
55
|
-
const contractFactory = await this._getContractFactoryAndUpdateManifest(contract);
|
|
56
|
-
const proxyAddress = (await this.instance.getContract(contract)).address;
|
|
55
|
+
const contractFactory = await this._getContractFactoryAndUpdateManifest(contract), proxyAddress = (await this.instance.getContract(contract)).address;
|
|
57
56
|
console.log(`Prepare upgrade of ${contract}`);
|
|
58
|
-
const newImplementationAddress = await hardhat_2.upgrades.prepareUpgrade(proxyAddress, contractFactory, {
|
|
57
|
+
const currentImplementationAddress = await (0, upgrades_core_1.getImplementationAddress)(hardhat_2.network.provider, proxyAddress), newImplementationAddress = await hardhat_2.upgrades.prepareUpgrade(proxyAddress, contractFactory, {
|
|
59
58
|
unsafeAllowLinkedLibraries: true,
|
|
60
59
|
unsafeAllowRenames: true
|
|
61
60
|
});
|
|
62
|
-
const currentImplementationAddress = await (0, upgrades_core_1.getImplementationAddress)(hardhat_2.network.provider, proxyAddress);
|
|
63
61
|
if (newImplementationAddress !== currentImplementationAddress) {
|
|
64
62
|
contractsToUpgrade.push({
|
|
65
63
|
proxyAddress,
|
|
@@ -89,18 +87,15 @@ class Upgrader {
|
|
|
89
87
|
}
|
|
90
88
|
// private
|
|
91
89
|
async _getContractFactoryAndUpdateManifest(contract) {
|
|
92
|
-
const manifest = JSON.parse(await fs_1.promises.readFile(await (0, deploy_1.getManifestFile)(), "utf-8"));
|
|
93
|
-
const { linkReferences } = await hardhat_2.artifacts.readArtifact(contract);
|
|
90
|
+
const { linkReferences } = await hardhat_2.artifacts.readArtifact(contract), manifest = JSON.parse(await fs_1.promises.readFile(await (0, deploy_1.getManifestFile)(), "utf-8"));
|
|
94
91
|
if (!Object.keys(linkReferences).length)
|
|
95
92
|
return await hardhat_2.ethers.getContractFactory(contract);
|
|
96
|
-
const librariesToUpgrade = [];
|
|
97
|
-
const oldLibraries = {};
|
|
93
|
+
const librariesToUpgrade = [], oldLibraries = {};
|
|
98
94
|
if (manifest.libraries === undefined) {
|
|
99
95
|
Object.assign(manifest, { libraries: {} });
|
|
100
96
|
}
|
|
101
97
|
for (const key of Object.keys(linkReferences)) {
|
|
102
|
-
const libraryName = Object.keys(linkReferences[key])[0];
|
|
103
|
-
const { bytecode } = await hardhat_2.artifacts.readArtifact(libraryName);
|
|
98
|
+
const libraryName = Object.keys(linkReferences[key])[0], { bytecode } = await hardhat_2.artifacts.readArtifact(libraryName);
|
|
104
99
|
if (manifest.libraries[libraryName] === undefined) {
|
|
105
100
|
librariesToUpgrade.push(libraryName);
|
|
106
101
|
continue;
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare
|
|
1
|
+
export declare const getVersion: () => Promise<string>;
|
package/dist/src/version.js
CHANGED
|
@@ -4,11 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getVersion = void 0;
|
|
7
|
-
const fs_1 = require("fs");
|
|
8
7
|
const child_process_1 = require("child_process");
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
9
|
const util_1 = __importDefault(require("util"));
|
|
10
10
|
const exec = util_1.default.promisify(child_process_1.exec);
|
|
11
|
-
async
|
|
11
|
+
const getVersion = async () => {
|
|
12
12
|
if (process.env.VERSION) {
|
|
13
13
|
return process.env.VERSION;
|
|
14
14
|
}
|
|
@@ -19,5 +19,5 @@ async function getVersion() {
|
|
|
19
19
|
catch {
|
|
20
20
|
return (await fs_1.promises.readFile("VERSION", "utf-8")).trim();
|
|
21
21
|
}
|
|
22
|
-
}
|
|
22
|
+
};
|
|
23
23
|
exports.getVersion = getVersion;
|
|
@@ -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.8",
|
|
4
4
|
"description": "Scripts to support upgrades of smart contracts",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/**/*"
|
|
@@ -21,27 +21,30 @@
|
|
|
21
21
|
"fullCheck": "yarn compile && yarn lint && yarn eslint && yarn cspell && yarn slither",
|
|
22
22
|
"lint": "npx solhint \"contracts/**/*.sol\"",
|
|
23
23
|
"slither": "slither .",
|
|
24
|
-
"eslint": "npx eslint
|
|
24
|
+
"eslint": "npx eslint .",
|
|
25
25
|
"cspell": "npx cspell \"**/*\""
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@tsconfig/recommended": "^1.0.2",
|
|
29
29
|
"@typechain/ethers-v5": "^9.0.0",
|
|
30
30
|
"@typechain/hardhat": "^8.0.0",
|
|
31
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
32
|
-
"@typescript-eslint/parser": "^
|
|
33
|
-
"cspell": "^
|
|
31
|
+
"@typescript-eslint/eslint-plugin": "^6.6.0",
|
|
32
|
+
"@typescript-eslint/parser": "^6.6.0",
|
|
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
|
-
"@
|
|
44
|
-
"
|
|
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",
|
|
46
|
+
"@skalenetwork/skale-contracts-ethers-v5": "0.1.0-develop.0",
|
|
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
|
}
|