@skalenetwork/upgrade-tools 2.0.0-refactor.0 → 2.0.0-refactor.10

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.
@@ -70,13 +70,7 @@ const URLS = {
70
70
  };
71
71
  // public functions
72
72
  function getSafeTransactionUrl(chainId) {
73
- if (chainId === Network.MAINNET) {
74
- return URLS.safe_transaction[chainId];
75
- }
76
- else if (chainId === Network.RINKEBY) {
77
- return URLS.safe_transaction[chainId];
78
- }
79
- else if (chainId === Network.GOERLI) {
73
+ if (Object.keys(URLS.safe_transaction).includes(chainId.toString())) {
80
74
  return URLS.safe_transaction[chainId];
81
75
  }
82
76
  else {
@@ -85,10 +79,7 @@ function getSafeTransactionUrl(chainId) {
85
79
  }
86
80
  exports.getSafeTransactionUrl = getSafeTransactionUrl;
87
81
  function getSafeRelayUrl(chainId) {
88
- if (chainId === 1) {
89
- return URLS.safe_relay[chainId];
90
- }
91
- else if (chainId === 4) {
82
+ if (Object.keys(URLS.safe_relay).includes(chainId.toString())) {
92
83
  return URLS.safe_relay[chainId];
93
84
  }
94
85
  else {
@@ -196,18 +187,12 @@ function sendSafeTransaction(safe, chainId, safeTx) {
196
187
  exports.sendSafeTransaction = sendSafeTransaction;
197
188
  // private functions
198
189
  function getMultiSendAddress(chainId) {
199
- if (chainId === Network.MAINNET) {
200
- return ADDRESSES.multiSend[chainId];
201
- }
202
- else if (chainId === Network.RINKEBY) {
203
- return ADDRESSES.multiSend[chainId];
190
+ if ([Network.GANACHE, Network.HARDHAT].includes(chainId)) {
191
+ return ethers_1.ethers.constants.AddressZero;
204
192
  }
205
- else if (chainId === Network.GOERLI) {
193
+ else if (Object.keys(ADDRESSES.multiSend).includes(chainId.toString())) {
206
194
  return ADDRESSES.multiSend[chainId];
207
195
  }
208
- else if ([Network.GANACHE, Network.HARDHAT].includes(chainId)) {
209
- return ethers_1.ethers.constants.AddressZero;
210
- }
211
196
  else {
212
197
  throw Error(`Can't get multiSend contract at network with chainId = ${chainId}`);
213
198
  }
@@ -2,6 +2,8 @@ export * from "./abi";
2
2
  export * from "./deploy";
3
3
  export * from "./gnosis-safe";
4
4
  export * from "./multiSend";
5
- export * from "./upgrade";
5
+ export * from "./submitters";
6
6
  export * from "./verification";
7
7
  export * from "./version";
8
+ export * from "./upgrade";
9
+ export * from "./upgrader";
package/dist/src/index.js CHANGED
@@ -18,6 +18,8 @@ __exportStar(require("./abi"), exports);
18
18
  __exportStar(require("./deploy"), exports);
19
19
  __exportStar(require("./gnosis-safe"), exports);
20
20
  __exportStar(require("./multiSend"), exports);
21
- __exportStar(require("./upgrade"), exports);
21
+ __exportStar(require("./submitters"), exports);
22
22
  __exportStar(require("./verification"), exports);
23
23
  __exportStar(require("./version"), exports);
24
+ __exportStar(require("./upgrade"), exports);
25
+ __exportStar(require("./upgrader"), exports);
@@ -1,5 +1,5 @@
1
1
  import { UnsignedTransaction } from "ethers";
2
- import { Submitter } from "./Submitter";
3
- export declare class EoaSubmitter implements Submitter {
2
+ import { Submitter } from "./submitter";
3
+ export declare class AutoSubmitter extends Submitter {
4
4
  submit(transactions: UnsignedTransaction[]): Promise<void>;
5
5
  }
@@ -14,10 +14,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.AutoSubmitter = void 0;
16
16
  const admin_1 = require("@openzeppelin/hardhat-upgrades/dist/admin");
17
+ const submitter_1 = require("./submitter");
17
18
  const hardhat_1 = __importDefault(require("hardhat"));
18
- const EoaSubmitter_1 = require("./EoaSubmitter");
19
- const SafeSubmitter_1 = require("./SafeSubmitter");
20
- class AutoSubmitter {
19
+ const eoa_submitter_1 = require("./eoa-submitter");
20
+ const safe_submitter_1 = require("./safe-submitter");
21
+ class AutoSubmitter extends submitter_1.Submitter {
21
22
  submit(transactions) {
22
23
  return __awaiter(this, void 0, void 0, function* () {
23
24
  let submitter;
@@ -25,12 +26,12 @@ class AutoSubmitter {
25
26
  const owner = yield proxyAdmin.owner();
26
27
  if ((yield hardhat_1.default.ethers.provider.getCode(owner)) === "0x") {
27
28
  console.log("Owner is not a contract");
28
- submitter = new EoaSubmitter_1.EoaSubmitter();
29
+ submitter = new eoa_submitter_1.EoaSubmitter();
29
30
  }
30
31
  else {
31
32
  console.log("Owner is a contract");
32
33
  // TODO: add support of Marionette
33
- submitter = new SafeSubmitter_1.SafeSubmitter(owner);
34
+ submitter = new safe_submitter_1.SafeSubmitter(owner);
34
35
  }
35
36
  yield submitter.submit(transactions);
36
37
  });
@@ -1,4 +1,5 @@
1
1
  import { UnsignedTransaction } from "ethers";
2
- export interface Submitter {
2
+ import { Submitter } from "./submitter";
3
+ export declare class EoaSubmitter extends Submitter {
3
4
  submit(transactions: UnsignedTransaction[]): Promise<void>;
4
5
  }
@@ -11,17 +11,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.EoaSubmitter = void 0;
13
13
  const hardhat_1 = require("hardhat");
14
- class EoaSubmitter {
14
+ const submitter_1 = require("./submitter");
15
+ class EoaSubmitter extends submitter_1.Submitter {
15
16
  submit(transactions) {
16
17
  return __awaiter(this, void 0, void 0, function* () {
18
+ this._atomicityWarning();
17
19
  const [deployer] = yield hardhat_1.ethers.getSigners();
18
20
  for (const transaction of transactions) {
21
+ console.log("Send transaction");
19
22
  const response = yield deployer.sendTransaction({
20
23
  to: transaction.to,
21
24
  value: transaction.value,
22
25
  data: transaction.data
23
26
  });
27
+ console.log(`Waiting for a transaction with nonce ${response.nonce}`);
24
28
  yield response.wait();
29
+ console.log("The transaction was sent");
25
30
  }
26
31
  });
27
32
  }
@@ -0,0 +1,6 @@
1
+ export * from "./auto-submitter";
2
+ export * from "./eoa-submitter";
3
+ export * from "./safe-ima-legacy-marionette-submitter";
4
+ export * from "./safe-submitter";
5
+ export * from "./safe-to-ima-submitter";
6
+ export * from "./submitter";
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./auto-submitter"), exports);
18
+ __exportStar(require("./eoa-submitter"), exports);
19
+ __exportStar(require("./safe-ima-legacy-marionette-submitter"), exports);
20
+ __exportStar(require("./safe-submitter"), exports);
21
+ __exportStar(require("./safe-to-ima-submitter"), exports);
22
+ __exportStar(require("./submitter"), exports);
@@ -0,0 +1,6 @@
1
+ import { UnsignedTransaction } from "ethers";
2
+ import { SafeToImaSubmitter } from "./safe-to-ima-submitter";
3
+ export declare class SafeImaLegacyMarionetteSubmitter extends SafeToImaSubmitter {
4
+ marionette: import("ethers").Contract;
5
+ submit(transactions: UnsignedTransaction[]): Promise<void>;
6
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SafeImaLegacyMarionetteSubmitter = void 0;
13
+ const hardhat_1 = require("hardhat");
14
+ const safe_to_ima_submitter_1 = require("./safe-to-ima-submitter");
15
+ class SafeImaLegacyMarionetteSubmitter extends safe_to_ima_submitter_1.SafeToImaSubmitter {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.marionette = new hardhat_1.ethers.Contract("0xD2c0DeFACe000000000000000000000000000000", new hardhat_1.ethers.utils.Interface([
19
+ {
20
+ "inputs": [
21
+ {
22
+ "internalType": "address",
23
+ "name": "receiver",
24
+ "type": "address"
25
+ },
26
+ {
27
+ "internalType": "uint256",
28
+ "name": "value",
29
+ "type": "uint256"
30
+ },
31
+ {
32
+ "internalType": "bytes",
33
+ "name": "data",
34
+ "type": "bytes"
35
+ }
36
+ ],
37
+ "name": "encodeFunctionCall",
38
+ "outputs": [
39
+ {
40
+ "internalType": "bytes",
41
+ "name": "",
42
+ "type": "bytes"
43
+ }
44
+ ],
45
+ "stateMutability": "pure",
46
+ "type": "function"
47
+ }
48
+ ]));
49
+ }
50
+ submit(transactions) {
51
+ const _super = Object.create(null, {
52
+ submit: { get: () => super.submit }
53
+ });
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ if (transactions.length > 1) {
56
+ this._atomicityWarning();
57
+ }
58
+ const transactionsToMarionette = [];
59
+ for (const transaction of transactions) {
60
+ transactionsToMarionette.push({
61
+ to: this.marionette.address,
62
+ data: yield this.marionette.functions["encodeFunctionCall"].call(transaction.to ? transaction.to : hardhat_1.ethers.constants.AddressZero, transaction.value ? transaction.value : 0, transaction.data ? transaction.data : "0x")
63
+ });
64
+ }
65
+ yield _super.submit.call(this, transactionsToMarionette);
66
+ });
67
+ }
68
+ }
69
+ exports.SafeImaLegacyMarionetteSubmitter = SafeImaLegacyMarionetteSubmitter;
@@ -1,6 +1,6 @@
1
1
  import { UnsignedTransaction } from "ethers";
2
- import { Submitter } from "./Submitter";
3
- export declare class SafeSubmitter implements Submitter {
2
+ import { Submitter } from "./submitter";
3
+ export declare class SafeSubmitter extends Submitter {
4
4
  safeAddress: string;
5
5
  chainId: number | undefined;
6
6
  constructor(safeAddress: string, chainId?: number);
@@ -14,8 +14,10 @@ const ethers_1 = require("ethers");
14
14
  const hardhat_1 = require("hardhat");
15
15
  const gnosis_safe_1 = require("../gnosis-safe");
16
16
  const multiSend_1 = require("../multiSend");
17
- class SafeSubmitter {
17
+ const submitter_1 = require("./submitter");
18
+ class SafeSubmitter extends submitter_1.Submitter {
18
19
  constructor(safeAddress, chainId) {
20
+ super();
19
21
  this.safeAddress = safeAddress;
20
22
  this.chainId = chainId;
21
23
  }
@@ -0,0 +1,9 @@
1
+ import { BytesLike, Contract, UnsignedTransaction } from "ethers";
2
+ import { SkaleABIFile } from "../types/SkaleABIFile";
3
+ import { SafeSubmitter } from "./safe-submitter";
4
+ export declare class SafeToImaSubmitter extends SafeSubmitter {
5
+ messageProxyForMainnet: Contract;
6
+ targetSchainHash: BytesLike;
7
+ constructor(safeAddress: string, imaAbi: SkaleABIFile, targetSchainHash: BytesLike, chainId?: number);
8
+ submit(transactions: UnsignedTransaction[]): Promise<void>;
9
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SafeToImaSubmitter = void 0;
13
+ const hardhat_1 = require("hardhat");
14
+ const safe_submitter_1 = require("./safe-submitter");
15
+ class SafeToImaSubmitter extends safe_submitter_1.SafeSubmitter {
16
+ constructor(safeAddress, imaAbi, targetSchainHash, chainId) {
17
+ super(safeAddress, chainId);
18
+ this.messageProxyForMainnet = new hardhat_1.ethers.Contract(imaAbi["message_proxy_mainnet_address"], new hardhat_1.ethers.utils.Interface(imaAbi["message_proxy_mainnet_abi"]));
19
+ this.targetSchainHash = targetSchainHash;
20
+ }
21
+ submit(transactions) {
22
+ const _super = Object.create(null, {
23
+ submit: { get: () => super.submit }
24
+ });
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ if (transactions.length > 1) {
27
+ this._atomicityWarning();
28
+ }
29
+ const transactionsToIma = transactions.map((transaction) => {
30
+ return {
31
+ to: this.messageProxyForMainnet.address,
32
+ data: this.messageProxyForMainnet.interface.encodeFunctionData("postOutgoingMessage", [this.targetSchainHash, transaction.to, transaction.data])
33
+ };
34
+ });
35
+ yield _super.submit.call(this, transactionsToIma);
36
+ });
37
+ }
38
+ }
39
+ exports.SafeToImaSubmitter = SafeToImaSubmitter;
@@ -0,0 +1,5 @@
1
+ import { UnsignedTransaction } from "ethers";
2
+ export declare abstract class Submitter {
3
+ abstract submit(transactions: UnsignedTransaction[]): Promise<void>;
4
+ _atomicityWarning(): void;
5
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Submitter = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ class Submitter {
9
+ // private
10
+ _atomicityWarning() {
11
+ if (!process.env.ALLOW_NOT_ATOMIC_UPGRADE) {
12
+ console.log(chalk_1.default.red("The upgrade will consist of multiple transactions and will not be atomic"));
13
+ console.log(chalk_1.default.red("If not atomic upgrade is OK set ALLOW_NOT_ATOMIC_UPGRADE environment variable"));
14
+ process.exit(1);
15
+ }
16
+ else {
17
+ console.log(chalk_1.default.yellow("Not atomic upgrade is performing"));
18
+ }
19
+ }
20
+ }
21
+ exports.Submitter = Submitter;
@@ -1,6 +1,6 @@
1
1
  import { UnsignedTransaction } from "ethers";
2
- import { SkaleABIFile } from "../types/SkaleABIFile";
3
- import { Submitter } from "../submitters/Submitter";
2
+ import { SkaleABIFile } from "./types/SkaleABIFile";
3
+ import { Submitter } from "./submitters/submitter";
4
4
  export declare abstract class Upgrader {
5
5
  abi: SkaleABIFile;
6
6
  targetVersion: string;
@@ -10,9 +10,9 @@ export declare abstract class Upgrader {
10
10
  submitter: Submitter;
11
11
  constructor(projectName: string, targetVersion: string, abi: SkaleABIFile, contractNamesToUpgrade: string[], submitter?: Submitter);
12
12
  abstract getDeployedVersion: () => Promise<string | undefined>;
13
- abstract deployNewContracts: () => Promise<void>;
14
- abstract initialize: () => Promise<void>;
15
13
  abstract setVersion: (newVersion: string) => Promise<void>;
14
+ deployNewContracts: () => Promise<void>;
15
+ initialize: () => Promise<void>;
16
16
  upgrade(): Promise<void>;
17
17
  _getContractFactoryAndUpdateManifest(contract: string): Promise<import("ethers").ContractFactory>;
18
18
  _getContractKeyInAbiFile(contract: string): string;
@@ -17,15 +17,18 @@ const hardhat_1 = __importDefault(require("hardhat"));
17
17
  const chalk_1 = __importDefault(require("chalk"));
18
18
  const hardhat_2 = require("hardhat");
19
19
  const admin_1 = require("@openzeppelin/hardhat-upgrades/dist/admin");
20
- const version_1 = require("../version");
20
+ const version_1 = require("./version");
21
21
  const fs_1 = require("fs");
22
- const deploy_1 = require("../deploy");
22
+ const deploy_1 = require("./deploy");
23
23
  const upgrades_core_1 = require("@openzeppelin/upgrades-core");
24
- const abi_1 = require("../abi");
25
- const verification_1 = require("../verification");
26
- const AutoSubmitter_1 = require("../submitters/AutoSubmitter");
24
+ const abi_1 = require("./abi");
25
+ const verification_1 = require("./verification");
26
+ const auto_submitter_1 = require("./submitters/auto-submitter");
27
27
  class Upgrader {
28
- constructor(projectName, targetVersion, abi, contractNamesToUpgrade, submitter = new AutoSubmitter_1.AutoSubmitter()) {
28
+ constructor(projectName, targetVersion, abi, contractNamesToUpgrade, submitter = new auto_submitter_1.AutoSubmitter()) {
29
+ // protected
30
+ this.deployNewContracts = () => { return Promise.resolve(); };
31
+ this.initialize = () => { return Promise.resolve(); };
29
32
  this.targetVersion = targetVersion;
30
33
  this.abi = abi;
31
34
  this.contractNamesToUpgrade = contractNamesToUpgrade;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skalenetwork/upgrade-tools",
3
- "version": "2.0.0-refactor.0",
3
+ "version": "2.0.0-refactor.10",
4
4
  "description": "Scripts to support upgrades of smart contracts",
5
5
  "files": [
6
6
  "dist/**/*"
@@ -1,5 +0,0 @@
1
- import { UnsignedTransaction } from "ethers";
2
- import { Submitter } from "./Submitter";
3
- export declare class AutoSubmitter implements Submitter {
4
- submit(transactions: UnsignedTransaction[]): Promise<void>;
5
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });