@skalenetwork/upgrade-tools 4.0.0-develop.1 → 4.0.0-develop.11

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.
Files changed (78) hide show
  1. package/README.md +3 -1
  2. package/dist/src/contractFactory.js +1 -1
  3. package/dist/src/contractFactory.js.map +1 -1
  4. package/dist/src/contractVerifier.d.ts +1 -0
  5. package/dist/src/contractVerifier.js.map +1 -1
  6. package/dist/src/deploy.d.ts +1 -0
  7. package/dist/src/deploy.js +16 -9
  8. package/dist/src/deploy.js.map +1 -1
  9. package/dist/src/gnosis-safe.js +6 -37
  10. package/dist/src/gnosis-safe.js.map +1 -1
  11. package/dist/src/index.d.ts +4 -0
  12. package/dist/src/index.js +4 -0
  13. package/dist/src/index.js.map +1 -1
  14. package/dist/src/ownership-transfer/constants.d.ts +8 -0
  15. package/dist/src/ownership-transfer/constants.js +33 -0
  16. package/dist/src/ownership-transfer/constants.js.map +1 -0
  17. package/dist/src/ownership-transfer/contractAdmin.d.ts +55 -0
  18. package/dist/src/ownership-transfer/contractAdmin.js +211 -0
  19. package/dist/src/ownership-transfer/contractAdmin.js.map +1 -0
  20. package/dist/src/ownership-transfer/instanceAdmin.d.ts +51 -0
  21. package/dist/src/ownership-transfer/instanceAdmin.js +221 -0
  22. package/dist/src/ownership-transfer/instanceAdmin.js.map +1 -0
  23. package/dist/src/ownership-transfer/permission-utils.d.ts +37 -0
  24. package/dist/src/ownership-transfer/permission-utils.js +191 -0
  25. package/dist/src/ownership-transfer/permission-utils.js.map +1 -0
  26. package/dist/src/ownership-transfer/utils.d.ts +19 -0
  27. package/dist/src/ownership-transfer/utils.js +201 -0
  28. package/dist/src/ownership-transfer/utils.js.map +1 -0
  29. package/dist/src/proxyUpgrader.d.ts +19 -0
  30. package/dist/src/proxyUpgrader.js +89 -0
  31. package/dist/src/proxyUpgrader.js.map +1 -0
  32. package/dist/src/submitters/auto-submitter.d.ts +3 -0
  33. package/dist/src/submitters/auto-submitter.js +11 -2
  34. package/dist/src/submitters/auto-submitter.js.map +1 -1
  35. package/dist/src/submitters/eoa-submitter.js +0 -1
  36. package/dist/src/submitters/eoa-submitter.js.map +1 -1
  37. package/dist/src/submitters/safe-ima-legacy-marionette-submitter.js +0 -4
  38. package/dist/src/submitters/safe-ima-legacy-marionette-submitter.js.map +1 -1
  39. package/dist/src/submitters/safe-ima-marionette-submitter.d.ts +1 -0
  40. package/dist/src/submitters/safe-ima-marionette-submitter.js +1 -0
  41. package/dist/src/submitters/safe-ima-marionette-submitter.js.map +1 -1
  42. package/dist/src/submitters/safe-submitter.d.ts +2 -0
  43. package/dist/src/submitters/safe-submitter.js +3 -0
  44. package/dist/src/submitters/safe-submitter.js.map +1 -1
  45. package/dist/src/submitters/safe-to-ima-submitter.d.ts +1 -0
  46. package/dist/src/submitters/safe-to-ima-submitter.js +4 -4
  47. package/dist/src/submitters/safe-to-ima-submitter.js.map +1 -1
  48. package/dist/src/submitters/submitter.d.ts +3 -1
  49. package/dist/src/submitters/submitter.js +5 -17
  50. package/dist/src/submitters/submitter.js.map +1 -1
  51. package/dist/src/upgrader.d.ts +12 -6
  52. package/dist/src/upgrader.js +80 -61
  53. package/dist/src/upgrader.js.map +1 -1
  54. package/dist/src/upgraders/abstractTransparentProxyUpgrader.d.ts +19 -0
  55. package/dist/src/upgraders/abstractTransparentProxyUpgrader.js +57 -0
  56. package/dist/src/upgraders/abstractTransparentProxyUpgrader.js.map +1 -0
  57. package/dist/src/upgraders/beaconUpgrader.d.ts +8 -0
  58. package/dist/src/upgraders/beaconUpgrader.js +37 -0
  59. package/dist/src/upgraders/beaconUpgrader.js.map +1 -0
  60. package/dist/src/upgraders/transparentProxyUpgrader.d.ts +5 -0
  61. package/dist/src/upgraders/transparentProxyUpgrader.js +20 -0
  62. package/dist/src/upgraders/transparentProxyUpgrader.js.map +1 -0
  63. package/dist/src/upgraders/v4TransparentProxyUpgrader.d.ts +5 -0
  64. package/dist/src/upgraders/v4TransparentProxyUpgrader.js +19 -0
  65. package/dist/src/upgraders/v4TransparentProxyUpgrader.js.map +1 -0
  66. package/dist/src/verification.d.ts +2 -1
  67. package/dist/src/verification.js +25 -12
  68. package/dist/src/verification.js.map +1 -1
  69. package/dist/src/verifiers/blockscoutVerifier.js +20 -0
  70. package/dist/src/verifiers/blockscoutVerifier.js.map +1 -1
  71. package/dist/src/verifiers/etherscanVerifier.js +1 -1
  72. package/dist/src/verifiers/etherscanVerifier.js.map +1 -1
  73. package/dist/src/verifiers/skaleBlockscoutVerifier.js +2 -2
  74. package/dist/src/verifiers/skaleBlockscoutVerifier.js.map +1 -1
  75. package/package.json +6 -6
  76. package/dist/src/proxyAdmin.d.ts +0 -4
  77. package/dist/src/proxyAdmin.js +0 -56
  78. package/dist/src/proxyAdmin.js.map +0 -1
@@ -0,0 +1,201 @@
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.removeDuplicateTransactions = exports.detectPattern = exports.promptUserConfirmation = exports.identifyProxyPattern = exports.isBeaconPattern = exports.isMultisig = exports.hasFunctionSelector = exports.isTUPPPattern = exports.getTUPPImplementationAddress = exports.getAdminAddress = exports.extractAddressFromSlot = exports.isContractAddress = exports.Pattern = void 0;
7
+ // Cspell:words TUPP
8
+ const constants_1 = require("./constants");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const hardhat_1 = require("hardhat");
11
+ const readline_1 = __importDefault(require("readline"));
12
+ /*
13
+ * Ethereum addresses are 20 bytes = 40 hex characters
14
+ * Used for extracting addresses from 32-byte storage slots
15
+ */
16
+ const ADDRESS_HEX_LENGTH = 40;
17
+ var Pattern;
18
+ (function (Pattern) {
19
+ Pattern["TUPP"] = "TUPP";
20
+ Pattern["BEACON"] = "BEACON";
21
+ Pattern["REGULAR"] = "REGULAR";
22
+ })(Pattern || (exports.Pattern = Pattern = {}));
23
+ const isContractAddress = async (address) => {
24
+ const code = await hardhat_1.ethers.provider.getCode(address);
25
+ return code !== "0x" && code !== "0x0";
26
+ };
27
+ exports.isContractAddress = isContractAddress;
28
+ const extractAddressFromSlot = (slotValue) => {
29
+ const addressHex = `0x${slotValue.slice(-ADDRESS_HEX_LENGTH)}`;
30
+ return hardhat_1.ethers.getAddress(addressHex);
31
+ };
32
+ exports.extractAddressFromSlot = extractAddressFromSlot;
33
+ const getAdminAddress = async (address) => {
34
+ const adminSlotValue = await hardhat_1.ethers.provider.getStorage(address, constants_1.ERC1967_ADMIN_SLOT);
35
+ return (0, exports.extractAddressFromSlot)(adminSlotValue);
36
+ };
37
+ exports.getAdminAddress = getAdminAddress;
38
+ const getTUPPImplementationAddress = async (address) => {
39
+ const implementationSlotValue = await hardhat_1.ethers.provider.getStorage(address, constants_1.ERC1967_IMPLEMENTATION_SLOT);
40
+ return (0, exports.extractAddressFromSlot)(implementationSlotValue);
41
+ };
42
+ exports.getTUPPImplementationAddress = getTUPPImplementationAddress;
43
+ const validateTUPPProxy = async (proxyAddress, adminAddress) => {
44
+ const isAdminContract = await (0, exports.isContractAddress)(adminAddress);
45
+ if (!isAdminContract) {
46
+ return false;
47
+ }
48
+ const implementationAddress = await (0, exports.getTUPPImplementationAddress)(proxyAddress);
49
+ return implementationAddress !== hardhat_1.ethers.ZeroAddress && await (0, exports.isContractAddress)(implementationAddress);
50
+ };
51
+ /*
52
+ * Checks if the contract follows the Transparent Upgradeable Proxy Pattern.
53
+ * A TUPP proxy has an admin address in the ERC1967 admin slot.
54
+ */
55
+ const isTUPPPattern = async (address) => {
56
+ try {
57
+ const adminAddress = await (0, exports.getAdminAddress)(address);
58
+ if (adminAddress === hardhat_1.ethers.ZeroAddress) {
59
+ return false;
60
+ }
61
+ return await validateTUPPProxy(address, adminAddress);
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ };
67
+ exports.isTUPPPattern = isTUPPPattern;
68
+ const resolveImplementationAddress = async (address) => {
69
+ if (await (0, exports.isTUPPPattern)(address)) {
70
+ return (0, exports.getTUPPImplementationAddress)(address);
71
+ }
72
+ // Beacon not required because we only change upgradeability ownership - on UpgradeableBeacon
73
+ return address;
74
+ };
75
+ const hasFunctionSelector = async (address, signature) => {
76
+ const iface = new hardhat_1.ethers.Interface([`function ${signature}`]);
77
+ const toSlice = "0x".length;
78
+ const selector = iface.getFunction(signature)?.selector.slice(toSlice).toLowerCase();
79
+ if (!selector) {
80
+ throw new Error(`Invalid function signature: ${signature}`);
81
+ }
82
+ const implementationAddress = await resolveImplementationAddress(address);
83
+ const bytecode = (await hardhat_1.ethers.provider.getCode(implementationAddress)).toLowerCase();
84
+ // May very rarely cause false positives - But user verifies findings
85
+ return bytecode.includes(selector);
86
+ };
87
+ exports.hasFunctionSelector = hasFunctionSelector;
88
+ const isMultisig = async (contractAddress) => {
89
+ try {
90
+ const resolvedAddress = await hardhat_1.ethers.resolveAddress(contractAddress);
91
+ if (!await (0, exports.isContractAddress)(resolvedAddress)) {
92
+ return false;
93
+ }
94
+ const contract = new hardhat_1.ethers.Contract(resolvedAddress, constants_1.MULTISIG_ABI, hardhat_1.ethers.provider);
95
+ const owners = await contract.getOwners();
96
+ const threshold = Number(await contract.getThreshold());
97
+ const minOwnersRequired = 1;
98
+ return owners.length >= minOwnersRequired &&
99
+ threshold >= minOwnersRequired &&
100
+ threshold <= owners.length;
101
+ }
102
+ catch {
103
+ // We prefer false negatives here than false positives - user should check Network/RPC issues
104
+ return false;
105
+ }
106
+ };
107
+ exports.isMultisig = isMultisig;
108
+ /*
109
+ * Checks if the contract follows the Beacon Proxy Pattern.
110
+ * A Beacon proxy has a beacon address in the ERC1967 beacon slot,
111
+ * or it might be a beacon contract itself with an owner() function.
112
+ */
113
+ const isBeaconPattern = async (address) => {
114
+ try {
115
+ const contract = new hardhat_1.ethers.Contract(address, constants_1.UPGRADEABLE_BEACON_ABI, hardhat_1.ethers.provider);
116
+ const implementation = await contract.implementation();
117
+ const owner = await contract.owner();
118
+ const interfaceHasUpgradeTo = await (0, exports.hasFunctionSelector)(address, "upgradeTo(address)");
119
+ return owner !== hardhat_1.ethers.ZeroAddress &&
120
+ implementation !== hardhat_1.ethers.ZeroAddress &&
121
+ await (0, exports.isContractAddress)(implementation) &&
122
+ interfaceHasUpgradeTo;
123
+ }
124
+ catch {
125
+ return false;
126
+ }
127
+ };
128
+ exports.isBeaconPattern = isBeaconPattern;
129
+ /*
130
+ * Identifies the proxy pattern for a given address by checking:
131
+ * 1. TUPP (Transparent Upgradeable Proxy Pattern)
132
+ * 2. BEACON pattern
133
+ * 3. REGULAR (non-proxy contract)
134
+ */
135
+ const identifyProxyPattern = async (address) => {
136
+ const isTUPP = await (0, exports.isTUPPPattern)(address);
137
+ if (isTUPP) {
138
+ return Pattern.TUPP;
139
+ }
140
+ const isBeacon = await (0, exports.isBeaconPattern)(address);
141
+ if (isBeacon) {
142
+ return Pattern.BEACON;
143
+ }
144
+ return Pattern.REGULAR;
145
+ };
146
+ exports.identifyProxyPattern = identifyProxyPattern;
147
+ /*
148
+ * Prompts the user for confirmation via command line input.
149
+ * Accepts "yes" or "y" (case-insensitive) as confirmation.
150
+ * Returns a Promise that resolves to true if confirmed, false otherwise.
151
+ */
152
+ const promptUserConfirmation = (message) => {
153
+ const rl = readline_1.default.createInterface({
154
+ "input": process.stdin,
155
+ "output": process.stdout
156
+ });
157
+ const msg = message || "Do you confirm these findings?";
158
+ return new Promise((resolve) => {
159
+ rl.question(chalk_1.default.yellow(`${msg} (yes/y to confirm): `), (answer) => {
160
+ rl.close();
161
+ const normalizedAnswer = answer.trim().toLowerCase();
162
+ resolve(normalizedAnswer === "yes" || normalizedAnswer === "y");
163
+ });
164
+ });
165
+ };
166
+ exports.promptUserConfirmation = promptUserConfirmation;
167
+ /*
168
+ * Detects the proxy pattern used by a contract at the given address.
169
+ */
170
+ const detectPattern = async (address) => {
171
+ try {
172
+ const resolvedAddress = await hardhat_1.ethers.resolveAddress(address);
173
+ const isContract = await (0, exports.isContractAddress)(resolvedAddress);
174
+ if (!isContract) {
175
+ throw new Error(`Address ${address} is not a contract. Stopping...`);
176
+ }
177
+ return await (0, exports.identifyProxyPattern)(resolvedAddress);
178
+ }
179
+ catch (error) {
180
+ console.error(`Error detecting pattern for address ${address}:`, error);
181
+ return Pattern.REGULAR;
182
+ }
183
+ };
184
+ exports.detectPattern = detectPattern;
185
+ const removeDuplicateTransactions = (items) => {
186
+ const seen = new Set();
187
+ return items.filter((item) => {
188
+ /*
189
+ * Create a unique composite key for the 'to' and 'data' pair.
190
+ * We use a separator ('|') to ensure 'a' + 'bc' doesn't clash with 'ab' + 'c'
191
+ */
192
+ const uniqueKey = `${item.transaction.to}|${item.transaction.data}`;
193
+ if (seen.has(uniqueKey)) {
194
+ return false;
195
+ }
196
+ seen.add(uniqueKey);
197
+ return true;
198
+ });
199
+ };
200
+ exports.removeDuplicateTransactions = removeDuplicateTransactions;
201
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/ownership-transfer/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { AddressLike, Transaction } from "ethers";
2
+ import { NonceProvider } from "./nonceProvider";
3
+ export declare abstract class ProxyUpgrader {
4
+ protected proxyAddress: AddressLike;
5
+ protected newImplementationAddress: AddressLike | null;
6
+ private contractName;
7
+ private nonceProvider?;
8
+ constructor(contractName: string, proxyAddress: AddressLike, nonceProvider?: NonceProvider);
9
+ deployNewImplementation(): Promise<void>;
10
+ needsUpgrade(): boolean;
11
+ getUpgradeTransaction(): Promise<Transaction>;
12
+ getContractName(): string;
13
+ getNewImplementationAddress(): AddressLike;
14
+ abstract getOwner(): Promise<string>;
15
+ protected abstract makeUpgradeTransaction(): Promise<Transaction>;
16
+ protected abstract getCurrentImplementationAddress(): Promise<AddressLike>;
17
+ private prepareUpgrade;
18
+ private resolveDeployment;
19
+ }
@@ -0,0 +1,89 @@
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.ProxyUpgrader = void 0;
7
+ const ethers_1 = require("ethers");
8
+ const hardhat_1 = require("hardhat");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const contractFactory_1 = require("./contractFactory");
11
+ // 10 minutes
12
+ const deployTimeout = 60e4;
13
+ class ProxyUpgrader {
14
+ constructor(contractName, proxyAddress, nonceProvider) {
15
+ this.newImplementationAddress = null;
16
+ this.contractName = contractName;
17
+ this.proxyAddress = proxyAddress;
18
+ this.nonceProvider = nonceProvider;
19
+ }
20
+ // Public
21
+ async deployNewImplementation() {
22
+ const contractFactory = await (0, contractFactory_1.getContractFactoryAndUpdateManifest)(this.contractName, this.nonceProvider);
23
+ console.log(`Prepare upgrade of ${this.contractName}`);
24
+ return this.prepareUpgrade(contractFactory);
25
+ }
26
+ needsUpgrade() {
27
+ return this.newImplementationAddress !== null;
28
+ }
29
+ async getUpgradeTransaction() {
30
+ if (this.newImplementationAddress === null) {
31
+ throw new Error(`Upgrade of ${this.contractName} is not prepared or not needed`);
32
+ }
33
+ const infoMessage = `Prepare transaction to upgrade ${this.contractName}` +
34
+ ` at ${this.proxyAddress}` +
35
+ ` to ${this.newImplementationAddress}`;
36
+ console.log(chalk_1.default.yellowBright(infoMessage));
37
+ return await this.makeUpgradeTransaction();
38
+ }
39
+ getContractName() {
40
+ return this.contractName;
41
+ }
42
+ getNewImplementationAddress() {
43
+ if (this.newImplementationAddress === null) {
44
+ throw new Error(`There is no new implementation address for ${this.contractName}`);
45
+ }
46
+ return this.newImplementationAddress;
47
+ }
48
+ // Private
49
+ async prepareUpgrade(contractFactory) {
50
+ const currentImplementationAddress = await this.getCurrentImplementationAddress();
51
+ const nonce = this.nonceProvider?.reserveNonce();
52
+ const response = await hardhat_1.upgrades.prepareUpgrade(await hardhat_1.ethers.resolveAddress(this.proxyAddress), contractFactory, {
53
+ "getTxResponse": true,
54
+ "timeout": deployTimeout,
55
+ "txOverrides": {
56
+ nonce
57
+ },
58
+ "unsafeAllowLinkedLibraries": true,
59
+ "unsafeAllowRenames": true
60
+ });
61
+ // Resolves the deployment, getting the address and releasing nonce if needed
62
+ const newImplementationAddress = await this.resolveDeployment(response, nonce);
63
+ if (newImplementationAddress === currentImplementationAddress) {
64
+ console.log(chalk_1.default.gray(`Contract ${this.contractName} is up to date`));
65
+ }
66
+ else {
67
+ this.newImplementationAddress = newImplementationAddress;
68
+ }
69
+ }
70
+ async resolveDeployment(response, nonce) {
71
+ // If return is valid address, means no deployment transaction was required
72
+ if ((0, ethers_1.isAddress)(response)) {
73
+ if (nonce) {
74
+ this.nonceProvider?.releaseNonce(nonce);
75
+ }
76
+ return response;
77
+ }
78
+ const receipt = await response.wait();
79
+ if (!receipt) {
80
+ throw new Error(`Failed to get receipt for deployment transaction`);
81
+ }
82
+ if (!receipt.contractAddress) {
83
+ throw new Error(`Failed to get contract address from deployment receipt`);
84
+ }
85
+ return receipt.contractAddress;
86
+ }
87
+ }
88
+ exports.ProxyUpgrader = ProxyUpgrader;
89
+ //# sourceMappingURL=proxyUpgrader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxyUpgrader.js","sourceRoot":"","sources":["../../src/proxyUpgrader.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { Upgrader } from "../upgrader";
4
4
  export declare class AutoSubmitter extends Submitter {
5
5
  name: string;
6
6
  upgrader: Upgrader;
7
+ submitter: Submitter | undefined;
7
8
  constructor(upgrader: Upgrader);
8
9
  static marionetteInterface: {
9
10
  inputs: never[];
@@ -17,6 +18,8 @@ export declare class AutoSubmitter extends Submitter {
17
18
  type: string;
18
19
  }[];
19
20
  submit(transactions: Transaction[]): Promise<void>;
21
+ isAtomicSubmitter(): Promise<boolean>;
22
+ private loadSubmitter;
20
23
  private getSubmitter;
21
24
  private static getSubmitterForContractOwner;
22
25
  private static getImaInstance;
@@ -22,10 +22,19 @@ class AutoSubmitter extends submitter_1.Submitter {
22
22
  }
23
23
  async submit(transactions) {
24
24
  console.log(`Submit via ${this.name}`);
25
- const submitter = await this.getSubmitter();
26
- await submitter.submit(transactions);
25
+ await this.loadSubmitter();
26
+ await this.submitter.submit(transactions);
27
+ }
28
+ async isAtomicSubmitter() {
29
+ await this.loadSubmitter();
30
+ return this.submitter.isAtomicSubmitter();
27
31
  }
28
32
  // Private
33
+ async loadSubmitter() {
34
+ if (!this.submitter) {
35
+ this.submitter = await this.getSubmitter();
36
+ }
37
+ }
29
38
  async getSubmitter() {
30
39
  const owner = await this.upgrader.getOwner();
31
40
  if (await hardhat_1.ethers.provider.getCode(owner) === "0x") {
@@ -1 +1 @@
1
- {"version":3,"file":"auto-submitter.js","sourceRoot":"","sources":["../../../src/submitters/auto-submitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-submitter.js","sourceRoot":"","sources":["../../../src/submitters/auto-submitter.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,6 @@ class EoaSubmitter extends submitter_1.Submitter {
9
9
  this.name = "EOA Submitter";
10
10
  }
11
11
  async submit(transactions) {
12
- EoaSubmitter.atomicityWarning();
13
12
  const [deployer] = await hardhat_1.ethers.getSigners();
14
13
  console.log(`Send transaction via ${this.name}`);
15
14
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"eoa-submitter.js","sourceRoot":"","sources":["../../../src/submitters/eoa-submitter.ts"],"names":[],"mappings":";;;AAAA,2CAAsC;AAEtC,qCAA+B;AAG/B,MAAa,YAAa,SAAQ,qBAAS;IAA3C;;QACI,SAAI,GAAG,eAAe,CAAC;IAyB3B,CAAC;IAvBG,KAAK,CAAC,MAAM,CAAE,YAA2B;QACrC,YAAY,CAAC,gBAAgB,EAAE,CAAC;QAChC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,gBAAM,CAAC,UAAU,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjD;;;;;WAKG;QACH,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC5B,qCAAqC;YACrC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,QAAQ,CAAC,eAAe,CAAC;gBAClD,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,KAAK,EAAE,EAAE,CAAC,KAAK;aAClB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACvD,CAAC;CACJ;AA1BD,oCA0BC"}
1
+ {"version":3,"file":"eoa-submitter.js","sourceRoot":"","sources":["../../../src/submitters/eoa-submitter.ts"],"names":[],"mappings":";;;AAAA,2CAAsC;AAEtC,qCAA+B;AAG/B,MAAa,YAAa,SAAQ,qBAAS;IAA3C;;QACI,SAAI,GAAG,eAAe,CAAC;IAwB3B,CAAC;IAtBG,KAAK,CAAC,MAAM,CAAE,YAA2B;QACrC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,gBAAM,CAAC,UAAU,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjD;;;;;WAKG;QACH,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC5B,qCAAqC;YACrC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,QAAQ,CAAC,eAAe,CAAC;gBAClD,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,KAAK,EAAE,EAAE,CAAC,KAAK;aAClB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACvD,CAAC;CACJ;AAzBD,oCAyBC"}
@@ -41,10 +41,6 @@ class SafeImaLegacyMarionetteSubmitter extends safe_to_ima_submitter_1.SafeToIma
41
41
  ]), hardhat_1.ethers.provider);
42
42
  }
43
43
  async submit(transactions) {
44
- const singleTransaction = 1;
45
- if (transactions.length > singleTransaction) {
46
- SafeImaLegacyMarionetteSubmitter.atomicityWarning();
47
- }
48
44
  const marionetteAddress = await this.marionette.getAddress();
49
45
  const transactionsToMarionette = (await Promise.all(transactions.
50
46
  map((transaction) => this.marionette.encodeFunctionCall(transaction.to ?? hardhat_1.ethers.ZeroAddress, transaction.value, transaction.data)))).map((data) => ethers_1.Transaction.from({
@@ -1 +1 @@
1
- {"version":3,"file":"safe-ima-legacy-marionette-submitter.js","sourceRoot":"","sources":["../../../src/submitters/safe-ima-legacy-marionette-submitter.ts"],"names":[],"mappings":";;;AAAA,mDAAwE;AACxE,mEAA2D;AAC3D,mCAAmC;AACnC,qCAA+B;AAG/B,MAAa,gCAAiC,SAAQ,0CAAkB;IAAxE;;QACI,eAAU,GAAG,IAAI,gBAAM,CAAC,YAAY,CAChC,+BAAkB,EAClB,IAAI,gBAAM,CAAC,SAAS,CAAC;YACjB;gBACI,QAAQ,EAAE;oBACN;wBACI,cAAc,EAAE,SAAS;wBACzB,MAAM,EAAE,UAAU;wBAClB,MAAM,EAAE,SAAS;qBACpB;oBACD;wBACI,cAAc,EAAE,SAAS;wBACzB,MAAM,EAAE,OAAO;wBACf,MAAM,EAAE,SAAS;qBACpB;oBACD;wBACI,cAAc,EAAE,OAAO;wBACvB,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE,OAAO;qBAClB;iBACJ;gBACD,MAAM,EAAE,oBAAoB;gBAC5B,SAAS,EAAE;oBACP;wBACI,cAAc,EAAE,OAAO;wBACvB,MAAM,EAAE,EAAE;wBACV,MAAM,EAAE,OAAO;qBAClB;iBACJ;gBACD,iBAAiB,EAAE,MAAM;gBACzB,MAAM,EAAE,UAAU;aACrB;SACJ,CAAC,EACF,gBAAM,CAAC,QAAQ,CACE,CAAC;IAsB1B,CAAC;IApBG,KAAK,CAAC,MAAM,CAAE,YAA2B;QACrC,MAAM,iBAAiB,GAAG,CAAC,CAAC;QAC5B,IAAI,YAAY,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YAC1C,gCAAgC,CAAC,gBAAgB,EAAE,CAAC;QACxD,CAAC;QACD,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC7D,MAAM,wBAAwB,GAC1B,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY;YAC3B,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CACnD,WAAW,CAAC,EAAE,IAAI,gBAAM,CAAC,WAAW,EACpC,WAAW,CAAC,KAAK,EACjB,WAAW,CAAC,IAAI,CACnB,CAAC,CAAC,CACN,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAW,CAAC,IAAI,CAAC;YAC7B,MAAM,EAAE,gBAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAC5B,IAAI,EAAE,iBAAiB;SAC1B,CAAC,CAAC,CAAC;QAER,MAAM,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;CACJ;AAzDD,4EAyDC"}
1
+ {"version":3,"file":"safe-ima-legacy-marionette-submitter.js","sourceRoot":"","sources":["../../../src/submitters/safe-ima-legacy-marionette-submitter.ts"],"names":[],"mappings":";;;AAAA,mDAAwE;AACxE,mEAA2D;AAC3D,mCAAmC;AACnC,qCAA+B;AAG/B,MAAa,gCAAiC,SAAQ,0CAAkB;IAAxE;;QACI,eAAU,GAAG,IAAI,gBAAM,CAAC,YAAY,CAChC,+BAAkB,EAClB,IAAI,gBAAM,CAAC,SAAS,CAAC;YACjB;gBACI,QAAQ,EAAE;oBACN;wBACI,cAAc,EAAE,SAAS;wBACzB,MAAM,EAAE,UAAU;wBAClB,MAAM,EAAE,SAAS;qBACpB;oBACD;wBACI,cAAc,EAAE,SAAS;wBACzB,MAAM,EAAE,OAAO;wBACf,MAAM,EAAE,SAAS;qBACpB;oBACD;wBACI,cAAc,EAAE,OAAO;wBACvB,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE,OAAO;qBAClB;iBACJ;gBACD,MAAM,EAAE,oBAAoB;gBAC5B,SAAS,EAAE;oBACP;wBACI,cAAc,EAAE,OAAO;wBACvB,MAAM,EAAE,EAAE;wBACV,MAAM,EAAE,OAAO;qBAClB;iBACJ;gBACD,iBAAiB,EAAE,MAAM;gBACzB,MAAM,EAAE,UAAU;aACrB;SACJ,CAAC,EACF,gBAAM,CAAC,QAAQ,CACE,CAAC;IAkB1B,CAAC;IAhBG,KAAK,CAAC,MAAM,CAAE,YAA2B;QACrC,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC7D,MAAM,wBAAwB,GAC1B,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY;YAC3B,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CACnD,WAAW,CAAC,EAAE,IAAI,gBAAM,CAAC,WAAW,EACpC,WAAW,CAAC,KAAK,EACjB,WAAW,CAAC,IAAI,CACnB,CAAC,CAAC,CACN,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAW,CAAC,IAAI,CAAC;YAC7B,MAAM,EAAE,gBAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAC5B,IAAI,EAAE,iBAAiB;SAC1B,CAAC,CAAC,CAAC;QAER,MAAM,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;CACJ;AArDD,4EAqDC"}
@@ -2,6 +2,7 @@ import { Marionette } from "./types/marionette";
2
2
  import { SafeToImaSubmitter } from "./safe-to-ima-submitter";
3
3
  import { Transaction } from "ethers";
4
4
  export declare class SafeImaMarionetteSubmitter extends SafeToImaSubmitter {
5
+ protected atomicSubmitter: boolean;
5
6
  marionette: Marionette;
6
7
  submit(transactions: Transaction[]): Promise<void>;
7
8
  }
@@ -8,6 +8,7 @@ const hardhat_1 = require("hardhat");
8
8
  class SafeImaMarionetteSubmitter extends safe_to_ima_submitter_1.SafeToImaSubmitter {
9
9
  constructor() {
10
10
  super(...arguments);
11
+ this.atomicSubmitter = false;
11
12
  this.marionette = new hardhat_1.ethers.BaseContract(marionette_1.MARIONETTE_ADDRESS, new hardhat_1.ethers.Interface([
12
13
  {
13
14
  "inputs": [
@@ -1 +1 @@
1
- {"version":3,"file":"safe-ima-marionette-submitter.js","sourceRoot":"","sources":["../../../src/submitters/safe-ima-marionette-submitter.ts"],"names":[],"mappings":";;;AAAA,mDAAkE;AAClE,mEAA2D;AAC3D,mCAAmC;AACnC,qCAA+B;AAG/B,MAAa,0BAA2B,SAAQ,0CAAkB;IAAlE;;QACI,eAAU,GAAG,IAAI,gBAAM,CAAC,YAAY,CAChC,+BAAkB,EAClB,IAAI,gBAAM,CAAC,SAAS,CAAC;YACjB;gBACI,QAAQ,EAAE;oBACN;wBACI,YAAY,EAAE;4BACV;gCACI,cAAc,EAAE,SAAS;gCACzB,MAAM,EAAE,UAAU;gCAClB,MAAM,EAAE,SAAS;6BACpB;4BACD;gCACI,cAAc,EAAE,SAAS;gCACzB,MAAM,EAAE,OAAO;gCACf,MAAM,EAAE,SAAS;6BACpB;4BACD;gCACI,cAAc,EAAE,OAAO;gCACvB,MAAM,EAAE,MAAM;gCACd,MAAM,EAAE,OAAO;6BAClB;yBACJ;wBACD,cAAc,EAAE,mCAAmC;wBACnD,MAAM,EAAE,eAAe;wBACvB,MAAM,EAAE,SAAS;qBACpB;iBACJ;gBACD,MAAM,EAAE,qBAAqB;gBAC7B,SAAS,EAAE;oBACP;wBACI,cAAc,EAAE,OAAO;wBACvB,MAAM,EAAE,EAAE;wBACV,MAAM,EAAE,OAAO;qBAClB;iBACJ;gBACD,iBAAiB,EAAE,MAAM;gBACzB,MAAM,EAAE,UAAU;aACrB;SACJ,CAAC,EACF,gBAAM,CAAC,QAAQ,CACJ,CAAC;IAkBpB,CAAC;IAhBG,KAAK,CAAC,MAAM,CAAE,YAA2B;QACrC,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACrC,aAAa,CAAC,IAAI,CAAC;gBACf,MAAM,EAAE,WAAW,CAAC,IAAI;gBACxB,UAAU,EAAE,WAAW,CAAC,EAAE,IAAI,gBAAM,CAAC,WAAW;gBAChD,OAAO,EAAE,WAAW,CAAC,KAAK;aAC7B,CAAC,CAAC;QACP,CAAC;QACD,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAW,CAAC,IAAI,CAAC;gBAC7B,MAAM,EAAE,gBAAM,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU;oBACxC,mBAAmB,CAAC,aAAa,CAAC,CAAC;gBACvC,IAAI,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;aAC3C,CAAC;SACL,CAAC,CAAC;IACP,CAAC;CACJ;AA5DD,gEA4DC"}
1
+ {"version":3,"file":"safe-ima-marionette-submitter.js","sourceRoot":"","sources":["../../../src/submitters/safe-ima-marionette-submitter.ts"],"names":[],"mappings":";;;AAAA,mDAAkE;AAClE,mEAA2D;AAC3D,mCAAmC;AACnC,qCAA+B;AAG/B,MAAa,0BAA2B,SAAQ,0CAAkB;IAAlE;;QACc,oBAAe,GAAG,KAAK,CAAC;QAClC,eAAU,GAAG,IAAI,gBAAM,CAAC,YAAY,CAChC,+BAAkB,EAClB,IAAI,gBAAM,CAAC,SAAS,CAAC;YACjB;gBACI,QAAQ,EAAE;oBACN;wBACI,YAAY,EAAE;4BACV;gCACI,cAAc,EAAE,SAAS;gCACzB,MAAM,EAAE,UAAU;gCAClB,MAAM,EAAE,SAAS;6BACpB;4BACD;gCACI,cAAc,EAAE,SAAS;gCACzB,MAAM,EAAE,OAAO;gCACf,MAAM,EAAE,SAAS;6BACpB;4BACD;gCACI,cAAc,EAAE,OAAO;gCACvB,MAAM,EAAE,MAAM;gCACd,MAAM,EAAE,OAAO;6BAClB;yBACJ;wBACD,cAAc,EAAE,mCAAmC;wBACnD,MAAM,EAAE,eAAe;wBACvB,MAAM,EAAE,SAAS;qBACpB;iBACJ;gBACD,MAAM,EAAE,qBAAqB;gBAC7B,SAAS,EAAE;oBACP;wBACI,cAAc,EAAE,OAAO;wBACvB,MAAM,EAAE,EAAE;wBACV,MAAM,EAAE,OAAO;qBAClB;iBACJ;gBACD,iBAAiB,EAAE,MAAM;gBACzB,MAAM,EAAE,UAAU;aACrB;SACJ,CAAC,EACF,gBAAM,CAAC,QAAQ,CACJ,CAAC;IAkBpB,CAAC;IAhBG,KAAK,CAAC,MAAM,CAAE,YAA2B;QACrC,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACrC,aAAa,CAAC,IAAI,CAAC;gBACf,MAAM,EAAE,WAAW,CAAC,IAAI;gBACxB,UAAU,EAAE,WAAW,CAAC,EAAE,IAAI,gBAAM,CAAC,WAAW;gBAChD,OAAO,EAAE,WAAW,CAAC,KAAK;aAC7B,CAAC,CAAC;QACP,CAAC;QACD,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAW,CAAC,IAAI,CAAC;gBAC7B,MAAM,EAAE,gBAAM,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU;oBACxC,mBAAmB,CAAC,aAAa,CAAC,CAAC;gBACvC,IAAI,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;aAC3C,CAAC;SACL,CAAC,CAAC;IACP,CAAC;CACJ;AA7DD,gEA6DC"}
@@ -1,7 +1,9 @@
1
1
  import { Submitter } from "./submitter";
2
2
  import { Transaction } from "ethers";
3
3
  export declare class SafeSubmitter extends Submitter {
4
+ name: string;
4
5
  safeAddress: string;
6
+ protected atomicSubmitter: boolean;
5
7
  chainId: bigint | undefined;
6
8
  constructor(safeAddress: string, chainId?: bigint);
7
9
  submit(transactions: Transaction[]): Promise<void>;
@@ -7,8 +7,11 @@ const hardhat_1 = require("hardhat");
7
7
  class SafeSubmitter extends submitter_1.Submitter {
8
8
  constructor(safeAddress, chainId) {
9
9
  super();
10
+ this.name = "Safe Submitter";
11
+ this.atomicSubmitter = true;
10
12
  this.safeAddress = safeAddress;
11
13
  this.chainId = chainId;
14
+ this.atomicSubmitter = true;
12
15
  }
13
16
  async submit(transactions) {
14
17
  if (!this.chainId) {
@@ -1 +1 @@
1
- {"version":3,"file":"safe-submitter.js","sourceRoot":"","sources":["../../../src/submitters/safe-submitter.ts"],"names":[],"mappings":";;;AAAA,2CAAsC;AAEtC,gDAA0D;AAC1D,qCAA+B;AAG/B,MAAa,aAAc,SAAQ,qBAAS;IAKxC,YAAa,WAAmB,EAAE,OAAgB;QAC9C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,YAA2B;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,gBAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC;QAChE,CAAC;QACD,MAAM,IAAA,wCAA0B,EAC5B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,EACZ,YAAY,CACf,CAAC;IACN,CAAC;CACJ;AArBD,sCAqBC"}
1
+ {"version":3,"file":"safe-submitter.js","sourceRoot":"","sources":["../../../src/submitters/safe-submitter.ts"],"names":[],"mappings":";;;AAAA,2CAAsC;AAEtC,gDAA0D;AAC1D,qCAA+B;AAG/B,MAAa,aAAc,SAAQ,qBAAS;IAOxC,YAAa,WAAmB,EAAE,OAAgB;QAC9C,KAAK,EAAE,CAAC;QAPZ,SAAI,GAAG,gBAAgB,CAAC;QAEd,oBAAe,GAAG,IAAI,CAAC;QAM7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,YAA2B;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,gBAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC;QAChE,CAAC;QACD,MAAM,IAAA,wCAA0B,EAC5B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,EACZ,YAAY,CACf,CAAC;IACN,CAAC;CACJ;AAxBD,sCAwBC"}
@@ -6,6 +6,7 @@ interface Network {
6
6
  mainnetChainId?: bigint;
7
7
  }
8
8
  export declare class SafeToImaSubmitter extends SafeSubmitter {
9
+ name: string;
9
10
  imaInstance: Instance;
10
11
  targetSchainHash: BytesLike;
11
12
  private messageProxyForMainnet;
@@ -6,14 +6,13 @@ const safe_submitter_1 = require("./safe-submitter");
6
6
  class SafeToImaSubmitter extends safe_submitter_1.SafeSubmitter {
7
7
  constructor(safeAddress, imaInstance, network) {
8
8
  super(safeAddress, network.mainnetChainId);
9
+ this.name = "Safe to IMA Submitter";
9
10
  this.imaInstance = imaInstance;
10
11
  this.targetSchainHash = network.targetSchainHash;
12
+ // After super call
13
+ this.atomicSubmitter = false;
11
14
  }
12
15
  async submit(transactions) {
13
- const singleTransaction = 1;
14
- if (transactions.length > singleTransaction) {
15
- SafeToImaSubmitter.atomicityWarning();
16
- }
17
16
  const messageProxyForMainnet = await this.getMessageProxyForMainnet();
18
17
  const messageProxyForMainnetAddress = await messageProxyForMainnet.getAddress();
19
18
  const transactionsToIma = transactions.map((transaction) => ethers_1.Transaction.from({
@@ -24,6 +23,7 @@ class SafeToImaSubmitter extends safe_submitter_1.SafeSubmitter {
24
23
  ]),
25
24
  "to": messageProxyForMainnetAddress
26
25
  }));
26
+ // Although transactions are atomic on mainnet side, they are not atomic on schain side.
27
27
  await super.submit(transactionsToIma);
28
28
  }
29
29
  async getMessageProxyForMainnet() {
@@ -1 +1 @@
1
- {"version":3,"file":"safe-to-ima-submitter.js","sourceRoot":"","sources":["../../../src/submitters/safe-to-ima-submitter.ts"],"names":[],"mappings":";;;AAAA,mCAA4D;AAE5D,qDAA+C;AAQ/C,MAAa,kBAAmB,SAAQ,8BAAa;IAOjD,YACI,WAAmB,EACnB,WAAqB,EACrB,OAAgB;QAEhB,KAAK,CACD,WAAW,EACX,OAAO,CAAC,cAAc,CACzB,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,YAA2B;QACrC,MAAM,iBAAiB,GAAG,CAAC,CAAC;QAC5B,IAAI,YAAY,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YAC1C,kBAAkB,CAAC,gBAAgB,EAAE,CAAC;QAC1C,CAAC;QACD,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACtE,MAAM,6BAA6B,GAAG,MAAM,sBAAsB,CAAC,UAAU,EAAE,CAAC;QAChF,MAAM,iBAAiB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,oBAAW,CAAC,IAAI,CAAC;YACzE,MAAM,EAAE,sBAAsB,CAAC,SAAS,CAAC,kBAAkB,CACvD,qBAAqB,EACrB;gBACI,IAAI,CAAC,gBAAgB;gBACrB,WAAW,CAAC,EAAE;gBACd,WAAW,CAAC,IAAI;aACnB,CACJ;YACD,IAAI,EAAE,6BAA6B;SACtC,CAAC,CAAC,CAAC;QACJ,MAAM,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,yBAAyB;QACnC,IAAI,OAAO,IAAI,CAAC,sBAAsB,KAAK,WAAW,EAAE,CAAC;YACrD,IAAI,CAAC,sBAAsB;gBACvB,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACvC,CAAC;CACJ;AAhDD,gDAgDC"}
1
+ {"version":3,"file":"safe-to-ima-submitter.js","sourceRoot":"","sources":["../../../src/submitters/safe-to-ima-submitter.ts"],"names":[],"mappings":";;;AAAA,mCAA4D;AAE5D,qDAA+C;AAQ/C,MAAa,kBAAmB,SAAQ,8BAAa;IAOjD,YACI,WAAmB,EACnB,WAAqB,EACrB,OAAgB;QAEhB,KAAK,CACD,WAAW,EACX,OAAO,CAAC,cAAc,CACzB,CAAC;QAdN,SAAI,GAAG,uBAAuB,CAAC;QAe3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,mBAAmB;QACnB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,YAA2B;QACrC,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACtE,MAAM,6BAA6B,GAAG,MAAM,sBAAsB,CAAC,UAAU,EAAE,CAAC;QAChF,MAAM,iBAAiB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,oBAAW,CAAC,IAAI,CAAC;YACzE,MAAM,EAAE,sBAAsB,CAAC,SAAS,CAAC,kBAAkB,CACvD,qBAAqB,EACrB;gBACI,IAAI,CAAC,gBAAgB;gBACrB,WAAW,CAAC,EAAE;gBACd,WAAW,CAAC,IAAI;aACnB,CACJ;YACD,IAAI,EAAE,6BAA6B;SACtC,CAAC,CAAC,CAAC;QACJ,wFAAwF;QACxF,MAAM,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,yBAAyB;QACnC,IAAI,OAAO,IAAI,CAAC,sBAAsB,KAAK,WAAW,EAAE,CAAC;YACrD,IAAI,CAAC,sBAAsB;gBACvB,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACvC,CAAC;CACJ;AA/CD,gDA+CC"}
@@ -1,5 +1,7 @@
1
1
  import { Transaction } from "ethers";
2
2
  export declare abstract class Submitter {
3
+ protected atomicSubmitter: boolean;
4
+ abstract name: string;
3
5
  abstract submit(transactions: Transaction[]): Promise<void>;
4
- protected static atomicityWarning(): void;
6
+ isAtomicSubmitter(): Promise<boolean> | boolean;
5
7
  }
@@ -1,24 +1,12 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.Submitter = void 0;
7
- const exitCodes_1 = require("../exitCodes");
8
- const chalk_1 = __importDefault(require("chalk"));
9
4
  class Submitter {
10
- // Protected
11
- static atomicityWarning() {
12
- if (process.env.ALLOW_NOT_ATOMIC_UPGRADE) {
13
- console.log(chalk_1.default.yellow("Not atomic upgrade is performing"));
14
- }
15
- else {
16
- console.log(chalk_1.default.red("The upgrade will consist" +
17
- " of multiple transactions and will not be atomic"));
18
- console.log(chalk_1.default.red("If not atomic upgrade is OK" +
19
- " set ALLOW_NOT_ATOMIC_UPGRADE environment variable"));
20
- process.exit(exitCodes_1.EXIT_CODES.NOT_ATOMIC_UPGRADE);
21
- }
5
+ constructor() {
6
+ this.atomicSubmitter = false;
7
+ }
8
+ isAtomicSubmitter() {
9
+ return this.atomicSubmitter;
22
10
  }
23
11
  }
24
12
  exports.Submitter = Submitter;
@@ -1 +1 @@
1
- {"version":3,"file":"submitter.js","sourceRoot":"","sources":["../../../src/submitters/submitter.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAwC;AAExC,kDAA0B;AAG1B,MAAsB,SAAS;IAG3B,YAAY;IAEF,MAAM,CAAC,gBAAgB;QAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B;gBAC5C,kDAAkD,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B;gBAC/C,oDAAoD,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,sBAAU,CAAC,kBAAkB,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;CACJ;AAhBD,8BAgBC"}
1
+ {"version":3,"file":"submitter.js","sourceRoot":"","sources":["../../../src/submitters/submitter.ts"],"names":[],"mappings":";;;AAEA,MAAsB,SAAS;IAA/B;QACc,oBAAe,GAAY,KAAK,CAAC;IAO/C,CAAC;IAHG,iBAAiB;QACb,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;CACJ;AARD,8BAQC"}
@@ -1,14 +1,17 @@
1
- import { Transaction } from "ethers";
2
- import { Project } from "./types/upgrader";
3
1
  import { Instance } from "@skalenetwork/skale-contracts-ethers-v6";
2
+ import { NonceProvider } from "./nonceProvider";
3
+ import { Project } from "./types/upgrader";
4
+ import { ProxyUpgrader } from "./proxyUpgrader";
4
5
  import { Submitter } from "./submitters/submitter";
6
+ import { Transaction } from "ethers";
5
7
  export declare abstract class Upgrader {
6
8
  private targetVersion;
7
9
  private contractNamesToUpgrade;
8
10
  private projectName;
9
11
  private submitter;
10
- private nonceProvider?;
11
12
  private deploySemaphore;
13
+ private proxyUpgraders;
14
+ protected nonceProvider?: NonceProvider;
12
15
  protected instance: Instance;
13
16
  protected transactions: Transaction[];
14
17
  constructor(project: Project, submitter?: Submitter);
@@ -16,18 +19,21 @@ export declare abstract class Upgrader {
16
19
  abstract setVersion: (newVersion: string) => Promise<void>;
17
20
  deployNewContracts?: () => Promise<void>;
18
21
  initialize?: () => Promise<void>;
22
+ protected createProxyUpgrader(contractName: string): Promise<ProxyUpgrader>;
19
23
  upgrade(): Promise<void>;
20
24
  getOwner(): Promise<string>;
25
+ private upgradeOldContracts;
26
+ private getChangedContracts;
27
+ private createProxyUpgraders;
21
28
  private callInitialize;
22
29
  private callDeployNewContracts;
23
30
  private prepareVersion;
24
31
  private writeTransactions;
25
- private static verify;
32
+ private verify;
26
33
  private switchToNewImplementations;
27
34
  private deployNewImplementations;
28
35
  private protectedDeployNewImplementation;
29
- private deployNewImplementation;
30
- private prepareUpgrade;
31
36
  private getNormalizedDeployedVersion;
32
37
  private checkVersion;
38
+ private verifySubmitter;
33
39
  }