@openzeppelin/upgrades-core 1.32.0-alpha.0 → 1.32.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.
@@ -1 +1 @@
1
- {"version":3,"file":"impl-store.d.ts","sourceRoot":"","sources":["../src/impl-store.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,cAAc,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAwB,MAAM,YAAY,CAAC;AACpE,OAAO,EACL,UAAU,EAEV,gBAAgB,EAIjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAQ/B,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IACrB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;CACpC;AAqFD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC,QAErE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,EACrC,IAAI,CAAC,EAAE,UAAU,EACjB,KAAK,CAAC,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,0BAA0B,CAAC,CAAC,SAAS,cAAc,EACvE,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,IAAI,CAAC,EAAE,UAAU,EACjB,KAAK,CAAC,EAAE,OAAO,EACf,mBAAmB,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAC1F,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,CASzB;AAiBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc;;;EAU7E;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,EACjC,IAAI,CAAC,EAAE,UAAU,GAChB,OAAO,CAAC,MAAM,CAAC,CAEjB"}
1
+ {"version":3,"file":"impl-store.d.ts","sourceRoot":"","sources":["../src/impl-store.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,cAAc,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAwB,MAAM,YAAY,CAAC;AACpE,OAAO,EACL,UAAU,EAEV,gBAAgB,EAIjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAQ/B,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IACrB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;CACpC;AAmFD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC,QAErE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,EACrC,IAAI,CAAC,EAAE,UAAU,EACjB,KAAK,CAAC,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,0BAA0B,CAAC,CAAC,SAAS,cAAc,EACvE,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,IAAI,CAAC,EAAE,UAAU,EACjB,KAAK,CAAC,EAAE,OAAO,EACf,mBAAmB,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAC1F,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,CASzB;AAsBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc;;;EAU7E;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,EACjC,IAAI,CAAC,EAAE,UAAU,GAChB,OAAO,CAAC,MAAM,CAAC,CAEjB"}
@@ -36,13 +36,11 @@ async function fetchOrDeployGeneric(lens, provider, deploy, opts, merge, getRemo
36
36
  const updated = await (0, deployment_1.resumeOrDeploy)(provider, stored, deploy, lens.type, opts, deployment, merge, getRemoteDeployment);
37
37
  if (updated !== stored) {
38
38
  if (merge && deployment.merge) {
39
- // only check primary addresses for clashes, since the address could already exist in an allAddresses field
40
- // but the above updated and stored objects are different instances representing the same entry
41
- await checkForAddressClash(provider, data, updated, false);
39
+ await checkForAddressClash(provider, data, updated, true);
42
40
  deployment.merge(updated);
43
41
  }
44
42
  else {
45
- await checkForAddressClash(provider, data, updated, true);
43
+ await checkForAddressClash(provider, data, updated, false);
46
44
  deployment.set(updated);
47
45
  }
48
46
  await manifest.write(data);
@@ -118,7 +116,12 @@ const implLens = (versionWithoutMetadata) => lens(`implementation ${versionWitho
118
116
  const existing = data.impls[versionWithoutMetadata];
119
117
  if (existing !== undefined && value !== undefined) {
120
118
  const { address, allAddresses } = mergeAddresses(existing, value);
121
- data.impls[versionWithoutMetadata] = { ...existing, address, allAddresses };
119
+ data.impls[versionWithoutMetadata] = {
120
+ ...existing,
121
+ address,
122
+ allAddresses,
123
+ remoteDeploymentId: value.remoteDeploymentId,
124
+ };
122
125
  }
123
126
  else {
124
127
  data.impls[versionWithoutMetadata] = value;
@@ -151,24 +154,31 @@ const adminLens = lens('proxy admin', 'proxy admin', data => ({
151
154
  function lens(description, type, fn) {
152
155
  return Object.assign(fn, { description, type });
153
156
  }
154
- async function checkForAddressClash(provider, data, updated, checkAllAddresses) {
155
- const clash = lookupDeployment(data, updated.address, checkAllAddresses);
156
- if (clash !== undefined) {
157
- if (await (0, provider_1.isDevelopmentNetwork)(provider)) {
157
+ async function checkForAddressClash(provider, data, updated, merge) {
158
+ let clash;
159
+ const findClash = () => lookupDeployment(data, updated.address, !merge);
160
+ if (await (0, provider_1.isDevelopmentNetwork)(provider)) {
161
+ // Look for clashes so that we can delete deployments from older runs.
162
+ // `merge` only checks primary addresses for clashes, since the address could already exist in an allAddresses field
163
+ // but the updated and stored objects are different instances representing the same entry.
164
+ clash = findClash();
165
+ if (clash !== undefined) {
158
166
  (0, debug_1.default)('deleting a previous deployment at address', updated.address);
159
167
  clash.set(undefined);
160
168
  }
161
- else {
169
+ }
170
+ else if (!merge) {
171
+ clash = findClash();
172
+ if (clash !== undefined) {
162
173
  const existing = clash.get();
163
174
  // it's a clash if there is no deployment id or if deployment ids don't match
164
175
  if (existing !== undefined &&
165
176
  (existing.remoteDeploymentId === undefined || existing.remoteDeploymentId !== updated.remoteDeploymentId)) {
166
- throw new Error(`The following deployment clashes with an existing one at ${updated.address}\n\n` +
167
- JSON.stringify(updated, null, 2) +
168
- `\n\n`);
177
+ throw new Error(`The deployment clashes with an existing one at ${updated.address}.\n\n` +
178
+ `Deployments: ${JSON.stringify({ existing, updated }, null, 2)}\n\n`);
169
179
  }
170
180
  }
171
- }
181
+ } // else, merge indicates that the user is force-importing or redeploying an implementation, so we simply allow merging the entries
172
182
  }
173
183
  function lookupDeployment(data, address, checkAllAddresses) {
174
184
  if (data.admin?.address === address) {
@@ -1 +1 @@
1
- {"version":3,"file":"impl-store.js","sourceRoot":"","sources":["../src/impl-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"impl-store.js","sourceRoot":"","sources":["../src/impl-store.ts"],"names":[],"mappings":"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"}
@@ -54,28 +54,28 @@ const version2 = (0, version_1.getVersion)('02', '02');
54
54
  (0, ava_1.default)('merge addresses', async (t) => {
55
55
  const depl1 = { address: '0x1' };
56
56
  const depl2 = { address: '0x2' };
57
- const { address, allAddresses } = await (0, impl_store_1.mergeAddresses)(depl1, depl2);
57
+ const { address, allAddresses } = (0, impl_store_1.mergeAddresses)(depl1, depl2);
58
58
  t.is(address, '0x1');
59
59
  t.true(unorderedEqual(allAddresses, ['0x1', '0x2']), allAddresses.toString());
60
60
  });
61
61
  (0, ava_1.default)('merge multiple existing addresses', async (t) => {
62
62
  const depl1 = { address: '0x1', allAddresses: ['0x1a', '0x1b'] };
63
63
  const depl2 = { address: '0x2' };
64
- const { address, allAddresses } = await (0, impl_store_1.mergeAddresses)(depl1, depl2);
64
+ const { address, allAddresses } = (0, impl_store_1.mergeAddresses)(depl1, depl2);
65
65
  t.is(address, '0x1');
66
66
  t.true(unorderedEqual(allAddresses, ['0x1', '0x1a', '0x1b', '0x2']), allAddresses.toString());
67
67
  });
68
68
  (0, ava_1.default)('merge all addresses', async (t) => {
69
69
  const depl1 = { address: '0x1', allAddresses: ['0x1a', '0x1b'] };
70
70
  const depl2 = { address: '0x2', allAddresses: ['0x2a', '0x2b'] };
71
- const { address, allAddresses } = await (0, impl_store_1.mergeAddresses)(depl1, depl2);
71
+ const { address, allAddresses } = (0, impl_store_1.mergeAddresses)(depl1, depl2);
72
72
  t.is(address, '0x1');
73
73
  t.true(unorderedEqual(allAddresses, ['0x1', '0x1a', '0x1b', '0x2', '0x2a', '0x2b']), allAddresses.toString());
74
74
  });
75
75
  function unorderedEqual(arr1, arr2) {
76
76
  return arr1.every(i => arr2.includes(i)) && arr2.every(i => arr1.includes(i));
77
77
  }
78
- (0, ava_1.default)('platform - replace tx hash for deployment', async (t) => {
78
+ (0, ava_1.default)('defender - replace tx hash for deployment', async (t) => {
79
79
  const provider = (0, stub_provider_1.stubProvider)();
80
80
  // create a pending deployment with id
81
81
  const fakeDeploy = await provider.deployPending();
@@ -104,4 +104,73 @@ function unorderedEqual(arr1, arr2) {
104
104
  t.is(deployment.address, fakeDeploy.address);
105
105
  t.is(deployment.txHash, '0x2');
106
106
  });
107
+ (0, ava_1.default)('defender - address clash', async (t) => {
108
+ const provider = (0, stub_provider_1.stubProvider)();
109
+ // create a pending deployment with id
110
+ const fakeDeploy = await provider.deployPending();
111
+ provider.removeContract(fakeDeploy.address);
112
+ async function deployment1() {
113
+ return {
114
+ ...fakeDeploy,
115
+ txHash: '0x1',
116
+ remoteDeploymentId: 'abc',
117
+ };
118
+ }
119
+ const mockPendingDeployment = sinon_1.default.stub().returns({
120
+ status: 'submitted',
121
+ txHash: '0x1',
122
+ });
123
+ // let it timeout
124
+ await t.throwsAsync((0, impl_store_1.fetchOrDeployGetDeployment)(version1, provider, deployment1, { timeout: 1, pollingInterval: 0 }, undefined, mockPendingDeployment));
125
+ // simulate a new deployment with the same address, but different tx hash and deployment id
126
+ async function deployment2() {
127
+ return {
128
+ ...fakeDeploy,
129
+ txHash: '0x2',
130
+ remoteDeploymentId: 'def',
131
+ };
132
+ }
133
+ // deploy with a different version hash
134
+ const error = await t.throwsAsync((0, impl_store_1.fetchOrDeployGetDeployment)(version2, provider, deployment2, { timeout: 1, pollingInterval: 0 }, undefined, mockPendingDeployment));
135
+ t.true(error?.message.startsWith(`The deployment clashes with an existing one at ${fakeDeploy.address}`), error?.message);
136
+ });
137
+ (0, ava_1.default)('defender - merge avoids address clash, replaces deployment id', async (t) => {
138
+ const provider = (0, stub_provider_1.stubProvider)();
139
+ const MERGE = true;
140
+ // create a pending deployment with id
141
+ const fakeDeploy = await provider.deployPending();
142
+ provider.removeContract(fakeDeploy.address);
143
+ async function deployment1() {
144
+ return {
145
+ ...fakeDeploy,
146
+ txHash: '0x1',
147
+ remoteDeploymentId: 'abc',
148
+ };
149
+ }
150
+ const getDeploymentResponse1 = sinon_1.default.stub().returns({
151
+ status: 'submitted',
152
+ txHash: '0x1',
153
+ });
154
+ // let it timeout
155
+ await t.throwsAsync((0, impl_store_1.fetchOrDeployGetDeployment)(version1, provider, deployment1, { timeout: 1, pollingInterval: 0 }, MERGE, getDeploymentResponse1));
156
+ // simulate a failed previous deployment
157
+ const getDeploymentResponse2 = sinon_1.default.stub().returns({
158
+ status: 'failed',
159
+ txHash: '0x1',
160
+ });
161
+ // redeploy with a new deployment id
162
+ async function deployment2() {
163
+ return {
164
+ ...fakeDeploy,
165
+ txHash: '0x2',
166
+ remoteDeploymentId: 'def',
167
+ };
168
+ }
169
+ // make the contract code exist
170
+ provider.addContract(fakeDeploy.address);
171
+ const deployment = await (0, impl_store_1.fetchOrDeployGetDeployment)(version1, provider, deployment2, { timeout: 1, pollingInterval: 0 }, MERGE, getDeploymentResponse2);
172
+ t.is(deployment.address, fakeDeploy.address);
173
+ t.is(deployment.txHash, '0x2');
174
+ t.is(deployment.remoteDeploymentId, 'def');
175
+ });
107
176
  //# sourceMappingURL=impl-store.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"impl-store.test.js","sourceRoot":"","sources":["../src/impl-store.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"impl-store.test.js","sourceRoot":"","sources":["../src/impl-store.test.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.32.0-alpha.0",
3
+ "version": "1.32.0",
4
4
  "description": "",
5
5
  "repository": "https://github.com/OpenZeppelin/openzeppelin-upgrades/tree/master/packages/core",
6
6
  "license": "MIT",
@@ -45,7 +45,7 @@
45
45
  "devDependencies": {
46
46
  "@ava/typescript": "^4.0.0",
47
47
  "@nomicfoundation/hardhat-ethers": "^3.0.5",
48
- "@openzeppelin/contracts": "5.0.0",
48
+ "@openzeppelin/contracts": "5.0.1",
49
49
  "@openzeppelin/upgrades-core-legacy": "npm:@openzeppelin/upgrades-core@1.31.3",
50
50
  "@types/cbor": "^5.0.0",
51
51
  "@types/debug": "^4.1.5",
@@ -71,5 +71,5 @@
71
71
  "proper-lockfile": "^4.1.1",
72
72
  "solidity-ast": "^0.4.51"
73
73
  },
74
- "gitHead": "7fd74e339fe760d23aea5cc0bbf6bac525323ab4"
74
+ "gitHead": "3b113ee12d1bb47cd3cf736f1c70b1302289e8d2"
75
75
  }
@@ -10,6 +10,7 @@ import { fetchOrDeploy, fetchOrDeployGetDeployment, mergeAddresses } from './imp
10
10
  import { getVersion } from './version';
11
11
  import { stubProvider } from './stub-provider';
12
12
  import { ImplDeployment } from './manifest';
13
+ import { RemoteDeploymentId } from './deployment';
13
14
 
14
15
  test.before(async () => {
15
16
  process.chdir(await fs.mkdtemp(path.join(os.tmpdir(), 'upgrades-core-test-')));
@@ -61,7 +62,7 @@ test('merge addresses', async t => {
61
62
  const depl1 = { address: '0x1' } as ImplDeployment;
62
63
  const depl2 = { address: '0x2' } as ImplDeployment;
63
64
 
64
- const { address, allAddresses } = await mergeAddresses(depl1, depl2);
65
+ const { address, allAddresses } = mergeAddresses(depl1, depl2);
65
66
  t.is(address, '0x1');
66
67
  t.true(unorderedEqual(allAddresses, ['0x1', '0x2']), allAddresses.toString());
67
68
  });
@@ -70,7 +71,7 @@ test('merge multiple existing addresses', async t => {
70
71
  const depl1 = { address: '0x1', allAddresses: ['0x1a', '0x1b'] } as ImplDeployment;
71
72
  const depl2 = { address: '0x2' } as ImplDeployment;
72
73
 
73
- const { address, allAddresses } = await mergeAddresses(depl1, depl2);
74
+ const { address, allAddresses } = mergeAddresses(depl1, depl2);
74
75
  t.is(address, '0x1');
75
76
  t.true(unorderedEqual(allAddresses, ['0x1', '0x1a', '0x1b', '0x2']), allAddresses.toString());
76
77
  });
@@ -79,7 +80,7 @@ test('merge all addresses', async t => {
79
80
  const depl1 = { address: '0x1', allAddresses: ['0x1a', '0x1b'] } as ImplDeployment;
80
81
  const depl2 = { address: '0x2', allAddresses: ['0x2a', '0x2b'] } as ImplDeployment;
81
82
 
82
- const { address, allAddresses } = await mergeAddresses(depl1, depl2);
83
+ const { address, allAddresses } = mergeAddresses(depl1, depl2);
83
84
  t.is(address, '0x1');
84
85
  t.true(unorderedEqual(allAddresses, ['0x1', '0x1a', '0x1b', '0x2', '0x2a', '0x2b']), allAddresses.toString());
85
86
  });
@@ -88,7 +89,7 @@ function unorderedEqual(arr1: string[], arr2: string[]) {
88
89
  return arr1.every(i => arr2.includes(i)) && arr2.every(i => arr1.includes(i));
89
90
  }
90
91
 
91
- test('platform - replace tx hash for deployment', async t => {
92
+ test('defender - replace tx hash for deployment', async t => {
92
93
  const provider = stubProvider();
93
94
 
94
95
  // create a pending deployment with id
@@ -137,3 +138,126 @@ test('platform - replace tx hash for deployment', async t => {
137
138
  t.is(deployment.address, fakeDeploy.address);
138
139
  t.is(deployment.txHash, '0x2');
139
140
  });
141
+
142
+ test('defender - address clash', async t => {
143
+ const provider = stubProvider();
144
+
145
+ // create a pending deployment with id
146
+ const fakeDeploy = await provider.deployPending();
147
+ provider.removeContract(fakeDeploy.address);
148
+
149
+ async function deployment1() {
150
+ return {
151
+ ...fakeDeploy,
152
+ txHash: '0x1',
153
+ remoteDeploymentId: 'abc',
154
+ };
155
+ }
156
+
157
+ const mockPendingDeployment = sinon.stub().returns({
158
+ status: 'submitted',
159
+ txHash: '0x1',
160
+ });
161
+ // let it timeout
162
+ await t.throwsAsync(
163
+ fetchOrDeployGetDeployment(
164
+ version1,
165
+ provider,
166
+ deployment1,
167
+ { timeout: 1, pollingInterval: 0 },
168
+ undefined,
169
+ mockPendingDeployment,
170
+ ),
171
+ );
172
+
173
+ // simulate a new deployment with the same address, but different tx hash and deployment id
174
+ async function deployment2() {
175
+ return {
176
+ ...fakeDeploy,
177
+ txHash: '0x2',
178
+ remoteDeploymentId: 'def',
179
+ };
180
+ }
181
+
182
+ // deploy with a different version hash
183
+ const error = await t.throwsAsync(
184
+ fetchOrDeployGetDeployment(
185
+ version2,
186
+ provider,
187
+ deployment2,
188
+ { timeout: 1, pollingInterval: 0 },
189
+ undefined,
190
+ mockPendingDeployment,
191
+ ),
192
+ );
193
+
194
+ t.true(
195
+ error?.message.startsWith(`The deployment clashes with an existing one at ${fakeDeploy.address}`),
196
+ error?.message,
197
+ );
198
+ });
199
+
200
+ test('defender - merge avoids address clash, replaces deployment id', async t => {
201
+ const provider = stubProvider();
202
+
203
+ const MERGE = true;
204
+
205
+ // create a pending deployment with id
206
+ const fakeDeploy = await provider.deployPending();
207
+ provider.removeContract(fakeDeploy.address);
208
+
209
+ async function deployment1() {
210
+ return {
211
+ ...fakeDeploy,
212
+ txHash: '0x1',
213
+ remoteDeploymentId: 'abc',
214
+ };
215
+ }
216
+
217
+ const getDeploymentResponse1 = sinon.stub().returns({
218
+ status: 'submitted',
219
+ txHash: '0x1',
220
+ });
221
+ // let it timeout
222
+ await t.throwsAsync(
223
+ fetchOrDeployGetDeployment(
224
+ version1,
225
+ provider,
226
+ deployment1,
227
+ { timeout: 1, pollingInterval: 0 },
228
+ MERGE,
229
+ getDeploymentResponse1,
230
+ ),
231
+ );
232
+
233
+ // simulate a failed previous deployment
234
+ const getDeploymentResponse2 = sinon.stub().returns({
235
+ status: 'failed',
236
+ txHash: '0x1',
237
+ });
238
+
239
+ // redeploy with a new deployment id
240
+ async function deployment2() {
241
+ return {
242
+ ...fakeDeploy,
243
+ txHash: '0x2',
244
+ remoteDeploymentId: 'def',
245
+ };
246
+ }
247
+
248
+ // make the contract code exist
249
+ provider.addContract(fakeDeploy.address);
250
+
251
+ const deployment = await fetchOrDeployGetDeployment(
252
+ version1,
253
+ provider,
254
+ deployment2,
255
+ { timeout: 1, pollingInterval: 0 },
256
+ MERGE,
257
+ getDeploymentResponse2,
258
+ );
259
+
260
+ t.is(deployment.address, fakeDeploy.address);
261
+ t.is(deployment.txHash, '0x2');
262
+ t.is((deployment as RemoteDeploymentId).remoteDeploymentId, 'def');
263
+ });
package/src/impl-store.ts CHANGED
@@ -72,12 +72,10 @@ async function fetchOrDeployGeneric<T extends Deployment, U extends T = T>(
72
72
  );
73
73
  if (updated !== stored) {
74
74
  if (merge && deployment.merge) {
75
- // only check primary addresses for clashes, since the address could already exist in an allAddresses field
76
- // but the above updated and stored objects are different instances representing the same entry
77
- await checkForAddressClash(provider, data, updated, false);
75
+ await checkForAddressClash(provider, data, updated, true);
78
76
  deployment.merge(updated);
79
77
  } else {
80
- await checkForAddressClash(provider, data, updated, true);
78
+ await checkForAddressClash(provider, data, updated, false);
81
79
  deployment.set(updated);
82
80
  }
83
81
  await manifest.write(data);
@@ -172,12 +170,17 @@ export async function fetchOrDeployGetDeployment<T extends ImplDeployment>(
172
170
  const implLens = (versionWithoutMetadata: string) =>
173
171
  lens(`implementation ${versionWithoutMetadata}`, 'implementation', data => ({
174
172
  get: () => data.impls[versionWithoutMetadata],
175
- set: (value?: ImplDeployment) => (data.impls[versionWithoutMetadata] = value),
176
- merge: (value?: ImplDeployment) => {
173
+ set: (value?: ImplDeployment & RemoteDeploymentId) => (data.impls[versionWithoutMetadata] = value),
174
+ merge: (value?: ImplDeployment & RemoteDeploymentId) => {
177
175
  const existing = data.impls[versionWithoutMetadata];
178
176
  if (existing !== undefined && value !== undefined) {
179
177
  const { address, allAddresses } = mergeAddresses(existing, value);
180
- data.impls[versionWithoutMetadata] = { ...existing, address, allAddresses };
178
+ data.impls[versionWithoutMetadata] = {
179
+ ...existing,
180
+ address,
181
+ allAddresses,
182
+ remoteDeploymentId: value.remoteDeploymentId,
183
+ };
181
184
  } else {
182
185
  data.impls[versionWithoutMetadata] = value;
183
186
  }
@@ -223,14 +226,23 @@ async function checkForAddressClash(
223
226
  provider: EthereumProvider,
224
227
  data: ManifestData,
225
228
  updated: Deployment & RemoteDeploymentId,
226
- checkAllAddresses: boolean,
229
+ merge: boolean,
227
230
  ): Promise<void> {
228
- const clash = lookupDeployment(data, updated.address, checkAllAddresses);
229
- if (clash !== undefined) {
230
- if (await isDevelopmentNetwork(provider)) {
231
+ let clash;
232
+ const findClash = () => lookupDeployment(data, updated.address, !merge);
233
+
234
+ if (await isDevelopmentNetwork(provider)) {
235
+ // Look for clashes so that we can delete deployments from older runs.
236
+ // `merge` only checks primary addresses for clashes, since the address could already exist in an allAddresses field
237
+ // but the updated and stored objects are different instances representing the same entry.
238
+ clash = findClash();
239
+ if (clash !== undefined) {
231
240
  debug('deleting a previous deployment at address', updated.address);
232
241
  clash.set(undefined);
233
- } else {
242
+ }
243
+ } else if (!merge) {
244
+ clash = findClash();
245
+ if (clash !== undefined) {
234
246
  const existing = clash.get();
235
247
  // it's a clash if there is no deployment id or if deployment ids don't match
236
248
  if (
@@ -238,13 +250,12 @@ async function checkForAddressClash(
238
250
  (existing.remoteDeploymentId === undefined || existing.remoteDeploymentId !== updated.remoteDeploymentId)
239
251
  ) {
240
252
  throw new Error(
241
- `The following deployment clashes with an existing one at ${updated.address}\n\n` +
242
- JSON.stringify(updated, null, 2) +
243
- `\n\n`,
253
+ `The deployment clashes with an existing one at ${updated.address}.\n\n` +
254
+ `Deployments: ${JSON.stringify({ existing, updated }, null, 2)}\n\n`,
244
255
  );
245
256
  }
246
257
  }
247
- }
258
+ } // else, merge indicates that the user is force-importing or redeploying an implementation, so we simply allow merging the entries
248
259
  }
249
260
 
250
261
  function lookupDeployment(