@openzeppelin/upgrades-core 1.11.1 → 1.13.1

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.
Files changed (110) hide show
  1. package/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.dbg.json +1 -1
  2. package/artifacts/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol/BeaconProxy.dbg.json +1 -1
  3. package/artifacts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.dbg.json +1 -1
  4. package/dist/add-proxy-to-manifest.d.ts +3 -0
  5. package/dist/add-proxy-to-manifest.d.ts.map +1 -0
  6. package/dist/add-proxy-to-manifest.js +15 -0
  7. package/dist/add-proxy-to-manifest.js.map +1 -0
  8. package/dist/deployment.d.ts +35 -4
  9. package/dist/deployment.d.ts.map +1 -1
  10. package/dist/deployment.js +85 -28
  11. package/dist/deployment.js.map +1 -1
  12. package/dist/deployment.test.js +23 -0
  13. package/dist/deployment.test.js.map +1 -1
  14. package/dist/eip-1967-type.d.ts +1 -0
  15. package/dist/eip-1967-type.d.ts.map +1 -1
  16. package/dist/eip-1967-type.js +6 -1
  17. package/dist/eip-1967-type.js.map +1 -1
  18. package/dist/eip-1967.d.ts +1 -0
  19. package/dist/eip-1967.d.ts.map +1 -1
  20. package/dist/eip-1967.js +3 -2
  21. package/dist/eip-1967.js.map +1 -1
  22. package/dist/impl-address.js +1 -1
  23. package/dist/impl-address.js.map +1 -1
  24. package/dist/impl-store.d.ts +24 -3
  25. package/dist/impl-store.d.ts.map +1 -1
  26. package/dist/impl-store.js +77 -22
  27. package/dist/impl-store.js.map +1 -1
  28. package/dist/impl-store.test.js +24 -0
  29. package/dist/impl-store.test.js.map +1 -1
  30. package/dist/index.d.ts +6 -5
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +20 -4
  33. package/dist/index.js.map +1 -1
  34. package/dist/manifest-storage-layout.d.ts.map +1 -1
  35. package/dist/manifest-storage-layout.js +3 -2
  36. package/dist/manifest-storage-layout.js.map +1 -1
  37. package/dist/manifest-storage-layout.test.js.map +1 -1
  38. package/dist/manifest.d.ts +2 -0
  39. package/dist/manifest.d.ts.map +1 -1
  40. package/dist/manifest.js +6 -4
  41. package/dist/manifest.js.map +1 -1
  42. package/dist/manifest.test.js +32 -0
  43. package/dist/manifest.test.js.map +1 -1
  44. package/dist/provider.d.ts +1 -0
  45. package/dist/provider.d.ts.map +1 -1
  46. package/dist/provider.js +6 -2
  47. package/dist/provider.js.map +1 -1
  48. package/dist/proxy-kind.d.ts +9 -0
  49. package/dist/proxy-kind.d.ts.map +1 -1
  50. package/dist/proxy-kind.js +27 -1
  51. package/dist/proxy-kind.js.map +1 -1
  52. package/dist/scripts/migrate-oz-cli-project.test.js +1 -1
  53. package/dist/scripts/migrate-oz-cli-project.test.js.map +1 -1
  54. package/dist/solc-api.d.ts +5 -0
  55. package/dist/solc-api.d.ts.map +1 -1
  56. package/dist/standalone.test.js.map +1 -1
  57. package/dist/storage/extract.d.ts +1 -1
  58. package/dist/storage/extract.d.ts.map +1 -1
  59. package/dist/storage/extract.js +72 -38
  60. package/dist/storage/extract.js.map +1 -1
  61. package/dist/storage/layout.d.ts +4 -0
  62. package/dist/storage/layout.d.ts.map +1 -1
  63. package/dist/storage/layout.js.map +1 -1
  64. package/dist/storage/report.test.js.map +1 -1
  65. package/dist/storage.test.js +10 -2
  66. package/dist/storage.test.js.map +1 -1
  67. package/dist/usage-error.d.ts +3 -0
  68. package/dist/usage-error.d.ts.map +1 -1
  69. package/dist/usage-error.js +7 -1
  70. package/dist/usage-error.js.map +1 -1
  71. package/dist/validate/query.d.ts.map +1 -1
  72. package/dist/validate/query.js +10 -5
  73. package/dist/validate/query.js.map +1 -1
  74. package/dist/validate/run.d.ts.map +1 -1
  75. package/dist/validate/run.js +1 -1
  76. package/dist/validate/run.js.map +1 -1
  77. package/dist/validate.test.js.map +1 -1
  78. package/package.json +4 -4
  79. package/src/add-proxy-to-manifest.ts +12 -0
  80. package/src/deployment.test.ts +25 -0
  81. package/src/deployment.ts +124 -27
  82. package/src/eip-1967-type.ts +7 -0
  83. package/src/eip-1967.ts +4 -3
  84. package/src/impl-address.ts +1 -1
  85. package/src/impl-store.test.ts +33 -1
  86. package/src/impl-store.ts +91 -18
  87. package/src/index.ts +22 -4
  88. package/src/manifest-storage-layout.test.ts +3 -2
  89. package/src/manifest-storage-layout.ts +8 -3
  90. package/src/manifest.test.ts +34 -1
  91. package/src/manifest.ts +9 -4
  92. package/src/provider.ts +5 -1
  93. package/src/proxy-kind.ts +24 -1
  94. package/src/scripts/migrate-oz-cli-project.test.ts +1 -1
  95. package/src/scripts/migrate-oz-cli-project.test.ts.snap +0 -0
  96. package/src/solc-api.ts +5 -0
  97. package/src/standalone.test.ts +2 -2
  98. package/src/storage/extract.ts +85 -52
  99. package/src/storage/layout.ts +4 -0
  100. package/src/storage/report.test.ts +2 -2
  101. package/src/storage/report.test.ts.snap +0 -0
  102. package/src/storage.test.ts +14 -4
  103. package/src/storage.test.ts.md +202 -109
  104. package/src/storage.test.ts.snap +0 -0
  105. package/src/usage-error.ts +9 -0
  106. package/src/utils/parse-type-id.test.ts.md +106 -106
  107. package/src/utils/parse-type-id.test.ts.snap +0 -0
  108. package/src/validate/query.ts +9 -5
  109. package/src/validate/run.ts +6 -1
  110. package/src/validate.test.ts +2 -2
@@ -97,7 +97,7 @@ function validate(solcOutput, decodeSrc) {
97
97
  // https://github.com/OpenZeppelin/openzeppelin-upgrades/issues/52
98
98
  ...getLinkingErrors(contractDef, bytecode),
99
99
  ];
100
- validation[contractDef.name].layout = (0, extract_1.extractStorageLayout)(contractDef, decodeSrc, deref);
100
+ validation[contractDef.name].layout = (0, extract_1.extractStorageLayout)(contractDef, decodeSrc, deref, solcOutput.contracts[source][contractDef.name].storageLayout);
101
101
  validation[contractDef.name].methods = [...(0, utils_1.findAll)('FunctionDefinition', contractDef)]
102
102
  .filter(fnDef => ['external', 'public'].includes(fnDef.visibility))
103
103
  .map(fnDef => (0, function_1.getFunctionSignature)(fnDef, deref));
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/validate/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/validate/run.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../src/validate.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../src/validate.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.11.1",
3
+ "version": "1.13.1",
4
4
  "description": "",
5
5
  "repository": "https://github.com/OpenZeppelin/openzeppelin-upgrades/tree/master/packages/core",
6
6
  "license": "MIT",
@@ -42,8 +42,8 @@
42
42
  "@types/node": "^10.17.26",
43
43
  "@types/proper-lockfile": "^4.1.1",
44
44
  "@types/rimraf": "^3.0.0",
45
- "ava": "^3.9.0",
46
- "dotenv": "^14.0.0",
45
+ "ava": "^4.0.0",
46
+ "dotenv": "^16.0.0",
47
47
  "fgbg": "^0.1.4",
48
48
  "hardhat": "^2.0.2",
49
49
  "rimraf": "^3.0.2",
@@ -59,5 +59,5 @@
59
59
  "proper-lockfile": "^4.1.1",
60
60
  "solidity-ast": "^0.4.15"
61
61
  },
62
- "gitHead": "6640ff73d934c30a7cfd30889ecacbcdcaec2310"
62
+ "gitHead": "986cfff65ecbe4706ff62391ddc22ba31c547eb8"
63
63
  }
@@ -0,0 +1,12 @@
1
+ import { logWarning, Manifest, ProxyDeployment } from '.';
2
+
3
+ export async function addProxyToManifest(kind: ProxyDeployment['kind'], address: string, manifest: Manifest) {
4
+ await manifest.addProxy({ kind, address });
5
+
6
+ if (kind !== 'transparent' && (await manifest.getAdmin())) {
7
+ logWarning(`A proxy admin was previously deployed on this network`, [
8
+ `This is not natively used with the current kind of proxy ('${kind}').`,
9
+ `Changes to the admin will have no effect on this new proxy.`,
10
+ ]);
11
+ }
12
+ }
@@ -1,5 +1,6 @@
1
1
  import test from 'ava';
2
2
  import { promisify } from 'util';
3
+ import { TransactionMinedTimeout } from '.';
3
4
 
4
5
  import { Deployment, resumeOrDeploy, waitAndValidateDeployment } from './deployment';
5
6
  import { stubProvider } from './stub-provider';
@@ -96,3 +97,27 @@ test('waits for a deployment to return contract code', async t => {
96
97
  provider.addContract(deployment.address);
97
98
  await waitAndValidateDeployment(provider, deployment);
98
99
  });
100
+
101
+ test('tx mined timeout - no params', async t => {
102
+ const provider = stubProvider();
103
+ const deployment = await resumeOrDeploy(provider, undefined, provider.deploy);
104
+ try {
105
+ throw new TransactionMinedTimeout(deployment);
106
+ } catch (e: any) {
107
+ const EXPECTED =
108
+ /Timed out waiting for contract deployment to address \S+ with transaction \S+\n\nRun the function again to continue waiting for the transaction confirmation./;
109
+ t.true(EXPECTED.test(e.message), e.message);
110
+ }
111
+ });
112
+
113
+ test('tx mined timeout - params', async t => {
114
+ const provider = stubProvider();
115
+ const deployment = await resumeOrDeploy(provider, undefined, provider.deploy);
116
+ try {
117
+ throw new TransactionMinedTimeout(deployment, 'implementation', true);
118
+ } catch (e: any) {
119
+ const EXPECTED =
120
+ /Timed out waiting for implementation contract deployment to address \S+ with transaction \S+\n\nRun the function again to continue waiting for the transaction confirmation. If the problem persists, adjust the polling parameters with the timeout and pollingInterval options./;
121
+ t.true(EXPECTED.test(e.message), e.message);
122
+ }
123
+ });
package/src/deployment.ts CHANGED
@@ -4,12 +4,16 @@ import debug from './utils/debug';
4
4
  import { makeNonEnumerable } from './utils/make-non-enumerable';
5
5
  import {
6
6
  EthereumProvider,
7
+ getCode,
7
8
  getTransactionByHash,
8
9
  getTransactionReceipt,
9
10
  hasCode,
10
11
  isDevelopmentNetwork,
12
+ isEmpty,
11
13
  isReceiptSuccessful,
12
14
  } from './provider';
15
+ import { UpgradesError } from './error';
16
+ import { deleteDeployment, ManifestField } from './impl-store';
13
17
 
14
18
  const sleep = promisify(setTimeout);
15
19
 
@@ -18,57 +22,134 @@ export interface Deployment {
18
22
  txHash?: string;
19
23
  }
20
24
 
25
+ export interface DeployOpts {
26
+ /**
27
+ * Timeout in milliseconds to wait for the transaction confirmation when deploying an implementation contract or proxy admin contract. Use `0` to wait indefinitely.
28
+ */
29
+ timeout?: number;
30
+
31
+ /**
32
+ * Polling interval in milliseconds between checks for the transaction confirmation when deploying an implementation contract or proxy admin contract.
33
+ */
34
+ pollingInterval?: number;
35
+ }
36
+
37
+ /**
38
+ * Resumes a deployment or deploys a new one, based on whether the cached deployment should continue to be used and is valid
39
+ * (has a valid txHash for the current network or has runtime bytecode).
40
+ * If a cached deployment is not valid, deletes it if using a development network, otherwise throws an InvalidDeployment error.
41
+ *
42
+ * @param provider the Ethereum provider
43
+ * @param cached the cached deployment
44
+ * @param deploy the function to deploy a new deployment if needed
45
+ * @param type the manifest lens type. If merge is true, used for the timeout message if a previous deployment is not
46
+ * confirmed within the timeout period. Otherwise not used.
47
+ * @param opts polling timeout and interval options. If merge is true, used to check a previous deployment for confirmation.
48
+ * Otherwise not used.
49
+ * @param deployment the manifest field for this deployment. Optional for backward compatibility.
50
+ * If not provided, invalid deployments will not be deleted in a dev network (which is not a problem if merge is false,
51
+ * since it will be overwritten with the new deployment).
52
+ * @param merge whether the cached deployment is intended to be merged with the new deployment. Defaults to false.
53
+ * @returns the cached deployment if it should be used, otherwise the new deployment from the deploy function
54
+ * @throws {InvalidDeployment} if the cached deployment is invalid and we are not on a dev network
55
+ */
21
56
  export async function resumeOrDeploy<T extends Deployment>(
22
57
  provider: EthereumProvider,
23
58
  cached: T | undefined,
24
59
  deploy: () => Promise<T>,
60
+ type?: string,
61
+ opts?: DeployOpts,
62
+ deployment?: ManifestField<T>,
63
+ merge?: boolean,
25
64
  ): Promise<T> {
65
+ const validated = await validateCached(cached, provider, type, opts, deployment, merge);
66
+ if (validated === undefined || merge) {
67
+ const deployment = await deploy();
68
+ debug('initiated deployment', 'transaction hash:', deployment.txHash, 'merge:', merge);
69
+ return deployment;
70
+ } else {
71
+ return validated;
72
+ }
73
+ }
74
+
75
+ async function validateCached<T extends Deployment>(
76
+ cached: T | undefined,
77
+ provider: EthereumProvider,
78
+ type?: string,
79
+ opts?: DeployOpts,
80
+ deployment?: ManifestField<T>,
81
+ merge?: boolean,
82
+ ): Promise<T | undefined> {
26
83
  if (cached !== undefined) {
27
- const { txHash } = cached;
28
- if (txHash === undefined) {
29
- // Nothing to do here without a txHash.
30
- // This is the case for deployments migrated from OpenZeppelin CLI.
31
- return cached;
84
+ try {
85
+ await validateStoredDeployment(cached, provider, type, opts, merge);
86
+ } catch (e) {
87
+ if (e instanceof InvalidDeployment && (await isDevelopmentNetwork(provider))) {
88
+ debug('ignoring invalid deployment in development network', e.deployment.address);
89
+ if (deployment !== undefined) {
90
+ deleteDeployment(deployment);
91
+ }
92
+ return undefined;
93
+ } else {
94
+ throw e;
95
+ }
32
96
  }
97
+ }
98
+ return cached;
99
+ }
100
+
101
+ async function validateStoredDeployment<T extends Deployment>(
102
+ stored: T,
103
+ provider: EthereumProvider,
104
+ type?: string,
105
+ opts?: DeployOpts,
106
+ merge?: boolean,
107
+ ) {
108
+ const { txHash } = stored;
109
+ if (txHash !== undefined) {
33
110
  // If there is a deployment with txHash stored, we look its transaction up. If the
34
111
  // transaction is found, the deployment is reused.
35
112
  debug('found previous deployment', txHash);
36
113
  const tx = await getTransactionByHash(provider, txHash);
37
114
  if (tx !== null) {
38
115
  debug('resuming previous deployment', txHash);
39
- return cached;
40
- } else if (!(await isDevelopmentNetwork(provider))) {
116
+ if (merge) {
117
+ // If merging, wait for the existing deployment to be mined
118
+ waitAndValidateDeployment(provider, stored, type, opts);
119
+ }
120
+ } else {
41
121
  // If the transaction is not found we throw an error, except if we're in
42
122
  // a development network then we simply silently redeploy.
43
- throw new InvalidDeployment(cached);
44
- } else {
45
- debug('ignoring invalid deployment in development network', txHash);
123
+ // This error should be caught by the caller to determine if we're in a dev network.
124
+ throw new InvalidDeployment(stored);
125
+ }
126
+ } else {
127
+ const existingBytecode = await getCode(provider, stored.address);
128
+ if (isEmpty(existingBytecode)) {
129
+ throw new InvalidDeployment(stored);
46
130
  }
47
131
  }
48
-
49
- const deployment = await deploy();
50
- debug('initiated deployment', deployment.txHash);
51
- return deployment;
52
132
  }
53
133
 
54
- export async function waitAndValidateDeployment(provider: EthereumProvider, deployment: Deployment): Promise<void> {
134
+ export async function waitAndValidateDeployment(
135
+ provider: EthereumProvider,
136
+ deployment: Deployment,
137
+ type?: string,
138
+ opts?: DeployOpts,
139
+ ): Promise<void> {
55
140
  const { txHash, address } = deployment;
56
141
 
57
- // Poll for 60 seconds with a 5 second poll interval.
58
- // TODO: Make these parameters configurable.
59
- const pollTimeout = 60e3;
60
- const pollInterval = 5e3;
142
+ // Poll for 60 seconds with a 5 second poll interval by default.
143
+ const pollTimeout = opts?.timeout ?? 60e3;
144
+ const pollInterval = opts?.pollingInterval ?? 5e3;
145
+
146
+ debug('polling timeout', pollTimeout, 'polling interval', pollInterval);
61
147
 
62
148
  if (txHash !== undefined) {
63
149
  const startTime = Date.now();
64
150
 
65
151
  // eslint-disable-next-line no-constant-condition
66
152
  while (true) {
67
- const elapsedTime = Date.now() - startTime;
68
- if (elapsedTime >= pollTimeout) {
69
- // A timeout is NOT an InvalidDeployment
70
- throw new TransactionMinedTimeout(deployment);
71
- }
72
153
  debug('verifying deployment tx mined', txHash);
73
154
  const receipt = await getTransactionReceipt(provider, txHash);
74
155
  if (receipt && isReceiptSuccessful(receipt)) {
@@ -81,6 +162,13 @@ export async function waitAndValidateDeployment(provider: EthereumProvider, depl
81
162
  debug('waiting for deployment tx mined', txHash);
82
163
  await sleep(pollInterval);
83
164
  }
165
+ if (pollTimeout != 0) {
166
+ const elapsedTime = Date.now() - startTime;
167
+ if (elapsedTime >= pollTimeout) {
168
+ // A timeout is NOT an InvalidDeployment
169
+ throw new TransactionMinedTimeout(deployment, type, !!opts);
170
+ }
171
+ }
84
172
  }
85
173
  }
86
174
 
@@ -96,9 +184,18 @@ export async function waitAndValidateDeployment(provider: EthereumProvider, depl
96
184
  debug('code in target address found', address);
97
185
  }
98
186
 
99
- export class TransactionMinedTimeout extends Error {
100
- constructor(readonly deployment: Deployment) {
101
- super(`Timed out waiting for transaction ${deployment.txHash}`);
187
+ export class TransactionMinedTimeout extends UpgradesError {
188
+ constructor(readonly deployment: Deployment, type?: string, configurableTimeout?: boolean) {
189
+ super(
190
+ `Timed out waiting for ${type ? type + ' ' : ''}contract deployment to address ${
191
+ deployment.address
192
+ } with transaction ${deployment.txHash}`,
193
+ () =>
194
+ 'Run the function again to continue waiting for the transaction confirmation.' +
195
+ (configurableTimeout
196
+ ? ' If the problem persists, adjust the polling parameters with the timeout and pollingInterval options.'
197
+ : ''),
198
+ );
102
199
  }
103
200
  }
104
201
 
@@ -1,8 +1,10 @@
1
1
  import {
2
2
  EIP1967BeaconNotFound,
3
3
  EIP1967ImplementationNotFound,
4
+ getAdminAddress,
4
5
  getBeaconAddress,
5
6
  getImplementationAddress,
7
+ isEmptySlot,
6
8
  } from './eip-1967';
7
9
  import { EthereumProvider } from './provider';
8
10
 
@@ -20,6 +22,11 @@ export async function isTransparentOrUUPSProxy(provider: EthereumProvider, addre
20
22
  }
21
23
  }
22
24
 
25
+ export async function isTransparentProxy(provider: EthereumProvider, address: string): Promise<boolean> {
26
+ const adminAddress = await getAdminAddress(provider, address);
27
+ return !isEmptySlot(adminAddress);
28
+ }
29
+
23
30
  export async function isBeaconProxy(provider: EthereumProvider, address: string): Promise<boolean> {
24
31
  try {
25
32
  await getBeaconAddress(provider, address);
package/src/eip-1967.ts CHANGED
@@ -5,7 +5,6 @@ import { EthereumProvider, getStorageAt } from './provider';
5
5
  import { parseAddress } from './utils/address';
6
6
 
7
7
  export class EIP1967ImplementationNotFound extends UpgradesError {}
8
-
9
8
  export class EIP1967BeaconNotFound extends UpgradesError {}
10
9
 
11
10
  export async function getAdminAddress(provider: EthereumProvider, address: string): Promise<string> {
@@ -28,7 +27,9 @@ export async function getImplementationAddress(provider: EthereumProvider, addre
28
27
  );
29
28
 
30
29
  if (isEmptySlot(storage)) {
31
- throw new EIP1967ImplementationNotFound(`Contract at ${address} doesn't look like an administered ERC 1967 proxy`);
30
+ throw new EIP1967ImplementationNotFound(
31
+ `Contract at ${address} doesn't look like an ERC 1967 proxy with a logic contract address`,
32
+ );
32
33
  }
33
34
 
34
35
  return parseAddressFromStorage(storage);
@@ -67,7 +68,7 @@ export function toEip1967Hash(label: string): string {
67
68
  return '0x' + bigNumber.toString(16);
68
69
  }
69
70
 
70
- function isEmptySlot(storage: string): boolean {
71
+ export function isEmptySlot(storage: string): boolean {
71
72
  storage = storage.replace(/^0x/, '');
72
73
  return new BN(storage, 'hex').isZero();
73
74
  }
@@ -34,7 +34,7 @@ export async function getImplementationAddressFromBeacon(
34
34
  !(
35
35
  e.message.includes('function selector was not recognized') ||
36
36
  e.message.includes('invalid opcode') ||
37
- e.message.includes('reverted')
37
+ e.message.includes('revert')
38
38
  )
39
39
  ) {
40
40
  throw e;
@@ -6,9 +6,10 @@ import util from 'util';
6
6
  import path from 'path';
7
7
  import os from 'os';
8
8
 
9
- import { fetchOrDeploy } from './impl-store';
9
+ import { fetchOrDeploy, mergeAddresses } from './impl-store';
10
10
  import { getVersion } from './version';
11
11
  import { stubProvider } from './stub-provider';
12
+ import { ImplDeployment } from './manifest';
12
13
 
13
14
  const rimraf = util.promisify(rimrafAsync);
14
15
 
@@ -57,3 +58,34 @@ test('cleans up invalid deployment', async t => {
57
58
  // the failed deployment has been cleaned up
58
59
  await fetchOrDeploy(version1, provider2, provider2.deploy);
59
60
  });
61
+
62
+ test('merge addresses', async t => {
63
+ const depl1 = { address: '0x1' } as ImplDeployment;
64
+ const depl2 = { address: '0x2' } as ImplDeployment;
65
+
66
+ const { address, allAddresses } = await mergeAddresses(depl1, depl2);
67
+ t.is(address, '0x1');
68
+ t.true(unorderedEqual(allAddresses, ['0x1', '0x2']), allAddresses.toString());
69
+ });
70
+
71
+ test('merge multiple existing addresses', async t => {
72
+ const depl1 = { address: '0x1', allAddresses: ['0x1a', '0x1b'] } as ImplDeployment;
73
+ const depl2 = { address: '0x2' } as ImplDeployment;
74
+
75
+ const { address, allAddresses } = await mergeAddresses(depl1, depl2);
76
+ t.is(address, '0x1');
77
+ t.true(unorderedEqual(allAddresses, ['0x1', '0x1a', '0x1b', '0x2']), allAddresses.toString());
78
+ });
79
+
80
+ test('merge all addresses', async t => {
81
+ const depl1 = { address: '0x1', allAddresses: ['0x1a', '0x1b'] } as ImplDeployment;
82
+ const depl2 = { address: '0x2', allAddresses: ['0x2a', '0x2b'] } as ImplDeployment;
83
+
84
+ const { address, allAddresses } = await mergeAddresses(depl1, depl2);
85
+ t.is(address, '0x1');
86
+ t.true(unorderedEqual(allAddresses, ['0x1', '0x1a', '0x1b', '0x2', '0x2a', '0x2b']), allAddresses.toString());
87
+ });
88
+
89
+ function unorderedEqual(arr1: string[], arr2: string[]) {
90
+ return arr1.every(i => arr2.includes(i)) && arr2.every(i => arr1.includes(i));
91
+ }
package/src/impl-store.ts CHANGED
@@ -2,23 +2,40 @@ import debug from './utils/debug';
2
2
  import { Manifest, ManifestData, ImplDeployment } from './manifest';
3
3
  import { EthereumProvider, isDevelopmentNetwork } from './provider';
4
4
  import { Deployment, InvalidDeployment, resumeOrDeploy, waitAndValidateDeployment } from './deployment';
5
- import type { Version } from './version';
5
+ import { Version } from './version';
6
6
  import assert from 'assert';
7
+ import { DeployOpts } from '.';
7
8
 
8
9
  interface ManifestLens<T> {
9
10
  description: string;
11
+ type: string;
10
12
  (data: ManifestData): ManifestField<T>;
11
13
  }
12
14
 
13
- interface ManifestField<T> {
15
+ export interface ManifestField<T> {
14
16
  get(): T | undefined;
15
17
  set(value: T | undefined): void;
18
+ merge?(value: T | undefined): void;
16
19
  }
17
20
 
21
+ /**
22
+ * Fetches the deployment from the manifest, or deploys it if not found.
23
+ *
24
+ * @param lens the manifest lens
25
+ * @param provider the Ethereum provider
26
+ * @param deploy the deploy function
27
+ * @param opts options containing the timeout and pollingInterval parameters. If undefined, assumes the timeout is not configurable and will not mention those parameters in the error message for TransactionMinedTimeout.
28
+ * @param merge if true, adds a deployment to existing deployment by merging their addresses. Defaults to false.
29
+ * @returns the deployment address
30
+ * @throws {InvalidDeployment} if the deployment is invalid
31
+ * @throws {TransactionMinedTimeout} if the transaction was not confirmed within the timeout period
32
+ */
18
33
  async function fetchOrDeployGeneric<T extends Deployment>(
19
34
  lens: ManifestLens<T>,
20
35
  provider: EthereumProvider,
21
36
  deploy: () => Promise<T>,
37
+ opts?: DeployOpts,
38
+ merge?: boolean,
22
39
  ): Promise<string> {
23
40
  const manifest = await Manifest.forNetwork(provider);
24
41
 
@@ -27,20 +44,30 @@ async function fetchOrDeployGeneric<T extends Deployment>(
27
44
  debug('fetching deployment of', lens.description);
28
45
  const data = await manifest.read();
29
46
  const deployment = lens(data);
30
- const stored = deployment.get();
31
- if (stored === undefined) {
32
- debug('deployment of', lens.description, 'not found');
47
+ if (merge && !deployment.merge) {
48
+ throw new Error(
49
+ 'fetchOrDeployGeneric was called with merge set to true but the deployment lens does not have a merge function',
50
+ );
33
51
  }
34
- const updated = await resumeOrDeploy(provider, stored, deploy);
52
+
53
+ const stored = deployment.get();
54
+ const updated = await resumeOrDeploy(provider, stored, deploy, lens.type, opts, deployment, merge);
35
55
  if (updated !== stored) {
36
- await checkForAddressClash(provider, data, updated);
37
- deployment.set(updated);
56
+ if (merge && deployment.merge) {
57
+ // only check primary addresses for clashes, since the address could already exist in an allAddresses field
58
+ // but the above updated and stored objects are different instances representing the same entry
59
+ await checkForAddressClash(provider, data, updated, false);
60
+ deployment.merge(updated);
61
+ } else {
62
+ await checkForAddressClash(provider, data, updated, true);
63
+ deployment.set(updated);
64
+ }
38
65
  await manifest.write(data);
39
66
  }
40
67
  return updated;
41
68
  });
42
69
 
43
- await waitAndValidateDeployment(provider, deployment);
70
+ await waitAndValidateDeployment(provider, deployment, lens.type, opts);
44
71
 
45
72
  return deployment.address;
46
73
  } catch (e) {
@@ -63,42 +90,81 @@ async function fetchOrDeployGeneric<T extends Deployment>(
63
90
  }
64
91
  }
65
92
 
93
+ /**
94
+ * Deletes the deployment by setting it to undefined.
95
+ * Should only be used during a manifest run.
96
+ */
97
+ export function deleteDeployment(deployment: ManifestField<Deployment>) {
98
+ deployment.set(undefined);
99
+ }
100
+
66
101
  export async function fetchOrDeploy(
67
102
  version: Version,
68
103
  provider: EthereumProvider,
69
104
  deploy: () => Promise<ImplDeployment>,
105
+ opts?: DeployOpts,
106
+ merge?: boolean,
70
107
  ): Promise<string> {
71
- return fetchOrDeployGeneric(implLens(version.linkedWithoutMetadata), provider, deploy);
108
+ return fetchOrDeployGeneric(implLens(version.linkedWithoutMetadata), provider, deploy, opts, merge);
72
109
  }
73
110
 
74
111
  const implLens = (versionWithoutMetadata: string) =>
75
- lens(`implementation ${versionWithoutMetadata}`, data => ({
112
+ lens(`implementation ${versionWithoutMetadata}`, 'implementation', data => ({
76
113
  get: () => data.impls[versionWithoutMetadata],
77
114
  set: (value?: ImplDeployment) => (data.impls[versionWithoutMetadata] = value),
115
+ merge: (value?: ImplDeployment) => {
116
+ const existing = data.impls[versionWithoutMetadata];
117
+ if (existing !== undefined && value !== undefined) {
118
+ const { address, allAddresses } = mergeAddresses(existing, value);
119
+ data.impls[versionWithoutMetadata] = { ...existing, address, allAddresses };
120
+ } else {
121
+ data.impls[versionWithoutMetadata] = value;
122
+ }
123
+ },
78
124
  }));
79
125
 
126
+ /**
127
+ * Merge the addresses in the deployments and returns them.
128
+ *
129
+ * @param existing existing deployment
130
+ * @param value deployment to add
131
+ */
132
+ export function mergeAddresses(existing: ImplDeployment, value: ImplDeployment) {
133
+ const merged = new Set<string>();
134
+
135
+ merged.add(existing.address);
136
+ merged.add(value.address);
137
+
138
+ existing.allAddresses?.forEach(item => merged.add(item));
139
+ value.allAddresses?.forEach(item => merged.add(item));
140
+
141
+ return { address: existing.address, allAddresses: Array.from(merged) };
142
+ }
143
+
80
144
  export async function fetchOrDeployAdmin(
81
145
  provider: EthereumProvider,
82
146
  deploy: () => Promise<Deployment>,
147
+ opts?: DeployOpts,
83
148
  ): Promise<string> {
84
- return fetchOrDeployGeneric(adminLens, provider, deploy);
149
+ return fetchOrDeployGeneric(adminLens, provider, deploy, opts);
85
150
  }
86
151
 
87
- const adminLens = lens('proxy admin', data => ({
152
+ const adminLens = lens('proxy admin', 'proxy admin', data => ({
88
153
  get: () => data.admin,
89
154
  set: (value?: Deployment) => (data.admin = value),
90
155
  }));
91
156
 
92
- function lens<T>(description: string, fn: (data: ManifestData) => ManifestField<T>): ManifestLens<T> {
93
- return Object.assign(fn, { description });
157
+ function lens<T>(description: string, type: string, fn: (data: ManifestData) => ManifestField<T>): ManifestLens<T> {
158
+ return Object.assign(fn, { description, type });
94
159
  }
95
160
 
96
161
  async function checkForAddressClash(
97
162
  provider: EthereumProvider,
98
163
  data: ManifestData,
99
164
  updated: Deployment,
165
+ checkAllAddresses: boolean,
100
166
  ): Promise<void> {
101
- const clash = lookupDeployment(data, updated.address);
167
+ const clash = lookupDeployment(data, updated.address, checkAllAddresses);
102
168
  if (clash !== undefined) {
103
169
  if (await isDevelopmentNetwork(provider)) {
104
170
  debug('deleting a previous deployment at address', updated.address);
@@ -113,13 +179,20 @@ async function checkForAddressClash(
113
179
  }
114
180
  }
115
181
 
116
- function lookupDeployment(data: ManifestData, address: string): ManifestField<Deployment> | undefined {
182
+ function lookupDeployment(
183
+ data: ManifestData,
184
+ address: string,
185
+ checkAllAddresses: boolean,
186
+ ): ManifestField<Deployment> | undefined {
117
187
  if (data.admin?.address === address) {
118
188
  return adminLens(data);
119
189
  }
120
190
 
121
191
  for (const versionWithoutMetadata in data.impls) {
122
- if (data.impls[versionWithoutMetadata]?.address === address) {
192
+ if (
193
+ data.impls[versionWithoutMetadata]?.address === address ||
194
+ (checkAllAddresses && data.impls[versionWithoutMetadata]?.allAddresses?.includes(address))
195
+ ) {
123
196
  return implLens(versionWithoutMetadata)(data);
124
197
  }
125
198
  }