Skip to content

Commit d63906d

Browse files
authoredFeb 14, 2023
Enable migrating from previous Hardhat manifest location to dev instance manifest (#741)

File tree

2 files changed

+59
-5
lines changed

2 files changed

+59
-5
lines changed
 

‎packages/core/src/manifest.test.ts

+48
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,42 @@ test.serial('rename manifest', async t => {
104104
await deleteManifests(t, id);
105105
});
106106

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+
107143
test.serial('forked chain from known network with fallback name', async t => {
108144
const forkedId = 80001;
109145
const devId = 55555;
@@ -359,6 +395,18 @@ test('manifest name for an unknown network, development instance, non hardhat',
359395
t.is(manifest.fallbackFile, expectedPath);
360396
});
361397

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+
362410
test('manifest dev instance without tmp dir param', t => {
363411
const chainId = 1;
364412
const instanceId = '0x33333';

‎packages/core/src/manifest.ts

+11-5
Original file line numberDiff line numberDiff line change
@@ -111,17 +111,23 @@ export class Manifest {
111111
this.chainId = chainId;
112112
this.chainIdSuffix = getSuffix(chainId, devInstanceMetadata);
113113

114+
const defaultFallbackName = `unknown-${chainId}`;
115+
114116
if (devInstanceMetadata !== undefined) {
115117
assert(osTmpDir !== undefined);
116118
this.dir = path.join(osTmpDir, MANIFEST_TEMP_DIR);
117119
debug('development manifest directory:', this.dir);
118120

119121
const devName = `${devInstanceMetadata.networkName}-${this.chainIdSuffix}`;
120122
const devFile = path.join(this.dir, `${devName}.json`);
121-
debug('development manifest file:', devFile);
122123

123-
this.fallbackFile = devFile;
124124
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);
125131

126132
if (devInstanceMetadata.forkedNetwork !== undefined) {
127133
const forkedChainId = devInstanceMetadata.forkedNetwork.chainId;
@@ -131,10 +137,10 @@ export class Manifest {
131137
}
132138
} else {
133139
this.dir = MANIFEST_DEFAULT_DIR;
140+
134141
const networkName = networkNames[chainId];
135-
const fallbackName = `unknown-${chainId}`;
136-
this.fallbackFile = path.join(MANIFEST_DEFAULT_DIR, `${fallbackName}.json`);
137-
this.file = path.join(MANIFEST_DEFAULT_DIR, `${networkName ?? fallbackName}.json`);
142+
this.file = path.join(MANIFEST_DEFAULT_DIR, `${networkName ?? defaultFallbackName}.json`);
143+
this.fallbackFile = path.join(MANIFEST_DEFAULT_DIR, `${defaultFallbackName}.json`);
138144

139145
debug('manifest file:', this.file, 'fallback file:', this.fallbackFile);
140146
}

0 commit comments

Comments
 (0)
Please sign in to comment.