@openzeppelin/upgrades-core 1.23.0 → 1.24.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/manifest.d.ts +14 -3
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +79 -13
- package/dist/manifest.js.map +1 -1
- package/dist/manifest.test.js +249 -4
- package/dist/manifest.test.js.map +1 -1
- package/dist/provider.d.ts +14 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +10 -2
- package/dist/provider.js.map +1 -1
- package/package.json +2 -2
- package/src/manifest.test.ts +320 -4
- package/src/manifest.ts +104 -15
- package/src/provider.ts +20 -1
package/dist/manifest.d.ts
CHANGED
|
@@ -16,13 +16,23 @@ export interface ImplDeployment extends Deployment {
|
|
|
16
16
|
export interface ProxyDeployment extends Deployment {
|
|
17
17
|
kind: 'uups' | 'transparent' | 'beacon';
|
|
18
18
|
}
|
|
19
|
+
interface DevInstanceMetadata {
|
|
20
|
+
networkName: string;
|
|
21
|
+
instanceId: string;
|
|
22
|
+
forkedNetwork?: {
|
|
23
|
+
chainId: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
19
26
|
export declare class Manifest {
|
|
20
27
|
readonly chainId: number;
|
|
21
28
|
readonly file: string;
|
|
22
|
-
|
|
29
|
+
readonly fallbackFile: string;
|
|
30
|
+
private readonly dir;
|
|
31
|
+
private readonly chainIdSuffix;
|
|
32
|
+
private readonly parent?;
|
|
23
33
|
private locked;
|
|
24
34
|
static forNetwork(provider: EthereumProvider): Promise<Manifest>;
|
|
25
|
-
constructor(chainId: number);
|
|
35
|
+
constructor(chainId: number, devInstanceMetadata?: DevInstanceMetadata, osTmpDir?: string);
|
|
26
36
|
getAdmin(): Promise<Deployment | undefined>;
|
|
27
37
|
getDeploymentFromAddress(address: string): Promise<ImplDeployment>;
|
|
28
38
|
getProxyFromAddress(address: string): Promise<ProxyDeployment>;
|
|
@@ -31,7 +41,7 @@ export declare class Manifest {
|
|
|
31
41
|
private readFile;
|
|
32
42
|
private writeFile;
|
|
33
43
|
private renameFileIfRequired;
|
|
34
|
-
read(): Promise<ManifestData>;
|
|
44
|
+
read(retries?: number): Promise<ManifestData>;
|
|
35
45
|
write(data: ManifestData): Promise<void>;
|
|
36
46
|
lockedRun<T>(cb: () => Promise<T>): Promise<T>;
|
|
37
47
|
private lock;
|
|
@@ -40,4 +50,5 @@ export declare function migrateManifest(data: ManifestData): ManifestData;
|
|
|
40
50
|
export declare class DeploymentNotFound extends Error {
|
|
41
51
|
}
|
|
42
52
|
export declare function normalizeManifestData(input: ManifestData): ManifestData;
|
|
53
|
+
export {};
|
|
43
54
|
//# sourceMappingURL=manifest.d.ts.map
|
package/dist/manifest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAgD,MAAM,YAAY,CAAC;AAI5F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAS/C,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE;SACJ,OAAO,IAAI,MAAM,CAAC,CAAC,EAAE,cAAc;KACrC,CAAC;IACF,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAC;CACzC;AA8CD,UAAU,mBAAmB;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE;QAEd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,qBAAa,QAAQ;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAW;IAEnC,OAAO,CAAC,MAAM,CAAS;WAEV,UAAU,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;gBAU1D,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,mBAAmB,EAAE,QAAQ,CAAC,EAAE,MAAM;IAuCnF,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAI3C,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAYlE,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAS9D,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAYvC,MAAM;YASN,QAAQ;YAqBR,SAAS;YAKT,oBAAoB;IAU5B,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAoB7C,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YAYtC,IAAI;CAWnB;AAgBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAUhE;AAED,qBAAa,kBAAmB,SAAQ,KAAK;CAAG;AAEhD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAOvE"}
|
package/dist/manifest.js
CHANGED
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.normalizeManifestData = exports.DeploymentNotFound = exports.migrateManifest = exports.Manifest = void 0;
|
|
7
|
+
const os_1 = __importDefault(require("os"));
|
|
7
8
|
const path_1 = __importDefault(require("path"));
|
|
8
9
|
const fs_1 = require("fs");
|
|
9
10
|
const provider_1 = require("./provider");
|
|
@@ -12,6 +13,8 @@ const compare_versions_1 = require("compare-versions");
|
|
|
12
13
|
const pick_1 = require("./utils/pick");
|
|
13
14
|
const map_values_1 = require("./utils/map-values");
|
|
14
15
|
const error_1 = require("./error");
|
|
16
|
+
const debug_1 = __importDefault(require("./utils/debug"));
|
|
17
|
+
const assert_1 = require("./utils/assert");
|
|
15
18
|
const currentManifestVersion = '3.2';
|
|
16
19
|
function defaultManifest() {
|
|
17
20
|
return {
|
|
@@ -20,18 +23,76 @@ function defaultManifest() {
|
|
|
20
23
|
proxies: [],
|
|
21
24
|
};
|
|
22
25
|
}
|
|
23
|
-
const
|
|
26
|
+
const MANIFEST_DEFAULT_DIR = '.openzeppelin';
|
|
27
|
+
const MANIFEST_TEMP_DIR = 'openzeppelin-upgrades';
|
|
28
|
+
async function getDevInstanceMetadata(provider, chainId) {
|
|
29
|
+
let hardhatMetadata;
|
|
30
|
+
try {
|
|
31
|
+
hardhatMetadata = await (0, provider_1.getHardhatMetadata)(provider);
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
if (hardhatMetadata.chainId !== chainId) {
|
|
37
|
+
throw new Error(`Broken invariant: Hardhat metadata's chainId ${hardhatMetadata.chainId} does not match eth_chainId ${chainId}`);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
networkName: 'hardhat',
|
|
41
|
+
instanceId: hardhatMetadata.instanceId,
|
|
42
|
+
forkedNetwork: hardhatMetadata.forkedNetwork,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function getSuffix(chainId, devInstanceMetadata) {
|
|
46
|
+
if (devInstanceMetadata !== undefined) {
|
|
47
|
+
return `${chainId}-${devInstanceMetadata.instanceId}`;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return `${chainId}`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
24
53
|
class Manifest {
|
|
25
54
|
static async forNetwork(provider) {
|
|
26
|
-
|
|
55
|
+
const chainId = await (0, provider_1.getChainId)(provider);
|
|
56
|
+
const devInstanceMetadata = await getDevInstanceMetadata(provider, chainId);
|
|
57
|
+
if (devInstanceMetadata !== undefined) {
|
|
58
|
+
return new Manifest(chainId, devInstanceMetadata, os_1.default.tmpdir());
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
return new Manifest(chainId);
|
|
62
|
+
}
|
|
27
63
|
}
|
|
28
|
-
constructor(chainId) {
|
|
64
|
+
constructor(chainId, devInstanceMetadata, osTmpDir) {
|
|
29
65
|
this.locked = false;
|
|
30
66
|
this.chainId = chainId;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
67
|
+
this.chainIdSuffix = getSuffix(chainId, devInstanceMetadata);
|
|
68
|
+
const defaultFallbackName = `unknown-${chainId}`;
|
|
69
|
+
if (devInstanceMetadata !== undefined) {
|
|
70
|
+
(0, assert_1.assert)(osTmpDir !== undefined);
|
|
71
|
+
this.dir = path_1.default.join(osTmpDir, MANIFEST_TEMP_DIR);
|
|
72
|
+
(0, debug_1.default)('development manifest directory:', this.dir);
|
|
73
|
+
const devName = `${devInstanceMetadata.networkName}-${this.chainIdSuffix}`;
|
|
74
|
+
const devFile = path_1.default.join(this.dir, `${devName}.json`);
|
|
75
|
+
this.file = devFile;
|
|
76
|
+
if (chainId === 31337) {
|
|
77
|
+
this.fallbackFile = path_1.default.join(MANIFEST_DEFAULT_DIR, `${defaultFallbackName}.json`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.fallbackFile = devFile;
|
|
81
|
+
}
|
|
82
|
+
(0, debug_1.default)('development manifest file:', this.file, 'fallback file:', this.fallbackFile);
|
|
83
|
+
if (devInstanceMetadata.forkedNetwork !== undefined) {
|
|
84
|
+
const forkedChainId = devInstanceMetadata.forkedNetwork.chainId;
|
|
85
|
+
(0, debug_1.default)('forked network chain id:', forkedChainId);
|
|
86
|
+
this.parent = new Manifest(forkedChainId);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.dir = MANIFEST_DEFAULT_DIR;
|
|
91
|
+
const networkName = provider_1.networkNames[chainId];
|
|
92
|
+
this.file = path_1.default.join(MANIFEST_DEFAULT_DIR, `${networkName ?? defaultFallbackName}.json`);
|
|
93
|
+
this.fallbackFile = path_1.default.join(MANIFEST_DEFAULT_DIR, `${defaultFallbackName}.json`);
|
|
94
|
+
(0, debug_1.default)('manifest file:', this.file, 'fallback file:', this.fallbackFile);
|
|
95
|
+
}
|
|
35
96
|
}
|
|
36
97
|
async getAdmin() {
|
|
37
98
|
return (await this.read()).admin;
|
|
@@ -104,15 +165,20 @@ class Manifest {
|
|
|
104
165
|
}
|
|
105
166
|
}
|
|
106
167
|
}
|
|
107
|
-
async read() {
|
|
108
|
-
const release = this.locked ? undefined : await this.lock();
|
|
168
|
+
async read(retries) {
|
|
169
|
+
const release = this.locked ? undefined : await this.lock(retries);
|
|
109
170
|
try {
|
|
110
171
|
const data = JSON.parse(await this.readFile());
|
|
111
172
|
return validateOrUpdateManifestVersion(data);
|
|
112
173
|
}
|
|
113
174
|
catch (e) {
|
|
114
175
|
if (e.code === 'ENOENT') {
|
|
115
|
-
|
|
176
|
+
if (this.parent !== undefined) {
|
|
177
|
+
return await this.parent.read(retries);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
return defaultManifest();
|
|
181
|
+
}
|
|
116
182
|
}
|
|
117
183
|
else {
|
|
118
184
|
throw e;
|
|
@@ -141,10 +207,10 @@ class Manifest {
|
|
|
141
207
|
await release();
|
|
142
208
|
}
|
|
143
209
|
}
|
|
144
|
-
async lock() {
|
|
145
|
-
const lockfileName = path_1.default.join(
|
|
210
|
+
async lock(retries = 3) {
|
|
211
|
+
const lockfileName = path_1.default.join(this.dir, `chain-${this.chainIdSuffix}`);
|
|
146
212
|
await fs_1.promises.mkdir(path_1.default.dirname(lockfileName), { recursive: true });
|
|
147
|
-
const release = await proper_lockfile_1.default.lock(lockfileName, { retries
|
|
213
|
+
const release = await proper_lockfile_1.default.lock(lockfileName, { retries, realpath: false });
|
|
148
214
|
this.locked = true;
|
|
149
215
|
return async () => {
|
|
150
216
|
await release();
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,2BAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/manifest.test.js
CHANGED
|
@@ -3,17 +3,18 @@ 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
|
+
const os_1 = __importDefault(require("os"));
|
|
6
7
|
const ava_1 = __importDefault(require("ava"));
|
|
7
8
|
const manifest_1 = require("./manifest");
|
|
8
9
|
const fs_1 = require("fs");
|
|
9
10
|
const path_1 = __importDefault(require("path"));
|
|
10
|
-
async function writeTestManifest(file) {
|
|
11
|
+
async function writeTestManifest(file, address) {
|
|
11
12
|
const testManifest = {
|
|
12
13
|
manifestVersion: '3.2',
|
|
13
14
|
impls: {},
|
|
14
15
|
proxies: [
|
|
15
16
|
{
|
|
16
|
-
address: '0x123',
|
|
17
|
+
address: address ?? '0x123',
|
|
17
18
|
txHash: '0x0',
|
|
18
19
|
kind: 'uups',
|
|
19
20
|
},
|
|
@@ -81,21 +82,265 @@ ava_1.default.serial('rename manifest', async (t) => {
|
|
|
81
82
|
t.throwsAsync(fs_1.promises.access(`.openzeppelin/chain-${id}.lock`));
|
|
82
83
|
// check that the contents were persisted
|
|
83
84
|
const data = await new manifest_1.Manifest(id).read();
|
|
84
|
-
t.
|
|
85
|
-
t.
|
|
85
|
+
t.is(data.proxies[0].address, '0x123');
|
|
86
|
+
t.is(data.proxies[1].address, '0x456');
|
|
86
87
|
await assertNewName(t, id);
|
|
87
88
|
t.throwsAsync(fs_1.promises.access(`.openzeppelin/chain-${id}.lock`));
|
|
88
89
|
await deleteManifests(t, id);
|
|
89
90
|
});
|
|
91
|
+
ava_1.default.serial('rename hardhat from unknown to dev manifest', async (t) => {
|
|
92
|
+
const id = 31337;
|
|
93
|
+
await deleteFile(t, `.openzeppelin/unknown-${id}.json`);
|
|
94
|
+
await writeTestManifest(`.openzeppelin/unknown-${id}.json`);
|
|
95
|
+
const instanceId = '0xaa0';
|
|
96
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId };
|
|
97
|
+
const manifest = new manifest_1.Manifest(id, devInstanceMetadata, os_1.default.tmpdir());
|
|
98
|
+
await fs_1.promises.access(`.openzeppelin/unknown-${id}.json`);
|
|
99
|
+
await manifest.lockedRun(async () => {
|
|
100
|
+
await fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/chain-${id}-${instanceId}.lock`);
|
|
101
|
+
const data = await manifest.read();
|
|
102
|
+
data.proxies.push({
|
|
103
|
+
address: '0x456',
|
|
104
|
+
txHash: '0x0',
|
|
105
|
+
kind: 'uups',
|
|
106
|
+
});
|
|
107
|
+
await fs_1.promises.access(`.openzeppelin/unknown-${id}.json`);
|
|
108
|
+
await manifest.write(data);
|
|
109
|
+
});
|
|
110
|
+
t.throwsAsync(fs_1.promises.access(`.openzeppelin/unknown-${id}.json`));
|
|
111
|
+
await fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/hardhat-${id}-${instanceId}.json`);
|
|
112
|
+
const dev = await new manifest_1.Manifest(id, devInstanceMetadata, os_1.default.tmpdir()).read();
|
|
113
|
+
t.is(dev.proxies.length, 2);
|
|
114
|
+
t.is(dev.proxies[0].address, '0x123');
|
|
115
|
+
t.is(dev.proxies[1].address, '0x456');
|
|
116
|
+
await deleteFile(t, `.openzeppelin/unknown-${id}.json`);
|
|
117
|
+
await deleteFile(t, `${os_1.default.tmpdir()}/openzeppelin-upgrades/hardhat-${id}-${instanceId}.json`);
|
|
118
|
+
});
|
|
119
|
+
ava_1.default.serial('forked chain from known network with fallback name', async (t) => {
|
|
120
|
+
const forkedId = 80001;
|
|
121
|
+
const devId = 55555;
|
|
122
|
+
await deleteManifests(t, forkedId);
|
|
123
|
+
await writeTestManifest(`.openzeppelin/unknown-${forkedId}.json`);
|
|
124
|
+
const instanceId = '0xaaa';
|
|
125
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId, forkedNetwork: { chainId: forkedId } };
|
|
126
|
+
const manifest = new manifest_1.Manifest(devId, devInstanceMetadata, os_1.default.tmpdir());
|
|
127
|
+
await assertOldName(t, forkedId);
|
|
128
|
+
await manifest.lockedRun(async () => {
|
|
129
|
+
await fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`);
|
|
130
|
+
const data = await manifest.read();
|
|
131
|
+
data.proxies.push({
|
|
132
|
+
address: '0x456',
|
|
133
|
+
txHash: '0x0',
|
|
134
|
+
kind: 'uups',
|
|
135
|
+
});
|
|
136
|
+
await assertOldName(t, forkedId);
|
|
137
|
+
await manifest.write(data);
|
|
138
|
+
await assertOldName(t, forkedId); // original network file should not be changed
|
|
139
|
+
});
|
|
140
|
+
t.throwsAsync(fs_1.promises.access(`.openzeppelin/chain-${forkedId}.lock`));
|
|
141
|
+
t.throwsAsync(fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`));
|
|
142
|
+
await fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
143
|
+
// check that the contents were NOT persisted to original manifest
|
|
144
|
+
const orig = await new manifest_1.Manifest(forkedId).read();
|
|
145
|
+
t.is(orig.proxies.length, 1);
|
|
146
|
+
t.is(orig.proxies[0].address, '0x123');
|
|
147
|
+
// check that the contents were persisted to dev copy of manifest
|
|
148
|
+
const dev = await new manifest_1.Manifest(devId, devInstanceMetadata, os_1.default.tmpdir()).read();
|
|
149
|
+
t.is(dev.proxies.length, 2);
|
|
150
|
+
t.is(dev.proxies[0].address, '0x123');
|
|
151
|
+
t.is(dev.proxies[1].address, '0x456');
|
|
152
|
+
await deleteManifests(t, forkedId);
|
|
153
|
+
await deleteFile(t, `${os_1.default.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
154
|
+
});
|
|
155
|
+
ava_1.default.serial('forked chain from known network with actual name', async (t) => {
|
|
156
|
+
const forkedId = 80001;
|
|
157
|
+
const devId = 55555;
|
|
158
|
+
await deleteManifests(t, forkedId);
|
|
159
|
+
await writeTestManifest(`.openzeppelin/polygon-mumbai.json`);
|
|
160
|
+
const instanceId = '0xbbb';
|
|
161
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId, forkedNetwork: { chainId: forkedId } };
|
|
162
|
+
const manifest = new manifest_1.Manifest(devId, devInstanceMetadata, os_1.default.tmpdir());
|
|
163
|
+
await assertNewName(t, forkedId);
|
|
164
|
+
await manifest.lockedRun(async () => {
|
|
165
|
+
await fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`);
|
|
166
|
+
const data = await manifest.read();
|
|
167
|
+
data.proxies.push({
|
|
168
|
+
address: '0x456',
|
|
169
|
+
txHash: '0x0',
|
|
170
|
+
kind: 'uups',
|
|
171
|
+
});
|
|
172
|
+
await assertNewName(t, forkedId);
|
|
173
|
+
await manifest.write(data);
|
|
174
|
+
await assertNewName(t, forkedId); // original network file should not be changed
|
|
175
|
+
});
|
|
176
|
+
t.throwsAsync(fs_1.promises.access(`.openzeppelin/chain-${forkedId}.lock`));
|
|
177
|
+
t.throwsAsync(fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`));
|
|
178
|
+
await fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
179
|
+
// check that the contents were NOT persisted to original manifest
|
|
180
|
+
const orig = await new manifest_1.Manifest(forkedId).read();
|
|
181
|
+
t.is(orig.proxies.length, 1);
|
|
182
|
+
t.is(orig.proxies[0].address, '0x123');
|
|
183
|
+
// check that the contents were persisted to dev copy of manifest
|
|
184
|
+
const dev = await new manifest_1.Manifest(devId, devInstanceMetadata, os_1.default.tmpdir()).read();
|
|
185
|
+
t.is(dev.proxies.length, 2);
|
|
186
|
+
t.is(dev.proxies[0].address, '0x123');
|
|
187
|
+
t.is(dev.proxies[1].address, '0x456');
|
|
188
|
+
await deleteManifests(t, forkedId);
|
|
189
|
+
await deleteFile(t, `${os_1.default.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
190
|
+
});
|
|
191
|
+
ava_1.default.serial('forked chain, real manifest already locked', async (t) => {
|
|
192
|
+
const forkedId = 80001;
|
|
193
|
+
const devId = 55555;
|
|
194
|
+
const instanceId = '0xccc';
|
|
195
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId, forkedNetwork: { chainId: forkedId } };
|
|
196
|
+
const realManifest = new manifest_1.Manifest(forkedId);
|
|
197
|
+
const devManifest = new manifest_1.Manifest(devId, devInstanceMetadata, os_1.default.tmpdir());
|
|
198
|
+
try {
|
|
199
|
+
await realManifest.lockedRun(async () => {
|
|
200
|
+
await devManifest.read(0);
|
|
201
|
+
});
|
|
202
|
+
t.fail();
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
t.is(e.code, 'ELOCKED');
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
ava_1.default.serial('forked chain, real manifest already locked but dev manifest exists', async (t) => {
|
|
209
|
+
const forkedId = 80001;
|
|
210
|
+
const devId = 55555;
|
|
211
|
+
const instanceId = '0xddd';
|
|
212
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId, forkedNetwork: { chainId: forkedId } };
|
|
213
|
+
const realManifest = new manifest_1.Manifest(forkedId);
|
|
214
|
+
const devManifest = new manifest_1.Manifest(devId, devInstanceMetadata, os_1.default.tmpdir());
|
|
215
|
+
// write dev manifest
|
|
216
|
+
await writeTestManifest(devManifest.file, '0x999');
|
|
217
|
+
// then write real manifest
|
|
218
|
+
await deleteManifests(t, forkedId);
|
|
219
|
+
await writeTestManifest(`.openzeppelin/polygon-mumbai.json`);
|
|
220
|
+
let devManifestContents;
|
|
221
|
+
await realManifest.lockedRun(async () => {
|
|
222
|
+
// should ignore real manifest and real lock file
|
|
223
|
+
devManifestContents = await devManifest.read();
|
|
224
|
+
t.is(devManifestContents.proxies.length, 1);
|
|
225
|
+
t.is(devManifestContents.proxies[0].address, '0x999');
|
|
226
|
+
});
|
|
227
|
+
await deleteManifests(t, forkedId);
|
|
228
|
+
await deleteFile(t, `${os_1.default.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
229
|
+
});
|
|
230
|
+
ava_1.default.serial('forked chain without existing manifest', async (t) => {
|
|
231
|
+
const forkedId = 80001;
|
|
232
|
+
const devId = 55555;
|
|
233
|
+
await deleteManifests(t, forkedId);
|
|
234
|
+
const instanceId = '0xeee';
|
|
235
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId, forkedNetwork: { chainId: forkedId } };
|
|
236
|
+
const manifest = new manifest_1.Manifest(devId, devInstanceMetadata, os_1.default.tmpdir());
|
|
237
|
+
await manifest.lockedRun(async () => {
|
|
238
|
+
await fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`);
|
|
239
|
+
const data = await manifest.read();
|
|
240
|
+
data.proxies.push({
|
|
241
|
+
address: '0x456',
|
|
242
|
+
txHash: '0x0',
|
|
243
|
+
kind: 'uups',
|
|
244
|
+
});
|
|
245
|
+
await manifest.write(data);
|
|
246
|
+
});
|
|
247
|
+
t.throwsAsync(fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`));
|
|
248
|
+
await fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
249
|
+
// check that the contents were NOT persisted to regular manifest
|
|
250
|
+
t.throwsAsync(fs_1.promises.access(`.openzeppelin/unknown-${forkedId}.json`));
|
|
251
|
+
t.throwsAsync(fs_1.promises.access(`.openzeppelin/polygon-mumbai.json`));
|
|
252
|
+
// check that the contents were persisted to dev copy of manifest
|
|
253
|
+
const dev = await new manifest_1.Manifest(devId, devInstanceMetadata, os_1.default.tmpdir()).read();
|
|
254
|
+
t.is(dev.proxies.length, 1);
|
|
255
|
+
t.is(dev.proxies[0].address, '0x456');
|
|
256
|
+
await deleteManifests(t, forkedId);
|
|
257
|
+
await deleteFile(t, `${os_1.default.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
258
|
+
});
|
|
259
|
+
ava_1.default.serial('dev instance with known network id', async (t) => {
|
|
260
|
+
const devId = 80001;
|
|
261
|
+
await deleteManifests(t, devId);
|
|
262
|
+
// dev instance without forking, so this real manifest should not be actually used
|
|
263
|
+
await writeTestManifest(`.openzeppelin/polygon-mumbai.json`);
|
|
264
|
+
const instanceId = '0xfff';
|
|
265
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId };
|
|
266
|
+
const manifest = new manifest_1.Manifest(devId, devInstanceMetadata, os_1.default.tmpdir());
|
|
267
|
+
await manifest.lockedRun(async () => {
|
|
268
|
+
await fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`);
|
|
269
|
+
const data = await manifest.read();
|
|
270
|
+
data.proxies.push({
|
|
271
|
+
address: '0x456',
|
|
272
|
+
txHash: '0x0',
|
|
273
|
+
kind: 'uups',
|
|
274
|
+
});
|
|
275
|
+
await manifest.write(data);
|
|
276
|
+
});
|
|
277
|
+
t.throwsAsync(fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`));
|
|
278
|
+
await fs_1.promises.access(`${os_1.default.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
279
|
+
// check that the contents were NOT persisted to original manifest
|
|
280
|
+
const orig = await new manifest_1.Manifest(devId).read();
|
|
281
|
+
t.is(orig.proxies.length, 1);
|
|
282
|
+
t.is(orig.proxies[0].address, '0x123');
|
|
283
|
+
// check that the contents were persisted to dev manifest without original contents
|
|
284
|
+
const dev = await new manifest_1.Manifest(devId, devInstanceMetadata, os_1.default.tmpdir()).read();
|
|
285
|
+
t.is(dev.proxies.length, 1);
|
|
286
|
+
t.is(dev.proxies[0].address, '0x456');
|
|
287
|
+
await deleteManifests(t, devId);
|
|
288
|
+
await deleteFile(t, `${os_1.default.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
289
|
+
});
|
|
90
290
|
(0, ava_1.default)('manifest name for a known network', t => {
|
|
91
291
|
const manifest = new manifest_1.Manifest(1);
|
|
92
292
|
t.is(manifest.file, '.openzeppelin/mainnet.json');
|
|
93
293
|
});
|
|
294
|
+
(0, ava_1.default)('manifest name for a known network, development instance', t => {
|
|
295
|
+
const chainId = 1;
|
|
296
|
+
const instanceId = '0x11111';
|
|
297
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId };
|
|
298
|
+
const manifest = new manifest_1.Manifest(chainId, devInstanceMetadata, '/tmp');
|
|
299
|
+
const expectedPath = `/tmp/openzeppelin-upgrades/hardhat-${chainId}-${instanceId}.json`;
|
|
300
|
+
t.is(manifest.file, expectedPath);
|
|
301
|
+
t.is(manifest.fallbackFile, expectedPath);
|
|
302
|
+
});
|
|
94
303
|
(0, ava_1.default)('manifest name for an unknown network', t => {
|
|
95
304
|
const id = 55555;
|
|
96
305
|
const manifest = new manifest_1.Manifest(id);
|
|
97
306
|
t.is(manifest.file, `.openzeppelin/unknown-${id}.json`);
|
|
98
307
|
});
|
|
308
|
+
(0, ava_1.default)('manifest name for an unknown network, development instance, non hardhat', t => {
|
|
309
|
+
const chainId = 55555;
|
|
310
|
+
const instanceId = '0x22222';
|
|
311
|
+
const devInstanceMetadata = { networkName: 'dev', instanceId: instanceId };
|
|
312
|
+
const manifest = new manifest_1.Manifest(chainId, devInstanceMetadata, '/tmp');
|
|
313
|
+
const expectedPath = `/tmp/openzeppelin-upgrades/dev-${chainId}-${instanceId}.json`;
|
|
314
|
+
t.is(manifest.file, expectedPath);
|
|
315
|
+
t.is(manifest.fallbackFile, expectedPath);
|
|
316
|
+
});
|
|
317
|
+
(0, ava_1.default)('manifest name for an unknown network, development instance, hardhat', t => {
|
|
318
|
+
const chainId = 31337;
|
|
319
|
+
const instanceId = '0x22223';
|
|
320
|
+
const devInstanceMetadata = { networkName: 'dev', instanceId: instanceId };
|
|
321
|
+
const manifest = new manifest_1.Manifest(chainId, devInstanceMetadata, '/tmp');
|
|
322
|
+
const expectedPath = `/tmp/openzeppelin-upgrades/dev-${chainId}-${instanceId}.json`;
|
|
323
|
+
t.is(manifest.file, expectedPath);
|
|
324
|
+
t.is(manifest.fallbackFile, `.openzeppelin/unknown-${chainId}.json`);
|
|
325
|
+
});
|
|
326
|
+
(0, ava_1.default)('manifest dev instance without tmp dir param', t => {
|
|
327
|
+
const chainId = 1;
|
|
328
|
+
const instanceId = '0x33333';
|
|
329
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId };
|
|
330
|
+
t.throws(() => new manifest_1.Manifest(chainId, devInstanceMetadata));
|
|
331
|
+
});
|
|
332
|
+
(0, ava_1.default)('manifest lock file name for a development network instance', async (t) => {
|
|
333
|
+
const chainId = 55555;
|
|
334
|
+
const instanceId = '0x55555';
|
|
335
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId };
|
|
336
|
+
const manifest = new manifest_1.Manifest(chainId, devInstanceMetadata, '/tmp');
|
|
337
|
+
await manifest.lockedRun(async () => {
|
|
338
|
+
t.throwsAsync(fs_1.promises.access(`.openzeppelin/chain-${chainId}.lock`));
|
|
339
|
+
t.throwsAsync(fs_1.promises.access(`.openzeppelin/chain-${chainId}-${instanceId}.lock`));
|
|
340
|
+
t.throwsAsync(fs_1.promises.access(`/tmp/openzeppelin-upgrades/chain-${chainId}.lock`));
|
|
341
|
+
await fs_1.promises.access(`/tmp/openzeppelin-upgrades/chain-${chainId}-${instanceId}.lock`);
|
|
342
|
+
});
|
|
343
|
+
});
|
|
99
344
|
(0, ava_1.default)('normalize manifest', t => {
|
|
100
345
|
const deployment = {
|
|
101
346
|
address: '0x1234',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.test.js","sourceRoot":"","sources":["../src/manifest.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manifest.test.js","sourceRoot":"","sources":["../src/manifest.test.ts"],"names":[],"mappings":"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"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export interface EthereumProvider {
|
|
2
|
+
send(method: 'hardhat_metadata', params: []): Promise<HardhatMetadata>;
|
|
2
3
|
send(method: 'web3_clientVersion', params: []): Promise<string>;
|
|
3
4
|
send(method: 'net_version', params: []): Promise<string>;
|
|
4
5
|
send(method: 'eth_chainId', params: []): Promise<string>;
|
|
6
|
+
send(method: 'eth_instanceId', params: []): Promise<string>;
|
|
5
7
|
send(method: 'eth_getCode', params: [string, string]): Promise<string>;
|
|
6
8
|
send(method: 'eth_call', params: unknown[]): Promise<string>;
|
|
7
9
|
send(method: 'eth_getStorageAt', params: [string, string, string]): Promise<string>;
|
|
@@ -9,6 +11,13 @@ export interface EthereumProvider {
|
|
|
9
11
|
send(method: 'eth_getTransactionReceipt', params: [string]): Promise<null | EthereumTransactionReceipt>;
|
|
10
12
|
send(method: string, params: unknown[]): Promise<unknown>;
|
|
11
13
|
}
|
|
14
|
+
interface HardhatMetadata {
|
|
15
|
+
chainId: number;
|
|
16
|
+
instanceId: string;
|
|
17
|
+
forkedNetwork?: {
|
|
18
|
+
chainId: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
12
21
|
interface EthereumTransaction {
|
|
13
22
|
blockHash: string | null;
|
|
14
23
|
input: string;
|
|
@@ -25,6 +34,11 @@ interface EthereumTransactionReceipt {
|
|
|
25
34
|
export declare function getNetworkId(provider: EthereumProvider): Promise<string>;
|
|
26
35
|
export declare function getChainId(provider: EthereumProvider): Promise<number>;
|
|
27
36
|
export declare function getClientVersion(provider: EthereumProvider): Promise<string>;
|
|
37
|
+
/**
|
|
38
|
+
* Gets Hardhat metadata when used with Hardhat 2.12.3 or later.
|
|
39
|
+
* The underlying provider will throw an error if this RPC method is not available.
|
|
40
|
+
*/
|
|
41
|
+
export declare function getHardhatMetadata(provider: EthereumProvider): Promise<HardhatMetadata>;
|
|
28
42
|
export declare function getStorageAt(provider: EthereumProvider, address: string, position: string, block?: string): Promise<string>;
|
|
29
43
|
export declare function getCode(provider: EthereumProvider, address: string, block?: string): Promise<string>;
|
|
30
44
|
export declare function call(provider: EthereumProvider, address: string, data: string, block?: string): Promise<string>;
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/provider.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isReceiptSuccessful = exports.isDevelopmentNetwork = exports.networkNames = exports.getTransactionReceipt = exports.getTransactionByHash = exports.isEmpty = exports.hasCode = exports.call = exports.getCode = exports.getStorageAt = exports.getClientVersion = exports.getChainId = exports.getNetworkId = void 0;
|
|
3
|
+
exports.isReceiptSuccessful = exports.isDevelopmentNetwork = exports.networkNames = exports.getTransactionReceipt = exports.getTransactionByHash = exports.isEmpty = exports.hasCode = exports.call = exports.getCode = exports.getStorageAt = exports.getHardhatMetadata = exports.getClientVersion = exports.getChainId = exports.getNetworkId = void 0;
|
|
4
4
|
async function getNetworkId(provider) {
|
|
5
5
|
return provider.send('net_version', []);
|
|
6
6
|
}
|
|
@@ -14,6 +14,14 @@ async function getClientVersion(provider) {
|
|
|
14
14
|
return provider.send('web3_clientVersion', []);
|
|
15
15
|
}
|
|
16
16
|
exports.getClientVersion = getClientVersion;
|
|
17
|
+
/**
|
|
18
|
+
* Gets Hardhat metadata when used with Hardhat 2.12.3 or later.
|
|
19
|
+
* The underlying provider will throw an error if this RPC method is not available.
|
|
20
|
+
*/
|
|
21
|
+
async function getHardhatMetadata(provider) {
|
|
22
|
+
return provider.send('hardhat_metadata', []);
|
|
23
|
+
}
|
|
24
|
+
exports.getHardhatMetadata = getHardhatMetadata;
|
|
17
25
|
async function getStorageAt(provider, address, position, block = 'latest') {
|
|
18
26
|
const storage = await provider.send('eth_getStorageAt', [address, position, block]);
|
|
19
27
|
const padded = storage.replace(/^0x/, '').padStart(64, '0');
|
|
@@ -83,7 +91,7 @@ async function isDevelopmentNetwork(provider) {
|
|
|
83
91
|
else {
|
|
84
92
|
const clientVersion = await getClientVersion(provider);
|
|
85
93
|
const [name] = clientVersion.split('/', 1);
|
|
86
|
-
return name === 'HardhatNetwork' || name === 'EthereumJS TestRPC';
|
|
94
|
+
return name === 'HardhatNetwork' || name === 'EthereumJS TestRPC' || name === 'anvil';
|
|
87
95
|
}
|
|
88
96
|
}
|
|
89
97
|
exports.isDevelopmentNetwork = isDevelopmentNetwork;
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openzeppelin/upgrades-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.24.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": "https://github.com/OpenZeppelin/openzeppelin-upgrades/tree/master/packages/core",
|
|
6
6
|
"license": "MIT",
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"proper-lockfile": "^4.1.1",
|
|
59
59
|
"solidity-ast": "^0.4.15"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "6eb62c8d90ea332bf21e6b4e210928d3b9780e9a"
|
|
62
62
|
}
|
package/src/manifest.test.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
import os from 'os';
|
|
1
2
|
import test, { ExecutionContext } from 'ava';
|
|
2
3
|
import { Manifest, ManifestData, normalizeManifestData } from './manifest';
|
|
3
4
|
import { promises as fs } from 'fs';
|
|
4
5
|
import path from 'path';
|
|
5
6
|
|
|
6
|
-
async function writeTestManifest(file: string) {
|
|
7
|
+
async function writeTestManifest(file: string, address?: string) {
|
|
7
8
|
const testManifest = {
|
|
8
9
|
manifestVersion: '3.2',
|
|
9
10
|
impls: {},
|
|
10
11
|
proxies: [
|
|
11
12
|
{
|
|
12
|
-
address: '0x123',
|
|
13
|
+
address: address ?? '0x123',
|
|
13
14
|
txHash: '0x0',
|
|
14
15
|
kind: 'uups',
|
|
15
16
|
},
|
|
@@ -94,8 +95,8 @@ test.serial('rename manifest', async t => {
|
|
|
94
95
|
|
|
95
96
|
// check that the contents were persisted
|
|
96
97
|
const data = await new Manifest(id).read();
|
|
97
|
-
t.
|
|
98
|
-
t.
|
|
98
|
+
t.is(data.proxies[0].address, '0x123');
|
|
99
|
+
t.is(data.proxies[1].address, '0x456');
|
|
99
100
|
await assertNewName(t, id);
|
|
100
101
|
|
|
101
102
|
t.throwsAsync(fs.access(`.openzeppelin/chain-${id}.lock`));
|
|
@@ -103,17 +104,332 @@ test.serial('rename manifest', async t => {
|
|
|
103
104
|
await deleteManifests(t, id);
|
|
104
105
|
});
|
|
105
106
|
|
|
107
|
+
test.serial('rename hardhat from unknown to dev manifest', async t => {
|
|
108
|
+
const id = 31337;
|
|
109
|
+
|
|
110
|
+
await deleteFile(t, `.openzeppelin/unknown-${id}.json`);
|
|
111
|
+
await writeTestManifest(`.openzeppelin/unknown-${id}.json`);
|
|
112
|
+
|
|
113
|
+
const instanceId = '0xaa0';
|
|
114
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId };
|
|
115
|
+
|
|
116
|
+
const manifest = new Manifest(id, devInstanceMetadata, os.tmpdir());
|
|
117
|
+
|
|
118
|
+
await fs.access(`.openzeppelin/unknown-${id}.json`);
|
|
119
|
+
await manifest.lockedRun(async () => {
|
|
120
|
+
await fs.access(`${os.tmpdir()}/openzeppelin-upgrades/chain-${id}-${instanceId}.lock`);
|
|
121
|
+
const data = await manifest.read();
|
|
122
|
+
data.proxies.push({
|
|
123
|
+
address: '0x456',
|
|
124
|
+
txHash: '0x0',
|
|
125
|
+
kind: 'uups',
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
await fs.access(`.openzeppelin/unknown-${id}.json`);
|
|
129
|
+
await manifest.write(data);
|
|
130
|
+
});
|
|
131
|
+
t.throwsAsync(fs.access(`.openzeppelin/unknown-${id}.json`));
|
|
132
|
+
await fs.access(`${os.tmpdir()}/openzeppelin-upgrades/hardhat-${id}-${instanceId}.json`);
|
|
133
|
+
|
|
134
|
+
const dev = await new Manifest(id, devInstanceMetadata, os.tmpdir()).read();
|
|
135
|
+
t.is(dev.proxies.length, 2);
|
|
136
|
+
t.is(dev.proxies[0].address, '0x123');
|
|
137
|
+
t.is(dev.proxies[1].address, '0x456');
|
|
138
|
+
|
|
139
|
+
await deleteFile(t, `.openzeppelin/unknown-${id}.json`);
|
|
140
|
+
await deleteFile(t, `${os.tmpdir()}/openzeppelin-upgrades/hardhat-${id}-${instanceId}.json`);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
test.serial('forked chain from known network with fallback name', async t => {
|
|
144
|
+
const forkedId = 80001;
|
|
145
|
+
const devId = 55555;
|
|
146
|
+
|
|
147
|
+
await deleteManifests(t, forkedId);
|
|
148
|
+
|
|
149
|
+
await writeTestManifest(`.openzeppelin/unknown-${forkedId}.json`);
|
|
150
|
+
|
|
151
|
+
const instanceId = '0xaaa';
|
|
152
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId, forkedNetwork: { chainId: forkedId } };
|
|
153
|
+
|
|
154
|
+
const manifest = new Manifest(devId, devInstanceMetadata, os.tmpdir());
|
|
155
|
+
|
|
156
|
+
await assertOldName(t, forkedId);
|
|
157
|
+
await manifest.lockedRun(async () => {
|
|
158
|
+
await fs.access(`${os.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`);
|
|
159
|
+
const data = await manifest.read();
|
|
160
|
+
data.proxies.push({
|
|
161
|
+
address: '0x456',
|
|
162
|
+
txHash: '0x0',
|
|
163
|
+
kind: 'uups',
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
await assertOldName(t, forkedId);
|
|
167
|
+
await manifest.write(data);
|
|
168
|
+
await assertOldName(t, forkedId); // original network file should not be changed
|
|
169
|
+
});
|
|
170
|
+
t.throwsAsync(fs.access(`.openzeppelin/chain-${forkedId}.lock`));
|
|
171
|
+
t.throwsAsync(fs.access(`${os.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`));
|
|
172
|
+
await fs.access(`${os.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
173
|
+
|
|
174
|
+
// check that the contents were NOT persisted to original manifest
|
|
175
|
+
const orig = await new Manifest(forkedId).read();
|
|
176
|
+
t.is(orig.proxies.length, 1);
|
|
177
|
+
t.is(orig.proxies[0].address, '0x123');
|
|
178
|
+
|
|
179
|
+
// check that the contents were persisted to dev copy of manifest
|
|
180
|
+
const dev = await new Manifest(devId, devInstanceMetadata, os.tmpdir()).read();
|
|
181
|
+
t.is(dev.proxies.length, 2);
|
|
182
|
+
t.is(dev.proxies[0].address, '0x123');
|
|
183
|
+
t.is(dev.proxies[1].address, '0x456');
|
|
184
|
+
|
|
185
|
+
await deleteManifests(t, forkedId);
|
|
186
|
+
await deleteFile(t, `${os.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
test.serial('forked chain from known network with actual name', async t => {
|
|
190
|
+
const forkedId = 80001;
|
|
191
|
+
const devId = 55555;
|
|
192
|
+
|
|
193
|
+
await deleteManifests(t, forkedId);
|
|
194
|
+
|
|
195
|
+
await writeTestManifest(`.openzeppelin/polygon-mumbai.json`);
|
|
196
|
+
|
|
197
|
+
const instanceId = '0xbbb';
|
|
198
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId, forkedNetwork: { chainId: forkedId } };
|
|
199
|
+
|
|
200
|
+
const manifest = new Manifest(devId, devInstanceMetadata, os.tmpdir());
|
|
201
|
+
|
|
202
|
+
await assertNewName(t, forkedId);
|
|
203
|
+
await manifest.lockedRun(async () => {
|
|
204
|
+
await fs.access(`${os.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`);
|
|
205
|
+
const data = await manifest.read();
|
|
206
|
+
data.proxies.push({
|
|
207
|
+
address: '0x456',
|
|
208
|
+
txHash: '0x0',
|
|
209
|
+
kind: 'uups',
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
await assertNewName(t, forkedId);
|
|
213
|
+
await manifest.write(data);
|
|
214
|
+
await assertNewName(t, forkedId); // original network file should not be changed
|
|
215
|
+
});
|
|
216
|
+
t.throwsAsync(fs.access(`.openzeppelin/chain-${forkedId}.lock`));
|
|
217
|
+
t.throwsAsync(fs.access(`${os.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`));
|
|
218
|
+
await fs.access(`${os.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
219
|
+
|
|
220
|
+
// check that the contents were NOT persisted to original manifest
|
|
221
|
+
const orig = await new Manifest(forkedId).read();
|
|
222
|
+
t.is(orig.proxies.length, 1);
|
|
223
|
+
t.is(orig.proxies[0].address, '0x123');
|
|
224
|
+
|
|
225
|
+
// check that the contents were persisted to dev copy of manifest
|
|
226
|
+
const dev = await new Manifest(devId, devInstanceMetadata, os.tmpdir()).read();
|
|
227
|
+
t.is(dev.proxies.length, 2);
|
|
228
|
+
t.is(dev.proxies[0].address, '0x123');
|
|
229
|
+
t.is(dev.proxies[1].address, '0x456');
|
|
230
|
+
|
|
231
|
+
await deleteManifests(t, forkedId);
|
|
232
|
+
await deleteFile(t, `${os.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
test.serial('forked chain, real manifest already locked', async t => {
|
|
236
|
+
const forkedId = 80001;
|
|
237
|
+
const devId = 55555;
|
|
238
|
+
|
|
239
|
+
const instanceId = '0xccc';
|
|
240
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId, forkedNetwork: { chainId: forkedId } };
|
|
241
|
+
|
|
242
|
+
const realManifest = new Manifest(forkedId);
|
|
243
|
+
const devManifest = new Manifest(devId, devInstanceMetadata, os.tmpdir());
|
|
244
|
+
|
|
245
|
+
try {
|
|
246
|
+
await realManifest.lockedRun(async () => {
|
|
247
|
+
await devManifest.read(0);
|
|
248
|
+
});
|
|
249
|
+
t.fail();
|
|
250
|
+
} catch (e: any) {
|
|
251
|
+
t.is(e.code, 'ELOCKED');
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
test.serial('forked chain, real manifest already locked but dev manifest exists', async t => {
|
|
256
|
+
const forkedId = 80001;
|
|
257
|
+
const devId = 55555;
|
|
258
|
+
|
|
259
|
+
const instanceId = '0xddd';
|
|
260
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId, forkedNetwork: { chainId: forkedId } };
|
|
261
|
+
|
|
262
|
+
const realManifest = new Manifest(forkedId);
|
|
263
|
+
const devManifest = new Manifest(devId, devInstanceMetadata, os.tmpdir());
|
|
264
|
+
|
|
265
|
+
// write dev manifest
|
|
266
|
+
await writeTestManifest(devManifest.file, '0x999');
|
|
267
|
+
|
|
268
|
+
// then write real manifest
|
|
269
|
+
await deleteManifests(t, forkedId);
|
|
270
|
+
await writeTestManifest(`.openzeppelin/polygon-mumbai.json`);
|
|
271
|
+
|
|
272
|
+
let devManifestContents;
|
|
273
|
+
await realManifest.lockedRun(async () => {
|
|
274
|
+
// should ignore real manifest and real lock file
|
|
275
|
+
devManifestContents = await devManifest.read();
|
|
276
|
+
t.is(devManifestContents.proxies.length, 1);
|
|
277
|
+
t.is(devManifestContents.proxies[0].address, '0x999');
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
await deleteManifests(t, forkedId);
|
|
281
|
+
await deleteFile(t, `${os.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
test.serial('forked chain without existing manifest', async t => {
|
|
285
|
+
const forkedId = 80001;
|
|
286
|
+
const devId = 55555;
|
|
287
|
+
|
|
288
|
+
await deleteManifests(t, forkedId);
|
|
289
|
+
|
|
290
|
+
const instanceId = '0xeee';
|
|
291
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId, forkedNetwork: { chainId: forkedId } };
|
|
292
|
+
|
|
293
|
+
const manifest = new Manifest(devId, devInstanceMetadata, os.tmpdir());
|
|
294
|
+
|
|
295
|
+
await manifest.lockedRun(async () => {
|
|
296
|
+
await fs.access(`${os.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`);
|
|
297
|
+
const data = await manifest.read();
|
|
298
|
+
data.proxies.push({
|
|
299
|
+
address: '0x456',
|
|
300
|
+
txHash: '0x0',
|
|
301
|
+
kind: 'uups',
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
await manifest.write(data);
|
|
305
|
+
});
|
|
306
|
+
t.throwsAsync(fs.access(`${os.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`));
|
|
307
|
+
await fs.access(`${os.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
308
|
+
|
|
309
|
+
// check that the contents were NOT persisted to regular manifest
|
|
310
|
+
t.throwsAsync(fs.access(`.openzeppelin/unknown-${forkedId}.json`));
|
|
311
|
+
t.throwsAsync(fs.access(`.openzeppelin/polygon-mumbai.json`));
|
|
312
|
+
|
|
313
|
+
// check that the contents were persisted to dev copy of manifest
|
|
314
|
+
const dev = await new Manifest(devId, devInstanceMetadata, os.tmpdir()).read();
|
|
315
|
+
t.is(dev.proxies.length, 1);
|
|
316
|
+
t.is(dev.proxies[0].address, '0x456');
|
|
317
|
+
|
|
318
|
+
await deleteManifests(t, forkedId);
|
|
319
|
+
await deleteFile(t, `${os.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
test.serial('dev instance with known network id', async t => {
|
|
323
|
+
const devId = 80001;
|
|
324
|
+
|
|
325
|
+
await deleteManifests(t, devId);
|
|
326
|
+
|
|
327
|
+
// dev instance without forking, so this real manifest should not be actually used
|
|
328
|
+
await writeTestManifest(`.openzeppelin/polygon-mumbai.json`);
|
|
329
|
+
|
|
330
|
+
const instanceId = '0xfff';
|
|
331
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId };
|
|
332
|
+
|
|
333
|
+
const manifest = new Manifest(devId, devInstanceMetadata, os.tmpdir());
|
|
334
|
+
|
|
335
|
+
await manifest.lockedRun(async () => {
|
|
336
|
+
await fs.access(`${os.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`);
|
|
337
|
+
const data = await manifest.read();
|
|
338
|
+
data.proxies.push({
|
|
339
|
+
address: '0x456',
|
|
340
|
+
txHash: '0x0',
|
|
341
|
+
kind: 'uups',
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
await manifest.write(data);
|
|
345
|
+
});
|
|
346
|
+
t.throwsAsync(fs.access(`${os.tmpdir()}/openzeppelin-upgrades/chain-${devId}-${instanceId}.lock`));
|
|
347
|
+
await fs.access(`${os.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
348
|
+
|
|
349
|
+
// check that the contents were NOT persisted to original manifest
|
|
350
|
+
const orig = await new Manifest(devId).read();
|
|
351
|
+
t.is(orig.proxies.length, 1);
|
|
352
|
+
t.is(orig.proxies[0].address, '0x123');
|
|
353
|
+
|
|
354
|
+
// check that the contents were persisted to dev manifest without original contents
|
|
355
|
+
const dev = await new Manifest(devId, devInstanceMetadata, os.tmpdir()).read();
|
|
356
|
+
t.is(dev.proxies.length, 1);
|
|
357
|
+
t.is(dev.proxies[0].address, '0x456');
|
|
358
|
+
|
|
359
|
+
await deleteManifests(t, devId);
|
|
360
|
+
await deleteFile(t, `${os.tmpdir()}/openzeppelin-upgrades/hardhat-${devId}-${instanceId}.json`);
|
|
361
|
+
});
|
|
362
|
+
|
|
106
363
|
test('manifest name for a known network', t => {
|
|
107
364
|
const manifest = new Manifest(1);
|
|
108
365
|
t.is(manifest.file, '.openzeppelin/mainnet.json');
|
|
109
366
|
});
|
|
110
367
|
|
|
368
|
+
test('manifest name for a known network, development instance', t => {
|
|
369
|
+
const chainId = 1;
|
|
370
|
+
const instanceId = '0x11111';
|
|
371
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId };
|
|
372
|
+
|
|
373
|
+
const manifest = new Manifest(chainId, devInstanceMetadata, '/tmp');
|
|
374
|
+
|
|
375
|
+
const expectedPath = `/tmp/openzeppelin-upgrades/hardhat-${chainId}-${instanceId}.json`;
|
|
376
|
+
t.is(manifest.file, expectedPath);
|
|
377
|
+
t.is(manifest.fallbackFile, expectedPath);
|
|
378
|
+
});
|
|
379
|
+
|
|
111
380
|
test('manifest name for an unknown network', t => {
|
|
112
381
|
const id = 55555;
|
|
113
382
|
const manifest = new Manifest(id);
|
|
114
383
|
t.is(manifest.file, `.openzeppelin/unknown-${id}.json`);
|
|
115
384
|
});
|
|
116
385
|
|
|
386
|
+
test('manifest name for an unknown network, development instance, non hardhat', t => {
|
|
387
|
+
const chainId = 55555;
|
|
388
|
+
const instanceId = '0x22222';
|
|
389
|
+
const devInstanceMetadata = { networkName: 'dev', instanceId: instanceId };
|
|
390
|
+
|
|
391
|
+
const manifest = new Manifest(chainId, devInstanceMetadata, '/tmp');
|
|
392
|
+
|
|
393
|
+
const expectedPath = `/tmp/openzeppelin-upgrades/dev-${chainId}-${instanceId}.json`;
|
|
394
|
+
t.is(manifest.file, expectedPath);
|
|
395
|
+
t.is(manifest.fallbackFile, expectedPath);
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
test('manifest name for an unknown network, development instance, hardhat', t => {
|
|
399
|
+
const chainId = 31337;
|
|
400
|
+
const instanceId = '0x22223';
|
|
401
|
+
const devInstanceMetadata = { networkName: 'dev', instanceId: instanceId };
|
|
402
|
+
|
|
403
|
+
const manifest = new Manifest(chainId, devInstanceMetadata, '/tmp');
|
|
404
|
+
|
|
405
|
+
const expectedPath = `/tmp/openzeppelin-upgrades/dev-${chainId}-${instanceId}.json`;
|
|
406
|
+
t.is(manifest.file, expectedPath);
|
|
407
|
+
t.is(manifest.fallbackFile, `.openzeppelin/unknown-${chainId}.json`);
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
test('manifest dev instance without tmp dir param', t => {
|
|
411
|
+
const chainId = 1;
|
|
412
|
+
const instanceId = '0x33333';
|
|
413
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId };
|
|
414
|
+
|
|
415
|
+
t.throws(() => new Manifest(chainId, devInstanceMetadata));
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
test('manifest lock file name for a development network instance', async t => {
|
|
419
|
+
const chainId = 55555;
|
|
420
|
+
const instanceId = '0x55555';
|
|
421
|
+
const devInstanceMetadata = { networkName: 'hardhat', instanceId: instanceId };
|
|
422
|
+
|
|
423
|
+
const manifest = new Manifest(chainId, devInstanceMetadata, '/tmp');
|
|
424
|
+
|
|
425
|
+
await manifest.lockedRun(async () => {
|
|
426
|
+
t.throwsAsync(fs.access(`.openzeppelin/chain-${chainId}.lock`));
|
|
427
|
+
t.throwsAsync(fs.access(`.openzeppelin/chain-${chainId}-${instanceId}.lock`));
|
|
428
|
+
t.throwsAsync(fs.access(`/tmp/openzeppelin-upgrades/chain-${chainId}.lock`));
|
|
429
|
+
await fs.access(`/tmp/openzeppelin-upgrades/chain-${chainId}-${instanceId}.lock`);
|
|
430
|
+
});
|
|
431
|
+
});
|
|
432
|
+
|
|
117
433
|
test('normalize manifest', t => {
|
|
118
434
|
const deployment = {
|
|
119
435
|
address: '0x1234',
|
package/src/manifest.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import os from 'os';
|
|
1
2
|
import path from 'path';
|
|
2
3
|
import { promises as fs } from 'fs';
|
|
3
|
-
import { EthereumProvider, getChainId, networkNames } from './provider';
|
|
4
|
+
import { EthereumProvider, getChainId, getHardhatMetadata, networkNames } from './provider';
|
|
4
5
|
import lockfile from 'proper-lockfile';
|
|
5
6
|
import { compare as compareVersions } from 'compare-versions';
|
|
6
7
|
|
|
@@ -9,6 +10,8 @@ import type { StorageLayout } from './storage';
|
|
|
9
10
|
import { pick } from './utils/pick';
|
|
10
11
|
import { mapValues } from './utils/map-values';
|
|
11
12
|
import { UpgradesError } from './error';
|
|
13
|
+
import debug from './utils/debug';
|
|
14
|
+
import { assert } from './utils/assert';
|
|
12
15
|
|
|
13
16
|
const currentManifestVersion = '3.2';
|
|
14
17
|
|
|
@@ -38,27 +41,109 @@ function defaultManifest(): ManifestData {
|
|
|
38
41
|
};
|
|
39
42
|
}
|
|
40
43
|
|
|
41
|
-
const
|
|
44
|
+
const MANIFEST_DEFAULT_DIR = '.openzeppelin';
|
|
45
|
+
const MANIFEST_TEMP_DIR = 'openzeppelin-upgrades';
|
|
46
|
+
|
|
47
|
+
async function getDevInstanceMetadata(
|
|
48
|
+
provider: EthereumProvider,
|
|
49
|
+
chainId: number,
|
|
50
|
+
): Promise<DevInstanceMetadata | undefined> {
|
|
51
|
+
let hardhatMetadata;
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
hardhatMetadata = await getHardhatMetadata(provider);
|
|
55
|
+
} catch (e: unknown) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (hardhatMetadata.chainId !== chainId) {
|
|
60
|
+
throw new Error(
|
|
61
|
+
`Broken invariant: Hardhat metadata's chainId ${hardhatMetadata.chainId} does not match eth_chainId ${chainId}`,
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return {
|
|
66
|
+
networkName: 'hardhat',
|
|
67
|
+
instanceId: hardhatMetadata.instanceId,
|
|
68
|
+
forkedNetwork: hardhatMetadata.forkedNetwork,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function getSuffix(chainId: number, devInstanceMetadata?: DevInstanceMetadata) {
|
|
73
|
+
if (devInstanceMetadata !== undefined) {
|
|
74
|
+
return `${chainId}-${devInstanceMetadata.instanceId}`;
|
|
75
|
+
} else {
|
|
76
|
+
return `${chainId}`;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
interface DevInstanceMetadata {
|
|
81
|
+
networkName: string;
|
|
82
|
+
instanceId: string;
|
|
83
|
+
forkedNetwork?: {
|
|
84
|
+
// The chainId of the network that is being forked
|
|
85
|
+
chainId: number;
|
|
86
|
+
};
|
|
87
|
+
}
|
|
42
88
|
|
|
43
89
|
export class Manifest {
|
|
44
90
|
readonly chainId: number;
|
|
45
91
|
readonly file: string;
|
|
46
|
-
|
|
92
|
+
readonly fallbackFile: string;
|
|
93
|
+
private readonly dir: string;
|
|
94
|
+
|
|
95
|
+
private readonly chainIdSuffix: string;
|
|
96
|
+
private readonly parent?: Manifest;
|
|
47
97
|
|
|
48
98
|
private locked = false;
|
|
49
99
|
|
|
50
100
|
static async forNetwork(provider: EthereumProvider): Promise<Manifest> {
|
|
51
|
-
|
|
101
|
+
const chainId = await getChainId(provider);
|
|
102
|
+
const devInstanceMetadata = await getDevInstanceMetadata(provider, chainId);
|
|
103
|
+
if (devInstanceMetadata !== undefined) {
|
|
104
|
+
return new Manifest(chainId, devInstanceMetadata, os.tmpdir());
|
|
105
|
+
} else {
|
|
106
|
+
return new Manifest(chainId);
|
|
107
|
+
}
|
|
52
108
|
}
|
|
53
109
|
|
|
54
|
-
constructor(chainId: number) {
|
|
110
|
+
constructor(chainId: number, devInstanceMetadata?: DevInstanceMetadata, osTmpDir?: string) {
|
|
55
111
|
this.chainId = chainId;
|
|
112
|
+
this.chainIdSuffix = getSuffix(chainId, devInstanceMetadata);
|
|
56
113
|
|
|
57
|
-
const
|
|
58
|
-
this.fallbackFile = path.join(manifestDir, `${fallbackName}.json`);
|
|
114
|
+
const defaultFallbackName = `unknown-${chainId}`;
|
|
59
115
|
|
|
60
|
-
|
|
61
|
-
|
|
116
|
+
if (devInstanceMetadata !== undefined) {
|
|
117
|
+
assert(osTmpDir !== undefined);
|
|
118
|
+
this.dir = path.join(osTmpDir, MANIFEST_TEMP_DIR);
|
|
119
|
+
debug('development manifest directory:', this.dir);
|
|
120
|
+
|
|
121
|
+
const devName = `${devInstanceMetadata.networkName}-${this.chainIdSuffix}`;
|
|
122
|
+
const devFile = path.join(this.dir, `${devName}.json`);
|
|
123
|
+
|
|
124
|
+
this.file = devFile;
|
|
125
|
+
if (chainId === 31337) {
|
|
126
|
+
this.fallbackFile = path.join(MANIFEST_DEFAULT_DIR, `${defaultFallbackName}.json`);
|
|
127
|
+
} else {
|
|
128
|
+
this.fallbackFile = devFile;
|
|
129
|
+
}
|
|
130
|
+
debug('development manifest file:', this.file, 'fallback file:', this.fallbackFile);
|
|
131
|
+
|
|
132
|
+
if (devInstanceMetadata.forkedNetwork !== undefined) {
|
|
133
|
+
const forkedChainId = devInstanceMetadata.forkedNetwork.chainId;
|
|
134
|
+
debug('forked network chain id:', forkedChainId);
|
|
135
|
+
|
|
136
|
+
this.parent = new Manifest(forkedChainId);
|
|
137
|
+
}
|
|
138
|
+
} else {
|
|
139
|
+
this.dir = MANIFEST_DEFAULT_DIR;
|
|
140
|
+
|
|
141
|
+
const networkName = networkNames[chainId];
|
|
142
|
+
this.file = path.join(MANIFEST_DEFAULT_DIR, `${networkName ?? defaultFallbackName}.json`);
|
|
143
|
+
this.fallbackFile = path.join(MANIFEST_DEFAULT_DIR, `${defaultFallbackName}.json`);
|
|
144
|
+
|
|
145
|
+
debug('manifest file:', this.file, 'fallback file:', this.fallbackFile);
|
|
146
|
+
}
|
|
62
147
|
}
|
|
63
148
|
|
|
64
149
|
async getAdmin(): Promise<Deployment | undefined> {
|
|
@@ -143,14 +228,18 @@ export class Manifest {
|
|
|
143
228
|
}
|
|
144
229
|
}
|
|
145
230
|
|
|
146
|
-
async read(): Promise<ManifestData> {
|
|
147
|
-
const release = this.locked ? undefined : await this.lock();
|
|
231
|
+
async read(retries?: number): Promise<ManifestData> {
|
|
232
|
+
const release = this.locked ? undefined : await this.lock(retries);
|
|
148
233
|
try {
|
|
149
234
|
const data = JSON.parse(await this.readFile()) as ManifestData;
|
|
150
235
|
return validateOrUpdateManifestVersion(data);
|
|
151
236
|
} catch (e: any) {
|
|
152
237
|
if (e.code === 'ENOENT') {
|
|
153
|
-
|
|
238
|
+
if (this.parent !== undefined) {
|
|
239
|
+
return await this.parent.read(retries);
|
|
240
|
+
} else {
|
|
241
|
+
return defaultManifest();
|
|
242
|
+
}
|
|
154
243
|
} else {
|
|
155
244
|
throw e;
|
|
156
245
|
}
|
|
@@ -179,11 +268,11 @@ export class Manifest {
|
|
|
179
268
|
}
|
|
180
269
|
}
|
|
181
270
|
|
|
182
|
-
private async lock() {
|
|
183
|
-
const lockfileName = path.join(
|
|
271
|
+
private async lock(retries = 3) {
|
|
272
|
+
const lockfileName = path.join(this.dir, `chain-${this.chainIdSuffix}`);
|
|
184
273
|
|
|
185
274
|
await fs.mkdir(path.dirname(lockfileName), { recursive: true });
|
|
186
|
-
const release = await lockfile.lock(lockfileName, { retries
|
|
275
|
+
const release = await lockfile.lock(lockfileName, { retries, realpath: false });
|
|
187
276
|
this.locked = true;
|
|
188
277
|
return async () => {
|
|
189
278
|
await release();
|
package/src/provider.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export interface EthereumProvider {
|
|
2
|
+
send(method: 'hardhat_metadata', params: []): Promise<HardhatMetadata>;
|
|
2
3
|
send(method: 'web3_clientVersion', params: []): Promise<string>;
|
|
3
4
|
send(method: 'net_version', params: []): Promise<string>;
|
|
4
5
|
send(method: 'eth_chainId', params: []): Promise<string>;
|
|
6
|
+
send(method: 'eth_instanceId', params: []): Promise<string>;
|
|
5
7
|
send(method: 'eth_getCode', params: [string, string]): Promise<string>;
|
|
6
8
|
send(method: 'eth_call', params: unknown[]): Promise<string>;
|
|
7
9
|
send(method: 'eth_getStorageAt', params: [string, string, string]): Promise<string>;
|
|
@@ -10,6 +12,15 @@ export interface EthereumProvider {
|
|
|
10
12
|
send(method: string, params: unknown[]): Promise<unknown>;
|
|
11
13
|
}
|
|
12
14
|
|
|
15
|
+
interface HardhatMetadata {
|
|
16
|
+
chainId: number;
|
|
17
|
+
instanceId: string;
|
|
18
|
+
forkedNetwork?: {
|
|
19
|
+
// The chainId of the network that is being forked
|
|
20
|
+
chainId: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
13
24
|
interface EthereumTransaction {
|
|
14
25
|
blockHash: string | null;
|
|
15
26
|
input: string;
|
|
@@ -38,6 +49,14 @@ export async function getClientVersion(provider: EthereumProvider): Promise<stri
|
|
|
38
49
|
return provider.send('web3_clientVersion', []);
|
|
39
50
|
}
|
|
40
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Gets Hardhat metadata when used with Hardhat 2.12.3 or later.
|
|
54
|
+
* The underlying provider will throw an error if this RPC method is not available.
|
|
55
|
+
*/
|
|
56
|
+
export async function getHardhatMetadata(provider: EthereumProvider): Promise<HardhatMetadata> {
|
|
57
|
+
return provider.send('hardhat_metadata', []);
|
|
58
|
+
}
|
|
59
|
+
|
|
41
60
|
export async function getStorageAt(
|
|
42
61
|
provider: EthereumProvider,
|
|
43
62
|
address: string,
|
|
@@ -123,7 +142,7 @@ export async function isDevelopmentNetwork(provider: EthereumProvider): Promise<
|
|
|
123
142
|
} else {
|
|
124
143
|
const clientVersion = await getClientVersion(provider);
|
|
125
144
|
const [name] = clientVersion.split('/', 1);
|
|
126
|
-
return name === 'HardhatNetwork' || name === 'EthereumJS TestRPC';
|
|
145
|
+
return name === 'HardhatNetwork' || name === 'EthereumJS TestRPC' || name === 'anvil';
|
|
127
146
|
}
|
|
128
147
|
}
|
|
129
148
|
|