@skalenetwork/upgrade-tools 4.0.0-develop.1 → 4.0.0-develop.3
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/src/index.d.ts +3 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/proxyUpgrader.d.ts +18 -0
- package/dist/src/proxyUpgrader.js +71 -0
- package/dist/src/proxyUpgrader.js.map +1 -0
- package/dist/src/upgrader.d.ts +11 -6
- package/dist/src/upgrader.js +59 -59
- package/dist/src/upgrader.js.map +1 -1
- package/dist/src/upgraders/abstractTransparentProxyUpgrader.d.ts +19 -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 +8 -0
- package/dist/src/upgraders/beaconUpgrader.js +37 -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 +2 -1
- package/dist/src/verification.js +2 -1
- package/dist/src/verification.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/proxyAdmin.d.ts +0 -4
- package/dist/src/proxyAdmin.js +0 -56
- package/dist/src/proxyAdmin.js.map +0 -1
package/dist/src/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
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/abstractTransparentProxyUpgrader";
|
|
10
|
+
export * from "./upgraders/beaconUpgrader";
|
package/dist/src/index.js
CHANGED
|
@@ -17,8 +17,11 @@ 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/abstractTransparentProxyUpgrader"), exports);
|
|
26
|
+
__exportStar(require("./upgraders/beaconUpgrader"), exports);
|
|
24
27
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -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,+EAA6D;AAC7D,6DAA0C"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AddressLike, Transaction } from "ethers";
|
|
2
|
+
import { NonceProvider } from "./nonceProvider";
|
|
3
|
+
export declare abstract class ProxyUpgrader {
|
|
4
|
+
protected proxyAddress: AddressLike;
|
|
5
|
+
protected newImplementationAddress: AddressLike | null;
|
|
6
|
+
private contractName;
|
|
7
|
+
private nonceProvider?;
|
|
8
|
+
constructor(contractName: string, proxyAddress: AddressLike, nonceProvider?: NonceProvider);
|
|
9
|
+
deployNewImplementation(): Promise<void>;
|
|
10
|
+
needsUpgrade(): boolean;
|
|
11
|
+
getUpgradeTransaction(): Promise<Transaction>;
|
|
12
|
+
getContractName(): string;
|
|
13
|
+
getNewImplementationAddress(): AddressLike;
|
|
14
|
+
abstract getOwner(): Promise<string>;
|
|
15
|
+
protected abstract makeUpgradeTransaction(): Promise<Transaction>;
|
|
16
|
+
protected abstract getCurrentImplementationAddress(): Promise<AddressLike>;
|
|
17
|
+
private prepareUpgrade;
|
|
18
|
+
}
|
|
@@ -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.ProxyUpgrader = void 0;
|
|
7
|
+
const hardhat_1 = require("hardhat");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const contractFactory_1 = require("./contractFactory");
|
|
10
|
+
// 10 minutes
|
|
11
|
+
const deployTimeout = 60e4;
|
|
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 this.getCurrentImplementationAddress();
|
|
50
|
+
const nonce = this.nonceProvider?.reserveNonce();
|
|
51
|
+
const newImplementationAddress = await hardhat_1.upgrades.prepareUpgrade(await hardhat_1.ethers.resolveAddress(this.proxyAddress), contractFactory, {
|
|
52
|
+
"timeout": deployTimeout,
|
|
53
|
+
"txOverrides": {
|
|
54
|
+
nonce
|
|
55
|
+
},
|
|
56
|
+
"unsafeAllowLinkedLibraries": true,
|
|
57
|
+
"unsafeAllowRenames": true
|
|
58
|
+
});
|
|
59
|
+
if (newImplementationAddress === currentImplementationAddress) {
|
|
60
|
+
console.log(chalk_1.default.gray(`Contract ${this.contractName} is up to date`));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.newImplementationAddress = newImplementationAddress;
|
|
64
|
+
}
|
|
65
|
+
if (nonce) {
|
|
66
|
+
this.nonceProvider?.releaseNonce(nonce);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.ProxyUpgrader = ProxyUpgrader;
|
|
71
|
+
//# sourceMappingURL=proxyUpgrader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxyUpgrader.js","sourceRoot":"","sources":["../../src/proxyUpgrader.ts"],"names":[],"mappings":";;;;;;AACA,qCAAyC;AAEzC,kDAA0B;AAC1B,uDAAsE;AAGtE,gCAAgC;AAChC,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,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;IASD,UAAU;IAEF,KAAK,CAAC,cAAc,CAAC,eAAgC;QACzD,MAAM,4BAA4B,GAAG,MAAM,IAAI,CAAC,+BAA+B,EAAE,CAAC;QAElF,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,aAAa;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,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,gBAAgB,CAAC,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QAC7D,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;CACJ;AA7FD,sCA6FC"}
|
package/dist/src/upgrader.d.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
import { Transaction } from "ethers";
|
|
2
|
-
import { Project } from "./types/upgrader";
|
|
3
1
|
import { Instance } from "@skalenetwork/skale-contracts-ethers-v6";
|
|
2
|
+
import { NonceProvider } from "./nonceProvider";
|
|
3
|
+
import { Project } from "./types/upgrader";
|
|
4
|
+
import { ProxyUpgrader } from "./proxyUpgrader";
|
|
4
5
|
import { Submitter } from "./submitters/submitter";
|
|
6
|
+
import { Transaction } from "ethers";
|
|
5
7
|
export declare abstract class Upgrader {
|
|
6
8
|
private targetVersion;
|
|
7
9
|
private contractNamesToUpgrade;
|
|
8
10
|
private projectName;
|
|
9
11
|
private submitter;
|
|
10
|
-
private nonceProvider?;
|
|
11
12
|
private deploySemaphore;
|
|
13
|
+
private proxyUpgraders;
|
|
14
|
+
protected nonceProvider?: NonceProvider;
|
|
12
15
|
protected instance: Instance;
|
|
13
16
|
protected transactions: Transaction[];
|
|
14
17
|
constructor(project: Project, submitter?: Submitter);
|
|
@@ -16,18 +19,20 @@ export declare abstract class Upgrader {
|
|
|
16
19
|
abstract setVersion: (newVersion: string) => Promise<void>;
|
|
17
20
|
deployNewContracts?: () => Promise<void>;
|
|
18
21
|
initialize?: () => Promise<void>;
|
|
22
|
+
protected createProxyUpgrader(contractName: string): Promise<ProxyUpgrader>;
|
|
19
23
|
upgrade(): Promise<void>;
|
|
20
24
|
getOwner(): Promise<string>;
|
|
25
|
+
private upgradeOldContracts;
|
|
26
|
+
private getChangedContracts;
|
|
27
|
+
private createProxyUpgraders;
|
|
21
28
|
private callInitialize;
|
|
22
29
|
private callDeployNewContracts;
|
|
23
30
|
private prepareVersion;
|
|
24
31
|
private writeTransactions;
|
|
25
|
-
private
|
|
32
|
+
private verify;
|
|
26
33
|
private switchToNewImplementations;
|
|
27
34
|
private deployNewImplementations;
|
|
28
35
|
private protectedDeployNewImplementation;
|
|
29
|
-
private deployNewImplementation;
|
|
30
|
-
private prepareUpgrade;
|
|
31
36
|
private getNormalizedDeployedVersion;
|
|
32
37
|
private checkVersion;
|
|
33
38
|
}
|
package/dist/src/upgrader.js
CHANGED
|
@@ -5,25 +5,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Upgrader = void 0;
|
|
7
7
|
const hardhat_1 = require("hardhat");
|
|
8
|
-
const
|
|
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
|
+
const transparentProxyUpgrader_1 = require("./upgraders/transparentProxyUpgrader");
|
|
14
|
+
const v4TransparentProxyUpgrader_1 = require("./upgraders/v4TransparentProxyUpgrader");
|
|
13
15
|
const chalk_1 = __importDefault(require("chalk"));
|
|
14
16
|
const fs_1 = require("fs");
|
|
15
|
-
const contractFactory_1 = require("./contractFactory");
|
|
16
|
-
const upgrades_core_1 = require("@openzeppelin/upgrades-core");
|
|
17
17
|
const version_1 = require("./version");
|
|
18
18
|
const verification_1 = require("./verification");
|
|
19
19
|
const withoutNull = (array) => array.
|
|
20
20
|
filter((element) => element !== null);
|
|
21
21
|
// TODO: Set to 8 when upgrade plugins become thread safe
|
|
22
22
|
const maxSimultaneousDeployments = 1;
|
|
23
|
-
// 10 minutes
|
|
24
|
-
const deployTimeout = 60e4;
|
|
25
23
|
class Upgrader {
|
|
26
24
|
constructor(project, submitter) {
|
|
25
|
+
this.proxyUpgraders = [];
|
|
27
26
|
this.targetVersion = project.version;
|
|
28
27
|
if (!project.version.includes("-")) {
|
|
29
28
|
this.targetVersion = `${project.version}-stable.0`;
|
|
@@ -35,24 +34,46 @@ class Upgrader {
|
|
|
35
34
|
this.submitter = submitter ?? new auto_submitter_1.AutoSubmitter(this);
|
|
36
35
|
this.deploySemaphore = new semaphore_async_await_1.default(maxSimultaneousDeployments);
|
|
37
36
|
}
|
|
37
|
+
async createProxyUpgrader(contractName) {
|
|
38
|
+
const proxyAddress = await this.instance.getContractAddress(contractName);
|
|
39
|
+
const proxyAdmin = await abstractTransparentProxyUpgrader_1.AbstractTransparentProxyUpgrader.getProxyAdmin(proxyAddress);
|
|
40
|
+
const proxyAdminVersion = await abstractTransparentProxyUpgrader_1.AbstractTransparentProxyUpgrader.getProxyAdminVersion(proxyAdmin);
|
|
41
|
+
const defaultProxyAdminVersion = "5.0.0";
|
|
42
|
+
if (proxyAdminVersion === defaultProxyAdminVersion) {
|
|
43
|
+
console.log(chalk_1.default.gray(`${contractName} uses ProxyAdmin version ${proxyAdminVersion}`));
|
|
44
|
+
return new transparentProxyUpgrader_1.TransparentProxyUpgrader({
|
|
45
|
+
contractName,
|
|
46
|
+
nonceProvider: this.nonceProvider,
|
|
47
|
+
proxyAddress,
|
|
48
|
+
proxyAdmin
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else if (proxyAdminVersion === null) {
|
|
52
|
+
console.log(chalk_1.default.gray(`${contractName} uses old ProxyAdmin (v4 or lower)`));
|
|
53
|
+
return new v4TransparentProxyUpgrader_1.V4TransparentProxyUpgrader({
|
|
54
|
+
contractName,
|
|
55
|
+
nonceProvider: this.nonceProvider,
|
|
56
|
+
proxyAddress,
|
|
57
|
+
proxyAdmin
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
throw new Error(`Unsupported ProxyAdmin version: ${proxyAdminVersion}`);
|
|
61
|
+
}
|
|
38
62
|
// Public
|
|
39
63
|
async upgrade() {
|
|
40
64
|
const version = await this.prepareVersion();
|
|
41
65
|
await this.callDeployNewContracts();
|
|
42
|
-
|
|
43
|
-
await this.switchToNewImplementations(contractsToUpgrade);
|
|
66
|
+
await this.upgradeOldContracts();
|
|
44
67
|
await this.callInitialize();
|
|
45
68
|
// Write version
|
|
46
69
|
await this.setVersion(version);
|
|
47
70
|
await this.writeTransactions(version);
|
|
48
71
|
await this.submitter.submit(this.transactions);
|
|
49
|
-
await
|
|
72
|
+
await this.verify();
|
|
50
73
|
console.log("Done");
|
|
51
74
|
}
|
|
52
75
|
async getOwner() {
|
|
53
|
-
const
|
|
54
|
-
const admins = await Promise.all(proxyAddresses.map((proxy) => (0, proxyAdmin_1.getProxyAdmin)(proxy)));
|
|
55
|
-
const owners = await Promise.all(admins.map((admin) => admin.owner()));
|
|
76
|
+
const owners = await Promise.all(this.proxyUpgraders.map((upgrader) => upgrader.getOwner()));
|
|
56
77
|
return owners.reduce((owner1, owner2) => {
|
|
57
78
|
if (owner1 !== owner2) {
|
|
58
79
|
throw Error("Proxies have different owners");
|
|
@@ -60,9 +81,24 @@ class Upgrader {
|
|
|
60
81
|
return owner1;
|
|
61
82
|
});
|
|
62
83
|
}
|
|
84
|
+
async upgradeOldContracts() {
|
|
85
|
+
await this.createProxyUpgraders();
|
|
86
|
+
await this.deployNewImplementations();
|
|
87
|
+
await this.switchToNewImplementations();
|
|
88
|
+
}
|
|
63
89
|
// Private
|
|
90
|
+
getChangedContracts() {
|
|
91
|
+
return this.proxyUpgraders.filter((upgrader) => upgrader.needsUpgrade());
|
|
92
|
+
}
|
|
93
|
+
async createProxyUpgraders() {
|
|
94
|
+
this.proxyUpgraders = await Promise.all(this.contractNamesToUpgrade.map(this.createProxyUpgrader, this));
|
|
95
|
+
}
|
|
64
96
|
async callInitialize() {
|
|
65
|
-
if (typeof this.initialize
|
|
97
|
+
if (typeof this.initialize === "undefined") {
|
|
98
|
+
console.log(chalk_1.default.gray("No initialize function defined, skipping"));
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
console.log("Generating initialize transaction(s)");
|
|
66
102
|
await this.initialize();
|
|
67
103
|
}
|
|
68
104
|
}
|
|
@@ -82,72 +118,36 @@ class Upgrader {
|
|
|
82
118
|
const indentation = 4;
|
|
83
119
|
await fs_1.promises.writeFile(`data/transactions-${version}-${hardhat_1.network.name}.json`, JSON.stringify(this.transactions, null, indentation));
|
|
84
120
|
}
|
|
85
|
-
|
|
121
|
+
async verify() {
|
|
86
122
|
if (process.env.NO_VERIFY) {
|
|
87
123
|
console.log("Skip verification");
|
|
88
124
|
}
|
|
89
125
|
else {
|
|
90
126
|
console.log("Start verification");
|
|
91
|
-
await Promise.all(
|
|
127
|
+
await Promise.all(this.getChangedContracts().map((upgrader) => (0, verification_1.verify)(upgrader.getContractName(), upgrader.getNewImplementationAddress())));
|
|
92
128
|
}
|
|
93
129
|
}
|
|
94
|
-
async switchToNewImplementations(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
` to ${contract.implementationAddress}`;
|
|
100
|
-
console.log(chalk_1.default.yellowBright(infoMessage));
|
|
101
|
-
this.transactions.push(upgradeTransactions[index]);
|
|
102
|
-
});
|
|
130
|
+
async switchToNewImplementations() {
|
|
131
|
+
this.transactions = [
|
|
132
|
+
...this.transactions,
|
|
133
|
+
...await Promise.all(this.getChangedContracts().map((upgrader) => upgrader.getUpgradeTransaction()))
|
|
134
|
+
];
|
|
103
135
|
}
|
|
104
136
|
async deployNewImplementations() {
|
|
105
137
|
const [deployer] = await hardhat_1.ethers.getSigners();
|
|
106
138
|
this.nonceProvider ?? (this.nonceProvider = await nonceProvider_1.NonceProvider.createForWallet(deployer));
|
|
107
|
-
const contracts = await Promise.all(this.
|
|
108
|
-
map(this.protectedDeployNewImplementation, this));
|
|
139
|
+
const contracts = await Promise.all(this.proxyUpgraders.
|
|
140
|
+
map((upgrader) => this.protectedDeployNewImplementation(upgrader), this));
|
|
109
141
|
return withoutNull(contracts);
|
|
110
142
|
}
|
|
111
|
-
async protectedDeployNewImplementation(
|
|
143
|
+
async protectedDeployNewImplementation(upgrader) {
|
|
112
144
|
await this.deploySemaphore.acquire();
|
|
113
|
-
let result = null;
|
|
114
145
|
try {
|
|
115
|
-
|
|
146
|
+
await upgrader.deployNewImplementation();
|
|
116
147
|
}
|
|
117
148
|
finally {
|
|
118
149
|
this.deploySemaphore.release();
|
|
119
150
|
}
|
|
120
|
-
return result;
|
|
121
|
-
}
|
|
122
|
-
async deployNewImplementation(contract) {
|
|
123
|
-
const contractFactory = await (0, contractFactory_1.getContractFactoryAndUpdateManifest)(contract, this.nonceProvider);
|
|
124
|
-
const proxyAddress = await (await this.instance.getContract(contract)).getAddress();
|
|
125
|
-
console.log(`Prepare upgrade of ${contract}`);
|
|
126
|
-
return this.prepareUpgrade(contract, proxyAddress, contractFactory);
|
|
127
|
-
}
|
|
128
|
-
async prepareUpgrade(contractName, proxyAddress, contractFactory) {
|
|
129
|
-
const currentImplementationAddress = await (0, upgrades_core_1.getImplementationAddress)(hardhat_1.network.provider, proxyAddress);
|
|
130
|
-
const nonce = this.nonceProvider?.reserveNonce();
|
|
131
|
-
const newImplementationAddress = await hardhat_1.upgrades.prepareUpgrade(proxyAddress, contractFactory, {
|
|
132
|
-
"timeout": deployTimeout,
|
|
133
|
-
"txOverrides": {
|
|
134
|
-
nonce
|
|
135
|
-
},
|
|
136
|
-
"unsafeAllowLinkedLibraries": true,
|
|
137
|
-
"unsafeAllowRenames": true
|
|
138
|
-
});
|
|
139
|
-
if (newImplementationAddress !== currentImplementationAddress) {
|
|
140
|
-
return {
|
|
141
|
-
"implementationAddress": newImplementationAddress,
|
|
142
|
-
"name": contractName,
|
|
143
|
-
proxyAddress
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
console.log(chalk_1.default.gray(`Contract ${contractName} is up to date`));
|
|
147
|
-
if (nonce) {
|
|
148
|
-
this.nonceProvider?.releaseNonce(nonce);
|
|
149
|
-
}
|
|
150
|
-
return null;
|
|
151
151
|
}
|
|
152
152
|
async getNormalizedDeployedVersion() {
|
|
153
153
|
const deployedVersion = await this.getDeployedVersion();
|
package/dist/src/upgrader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrader.js","sourceRoot":"","sources":["../../src/upgrader.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"upgrader.js","sourceRoot":"","sources":["../../src/upgrader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AddressLike, Contract } from "ethers";
|
|
2
|
+
import { NonceProvider } from "../nonceProvider";
|
|
3
|
+
import { ProxyUpgrader } from "../proxyUpgrader";
|
|
4
|
+
interface TransparentProxyUpgraderConstructorArguments {
|
|
5
|
+
contractName: string;
|
|
6
|
+
proxyAddress: AddressLike;
|
|
7
|
+
proxyAdmin: Contract;
|
|
8
|
+
nonceProvider?: NonceProvider;
|
|
9
|
+
}
|
|
10
|
+
export declare abstract class AbstractTransparentProxyUpgrader extends ProxyUpgrader {
|
|
11
|
+
protected proxyAdmin: Contract;
|
|
12
|
+
constructor(options: TransparentProxyUpgraderConstructorArguments);
|
|
13
|
+
getOwner(): Promise<string>;
|
|
14
|
+
static getProxyAdmin(proxy: AddressLike): Promise<Contract>;
|
|
15
|
+
static getProxyAdminVersion(proxyAdmin: Contract): Promise<string | null>;
|
|
16
|
+
static isNewProxyAdmin(proxyAdmin: Contract): Promise<boolean>;
|
|
17
|
+
protected getCurrentImplementationAddress(): Promise<AddressLike>;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -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 chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const upgrades_core_1 = require("@openzeppelin/upgrades-core");
|
|
11
|
+
class AbstractTransparentProxyUpgrader extends proxyUpgrader_1.ProxyUpgrader {
|
|
12
|
+
constructor(options) {
|
|
13
|
+
super(options.contractName, options.proxyAddress, options.nonceProvider);
|
|
14
|
+
this.proxyAdmin = options.proxyAdmin;
|
|
15
|
+
}
|
|
16
|
+
async getOwner() {
|
|
17
|
+
return await this.proxyAdmin.owner();
|
|
18
|
+
}
|
|
19
|
+
static async getProxyAdmin(proxy) {
|
|
20
|
+
const proxyAdminAddress = await hardhat_1.upgrades.erc1967.getAdminAddress(await hardhat_1.ethers.resolveAddress(proxy));
|
|
21
|
+
const generalProxyAdminAbi = [
|
|
22
|
+
"function UPGRADE_INTERFACE_VERSION() view returns (string)",
|
|
23
|
+
"function upgrade(address,address)",
|
|
24
|
+
"function upgradeAndCall(address,address,bytes) payable",
|
|
25
|
+
"function owner() view returns (address)"
|
|
26
|
+
];
|
|
27
|
+
return new hardhat_1.ethers.Contract(proxyAdminAddress, generalProxyAdminAbi, await hardhat_1.ethers.provider.getSigner());
|
|
28
|
+
}
|
|
29
|
+
static async getProxyAdminVersion(proxyAdmin) {
|
|
30
|
+
try {
|
|
31
|
+
// This function name is set in external library
|
|
32
|
+
// eslint-disable-next-line new-cap
|
|
33
|
+
return await proxyAdmin.UPGRADE_INTERFACE_VERSION();
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
static async isNewProxyAdmin(proxyAdmin) {
|
|
40
|
+
try {
|
|
41
|
+
console.log(chalk_1.default.gray(`ProxyAdmin version ${
|
|
42
|
+
// This function name is set in external library
|
|
43
|
+
// eslint-disable-next-line new-cap
|
|
44
|
+
await proxyAdmin.UPGRADE_INTERFACE_VERSION()}`));
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
console.log(chalk_1.default.gray("Use old ProxyAdmin"));
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async getCurrentImplementationAddress() {
|
|
53
|
+
return await (0, upgrades_core_1.getImplementationAddress)(hardhat_1.network.provider, await hardhat_1.ethers.resolveAddress(this.proxyAddress));
|
|
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,qCAAkD;AAElD,oDAA+C;AAC/C,kDAA0B;AAC1B,+DAAqE;AASrE,MAAsB,gCAAiC,SAAQ,6BAAa;IAGxE,YACI,OAAqD;QAErD,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,QAAQ;QACjB,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAkB;QAChD,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;IAEM,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,UAAoB;QACzD,IAAI,CAAC;YACD,gDAAgD;YAChD,mCAAmC;YACnC,OAAO,MAAM,UAAU,CAAC,yBAAyB,EAAY,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,UAAoB;QACpD,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;IAES,KAAK,CAAC,+BAA+B;QAC3C,OAAO,MAAM,IAAA,wCAAwB,EACjC,iBAAO,CAAC,QAAQ,EAChB,MAAM,gBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CACjD,CAAC;IACN,CAAC;CACJ;AA7DD,4EA6DC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AddressLike, Transaction } from "ethers";
|
|
2
|
+
import { ProxyUpgrader } from "../proxyUpgrader";
|
|
3
|
+
export declare class BeaconUpgrader extends ProxyUpgrader {
|
|
4
|
+
getOwner(): Promise<string>;
|
|
5
|
+
protected makeUpgradeTransaction(): Promise<Transaction>;
|
|
6
|
+
protected getCurrentImplementationAddress(): Promise<AddressLike>;
|
|
7
|
+
private getBeacon;
|
|
8
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BeaconUpgrader = void 0;
|
|
4
|
+
const ethers_1 = require("ethers");
|
|
5
|
+
const proxyUpgrader_1 = require("../proxyUpgrader");
|
|
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
|
+
// Protected
|
|
22
|
+
async getCurrentImplementationAddress() {
|
|
23
|
+
const beacon = await this.getBeacon();
|
|
24
|
+
return await beacon.implementation();
|
|
25
|
+
}
|
|
26
|
+
// Private
|
|
27
|
+
async getBeacon() {
|
|
28
|
+
const generalUpgradeableBeaconAbi = [
|
|
29
|
+
"function implementation() view returns (address)",
|
|
30
|
+
"function owner() view returns (address)",
|
|
31
|
+
"function upgradeTo(address newImplementation)",
|
|
32
|
+
];
|
|
33
|
+
return new hardhat_1.ethers.Contract(await hardhat_1.ethers.resolveAddress(this.proxyAddress), generalUpgradeableBeaconAbi, await hardhat_1.ethers.provider.getSigner());
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.BeaconUpgrader = BeaconUpgrader;
|
|
37
|
+
//# sourceMappingURL=beaconUpgrader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beaconUpgrader.js","sourceRoot":"","sources":["../../../src/upgraders/beaconUpgrader.ts"],"names":[],"mappings":";;;AAAA,mCAAgD;AAChD,oDAA+C;AAC/C,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,YAAY;IAEF,KAAK,CAAC,+BAA+B;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;IACzC,CAAC;IAED,UAAU;IAEF,KAAK,CAAC,SAAS;QACnB,MAAM,2BAA2B,GAAG;YAChC,kDAAkD;YAClD,yCAAyC;YACzC,+CAA+C;SAClD,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;AAxCD,wCAwCC"}
|
|
@@ -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
|
-
|
|
1
|
+
import { AddressLike } from "ethers";
|
|
2
|
+
export declare const verify: (contractName: string, contractAddress: AddressLike) => Promise<void>;
|
|
2
3
|
export declare const verifyProxy: (contractName: string, proxyAddress: string) => Promise<void>;
|
package/dist/src/verification.js
CHANGED
|
@@ -69,8 +69,9 @@ const setupVerifiers = async () => {
|
|
|
69
69
|
};
|
|
70
70
|
const verify = async (contractName, contractAddress) => {
|
|
71
71
|
await setupVerifiers();
|
|
72
|
+
const contractAddressString = await hardhat_1.ethers.resolveAddress(contractAddress);
|
|
72
73
|
await Promise.all(verifiers.map(verifier => verifier.verify({
|
|
73
|
-
contractAddress,
|
|
74
|
+
contractAddress: contractAddressString,
|
|
74
75
|
contractName
|
|
75
76
|
})));
|
|
76
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/verification.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAwC;
|
|
1
|
+
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/verification.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/dist/src/proxyAdmin.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { AddressLike, Contract, Transaction } from "ethers";
|
|
2
|
-
export declare const getProxyAdmin: (proxy: AddressLike) => Promise<Contract>;
|
|
3
|
-
export declare const isNewProxyAdmin: (proxyAdmin: Contract) => Promise<boolean>;
|
|
4
|
-
export declare const getUpgradeTransaction: (proxy: AddressLike, implementation: AddressLike) => Promise<Transaction>;
|
package/dist/src/proxyAdmin.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
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.getUpgradeTransaction = exports.isNewProxyAdmin = exports.getProxyAdmin = void 0;
|
|
7
|
-
const ethers_1 = require("ethers");
|
|
8
|
-
const hardhat_1 = require("hardhat");
|
|
9
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
-
const getProxyAdmin = async (proxy) => {
|
|
11
|
-
const proxyAdminAddress = await hardhat_1.upgrades.erc1967.getAdminAddress(await hardhat_1.ethers.resolveAddress(proxy));
|
|
12
|
-
const generalProxyAdminAbi = [
|
|
13
|
-
"function UPGRADE_INTERFACE_VERSION() view returns (string)",
|
|
14
|
-
"function upgrade(address,address)",
|
|
15
|
-
"function upgradeAndCall(address,address,bytes) payable",
|
|
16
|
-
"function owner() view returns (address)"
|
|
17
|
-
];
|
|
18
|
-
return new hardhat_1.ethers.Contract(proxyAdminAddress, generalProxyAdminAbi, await hardhat_1.ethers.provider.getSigner());
|
|
19
|
-
};
|
|
20
|
-
exports.getProxyAdmin = getProxyAdmin;
|
|
21
|
-
const isNewProxyAdmin = async (proxyAdmin) => {
|
|
22
|
-
try {
|
|
23
|
-
console.log(chalk_1.default.gray(`ProxyAdmin version ${
|
|
24
|
-
// This function name is set in external library
|
|
25
|
-
// eslint-disable-next-line new-cap
|
|
26
|
-
await proxyAdmin.UPGRADE_INTERFACE_VERSION()}`));
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
console.log(chalk_1.default.gray("Use old ProxyAdmin"));
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
exports.isNewProxyAdmin = isNewProxyAdmin;
|
|
35
|
-
const getUpgradeTransaction = async (proxy, implementation) => {
|
|
36
|
-
const proxyAdmin = await (0, exports.getProxyAdmin)(proxy);
|
|
37
|
-
if (await (0, exports.isNewProxyAdmin)(proxyAdmin)) {
|
|
38
|
-
return ethers_1.Transaction.from({
|
|
39
|
-
"data": proxyAdmin.interface.encodeFunctionData("upgradeAndCall", [
|
|
40
|
-
await hardhat_1.ethers.resolveAddress(proxy),
|
|
41
|
-
await hardhat_1.ethers.resolveAddress(implementation),
|
|
42
|
-
"0x"
|
|
43
|
-
]),
|
|
44
|
-
"to": await hardhat_1.ethers.resolveAddress(proxyAdmin)
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
return ethers_1.Transaction.from({
|
|
48
|
-
"data": proxyAdmin.interface.encodeFunctionData("upgrade", [
|
|
49
|
-
await hardhat_1.ethers.resolveAddress(proxy),
|
|
50
|
-
await hardhat_1.ethers.resolveAddress(implementation),
|
|
51
|
-
]),
|
|
52
|
-
"to": await hardhat_1.ethers.resolveAddress(proxyAdmin)
|
|
53
|
-
});
|
|
54
|
-
};
|
|
55
|
-
exports.getUpgradeTransaction = getUpgradeTransaction;
|
|
56
|
-
//# sourceMappingURL=proxyAdmin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proxyAdmin.js","sourceRoot":"","sources":["../../src/proxyAdmin.ts"],"names":[],"mappings":";;;;;;AAAA,mCAA0D;AAC1D,qCAAyC;AACzC,kDAA0B;AAEnB,MAAM,aAAa,GAAG,KAAK,EAAE,KAAkB,EAAE,EAAE;IACtD,MAAM,iBAAiB,GAAG,MAAM,kBAAQ,CAAC,OAAO,CAAC,eAAe,CAC5D,MAAM,gBAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CACrC,CAAC;IACF,MAAM,oBAAoB,GAAG;QACzB,4DAA4D;QAC5D,mCAAmC;QACnC,wDAAwD;QACxD,yCAAyC;KAC5C,CAAC;IACF,OAAO,IAAI,gBAAM,CAAC,QAAQ,CACtB,iBAAiB,EACjB,oBAAoB,EACpB,MAAM,gBAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CACpC,CAAC;AACN,CAAC,CAAA;AAfY,QAAA,aAAa,iBAezB;AAEM,MAAM,eAAe,GAAG,KAAK,EAAE,UAAoB,EAAE,EAAE;IAC1D,IAAI,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB;QACzC,gDAAgD;QAChD,mCAAmC;QACnC,MAAM,UAAU,CAAC,yBAAyB,EAC9C,EAAE,CAAC,CAAC,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC,CAAA;AAZY,QAAA,eAAe,mBAY3B;AAEM,MAAM,qBAAqB,GAAG,KAAK,EAAE,KAAkB,EAAE,cAA2B,EAAE,EAAE;IAC3F,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,MAAM,IAAA,uBAAe,EAAC,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO,oBAAW,CAAC,IAAI,CAAC;YACpB,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAC3C,gBAAgB,EAChB;gBACI,MAAM,gBAAM,CAAC,cAAc,CAAC,KAAK,CAAC;gBAClC,MAAM,gBAAM,CAAC,cAAc,CAAC,cAAc,CAAC;gBAC3C,IAAI;aACP,CACJ;YACD,IAAI,EAAE,MAAM,gBAAM,CAAC,cAAc,CAAC,UAAU,CAAC;SAChD,CAAC,CAAC;IACP,CAAC;IACD,OAAO,oBAAW,CAAC,IAAI,CAAC;QACpB,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAC3C,SAAS,EACT;YACI,MAAM,gBAAM,CAAC,cAAc,CAAC,KAAK,CAAC;YAClC,MAAM,gBAAM,CAAC,cAAc,CAAC,cAAc,CAAC;SAC9C,CACJ;QACD,IAAI,EAAE,MAAM,gBAAM,CAAC,cAAc,CAAC,UAAU,CAAC;KAChD,CAAC,CAAC;AACP,CAAC,CAAA;AAzBY,QAAA,qBAAqB,yBAyBjC"}
|