gate-evm-tools 1.0.20 → 1.0.22

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.
@@ -62,11 +62,7 @@ export class BytecodeChecker {
62
62
  if (contractName.endsWith('::Proxy')) {
63
63
  return await this.getProxyLocalBytecode();
64
64
  }
65
- const artifact = await this.hre.artifacts.readArtifact(contractName);
66
- return {
67
- bytecode: artifact.deployedBytecode,
68
- abi: artifact.abi
69
- };
65
+ return await this.getArtifactLocalBytecode(contractName);
70
66
  }
71
67
  catch (error) {
72
68
  throw new Error(`Failed to get local bytecode: ${error.message}`);
@@ -78,11 +74,7 @@ export class BytecodeChecker {
78
74
  */
79
75
  async getProxyLocalBytecode() {
80
76
  try {
81
- const artifact = await this.hre.artifacts.readArtifact('ERC1967Proxy');
82
- return {
83
- bytecode: artifact.deployedBytecode,
84
- abi: artifact.abi
85
- };
77
+ return await this.getArtifactLocalBytecode('ERC1967Proxy');
86
78
  }
87
79
  catch (error) {
88
80
  throw new Error(`无法找到 ERC1967Proxy 的本地 artifact。\n` +
@@ -90,225 +82,38 @@ export class BytecodeChecker {
90
82
  }
91
83
  }
92
84
  /**
93
- * 检查是否是constructor参数差异(主要是immutable变量)
94
- */
95
- checkConstructorParamsDifference(onchainCode, localCode, abi = null) {
96
- if (onchainCode.length !== localCode.length) {
97
- return { isConstructorDiff: false, reason: "长度不同" };
98
- }
99
- if (onchainCode === localCode) {
100
- return { isConstructorDiff: false, reason: "完全相同" };
101
- }
102
- if (abi) {
103
- const smartAnalysis = this.smartAnalyzeWithABI(onchainCode, localCode, abi);
104
- if (smartAnalysis.isConstructorDiff) {
105
- return smartAnalysis;
106
- }
107
- }
108
- return this.fallbackAnalyze(onchainCode, localCode);
109
- }
110
- /**
111
- * 基于ABI的智能分析
112
- */
113
- smartAnalyzeWithABI(onchainCode, localCode, abi) {
114
- const constructor = abi.find(item => item.type === 'constructor');
115
- if (!constructor || !constructor.inputs || constructor.inputs.length === 0) {
116
- return this.detectImmutableVariables(onchainCode, localCode);
117
- }
118
- return this.detectConstructorParams(onchainCode, localCode, constructor);
119
- }
120
- /**
121
- * 检测immutable变量
85
+ * 使用 artifact 的 fully-qualified identity 读取编译器生成的 immutableReferences。
86
+ * build-info 缺失时保留空引用,使完全一致的 bytecode 仍可通过;一旦存在差异,
87
+ * compareBytecode 会按 fail-closed 规则拒绝缺少编译器证据的匹配。
122
88
  */
123
- detectImmutableVariables(onchainCode, localCode) {
124
- const matches = [];
125
- const zeroPattern64 = /0{64}/g;
126
- let match;
127
- while ((match = zeroPattern64.exec(localCode)) !== null) {
128
- const position = match.index;
129
- const onchainSegment = onchainCode.substr(position, 64);
130
- const localSegment = match[0];
131
- if (onchainSegment !== localSegment && /^[0-9a-f]{64}$/i.test(onchainSegment)) {
132
- if (onchainSegment.startsWith('000000000000000000000000') &&
133
- onchainSegment.substr(24, 40) !== '0000000000000000000000000000000000000000') {
134
- const address = onchainSegment.substr(24, 40);
135
- matches.push({
136
- position: position,
137
- length: 64,
138
- onchainValue: onchainSegment,
139
- localValue: localSegment,
140
- type: "address",
141
- description: `Immutable地址变量: 0x${address}`
142
- });
143
- }
144
- else {
145
- try {
146
- const value = BigInt('0x' + onchainSegment);
147
- matches.push({
148
- position: position,
149
- length: 64,
150
- onchainValue: onchainSegment,
151
- localValue: localSegment,
152
- type: "uint256",
153
- description: `Immutable uint256变量: ${value.toString()}`
154
- });
155
- }
156
- catch (e) {
157
- // 忽略无法解析的值
158
- }
159
- }
160
- }
161
- }
162
- if (matches.length > 0) {
163
- const descriptions = matches.map(m => m.description).join(", ");
164
- return {
165
- isConstructorDiff: true,
166
- reason: `Immutable变量差异: ${descriptions}`,
167
- differences: matches,
168
- diffCount: matches.reduce((sum, m) => sum + m.length, 0)
169
- };
170
- }
171
- return { isConstructorDiff: false, reason: "未检测到immutable变量模式" };
172
- }
173
- /**
174
- * 检测constructor参数
175
- */
176
- detectConstructorParams(onchainCode, localCode, constructor) {
177
- const params = constructor.inputs;
178
- const allMatches = [];
179
- for (const param of params) {
180
- if (param.type === 'address') {
181
- const addressMatches = this.findAddressParams(onchainCode, localCode, param);
182
- allMatches.push(...addressMatches);
183
- }
184
- else if (param.type.startsWith('uint')) {
185
- const uintMatches = this.findUintParams(onchainCode, localCode, param);
186
- allMatches.push(...uintMatches);
187
- }
188
- }
189
- if (allMatches.length > 0) {
190
- const uniqueParams = this.deduplicateParams(allMatches, params);
191
- const descriptions = uniqueParams.map(p => p.description).join(", ");
192
- return {
193
- isConstructorDiff: true,
194
- reason: `Constructor参数差异(${params.map(p => `${p.type} ${p.name}`).join(', ')}): ${descriptions}`,
195
- differences: uniqueParams,
196
- diffCount: allMatches.reduce((sum, m) => sum + m.length, 0)
197
- };
198
- }
199
- return { isConstructorDiff: false, reason: "未检测到constructor参数模式" };
200
- }
201
- /**
202
- * 去重参数:按顺序匹配参数
203
- */
204
- deduplicateParams(allMatches, params) {
205
- const uniqueAddresses = [];
206
- const seenAddresses = new Set();
207
- for (const match of allMatches) {
208
- const address = match.address || match.onchainValue;
209
- if (!seenAddresses.has(address)) {
210
- seenAddresses.add(address);
211
- uniqueAddresses.push({
212
- address: address,
213
- match: match
214
- });
215
- }
216
- }
217
- const uniqueParams = [];
218
- const addressParams = params.filter(p => p.type === 'address');
219
- const reversedAddresses = [...uniqueAddresses].reverse();
220
- for (let i = 0; i < addressParams.length && i < reversedAddresses.length; i++) {
221
- const param = addressParams[i];
222
- const addressInfo = reversedAddresses[i];
223
- uniqueParams.push({
224
- ...addressInfo.match,
225
- description: `${param.name}(${param.type}): 0x${addressInfo.address}`
226
- });
227
- }
228
- return uniqueParams;
229
- }
230
- /**
231
- * 查找地址参数
232
- */
233
- findAddressParams(onchainCode, localCode, param) {
234
- const matches = [];
235
- const zeroPattern64 = /0{64}/g;
236
- let match;
237
- while ((match = zeroPattern64.exec(localCode)) !== null) {
238
- const position = match.index;
239
- const onchainSegment = onchainCode.substr(position, 64);
240
- const localSegment = match[0];
241
- if (onchainSegment !== localSegment && /^[0-9a-f]{64}$/i.test(onchainSegment)) {
242
- if (onchainSegment.startsWith('000000000000000000000000')) {
243
- const address = onchainSegment.substr(24, 40);
244
- if (address !== '0000000000000000000000000000000000000000') {
245
- const alreadyExists = matches.some(m => m.address === address && m.position === position);
246
- if (!alreadyExists) {
247
- matches.push({
248
- position: position,
249
- length: 64,
250
- onchainValue: onchainSegment,
251
- localValue: localSegment,
252
- type: "address",
253
- address: address,
254
- description: `${param.name}(${param.type}): 0x${address}`
255
- });
256
- }
257
- }
89
+ async getArtifactLocalBytecode(contractName) {
90
+ const artifact = await this.hre.artifacts.readArtifact(contractName);
91
+ let immutableReferences = {};
92
+ const sourceName = artifact.sourceName;
93
+ const artifactContractName = artifact.contractName;
94
+ const getBuildInfo = this.hre.artifacts.getBuildInfo;
95
+ if (typeof sourceName === 'string' &&
96
+ typeof artifactContractName === 'string' &&
97
+ typeof getBuildInfo === 'function') {
98
+ try {
99
+ const fullyQualifiedName = `${sourceName}:${artifactContractName}`;
100
+ const buildInfo = await getBuildInfo.call(this.hre.artifacts, fullyQualifiedName);
101
+ const compilerReferences = buildInfo?.output?.contracts?.[sourceName]?.[artifactContractName]
102
+ ?.evm?.deployedBytecode?.immutableReferences;
103
+ if (compilerReferences &&
104
+ typeof compilerReferences === 'object' &&
105
+ !Array.isArray(compilerReferences)) {
106
+ immutableReferences = compilerReferences;
258
107
  }
259
108
  }
260
- }
261
- return matches;
262
- }
263
- /**
264
- * 查找数值参数
265
- */
266
- findUintParams(onchainCode, localCode, param) {
267
- const matches = [];
268
- const bitSize = param.type === 'uint' ? 256 : parseInt(param.type.replace('uint', ''));
269
- const hexLength = bitSize / 4;
270
- const zeroPattern = new RegExp(`0{${hexLength}}`, 'g');
271
- let match;
272
- while ((match = zeroPattern.exec(localCode)) !== null) {
273
- const position = match.index;
274
- const onchainSegment = onchainCode.substr(position, hexLength);
275
- if (onchainSegment !== match[0] && new RegExp(`^[0-9a-f]{${hexLength}}$`, 'i').test(onchainSegment)) {
276
- try {
277
- const value = BigInt('0x' + onchainSegment);
278
- matches.push({
279
- position: position,
280
- length: hexLength,
281
- onchainValue: onchainSegment,
282
- localValue: match[0],
283
- type: param.type,
284
- description: `${param.name}(${param.type}): ${value.toString()}`
285
- });
286
- }
287
- catch (e) {
288
- // 忽略无法解析的值
289
- }
109
+ catch {
110
+ immutableReferences = {};
290
111
  }
291
112
  }
292
- return matches;
293
- }
294
- /**
295
- * 回退分析方法
296
- */
297
- fallbackAnalyze(onchainCode, localCode) {
298
- const wethAddress = 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2';
299
- const zeroAddress = '0000000000000000000000000000000000000000';
300
- const onchainNormalized = onchainCode.replace(new RegExp(wethAddress, 'g'), zeroAddress);
301
- if (onchainNormalized === localCode) {
302
- return {
303
- isConstructorDiff: true,
304
- reason: "Constructor参数差异: WETH地址",
305
- differences: [{ description: `WETH地址: 0x${wethAddress}` }],
306
- diffCount: 40
307
- };
308
- }
309
113
  return {
310
- isConstructorDiff: false,
311
- reason: "未知代码差异"
114
+ bytecode: artifact.deployedBytecode,
115
+ abi: artifact.abi,
116
+ immutableReferences
312
117
  };
313
118
  }
314
119
  /**
@@ -395,10 +200,101 @@ export class BytecodeChecker {
395
200
  const normalizedOnchain = '73' + zeroFill + onchainCode.substring(42);
396
201
  return { onchain: normalizedOnchain, local: localCode, selfAddress: `0x${selfAddress}` };
397
202
  }
203
+ /**
204
+ * 只屏蔽编译器声明的 immutable 区间,并比较其余 runtime bytecode。
205
+ */
206
+ compareWithImmutableReferences(onchainCode, localCode, immutableReferences) {
207
+ if (!immutableReferences ||
208
+ typeof immutableReferences !== 'object' ||
209
+ Array.isArray(immutableReferences) ||
210
+ Object.keys(immutableReferences).length === 0) {
211
+ return {
212
+ matches: false,
213
+ reason: '字节码不匹配,compiler immutableReferences 缺失'
214
+ };
215
+ }
216
+ const ranges = [];
217
+ for (const [id, references] of Object.entries(immutableReferences)) {
218
+ if (!Array.isArray(references) || references.length === 0) {
219
+ return {
220
+ matches: false,
221
+ reason: `compiler immutable ${id} 引用列表无效`
222
+ };
223
+ }
224
+ const onchainValuesByLength = new Map();
225
+ for (let index = 0; index < references.length; index++) {
226
+ const reference = references[index];
227
+ if (!reference ||
228
+ !Number.isInteger(reference.start) ||
229
+ !Number.isInteger(reference.length) ||
230
+ reference.start < 0 ||
231
+ reference.length <= 0) {
232
+ return {
233
+ matches: false,
234
+ reason: `compiler immutable ${id}[${index}] 元数据无效:start 必须是非负整数,length 必须是正整数`
235
+ };
236
+ }
237
+ const startHex = reference.start * 2;
238
+ const lengthHex = reference.length * 2;
239
+ const endHex = startHex + lengthHex;
240
+ if (endHex > onchainCode.length || endHex > localCode.length) {
241
+ return {
242
+ matches: false,
243
+ reason: `compiler immutable ${id}[${index}] 引用越界`
244
+ };
245
+ }
246
+ const onchainValue = onchainCode.slice(startHex, endHex);
247
+ const priorValue = onchainValuesByLength.get(reference.length);
248
+ if (priorValue !== undefined && priorValue !== onchainValue) {
249
+ return {
250
+ matches: false,
251
+ reason: `compiler immutable ${id} 的重复引用值不一致`
252
+ };
253
+ }
254
+ onchainValuesByLength.set(reference.length, onchainValue);
255
+ ranges.push({ id, index, startHex, endHex, lengthHex });
256
+ }
257
+ }
258
+ if (ranges.length === 0) {
259
+ return {
260
+ matches: false,
261
+ reason: '字节码不匹配,compiler immutableReferences 缺失'
262
+ };
263
+ }
264
+ ranges.sort((left, right) => left.startHex - right.startHex || left.endHex - right.endHex);
265
+ for (let index = 1; index < ranges.length; index++) {
266
+ const previous = ranges[index - 1];
267
+ const current = ranges[index];
268
+ if (current.startHex < previous.endHex) {
269
+ return {
270
+ matches: false,
271
+ reason: `compiler immutable 引用区间重叠:${previous.id}[${previous.index}] 与 ${current.id}[${current.index}]`
272
+ };
273
+ }
274
+ }
275
+ let maskedOnchain = onchainCode;
276
+ let maskedLocal = localCode;
277
+ for (let index = ranges.length - 1; index >= 0; index--) {
278
+ const range = ranges[index];
279
+ const mask = '0'.repeat(range.lengthHex);
280
+ maskedOnchain = maskedOnchain.slice(0, range.startHex) + mask + maskedOnchain.slice(range.endHex);
281
+ maskedLocal = maskedLocal.slice(0, range.startHex) + mask + maskedLocal.slice(range.endHex);
282
+ }
283
+ if (maskedOnchain !== maskedLocal) {
284
+ return {
285
+ matches: false,
286
+ reason: 'compiler immutableReferences 区间外仍存在代码差异'
287
+ };
288
+ }
289
+ return {
290
+ matches: true,
291
+ reason: `编译器 immutableReferences 精确匹配(${ranges.length} 处)`
292
+ };
293
+ }
398
294
  /**
399
295
  * 比较两个bytecode
400
296
  */
401
- compareBytecode(onchainBytecode, localBytecode, abi = null) {
297
+ compareBytecode(onchainBytecode, localBytecode, _abi = null, immutableReferences = {}) {
402
298
  const onchainNormalized = this.normalizeBytecode(onchainBytecode);
403
299
  let localNormalized = this.normalizeBytecode(localBytecode);
404
300
  let libraryLinks = [];
@@ -436,23 +332,16 @@ export class BytecodeChecker {
436
332
  libraryLinks: libraryLinks.length > 0 ? libraryLinks : undefined
437
333
  };
438
334
  }
439
- const constructorCheck = this.checkConstructorParamsDifference(onchainForCompare, localForCompare, abi);
440
- if (constructorCheck.isConstructorDiff) {
441
- return {
442
- matches: true,
443
- reason: `${constructorCheck.reason}${extraSuffix}`,
444
- constructorDetails: constructorCheck.differences,
445
- libraryLinks: libraryLinks.length > 0 ? libraryLinks : undefined
446
- };
447
- }
448
- if (onchainForCompare.startsWith(localForCompare)) {
449
- return {
450
- matches: true,
451
- reason: `前缀匹配(可能包含constructor参数)${extraSuffix}`,
452
- libraryLinks: libraryLinks.length > 0 ? libraryLinks : undefined
453
- };
454
- }
455
- return { matches: false, reason: "代码存在显著差异" };
335
+ const immutableComparison = this.compareWithImmutableReferences(onchainForCompare, localForCompare, immutableReferences);
336
+ return {
337
+ ...immutableComparison,
338
+ reason: immutableComparison.matches
339
+ ? `${immutableComparison.reason}${extraSuffix}`
340
+ : immutableComparison.reason,
341
+ libraryLinks: immutableComparison.matches && libraryLinks.length > 0
342
+ ? libraryLinks
343
+ : undefined
344
+ };
456
345
  }
457
346
  /**
458
347
  * 检查单个合约
@@ -490,7 +379,7 @@ export class BytecodeChecker {
490
379
  // 使用实际合约名获取本地 bytecode
491
380
  const localData = await this.getLocalBytecode(contractName);
492
381
  result.localBytecodeLength = localData.bytecode.length;
493
- const comparison = this.compareBytecode(onchainBytecode, localData.bytecode, localData.abi);
382
+ const comparison = this.compareBytecode(onchainBytecode, localData.bytecode, localData.abi, localData.immutableReferences);
494
383
  result.matches = comparison.matches;
495
384
  result.reason = comparison.reason;
496
385
  }
@@ -584,4 +473,4 @@ export class BytecodeChecker {
584
473
  return networkResults;
585
474
  }
586
475
  }
587
- //# sourceMappingURL=bytecodeChecker.js.map
476
+ //# sourceMappingURL=BytecodeChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BytecodeChecker.js","sourceRoot":"","sources":["../../src/core/BytecodeChecker.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,8 @@ export interface SyncOptions {
16
16
  * @param options - 同步选项
17
17
  */
18
18
  export declare function syncNetworkFile(options: SyncOptions): Promise<{
19
+ manifestTransaction: import("../utils/manifestTransaction.js").ManifestTransactionReport;
20
+ syncReport: string;
19
21
  proxyAddress: string;
20
22
  implementationAddress: string;
21
23
  layoutHash: string;
@@ -1 +1 @@
1
- {"version":3,"file":"syncUpgradeJson.d.ts","sourceRoot":"","sources":["../../src/core/syncUpgradeJson.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,GAAG,CAAC;CACV;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,WAAW;;;;;;GA0RzD"}
1
+ {"version":3,"file":"syncUpgradeJson.d.ts","sourceRoot":"","sources":["../../src/core/syncUpgradeJson.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,GAAG,CAAC;CACV;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,WAAW;;;;;;;;GAgTzD"}