gate-evm-tools 1.0.23 → 1.0.25

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 (123) hide show
  1. package/README.md +70 -11
  2. package/bin/manifest-bootstrap.js +109 -3
  3. package/dist/commands/check.d.ts.map +1 -1
  4. package/dist/commands/check.js +5 -2
  5. package/dist/commands/check.js.map +1 -1
  6. package/dist/commands/checkOptions.d.ts +6 -0
  7. package/dist/commands/checkOptions.d.ts.map +1 -0
  8. package/dist/commands/checkOptions.js +12 -0
  9. package/dist/commands/checkOptions.js.map +1 -0
  10. package/dist/commands/fix.js +2 -2
  11. package/dist/commands/fix.js.map +1 -1
  12. package/dist/commands/prepare.d.ts +8 -0
  13. package/dist/commands/prepare.d.ts.map +1 -0
  14. package/dist/commands/prepare.js +78 -0
  15. package/dist/commands/prepare.js.map +1 -0
  16. package/dist/commands/sync.d.ts.map +1 -1
  17. package/dist/commands/sync.js +11 -28
  18. package/dist/commands/sync.js.map +1 -1
  19. package/dist/core/BytecodeChecker.d.ts +3 -2
  20. package/dist/core/BytecodeChecker.d.ts.map +1 -1
  21. package/dist/core/BytecodeChecker.js +13 -1
  22. package/dist/core/BytecodeChecker.js.map +1 -1
  23. package/dist/core/preparation/artifacts.d.ts +21 -0
  24. package/dist/core/preparation/artifacts.d.ts.map +1 -0
  25. package/dist/core/preparation/artifacts.js +80 -0
  26. package/dist/core/preparation/artifacts.js.map +1 -0
  27. package/dist/core/preparation/evm.d.ts +39 -0
  28. package/dist/core/preparation/evm.d.ts.map +1 -0
  29. package/dist/core/preparation/evm.js +305 -0
  30. package/dist/core/preparation/evm.js.map +1 -0
  31. package/dist/core/preparation/index.d.ts +9 -0
  32. package/dist/core/preparation/index.d.ts.map +1 -0
  33. package/dist/core/preparation/index.js +15 -0
  34. package/dist/core/preparation/index.js.map +1 -0
  35. package/dist/core/preparation/manifest.d.ts +43 -0
  36. package/dist/core/preparation/manifest.d.ts.map +1 -0
  37. package/dist/core/preparation/manifest.js +169 -0
  38. package/dist/core/preparation/manifest.js.map +1 -0
  39. package/dist/core/preparation/normalize.d.ts +7 -0
  40. package/dist/core/preparation/normalize.d.ts.map +1 -0
  41. package/dist/core/preparation/normalize.js +496 -0
  42. package/dist/core/preparation/normalize.js.map +1 -0
  43. package/dist/core/preparation/types.d.ts +122 -0
  44. package/dist/core/preparation/types.d.ts.map +1 -0
  45. package/dist/core/preparation/types.js +2 -0
  46. package/dist/core/preparation/types.js.map +1 -0
  47. package/dist/core/preparation/zkManifestSync.d.ts +49 -0
  48. package/dist/core/preparation/zkManifestSync.d.ts.map +1 -0
  49. package/dist/core/preparation/zkManifestSync.js +159 -0
  50. package/dist/core/preparation/zkManifestSync.js.map +1 -0
  51. package/dist/core/preparation/zkUpgradeValidation.d.ts +37 -0
  52. package/dist/core/preparation/zkUpgradeValidation.d.ts.map +1 -0
  53. package/dist/core/preparation/zkUpgradeValidation.js +91 -0
  54. package/dist/core/preparation/zkUpgradeValidation.js.map +1 -0
  55. package/dist/core/preparation/zksync.d.ts +28 -0
  56. package/dist/core/preparation/zksync.d.ts.map +1 -0
  57. package/dist/core/preparation/zksync.js +259 -0
  58. package/dist/core/preparation/zksync.js.map +1 -0
  59. package/dist/custody/hardhat-runtime.d.ts.map +1 -1
  60. package/dist/custody/hardhat-runtime.js +2 -1
  61. package/dist/custody/hardhat-runtime.js.map +1 -1
  62. package/dist/custody/index.d.ts +1 -0
  63. package/dist/custody/index.d.ts.map +1 -1
  64. package/dist/custody/index.js +1 -0
  65. package/dist/custody/index.js.map +1 -1
  66. package/dist/custody/service.js +8 -1
  67. package/dist/custody/service.js.map +1 -1
  68. package/dist/custody/zksync-signer.d.ts +13 -0
  69. package/dist/custody/zksync-signer.d.ts.map +1 -0
  70. package/dist/custody/zksync-signer.js +91 -0
  71. package/dist/custody/zksync-signer.js.map +1 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +22 -1
  74. package/dist/index.js.map +1 -1
  75. package/dist/sync/index.d.ts +31 -0
  76. package/dist/sync/index.d.ts.map +1 -0
  77. package/dist/sync/index.js +57 -0
  78. package/dist/sync/index.js.map +1 -0
  79. package/dist/types.d.ts +13 -2
  80. package/dist/types.d.ts.map +1 -1
  81. package/dist/workflow/index.d.ts +5 -0
  82. package/dist/workflow/index.d.ts.map +1 -0
  83. package/dist/workflow/index.js +3 -0
  84. package/dist/workflow/index.js.map +1 -0
  85. package/dist-cjs/core/preparation/artifacts.js +89 -0
  86. package/dist-cjs/core/preparation/artifacts.js.map +1 -0
  87. package/dist-cjs/core/preparation/evm.js +312 -0
  88. package/dist-cjs/core/preparation/evm.js.map +1 -0
  89. package/dist-cjs/core/preparation/index.js +19 -0
  90. package/dist-cjs/core/preparation/index.js.map +1 -0
  91. package/dist-cjs/core/preparation/manifest.js +180 -0
  92. package/dist-cjs/core/preparation/manifest.js.map +1 -0
  93. package/dist-cjs/core/preparation/normalize.js +507 -0
  94. package/dist-cjs/core/preparation/normalize.js.map +1 -0
  95. package/dist-cjs/core/preparation/types.js +3 -0
  96. package/dist-cjs/core/preparation/types.js.map +1 -0
  97. package/dist-cjs/core/preparation/zkManifestSync.js +166 -0
  98. package/dist-cjs/core/preparation/zkManifestSync.js.map +1 -0
  99. package/dist-cjs/core/preparation/zkUpgradeValidation.js +101 -0
  100. package/dist-cjs/core/preparation/zkUpgradeValidation.js.map +1 -0
  101. package/dist-cjs/core/preparation/zksync.js +263 -0
  102. package/dist-cjs/core/preparation/zksync.js.map +1 -0
  103. package/dist-cjs/core/syncUpgradeJson.js +315 -0
  104. package/dist-cjs/core/syncUpgradeJson.js.map +1 -0
  105. package/dist-cjs/custody/hardhat-runtime.js +2 -1
  106. package/dist-cjs/custody/hardhat-runtime.js.map +1 -1
  107. package/dist-cjs/custody/index.js +4 -1
  108. package/dist-cjs/custody/index.js.map +1 -1
  109. package/dist-cjs/custody/service.js +8 -1
  110. package/dist-cjs/custody/service.js.map +1 -1
  111. package/dist-cjs/custody/zksync-signer.js +95 -0
  112. package/dist-cjs/custody/zksync-signer.js.map +1 -0
  113. package/dist-cjs/sync/index.js +60 -0
  114. package/dist-cjs/sync/index.js.map +1 -0
  115. package/dist-cjs/types.js +3 -0
  116. package/dist-cjs/types.js.map +1 -0
  117. package/dist-cjs/utils/manifestTransaction.js +302 -0
  118. package/dist-cjs/utils/manifestTransaction.js.map +1 -0
  119. package/dist-cjs/utils/openzeppelin.js +57 -0
  120. package/dist-cjs/utils/openzeppelin.js.map +1 -0
  121. package/dist-cjs/workflow/index.js +12 -0
  122. package/dist-cjs/workflow/index.js.map +1 -0
  123. package/package.json +42 -2
@@ -0,0 +1,496 @@
1
+ import crypto from 'node:crypto';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { getAddress, isHexString, keccak256, ZeroAddress } from 'ethers';
5
+ const SAFE_ID = /^[A-Za-z0-9][A-Za-z0-9_-]{0,199}$/;
6
+ const HASH = /^[0-9a-fA-F]{64}$/;
7
+ const record = (raw, label) => {
8
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
9
+ throw new Error(`${label} must be an object`);
10
+ }
11
+ return raw;
12
+ };
13
+ const exactKeys = (raw, required, optional, label) => {
14
+ const actual = Object.keys(raw);
15
+ const allowed = new Set([...required, ...optional]);
16
+ if (required.some((key) => !Object.prototype.hasOwnProperty.call(raw, key))
17
+ || actual.some((key) => !allowed.has(key))) {
18
+ throw new Error(`${label} contains unsupported or missing fields`);
19
+ }
20
+ };
21
+ const safeId = (raw, label) => {
22
+ if (typeof raw !== 'string' || !SAFE_ID.test(raw)) {
23
+ throw new Error(`${label} must match ${SAFE_ID}`);
24
+ }
25
+ return raw;
26
+ };
27
+ const nonEmptyString = (raw, label) => {
28
+ if (typeof raw !== 'string' || raw.trim() === '') {
29
+ throw new Error(`${label} must be a non-empty string`);
30
+ }
31
+ return raw.trim();
32
+ };
33
+ const address = (raw, label) => {
34
+ if (typeof raw !== 'string')
35
+ throw new Error(`${label} must be an address`);
36
+ let normalized;
37
+ try {
38
+ normalized = getAddress(raw);
39
+ }
40
+ catch {
41
+ throw new Error(`${label} must be an address`);
42
+ }
43
+ if (normalized === ZeroAddress)
44
+ throw new Error(`${label} must be non-zero`);
45
+ return normalized.toLowerCase();
46
+ };
47
+ const hexBytes = (raw, label, options = {}) => {
48
+ if (typeof raw !== 'string'
49
+ || !isHexString(raw, options.bytes)
50
+ || (options.empty !== true && raw === '0x')) {
51
+ const size = options.bytes === undefined ? '' : ` ${options.bytes}-byte`;
52
+ throw new Error(`${label} must be non-empty${size} hex bytes`);
53
+ }
54
+ return raw.toLowerCase();
55
+ };
56
+ const digest = (raw, label) => {
57
+ if (typeof raw !== 'string' || !HASH.test(raw)) {
58
+ throw new Error(`${label} must be a SHA-256 digest`);
59
+ }
60
+ return raw.toLowerCase();
61
+ };
62
+ const integerString = (raw, label) => {
63
+ if ((typeof raw !== 'string' && typeof raw !== 'number' && typeof raw !== 'bigint')
64
+ || (typeof raw === 'number' && (!Number.isSafeInteger(raw) || raw < 0))) {
65
+ throw new Error(`${label} must be a nonnegative integer`);
66
+ }
67
+ try {
68
+ const value = BigInt(raw);
69
+ if (value < 0n)
70
+ throw new Error('negative');
71
+ return value.toString(10);
72
+ }
73
+ catch {
74
+ throw new Error(`${label} must be a nonnegative integer`);
75
+ }
76
+ };
77
+ const canonicalValue = (raw, label) => {
78
+ if (raw === null || typeof raw === 'string' || typeof raw === 'boolean')
79
+ return raw;
80
+ if (typeof raw === 'bigint')
81
+ return raw.toString(10);
82
+ if (typeof raw === 'number') {
83
+ if (!Number.isFinite(raw) || !Number.isSafeInteger(raw)) {
84
+ throw new Error(`${label} contains an unsafe number`);
85
+ }
86
+ return raw;
87
+ }
88
+ if (Array.isArray(raw)) {
89
+ return raw.map((value, index) => canonicalValue(value, `${label}[${index}]`));
90
+ }
91
+ if (raw && typeof raw === 'object') {
92
+ const value = raw;
93
+ const result = {};
94
+ for (const key of Object.keys(value).sort()) {
95
+ if (value[key] === undefined)
96
+ throw new Error(`${label}.${key} must be JSON-safe`);
97
+ result[key] = canonicalValue(value[key], `${label}.${key}`);
98
+ }
99
+ return result;
100
+ }
101
+ throw new Error(`${label} must be JSON-safe`);
102
+ };
103
+ const canonicalArray = (raw, label) => {
104
+ if (!Array.isArray(raw))
105
+ throw new Error(`${label} must be an array`);
106
+ return canonicalValue(raw, label);
107
+ };
108
+ const scheme = (raw) => {
109
+ if (raw === undefined || raw === 'evm')
110
+ return 'evm';
111
+ if (raw === 'zksync-eravm')
112
+ return raw;
113
+ throw new Error('scheme must be evm or zksync-eravm');
114
+ };
115
+ const kind = (raw) => {
116
+ if (raw !== 'create2-deploy'
117
+ && raw !== 'uups-placeholder-deploy'
118
+ && raw !== 'uups-upgrade') {
119
+ throw new Error('preparation kind is invalid');
120
+ }
121
+ return raw;
122
+ };
123
+ const salt = (raw, label) => (hexBytes(raw, label, { bytes: 32 }));
124
+ const addressPolicy = (raw, label) => {
125
+ const value = record(raw, label);
126
+ exactKeys(value, [], ['expectedAddress', 'leadingZeroBytes'], label);
127
+ const result = {};
128
+ if (value.expectedAddress !== undefined) {
129
+ result.expectedAddress = address(value.expectedAddress, `${label}.expectedAddress`);
130
+ }
131
+ if (value.leadingZeroBytes !== undefined) {
132
+ if (typeof value.leadingZeroBytes !== 'number'
133
+ || !Number.isInteger(value.leadingZeroBytes)
134
+ || value.leadingZeroBytes < 0
135
+ || value.leadingZeroBytes > 20) {
136
+ throw new Error(`${label}.leadingZeroBytes must be an integer from 0 to 20`);
137
+ }
138
+ result.leadingZeroBytes = value.leadingZeroBytes;
139
+ }
140
+ return result;
141
+ };
142
+ const call = (raw, label) => {
143
+ const value = record(raw, label);
144
+ exactKeys(value, ['method', 'args'], [], label);
145
+ return {
146
+ method: nonEmptyString(value.method, `${label}.method`),
147
+ args: canonicalArray(value.args, `${label}.args`),
148
+ };
149
+ };
150
+ const unsafeAllow = (raw) => {
151
+ if (!Array.isArray(raw))
152
+ throw new Error('unsafeAllow must be an array');
153
+ const values = raw.map((value, index) => nonEmptyString(value, `unsafeAllow[${index}]`));
154
+ return [...new Set(values)].sort();
155
+ };
156
+ export const normalizePreparationRequest = (raw) => {
157
+ const value = record(raw, 'preparation request');
158
+ const selectedKind = kind(value.kind);
159
+ const commonRequired = [
160
+ 'version', 'kind', 'network', 'target', 'contract', 'constructorArgs', 'factory',
161
+ ];
162
+ const commonOptional = ['scheme'];
163
+ if (selectedKind === 'create2-deploy') {
164
+ exactKeys(value, [...commonRequired, 'salt'], [
165
+ ...commonOptional, 'create2ForwardValue', 'callForwardValue', 'addressPolicy',
166
+ ], 'preparation request');
167
+ }
168
+ else if (selectedKind === 'uups-placeholder-deploy') {
169
+ exactKeys(value, [
170
+ ...commonRequired, 'proxyKind', 'implementationSalt', 'proxySalt', 'placeholderImplementation',
171
+ ], [...commonOptional, 'unsafeAllow', 'proxyAddressPolicy', 'call'], 'preparation request');
172
+ }
173
+ else {
174
+ exactKeys(value, [
175
+ ...commonRequired, 'proxyKind', 'proxy', 'implementationSalt',
176
+ ], [...commonOptional, 'unsafeAllow', 'implementationAddressPolicy', 'call'], 'preparation request');
177
+ }
178
+ if (value.version !== 1)
179
+ throw new Error('preparation request version must be 1');
180
+ const common = {
181
+ version: 1,
182
+ scheme: scheme(value.scheme),
183
+ network: safeId(value.network, 'network'),
184
+ target: safeId(value.target, 'target'),
185
+ contract: nonEmptyString(value.contract, 'contract'),
186
+ constructorArgs: canonicalArray(value.constructorArgs, 'constructorArgs'),
187
+ factory: address(value.factory, 'factory'),
188
+ };
189
+ if (selectedKind === 'create2-deploy') {
190
+ return {
191
+ ...common,
192
+ kind: selectedKind,
193
+ salt: salt(value.salt, 'salt'),
194
+ ...(value.create2ForwardValue === undefined ? {} : {
195
+ create2ForwardValue: integerString(value.create2ForwardValue, 'create2ForwardValue'),
196
+ }),
197
+ ...(value.callForwardValue === undefined ? {} : {
198
+ callForwardValue: integerString(value.callForwardValue, 'callForwardValue'),
199
+ }),
200
+ ...(value.addressPolicy === undefined ? {} : {
201
+ addressPolicy: addressPolicy(value.addressPolicy, 'addressPolicy'),
202
+ }),
203
+ };
204
+ }
205
+ if (value.proxyKind !== 'uups')
206
+ throw new Error('proxyKind must be uups');
207
+ const uups = {
208
+ ...common,
209
+ proxyKind: 'uups',
210
+ implementationSalt: salt(value.implementationSalt, 'implementationSalt'),
211
+ ...(value.unsafeAllow === undefined ? {} : { unsafeAllow: unsafeAllow(value.unsafeAllow) }),
212
+ };
213
+ if (selectedKind === 'uups-placeholder-deploy') {
214
+ return {
215
+ ...uups,
216
+ kind: selectedKind,
217
+ proxySalt: salt(value.proxySalt, 'proxySalt'),
218
+ placeholderImplementation: address(value.placeholderImplementation, 'placeholderImplementation'),
219
+ ...(value.proxyAddressPolicy === undefined ? {} : {
220
+ proxyAddressPolicy: addressPolicy(value.proxyAddressPolicy, 'proxyAddressPolicy'),
221
+ }),
222
+ ...(value.call === undefined ? {} : { call: call(value.call, 'call') }),
223
+ };
224
+ }
225
+ return {
226
+ ...uups,
227
+ kind: selectedKind,
228
+ proxy: address(value.proxy, 'proxy'),
229
+ ...(value.implementationAddressPolicy === undefined ? {} : {
230
+ implementationAddressPolicy: addressPolicy(value.implementationAddressPolicy, 'implementationAddressPolicy'),
231
+ }),
232
+ ...(value.call === undefined ? {} : { call: call(value.call, 'call') }),
233
+ };
234
+ };
235
+ const canonicalJsonValue = (raw) => {
236
+ if (Array.isArray(raw))
237
+ return raw.map(canonicalJsonValue);
238
+ if (raw && typeof raw === 'object') {
239
+ const value = raw;
240
+ const result = {};
241
+ for (const key of Object.keys(value).sort())
242
+ result[key] = canonicalJsonValue(value[key]);
243
+ return result;
244
+ }
245
+ return raw;
246
+ };
247
+ export const canonicalPreparationJson = (raw) => (JSON.stringify(canonicalJsonValue(raw)));
248
+ export const hashPreparationRequest = (raw) => {
249
+ const request = normalizePreparationRequest(raw);
250
+ return crypto.createHash('sha256').update(canonicalPreparationJson(request)).digest('hex');
251
+ };
252
+ const artifactFormat = (raw) => {
253
+ if (raw !== 'hh-sol-artifact-1' && raw !== 'hh-zksolc-artifact-1') {
254
+ throw new Error('artifactFormat is invalid');
255
+ }
256
+ return raw;
257
+ };
258
+ const normalizeArtifact = (raw) => {
259
+ const value = record(raw, 'artifact');
260
+ exactKeys(value, ['sourceName', 'contractName', 'digest'], [], 'artifact');
261
+ return {
262
+ sourceName: nonEmptyString(value.sourceName, 'artifact.sourceName'),
263
+ contractName: nonEmptyString(value.contractName, 'artifact.contractName'),
264
+ digest: digest(value.digest, 'artifact.digest'),
265
+ };
266
+ };
267
+ const normalizeValidation = (raw, selectedKind, selectedScheme) => {
268
+ const value = record(raw, 'validation');
269
+ const expectedFormat = selectedScheme === 'evm'
270
+ ? 'hh-sol-artifact-1'
271
+ : 'hh-zksolc-artifact-1';
272
+ const format = artifactFormat(value.artifactFormat);
273
+ if (format !== expectedFormat)
274
+ throw new Error('validation artifact format does not match scheme');
275
+ if (selectedKind === 'create2-deploy') {
276
+ exactKeys(value, ['kind', 'engine', 'artifactFormat'], [], 'validation');
277
+ if (value.kind !== 'artifact' || value.engine !== 'hardhat-artifact') {
278
+ throw new Error('create2-deploy requires artifact validation');
279
+ }
280
+ return { kind: 'artifact', engine: 'hardhat-artifact', artifactFormat: format };
281
+ }
282
+ const expectedEngine = selectedScheme === 'evm' ? 'openzeppelin' : 'matterlabs-openzeppelin';
283
+ if (selectedKind === 'uups-placeholder-deploy') {
284
+ exactKeys(value, ['kind', 'engine', 'artifactFormat', 'implementationSafe'], [], 'validation');
285
+ if (value.kind !== 'uups-initial'
286
+ || value.engine !== expectedEngine
287
+ || value.implementationSafe !== true) {
288
+ throw new Error('uups-placeholder-deploy requires implementation safety validation');
289
+ }
290
+ return {
291
+ kind: 'uups-initial',
292
+ engine: expectedEngine,
293
+ artifactFormat: format,
294
+ implementationSafe: true,
295
+ };
296
+ }
297
+ exactKeys(value, [
298
+ 'kind', 'engine', 'artifactFormat', 'implementationSafe', 'storageLayoutCompatible',
299
+ 'currentImplementation', 'oldLayoutHash', 'newLayoutHash', 'manifestDigest',
300
+ ], [], 'validation');
301
+ if (value.kind !== 'uups-upgrade'
302
+ || value.engine !== expectedEngine
303
+ || value.implementationSafe !== true
304
+ || value.storageLayoutCompatible !== true) {
305
+ throw new Error('uups-upgrade requires storage compatibility validation');
306
+ }
307
+ return {
308
+ kind: 'uups-upgrade',
309
+ engine: expectedEngine,
310
+ artifactFormat: format,
311
+ implementationSafe: true,
312
+ storageLayoutCompatible: true,
313
+ currentImplementation: address(value.currentImplementation, 'validation.currentImplementation'),
314
+ oldLayoutHash: digest(value.oldLayoutHash, 'validation.oldLayoutHash'),
315
+ newLayoutHash: digest(value.newLayoutHash, 'validation.newLayoutHash'),
316
+ manifestDigest: digest(value.manifestDigest, 'validation.manifestDigest'),
317
+ };
318
+ };
319
+ const normalizeDeployment = (raw, index, selectedScheme) => {
320
+ const value = record(raw, `deployments[${index}]`);
321
+ exactKeys(value, ['role', 'address', 'salt', 'status', 'constructorInput'], [
322
+ 'initCodeHash', 'bytecodeHash', 'constructorInputHash',
323
+ ], `deployments[${index}]`);
324
+ if (value.role !== 'contract' && value.role !== 'implementation' && value.role !== 'proxy') {
325
+ throw new Error(`deployments[${index}].role is invalid`);
326
+ }
327
+ if (value.status !== 'required' && value.status !== 'reused') {
328
+ throw new Error(`deployments[${index}].status is invalid`);
329
+ }
330
+ const normalizedRole = value.role;
331
+ const normalizedStatus = value.status;
332
+ const common = {
333
+ role: normalizedRole,
334
+ address: address(value.address, `deployments[${index}].address`),
335
+ salt: salt(value.salt, `deployments[${index}].salt`),
336
+ status: normalizedStatus,
337
+ constructorInput: hexBytes(value.constructorInput, `deployments[${index}].constructorInput`, { empty: true }),
338
+ };
339
+ if (selectedScheme === 'evm') {
340
+ if (value.initCodeHash === undefined || value.bytecodeHash !== undefined || value.constructorInputHash !== undefined) {
341
+ throw new Error(`deployments[${index}] has a mixed EVM/zk hash shape`);
342
+ }
343
+ return {
344
+ ...common,
345
+ initCodeHash: hexBytes(value.initCodeHash, `deployments[${index}].initCodeHash`, { bytes: 32 }),
346
+ };
347
+ }
348
+ if (value.initCodeHash !== undefined || value.bytecodeHash === undefined || value.constructorInputHash === undefined) {
349
+ throw new Error(`deployments[${index}] has a mixed EVM/zk hash shape`);
350
+ }
351
+ return {
352
+ ...common,
353
+ bytecodeHash: hexBytes(value.bytecodeHash, `deployments[${index}].bytecodeHash`, { bytes: 32 }),
354
+ constructorInputHash: hexBytes(value.constructorInputHash, `deployments[${index}].constructorInputHash`, { bytes: 32 }),
355
+ };
356
+ };
357
+ const purpose = (raw, label) => {
358
+ if (raw !== 'deploy-contract'
359
+ && raw !== 'deploy-implementation'
360
+ && raw !== 'deploy-proxy'
361
+ && raw !== 'upgrade-proxy') {
362
+ throw new Error(`${label} is invalid`);
363
+ }
364
+ return raw;
365
+ };
366
+ const normalizeFactoryDeps = (raw, label) => {
367
+ if (!Array.isArray(raw))
368
+ throw new Error(`${label} must be an array`);
369
+ const seen = new Set();
370
+ const result = [];
371
+ for (const [index, dependency] of raw.entries()) {
372
+ const normalized = hexBytes(dependency, `${label}[${index}]`);
373
+ const key = keccak256(normalized);
374
+ if (seen.has(key))
375
+ continue;
376
+ seen.add(key);
377
+ result.push(normalized);
378
+ }
379
+ return result;
380
+ };
381
+ const normalizeTransaction = (raw, index, selectedScheme) => {
382
+ const value = record(raw, `transactions[${index}]`);
383
+ exactKeys(value, ['id', 'purpose', 'to', 'value', 'data', 'operation'], [
384
+ ...(selectedScheme === 'zksync-eravm' ? ['factoryDeps'] : []),
385
+ ], `transactions[${index}]`);
386
+ if (selectedScheme === 'zksync-eravm' && value.factoryDeps === undefined) {
387
+ throw new Error(`transactions[${index}].factoryDeps is required for zkSync`);
388
+ }
389
+ if (value.operation !== 0)
390
+ throw new Error(`transactions[${index}].operation must be 0`);
391
+ const selectedPurpose = purpose(value.purpose, `transactions[${index}].purpose`);
392
+ const result = {
393
+ id: safeId(value.id, `transactions[${index}].id`),
394
+ purpose: selectedPurpose,
395
+ to: address(value.to, `transactions[${index}].to`),
396
+ value: integerString(value.value, `transactions[${index}].value`),
397
+ data: hexBytes(value.data, `transactions[${index}].data`, { empty: true }),
398
+ operation: 0,
399
+ };
400
+ if (selectedScheme === 'zksync-eravm') {
401
+ const dependencies = normalizeFactoryDeps(value.factoryDeps, `transactions[${index}].factoryDeps`);
402
+ if (selectedPurpose.startsWith('deploy-') && dependencies.length === 0) {
403
+ throw new Error(`transactions[${index}].factoryDeps must publish deployment bytecode`);
404
+ }
405
+ result.factoryDeps = dependencies;
406
+ }
407
+ return result;
408
+ };
409
+ const assertRoleShape = (selectedKind, deployments) => {
410
+ const roles = deployments.map((deployment) => deployment.role).join(',');
411
+ const expected = selectedKind === 'create2-deploy'
412
+ ? 'contract'
413
+ : selectedKind === 'uups-placeholder-deploy'
414
+ ? 'implementation,proxy'
415
+ : 'implementation';
416
+ if (roles !== expected)
417
+ throw new Error(`${selectedKind} deployment roles must be ${expected}`);
418
+ };
419
+ export const normalizePreparationPlan = (raw) => {
420
+ const value = record(raw, 'preparation plan');
421
+ exactKeys(value, [
422
+ 'version', 'requestHash', 'kind', 'scheme', 'network', 'target', 'chainId',
423
+ 'contract', 'artifact', 'validation', 'deployments', 'transactions',
424
+ ], ['proxyKind'], 'preparation plan');
425
+ if (value.version !== 1)
426
+ throw new Error('preparation plan version must be 1');
427
+ const selectedKind = kind(value.kind);
428
+ const selectedScheme = scheme(value.scheme);
429
+ if (selectedKind === 'create2-deploy') {
430
+ if (value.proxyKind !== undefined)
431
+ throw new Error('create2-deploy must not contain proxyKind');
432
+ }
433
+ else if (value.proxyKind !== 'uups') {
434
+ throw new Error(`${selectedKind} requires proxyKind uups`);
435
+ }
436
+ if (!Array.isArray(value.deployments))
437
+ throw new Error('deployments must be an array');
438
+ if (!Array.isArray(value.transactions))
439
+ throw new Error('transactions must be an array');
440
+ const deployments = value.deployments.map((deployment, index) => (normalizeDeployment(deployment, index, selectedScheme)));
441
+ assertRoleShape(selectedKind, deployments);
442
+ const transactions = value.transactions.map((transaction, index) => (normalizeTransaction(transaction, index, selectedScheme)));
443
+ const transactionIds = new Set();
444
+ for (const transaction of transactions) {
445
+ if (transactionIds.has(transaction.id))
446
+ throw new Error(`duplicate transaction id ${transaction.id}`);
447
+ transactionIds.add(transaction.id);
448
+ }
449
+ return {
450
+ version: 1,
451
+ requestHash: digest(value.requestHash, 'requestHash'),
452
+ kind: selectedKind,
453
+ scheme: selectedScheme,
454
+ network: safeId(value.network, 'network'),
455
+ target: safeId(value.target, 'target'),
456
+ chainId: integerString(value.chainId, 'chainId'),
457
+ contract: nonEmptyString(value.contract, 'contract'),
458
+ ...(selectedKind === 'create2-deploy' ? {} : { proxyKind: 'uups' }),
459
+ artifact: normalizeArtifact(value.artifact),
460
+ validation: normalizeValidation(value.validation, selectedKind, selectedScheme),
461
+ deployments,
462
+ transactions,
463
+ };
464
+ };
465
+ const assertConfinedPath = (root, filePath) => {
466
+ const resolvedRoot = path.resolve(root);
467
+ const resolvedPath = path.resolve(filePath);
468
+ const relative = path.relative(resolvedRoot, resolvedPath);
469
+ if (relative.startsWith('..') || path.isAbsolute(relative) || relative === '') {
470
+ throw new Error('preparation plan output must be a file inside the project root');
471
+ }
472
+ let current = resolvedRoot;
473
+ for (const segment of relative.split(path.sep).filter(Boolean)) {
474
+ current = path.join(current, segment);
475
+ if (fs.existsSync(current) && fs.lstatSync(current).isSymbolicLink()) {
476
+ throw new Error('preparation plan output path contains a symlink');
477
+ }
478
+ }
479
+ };
480
+ export const writePreparationPlanAtomic = (filePath, raw, root = process.cwd()) => {
481
+ const plan = normalizePreparationPlan(raw);
482
+ assertConfinedPath(root, filePath);
483
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
484
+ const temporary = `${filePath}.${process.pid}.${Date.now()}.tmp`;
485
+ try {
486
+ fs.writeFileSync(temporary, `${JSON.stringify(plan, null, 2)}\n`, { flag: 'wx', mode: 0o600 });
487
+ fs.renameSync(temporary, filePath);
488
+ }
489
+ catch (error) {
490
+ if (fs.existsSync(temporary))
491
+ fs.unlinkSync(temporary);
492
+ throw error;
493
+ }
494
+ return plan;
495
+ };
496
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../src/core/preparation/normalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ export type GateToolScheme = 'evm' | 'zksync-eravm';
2
+ export type GateToolPreparationKind = 'create2-deploy' | 'uups-placeholder-deploy' | 'uups-upgrade';
3
+ export interface GateToolAddressPolicy {
4
+ expectedAddress?: string;
5
+ leadingZeroBytes?: number;
6
+ }
7
+ export interface GateToolPreparationRequestCommonV1 {
8
+ version: 1;
9
+ kind: GateToolPreparationKind;
10
+ /** Defaults to `evm` when omitted by a caller. */
11
+ scheme?: GateToolScheme;
12
+ network: string;
13
+ target: string;
14
+ contract: string;
15
+ constructorArgs: unknown[];
16
+ factory: string;
17
+ }
18
+ export interface GateToolCreate2DeployRequestV1 extends GateToolPreparationRequestCommonV1 {
19
+ kind: 'create2-deploy';
20
+ salt: string;
21
+ create2ForwardValue?: string;
22
+ callForwardValue?: string;
23
+ addressPolicy?: GateToolAddressPolicy;
24
+ }
25
+ export interface GateToolCallV1 {
26
+ method: string;
27
+ args: unknown[];
28
+ }
29
+ export interface GateToolUupsRequestBaseV1 extends GateToolPreparationRequestCommonV1 {
30
+ proxyKind: 'uups';
31
+ implementationSalt: string;
32
+ unsafeAllow?: string[];
33
+ }
34
+ export interface GateToolUupsPlaceholderDeployRequestV1 extends GateToolUupsRequestBaseV1 {
35
+ kind: 'uups-placeholder-deploy';
36
+ proxySalt: string;
37
+ placeholderImplementation: string;
38
+ proxyAddressPolicy?: GateToolAddressPolicy;
39
+ call?: GateToolCallV1;
40
+ }
41
+ export interface GateToolUupsUpgradeRequestV1 extends GateToolUupsRequestBaseV1 {
42
+ kind: 'uups-upgrade';
43
+ proxy: string;
44
+ implementationAddressPolicy?: GateToolAddressPolicy;
45
+ call?: GateToolCallV1;
46
+ }
47
+ export type GateToolPreparationRequestV1 = GateToolCreate2DeployRequestV1 | GateToolUupsPlaceholderDeployRequestV1 | GateToolUupsUpgradeRequestV1;
48
+ export type GateToolNormalizedCreate2DeployRequestV1 = Omit<GateToolCreate2DeployRequestV1, 'scheme'> & {
49
+ scheme: GateToolScheme;
50
+ };
51
+ export type GateToolNormalizedUupsPlaceholderDeployRequestV1 = Omit<GateToolUupsPlaceholderDeployRequestV1, 'scheme'> & {
52
+ scheme: GateToolScheme;
53
+ };
54
+ export type GateToolNormalizedUupsUpgradeRequestV1 = Omit<GateToolUupsUpgradeRequestV1, 'scheme'> & {
55
+ scheme: GateToolScheme;
56
+ };
57
+ export type GateToolNormalizedPreparationRequestV1 = GateToolNormalizedCreate2DeployRequestV1 | GateToolNormalizedUupsPlaceholderDeployRequestV1 | GateToolNormalizedUupsUpgradeRequestV1;
58
+ export type GateToolTransactionPurpose = 'deploy-contract' | 'deploy-implementation' | 'deploy-proxy' | 'upgrade-proxy';
59
+ export interface GateToolTransactionPlan {
60
+ id: string;
61
+ purpose: GateToolTransactionPurpose;
62
+ to: string;
63
+ value: string;
64
+ data: string;
65
+ operation: 0;
66
+ factoryDeps?: string[];
67
+ }
68
+ export type GateToolArtifactFormat = 'hh-sol-artifact-1' | 'hh-zksolc-artifact-1';
69
+ export interface GateToolArtifactValidation {
70
+ kind: 'artifact';
71
+ engine: 'hardhat-artifact';
72
+ artifactFormat: GateToolArtifactFormat;
73
+ }
74
+ export interface GateToolUupsInitialValidation {
75
+ kind: 'uups-initial';
76
+ engine: 'openzeppelin' | 'matterlabs-openzeppelin';
77
+ artifactFormat: GateToolArtifactFormat;
78
+ implementationSafe: true;
79
+ }
80
+ export interface GateToolUupsUpgradeValidation {
81
+ kind: 'uups-upgrade';
82
+ engine: 'openzeppelin' | 'matterlabs-openzeppelin';
83
+ artifactFormat: GateToolArtifactFormat;
84
+ implementationSafe: true;
85
+ storageLayoutCompatible: true;
86
+ currentImplementation: string;
87
+ oldLayoutHash: string;
88
+ newLayoutHash: string;
89
+ manifestDigest: string;
90
+ }
91
+ export type GateToolValidation = GateToolArtifactValidation | GateToolUupsInitialValidation | GateToolUupsUpgradeValidation;
92
+ export interface GateToolArtifactIdentity {
93
+ sourceName: string;
94
+ contractName: string;
95
+ digest: string;
96
+ }
97
+ export interface GateToolDeploymentPlan {
98
+ role: 'contract' | 'implementation' | 'proxy';
99
+ address: string;
100
+ salt: string;
101
+ status: 'required' | 'reused';
102
+ constructorInput: string;
103
+ initCodeHash?: string;
104
+ bytecodeHash?: string;
105
+ constructorInputHash?: string;
106
+ }
107
+ export interface GateToolPreparationPlanV1 {
108
+ version: 1;
109
+ requestHash: string;
110
+ kind: GateToolPreparationKind;
111
+ scheme: GateToolScheme;
112
+ network: string;
113
+ target: string;
114
+ chainId: string;
115
+ contract: string;
116
+ proxyKind?: 'uups';
117
+ artifact: GateToolArtifactIdentity;
118
+ validation: GateToolValidation;
119
+ deployments: GateToolDeploymentPlan[];
120
+ transactions: GateToolTransactionPlan[];
121
+ }
122
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/preparation/types.ts"],"names":[],"mappings":"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"}