@skalenetwork/upgrade-tools 3.0.0-skale-contracts.9 → 3.0.0-test-ima-agent.0

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 (133) hide show
  1. package/dist/hardhat.config.d.ts +3 -3
  2. package/dist/hardhat.config.js +6 -17
  3. package/dist/hardhat.config.js.map +1 -0
  4. package/dist/src/abi.d.ts +2 -2
  5. package/dist/src/abi.js +8 -4
  6. package/dist/src/abi.js.map +1 -0
  7. package/dist/src/contractFactory.d.ts +4 -0
  8. package/dist/src/contractFactory.js +84 -0
  9. package/dist/src/contractFactory.js.map +1 -0
  10. package/dist/src/deploy.d.ts +4 -4
  11. package/dist/src/deploy.js +62 -60
  12. package/dist/src/deploy.js.map +1 -0
  13. package/dist/src/exitCodes.d.ts +7 -0
  14. package/dist/src/exitCodes.js +12 -0
  15. package/dist/src/exitCodes.js.map +1 -0
  16. package/dist/src/gnosis-safe.d.ts +2 -2
  17. package/dist/src/gnosis-safe.js +121 -94
  18. package/dist/src/gnosis-safe.js.map +1 -0
  19. package/dist/src/index.d.ts +0 -1
  20. package/dist/src/index.js +1 -1
  21. package/dist/src/index.js.map +1 -0
  22. package/dist/src/nonceProvider.d.ts +10 -0
  23. package/dist/src/nonceProvider.js +34 -0
  24. package/dist/src/nonceProvider.js.map +1 -0
  25. package/dist/src/proxyAdmin.d.ts +4 -0
  26. package/dist/src/proxyAdmin.js +56 -0
  27. package/dist/src/proxyAdmin.js.map +1 -0
  28. package/dist/src/submitters/auto-submitter.d.ts +22 -5
  29. package/dist/src/submitters/auto-submitter.js +127 -118
  30. package/dist/src/submitters/auto-submitter.js.map +1 -0
  31. package/dist/src/submitters/eoa-submitter.d.ts +3 -2
  32. package/dist/src/submitters/eoa-submitter.js +19 -13
  33. package/dist/src/submitters/eoa-submitter.js.map +1 -0
  34. package/dist/src/submitters/index.js +1 -0
  35. package/dist/src/submitters/index.js.map +1 -0
  36. package/dist/src/submitters/safe-ima-legacy-marionette-submitter.d.ts +4 -3
  37. package/dist/src/submitters/safe-ima-legacy-marionette-submitter.js +14 -13
  38. package/dist/src/submitters/safe-ima-legacy-marionette-submitter.js.map +1 -0
  39. package/dist/src/submitters/safe-ima-marionette-submitter.d.ts +3 -3
  40. package/dist/src/submitters/safe-ima-marionette-submitter.js +13 -11
  41. package/dist/src/submitters/safe-ima-marionette-submitter.js.map +1 -0
  42. package/dist/src/submitters/safe-submitter.d.ts +4 -4
  43. package/dist/src/submitters/safe-submitter.js +4 -3
  44. package/dist/src/submitters/safe-submitter.js.map +1 -0
  45. package/dist/src/submitters/safe-to-ima-submitter.d.ts +11 -6
  46. package/dist/src/submitters/safe-to-ima-submitter.js +23 -15
  47. package/dist/src/submitters/safe-to-ima-submitter.js.map +1 -0
  48. package/dist/src/submitters/submitter.d.ts +3 -3
  49. package/dist/src/submitters/submitter.js +11 -7
  50. package/dist/src/submitters/submitter.js.map +1 -0
  51. package/dist/src/submitters/types/marionette.d.ts +6 -3
  52. package/dist/src/submitters/types/marionette.js +1 -0
  53. package/dist/src/submitters/types/marionette.js.map +1 -0
  54. package/dist/src/types/SkaleManifestData.js +1 -0
  55. package/dist/src/types/SkaleManifestData.js.map +1 -0
  56. package/dist/src/types/upgrader.d.ts +12 -0
  57. package/dist/{typechain-types/AccessControlUpgradeable.js → src/types/upgrader.js} +1 -0
  58. package/dist/src/types/upgrader.js.map +1 -0
  59. package/dist/src/upgrader.d.ts +27 -12
  60. package/dist/src/upgrader.js +149 -91
  61. package/dist/src/upgrader.js.map +1 -0
  62. package/dist/src/verification.d.ts +2 -2
  63. package/dist/src/verification.js +54 -27
  64. package/dist/src/verification.js.map +1 -0
  65. package/dist/src/version.js +24 -2
  66. package/dist/src/version.js.map +1 -0
  67. package/dist/typechain-types/AdminUpgradeabilityProxy.d.ts +59 -54
  68. package/dist/typechain-types/AdminUpgradeabilityProxy.js +1 -0
  69. package/dist/typechain-types/AdminUpgradeabilityProxy.js.map +1 -0
  70. package/dist/typechain-types/ProxyAdmin.d.ts +94 -137
  71. package/dist/typechain-types/ProxyAdmin.js +1 -0
  72. package/dist/typechain-types/ProxyAdmin.js.map +1 -0
  73. package/dist/typechain-types/common.d.ts +40 -11
  74. package/dist/typechain-types/common.js +1 -0
  75. package/dist/typechain-types/common.js.map +1 -0
  76. package/dist/typechain-types/factories/AdminUpgradeabilityProxy__factory.d.ts +71 -41
  77. package/dist/typechain-types/factories/AdminUpgradeabilityProxy__factory.js +8 -11
  78. package/dist/typechain-types/factories/AdminUpgradeabilityProxy__factory.js.map +1 -0
  79. package/dist/typechain-types/factories/ProxyAdmin__factory.d.ts +129 -41
  80. package/dist/typechain-types/factories/ProxyAdmin__factory.js +8 -11
  81. package/dist/typechain-types/factories/ProxyAdmin__factory.js.map +1 -0
  82. package/dist/typechain-types/factories/index.d.ts +2 -0
  83. package/dist/typechain-types/factories/index.js +11 -0
  84. package/dist/typechain-types/factories/index.js.map +1 -0
  85. package/dist/typechain-types/index.d.ts +1 -22
  86. package/dist/typechain-types/index.js +26 -23
  87. package/dist/typechain-types/index.js.map +1 -0
  88. package/package.json +20 -20
  89. package/dist/src/multiSend.d.ts +0 -2
  90. package/dist/src/multiSend.js +0 -46
  91. package/dist/typechain-types/AccessControlEnumerableUpgradeable.d.ts +0 -183
  92. package/dist/typechain-types/AccessControlEnumerableUpgradeable.js +0 -2
  93. package/dist/typechain-types/AccessControlUpgradeable.d.ts +0 -167
  94. package/dist/typechain-types/ContextUpgradeable.d.ts +0 -40
  95. package/dist/typechain-types/ContextUpgradeable.js +0 -2
  96. package/dist/typechain-types/ERC165Upgradeable.d.ts +0 -53
  97. package/dist/typechain-types/ERC165Upgradeable.js +0 -2
  98. package/dist/typechain-types/IAccessControlEnumerableUpgradeable.d.ts +0 -159
  99. package/dist/typechain-types/IAccessControlEnumerableUpgradeable.js +0 -2
  100. package/dist/typechain-types/IAccessControlUpgradeable.d.ts +0 -143
  101. package/dist/typechain-types/IAccessControlUpgradeable.js +0 -2
  102. package/dist/typechain-types/IERC165Upgradeable.d.ts +0 -43
  103. package/dist/typechain-types/IERC165Upgradeable.js +0 -2
  104. package/dist/typechain-types/ISafeMock.d.ts +0 -86
  105. package/dist/typechain-types/ISafeMock.js +0 -2
  106. package/dist/typechain-types/Initializable.d.ts +0 -40
  107. package/dist/typechain-types/Initializable.js +0 -2
  108. package/dist/typechain-types/OwnableUpgradeable.d.ts +0 -97
  109. package/dist/typechain-types/OwnableUpgradeable.js +0 -2
  110. package/dist/typechain-types/SafeMock.d.ts +0 -172
  111. package/dist/typechain-types/SafeMock.js +0 -2
  112. package/dist/typechain-types/factories/AccessControlEnumerableUpgradeable__factory.d.ts +0 -35
  113. package/dist/typechain-types/factories/AccessControlEnumerableUpgradeable__factory.js +0 -279
  114. package/dist/typechain-types/factories/AccessControlUpgradeable__factory.d.ts +0 -35
  115. package/dist/typechain-types/factories/AccessControlUpgradeable__factory.js +0 -236
  116. package/dist/typechain-types/factories/ContextUpgradeable__factory.d.ts +0 -18
  117. package/dist/typechain-types/factories/ContextUpgradeable__factory.js +0 -32
  118. package/dist/typechain-types/factories/ERC165Upgradeable__factory.d.ts +0 -35
  119. package/dist/typechain-types/factories/ERC165Upgradeable__factory.js +0 -51
  120. package/dist/typechain-types/factories/IAccessControlEnumerableUpgradeable__factory.d.ts +0 -35
  121. package/dist/typechain-types/factories/IAccessControlEnumerableUpgradeable__factory.js +0 -234
  122. package/dist/typechain-types/factories/IAccessControlUpgradeable__factory.d.ts +0 -35
  123. package/dist/typechain-types/factories/IAccessControlUpgradeable__factory.js +0 -191
  124. package/dist/typechain-types/factories/IERC165Upgradeable__factory.d.ts +0 -22
  125. package/dist/typechain-types/factories/IERC165Upgradeable__factory.js +0 -38
  126. package/dist/typechain-types/factories/ISafeMock__factory.d.ts +0 -22
  127. package/dist/typechain-types/factories/ISafeMock__factory.js +0 -114
  128. package/dist/typechain-types/factories/Initializable__factory.d.ts +0 -18
  129. package/dist/typechain-types/factories/Initializable__factory.js +0 -32
  130. package/dist/typechain-types/factories/OwnableUpgradeable__factory.d.ts +0 -42
  131. package/dist/typechain-types/factories/OwnableUpgradeable__factory.js +0 -84
  132. package/dist/typechain-types/factories/SafeMock__factory.d.ts +0 -56
  133. package/dist/typechain-types/factories/SafeMock__factory.js +0 -247
@@ -1,6 +1,6 @@
1
- import { HardhatUserConfig } from "hardhat/config";
2
- import '@typechain/hardhat';
3
- import "@nomiclabs/hardhat-ethers";
1
+ import "@typechain/hardhat";
2
+ import "@nomicfoundation/hardhat-ethers";
4
3
  import "@openzeppelin/hardhat-upgrades";
4
+ import { HardhatUserConfig } from "hardhat/config";
5
5
  declare const config: HardhatUserConfig;
6
6
  export default config;
@@ -1,25 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("@typechain/hardhat");
4
- require("@nomiclabs/hardhat-ethers");
4
+ require("@nomicfoundation/hardhat-ethers");
5
5
  require("@openzeppelin/hardhat-upgrades");
6
+ const coreArtifacts = "node_modules/@openzeppelin/upgrades-core/artifacts/[!b]*.json";
6
7
  const config = {
7
- solidity: {
8
- compilers: [
9
- {
10
- version: '0.8.11',
11
- settings: {
12
- optimizer: {
13
- enabled: true,
14
- runs: 200
15
- }
16
- }
17
- }
18
- ]
19
- },
20
- typechain: {
21
- target: "ethers-v5",
22
- externalArtifacts: ['node_modules/@openzeppelin/upgrades-core/artifacts/[!b]*.json']
8
+ "typechain": {
9
+ "externalArtifacts": [coreArtifacts],
10
+ "target": "ethers-v6"
23
11
  }
24
12
  };
25
13
  exports.default = config;
14
+ //# sourceMappingURL=hardhat.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hardhat.config.js","sourceRoot":"","sources":["../hardhat.config.ts"],"names":[],"mappings":";;AAAA,8BAA4B;AAC5B,2CAAyC;AACzC,0CAAwC;AAIxC,MAAM,aAAa,GACf,+DAA+D,CAAC;AAEpE,MAAM,MAAM,GAAsB;IAC9B,WAAW,EAAE;QACT,mBAAmB,EAAE,CAAC,aAAa,CAAC;QACpC,QAAQ,EAAE,WAAW;KACxB;CACJ,CAAC;AAEF,kBAAe,MAAM,CAAC"}
package/dist/src/abi.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { Interface } from "ethers/lib/utils";
2
- export declare function getAbi(contractInterface: Interface): [];
1
+ import { Interface } from "ethers";
2
+ export declare const getAbi: (contractInterface: Interface) => [];
package/dist/src/abi.js CHANGED
@@ -1,16 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getAbi = void 0;
4
- function getAbi(contractInterface) {
5
- const abi = JSON.parse(contractInterface.format("json"));
4
+ const getAbi = (contractInterface) => {
5
+ const abi = JSON.parse(contractInterface.formatJson());
6
6
  abi.forEach((obj) => {
7
7
  if (obj.type === "function") {
8
8
  const func = obj;
9
9
  func.inputs.concat(func.outputs).forEach((output) => {
10
- Object.assign(output, Object.assign({ name: "" }, output));
10
+ Object.assign(output, {
11
+ "name": "",
12
+ ...output
13
+ });
11
14
  });
12
15
  }
13
16
  });
14
17
  return abi;
15
- }
18
+ };
16
19
  exports.getAbi = getAbi;
20
+ //# sourceMappingURL=abi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abi.js","sourceRoot":"","sources":["../../src/abi.ts"],"names":[],"mappings":";;;AAEO,MAAM,MAAM,GAAG,CAAC,iBAA4B,EAAE,EAAE;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAO,CAAC;IAE7D,GAAG,CAAC,OAAO,CAAC,CAAC,GAAmB,EAAE,EAAE;QAChC,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE;YACzB,MAAM,IAAI,GAAG,GAKZ,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,MAAc,EAAE,EAAE;gBACxD,MAAM,CAAC,MAAM,CACT,MAAM,EACN;oBACI,MAAM,EAAE,EAAE;oBACV,GAAG,MAAM;iBACZ,CACJ,CAAC;YACN,CAAC,CAAC,CAAC;SACN;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAxBW,QAAA,MAAM,UAwBjB"}
@@ -0,0 +1,4 @@
1
+ import { LinkReferences } from "hardhat/types";
2
+ import { NonceProvider } from "./nonceProvider";
3
+ export declare const getLibrariesNames: (linkReferences: LinkReferences) => string[];
4
+ export declare const getContractFactoryAndUpdateManifest: (contract: string, nonceProvider?: NonceProvider) => Promise<import("ethers").ContractFactory<any[], import("ethers").BaseContract>>;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getContractFactoryAndUpdateManifest = exports.getLibrariesNames = void 0;
4
+ const hardhat_1 = require("hardhat");
5
+ const deploy_1 = require("./deploy");
6
+ const fs_1 = require("fs");
7
+ const upgrades_core_1 = require("@openzeppelin/upgrades-core");
8
+ const getSkaleManifest = async () => {
9
+ const manifest = JSON.parse(await fs_1.promises.readFile(await (0, deploy_1.getManifestFile)(), "utf-8"));
10
+ if (typeof manifest.libraries === "undefined") {
11
+ manifest.libraries = {};
12
+ }
13
+ return manifest;
14
+ };
15
+ const loadBytesCodes = async (libraryNames) => {
16
+ const byteCodes = new Map();
17
+ (await Promise.
18
+ all(libraryNames.map((libraryName) => (async () => {
19
+ const { bytecode } = await hardhat_1.artifacts.readArtifact(libraryName);
20
+ return [
21
+ libraryName,
22
+ bytecode
23
+ ];
24
+ })()))).forEach(([libraryName, bytecode]) => {
25
+ byteCodes.set(libraryName, bytecode);
26
+ });
27
+ return byteCodes;
28
+ };
29
+ const updateManifest = async (manifest, libraries, oldLibraries) => {
30
+ const byteCodes = await loadBytesCodes(Array.from(libraries.keys()));
31
+ for (const [libraryName, libraryAddress] of libraries.entries()) {
32
+ manifest.libraries[libraryName] = {
33
+ "address": libraryAddress,
34
+ "bytecodeHash": (0, upgrades_core_1.hashBytecode)(byteCodes.get(libraryName))
35
+ };
36
+ }
37
+ Object.assign(libraries, oldLibraries);
38
+ const indentation = 4;
39
+ await fs_1.promises.writeFile(await (0, deploy_1.getManifestFile)(), JSON.stringify(manifest, null, indentation));
40
+ };
41
+ const getLibrariesNames = (linkReferences) => {
42
+ const libraryNames = [];
43
+ for (const libraryFile of Object.values(linkReferences)) {
44
+ libraryNames.push(...Object.keys(libraryFile));
45
+ }
46
+ return libraryNames;
47
+ };
48
+ exports.getLibrariesNames = getLibrariesNames;
49
+ const getLibrariesToUpgrade = async (manifest, linkReferences) => {
50
+ const librariesToUpgrade = [];
51
+ const oldLibraries = {};
52
+ const librariesNames = (0, exports.getLibrariesNames)(linkReferences);
53
+ const byteCodes = await loadBytesCodes(librariesNames);
54
+ for (const libraryName of librariesNames) {
55
+ if (typeof manifest.libraries[libraryName] === "undefined") {
56
+ librariesToUpgrade.push(libraryName);
57
+ }
58
+ else if ((0, upgrades_core_1.hashBytecode)(byteCodes.get(libraryName)) ===
59
+ manifest.libraries[libraryName].bytecodeHash) {
60
+ oldLibraries[libraryName] =
61
+ manifest.libraries[libraryName].address;
62
+ }
63
+ else {
64
+ librariesToUpgrade.push(libraryName);
65
+ }
66
+ }
67
+ return {
68
+ librariesToUpgrade,
69
+ oldLibraries
70
+ };
71
+ };
72
+ const getContractFactoryAndUpdateManifest = async (contract, nonceProvider) => {
73
+ const { linkReferences } = await hardhat_1.artifacts.readArtifact(contract);
74
+ if (!Object.keys(linkReferences).length) {
75
+ return await hardhat_1.ethers.getContractFactory(contract);
76
+ }
77
+ const manifest = await getSkaleManifest();
78
+ const { librariesToUpgrade, oldLibraries } = await getLibrariesToUpgrade(manifest, linkReferences);
79
+ const libraries = await (0, deploy_1.deployLibraries)(librariesToUpgrade, nonceProvider);
80
+ await updateManifest(manifest, libraries, oldLibraries);
81
+ return await hardhat_1.ethers.getContractFactory(contract, { "libraries": Object.fromEntries(libraries) });
82
+ };
83
+ exports.getContractFactoryAndUpdateManifest = getContractFactoryAndUpdateManifest;
84
+ //# sourceMappingURL=contractFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contractFactory.js","sourceRoot":"","sources":["../../src/contractFactory.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export declare function deployLibraries(libraryNames: string[]): Promise<Map<string, string>>;
2
- export declare function getLinkedContractFactory(contractName: string, libraries: Map<string, string>): Promise<import("ethers").ContractFactory>;
3
- export declare function getManifestFile(): Promise<string>;
4
- export declare function getContractFactory(contract: string): Promise<import("ethers").ContractFactory>;
1
+ import { NonceProvider } from "./nonceProvider";
2
+ export declare const deployLibraries: (libraryNames: string[], nonceProvider?: NonceProvider) => Promise<Map<string, string>>;
3
+ export declare const getManifestFile: () => Promise<string>;
4
+ export declare const getContractFactory: (contract: string) => Promise<import("ethers").ContractFactory<any[], import("ethers").BaseContract>>;
@@ -1,77 +1,79 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getContractFactory = exports.getManifestFile = exports.getLinkedContractFactory = exports.deployLibraries = void 0;
3
+ exports.getContractFactory = exports.getManifestFile = exports.deployLibraries = void 0;
4
4
  const upgrades_core_1 = require("@openzeppelin/upgrades-core");
5
5
  const hardhat_1 = require("hardhat");
6
+ const nonceProvider_1 = require("./nonceProvider");
6
7
  const fs_1 = require("fs");
7
- async function _deployLibrary(libraryName) {
8
- const Library = await hardhat_1.ethers.getContractFactory(libraryName), library = await Library.deploy();
9
- await library.deployed();
10
- return library.address;
11
- }
12
- async function deployLibraries(libraryNames) {
8
+ const contractFactory_1 = require("./contractFactory");
9
+ const deployLibrary = async (libraryName, nonceProvider) => {
10
+ const Library = await hardhat_1.ethers.getContractFactory(libraryName);
11
+ console.log('Deploying library', libraryName);
12
+ const nonce = nonceProvider.reserveNonce();
13
+ console.log('Nonce:', nonce);
14
+ const library = await Library.
15
+ deploy({ "nonce": nonceProvider.reserveNonce() });
16
+ await library.waitForDeployment();
17
+ return await library.getAddress();
18
+ };
19
+ const deployLibraries = async (libraryNames, nonceProvider) => {
20
+ const [deployer] = await hardhat_1.ethers.getSigners();
21
+ const initializedNonceProvider = nonceProvider ??
22
+ await nonceProvider_1.NonceProvider.createForWallet(deployer);
13
23
  const libraries = new Map();
14
- for (const libraryName of libraryNames) {
15
- libraries.set(libraryName, await _deployLibrary(libraryName));
16
- }
24
+ (await Promise.all(libraryNames.map((libraryName) => (async () => [
25
+ libraryName,
26
+ await deployLibrary(libraryName, initializedNonceProvider)
27
+ ])()))).forEach(([libraryName, libraryAddress]) => {
28
+ libraries.set(libraryName, libraryAddress);
29
+ });
17
30
  return libraries;
18
- }
31
+ };
19
32
  exports.deployLibraries = deployLibraries;
20
- function _linkBytecode(artifact, libraries) {
21
- let bytecode = artifact.bytecode;
22
- for (const [, fileReferences] of Object.entries(artifact.linkReferences)) {
23
- for (const [libName, fixups] of Object.entries(fileReferences)) {
24
- const addr = libraries.get(libName);
25
- if (addr === undefined) {
26
- continue;
27
- }
28
- for (const fixup of fixups) {
29
- bytecode =
30
- bytecode.substr(0, 2 + fixup.start * 2) +
31
- addr.substr(2) +
32
- bytecode.substr(2 + (fixup.start + fixup.length) * 2);
33
- }
34
- }
35
- }
36
- return bytecode;
37
- }
38
- async function getLinkedContractFactory(contractName, libraries) {
39
- const cArtifact = await hardhat_1.artifacts.readArtifact(contractName), linkedBytecode = _linkBytecode(cArtifact, libraries), ContractFactory = await hardhat_1.ethers.getContractFactory(cArtifact.abi, linkedBytecode);
40
- return ContractFactory;
41
- }
42
- exports.getLinkedContractFactory = getLinkedContractFactory;
43
- async function getManifestFile() {
33
+ const getManifestFile = async function getManifestFile() {
44
34
  return (await upgrades_core_1.Manifest.forNetwork(hardhat_1.ethers.provider)).file;
45
- }
35
+ };
46
36
  exports.getManifestFile = getManifestFile;
47
- async function getContractFactory(contract) {
48
- const { linkReferences } = await hardhat_1.artifacts.readArtifact(contract);
49
- if (!Object.keys(linkReferences).length)
50
- return await hardhat_1.ethers.getContractFactory(contract);
51
- const libraryNames = [];
52
- for (const key of Object.keys(linkReferences)) {
53
- const libraryName = Object.keys(linkReferences[key])[0];
54
- libraryNames.push(libraryName);
37
+ const updateManifest = async (libraryArtifacts) => {
38
+ const manifest = JSON.parse(await fs_1.promises.readFile(await (0, exports.getManifestFile)(), "utf-8"));
39
+ if (typeof manifest.libraries === "undefined") {
40
+ Object.assign(manifest, { "libraries": libraryArtifacts });
41
+ }
42
+ else {
43
+ Object.assign(libraryArtifacts, manifest.libraries);
55
44
  }
56
- const libraries = await deployLibraries(libraryNames), libraryArtifacts = {};
57
- for (const [libraryName, libraryAddress] of libraries.entries()) {
45
+ const indentation = 4;
46
+ await fs_1.promises.writeFile(await (0, exports.getManifestFile)(), JSON.stringify(manifest, null, indentation));
47
+ };
48
+ const getLibraryArtifacts = async (libraries) => {
49
+ const libraryArtifacts = {};
50
+ const getLibraryArtifact = async (libraryName, libraryAddress) => {
58
51
  const { bytecode } = await hardhat_1.artifacts.readArtifact(libraryName);
59
- libraryArtifacts[libraryName] = {
52
+ return {
60
53
  "address": libraryAddress,
61
- "bytecodeHash": (0, upgrades_core_1.hashBytecode)(bytecode)
54
+ "bytecodeHash": (0, upgrades_core_1.hashBytecode)(bytecode),
55
+ libraryName
56
+ };
57
+ };
58
+ for (const libraryArtifact of await Promise.
59
+ all(Array.from(libraries.entries()).map(([libraryName, libraryAddress]) => getLibraryArtifact(libraryName, libraryAddress)))) {
60
+ libraryArtifacts[libraryArtifact.libraryName] = {
61
+ "address": libraryArtifact.address,
62
+ "bytecodeHash": libraryArtifact.bytecodeHash
62
63
  };
63
64
  }
64
- let manifest;
65
- try {
66
- manifest = JSON.parse(await fs_1.promises.readFile(await getManifestFile(), "utf-8"));
67
- Object.assign(libraryArtifacts, manifest.libraries);
68
- }
69
- finally {
70
- if (manifest !== undefined) {
71
- Object.assign(manifest, { libraries: libraryArtifacts });
72
- }
73
- await fs_1.promises.writeFile(await getManifestFile(), JSON.stringify(manifest, null, 4));
65
+ return libraryArtifacts;
66
+ };
67
+ const getContractFactory = async (contract) => {
68
+ const { linkReferences } = await hardhat_1.artifacts.readArtifact(contract);
69
+ if (!Object.keys(linkReferences).length) {
70
+ return await hardhat_1.ethers.getContractFactory(contract);
74
71
  }
75
- return await getLinkedContractFactory(contract, libraries);
76
- }
72
+ const libraryNames = (0, contractFactory_1.getLibrariesNames)(linkReferences);
73
+ const libraries = await (0, exports.deployLibraries)(libraryNames);
74
+ const libraryArtifacts = await getLibraryArtifacts(libraries);
75
+ await updateManifest(libraryArtifacts);
76
+ return await hardhat_1.ethers.getContractFactory(contract, { "libraries": Object.fromEntries(libraries) });
77
+ };
77
78
  exports.getContractFactory = getContractFactory;
79
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare enum EXIT_CODES {
2
+ SUCCESS = 0,
3
+ BAD_VERSION = 1,
4
+ NOT_ATOMIC_UPGRADE = 2,
5
+ UNKNOWN_SAFE_ADDRESS = 3,
6
+ UNKNOWN_IMA = 4
7
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EXIT_CODES = void 0;
4
+ var EXIT_CODES;
5
+ (function (EXIT_CODES) {
6
+ EXIT_CODES[EXIT_CODES["SUCCESS"] = 0] = "SUCCESS";
7
+ EXIT_CODES[EXIT_CODES["BAD_VERSION"] = 1] = "BAD_VERSION";
8
+ EXIT_CODES[EXIT_CODES["NOT_ATOMIC_UPGRADE"] = 2] = "NOT_ATOMIC_UPGRADE";
9
+ EXIT_CODES[EXIT_CODES["UNKNOWN_SAFE_ADDRESS"] = 3] = "UNKNOWN_SAFE_ADDRESS";
10
+ EXIT_CODES[EXIT_CODES["UNKNOWN_IMA"] = 4] = "UNKNOWN_IMA";
11
+ })(EXIT_CODES || (exports.EXIT_CODES = EXIT_CODES = {}));
12
+ //# sourceMappingURL=exitCodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exitCodes.js","sourceRoot":"","sources":["../../src/exitCodes.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAMX;AAND,WAAY,UAAU;IAClB,iDAAO,CAAA;IACP,yDAAW,CAAA;IACX,uEAAkB,CAAA;IAClB,2EAAoB,CAAA;IACpB,yDAAW,CAAA;AACf,CAAC,EANW,UAAU,0BAAV,UAAU,QAMrB"}
@@ -1,2 +1,2 @@
1
- import { UnsignedTransaction } from "ethers";
2
- export declare function createMultiSendTransaction(safeAddress: string, transactions: UnsignedTransaction[]): Promise<void>;
1
+ import { Transaction } from "ethers";
2
+ export declare const createMultiSendTransaction: (safeAddress: string, chainId: bigint, transactions: Transaction[]) => Promise<void>;
@@ -1,119 +1,146 @@
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
4
  };
28
5
  Object.defineProperty(exports, "__esModule", { value: true });
29
6
  exports.createMultiSendTransaction = void 0;
30
- const chalk_1 = __importDefault(require("chalk"));
7
+ const safe_core_sdk_types_1 = require("@safe-global/safe-core-sdk-types");
8
+ const ethers_1 = require("ethers");
31
9
  const hardhat_1 = require("hardhat");
10
+ const protocol_kit_1 = __importDefault(require("@safe-global/protocol-kit"));
32
11
  const api_kit_1 = __importDefault(require("@safe-global/api-kit"));
33
- const protocol_kit_1 = __importStar(require("@safe-global/protocol-kit"));
34
- var Network;
35
- (function (Network) {
36
- Network[Network["MAINNET"] = 1] = "MAINNET";
37
- Network[Network["GOERLI"] = 5] = "GOERLI";
38
- Network[Network["GANACHE"] = 1337] = "GANACHE";
39
- Network[Network["HARDHAT"] = 31337] = "HARDHAT";
40
- })(Network || (Network = {}));
41
- // constants
12
+ const chalk_1 = __importDefault(require("chalk"));
13
+ // Cspell:words arbitrum celo sepolia xdai
14
+ // Constants
42
15
  const URLS = {
43
- safe_transaction: {
44
- [Network.MAINNET]: "https://safe-transaction-mainnet.safe.global",
45
- [Network.GOERLI]: "https://safe-transaction-goerli.safe.global",
16
+ "safe_transaction": {
17
+ [ethers_1.Network.from("mainnet").chainId.toString()]: "https://safe-transaction-mainnet.safe.global",
18
+ [ethers_1.Network.from("arbitrum").chainId.toString()]: "https://safe-transaction-arbitrum.safe.global",
19
+ [ethers_1.Network.from("base").chainId.toString()]: "https://safe-transaction-base.safe.global",
20
+ [ethers_1.Network.from("base-sepolia").chainId.toString()]: "https://safe-transaction-base-sepolia.safe.global",
21
+ [ethers_1.Network.from("bnb").chainId.toString()]: "https://safe-transaction-bsc.safe.global",
22
+ [ethers_1.Network.from("xdai").chainId.toString()]: "https://safe-transaction-gnosis-chain.safe.global",
23
+ [ethers_1.Network.from("optimism").chainId.toString()]: "https://safe-transaction-optimism.safe.global",
24
+ [ethers_1.Network.from("matic").chainId.toString()]: "https://safe-transaction-polygon.safe.global",
25
+ [ethers_1.Network.from("sepolia").chainId.toString()]: "https://safe-transaction-sepolia.safe.global",
26
+ // Aurora
27
+ "0x4e454152": "https://safe-transaction-aurora.safe.global",
28
+ // Polygon zkEVM
29
+ "1101": "https://safe-transaction-zkevm.safe.global",
30
+ // ZkSync Era Mainnet
31
+ "324": "https://safe-transaction-zksync.safe.global",
32
+ // Celo
33
+ "42220": "https://safe-transaction-celo.safe.global",
34
+ // Avalanche
35
+ "43114": "https://safe-transaction-avalanche.safe.global",
36
+ // Scroll
37
+ "534352": "https://safe-transaction-scroll.safe.global",
46
38
  }
47
39
  };
48
- // public functions
49
- async function createMultiSendTransaction(safeAddress, transactions) {
40
+ const defaultOptions = {
41
+ /*
42
+ * Gas costs not related to the transaction execution
43
+ * (signature check, refund payment...)
44
+ */
45
+ "baseGas": "0",
46
+ // Gas price used for the refund calculation
47
+ "gasPrice": "0",
48
+ /*
49
+ * Token address (hold by the Safe)
50
+ * to be used as a refund to the sender,
51
+ * if `null` is Ether
52
+ */
53
+ "gasToken": hardhat_1.ethers.ZeroAddress,
54
+ // Address of receiver of gas payment (or `null` if tx.origin)
55
+ "refundReceiver": hardhat_1.ethers.ZeroAddress,
56
+ // Max gas to use in the transaction
57
+ "safeTxGas": "0"
58
+ };
59
+ // Private functions
60
+ const getSafeTransactionData = (transactions) => {
50
61
  const safeTransactionData = [];
51
62
  for (const transaction of transactions) {
52
63
  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,
64
+ "data": transaction.data,
65
+ "operation": safe_core_sdk_types_1.OperationType.Call,
66
+ "to": transaction.to ?? hardhat_1.ethers.ZeroAddress,
67
+ "value": transaction.value.toString()
57
68
  });
58
69
  }
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);
71
- }
72
- exports.createMultiSendTransaction = createMultiSendTransaction;
73
- // private functions
74
- async function estimateSafeTransaction(safeAddress, safeTransactionData) {
70
+ return safeTransactionData;
71
+ };
72
+ const getSafeTransactionUrl = (chainId) => {
73
+ if (Object.keys(URLS.safe_transaction).includes(chainId.toString())) {
74
+ return URLS.safe_transaction[Number(chainId)];
75
+ }
76
+ throw Error("Can't get Safe Transaction Service url" +
77
+ ` at network with chainId = ${chainId}`);
78
+ };
79
+ const getSafeService = (chainId) => {
80
+ const safeService = new api_kit_1.default({
81
+ chainId,
82
+ "txServiceUrl": getSafeTransactionUrl(chainId)
83
+ });
84
+ return safeService;
85
+ };
86
+ const estimateSafeTransaction = async (safeAddress, chainId, safeTransactionData) => {
75
87
  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)}`));
88
+ const safeService = getSafeService(chainId);
89
+ const gasEstimations = await Promise.
90
+ all(safeTransactionData.
91
+ map((transaction) => safeService.estimateSafeTransaction(safeAddress, {
92
+ "data": transaction.data,
93
+ "operation": transaction.operation || safe_core_sdk_types_1.OperationType.Call,
94
+ "to": transaction.to,
95
+ "value": transaction.value
96
+ })));
97
+ for (const estimateResponse of gasEstimations) {
98
+ console.log(chalk_1.default.cyan("Recommend to set gas limit" +
99
+ ` to ${estimateResponse.safeTxGas}`));
85
100
  }
86
101
  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();
102
+ };
103
+ const proposeTransaction = async (safeAddress, chainId, safeTransaction) => {
104
+ const [safeOwner] = await hardhat_1.ethers.getSigners();
105
+ const safeSdk = await protocol_kit_1.default.init({ provider: hardhat_1.network.provider, safeAddress });
106
+ const safeTxHash = await safeSdk.getTransactionHash(safeTransaction);
107
+ const senderSignature = await safeSdk.signHash(safeTxHash);
108
+ const safeService = getSafeService(chainId);
90
109
  await safeService.proposeTransaction({
91
110
  safeAddress,
92
- safeTransactionData: safeTransaction.data,
111
+ "safeTransactionData": safeTransaction.data,
93
112
  safeTxHash,
94
- senderAddress: safeOwner.address,
95
- senderSignature: senderSignature.data
113
+ "senderAddress": safeOwner.address,
114
+ "senderSignature": senderSignature.data
96
115
  });
97
- }
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
116
+ };
117
+ // Public functions
118
+ const createMultiSendTransaction = async (safeAddress, chainId, transactions) => {
119
+ const safeTransactionData = getSafeTransactionData(transactions);
120
+ const safeService = getSafeService(chainId);
121
+ const nonce = await safeService.getNextNonce(safeAddress);
122
+ console.log("Will send tx to Gnosis with nonce", nonce);
123
+ const options = {
124
+ ...defaultOptions,
125
+ ...{
126
+ /*
127
+ * Nonce of the Safe,
128
+ * Transaction cannot be executed until
129
+ * Safe's nonce is not equal to this nonce
130
+ */
131
+ nonce
132
+ }
133
+ };
134
+ const safeSdk = await protocol_kit_1.default.init({
135
+ provider: hardhat_1.network.provider,
136
+ safeAddress
102
137
  });
103
- return ethAdapter;
104
- }
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
138
+ const safeTransaction = await safeSdk.createTransaction({
139
+ options,
140
+ transactions: safeTransactionData
109
141
  });
110
- return safeService;
111
- }
112
- function getSafeTransactionUrl(chainId) {
113
- if (Object.keys(URLS.safe_transaction).includes(chainId.toString())) {
114
- return URLS.safe_transaction[chainId];
115
- }
116
- else {
117
- throw Error(`Can't get safe-transaction url at network with chainId = ${chainId}`);
118
- }
119
- }
142
+ await estimateSafeTransaction(safeAddress, chainId, safeTransactionData);
143
+ await proposeTransaction(safeAddress, chainId, safeTransaction);
144
+ };
145
+ exports.createMultiSendTransaction = createMultiSendTransaction;
146
+ //# sourceMappingURL=gnosis-safe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gnosis-safe.js","sourceRoot":"","sources":["../../src/gnosis-safe.ts"],"names":[],"mappings":"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"}