@skalenetwork/upgrade-tools 3.0.0-linter.30 → 3.0.0-linter.31
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.
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { LinkReferences } from "hardhat/types";
|
|
2
|
+
import { NonceProvider } from "./nonceProvider";
|
|
2
3
|
export declare const getLibrariesNames: (linkReferences: LinkReferences) => string[];
|
|
3
|
-
export declare const getContractFactoryAndUpdateManifest: (contract: string) => Promise<import("ethers").ContractFactory>;
|
|
4
|
+
export declare const getContractFactoryAndUpdateManifest: (contract: string, nonceProvider?: NonceProvider) => Promise<import("ethers").ContractFactory>;
|
|
@@ -69,14 +69,14 @@ const getLibrariesToUpgrade = async (manifest, linkReferences) => {
|
|
|
69
69
|
oldLibraries
|
|
70
70
|
};
|
|
71
71
|
};
|
|
72
|
-
const getContractFactoryAndUpdateManifest = async (contract) => {
|
|
72
|
+
const getContractFactoryAndUpdateManifest = async (contract, nonceProvider) => {
|
|
73
73
|
const { linkReferences } = await hardhat_1.artifacts.readArtifact(contract);
|
|
74
74
|
if (!Object.keys(linkReferences).length) {
|
|
75
75
|
return await hardhat_1.ethers.getContractFactory(contract);
|
|
76
76
|
}
|
|
77
77
|
const manifest = await getSkaleManifest();
|
|
78
78
|
const { librariesToUpgrade, oldLibraries } = await getLibrariesToUpgrade(manifest, linkReferences);
|
|
79
|
-
const libraries = await (0, deploy_1.deployLibraries)(librariesToUpgrade);
|
|
79
|
+
const libraries = await (0, deploy_1.deployLibraries)(librariesToUpgrade, nonceProvider);
|
|
80
80
|
await updateManifest(manifest, libraries, oldLibraries);
|
|
81
81
|
return await hardhat_1.ethers.getContractFactory(contract, { "libraries": Object.fromEntries(libraries) });
|
|
82
82
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contractFactory.js","sourceRoot":"","sources":["../../src/contractFactory.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;AAC1C,qCAGkB;
|
|
1
|
+
{"version":3,"file":"contractFactory.js","sourceRoot":"","sources":["../../src/contractFactory.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;AAC1C,qCAGkB;AAIlB,2BAAkC;AAClC,+DAAyD;AAGzD,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,aAAE,CAAC,QAAQ,CACzC,MAAM,IAAA,wBAAe,GAAE,EACvB,OAAO,CACV,CAAC,CAAC;IACH,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,WAAW,EAAE;QAC3C,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC;KAC3B;IACD,OAAO,QAA6B,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAAE,YAAsB,EAAE,EAAE;IACpD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,CAAC,MAAM,OAAO;QACV,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,EAAC,QAAQ,EAAC,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC7D,OAAO;YACH,WAAW;YACX,QAAQ;SACX,CAAC;IACN,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CACjB,WAAW,EACX,QAAQ,CACX,EAAE,EAAE;QACD,SAAS,CAAC,GAAG,CACT,WAAW,EACX,QAAQ,CACX,CAAC;IACN,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EACxB,QAA2B,EAC3B,SAA8B,EAC9B,YAAmC,EACrC,EAAE;IACA,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrE,KAAK,MAAM,CACP,WAAW,EACX,cAAc,CACjB,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE;QACtB,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG;YAC9B,SAAS,EAAE,cAAc;YACzB,cAAc,EAAE,IAAA,4BAAY,EAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAW,CAAC;SACrE,CAAC;KACL;IACD,MAAM,CAAC,MAAM,CACT,SAAS,EACT,YAAY,CACf,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,CAAC;IACtB,MAAM,aAAE,CAAC,SAAS,CACd,MAAM,IAAA,wBAAe,GAAE,EACvB,IAAI,CAAC,SAAS,CACV,QAAQ,EACR,IAAI,EACJ,WAAW,CACd,CACJ,CAAC;AACN,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,CAAC,cAA8B,EAAE,EAAE;IAChE,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;QACrD,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;KAClD;IACD,OAAO,YAAY,CAAC;AACxB,CAAC,CAAC;AANW,QAAA,iBAAiB,qBAM5B;AAEF,MAAM,qBAAqB,GAAG,KAAK,EAC/B,QAA2B,EAC3B,cAA8B,EAChC,EAAE;IACA,MAAM,kBAAkB,GAAG,EAAE,CAAC;IAC9B,MAAM,YAAY,GAA0B,EAAE,CAAC;IAC/C,MAAM,cAAc,GAAG,IAAA,yBAAiB,EAAC,cAAc,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,CAAC;IACvD,KAAK,MAAM,WAAW,IAAI,cAAc,EAAE;QACtC,IAAI,OAAO,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,WAAW,EAAE;YACxD,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACxC;aAAM,IACH,IAAA,4BAAY,EAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAW,CAAC;YAC9C,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,YAAY,EAClD;YACE,YAAY,CAAC,WAAW,CAAC;gBACjB,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;SACnD;aAAM;YACH,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACxC;KACJ;IACD,OAAO;QACH,kBAAkB;QAClB,YAAY;KACf,CAAC;AACN,CAAC,CAAC;AAEK,MAAM,mCAAmC,GAAG,KAAK,EACpD,QAAgB,EAChB,aAA6B,EAC/B,EAAE;IACA,MAAM,EAAC,cAAc,EAAC,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE;QACrC,OAAO,MAAM,gBAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;KACpD;IAED,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAE1C,MAAM,EACF,kBAAkB,EAClB,YAAY,EACf,GAAG,MAAM,qBAAqB,CAC3B,QAAQ,EACR,cAAc,CACjB,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,IAAA,wBAAe,EACnC,kBAAkB,EAClB,aAAa,CAChB,CAAC;IACF,MAAM,cAAc,CAChB,QAAQ,EACR,SAAS,EACT,YAAY,CACf,CAAC;IACF,OAAO,MAAM,gBAAM,CAAC,kBAAkB,CAClC,QAAQ,EACR,EAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAC,CAC/C,CAAC;AACN,CAAC,CAAC;AA/BW,QAAA,mCAAmC,uCA+B9C"}
|
package/dist/src/upgrader.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Instance } from "@skalenetwork/skale-contracts-ethers-v5";
|
|
2
|
+
import { NonceProvider } from "./nonceProvider";
|
|
2
3
|
import { Submitter } from "./submitters/submitter";
|
|
3
4
|
import { UnsignedTransaction } from "ethers";
|
|
4
5
|
interface Project {
|
|
@@ -14,6 +15,7 @@ export declare abstract class Upgrader {
|
|
|
14
15
|
projectName: string;
|
|
15
16
|
transactions: UnsignedTransaction[];
|
|
16
17
|
submitter: Submitter;
|
|
18
|
+
nonceProvider?: NonceProvider;
|
|
17
19
|
constructor(project: Project, submitter?: Submitter);
|
|
18
20
|
abstract getDeployedVersion: () => Promise<string | undefined>;
|
|
19
21
|
abstract setVersion: (newVersion: string) => Promise<void>;
|
package/dist/src/upgrader.js
CHANGED
|
@@ -30,6 +30,7 @@ exports.Upgrader = void 0;
|
|
|
30
30
|
const hardhat_1 = __importStar(require("hardhat"));
|
|
31
31
|
const auto_submitter_1 = require("./submitters/auto-submitter");
|
|
32
32
|
const exitCodes_1 = require("./exitCodes");
|
|
33
|
+
const nonceProvider_1 = require("./nonceProvider");
|
|
33
34
|
const chalk_1 = __importDefault(require("chalk"));
|
|
34
35
|
const fs_1 = require("fs");
|
|
35
36
|
const contractFactory_1 = require("./contractFactory");
|
|
@@ -112,16 +113,23 @@ class Upgrader {
|
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
115
|
async deployNewImplementations() {
|
|
116
|
+
const [deployer] = await hardhat_1.ethers.getSigners();
|
|
117
|
+
this.nonceProvider ?? (this.nonceProvider = await nonceProvider_1.NonceProvider.createForWallet(deployer));
|
|
115
118
|
const contracts = await Promise.all(this.contractNamesToUpgrade.
|
|
116
119
|
map(this.deployNewImplementation, this));
|
|
117
120
|
return withoutNull(contracts);
|
|
118
121
|
}
|
|
119
122
|
async deployNewImplementation(contract) {
|
|
120
|
-
const contractFactory = await (0, contractFactory_1.getContractFactoryAndUpdateManifest)(contract);
|
|
123
|
+
const contractFactory = await (0, contractFactory_1.getContractFactoryAndUpdateManifest)(contract, this.nonceProvider);
|
|
121
124
|
const proxyAddress = (await this.instance.getContract(contract)).address;
|
|
122
125
|
console.log(`Prepare upgrade of ${contract}`);
|
|
123
126
|
const currentImplementationAddress = await (0, upgrades_core_1.getImplementationAddress)(hardhat_1.network.provider, proxyAddress);
|
|
124
127
|
const newImplementationAddress = await hardhat_1.upgrades.prepareUpgrade(proxyAddress, contractFactory, {
|
|
128
|
+
"constructorArgs": [
|
|
129
|
+
{
|
|
130
|
+
"nonce": this.nonceProvider?.reserveNonce()
|
|
131
|
+
}
|
|
132
|
+
],
|
|
125
133
|
"unsafeAllowLinkedLibraries": true,
|
|
126
134
|
"unsafeAllowRenames": true
|
|
127
135
|
});
|
package/dist/src/upgrader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrader.js","sourceRoot":"","sources":["../../src/upgrader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"upgrader.js","sourceRoot":"","sources":["../../src/upgrader.ts"],"names":[],"mappings":"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"}
|