@skalenetwork/upgrade-tools 4.0.0-update-verify.5 → 4.0.0-update-gnosis-service.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/src/contractVerifier.d.ts +23 -12
- package/dist/src/contractVerifier.js +47 -43
- package/dist/src/contractVerifier.js.map +1 -1
- package/dist/src/gnosis-safe.js +6 -37
- package/dist/src/gnosis-safe.js.map +1 -1
- 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 +72 -0
- package/dist/src/proxyUpgrader.js.map +1 -0
- package/dist/src/upgrader.d.ts +11 -6
- package/dist/src/upgrader.js +61 -61
- 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 -17
- package/dist/src/verification.js +55 -206
- package/dist/src/verification.js.map +1 -1
- 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/package.json +4 -4
- 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/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":";;;;;;AAAA,qCAAwC;AACxC,mGAA8F;AAC9F,gEAA0D;AAC1D,2CAAuC;AAEvC,mDAA8C;AAG9C,kFAA8C;AAG9C,mFAA8E;AAC9E,uFAAkF;AAClF,kDAA0B;AAC1B,2BAAkC;AAClC,uCAAqC;AACrC,iDAAsC;AAGtC,MAAM,WAAW,GAAG,CAAI,KAAsB,EAAE,EAAE,CAAC,KAAK;IACpD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAa,CAAC;AAEtD,yDAAyD;AACzD,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAErC,MAAsB,QAAQ;IAY1B,YACI,OAAgB,EAChB,SAAqB;QARjB,mBAAc,GAAoB,EAAE,CAAC;QAUzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,GAAG,OAAO,CAAC,OAAO,WAAW,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,8BAAa,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,eAAe,GAAG,IAAI,+BAAS,CAAC,0BAA0B,CAAC,CAAC;IACrE,CAAC;IAcS,KAAK,CAAC,mBAAmB,CAAC,YAAoB;QACpD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,MAAM,mEAAgC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACtF,MAAM,iBAAiB,GAAG,MAAM,mEAAgC,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAClG,MAAM,wBAAwB,GAAG,OAAO,CAAC;QACzC,IAAI,iBAAiB,KAAK,wBAAwB,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,YAAY,4BAA4B,iBAAiB,EAAE,CAAC,CAAC,CAAC;YACxF,OAAO,IAAI,mDAAwB,CAAC;gBAChC,YAAY;gBACZ,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,YAAY;gBACZ,UAAU;aACb,CAAkB,CAAC;QACxB,CAAC;aAAM,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,YAAY,oCAAoC,CAAC,CAAC,CAAC;YAC7E,OAAO,IAAI,uDAA0B,CAAC;gBAClC,YAAY;gBACZ,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,YAAY;gBACZ,UAAU;aACb,CAAkB,CAAC;QACxB,CAAC;QACD,MAAM,IAAI,KAAK,CACX,mCAAmC,iBAAiB,EAAE,CACzD,CAAC;IACN,CAAC;IAED,SAAS;IAET,KAAK,CAAC,OAAO;QACT,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACpC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,gBAAgB;QAChB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5B,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CACpC,CACJ,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC7B,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAC5C,CAAC;IAED,UAAU;IAEF,mBAAmB;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAC7B,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,CACxC,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAC9B,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,gBAAM,CAAC,UAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,aAAa,KAAlB,IAAI,CAAC,aAAa,GAAK,MAAM,6BAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAC;QACrE,IAAI,CAAC,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAC3B,IAAI,CAAC,mBAAmB,EACxB,IAAI,CACP,CACJ,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,cAAc;QACxB,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACpD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAChC,IAAI,OAAO,IAAI,CAAC,kBAAkB,KAAK,WAAW,EAAE,CAAC;YACjD,uBAAuB;YACvB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACpC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,cAAc;QACxB,MAAM,OAAO,GAAG,MAAM,IAAA,oBAAU,GAAE,CAAC;QACnC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACvD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAE,OAAe;QAC5C,MAAM,WAAW,GAAG,CAAC,CAAC;QACtB,MAAM,aAAE,CAAC,SAAS,CACd,qBAAqB,OAAO,IAAI,iBAAO,CAAC,IAAI,OAAO,EACnD,IAAI,CAAC,SAAS,CACV,IAAI,CAAC,YAAY,EACjB,IAAI,EACJ,WAAW,CACd,CACJ,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,MAAM;QAChB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,MAAM,OAAO,CAAC,GAAG,CACb,IAAI,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAC1B,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAA,qBAAM,EAChB,QAAQ,CAAC,eAAe,EAAE,EAC1B,QAAQ,CAAC,2BAA2B,EAAE,CACzC,CACJ,CACJ,CAAC;QACN,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,0BAA0B;QACpC,IAAI,CAAC,YAAY,GAAG;YAChB,GAAG,IAAI,CAAC,YAAY;YACpB,GAAG,MAAM,OAAO,CAAC,GAAG,CAChB,IAAI,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAC1B,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CACjD,CACJ;SACJ,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,wBAAwB;QAClC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc;YACnD,GAAG,CACC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,EAC7D,IAAI,CACP,CAAC,CAAC;QACP,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,gCAAgC,CAAE,QAAuB;QACnE,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC;YACD,MAAM,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QAC7C,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QACnC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,4BAA4B;QACtC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxD,IAAI,eAAe,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO,GAAG,eAAe,WAAW,CAAC;YACzC,CAAC;YACD,OAAO,eAAe,CAAC;QAC3B,CAAC;QACD,OAAO,eAAe,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,YAAY,CAAE,OAAe;QACvC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAClE,IAAI,eAAe,EAAE,CAAC;YAClB,IAAI,eAAe,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzC,MAAM,oBAAoB,GACtB,qCAAqC,eAAe,EAAE;oBACtD,OAAO,OAAO,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,kBAAkB,GACpB,6CAA6C,IAAI,CAAC,WAAW,EAAE,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;CACJ;AApOD,4BAoOC"}
|
|
@@ -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,18 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
contractAddress: string;
|
|
4
|
-
explorerUrls: {
|
|
5
|
-
browserURL: string;
|
|
6
|
-
apiURL: string;
|
|
7
|
-
};
|
|
8
|
-
isEtherscan?: boolean;
|
|
9
|
-
chainId?: number;
|
|
10
|
-
}
|
|
11
|
-
export declare const isVerifiedOnBlockscout: (apiURL: string, address: string) => Promise<boolean>;
|
|
12
|
-
export declare const getVerifyParameters: (contractName: string) => Promise<{
|
|
13
|
-
compilerVersion: string;
|
|
14
|
-
fullContractName: string;
|
|
15
|
-
solcInputJson: string;
|
|
16
|
-
}>;
|
|
17
|
-
export declare const verify: (contractName: string, contractAddress: string) => Promise<void>;
|
|
1
|
+
import { AddressLike } from "ethers";
|
|
2
|
+
export declare const verify: (contractName: string, contractAddress: AddressLike) => Promise<void>;
|
|
18
3
|
export declare const verifyProxy: (contractName: string, proxyAddress: string) => Promise<void>;
|
package/dist/src/verification.js
CHANGED
|
@@ -3,228 +3,77 @@ 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.verifyProxy = exports.verify =
|
|
6
|
+
exports.verifyProxy = exports.verify = void 0;
|
|
7
7
|
const hardhat_1 = require("hardhat");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const blockscoutVerifier_1 = require("./verifiers/blockscoutVerifier");
|
|
9
|
+
const etherscanVerifier_1 = require("./verifiers/etherscanVerifier");
|
|
10
|
+
const skaleBlockscoutVerifier_1 = require("./verifiers/skaleBlockscoutVerifier");
|
|
10
11
|
const chalk_1 = __importDefault(require("chalk"));
|
|
11
12
|
const upgrades_core_1 = require("@openzeppelin/upgrades-core");
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const MAX_CONCURRENCY = 1;
|
|
17
|
-
const BASE_EXPLORER_URLS = {
|
|
18
|
-
legacy: "legacy-explorer.skalenodes.com",
|
|
19
|
-
mainnet: "explorer.mainnet.skalenodes.com",
|
|
20
|
-
testnet: "explorer.testnet.skalenodes.com"
|
|
21
|
-
};
|
|
22
|
-
const etherscanChains = [];
|
|
23
|
-
const lock = new semaphore_async_await_1.default(MAX_CONCURRENCY);
|
|
24
|
-
const loadEtherscanSupportedChains = async () => {
|
|
25
|
-
const resp = await fetch("https://api.etherscan.io/v2/chainlist");
|
|
26
|
-
if (!resp.ok) {
|
|
27
|
-
throw new Error(`Etherscan API error: ${resp.status} ${resp.statusText}`);
|
|
28
|
-
}
|
|
29
|
-
const data = await resp.json();
|
|
30
|
-
data.result.forEach((element) => {
|
|
31
|
-
etherscanChains.push({
|
|
32
|
-
chainId: parseInt(element.chainid, 10),
|
|
33
|
-
network: element.chainname,
|
|
34
|
-
urls: {
|
|
35
|
-
apiURL: element.apiurl,
|
|
36
|
-
browserURL: element.blockexplorer
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
};
|
|
41
|
-
const safeLoadSupportedChains = async () => {
|
|
42
|
-
await lock.acquire();
|
|
43
|
-
try {
|
|
44
|
-
if (!etherscanChains.length) {
|
|
45
|
-
await loadEtherscanSupportedChains();
|
|
13
|
+
const setupEtherscan = async (chainId) => {
|
|
14
|
+
if (process.env.ETHERSCAN) {
|
|
15
|
+
if (await etherscanVerifier_1.EtherscanVerifier.isChainSupported(chainId)) {
|
|
16
|
+
return new etherscanVerifier_1.EtherscanVerifier(process.env.ETHERSCAN, chainId);
|
|
46
17
|
}
|
|
47
|
-
|
|
48
|
-
finally {
|
|
49
|
-
lock.release();
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
const blockscoutChains = [
|
|
53
|
-
{
|
|
54
|
-
chainId: 1,
|
|
55
|
-
network: "mainnet",
|
|
56
|
-
urls: {
|
|
57
|
-
apiURL: "https://eth.blockscout.com/api",
|
|
58
|
-
browserURL: "https://eth.blockscout.com",
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
chainId: 11155111,
|
|
63
|
-
network: "sepolia",
|
|
64
|
-
urls: {
|
|
65
|
-
apiURL: "https://eth-sepolia.blockscout.com/api",
|
|
66
|
-
browserURL: "https://eth-sepolia.blockscout.com",
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
chainId: 17000,
|
|
71
|
-
network: "holesky",
|
|
72
|
-
urls: {
|
|
73
|
-
apiURL: "https://eth-holesky.blockscout.com/api",
|
|
74
|
-
browserURL: "https://eth-holesky.blockscout.com",
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
chainId: 560048,
|
|
79
|
-
network: "hoodi",
|
|
80
|
-
urls: {
|
|
81
|
-
apiURL: "https://eth-hoodi.blockscout.com/api",
|
|
82
|
-
browserURL: "https://eth-hoodi.blockscout.com",
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
];
|
|
86
|
-
const pingExplorer = async (baseUrl) => {
|
|
87
|
-
const url = `${baseUrl}/api/health`;
|
|
88
|
-
try {
|
|
89
|
-
const res = await fetch(url);
|
|
90
|
-
if (!res.ok) {
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
const jsonResponse = await res.json();
|
|
94
|
-
return jsonResponse.healthy;
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
const parseEndpoint = (endpoint) => {
|
|
101
|
-
const { host, pathname } = new URL(endpoint);
|
|
102
|
-
const schainName = pathname.split("/").filter(Boolean).pop();
|
|
103
|
-
let networkType = "mainnet";
|
|
104
|
-
if (host.includes("mainnet.")) {
|
|
105
|
-
networkType = "mainnet";
|
|
106
|
-
}
|
|
107
|
-
else if (host.includes("testnet.")) {
|
|
108
|
-
networkType = "testnet";
|
|
109
|
-
}
|
|
110
|
-
else if (host.includes("legacy-proxy.")) {
|
|
111
|
-
networkType = "legacy";
|
|
18
|
+
console.log(chalk_1.default.gray(`Etherscan does not support chainId ${chainId}. Skipping verification on Etherscan.`));
|
|
112
19
|
}
|
|
113
20
|
else {
|
|
114
|
-
|
|
21
|
+
console.log(chalk_1.default.yellow(`No etherscan API key provided. Skipping verification on Etherscan.`));
|
|
115
22
|
}
|
|
116
|
-
return
|
|
23
|
+
return null;
|
|
117
24
|
};
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const { schainName, networkType } = parseEndpoint(process.env.ENDPOINT);
|
|
123
|
-
const browserURL = `https://${schainName}.${BASE_EXPLORER_URLS[networkType]}`;
|
|
124
|
-
const apiURL = `${browserURL}/api`;
|
|
125
|
-
if (!await pingExplorer(browserURL)) {
|
|
126
|
-
throw new Error(`Explorer is not reachable, set EXPLORER_URL`);
|
|
25
|
+
const setupBlockscout = (chainId) => {
|
|
26
|
+
const verifier = blockscoutVerifier_1.BlockscoutVerifier.createFromChainId(chainId);
|
|
27
|
+
if (verifier) {
|
|
28
|
+
return verifier;
|
|
127
29
|
}
|
|
128
|
-
|
|
129
|
-
};
|
|
130
|
-
const getExplorerUrls = async (chainConfig) => {
|
|
30
|
+
console.log(chalk_1.default.gray(`Blockscout API url is not known for chainId ${chainId}.`));
|
|
131
31
|
if (process.env.EXPLORER_URL) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
catch {
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
};
|
|
153
|
-
exports.isVerifiedOnBlockscout = isVerifiedOnBlockscout;
|
|
154
|
-
const getVerifyParameters = async (contractName) => {
|
|
155
|
-
if (contractName === "TransparentUpgradeableProxy") {
|
|
156
|
-
return {
|
|
157
|
-
compilerVersion: build_info_v5_json_1.default.solcLongVersion,
|
|
158
|
-
fullContractName: `${TransparentUpgradeableProxy_json_1.default.sourceName}:${contractName}`,
|
|
159
|
-
solcInputJson: JSON.stringify(build_info_v5_json_1.default.input)
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
const artifact = await hardhat_1.artifacts.readArtifact(contractName);
|
|
163
|
-
const fullContractName = `${artifact.sourceName}:${contractName}`;
|
|
164
|
-
const buildInfo = await hardhat_1.artifacts.getBuildInfo(fullContractName);
|
|
165
|
-
if (!buildInfo) {
|
|
166
|
-
throw new Error(`No build-info for ${contractName}`);
|
|
167
|
-
}
|
|
168
|
-
return {
|
|
169
|
-
compilerVersion: buildInfo.solcLongVersion,
|
|
170
|
-
fullContractName,
|
|
171
|
-
solcInputJson: JSON.stringify(buildInfo.input)
|
|
172
|
-
};
|
|
173
|
-
};
|
|
174
|
-
exports.getVerifyParameters = getVerifyParameters;
|
|
175
|
-
const verifyWithRetry = async (verificationTarget, attempts) => {
|
|
176
|
-
if (attempts) {
|
|
177
|
-
const verifier = new contractVerifier_1.ContractVerifier(verificationTarget);
|
|
178
|
-
if (!await verifier.attempt()) {
|
|
179
|
-
const failedAttempts = 1;
|
|
180
|
-
await verifyWithRetry(verificationTarget, attempts - failedAttempts);
|
|
32
|
+
console.log(chalk_1.default.gray("Using EXPLORER_URL to setup verification."));
|
|
33
|
+
return new blockscoutVerifier_1.BlockscoutVerifier(`${process.env.EXPLORER_URL}/api`, process.env.EXPLORER_URL);
|
|
34
|
+
}
|
|
35
|
+
console.log(chalk_1.default.gray("Skipping verification on Blockscout."));
|
|
36
|
+
return null;
|
|
37
|
+
};
|
|
38
|
+
const setupSkale = async () => {
|
|
39
|
+
if (process.env.ENDPOINT) {
|
|
40
|
+
try {
|
|
41
|
+
const verifier = await skaleBlockscoutVerifier_1.SkaleBlockscoutVerifier.createFromEndpoint(process.env.ENDPOINT);
|
|
42
|
+
if (verifier) {
|
|
43
|
+
return verifier;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.log(chalk_1.default.yellow(error));
|
|
181
48
|
}
|
|
182
49
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if (!process.env.ETHERSCAN) {
|
|
186
|
-
console.log(chalk_1.default.yellow(`No etherscan API key provided. Skipping verification for ${contractName}.`));
|
|
187
|
-
return;
|
|
50
|
+
else {
|
|
51
|
+
console.log(chalk_1.default.gray("ENDPOINT is not provided. Can't determine SKALE block explorer API url."));
|
|
188
52
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
chainId: chainConfig.chainId,
|
|
192
|
-
contractAddress,
|
|
193
|
-
contractName,
|
|
194
|
-
explorerUrls,
|
|
195
|
-
isEtherscan: true,
|
|
196
|
-
}, RETRIES_AMOUNT);
|
|
197
|
-
};
|
|
198
|
-
const verifyOnBlockscout = async (contractName, contractAddress, chainConfig) => {
|
|
199
|
-
const explorerUrls = await getExplorerUrls(chainConfig);
|
|
200
|
-
await verifyWithRetry({
|
|
201
|
-
contractAddress,
|
|
202
|
-
contractName,
|
|
203
|
-
explorerUrls
|
|
204
|
-
}, RETRIES_AMOUNT);
|
|
53
|
+
console.log(chalk_1.default.gray("Skipping verification on SKALE block explorer."));
|
|
54
|
+
return null;
|
|
205
55
|
};
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
56
|
+
const verifiers = [];
|
|
57
|
+
let verifiersSetup = false;
|
|
58
|
+
const setupVerifiers = async () => {
|
|
59
|
+
if (!verifiersSetup) {
|
|
60
|
+
verifiersSetup = true;
|
|
61
|
+
const { chainId } = await hardhat_1.ethers.provider.getNetwork();
|
|
62
|
+
const candidates = [
|
|
63
|
+
await setupEtherscan(chainId),
|
|
64
|
+
setupBlockscout(chainId),
|
|
65
|
+
await setupSkale()
|
|
66
|
+
];
|
|
67
|
+
verifiers.push(...candidates.filter(item => item !== null));
|
|
68
|
+
}
|
|
213
69
|
};
|
|
214
70
|
const verify = async (contractName, contractAddress) => {
|
|
215
|
-
await
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
if (etherscanConfig) {
|
|
223
|
-
await verifyOnEtherscan(contractName, contractAddress, etherscanConfig);
|
|
224
|
-
}
|
|
225
|
-
if (!etherscanConfig && !blockscoutConfig) {
|
|
226
|
-
await verifyOnSkale(contractName, contractAddress);
|
|
227
|
-
}
|
|
71
|
+
await setupVerifiers();
|
|
72
|
+
const contractAddressString = await hardhat_1.ethers.resolveAddress(contractAddress);
|
|
73
|
+
await Promise.all(verifiers.map(verifier => verifier.verify({
|
|
74
|
+
contractAddress: contractAddressString,
|
|
75
|
+
contractName
|
|
76
|
+
})));
|
|
228
77
|
};
|
|
229
78
|
exports.verify = verify;
|
|
230
79
|
const verifyProxy = async (contractName, proxyAddress) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/verification.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/verification.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAwC;AAExC,uEAAkE;AAElE,qEAAgE;AAChE,iFAA4E;AAC5E,kDAA0B;AAC1B,+DAAqE;AAGrE,MAAM,cAAc,GAAG,KAAK,EAAE,OAAe,EAAE,EAAE;IAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACxB,IAAI,MAAM,qCAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,OAAO,IAAI,qCAAiB,CACxB,OAAO,CAAC,GAAG,CAAC,SAAS,EACrB,OAAO,CACV,CAAC;QACN,CAAC;QACD,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,IAAI,CACN,sCAAsC,OAAO,uCAAuC,CACvF,CACJ,CAAC;IACN,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,MAAM,CACR,oEAAoE,CACvE,CACJ,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,EAAE;IACxC,MAAM,QAAQ,GAAG,uCAAkB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+CAA+C,OAAO,GAAG,CAAC,CAAC,CAAC;IACnF,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACrE,OAAO,IAAI,uCAAkB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC;AAChB,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,iDAAuB,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxF,IAAI,QAAQ,EAAE,CAAC;gBACX,OAAO,QAAQ,CAAC;YACpB,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,IAAI,CACN,yEAAyE,CAC5E,CACJ,CAAC;IACN,CAAC;IACD,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,IAAI,CACN,gDAAgD,CACnD,CACJ,CAAC;IACF,OAAO,IAAI,CAAC;AAChB,CAAC,CAAA;AAED,MAAM,SAAS,GAAuB,EAAE,CAAC;AACzC,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;IAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,cAAc,GAAG,IAAI,CAAC;QACtB,MAAM,EAAC,OAAO,EAAC,GAAG,MAAM,gBAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG;YACf,MAAM,cAAc,CAAC,OAAO,CAAC;YAC7B,eAAe,CAAC,OAAO,CAAC;YACxB,MAAM,UAAU,EAAE;SACrB,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;AACL,CAAC,CAAA;AAEM,MAAM,MAAM,GAAG,KAAK,EAAE,YAAoB,EAAE,eAA4B,EAAE,EAAE;IAC/E,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,qBAAqB,GAAG,MAAM,gBAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IAC3E,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxD,eAAe,EAAE,qBAAqB;QACtC,YAAY;KACf,CAAC,CAAC,CAAC,CAAC;AACT,CAAC,CAAC;AAPW,QAAA,MAAM,UAOjB;AAEK,MAAM,WAAW,GAAG,KAAK,EAAE,YAAoB,EAAE,YAAoB,EAAE,EAAE;IAC5E,MAAM,IAAA,cAAM,EACR,YAAY,EACZ,MAAM,IAAA,wCAAwB,EAC1B,iBAAO,CAAC,QAAQ,EAChB,YAAY,CACf,CACJ,CAAC;IACF,MAAM,IAAA,cAAM,EAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC;AAC9D,CAAC,CAAC;AATW,QAAA,WAAW,eAStB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ContractVerifier, VerificationRequestParameters, VerificationTarget } from "../contractVerifier";
|
|
2
|
+
import { ValidationResponse } from "@nomicfoundation/hardhat-verify/internal/utilities";
|
|
3
|
+
export declare class BlockscoutVerifier extends ContractVerifier {
|
|
4
|
+
name: string;
|
|
5
|
+
private readonly blockscout;
|
|
6
|
+
constructor(apiURL: string, browserURL: string);
|
|
7
|
+
static createFromChainId(chainId: bigint): BlockscoutVerifier | null;
|
|
8
|
+
protected isAlreadyVerified(verificationTarget: VerificationTarget): Promise<boolean>;
|
|
9
|
+
protected submitVerificationRequest(target: VerificationTarget, params: VerificationRequestParameters): Promise<ValidationResponse>;
|
|
10
|
+
protected getContractUrl(verificationTarget: VerificationTarget): string;
|
|
11
|
+
}
|