@skalenetwork/upgrade-tools 3.0.0-verification.0 → 4.0.0-beacon.1

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 (157) 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/contractVerifier.d.ts +25 -0
  11. package/dist/src/contractVerifier.js +71 -0
  12. package/dist/src/contractVerifier.js.map +1 -0
  13. package/dist/src/deploy.d.ts +5 -4
  14. package/dist/src/deploy.js +77 -58
  15. package/dist/src/deploy.js.map +1 -0
  16. package/dist/src/exitCodes.d.ts +8 -0
  17. package/dist/src/exitCodes.js +13 -0
  18. package/dist/src/exitCodes.js.map +1 -0
  19. package/dist/src/gnosis-safe.d.ts +2 -2
  20. package/dist/src/gnosis-safe.js +105 -96
  21. package/dist/src/gnosis-safe.js.map +1 -0
  22. package/dist/src/index.d.ts +2 -1
  23. package/dist/src/index.js +3 -1
  24. package/dist/src/index.js.map +1 -0
  25. package/dist/src/nonceProvider.d.ts +10 -0
  26. package/dist/src/nonceProvider.js +34 -0
  27. package/dist/src/nonceProvider.js.map +1 -0
  28. package/dist/src/proxyUpgrader.d.ts +17 -0
  29. package/dist/src/proxyUpgrader.js +69 -0
  30. package/dist/src/proxyUpgrader.js.map +1 -0
  31. package/dist/src/submitters/auto-submitter.d.ts +22 -5
  32. package/dist/src/submitters/auto-submitter.js +135 -120
  33. package/dist/src/submitters/auto-submitter.js.map +1 -0
  34. package/dist/src/submitters/eoa-submitter.d.ts +3 -2
  35. package/dist/src/submitters/eoa-submitter.js +23 -12
  36. package/dist/src/submitters/eoa-submitter.js.map +1 -0
  37. package/dist/src/submitters/index.js +1 -0
  38. package/dist/src/submitters/index.js.map +1 -0
  39. package/dist/src/submitters/safe-ima-legacy-marionette-submitter.d.ts +4 -3
  40. package/dist/src/submitters/safe-ima-legacy-marionette-submitter.js +14 -13
  41. package/dist/src/submitters/safe-ima-legacy-marionette-submitter.js.map +1 -0
  42. package/dist/src/submitters/safe-ima-marionette-submitter.d.ts +3 -3
  43. package/dist/src/submitters/safe-ima-marionette-submitter.js +13 -11
  44. package/dist/src/submitters/safe-ima-marionette-submitter.js.map +1 -0
  45. package/dist/src/submitters/safe-submitter.d.ts +4 -4
  46. package/dist/src/submitters/safe-submitter.js +4 -3
  47. package/dist/src/submitters/safe-submitter.js.map +1 -0
  48. package/dist/src/submitters/safe-to-ima-submitter.d.ts +11 -6
  49. package/dist/src/submitters/safe-to-ima-submitter.js +23 -15
  50. package/dist/src/submitters/safe-to-ima-submitter.js.map +1 -0
  51. package/dist/src/submitters/submitter.d.ts +3 -3
  52. package/dist/src/submitters/submitter.js +11 -7
  53. package/dist/src/submitters/submitter.js.map +1 -0
  54. package/dist/src/submitters/types/marionette.d.ts +6 -3
  55. package/dist/src/submitters/types/marionette.js +1 -0
  56. package/dist/src/submitters/types/marionette.js.map +1 -0
  57. package/dist/src/types/SkaleManifestData.js +1 -0
  58. package/dist/src/types/SkaleManifestData.js.map +1 -0
  59. package/dist/src/types/upgrader.d.ts +12 -0
  60. package/dist/{typechain-types/AccessControlUpgradeable.js → src/types/upgrader.js} +1 -0
  61. package/dist/src/types/upgrader.js.map +1 -0
  62. package/dist/src/upgrader.d.ts +33 -12
  63. package/dist/src/upgrader.js +123 -97
  64. package/dist/src/upgrader.js.map +1 -0
  65. package/dist/src/upgraders/abstractTransparentProxyUpgrader.d.ts +10 -0
  66. package/dist/src/upgraders/abstractTransparentProxyUpgrader.js +57 -0
  67. package/dist/src/upgraders/abstractTransparentProxyUpgrader.js.map +1 -0
  68. package/dist/src/upgraders/beaconUpgrader.d.ts +7 -0
  69. package/dist/src/upgraders/beaconUpgrader.js +31 -0
  70. package/dist/src/upgraders/beaconUpgrader.js.map +1 -0
  71. package/dist/src/upgraders/transparentProxyUpgrader.d.ts +5 -0
  72. package/dist/src/upgraders/transparentProxyUpgrader.js +20 -0
  73. package/dist/src/upgraders/transparentProxyUpgrader.js.map +1 -0
  74. package/dist/src/upgraders/v4TransparentProxyUpgrader.d.ts +5 -0
  75. package/dist/src/upgraders/v4TransparentProxyUpgrader.js +19 -0
  76. package/dist/src/upgraders/v4TransparentProxyUpgrader.js.map +1 -0
  77. package/dist/src/verification.d.ts +3 -2
  78. package/dist/src/verification.js +70 -28
  79. package/dist/src/verification.js.map +1 -0
  80. package/dist/src/verifiers/blockscoutVerifier.d.ts +11 -0
  81. package/dist/src/verifiers/blockscoutVerifier.js +65 -0
  82. package/dist/src/verifiers/blockscoutVerifier.js.map +1 -0
  83. package/dist/src/verifiers/etherscanVerifier.d.ts +19 -0
  84. package/dist/src/verifiers/etherscanVerifier.js +105 -0
  85. package/dist/src/verifiers/etherscanVerifier.js.map +1 -0
  86. package/dist/src/verifiers/skaleBlockscoutVerifier.d.ts +7 -0
  87. package/dist/src/verifiers/skaleBlockscoutVerifier.js +60 -0
  88. package/dist/src/verifiers/skaleBlockscoutVerifier.js.map +1 -0
  89. package/dist/src/version.js +24 -2
  90. package/dist/src/version.js.map +1 -0
  91. package/dist/typechain-types/AdminUpgradeabilityProxy.d.ts +59 -54
  92. package/dist/typechain-types/AdminUpgradeabilityProxy.js +1 -0
  93. package/dist/typechain-types/AdminUpgradeabilityProxy.js.map +1 -0
  94. package/dist/typechain-types/ProxyAdmin.d.ts +94 -137
  95. package/dist/typechain-types/ProxyAdmin.js +1 -0
  96. package/dist/typechain-types/ProxyAdmin.js.map +1 -0
  97. package/dist/typechain-types/common.d.ts +40 -11
  98. package/dist/typechain-types/common.js +1 -0
  99. package/dist/typechain-types/common.js.map +1 -0
  100. package/dist/typechain-types/factories/AdminUpgradeabilityProxy__factory.d.ts +71 -41
  101. package/dist/typechain-types/factories/AdminUpgradeabilityProxy__factory.js +8 -11
  102. package/dist/typechain-types/factories/AdminUpgradeabilityProxy__factory.js.map +1 -0
  103. package/dist/typechain-types/factories/ProxyAdmin__factory.d.ts +129 -41
  104. package/dist/typechain-types/factories/ProxyAdmin__factory.js +8 -11
  105. package/dist/typechain-types/factories/ProxyAdmin__factory.js.map +1 -0
  106. package/dist/typechain-types/factories/index.d.ts +2 -0
  107. package/dist/typechain-types/factories/index.js +11 -0
  108. package/dist/typechain-types/factories/index.js.map +1 -0
  109. package/dist/typechain-types/index.d.ts +1 -22
  110. package/dist/typechain-types/index.js +36 -23
  111. package/dist/typechain-types/index.js.map +1 -0
  112. package/package.json +23 -27
  113. package/dist/src/multiSend.d.ts +0 -2
  114. package/dist/src/multiSend.js +0 -46
  115. package/dist/typechain-types/AccessControlEnumerableUpgradeable.d.ts +0 -183
  116. package/dist/typechain-types/AccessControlEnumerableUpgradeable.js +0 -2
  117. package/dist/typechain-types/AccessControlUpgradeable.d.ts +0 -167
  118. package/dist/typechain-types/ContextUpgradeable.d.ts +0 -40
  119. package/dist/typechain-types/ContextUpgradeable.js +0 -2
  120. package/dist/typechain-types/ERC165Upgradeable.d.ts +0 -53
  121. package/dist/typechain-types/ERC165Upgradeable.js +0 -2
  122. package/dist/typechain-types/IAccessControlEnumerableUpgradeable.d.ts +0 -159
  123. package/dist/typechain-types/IAccessControlEnumerableUpgradeable.js +0 -2
  124. package/dist/typechain-types/IAccessControlUpgradeable.d.ts +0 -143
  125. package/dist/typechain-types/IAccessControlUpgradeable.js +0 -2
  126. package/dist/typechain-types/IERC165Upgradeable.d.ts +0 -43
  127. package/dist/typechain-types/IERC165Upgradeable.js +0 -2
  128. package/dist/typechain-types/ISafeMock.d.ts +0 -86
  129. package/dist/typechain-types/ISafeMock.js +0 -2
  130. package/dist/typechain-types/Initializable.d.ts +0 -40
  131. package/dist/typechain-types/Initializable.js +0 -2
  132. package/dist/typechain-types/OwnableUpgradeable.d.ts +0 -97
  133. package/dist/typechain-types/OwnableUpgradeable.js +0 -2
  134. package/dist/typechain-types/SafeMock.d.ts +0 -172
  135. package/dist/typechain-types/SafeMock.js +0 -2
  136. package/dist/typechain-types/factories/AccessControlEnumerableUpgradeable__factory.d.ts +0 -35
  137. package/dist/typechain-types/factories/AccessControlEnumerableUpgradeable__factory.js +0 -279
  138. package/dist/typechain-types/factories/AccessControlUpgradeable__factory.d.ts +0 -35
  139. package/dist/typechain-types/factories/AccessControlUpgradeable__factory.js +0 -236
  140. package/dist/typechain-types/factories/ContextUpgradeable__factory.d.ts +0 -18
  141. package/dist/typechain-types/factories/ContextUpgradeable__factory.js +0 -32
  142. package/dist/typechain-types/factories/ERC165Upgradeable__factory.d.ts +0 -35
  143. package/dist/typechain-types/factories/ERC165Upgradeable__factory.js +0 -51
  144. package/dist/typechain-types/factories/IAccessControlEnumerableUpgradeable__factory.d.ts +0 -35
  145. package/dist/typechain-types/factories/IAccessControlEnumerableUpgradeable__factory.js +0 -234
  146. package/dist/typechain-types/factories/IAccessControlUpgradeable__factory.d.ts +0 -35
  147. package/dist/typechain-types/factories/IAccessControlUpgradeable__factory.js +0 -191
  148. package/dist/typechain-types/factories/IERC165Upgradeable__factory.d.ts +0 -22
  149. package/dist/typechain-types/factories/IERC165Upgradeable__factory.js +0 -38
  150. package/dist/typechain-types/factories/ISafeMock__factory.d.ts +0 -22
  151. package/dist/typechain-types/factories/ISafeMock__factory.js +0 -114
  152. package/dist/typechain-types/factories/Initializable__factory.d.ts +0 -18
  153. package/dist/typechain-types/factories/Initializable__factory.js +0 -32
  154. package/dist/typechain-types/factories/OwnableUpgradeable__factory.d.ts +0 -42
  155. package/dist/typechain-types/factories/OwnableUpgradeable__factory.js +0 -84
  156. package/dist/typechain-types/factories/SafeMock__factory.d.ts +0 -56
  157. package/dist/typechain-types/factories/SafeMock__factory.js +0 -247
@@ -1,5 +1,5 @@
1
- import { UnsignedTransaction } from "ethers";
1
+ import { Transaction } from "ethers";
2
2
  export declare abstract class Submitter {
3
- abstract submit(transactions: UnsignedTransaction[]): Promise<void>;
4
- _atomicityWarning(): void;
3
+ abstract submit(transactions: Transaction[]): Promise<void>;
4
+ protected static atomicityWarning(): void;
5
5
  }
@@ -4,18 +4,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Submitter = void 0;
7
+ const exitCodes_1 = require("../exitCodes");
7
8
  const chalk_1 = __importDefault(require("chalk"));
8
9
  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);
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"));
15
14
  }
16
15
  else {
17
- console.log(chalk_1.default.yellow("Not atomic upgrade is performing"));
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);
18
21
  }
19
22
  }
20
23
  }
21
24
  exports.Submitter = Submitter;
25
+ //# sourceMappingURL=submitter.js.map
@@ -0,0 +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,12 +1,15 @@
1
- import { BigNumberish, BytesLike } from "ethers";
2
- import { ethers as RawEthers } from "ethers";
1
+ import { BigNumberish, BytesLike, ethers as RawEthers } from "ethers";
3
2
  export declare const MARIONETTE_ADDRESS = "0xD2c0DeFACe000000000000000000000000000000";
4
3
  type FunctionCallStruct = {
5
4
  receiver: string;
6
5
  value: BigNumberish;
7
6
  data: BytesLike;
8
7
  };
9
- export interface Marionette extends RawEthers.Contract {
8
+ export interface LegacyMarionette extends RawEthers.BaseContract {
9
+ encodeFunctionCall(receiver: string, value: BigNumberish, data: BytesLike): Promise<BytesLike>;
10
+ version(): Promise<string>;
11
+ }
12
+ export interface Marionette extends RawEthers.BaseContract {
10
13
  encodeFunctionCalls(functionCalls: FunctionCallStruct[]): Promise<BytesLike>;
11
14
  version(): Promise<string>;
12
15
  }
@@ -2,3 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MARIONETTE_ADDRESS = void 0;
4
4
  exports.MARIONETTE_ADDRESS = "0xD2c0DeFACe000000000000000000000000000000";
5
+ //# sourceMappingURL=marionette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marionette.js","sourceRoot":"","sources":["../../../../src/submitters/types/marionette.ts"],"names":[],"mappings":";;;AAGa,QAAA,kBAAkB,GAAG,4CAA4C,CAAC"}
@@ -1,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=SkaleManifestData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkaleManifestData.js","sourceRoot":"","sources":["../../../src/types/SkaleManifestData.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { Instance } from "@skalenetwork/skale-contracts-ethers-v6";
2
+ export interface ContractToUpgrade {
3
+ proxyAddress: string;
4
+ implementationAddress: string;
5
+ name: string;
6
+ }
7
+ export interface Project {
8
+ name: string;
9
+ instance: Instance;
10
+ version: string;
11
+ contractNamesToUpgrade: string[];
12
+ }
@@ -1,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=upgrader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrader.js","sourceRoot":"","sources":["../../../src/types/upgrader.ts"],"names":[],"mappings":""}
@@ -1,18 +1,39 @@
1
- import { UnsignedTransaction } from "ethers";
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";
2
5
  import { Submitter } from "./submitters/submitter";
3
- import { Instance } from "@skalenetwork/skale-contracts-ethers-v5";
6
+ import { Transaction } from "ethers";
7
+ export declare const deployTimeout = 600000;
4
8
  export declare abstract class Upgrader {
5
- instance: Instance;
6
- targetVersion: string;
7
- contractNamesToUpgrade: string[];
8
- projectName: string;
9
- transactions: UnsignedTransaction[];
10
- submitter: Submitter;
11
- constructor(projectName: string, targetVersion: string, instance: Instance, contractNamesToUpgrade: string[], submitter?: Submitter);
9
+ private targetVersion;
10
+ private contractNamesToUpgrade;
11
+ private projectName;
12
+ private submitter;
13
+ private deploySemaphore;
14
+ private proxyUpgraders;
15
+ protected nonceProvider?: NonceProvider;
16
+ protected instance: Instance;
17
+ protected transactions: Transaction[];
18
+ constructor(project: Project, submitter?: Submitter);
12
19
  abstract getDeployedVersion: () => Promise<string | undefined>;
13
20
  abstract setVersion: (newVersion: string) => Promise<void>;
14
- deployNewContracts: () => Promise<void>;
15
- initialize: () => Promise<void>;
21
+ deployNewContracts?: () => Promise<void>;
22
+ initialize?: () => Promise<void>;
23
+ protected createProxyUpgrader(contractName: string): Promise<ProxyUpgrader>;
16
24
  upgrade(): Promise<void>;
17
- _getContractFactoryAndUpdateManifest(contract: string): Promise<import("ethers").ContractFactory>;
25
+ getOwner(): Promise<string>;
26
+ private upgradeOldContracts;
27
+ private getChangedContracts;
28
+ private createProxyUpgraders;
29
+ private callInitialize;
30
+ private callDeployNewContracts;
31
+ private prepareVersion;
32
+ private writeTransactions;
33
+ private verify;
34
+ private switchToNewImplementations;
35
+ private deployNewImplementations;
36
+ private protectedDeployNewImplementation;
37
+ private getNormalizedDeployedVersion;
38
+ private checkVersion;
18
39
  }
@@ -3,127 +3,153 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Upgrader = void 0;
7
- const hardhat_1 = __importDefault(require("hardhat"));
6
+ exports.Upgrader = exports.deployTimeout = void 0;
7
+ const hardhat_1 = require("hardhat");
8
+ const abstractTransparentProxyUpgrader_1 = require("./upgraders/abstractTransparentProxyUpgrader");
9
+ const auto_submitter_1 = require("./submitters/auto-submitter");
10
+ const exitCodes_1 = require("./exitCodes");
11
+ const nonceProvider_1 = require("./nonceProvider");
12
+ const semaphore_async_await_1 = __importDefault(require("semaphore-async-await"));
8
13
  const chalk_1 = __importDefault(require("chalk"));
9
- const hardhat_2 = require("hardhat");
10
- const admin_1 = require("@openzeppelin/hardhat-upgrades/dist/admin");
11
- const version_1 = require("./version");
12
14
  const fs_1 = require("fs");
13
- const deploy_1 = require("./deploy");
14
- const upgrades_core_1 = require("@openzeppelin/upgrades-core");
15
+ const version_1 = require("./version");
15
16
  const verification_1 = require("./verification");
16
- const auto_submitter_1 = require("./submitters/auto-submitter");
17
+ const withoutNull = (array) => array.
18
+ filter((element) => element !== null);
19
+ // TODO: Set to 8 when upgrade plugins become thread safe
20
+ const maxSimultaneousDeployments = 1;
21
+ // 10 minutes
22
+ exports.deployTimeout = 60e4;
17
23
  class Upgrader {
18
- constructor(projectName, targetVersion, instance, contractNamesToUpgrade, submitter = new auto_submitter_1.AutoSubmitter()) {
19
- // protected
20
- this.deployNewContracts = () => { return Promise.resolve(); };
21
- this.initialize = () => { return Promise.resolve(); };
22
- this.targetVersion = targetVersion;
23
- if (!targetVersion.includes('-')) {
24
- this.targetVersion = targetVersion + '-stable.0';
24
+ constructor(project, submitter) {
25
+ this.proxyUpgraders = [];
26
+ this.targetVersion = project.version;
27
+ if (!project.version.includes("-")) {
28
+ this.targetVersion = `${project.version}-stable.0`;
25
29
  }
26
- this.instance = instance;
27
- this.contractNamesToUpgrade = contractNamesToUpgrade;
28
- this.projectName = projectName;
30
+ this.instance = project.instance;
31
+ this.contractNamesToUpgrade = project.contractNamesToUpgrade;
32
+ this.projectName = project.name;
29
33
  this.transactions = [];
30
- this.submitter = submitter;
34
+ this.submitter = submitter ?? new auto_submitter_1.AutoSubmitter(this);
35
+ this.deploySemaphore = new semaphore_async_await_1.default(maxSimultaneousDeployments);
36
+ }
37
+ async createProxyUpgrader(contractName) {
38
+ const proxyAddress = await this.instance.getContractAddress(contractName);
39
+ const proxyUpgrader = await abstractTransparentProxyUpgrader_1.AbstractTransparentProxyUpgrader.create(contractName, proxyAddress, this.nonceProvider);
40
+ return proxyUpgrader;
31
41
  }
32
- // public
42
+ // Public
33
43
  async upgrade() {
34
- const proxyAdmin = await (0, admin_1.getManifestAdmin)(hardhat_1.default);
35
- let deployedVersion = await this.getDeployedVersion();
36
- const version = await (0, version_1.getVersion)();
37
- if (deployedVersion) {
38
- if (!deployedVersion.includes('-')) {
39
- deployedVersion = deployedVersion + '-stable.0';
40
- }
41
- if (deployedVersion !== this.targetVersion) {
42
- console.log(chalk_1.default.red(`This script can't upgrade version ${deployedVersion} to ${version}`));
43
- process.exit(1);
44
+ const version = await this.prepareVersion();
45
+ await this.callDeployNewContracts();
46
+ await this.upgradeOldContracts();
47
+ await this.callInitialize();
48
+ // Write version
49
+ await this.setVersion(version);
50
+ await this.writeTransactions(version);
51
+ await this.submitter.submit(this.transactions);
52
+ await this.verify();
53
+ console.log("Done");
54
+ }
55
+ async getOwner() {
56
+ const owners = await Promise.all(this.proxyUpgraders.map((upgrader) => upgrader.getOwner()));
57
+ return owners.reduce((owner1, owner2) => {
58
+ if (owner1 !== owner2) {
59
+ throw Error("Proxies have different owners");
44
60
  }
61
+ return owner1;
62
+ });
63
+ }
64
+ async upgradeOldContracts() {
65
+ await this.createProxyUpgraders();
66
+ await this.deployNewImplementations();
67
+ await this.switchToNewImplementations();
68
+ }
69
+ // Private
70
+ getChangedContracts() {
71
+ return this.proxyUpgraders.filter((upgrader) => upgrader.needsUpgrade());
72
+ }
73
+ async createProxyUpgraders() {
74
+ this.proxyUpgraders = await Promise.all(this.contractNamesToUpgrade.map(this.createProxyUpgrader, this));
75
+ }
76
+ async callInitialize() {
77
+ if (typeof this.initialize !== "undefined") {
78
+ await this.initialize();
45
79
  }
46
- else {
47
- console.log(chalk_1.default.yellow(`Can't check currently deployed version of ${this.projectName}`));
80
+ }
81
+ async callDeployNewContracts() {
82
+ if (typeof this.deployNewContracts !== "undefined") {
83
+ // Deploy new contracts
84
+ await this.deployNewContracts();
48
85
  }
86
+ }
87
+ async prepareVersion() {
88
+ const version = await (0, version_1.getVersion)();
89
+ await this.checkVersion(version);
49
90
  console.log(`Will mark updated version as ${version}`);
50
- // Deploy new contracts
51
- await this.deployNewContracts();
52
- // Deploy new implementations
53
- const contractsToUpgrade = [];
54
- for (const contract of this.contractNamesToUpgrade) {
55
- const contractFactory = await this._getContractFactoryAndUpdateManifest(contract), proxyAddress = (await this.instance.getContract(contract)).address;
56
- console.log(`Prepare upgrade of ${contract}`);
57
- const currentImplementationAddress = await (0, upgrades_core_1.getImplementationAddress)(hardhat_2.network.provider, proxyAddress), newImplementationAddress = await hardhat_2.upgrades.prepareUpgrade(proxyAddress, contractFactory, {
58
- unsafeAllowLinkedLibraries: true,
59
- unsafeAllowRenames: true
60
- });
61
- if (newImplementationAddress !== currentImplementationAddress) {
62
- contractsToUpgrade.push({
63
- proxyAddress,
64
- implementationAddress: newImplementationAddress,
65
- name: contract
66
- });
67
- }
68
- else {
69
- console.log(chalk_1.default.gray(`Contract ${contract} is up to date`));
70
- }
71
- }
72
- // Switch proxies to new implementations
73
- for (const contract of contractsToUpgrade) {
74
- console.log(chalk_1.default.yellowBright(`Prepare transaction to upgrade ${contract.name} at ${contract.proxyAddress} to ${contract.implementationAddress}`));
75
- this.transactions.push({
76
- to: proxyAdmin.address,
77
- data: proxyAdmin.interface.encodeFunctionData("upgrade", [contract.proxyAddress, contract.implementationAddress])
78
- });
79
- }
80
- await this.initialize();
81
- // write version
82
- await this.setVersion(version);
83
- await fs_1.promises.writeFile(`data/transactions-${version}-${hardhat_2.network.name}.json`, JSON.stringify(this.transactions, null, 4));
84
- await this.submitter.submit(this.transactions);
91
+ return version;
92
+ }
93
+ async writeTransactions(version) {
94
+ const indentation = 4;
95
+ await fs_1.promises.writeFile(`data/transactions-${version}-${hardhat_1.network.name}.json`, JSON.stringify(this.transactions, null, indentation));
96
+ }
97
+ async verify() {
85
98
  if (process.env.NO_VERIFY) {
86
99
  console.log("Skip verification");
87
100
  }
88
101
  else {
89
102
  console.log("Start verification");
90
- for (const contract of contractsToUpgrade) {
91
- await (0, verification_1.verify)(contract.name, contract.implementationAddress, []);
92
- }
103
+ await Promise.all(this.getChangedContracts().map((upgrader) => (0, verification_1.verify)(upgrader.getContractName(), upgrader.getNewImplementationAddress())));
93
104
  }
94
- console.log("Done");
95
105
  }
96
- // private
97
- async _getContractFactoryAndUpdateManifest(contract) {
98
- const { linkReferences } = await hardhat_2.artifacts.readArtifact(contract), manifest = JSON.parse(await fs_1.promises.readFile(await (0, deploy_1.getManifestFile)(), "utf-8"));
99
- if (!Object.keys(linkReferences).length)
100
- return await hardhat_2.ethers.getContractFactory(contract);
101
- const librariesToUpgrade = [], oldLibraries = {};
102
- if (manifest.libraries === undefined) {
103
- Object.assign(manifest, { libraries: {} });
106
+ async switchToNewImplementations() {
107
+ this.transactions = [
108
+ ...this.transactions,
109
+ ...await Promise.all(this.proxyUpgraders.map((upgrader) => upgrader.getUpgradeTransaction()))
110
+ ];
111
+ }
112
+ async deployNewImplementations() {
113
+ const [deployer] = await hardhat_1.ethers.getSigners();
114
+ this.nonceProvider ?? (this.nonceProvider = await nonceProvider_1.NonceProvider.createForWallet(deployer));
115
+ const contracts = await Promise.all(this.proxyUpgraders.
116
+ map((upgrader) => this.protectedDeployNewImplementation(upgrader), this));
117
+ return withoutNull(contracts);
118
+ }
119
+ async protectedDeployNewImplementation(upgrader) {
120
+ await this.deploySemaphore.acquire();
121
+ try {
122
+ await upgrader.deployNewImplementation();
104
123
  }
105
- for (const key of Object.keys(linkReferences)) {
106
- const libraryName = Object.keys(linkReferences[key])[0], { bytecode } = await hardhat_2.artifacts.readArtifact(libraryName);
107
- if (manifest.libraries[libraryName] === undefined) {
108
- librariesToUpgrade.push(libraryName);
109
- continue;
110
- }
111
- const libraryBytecodeHash = manifest.libraries[libraryName].bytecodeHash;
112
- if ((0, upgrades_core_1.hashBytecode)(bytecode) !== libraryBytecodeHash) {
113
- librariesToUpgrade.push(libraryName);
124
+ finally {
125
+ this.deploySemaphore.release();
126
+ }
127
+ }
128
+ async getNormalizedDeployedVersion() {
129
+ const deployedVersion = await this.getDeployedVersion();
130
+ if (deployedVersion) {
131
+ if (!deployedVersion.includes("-")) {
132
+ return `${deployedVersion}-stable.0`;
114
133
  }
115
- else {
116
- oldLibraries[libraryName] = manifest.libraries[libraryName].address;
134
+ return deployedVersion;
135
+ }
136
+ return deployedVersion;
137
+ }
138
+ async checkVersion(version) {
139
+ const deployedVersion = await this.getNormalizedDeployedVersion();
140
+ if (deployedVersion) {
141
+ if (deployedVersion !== this.targetVersion) {
142
+ const cannotUpgradeMessage = `This script can't upgrade version ${deployedVersion}` +
143
+ ` to ${version}`;
144
+ console.log(chalk_1.default.red(cannotUpgradeMessage));
145
+ process.exit(exitCodes_1.EXIT_CODES.BAD_VERSION);
117
146
  }
118
147
  }
119
- const libraries = await (0, deploy_1.deployLibraries)(librariesToUpgrade);
120
- for (const [libraryName, libraryAddress] of libraries.entries()) {
121
- const { bytecode } = await hardhat_2.artifacts.readArtifact(libraryName);
122
- manifest.libraries[libraryName] = { "address": libraryAddress, "bytecodeHash": (0, upgrades_core_1.hashBytecode)(bytecode) };
148
+ else {
149
+ const cannotCheckMessage = `Can't check currently deployed version of ${this.projectName}`;
150
+ console.log(chalk_1.default.yellow(cannotCheckMessage));
123
151
  }
124
- Object.assign(libraries, oldLibraries);
125
- await fs_1.promises.writeFile(await (0, deploy_1.getManifestFile)(), JSON.stringify(manifest, null, 4));
126
- return await (0, deploy_1.getLinkedContractFactory)(contract, libraries);
127
152
  }
128
153
  }
129
154
  exports.Upgrader = Upgrader;
155
+ //# sourceMappingURL=upgrader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrader.js","sourceRoot":"","sources":["../../src/upgrader.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAwC;AACxC,mGAA8F;AAC9F,gEAA0D;AAC1D,2CAAuC;AAEvC,mDAA8C;AAG9C,kFAA8C;AAG9C,kDAA0B;AAC1B,2BAAkC;AAClC,uCAAqC;AACrC,iDAAsC;AAGtC,MAAM,WAAW,GAAG,CAAI,KAAsB,EAAE,EAAE,CAAC,KAAK;IACpD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAa,CAAC;AAEtD,yDAAyD;AACzD,MAAM,0BAA0B,GAAG,CAAC,CAAC;AACrC,gCAAgC;AACnB,QAAA,aAAa,GAAG,IAAI,CAAC;AAGlC,MAAsB,QAAQ;IAY1B,YACI,OAAgB,EAChB,SAAqB;QARjB,mBAAc,GAAoB,EAAE,CAAC;QAUzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,GAAG,OAAO,CAAC,OAAO,WAAW,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,8BAAa,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAS,CAAC,0BAA0B,CAAC,CAAC;IACrE,CAAC;IAcS,KAAK,CAAC,mBAAmB,CAAC,YAAoB;QACpD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAC1E,MAAM,aAAa,GAAG,MAAM,mEAAgC,CAAC,MAAM,CAC/D,YAAY,EACZ,YAAY,EACZ,IAAI,CAAC,aAAa,CACrB,CAAC;QACF,OAAO,aAA8B,CAAC;IAC1C,CAAC;IAED,SAAS;IAET,KAAK,CAAC,OAAO;QACT,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACpC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,gBAAgB;QAChB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5B,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CACpC,CACJ,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC7B,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAC5C,CAAC;IAED,UAAU;IAEF,mBAAmB;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAC7B,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,CACxC,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAC9B,IAAI,CAAC,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAC3B,IAAI,CAAC,mBAAmB,EACxB,IAAI,CACP,CACJ,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,cAAc;QACxB,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAChC,IAAI,OAAO,IAAI,CAAC,kBAAkB,KAAK,WAAW,EAAE,CAAC;YACjD,uBAAuB;YACvB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACpC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,cAAc;QACxB,MAAM,OAAO,GAAG,MAAM,IAAA,oBAAU,GAAE,CAAC;QACnC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACvD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAE,OAAe;QAC5C,MAAM,WAAW,GAAG,CAAC,CAAC;QACtB,MAAM,aAAE,CAAC,SAAS,CACd,qBAAqB,OAAO,IAAI,iBAAO,CAAC,IAAI,OAAO,EACnD,IAAI,CAAC,SAAS,CACV,IAAI,CAAC,YAAY,EACjB,IAAI,EACJ,WAAW,CACd,CACJ,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,MAAM;QAChB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,MAAM,OAAO,CAAC,GAAG,CACb,IAAI,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAC1B,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAA,qBAAM,EAChB,QAAQ,CAAC,eAAe,EAAE,EAC1B,QAAQ,CAAC,2BAA2B,EAAE,CACzC,CACJ,CACJ,CAAC;QACN,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,0BAA0B;QACpC,IAAI,CAAC,YAAY,GAAG;YAChB,GAAG,IAAI,CAAC,YAAY;YACpB,GAAG,MAAM,OAAO,CAAC,GAAG,CAChB,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CACjD,CACJ;SACJ,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,wBAAwB;QAClC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,gBAAM,CAAC,UAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,aAAa,KAAlB,IAAI,CAAC,aAAa,GAAK,MAAM,6BAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAC;QACrE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc;YACnD,GAAG,CACC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,EAC7D,IAAI,CACP,CAAC,CAAC;QACP,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,gCAAgC,CAAE,QAAuB;QACnE,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC;YACD,MAAM,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QAC7C,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QACnC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,4BAA4B;QACtC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxD,IAAI,eAAe,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO,GAAG,eAAe,WAAW,CAAC;YACzC,CAAC;YACD,OAAO,eAAe,CAAC;QAC3B,CAAC;QACD,OAAO,eAAe,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,YAAY,CAAE,OAAe;QACvC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAClE,IAAI,eAAe,EAAE,CAAC;YAClB,IAAI,eAAe,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzC,MAAM,oBAAoB,GACtB,qCAAqC,eAAe,EAAE;oBACtD,OAAO,OAAO,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,kBAAkB,GACpB,6CAA6C,IAAI,CAAC,WAAW,EAAE,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;CACJ;AAhND,4BAgNC"}
@@ -0,0 +1,10 @@
1
+ import { AddressLike, Contract } from "ethers";
2
+ import { NonceProvider } from "../nonceProvider";
3
+ import { ProxyUpgrader } from "../proxyUpgrader";
4
+ export declare abstract class AbstractTransparentProxyUpgrader extends ProxyUpgrader {
5
+ protected proxyAdmin: Contract | null;
6
+ static create(contractName: string, proxyAddress: AddressLike, nonceProvider?: NonceProvider): Promise<AbstractTransparentProxyUpgrader>;
7
+ getOwner(): Promise<string>;
8
+ private static getProxyAdmin;
9
+ private static isNewProxyAdmin;
10
+ }
@@ -0,0 +1,57 @@
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.AbstractTransparentProxyUpgrader = void 0;
7
+ const hardhat_1 = require("hardhat");
8
+ const proxyUpgrader_1 = require("../proxyUpgrader");
9
+ const transparentProxyUpgrader_1 = require("./transparentProxyUpgrader");
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ class AbstractTransparentProxyUpgrader extends proxyUpgrader_1.ProxyUpgrader {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.proxyAdmin = null;
15
+ }
16
+ static async create(contractName, proxyAddress, nonceProvider) {
17
+ const proxyAdmin = await this.getProxyAdmin(proxyAddress);
18
+ let upgrader = null;
19
+ if (await this.isNewProxyAdmin(proxyAdmin)) {
20
+ upgrader = new transparentProxyUpgrader_1.TransparentProxyUpgrader(contractName, proxyAddress, nonceProvider);
21
+ }
22
+ else {
23
+ upgrader = new transparentProxyUpgrader_1.TransparentProxyUpgrader(contractName, proxyAddress, nonceProvider);
24
+ }
25
+ upgrader.proxyAdmin = proxyAdmin;
26
+ return upgrader;
27
+ }
28
+ async getOwner() {
29
+ return await this.proxyAdmin.owner();
30
+ }
31
+ // Private
32
+ static async getProxyAdmin(proxy) {
33
+ const proxyAdminAddress = await hardhat_1.upgrades.erc1967.getAdminAddress(await hardhat_1.ethers.resolveAddress(proxy));
34
+ const generalProxyAdminAbi = [
35
+ "function UPGRADE_INTERFACE_VERSION() view returns (string)",
36
+ "function upgrade(address,address)",
37
+ "function upgradeAndCall(address,address,bytes) payable",
38
+ "function owner() view returns (address)"
39
+ ];
40
+ return new hardhat_1.ethers.Contract(proxyAdminAddress, generalProxyAdminAbi, await hardhat_1.ethers.provider.getSigner());
41
+ }
42
+ static async isNewProxyAdmin(proxyAdmin) {
43
+ try {
44
+ console.log(chalk_1.default.gray(`ProxyAdmin version ${
45
+ // This function name is set in external library
46
+ // eslint-disable-next-line new-cap
47
+ await proxyAdmin.UPGRADE_INTERFACE_VERSION()}`));
48
+ return true;
49
+ }
50
+ catch (error) {
51
+ console.log(chalk_1.default.gray("Use old ProxyAdmin"));
52
+ return false;
53
+ }
54
+ }
55
+ }
56
+ exports.AbstractTransparentProxyUpgrader = AbstractTransparentProxyUpgrader;
57
+ //# sourceMappingURL=abstractTransparentProxyUpgrader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstractTransparentProxyUpgrader.js","sourceRoot":"","sources":["../../../src/upgraders/abstractTransparentProxyUpgrader.ts"],"names":[],"mappings":";;;;;;AACA,qCAAyC;AAEzC,oDAA+C;AAC/C,yEAAoE;AACpE,kDAA0B;AAG1B,MAAsB,gCAAiC,SAAQ,6BAAa;IAA5E;;QACc,eAAU,GAAoB,IAAI,CAAC;IA8DjD,CAAC;IA5DU,MAAM,CAAC,KAAK,CAAC,MAAM,CACtB,YAAoB,EACpB,YAAyB,EACzB,aAA6B;QAE7B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,QAAQ,GAA4C,IAAI,CAAC;QAC7D,IAAI,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;YACzC,QAAQ,GAAG,IAAI,mDAAwB,CACnC,YAAY,EACZ,YAAY,EACZ,aAAa,CAChB,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,QAAQ,GAAG,IAAI,mDAAwB,CACnC,YAAY,EACZ,YAAY,EACZ,aAAa,CAChB,CAAC;QACN,CAAC;QACD,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;QACjC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,QAAQ;QACjB,OAAO,MAAM,IAAI,CAAC,UAAW,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAED,UAAU;IAEF,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAkB;QACjD,MAAM,iBAAiB,GAAG,MAAM,kBAAQ,CAAC,OAAO,CAAC,eAAe,CAC5D,MAAM,gBAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CACrC,CAAC;QACF,MAAM,oBAAoB,GAAG;YACzB,4DAA4D;YAC5D,mCAAmC;YACnC,wDAAwD;YACxD,yCAAyC;SAC5C,CAAC;QACF,OAAO,IAAI,gBAAM,CAAC,QAAQ,CACtB,iBAAiB,EACjB,oBAAoB,EACpB,MAAM,gBAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CACpC,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,UAAoB;QACrD,IAAI,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB;YACzC,gDAAgD;YAChD,mCAAmC;YACnC,MAAM,UAAU,CAAC,yBAAyB,EAC9C,EAAE,CAAC,CAAC,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC9C,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ;AA/DD,4EA+DC"}
@@ -0,0 +1,7 @@
1
+ import { ProxyUpgrader } from "../proxyUpgrader";
2
+ import { Transaction } from "ethers";
3
+ export declare class BeaconUpgrader extends ProxyUpgrader {
4
+ getOwner(): Promise<string>;
5
+ protected makeUpgradeTransaction(): Promise<Transaction>;
6
+ private getBeacon;
7
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BeaconUpgrader = void 0;
4
+ const proxyUpgrader_1 = require("../proxyUpgrader");
5
+ const ethers_1 = require("ethers");
6
+ const hardhat_1 = require("hardhat");
7
+ class BeaconUpgrader extends proxyUpgrader_1.ProxyUpgrader {
8
+ async getOwner() {
9
+ const beacon = await this.getBeacon();
10
+ return await beacon.owner();
11
+ }
12
+ async makeUpgradeTransaction() {
13
+ const beacon = await this.getBeacon();
14
+ return ethers_1.Transaction.from({
15
+ "data": beacon.interface.encodeFunctionData("upgradeTo", [
16
+ await hardhat_1.ethers.resolveAddress(this.newImplementationAddress),
17
+ ]),
18
+ "to": await hardhat_1.ethers.resolveAddress(beacon)
19
+ });
20
+ }
21
+ // Private
22
+ async getBeacon() {
23
+ const generalUpgradeableBeaconAbi = [
24
+ "function upgradeTo(address newImplementation)",
25
+ "function owner() returns (address)"
26
+ ];
27
+ return new hardhat_1.ethers.Contract(await hardhat_1.ethers.resolveAddress(this.proxyAddress), generalUpgradeableBeaconAbi, await hardhat_1.ethers.provider.getSigner());
28
+ }
29
+ }
30
+ exports.BeaconUpgrader = BeaconUpgrader;
31
+ //# sourceMappingURL=beaconUpgrader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beaconUpgrader.js","sourceRoot":"","sources":["../../../src/upgraders/beaconUpgrader.ts"],"names":[],"mappings":";;;AAAA,oDAA+C;AAC/C,mCAAmC;AACnC,qCAA+B;AAG/B,MAAa,cAAe,SAAQ,6BAAa;IACtC,KAAK,CAAC,QAAQ;QACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAES,KAAK,CAAC,sBAAsB;QAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,oBAAW,CAAC,IAAI,CAAC;YACpB,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,kBAAkB,CACvC,WAAW,EACX;gBACI,MAAM,gBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,wBAAyB,CAAC;aAC9D,CACJ;YACD,IAAI,EAAE,MAAM,gBAAM,CAAC,cAAc,CAAC,MAAM,CAAC;SAC5C,CAAC,CAAC;IACP,CAAC;IAED,UAAU;IAEF,KAAK,CAAC,SAAS;QACnB,MAAM,2BAA2B,GAAG;YAChC,+CAA+C;YAC/C,oCAAoC;SACvC,CAAC;QACF,OAAO,IAAI,gBAAM,CAAC,QAAQ,CACtB,MAAM,gBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,EAC9C,2BAA2B,EAC3B,MAAM,gBAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CACpC,CAAC;IACN,CAAC;CACJ;AAhCD,wCAgCC"}
@@ -0,0 +1,5 @@
1
+ import { AbstractTransparentProxyUpgrader } from "./abstractTransparentProxyUpgrader";
2
+ import { Transaction } from "ethers";
3
+ export declare class TransparentProxyUpgrader extends AbstractTransparentProxyUpgrader {
4
+ protected makeUpgradeTransaction(): Promise<Transaction>;
5
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransparentProxyUpgrader = void 0;
4
+ const abstractTransparentProxyUpgrader_1 = require("./abstractTransparentProxyUpgrader");
5
+ const ethers_1 = require("ethers");
6
+ const hardhat_1 = require("hardhat");
7
+ class TransparentProxyUpgrader extends abstractTransparentProxyUpgrader_1.AbstractTransparentProxyUpgrader {
8
+ async makeUpgradeTransaction() {
9
+ return ethers_1.Transaction.from({
10
+ "data": this.proxyAdmin.interface.encodeFunctionData("upgradeAndCall", [
11
+ await hardhat_1.ethers.resolveAddress(this.proxyAddress),
12
+ await hardhat_1.ethers.resolveAddress(this.newImplementationAddress),
13
+ "0x"
14
+ ]),
15
+ "to": await hardhat_1.ethers.resolveAddress(this.proxyAdmin)
16
+ });
17
+ }
18
+ }
19
+ exports.TransparentProxyUpgrader = TransparentProxyUpgrader;
20
+ //# sourceMappingURL=transparentProxyUpgrader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transparentProxyUpgrader.js","sourceRoot":"","sources":["../../../src/upgraders/transparentProxyUpgrader.ts"],"names":[],"mappings":";;;AAAA,yFAAoF;AACpF,mCAAmC;AACnC,qCAA+B;AAE/B,MAAa,wBAAyB,SAAQ,mEAAgC;IAChE,KAAK,CAAC,sBAAsB;QAClC,OAAO,oBAAW,CAAC,IAAI,CAAC;YACpB,MAAM,EAAE,IAAI,CAAC,UAAW,CAAC,SAAS,CAAC,kBAAkB,CACjD,gBAAgB,EAChB;gBACI,MAAM,gBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC9C,MAAM,gBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,wBAAyB,CAAC;gBAC3D,IAAI;aACP,CACJ;YACD,IAAI,EAAE,MAAM,gBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,UAAW,CAAC;SACtD,CAAC,CAAC;IACP,CAAC;CACJ;AAdD,4DAcC"}
@@ -0,0 +1,5 @@
1
+ import { AbstractTransparentProxyUpgrader } from "./abstractTransparentProxyUpgrader";
2
+ import { Transaction } from "ethers";
3
+ export declare class V4TransparentProxyUpgrader extends AbstractTransparentProxyUpgrader {
4
+ protected makeUpgradeTransaction(): Promise<Transaction>;
5
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.V4TransparentProxyUpgrader = void 0;
4
+ const abstractTransparentProxyUpgrader_1 = require("./abstractTransparentProxyUpgrader");
5
+ const ethers_1 = require("ethers");
6
+ const hardhat_1 = require("hardhat");
7
+ class V4TransparentProxyUpgrader extends abstractTransparentProxyUpgrader_1.AbstractTransparentProxyUpgrader {
8
+ async makeUpgradeTransaction() {
9
+ return ethers_1.Transaction.from({
10
+ "data": this.proxyAdmin.interface.encodeFunctionData("upgrade", [
11
+ await hardhat_1.ethers.resolveAddress(this.proxyAddress),
12
+ await hardhat_1.ethers.resolveAddress(this.newImplementationAddress),
13
+ ]),
14
+ "to": await hardhat_1.ethers.resolveAddress(this.proxyAdmin)
15
+ });
16
+ }
17
+ }
18
+ exports.V4TransparentProxyUpgrader = V4TransparentProxyUpgrader;
19
+ //# sourceMappingURL=v4TransparentProxyUpgrader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v4TransparentProxyUpgrader.js","sourceRoot":"","sources":["../../../src/upgraders/v4TransparentProxyUpgrader.ts"],"names":[],"mappings":";;;AAAA,yFAAoF;AACpF,mCAAmC;AACnC,qCAA+B;AAE/B,MAAa,0BAA2B,SAAQ,mEAAgC;IAClE,KAAK,CAAC,sBAAsB;QAClC,OAAO,oBAAW,CAAC,IAAI,CAAC;YACpB,MAAM,EAAE,IAAI,CAAC,UAAW,CAAC,SAAS,CAAC,kBAAkB,CACjD,SAAS,EACT;gBACI,MAAM,gBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC9C,MAAM,gBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,wBAAyB,CAAC;aAC9D,CACJ;YACD,IAAI,EAAE,MAAM,gBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,UAAW,CAAC;SACtD,CAAC,CAAC;IACP,CAAC;CACJ;AAbD,gEAaC"}
@@ -1,2 +1,3 @@
1
- export declare function verify(contractName: string, contractAddress: string, constructorArguments: object): Promise<void>;
2
- export declare function verifyProxy(contractName: string, proxyAddress: string, constructorArguments: object): Promise<void>;
1
+ import { AddressLike } from "ethers";
2
+ export declare const verify: (contractName: string, contractAddress: AddressLike) => Promise<void>;
3
+ export declare const verifyProxy: (contractName: string, proxyAddress: string) => Promise<void>;