@skalenetwork/upgrade-tools 3.0.0-verification.0 → 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.
- package/dist/hardhat.config.d.ts +3 -3
- package/dist/hardhat.config.js +6 -17
- package/dist/hardhat.config.js.map +1 -0
- package/dist/src/abi.d.ts +2 -2
- package/dist/src/abi.js +8 -4
- package/dist/src/abi.js.map +1 -0
- package/dist/src/contractFactory.d.ts +4 -0
- package/dist/src/contractFactory.js +84 -0
- package/dist/src/contractFactory.js.map +1 -0
- package/dist/src/contractVerifier.d.ts +25 -0
- package/dist/src/contractVerifier.js +71 -0
- package/dist/src/contractVerifier.js.map +1 -0
- package/dist/src/deploy.d.ts +5 -4
- package/dist/src/deploy.js +77 -58
- package/dist/src/deploy.js.map +1 -0
- package/dist/src/exitCodes.d.ts +8 -0
- package/dist/src/exitCodes.js +13 -0
- package/dist/src/exitCodes.js.map +1 -0
- package/dist/src/gnosis-safe.d.ts +2 -2
- package/dist/src/gnosis-safe.js +105 -96
- package/dist/src/gnosis-safe.js.map +1 -0
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -0
- package/dist/src/nonceProvider.d.ts +10 -0
- package/dist/src/nonceProvider.js +34 -0
- package/dist/src/nonceProvider.js.map +1 -0
- package/dist/src/proxyUpgrader.d.ts +17 -0
- package/dist/src/proxyUpgrader.js +69 -0
- package/dist/src/proxyUpgrader.js.map +1 -0
- package/dist/src/submitters/auto-submitter.d.ts +22 -5
- package/dist/src/submitters/auto-submitter.js +135 -120
- package/dist/src/submitters/auto-submitter.js.map +1 -0
- package/dist/src/submitters/eoa-submitter.d.ts +3 -2
- package/dist/src/submitters/eoa-submitter.js +23 -12
- package/dist/src/submitters/eoa-submitter.js.map +1 -0
- package/dist/src/submitters/index.js +1 -0
- package/dist/src/submitters/index.js.map +1 -0
- package/dist/src/submitters/safe-ima-legacy-marionette-submitter.d.ts +4 -3
- package/dist/src/submitters/safe-ima-legacy-marionette-submitter.js +14 -13
- package/dist/src/submitters/safe-ima-legacy-marionette-submitter.js.map +1 -0
- package/dist/src/submitters/safe-ima-marionette-submitter.d.ts +3 -3
- package/dist/src/submitters/safe-ima-marionette-submitter.js +13 -11
- package/dist/src/submitters/safe-ima-marionette-submitter.js.map +1 -0
- package/dist/src/submitters/safe-submitter.d.ts +4 -4
- package/dist/src/submitters/safe-submitter.js +4 -3
- package/dist/src/submitters/safe-submitter.js.map +1 -0
- package/dist/src/submitters/safe-to-ima-submitter.d.ts +11 -6
- package/dist/src/submitters/safe-to-ima-submitter.js +23 -15
- package/dist/src/submitters/safe-to-ima-submitter.js.map +1 -0
- package/dist/src/submitters/submitter.d.ts +3 -3
- package/dist/src/submitters/submitter.js +11 -7
- package/dist/src/submitters/submitter.js.map +1 -0
- package/dist/src/submitters/types/marionette.d.ts +6 -3
- package/dist/src/submitters/types/marionette.js +1 -0
- package/dist/src/submitters/types/marionette.js.map +1 -0
- package/dist/src/types/SkaleManifestData.js +1 -0
- package/dist/src/types/SkaleManifestData.js.map +1 -0
- package/dist/src/types/upgrader.d.ts +12 -0
- package/dist/{typechain-types/AccessControlUpgradeable.js → src/types/upgrader.js} +1 -0
- package/dist/src/types/upgrader.js.map +1 -0
- package/dist/src/upgrader.d.ts +33 -12
- package/dist/src/upgrader.js +123 -97
- package/dist/src/upgrader.js.map +1 -0
- package/dist/src/upgraders/abstractTransparentProxyUpgrader.d.ts +10 -0
- package/dist/src/upgraders/abstractTransparentProxyUpgrader.js +57 -0
- package/dist/src/upgraders/abstractTransparentProxyUpgrader.js.map +1 -0
- package/dist/src/upgraders/beaconUpgrader.d.ts +7 -0
- package/dist/src/upgraders/beaconUpgrader.js +31 -0
- package/dist/src/upgraders/beaconUpgrader.js.map +1 -0
- package/dist/src/upgraders/transparentProxyUpgrader.d.ts +5 -0
- package/dist/src/upgraders/transparentProxyUpgrader.js +20 -0
- package/dist/src/upgraders/transparentProxyUpgrader.js.map +1 -0
- package/dist/src/upgraders/v4TransparentProxyUpgrader.d.ts +5 -0
- package/dist/src/upgraders/v4TransparentProxyUpgrader.js +19 -0
- package/dist/src/upgraders/v4TransparentProxyUpgrader.js.map +1 -0
- package/dist/src/verification.d.ts +3 -2
- package/dist/src/verification.js +70 -28
- package/dist/src/verification.js.map +1 -0
- package/dist/src/verifiers/blockscoutVerifier.d.ts +11 -0
- package/dist/src/verifiers/blockscoutVerifier.js +65 -0
- package/dist/src/verifiers/blockscoutVerifier.js.map +1 -0
- package/dist/src/verifiers/etherscanVerifier.d.ts +19 -0
- package/dist/src/verifiers/etherscanVerifier.js +105 -0
- package/dist/src/verifiers/etherscanVerifier.js.map +1 -0
- package/dist/src/verifiers/skaleBlockscoutVerifier.d.ts +7 -0
- package/dist/src/verifiers/skaleBlockscoutVerifier.js +60 -0
- package/dist/src/verifiers/skaleBlockscoutVerifier.js.map +1 -0
- package/dist/src/version.js +24 -2
- package/dist/src/version.js.map +1 -0
- package/dist/typechain-types/AdminUpgradeabilityProxy.d.ts +59 -54
- package/dist/typechain-types/AdminUpgradeabilityProxy.js +1 -0
- package/dist/typechain-types/AdminUpgradeabilityProxy.js.map +1 -0
- package/dist/typechain-types/ProxyAdmin.d.ts +94 -137
- package/dist/typechain-types/ProxyAdmin.js +1 -0
- package/dist/typechain-types/ProxyAdmin.js.map +1 -0
- package/dist/typechain-types/common.d.ts +40 -11
- package/dist/typechain-types/common.js +1 -0
- package/dist/typechain-types/common.js.map +1 -0
- package/dist/typechain-types/factories/AdminUpgradeabilityProxy__factory.d.ts +71 -41
- package/dist/typechain-types/factories/AdminUpgradeabilityProxy__factory.js +8 -11
- package/dist/typechain-types/factories/AdminUpgradeabilityProxy__factory.js.map +1 -0
- package/dist/typechain-types/factories/ProxyAdmin__factory.d.ts +129 -41
- package/dist/typechain-types/factories/ProxyAdmin__factory.js +8 -11
- package/dist/typechain-types/factories/ProxyAdmin__factory.js.map +1 -0
- package/dist/typechain-types/factories/index.d.ts +2 -0
- package/dist/typechain-types/factories/index.js +11 -0
- package/dist/typechain-types/factories/index.js.map +1 -0
- package/dist/typechain-types/index.d.ts +1 -22
- package/dist/typechain-types/index.js +36 -23
- package/dist/typechain-types/index.js.map +1 -0
- package/package.json +23 -27
- package/dist/src/multiSend.d.ts +0 -2
- package/dist/src/multiSend.js +0 -46
- package/dist/typechain-types/AccessControlEnumerableUpgradeable.d.ts +0 -183
- package/dist/typechain-types/AccessControlEnumerableUpgradeable.js +0 -2
- package/dist/typechain-types/AccessControlUpgradeable.d.ts +0 -167
- package/dist/typechain-types/ContextUpgradeable.d.ts +0 -40
- package/dist/typechain-types/ContextUpgradeable.js +0 -2
- package/dist/typechain-types/ERC165Upgradeable.d.ts +0 -53
- package/dist/typechain-types/ERC165Upgradeable.js +0 -2
- package/dist/typechain-types/IAccessControlEnumerableUpgradeable.d.ts +0 -159
- package/dist/typechain-types/IAccessControlEnumerableUpgradeable.js +0 -2
- package/dist/typechain-types/IAccessControlUpgradeable.d.ts +0 -143
- package/dist/typechain-types/IAccessControlUpgradeable.js +0 -2
- package/dist/typechain-types/IERC165Upgradeable.d.ts +0 -43
- package/dist/typechain-types/IERC165Upgradeable.js +0 -2
- package/dist/typechain-types/ISafeMock.d.ts +0 -86
- package/dist/typechain-types/ISafeMock.js +0 -2
- package/dist/typechain-types/Initializable.d.ts +0 -40
- package/dist/typechain-types/Initializable.js +0 -2
- package/dist/typechain-types/OwnableUpgradeable.d.ts +0 -97
- package/dist/typechain-types/OwnableUpgradeable.js +0 -2
- package/dist/typechain-types/SafeMock.d.ts +0 -172
- package/dist/typechain-types/SafeMock.js +0 -2
- package/dist/typechain-types/factories/AccessControlEnumerableUpgradeable__factory.d.ts +0 -35
- package/dist/typechain-types/factories/AccessControlEnumerableUpgradeable__factory.js +0 -279
- package/dist/typechain-types/factories/AccessControlUpgradeable__factory.d.ts +0 -35
- package/dist/typechain-types/factories/AccessControlUpgradeable__factory.js +0 -236
- package/dist/typechain-types/factories/ContextUpgradeable__factory.d.ts +0 -18
- package/dist/typechain-types/factories/ContextUpgradeable__factory.js +0 -32
- package/dist/typechain-types/factories/ERC165Upgradeable__factory.d.ts +0 -35
- package/dist/typechain-types/factories/ERC165Upgradeable__factory.js +0 -51
- package/dist/typechain-types/factories/IAccessControlEnumerableUpgradeable__factory.d.ts +0 -35
- package/dist/typechain-types/factories/IAccessControlEnumerableUpgradeable__factory.js +0 -234
- package/dist/typechain-types/factories/IAccessControlUpgradeable__factory.d.ts +0 -35
- package/dist/typechain-types/factories/IAccessControlUpgradeable__factory.js +0 -191
- package/dist/typechain-types/factories/IERC165Upgradeable__factory.d.ts +0 -22
- package/dist/typechain-types/factories/IERC165Upgradeable__factory.js +0 -38
- package/dist/typechain-types/factories/ISafeMock__factory.d.ts +0 -22
- package/dist/typechain-types/factories/ISafeMock__factory.js +0 -114
- package/dist/typechain-types/factories/Initializable__factory.d.ts +0 -18
- package/dist/typechain-types/factories/Initializable__factory.js +0 -32
- package/dist/typechain-types/factories/OwnableUpgradeable__factory.d.ts +0 -42
- package/dist/typechain-types/factories/OwnableUpgradeable__factory.js +0 -84
- package/dist/typechain-types/factories/SafeMock__factory.d.ts +0 -56
- package/dist/typechain-types/factories/SafeMock__factory.js +0 -247
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Transaction } from "ethers";
|
|
2
2
|
export declare abstract class Submitter {
|
|
3
|
-
abstract submit(transactions:
|
|
4
|
-
|
|
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
|
-
//
|
|
10
|
-
|
|
11
|
-
if (
|
|
12
|
-
console.log(chalk_1.default.
|
|
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.
|
|
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
|
|
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
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marionette.js","sourceRoot":"","sources":["../../../../src/submitters/types/marionette.ts"],"names":[],"mappings":";;;AAGa,QAAA,kBAAkB,GAAG,4CAA4C,CAAC"}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrader.js","sourceRoot":"","sources":["../../../src/types/upgrader.ts"],"names":[],"mappings":""}
|
package/dist/src/upgrader.d.ts
CHANGED
|
@@ -1,18 +1,39 @@
|
|
|
1
|
-
import {
|
|
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 {
|
|
6
|
+
import { Transaction } from "ethers";
|
|
7
|
+
export declare const deployTimeout = 600000;
|
|
4
8
|
export declare abstract class Upgrader {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
15
|
-
initialize
|
|
21
|
+
deployNewContracts?: () => Promise<void>;
|
|
22
|
+
initialize?: () => Promise<void>;
|
|
23
|
+
protected createProxyUpgrader(contractName: string): Promise<ProxyUpgrader>;
|
|
16
24
|
upgrade(): Promise<void>;
|
|
17
|
-
|
|
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
|
}
|
package/dist/src/upgrader.js
CHANGED
|
@@ -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 =
|
|
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
|
|
14
|
-
const upgrades_core_1 = require("@openzeppelin/upgrades-core");
|
|
15
|
+
const version_1 = require("./version");
|
|
15
16
|
const verification_1 = require("./verification");
|
|
16
|
-
const
|
|
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(
|
|
19
|
-
|
|
20
|
-
this.
|
|
21
|
-
|
|
22
|
-
|
|
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 =
|
|
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
|
-
//
|
|
42
|
+
// Public
|
|
33
43
|
async upgrade() {
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
47
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
if (
|
|
113
|
-
|
|
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
|
-
|
|
116
|
-
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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":"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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,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
|
-
|
|
2
|
-
export declare
|
|
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>;
|