@skalenetwork/upgrade-tools 3.0.0-upgrade-multiple-versions.2 → 4.0.0-beacon.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 (43) hide show
  1. package/dist/src/contractVerifier.d.ts +25 -0
  2. package/dist/src/contractVerifier.js +71 -0
  3. package/dist/src/contractVerifier.js.map +1 -0
  4. package/dist/src/deploy.js +8 -1
  5. package/dist/src/deploy.js.map +1 -1
  6. package/dist/src/index.d.ts +2 -0
  7. package/dist/src/index.js +2 -0
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/proxyUpgrader.d.ts +17 -0
  10. package/dist/src/proxyUpgrader.js +69 -0
  11. package/dist/src/proxyUpgrader.js.map +1 -0
  12. package/dist/src/types/upgrader.d.ts +1 -1
  13. package/dist/src/upgrader.d.ts +13 -7
  14. package/dist/src/upgrader.js +38 -70
  15. package/dist/src/upgrader.js.map +1 -1
  16. package/dist/src/upgraders/abstractTransparentProxyUpgrader.d.ts +10 -0
  17. package/dist/src/upgraders/abstractTransparentProxyUpgrader.js +57 -0
  18. package/dist/src/upgraders/abstractTransparentProxyUpgrader.js.map +1 -0
  19. package/dist/src/upgraders/beaconUpgrader.d.ts +7 -0
  20. package/dist/src/upgraders/beaconUpgrader.js +31 -0
  21. package/dist/src/upgraders/beaconUpgrader.js.map +1 -0
  22. package/dist/src/upgraders/transparentProxyUpgrader.d.ts +5 -0
  23. package/dist/src/upgraders/transparentProxyUpgrader.js +20 -0
  24. package/dist/src/upgraders/transparentProxyUpgrader.js.map +1 -0
  25. package/dist/src/upgraders/v4TransparentProxyUpgrader.d.ts +5 -0
  26. package/dist/src/upgraders/v4TransparentProxyUpgrader.js +19 -0
  27. package/dist/src/upgraders/v4TransparentProxyUpgrader.js.map +1 -0
  28. package/dist/src/verification.d.ts +3 -2
  29. package/dist/src/verification.js +57 -40
  30. package/dist/src/verification.js.map +1 -1
  31. package/dist/src/verifiers/blockscoutVerifier.d.ts +11 -0
  32. package/dist/src/verifiers/blockscoutVerifier.js +65 -0
  33. package/dist/src/verifiers/blockscoutVerifier.js.map +1 -0
  34. package/dist/src/verifiers/etherscanVerifier.d.ts +19 -0
  35. package/dist/src/verifiers/etherscanVerifier.js +105 -0
  36. package/dist/src/verifiers/etherscanVerifier.js.map +1 -0
  37. package/dist/src/verifiers/skaleBlockscoutVerifier.d.ts +7 -0
  38. package/dist/src/verifiers/skaleBlockscoutVerifier.js +60 -0
  39. package/dist/src/verifiers/skaleBlockscoutVerifier.js.map +1 -0
  40. package/package.json +10 -13
  41. package/dist/src/proxyAdmin.d.ts +0 -4
  42. package/dist/src/proxyAdmin.js +0 -56
  43. package/dist/src/proxyAdmin.js.map +0 -1
@@ -0,0 +1,25 @@
1
+ import { ValidationResponse } from "@nomicfoundation/hardhat-verify/internal/utilities";
2
+ export interface VerificationTarget {
3
+ contractName: string;
4
+ contractAddress: string;
5
+ }
6
+ export interface VerificationRequestParameters {
7
+ solcInputJson: string;
8
+ fullContractName: string;
9
+ compilerVersion: string;
10
+ }
11
+ export declare abstract class ContractVerifier {
12
+ abstract name: string;
13
+ private readonly PROXY_CONTRACT_NAME;
14
+ verify: (verificationTarget: VerificationTarget, attempts?: number) => Promise<void>;
15
+ attemptVerification(verificationTarget: VerificationTarget): Promise<boolean>;
16
+ protected abstract isAlreadyVerified(verificationTarget: VerificationTarget): Promise<boolean>;
17
+ protected abstract submitVerificationRequest(target: VerificationTarget, params: VerificationRequestParameters): Promise<ValidationResponse>;
18
+ protected abstract getContractUrl(verificationTarget: VerificationTarget): string;
19
+ protected getVerifyParameters(contractName: string): Promise<{
20
+ compilerVersion: string;
21
+ fullContractName: string;
22
+ solcInputJson: string;
23
+ }>;
24
+ private checkVerificationStatus;
25
+ }
@@ -0,0 +1,71 @@
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.ContractVerifier = void 0;
7
+ const hardhat_1 = require("hardhat");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const TransparentUpgradeableProxy_json_1 = __importDefault(require("@openzeppelin/upgrades-core/artifacts/@openzeppelin/contracts-v5/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json"));
10
+ const build_info_v5_json_1 = __importDefault(require("@openzeppelin/upgrades-core/artifacts/build-info-v5.json"));
11
+ const DEFAULT_RETRIES_AMOUNT = 5;
12
+ class ContractVerifier {
13
+ constructor() {
14
+ this.PROXY_CONTRACT_NAME = "TransparentUpgradeableProxy";
15
+ this.verify = async (verificationTarget, attempts = DEFAULT_RETRIES_AMOUNT) => {
16
+ const limit = 0;
17
+ if (attempts > limit) {
18
+ if (!await this.attemptVerification(verificationTarget)) {
19
+ const failedAttempts = 1;
20
+ await this.verify(verificationTarget, attempts - failedAttempts);
21
+ }
22
+ }
23
+ };
24
+ }
25
+ async attemptVerification(verificationTarget) {
26
+ if (await this.isAlreadyVerified(verificationTarget)) {
27
+ console.log(chalk_1.default.cyan(`${verificationTarget.contractName} is already verified on ${this.name}:\n${this.getContractUrl(verificationTarget)}`));
28
+ return true;
29
+ }
30
+ const params = await this.getVerifyParameters(verificationTarget.contractName);
31
+ try {
32
+ const response = await this.submitVerificationRequest(verificationTarget, params);
33
+ return this.checkVerificationStatus(verificationTarget, response);
34
+ }
35
+ catch (error) {
36
+ console.log(chalk_1.default.yellow(`Verification attempt for ${verificationTarget.contractName} failed on ${this.name} with error: ${error}`));
37
+ return false;
38
+ }
39
+ }
40
+ async getVerifyParameters(contractName) {
41
+ if (contractName === this.PROXY_CONTRACT_NAME) {
42
+ return {
43
+ compilerVersion: build_info_v5_json_1.default.solcLongVersion,
44
+ fullContractName: `${TransparentUpgradeableProxy_json_1.default.sourceName}:${contractName}`,
45
+ solcInputJson: JSON.stringify(build_info_v5_json_1.default.input)
46
+ };
47
+ }
48
+ const artifact = await hardhat_1.artifacts.readArtifact(contractName);
49
+ const fullContractName = `${artifact.sourceName}:${contractName}`;
50
+ const buildInfo = await hardhat_1.artifacts.getBuildInfo(fullContractName);
51
+ if (!buildInfo) {
52
+ throw new Error(`No build-info for ${contractName}`);
53
+ }
54
+ return {
55
+ compilerVersion: buildInfo.solcLongVersion,
56
+ fullContractName,
57
+ solcInputJson: JSON.stringify(buildInfo.input)
58
+ };
59
+ }
60
+ // Private
61
+ checkVerificationStatus(verificationTarget, response) {
62
+ if (response.isFailure()) {
63
+ console.log(chalk_1.default.red(`Failed to verify contract ${verificationTarget.contractName}`));
64
+ return false;
65
+ }
66
+ console.log(chalk_1.default.cyan(`${verificationTarget.contractName} is successfully verified on ${this.name}:\n${this.getContractUrl(verificationTarget)}`));
67
+ return true;
68
+ }
69
+ }
70
+ exports.ContractVerifier = ContractVerifier;
71
+ //# sourceMappingURL=contractVerifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contractVerifier.js","sourceRoot":"","sources":["../../src/contractVerifier.ts"],"names":[],"mappings":"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"}
@@ -80,7 +80,14 @@ const getContractFactory = async (contract) => {
80
80
  return await hardhat_1.ethers.getContractFactory(contract);
81
81
  }
82
82
  const libraryNames = (0, contractFactory_1.getLibrariesNames)(linkReferences);
83
- const libraries = await (0, exports.deployLibraries)(libraryNames);
83
+ const { chainId } = await hardhat_1.ethers.provider.getNetwork();
84
+ const libraries = await (async () => {
85
+ const hardhatChainId = 31337n;
86
+ if (chainId === hardhatChainId) {
87
+ return await (0, exports.deployLibrariesSequential)(libraryNames);
88
+ }
89
+ return await (0, exports.deployLibraries)(libraryNames);
90
+ })();
84
91
  const libraryArtifacts = await getLibraryArtifacts(libraries);
85
92
  await updateManifest(libraryArtifacts);
86
93
  return await hardhat_1.ethers.getContractFactory(contract, { "libraries": Object.fromEntries(libraries) });
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/deploy.ts"],"names":[],"mappings":";;;AAAA,+DAAmE;AACnE,qCAA0C;AAC1C,mDAA8C;AAE9C,2BAAkC;AAClC,uDAAoD;AAOpD,MAAM,aAAa,GAAG,KAAK,EACvB,WAAmB,EACnB,aAA4B,EAC9B,EAAE;IACA,MAAM,OAAO,GAAG,MAAM,gBAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,OAAO;QACzB,MAAM,CAAC,EAAC,OAAO,EAAE,aAAa,CAAC,YAAY,EAAE,EAAC,CAAC,CAAC;IACpD,MAAM,OAAO,CAAC,iBAAiB,EAAE,CAAA;IACjC,OAAO,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AACtC,CAAC,CAAC;AAEK,MAAO,yBAAyB,GAAG,KAAK,EAC3C,YAAsB,EACtB,aAA6B,EAC/B,EAAE;IACA,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,gBAAM,CAAC,UAAU,EAAE,CAAC;IAC7C,MAAM,wBAAwB,GAAG,aAAa;QACzC,MAAM,6BAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAC,CAAC;QAC5B,mFAAmF;QACnF,4CAA4C;QAC5C,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,aAAa,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAfY,QAAA,yBAAyB,6BAerC;AAEK,MAAM,eAAe,GAAG,KAAK,EAChC,YAAsB,EACtB,aAA6B,EAC/B,EAAE;IACA,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,gBAAM,CAAC,UAAU,EAAE,CAAC;IAC7C,MAAM,wBAAwB,GAAG,aAAa;QACzC,MAAM,6BAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9D,WAAW;QACX,MAAM,aAAa,CACf,WAAW,EACX,wBAAwB,CAC3B;KACJ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CACb,WAAW,EACX,cAAc,CACjB,EAAE,EAAE;QACD,SAAS,CAAC,GAAG,CACT,WAAW,EACX,cAAc,CACjB,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AA1BW,QAAA,eAAe,mBA0B1B;AAEK,MAAM,eAAe,GAAG,KAAK,UAAU,eAAe;IACzD,OAAO,CAAC,MAAM,wBAAQ,CAAC,UAAU,CAAC,gBAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAEF,MAAM,cAAc,GAAG,KAAK,EAAE,gBAAkC,EAAE,EAAE;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,aAAE,CAAC,QAAQ,CACzC,MAAM,IAAA,uBAAe,GAAE,EACvB,OAAO,CACV,CAAsB,CAAC;IACxB,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CACT,QAAQ,EACR,EAAC,WAAW,EAAE,gBAAgB,EAAC,CAClC,CAAC;IACN,CAAC;SAAM,CAAC;QACJ,MAAM,CAAC,MAAM,CACT,gBAAgB,EAChB,QAAQ,CAAC,SAAS,CACrB,CAAC;IACN,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,CAAC;IACtB,MAAM,aAAE,CAAC,SAAS,CACd,MAAM,IAAA,uBAAe,GAAE,EACvB,IAAI,CAAC,SAAS,CACV,QAAQ,EACR,IAAI,EACJ,WAAW,CACd,CACJ,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,KAAK,EAAE,SAA8B,EAAE,EAAE;IACjE,MAAM,gBAAgB,GAAqB,EAAE,CAAC;IAE9C,MAAM,kBAAkB,GAAG,KAAK,EAC5B,WAAmB,EACnB,cAAsB,EACxB,EAAE;QACA,MAAM,EAAC,QAAQ,EAAC,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC7D,OAAO;YACH,SAAS,EAAE,cAAc;YACzB,cAAc,EAAE,IAAA,4BAAY,EAAC,QAAQ,CAAC;YACtC,WAAW;SACd,CAAC;IACN,CAAC,CAAC;IAEF,KAAK,MAAM,eAAe,IAAI,MAAM,OAAO;QACvC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CACrC,WAAW,EACX,cAAc,CACjB,EAAE,EAAE,CAAC,kBAAkB,CACpB,WAAW,EACX,cAAc,CACjB,CAAC,CAAC,EAAE,CAAC;QACN,gBAAgB,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG;YAC5C,SAAS,EAAE,eAAe,CAAC,OAAO;YAClC,cAAc,EAAE,eAAe,CAAC,YAAY;SAC/C,CAAC;IACN,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC5B,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,KAAK,EAAE,QAAgB,EAAE,EAAE;IACzD,MAAM,EAAC,cAAc,EAAC,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,MAAM,gBAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,YAAY,GAAG,IAAA,mCAAiB,EAAC,cAAc,CAAC,CAAC;IACvD,MAAM,EAAC,OAAO,EAAC,GAAG,MAAM,gBAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IAErD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;QAChC,MAAM,cAAc,GAAG,MAAM,CAAC;QAC9B,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC7B,OAAO,MAAM,IAAA,iCAAyB,EAAC,YAAY,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,MAAM,IAAA,uBAAe,EAAC,YAAY,CAAC,CAAC;IAC/C,CAAC,CAAC,EAAE,CAAC;IAEL,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAE9D,MAAM,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAEvC,OAAO,MAAM,gBAAM,CAAC,kBAAkB,CAClC,QAAQ,EACR,EAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAC,CAC/C,CAAC;AACN,CAAC,CAAC;AAzBW,QAAA,kBAAkB,sBAyB7B"}
@@ -1,7 +1,9 @@
1
1
  export * from "./abi";
2
2
  export * from "./deploy";
3
3
  export * from "./gnosis-safe";
4
+ export * from "./proxyUpgrader";
4
5
  export * from "./submitters";
5
6
  export * from "./verification";
6
7
  export * from "./version";
7
8
  export * from "./upgrader";
9
+ export * from "./upgraders/beaconUpgrader";
package/dist/src/index.js CHANGED
@@ -17,8 +17,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./abi"), exports);
18
18
  __exportStar(require("./deploy"), exports);
19
19
  __exportStar(require("./gnosis-safe"), exports);
20
+ __exportStar(require("./proxyUpgrader"), exports);
20
21
  __exportStar(require("./submitters"), exports);
21
22
  __exportStar(require("./verification"), exports);
22
23
  __exportStar(require("./version"), exports);
23
24
  __exportStar(require("./upgrader"), exports);
25
+ __exportStar(require("./upgraders/beaconUpgrader"), exports);
24
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,2CAAyB;AACzB,gDAA8B;AAC9B,+CAA6B;AAC7B,iDAA+B;AAC/B,4CAA0B;AAC1B,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,2CAAyB;AACzB,gDAA8B;AAC9B,kDAAgC;AAChC,+CAA6B;AAC7B,iDAA+B;AAC/B,4CAA0B;AAC1B,6CAA2B;AAC3B,6DAA0C"}
@@ -0,0 +1,17 @@
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
+ private prepareUpgrade;
17
+ }
@@ -0,0 +1,69 @@
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 hardhat_1 = require("hardhat");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const upgrader_1 = require("./upgrader");
10
+ const contractFactory_1 = require("./contractFactory");
11
+ const upgrades_core_1 = require("@openzeppelin/upgrades-core");
12
+ class ProxyUpgrader {
13
+ constructor(contractName, proxyAddress, nonceProvider) {
14
+ this.newImplementationAddress = null;
15
+ this.contractName = contractName;
16
+ this.proxyAddress = proxyAddress;
17
+ this.nonceProvider = nonceProvider;
18
+ }
19
+ // Public
20
+ async deployNewImplementation() {
21
+ const contractFactory = await (0, contractFactory_1.getContractFactoryAndUpdateManifest)(this.contractName, this.nonceProvider);
22
+ console.log(`Prepare upgrade of ${this.contractName}`);
23
+ return this.prepareUpgrade(contractFactory);
24
+ }
25
+ needsUpgrade() {
26
+ return this.newImplementationAddress !== null;
27
+ }
28
+ async getUpgradeTransaction() {
29
+ if (this.newImplementationAddress === null) {
30
+ throw new Error(`Upgrade of ${this.contractName} is not prepared or not needed`);
31
+ }
32
+ const infoMessage = `Prepare transaction to upgrade ${this.contractName}` +
33
+ ` at ${this.proxyAddress}` +
34
+ ` to ${this.newImplementationAddress}`;
35
+ console.log(chalk_1.default.yellowBright(infoMessage));
36
+ return await this.makeUpgradeTransaction();
37
+ }
38
+ getContractName() {
39
+ return this.contractName;
40
+ }
41
+ getNewImplementationAddress() {
42
+ if (this.newImplementationAddress === null) {
43
+ throw new Error(`There is no new implementation address for ${this.contractName}`);
44
+ }
45
+ return this.newImplementationAddress;
46
+ }
47
+ // Private
48
+ async prepareUpgrade(contractFactory) {
49
+ const currentImplementationAddress = await (0, upgrades_core_1.getImplementationAddress)(hardhat_1.network.provider, await hardhat_1.ethers.resolveAddress(this.proxyAddress));
50
+ const nonce = this.nonceProvider?.reserveNonce();
51
+ const newImplementationAddress = await hardhat_1.upgrades.prepareUpgrade(await hardhat_1.ethers.resolveAddress(this.proxyAddress), contractFactory, {
52
+ "timeout": upgrader_1.deployTimeout,
53
+ "txOverrides": {
54
+ nonce
55
+ },
56
+ "unsafeAllowLinkedLibraries": true,
57
+ "unsafeAllowRenames": true
58
+ });
59
+ if (newImplementationAddress !== currentImplementationAddress) {
60
+ this.newImplementationAddress = newImplementationAddress;
61
+ }
62
+ console.log(chalk_1.default.gray(`Contract ${this.contractName} is up to date`));
63
+ if (nonce) {
64
+ this.nonceProvider?.releaseNonce(nonce);
65
+ }
66
+ }
67
+ }
68
+ exports.ProxyUpgrader = ProxyUpgrader;
69
+ //# sourceMappingURL=proxyUpgrader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxyUpgrader.js","sourceRoot":"","sources":["../../src/proxyUpgrader.ts"],"names":[],"mappings":";;;;;;AACA,qCAAkD;AAElD,kDAA0B;AAC1B,yCAAyC;AACzC,uDAAsE;AACtE,+DAAqE;AAGrE,MAAsB,aAAa;IAM/B,YACI,YAAoB,EACpB,YAAyB,EACzB,aAA6B;QAPvB,6BAAwB,GAAuB,IAAI,CAAC;QAS1D,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAED,SAAS;IAEF,KAAK,CAAC,uBAAuB;QAChC,MAAM,eAAe,GAAG,MAAM,IAAA,qDAAmC,EAC7D,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,aAAa,CACrB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IAChD,CAAC;IAEM,YAAY;QACf,OAAO,IAAI,CAAC,wBAAwB,KAAK,IAAI,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,qBAAqB;QAC9B,IAAI,IAAI,CAAC,wBAAwB,KAAK,IAAI,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACX,cAAc,IAAI,CAAC,YAAY,gCAAgC,CAClE,CAAC;QACN,CAAC;QACD,MAAM,WAAW,GACb,kCAAkC,IAAI,CAAC,YAAY,EAAE;YACrD,OAAO,IAAI,CAAC,YAAY,EAAE;YAC1B,OAAO,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;QAC7C,OAAO,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAC/C,CAAC;IAEM,eAAe;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAEM,2BAA2B;QAC9B,IAAI,IAAI,CAAC,wBAAwB,KAAK,IAAI,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACX,8CAA8C,IAAI,CAAC,YAAY,EAAE,CACpE,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACzC,CAAC;IAQD,UAAU;IAEF,KAAK,CAAC,cAAc,CAAC,eAAgC;QACzD,MAAM,4BAA4B,GAAG,MAAM,IAAA,wCAAwB,EAC/D,iBAAO,CAAC,QAAQ,EAChB,MAAM,gBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CACjD,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;QAEjD,MAAM,wBAAwB,GAAG,MAAM,kBAAQ,CAAC,cAAc,CAC1D,MAAM,gBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,EAC9C,eAAe,EACf;YACI,SAAS,EAAE,wBAAa;YACxB,aAAa,EAAE;gBACX,KAAK;aACR;YACD,4BAA4B,EAAE,IAAI;YAClC,oBAAoB,EAAE,IAAI;SAC7B,CACW,CAAC;QACjB,IAAI,wBAAwB,KAAK,4BAA4B,EAAE,CAAC;YAC5D,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QAC7D,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,gBAAgB,CAAC,CAAC,CAAC;QACvE,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;CACJ;AA9FD,sCA8FC"}
@@ -7,6 +7,6 @@ export interface ContractToUpgrade {
7
7
  export interface Project {
8
8
  name: string;
9
9
  instance: Instance;
10
- oldVersion: string | string[];
10
+ version: string;
11
11
  contractNamesToUpgrade: string[];
12
12
  }
@@ -1,14 +1,18 @@
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";
7
+ export declare const deployTimeout = 600000;
5
8
  export declare abstract class Upgrader {
6
- private targetVersions;
9
+ private targetVersion;
7
10
  private contractNamesToUpgrade;
8
11
  private projectName;
9
12
  private submitter;
10
- private nonceProvider?;
11
13
  private deploySemaphore;
14
+ private proxyUpgraders;
15
+ protected nonceProvider?: NonceProvider;
12
16
  protected instance: Instance;
13
17
  protected transactions: Transaction[];
14
18
  constructor(project: Project, submitter?: Submitter);
@@ -16,18 +20,20 @@ export declare abstract class Upgrader {
16
20
  abstract setVersion: (newVersion: string) => Promise<void>;
17
21
  deployNewContracts?: () => Promise<void>;
18
22
  initialize?: () => Promise<void>;
23
+ protected createProxyUpgrader(contractName: string): Promise<ProxyUpgrader>;
19
24
  upgrade(): Promise<void>;
20
25
  getOwner(): Promise<string>;
26
+ private upgradeOldContracts;
27
+ private getChangedContracts;
28
+ private createProxyUpgraders;
21
29
  private callInitialize;
22
30
  private callDeployNewContracts;
23
31
  private prepareVersion;
24
32
  private writeTransactions;
25
- private static verify;
33
+ private verify;
26
34
  private switchToNewImplementations;
27
35
  private deployNewImplementations;
28
36
  private protectedDeployNewImplementation;
29
- private deployNewImplementation;
30
- private prepareUpgrade;
31
37
  private getNormalizedDeployedVersion;
32
38
  private checkVersion;
33
39
  }
@@ -3,17 +3,15 @@ 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;
6
+ exports.Upgrader = exports.deployTimeout = void 0;
7
7
  const hardhat_1 = require("hardhat");
8
- const proxyAdmin_1 = require("./proxyAdmin");
8
+ const abstractTransparentProxyUpgrader_1 = require("./upgraders/abstractTransparentProxyUpgrader");
9
9
  const auto_submitter_1 = require("./submitters/auto-submitter");
10
10
  const exitCodes_1 = require("./exitCodes");
11
11
  const nonceProvider_1 = require("./nonceProvider");
12
12
  const semaphore_async_await_1 = __importDefault(require("semaphore-async-await"));
13
13
  const chalk_1 = __importDefault(require("chalk"));
14
14
  const fs_1 = require("fs");
15
- const contractFactory_1 = require("./contractFactory");
16
- const upgrades_core_1 = require("@openzeppelin/upgrades-core");
17
15
  const version_1 = require("./version");
18
16
  const verification_1 = require("./verification");
19
17
  const withoutNull = (array) => array.
@@ -21,21 +19,14 @@ const withoutNull = (array) => array.
21
19
  // TODO: Set to 8 when upgrade plugins become thread safe
22
20
  const maxSimultaneousDeployments = 1;
23
21
  // 10 minutes
24
- const deployTimeout = 60e4;
22
+ exports.deployTimeout = 60e4;
25
23
  class Upgrader {
26
24
  constructor(project, submitter) {
27
- if (typeof (project.oldVersion) === 'string') {
28
- this.targetVersions = [project.oldVersion];
25
+ this.proxyUpgraders = [];
26
+ this.targetVersion = project.version;
27
+ if (!project.version.includes("-")) {
28
+ this.targetVersion = `${project.version}-stable.0`;
29
29
  }
30
- else {
31
- this.targetVersions = project.oldVersion;
32
- }
33
- this.targetVersions.map((version) => {
34
- if (!version.includes("-")) {
35
- return `${version}-stable.0`;
36
- }
37
- return version;
38
- });
39
30
  this.instance = project.instance;
40
31
  this.contractNamesToUpgrade = project.contractNamesToUpgrade;
41
32
  this.projectName = project.name;
@@ -43,24 +34,26 @@ class Upgrader {
43
34
  this.submitter = submitter ?? new auto_submitter_1.AutoSubmitter(this);
44
35
  this.deploySemaphore = new semaphore_async_await_1.default(maxSimultaneousDeployments);
45
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;
41
+ }
46
42
  // Public
47
43
  async upgrade() {
48
44
  const version = await this.prepareVersion();
49
45
  await this.callDeployNewContracts();
50
- const contractsToUpgrade = await this.deployNewImplementations();
51
- await this.switchToNewImplementations(contractsToUpgrade);
46
+ await this.upgradeOldContracts();
52
47
  await this.callInitialize();
53
48
  // Write version
54
49
  await this.setVersion(version);
55
50
  await this.writeTransactions(version);
56
51
  await this.submitter.submit(this.transactions);
57
- await Upgrader.verify(contractsToUpgrade);
52
+ await this.verify();
58
53
  console.log("Done");
59
54
  }
60
55
  async getOwner() {
61
- const proxyAddresses = await Promise.all(this.contractNamesToUpgrade.map((contract) => this.instance.getContractAddress(contract), this));
62
- const admins = await Promise.all(proxyAddresses.map((proxy) => (0, proxyAdmin_1.getProxyAdmin)(proxy)));
63
- const owners = await Promise.all(admins.map((admin) => admin.owner()));
56
+ const owners = await Promise.all(this.proxyUpgraders.map((upgrader) => upgrader.getOwner()));
64
57
  return owners.reduce((owner1, owner2) => {
65
58
  if (owner1 !== owner2) {
66
59
  throw Error("Proxies have different owners");
@@ -68,7 +61,18 @@ class Upgrader {
68
61
  return owner1;
69
62
  });
70
63
  }
64
+ async upgradeOldContracts() {
65
+ await this.createProxyUpgraders();
66
+ await this.deployNewImplementations();
67
+ await this.switchToNewImplementations();
68
+ }
71
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
+ }
72
76
  async callInitialize() {
73
77
  if (typeof this.initialize !== "undefined") {
74
78
  await this.initialize();
@@ -90,72 +94,36 @@ class Upgrader {
90
94
  const indentation = 4;
91
95
  await fs_1.promises.writeFile(`data/transactions-${version}-${hardhat_1.network.name}.json`, JSON.stringify(this.transactions, null, indentation));
92
96
  }
93
- static async verify(contractsToUpgrade) {
97
+ async verify() {
94
98
  if (process.env.NO_VERIFY) {
95
99
  console.log("Skip verification");
96
100
  }
97
101
  else {
98
102
  console.log("Start verification");
99
- await Promise.all(contractsToUpgrade.map((contract) => (0, verification_1.verify)(contract.name, contract.implementationAddress, [])));
103
+ await Promise.all(this.getChangedContracts().map((upgrader) => (0, verification_1.verify)(upgrader.getContractName(), upgrader.getNewImplementationAddress())));
100
104
  }
101
105
  }
102
- async switchToNewImplementations(contractsToUpgrade) {
103
- const upgradeTransactions = await Promise.all(contractsToUpgrade.map((contract) => (0, proxyAdmin_1.getUpgradeTransaction)(contract.proxyAddress, contract.implementationAddress)));
104
- contractsToUpgrade.forEach((contract, index) => {
105
- const infoMessage = `Prepare transaction to upgrade ${contract.name}` +
106
- ` at ${contract.proxyAddress}` +
107
- ` to ${contract.implementationAddress}`;
108
- console.log(chalk_1.default.yellowBright(infoMessage));
109
- this.transactions.push(upgradeTransactions[index]);
110
- });
106
+ async switchToNewImplementations() {
107
+ this.transactions = [
108
+ ...this.transactions,
109
+ ...await Promise.all(this.proxyUpgraders.map((upgrader) => upgrader.getUpgradeTransaction()))
110
+ ];
111
111
  }
112
112
  async deployNewImplementations() {
113
113
  const [deployer] = await hardhat_1.ethers.getSigners();
114
114
  this.nonceProvider ?? (this.nonceProvider = await nonceProvider_1.NonceProvider.createForWallet(deployer));
115
- const contracts = await Promise.all(this.contractNamesToUpgrade.
116
- map(this.protectedDeployNewImplementation, this));
115
+ const contracts = await Promise.all(this.proxyUpgraders.
116
+ map((upgrader) => this.protectedDeployNewImplementation(upgrader), this));
117
117
  return withoutNull(contracts);
118
118
  }
119
- async protectedDeployNewImplementation(contract) {
119
+ async protectedDeployNewImplementation(upgrader) {
120
120
  await this.deploySemaphore.acquire();
121
- let result = null;
122
121
  try {
123
- result = await this.deployNewImplementation(contract);
122
+ await upgrader.deployNewImplementation();
124
123
  }
125
124
  finally {
126
125
  this.deploySemaphore.release();
127
126
  }
128
- return result;
129
- }
130
- async deployNewImplementation(contract) {
131
- const contractFactory = await (0, contractFactory_1.getContractFactoryAndUpdateManifest)(contract, this.nonceProvider);
132
- const proxyAddress = await (await this.instance.getContract(contract)).getAddress();
133
- console.log(`Prepare upgrade of ${contract}`);
134
- return this.prepareUpgrade(contract, proxyAddress, contractFactory);
135
- }
136
- async prepareUpgrade(contractName, proxyAddress, contractFactory) {
137
- const currentImplementationAddress = await (0, upgrades_core_1.getImplementationAddress)(hardhat_1.network.provider, proxyAddress);
138
- const nonce = this.nonceProvider?.reserveNonce();
139
- const newImplementationAddress = await hardhat_1.upgrades.prepareUpgrade(proxyAddress, contractFactory, {
140
- "timeout": deployTimeout,
141
- "txOverrides": {
142
- nonce
143
- },
144
- "unsafeAllowLinkedLibraries": true,
145
- "unsafeAllowRenames": true
146
- });
147
- if (newImplementationAddress !== currentImplementationAddress) {
148
- return {
149
- "implementationAddress": newImplementationAddress,
150
- "name": contractName,
151
- proxyAddress
152
- };
153
- }
154
- console.log(chalk_1.default.gray(`Contract ${contractName} is up to date`));
155
- if (nonce) {
156
- this.nonceProvider?.releaseNonce(nonce);
157
- }
158
- return null;
159
127
  }
160
128
  async getNormalizedDeployedVersion() {
161
129
  const deployedVersion = await this.getDeployedVersion();
@@ -170,7 +138,7 @@ class Upgrader {
170
138
  async checkVersion(version) {
171
139
  const deployedVersion = await this.getNormalizedDeployedVersion();
172
140
  if (deployedVersion) {
173
- if (!this.targetVersions.includes(deployedVersion)) {
141
+ if (deployedVersion !== this.targetVersion) {
174
142
  const cannotUpgradeMessage = `This script can't upgrade version ${deployedVersion}` +
175
143
  ` to ${version}`;
176
144
  console.log(chalk_1.default.red(cannotUpgradeMessage));
@@ -1 +1 @@
1
- {"version":3,"file":"upgrader.js","sourceRoot":"","sources":["../../src/upgrader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upgrader.js","sourceRoot":"","sources":["../../src/upgrader.ts"],"names":[],"mappings":"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"}
@@ -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
+ }