gate-evm-tools 1.0.0 → 1.0.2

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.
package/README.md CHANGED
@@ -4,6 +4,13 @@
4
4
 
5
5
  ## 功能特性
6
6
 
7
+ ### 🔧 配置修复(fix)
8
+ - ✅ 自动检测 Hardhat 配置文件的兼容性问题
9
+ - ✅ 智能修复 ESM 模块导入错误
10
+ - ✅ 交互式确认修复操作
11
+ - ✅ 自动备份原配置文件
12
+ - ✅ 支持仅检查模式
13
+
7
14
  ### 🔍 字节码检查(check)
8
15
  - ✅ 检查链下合约代码和链上合约代码是否一致
9
16
  - ✅ 支持检查单个合约、指定网络或所有合约
@@ -11,6 +18,7 @@
11
18
  - ✅ 自动移除元数据进行比较
12
19
  - ✅ 生成详细的 JSON 报告
13
20
  - ✅ 支持增量更新报告
21
+ - ✅ 检测到配置错误时提供自动修复选项
14
22
 
15
23
  ### 🔄 合约状态同步(sync)
16
24
  - ✅ 同步链上合约状态到本地 .openzeppelin 文件
@@ -24,6 +32,14 @@
24
32
  - ✅ 生成 upgradeToAndCall 的 calldata
25
33
  - ✅ 支持同一合约和不同合约的升级模式
26
34
 
35
+ ### 📋 Calldata 解析(parse)
36
+ - ✅ 解析 EVM calldata,显示函数名称和参数
37
+ - ✅ 支持从 Hardhat artifacts 自动查找 ABI
38
+ - ✅ 支持指定自定义 ABI 文件路径
39
+ - ✅ 支持直接提供 ABI 数组
40
+ - ✅ 支持批量解析多个 calldata
41
+ - ✅ 友好的彩色输出和 JSON 导出
42
+
27
43
  ## 一、发布 NPM 包
28
44
 
29
45
  ### 1. 准备发布
@@ -148,6 +164,34 @@ npx hardhat compile
148
164
  npx gate-tool --help
149
165
  ```
150
166
 
167
+ #### 🔧 配置修复(推荐首次使用)
168
+
169
+ 如果在使用过程中遇到 Hardhat 配置导入错误,可以使用 `fix` 命令自动修复:
170
+
171
+ ```bash
172
+ # 自动检测并修复配置问题(交互式)
173
+ npx gate-tool fix
174
+
175
+ # 仅检查问题,不执行修复
176
+ npx gate-tool fix --check
177
+
178
+ # 跳过确认,直接修复
179
+ npx gate-tool fix --yes
180
+ ```
181
+
182
+ **常见问题:**
183
+ - `Cannot find module 'hardhat/config'` - 导入语句需要使用 `type` 关键字
184
+ - `Did you mean to import "hardhat/config.js"?` - ESM 模块兼容性问题
185
+
186
+ `fix` 命令会自动将:
187
+ ```typescript
188
+ import { HardhatUserConfig } from "hardhat/config";
189
+ ```
190
+ 修复为:
191
+ ```typescript
192
+ import type { HardhatUserConfig } from "hardhat/config";
193
+ ```
194
+
151
195
  #### 🔍 字节码检查
152
196
 
153
197
  ```bash
@@ -209,6 +253,80 @@ npx gate-tool validate \
209
253
 
210
254
  **注意:** `validate` 命令会在链上部署新的实现合约(仅用于验证),但不会升级代理合约。请使用生成的 calldata 通过多签钱包执行升级。
211
255
 
256
+ #### 📋 解析 Calldata
257
+
258
+ 解析 EVM calldata,将其转换为人类可读的函数调用信息。
259
+
260
+ ```bash
261
+ # 从 JSON 文件读取(推荐)
262
+ npx gate-tool parse --input parseCalldata.example.json
263
+
264
+ # 直接从命令行参数(使用合约名称从 artifacts 查找 ABI)
265
+ npx gate-tool parse \
266
+ --to 0x5FbDB2315678afecb367f032d93F642f64180aa3 \
267
+ --contract Counter \
268
+ --calldata 0x3fb5c1cb0000000000000000000000000000000000000000000000000000000000000064
269
+
270
+ # 使用自定义 ABI 文件
271
+ npx gate-tool parse \
272
+ --to 0x1234... \
273
+ --abi-path ./custom-abi/MyContract.json \
274
+ --calldata 0x...
275
+
276
+ # 批量解析并保存结果
277
+ npx gate-tool parse \
278
+ --input batch-calldata.json \
279
+ --output results.json
280
+ ```
281
+
282
+ **输入文件格式示例:**
283
+
284
+ ```json
285
+ {
286
+ "to": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
287
+ "contractName": "Counter",
288
+ "calldata": "0x3fb5c1cb0000000000000000000000000000000000000000000000000000000000000064"
289
+ }
290
+ ```
291
+
292
+ **批量解析格式(数组 包含三种形式):**
293
+
294
+ ```json
295
+ [
296
+ {
297
+ "to": "0x...",
298
+ "contractName": "Counter",
299
+ "calldata": "0x..."
300
+ },
301
+ {
302
+ "to": "0x...",
303
+ "abiPath": "./abi.json",
304
+ "calldata": "0x..."
305
+ },
306
+ {
307
+ "": "0x...",
308
+ "abi": [
309
+ {
310
+ "inputs": [
311
+ {"name": "spender", "type": "address"},
312
+ {"name": "amount", "type": "uint256"}
313
+ ],
314
+ "name": "approve",
315
+ "outputs": [{"name": "", "type": "bool"}],
316
+ "stateMutability": "nonpayable",
317
+ "type": "function"
318
+ }
319
+ ],
320
+ "calldata": "0x..."
321
+ }
322
+ ]
323
+ ```
324
+
325
+ 支持三种 ABI 来源方式:
326
+ 1. **contractName** - 从 Hardhat artifacts 自动查找(需要先编译合约)
327
+ 2. **abiPath** - 指定 ABI 文件路径
328
+ 3. **abi** - 直接在 JSON 中提供 ABI 数组
329
+
212
330
  ### 6. 命令选项
213
331
 
214
332
  #### check 命令
@@ -236,4 +354,16 @@ npx gate-tool validate \
236
354
  | `--old <name>` | - | 旧合约名称 | ✅ |
237
355
  | `--new <name>` | - | 新合约名称 | ✅ |
238
356
  | `--network <name>` | `-n` | 网络名称 | - |
239
- | `--output <path>` | `-o` | 输出文件路径 | `./upgradeCalldata.json` |
357
+ | `--output <path>` | `-o` | 输出文件路径 | `./upgradeCalldata.json` |
358
+
359
+ #### parse 命令
360
+
361
+ | 选项 | 简写 | 说明 | 默认值 |
362
+ |------|------|------|--------|
363
+ | `--input <path>` | `-i` | 输入 JSON 文件路径 | - |
364
+ | `--to <address>` | - | 目标合约地址(命令行模式) | - |
365
+ | `--calldata <data>` | - | Calldata 十六进制数据(命令行模式) | - |
366
+ | `--contract <name>` | `-c` | 合约名称(从 artifacts 查找 ABI) | - |
367
+ | `--abi-path <path>` | - | 自定义 ABI 文件路径 | - |
368
+ | `--output <path>` | `-o` | 输出 JSON 文件路径 | - |
369
+ **ABI 来源优先级**:直接提供的 abi > abiPath > contractName
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAU3C;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,iBA6IxD"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAW3C;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,iBAuKxD"}
@@ -1,8 +1,10 @@
1
1
  import chalk from 'chalk';
2
2
  import ora from 'ora';
3
+ import prompts from 'prompts';
3
4
  import { findConfigFile, readConfigFile, saveReport, mergeReports } from '../utils/files.js';
4
5
  import { printSummary, printProgress, printConfig } from '../utils/output.js';
5
6
  import { BytecodeChecker } from '../core/bytecodeChecker.js';
7
+ import { isHardhatConfigImportError, detectAndFixWithPrompt, showManualFixGuide } from '../utils/configFixer.js';
6
8
  import fs from 'fs-extra';
7
9
  import path from 'path';
8
10
  import { createRequire } from 'module';
@@ -40,6 +42,32 @@ export async function checkBytecode(options) {
40
42
  hre = hardhatModule.default || hardhatModule;
41
43
  }
42
44
  catch (importError) {
45
+ // 检查是否是配置文件导入错误
46
+ if (isHardhatConfigImportError(requireError)) {
47
+ spinner.fail('Hardhat 配置文件存在兼容性问题');
48
+ console.log(chalk.yellow('\n⚠️ 检测到 hardhat.config.ts 导入问题\n'));
49
+ // 询问是否自动修复
50
+ const { shouldFix } = await prompts({
51
+ type: "confirm",
52
+ name: "shouldFix",
53
+ message: "是否自动修复此问题?",
54
+ initial: true
55
+ });
56
+ if (shouldFix) {
57
+ // 执行自动修复
58
+ const fixed = await detectAndFixWithPrompt();
59
+ if (fixed) {
60
+ console.log(chalk.blue('\n💡 配置已修复,请重新运行命令:'));
61
+ console.log(chalk.green(' npx gate-tool check\n'));
62
+ process.exit(0);
63
+ }
64
+ }
65
+ else {
66
+ // 显示手动修复指南
67
+ showManualFixGuide();
68
+ }
69
+ throw requireError;
70
+ }
43
71
  // 两种方式都失败,抛出原始错误
44
72
  throw requireError;
45
73
  }
@@ -107,29 +135,25 @@ export async function checkBytecode(options) {
107
135
  catch (error) {
108
136
  spinner.fail('检查失败');
109
137
  // 检测常见的 Hardhat 配置错误
110
- if (error.message && error.message.includes('Cannot find module') &&
111
- error.message.includes('hardhat/config')) {
138
+ if (isHardhatConfigImportError(error)) {
112
139
  console.error(chalk.red('\n❌ Hardhat 配置文件导入错误\n'));
113
- console.error(chalk.yellow('问题:你的 hardhat.config.ts 中的导入语句与当前环境不兼容。\n'));
114
- console.error(chalk.cyan('💡 解决方案:\n'));
115
- console.error(chalk.white('方案 1:修改导入语句(推荐)'));
116
- console.error(chalk.gray(' hardhat.config.ts 中的导入语句改为:'));
117
- console.error(chalk.green(' import { HardhatUserConfig } from "hardhat/config.js"'));
118
- console.error(chalk.green(' import { task } from "hardhat/config.js"'));
119
- console.error(chalk.gray(' (添加 .js 扩展名)\n'));
120
- console.error(chalk.white('方案 2:修改为 CommonJS 配置'));
121
- console.error(chalk.gray(' hardhat.config.ts 重命名为 hardhat.config.js'));
122
- console.error(chalk.gray(' 并使用 require 语法:'));
123
- console.error(chalk.green(' const { task } = require("hardhat/config");\n'));
124
- console.error(chalk.white('方案 3:确保 ts-node 正确配置'));
125
- console.error(chalk.gray(' 在 tsconfig.json 中设置:'));
126
- console.error(chalk.green(' "ts-node": { "transpileOnly": true, "compilerOptions": { "module": "commonjs" } }\n'));
140
+ console.error(chalk.yellow('问题:hardhat.config.ts 中的导入语句与当前环境不兼容。\n'));
141
+ // 显示自动修复提示
142
+ console.error(chalk.cyan('💡 快速解决:\n'));
143
+ console.error(chalk.green(' npx gate-tool fix\n'));
144
+ console.error(chalk.gray('或手动修复:'));
145
+ console.error(chalk.gray(' hardhat.config.ts 中的:'));
146
+ console.error(chalk.red(' import { HardhatUserConfig } from "hardhat/config"'));
147
+ console.error(chalk.gray(' 改为:'));
148
+ console.error(chalk.green(' import type { HardhatUserConfig } from "hardhat/config"\n'));
127
149
  console.error(chalk.red('详细错误信息:'));
128
150
  console.error(chalk.gray(error.message));
129
151
  }
130
152
  else {
131
153
  console.error(chalk.red('\n错误:'), error.message);
132
- console.error(chalk.gray(error.stack));
154
+ if (error.stack) {
155
+ console.error(chalk.gray(error.stack));
156
+ }
133
157
  }
134
158
  process.exit(1);
135
159
  }
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * fix 命令选项
3
+ */
4
+ interface FixOptions {
5
+ yes?: boolean;
6
+ check?: boolean;
7
+ }
8
+ /**
9
+ * 执行配置文件修复
10
+ */
11
+ export declare function fixConfig(options?: FixOptions): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,UAAU,UAAU;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,UAAe,iBA2EvD"}
@@ -0,0 +1,72 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { detectAndFixWithPrompt, findHardhatConfig, fixConfigIssues } from '../utils/configFixer.js';
4
+ /**
5
+ * 执行配置文件修复
6
+ */
7
+ export async function fixConfig(options = {}) {
8
+ const spinner = ora();
9
+ try {
10
+ console.log(chalk.cyan('\n🔧 Gate 配置修复工具\n'));
11
+ // 1. 查找配置文件
12
+ spinner.start('正在查找 Hardhat 配置文件...');
13
+ const configPath = findHardhatConfig();
14
+ if (!configPath) {
15
+ spinner.fail('未找到 hardhat.config.ts 或 hardhat.config.js');
16
+ console.log(chalk.yellow('\n请确保在 Hardhat 项目根目录下运行此命令'));
17
+ process.exit(1);
18
+ }
19
+ spinner.succeed(`找到配置文件: ${chalk.gray(configPath)}`);
20
+ // 2. 仅检查模式
21
+ if (options.check) {
22
+ spinner.start('正在检查配置问题...');
23
+ const { detectConfigIssues } = await import('../utils/configFixer.js');
24
+ const detection = await detectConfigIssues(configPath);
25
+ if (!detection.hasIssues) {
26
+ spinner.succeed('配置文件检查通过');
27
+ console.log(chalk.green('\n✅ 未发现需要修复的问题\n'));
28
+ return;
29
+ }
30
+ spinner.info(`发现 ${detection.issues.length} 个问题`);
31
+ console.log(chalk.yellow('\n检测到以下问题:\n'));
32
+ detection.issues.forEach((issue, index) => {
33
+ console.log(chalk.yellow(` ${index + 1}. ${issue.description}`));
34
+ console.log(chalk.gray(` ${issue.match.substring(0, 70)}${issue.match.length > 70 ? '...' : ''}`));
35
+ });
36
+ console.log(chalk.blue('\n💡 运行 "npx gate-tool fix" 自动修复这些问题\n'));
37
+ process.exit(1);
38
+ }
39
+ // 3. 自动修复模式(--yes)
40
+ if (options.yes) {
41
+ spinner.start('正在修复配置问题...');
42
+ const success = await fixConfigIssues(configPath, true);
43
+ if (success) {
44
+ spinner.succeed('配置文件修复完成');
45
+ console.log(chalk.green('\n✅ 所有问题已修复\n'));
46
+ console.log(chalk.blue('💡 现在可以运行 "npx gate-tool check" 进行检查\n'));
47
+ }
48
+ else {
49
+ spinner.fail('修复失败');
50
+ process.exit(1);
51
+ }
52
+ return;
53
+ }
54
+ // 4. 交互式修复(默认)
55
+ spinner.stop();
56
+ const success = await detectAndFixWithPrompt();
57
+ if (success) {
58
+ console.log(chalk.green('\n✅ 修复完成\n'));
59
+ console.log(chalk.blue('💡 现在可以运行 "npx gate-tool check" 进行检查\n'));
60
+ }
61
+ else {
62
+ process.exit(1);
63
+ }
64
+ }
65
+ catch (error) {
66
+ spinner.fail('执行失败');
67
+ console.error(chalk.red('\n错误:'), error.message);
68
+ console.error(chalk.gray(error.stack));
69
+ process.exit(1);
70
+ }
71
+ }
72
+ //# sourceMappingURL=fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface ParseOptions {
2
+ input?: string;
3
+ to?: string;
4
+ calldata?: string;
5
+ contract?: string;
6
+ abiPath?: string;
7
+ output?: string;
8
+ }
9
+ /**
10
+ * 执行 calldata 解析
11
+ */
12
+ export declare function parseCalldataCommand(options: ParseOptions): Promise<void>;
13
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/commands/parse.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,YAAY,iBA8F/D"}
@@ -0,0 +1,85 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { parseCalldata, parseMultipleCalldata } from '../core/parseCalldata.js';
4
+ import fs from 'fs-extra';
5
+ import path from 'path';
6
+ /**
7
+ * 执行 calldata 解析
8
+ */
9
+ export async function parseCalldataCommand(options) {
10
+ const spinner = ora();
11
+ try {
12
+ // 1. 确定输入方式
13
+ let result;
14
+ if (options.input) {
15
+ // 从 JSON 文件读取
16
+ const inputPath = path.resolve(options.input);
17
+ if (!fs.existsSync(inputPath)) {
18
+ throw new Error(`输入文件不存在: ${inputPath}`);
19
+ }
20
+ spinner.start('读取输入文件...');
21
+ const inputContent = JSON.parse(fs.readFileSync(inputPath, 'utf8'));
22
+ spinner.succeed('输入文件读取成功');
23
+ // 检查是否是批量解析(数组)
24
+ if (Array.isArray(inputContent)) {
25
+ const results = await parseMultipleCalldata(inputContent);
26
+ // 保存结果
27
+ if (options.output) {
28
+ const outputPath = path.resolve(options.output);
29
+ // 使用自定义的 replacer 函数处理 BigInt
30
+ fs.writeFileSync(outputPath, JSON.stringify(results, (_key, value) => typeof value === 'bigint' ? value.toString() : value, 2));
31
+ console.log(chalk.green(`\n💾 解析结果已保存到: ${outputPath}\n`));
32
+ }
33
+ // 检查是否有失败的
34
+ const failures = results.filter(r => !r.success);
35
+ if (failures.length > 0) {
36
+ process.exit(1);
37
+ }
38
+ return;
39
+ }
40
+ else {
41
+ // 单个解析
42
+ result = await parseCalldata(inputContent);
43
+ }
44
+ }
45
+ else if (options.to && options.calldata) {
46
+ // 从命令行参数解析
47
+ const input = {
48
+ to: options.to,
49
+ calldata: options.calldata
50
+ };
51
+ if (options.contract) {
52
+ input.contractName = options.contract;
53
+ }
54
+ if (options.abiPath) {
55
+ input.abiPath = options.abiPath;
56
+ }
57
+ result = await parseCalldata(input);
58
+ }
59
+ else {
60
+ throw new Error('请提供输入参数:\n' +
61
+ ' 方式1: 使用 --input <文件路径> 从 JSON 文件读取\n' +
62
+ ' 方式2: 使用 --to <地址> --calldata <数据> [--contract <合约名>] [--abi-path <ABI路径>]');
63
+ }
64
+ // 2. 保存结果到文件(如果指定)
65
+ if (options.output && result) {
66
+ const outputPath = path.resolve(options.output);
67
+ // 使用自定义的 replacer 函数处理 BigInt
68
+ fs.writeFileSync(outputPath, JSON.stringify(result, (_key, value) => typeof value === 'bigint' ? value.toString() : value, 2));
69
+ console.log(chalk.green(`💾 解析结果已保存到: ${outputPath}\n`));
70
+ }
71
+ // 3. 检查是否成功
72
+ if (!result.success) {
73
+ process.exit(1);
74
+ }
75
+ }
76
+ catch (error) {
77
+ spinner.fail('解析失败');
78
+ console.error(chalk.red('\n错误:'), error.message);
79
+ if (error.stack && process.env.DEBUG) {
80
+ console.error(chalk.gray(error.stack));
81
+ }
82
+ process.exit(1);
83
+ }
84
+ }
85
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/commands/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAWxB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAqB;IAC9D,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;IAEtB,IAAI,CAAC;QACH,YAAY;QACZ,IAAI,MAAM,CAAC;QAEX,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,cAAc;YACd,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAE9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC;YAC3C,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE5B,gBAAgB;YAChB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBAE1D,OAAO;gBACP,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAChD,8BAA8B;oBAC9B,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,EACpD,CAAC,CAAC,CAAC,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,UAAU,IAAI,CAAC,CAAC,CAAC;gBAC7D,CAAC;gBAED,WAAW;gBACX,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACjD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,OAAO;YACT,CAAC;iBAAM,CAAC;gBACN,OAAO;gBACP,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;YAC7C,CAAC;QAEH,CAAC;aAAM,IAAI,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC1C,WAAW;YACX,MAAM,KAAK,GAAQ;gBACjB,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;YAEF,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;YACxC,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAClC,CAAC;YAED,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;QAEtC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,YAAY;gBACZ,wCAAwC;gBACxC,6EAA6E,CAC9E,CAAC;QACJ,CAAC;QAED,mBAAmB;QACnB,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAChD,8BAA8B;YAC9B,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAClE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,EACpD,CAAC,CAAC,CAAC,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,UAAU,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,YAAY;QACZ,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IAEH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * 解析 calldata 的输入接口
3
+ */
4
+ export interface ParseCalldataInput {
5
+ to: string;
6
+ calldata: string;
7
+ contractName?: string;
8
+ abiPath?: string;
9
+ abi?: any[];
10
+ }
11
+ /**
12
+ * 解析结果接口
13
+ */
14
+ export interface ParseCalldataResult {
15
+ success: boolean;
16
+ to: string;
17
+ contractName?: string;
18
+ functionName: string;
19
+ functionSignature: string;
20
+ selector: string;
21
+ args: Array<{
22
+ name: string;
23
+ type: string;
24
+ value: any;
25
+ formattedValue: string;
26
+ }>;
27
+ rawCalldata: string;
28
+ error?: string;
29
+ }
30
+ /**
31
+ * 解析 calldata
32
+ *
33
+ * 支持三种 ABI 来源方式:
34
+ * 1. 通过 contractName 从 artifacts 目录自动查找
35
+ * 2. 通过 abiPath 指定 ABI 文件路径
36
+ * 3. 通过 abi 参数直接提供 ABI 数组
37
+ *
38
+ * @param input - 解析输入参数
39
+ * @returns 解析结果
40
+ */
41
+ export declare function parseCalldata(input: ParseCalldataInput): Promise<ParseCalldataResult>;
42
+ /**
43
+ * 从 JSON 文件解析 calldata
44
+ */
45
+ export declare function parseCalldataFromFile(filePath: string): Promise<ParseCalldataResult>;
46
+ /**
47
+ * 批量解析多个 calldata
48
+ */
49
+ export declare function parseMultipleCalldata(inputs: ParseCalldataInput[]): Promise<ParseCalldataResult[]>;
50
+ //# sourceMappingURL=parseCalldata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseCalldata.d.ts","sourceRoot":"","sources":["../../src/core/parseCalldata.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,KAAK,CAAC;QACV,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,GAAG,CAAC;QACX,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsHD;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA0J3F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAW1F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA0BxG"}
@@ -0,0 +1,285 @@
1
+ import { ethers } from 'ethers';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import chalk from 'chalk';
5
+ /**
6
+ * 在 artifacts 目录中递归查找合约的 ABI
7
+ */
8
+ function findContractABI(contractName, searchDir = 'artifacts') {
9
+ const fullSearchDir = path.isAbsolute(searchDir) ? searchDir : path.join(process.cwd(), searchDir);
10
+ if (!fs.existsSync(fullSearchDir)) {
11
+ return null;
12
+ }
13
+ // 递归搜索函数
14
+ function searchRecursive(dir) {
15
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
16
+ for (const entry of entries) {
17
+ const fullPath = path.join(dir, entry.name);
18
+ if (entry.isDirectory()) {
19
+ // 跳过 build-info 目录
20
+ if (entry.name === 'build-info') {
21
+ continue;
22
+ }
23
+ const result = searchRecursive(fullPath);
24
+ if (result) {
25
+ return result;
26
+ }
27
+ }
28
+ else if (entry.isFile() && entry.name.endsWith('.json')) {
29
+ // 检查文件名是否匹配(不包括 .dbg.json 文件)
30
+ if (entry.name === `${contractName}.json`) {
31
+ try {
32
+ const content = JSON.parse(fs.readFileSync(fullPath, 'utf8'));
33
+ // 验证是否包含 ABI
34
+ if (content.abi && Array.isArray(content.abi)) {
35
+ console.log(chalk.gray(` ℹ️ 找到 ABI: ${fullPath}`));
36
+ return content.abi;
37
+ }
38
+ }
39
+ catch (error) {
40
+ // 忽略无效的 JSON 文件
41
+ }
42
+ }
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ return searchRecursive(fullSearchDir);
48
+ }
49
+ /**
50
+ * 从文件路径加载 ABI
51
+ */
52
+ function loadABIFromPath(abiPath) {
53
+ const fullPath = path.isAbsolute(abiPath) ? abiPath : path.join(process.cwd(), abiPath);
54
+ if (!fs.existsSync(fullPath)) {
55
+ throw new Error(`ABI 文件不存在: ${fullPath}`);
56
+ }
57
+ const content = JSON.parse(fs.readFileSync(fullPath, 'utf8'));
58
+ // 如果是 Hardhat artifacts 格式
59
+ if (content.abi && Array.isArray(content.abi)) {
60
+ return content.abi;
61
+ }
62
+ // 如果直接就是 ABI 数组
63
+ if (Array.isArray(content)) {
64
+ return content;
65
+ }
66
+ throw new Error(`无效的 ABI 文件格式: ${fullPath}`);
67
+ }
68
+ /**
69
+ * 格式化参数值以便显示
70
+ */
71
+ function formatValue(value, type) {
72
+ if (value === null || value === undefined) {
73
+ return 'null';
74
+ }
75
+ // 处理数组
76
+ if (Array.isArray(value)) {
77
+ return `[${value.map(v => formatValue(v, type.replace('[]', ''))).join(', ')}]`;
78
+ }
79
+ // 处理 BigInt
80
+ if (typeof value === 'bigint' || (value && value._isBigNumber)) {
81
+ return value.toString();
82
+ }
83
+ // 处理对象(元组/结构体)
84
+ if (typeof value === 'object') {
85
+ // 如果有 toJSON 方法,使用它
86
+ if (typeof value.toJSON === 'function') {
87
+ return JSON.stringify(value.toJSON(), null, 2);
88
+ }
89
+ return JSON.stringify(value, (_key, val) => typeof val === 'bigint' ? val.toString() : val, 2);
90
+ }
91
+ // 处理布尔值
92
+ if (typeof value === 'boolean') {
93
+ return value ? 'true' : 'false';
94
+ }
95
+ // 处理字符串(如果是地址,保持原样)
96
+ if (typeof value === 'string') {
97
+ return value;
98
+ }
99
+ return String(value);
100
+ }
101
+ /**
102
+ * 解析 calldata
103
+ *
104
+ * 支持三种 ABI 来源方式:
105
+ * 1. 通过 contractName 从 artifacts 目录自动查找
106
+ * 2. 通过 abiPath 指定 ABI 文件路径
107
+ * 3. 通过 abi 参数直接提供 ABI 数组
108
+ *
109
+ * @param input - 解析输入参数
110
+ * @returns 解析结果
111
+ */
112
+ export async function parseCalldata(input) {
113
+ console.log('\n🔍 开始解析 Calldata...');
114
+ console.log('=====================================\n');
115
+ try {
116
+ // 验证必需参数
117
+ if (!input.to || !input.calldata) {
118
+ throw new Error('缺少必需参数: to 和 calldata 是必需的');
119
+ }
120
+ // 验证 calldata 格式
121
+ if (!input.calldata.startsWith('0x')) {
122
+ throw new Error('calldata 必须以 0x 开头');
123
+ }
124
+ if (input.calldata.length < 10) {
125
+ throw new Error('calldata 太短,至少需要包含函数选择器(4 字节)');
126
+ }
127
+ console.log('📋 输入信息:');
128
+ console.log('-------------------------------------');
129
+ console.log('目标地址:', input.to);
130
+ if (input.contractName) {
131
+ console.log('合约名称:', input.contractName);
132
+ }
133
+ console.log('Calldata 长度:', input.calldata.length, '字符 (', (input.calldata.length - 2) / 2, '字节)');
134
+ console.log('函数选择器:', input.calldata.slice(0, 10));
135
+ console.log('');
136
+ // 获取 ABI
137
+ let abi = null;
138
+ let abiSource = '';
139
+ // 优先级:直接提供的 ABI > 指定路径 > 自动查找
140
+ if (input.abi && Array.isArray(input.abi)) {
141
+ console.log('📖 使用直接提供的 ABI...');
142
+ abi = input.abi;
143
+ abiSource = '直接提供';
144
+ }
145
+ else if (input.abiPath) {
146
+ console.log('📖 从指定路径加载 ABI...');
147
+ console.log(' 路径:', input.abiPath);
148
+ abi = loadABIFromPath(input.abiPath);
149
+ abiSource = input.abiPath;
150
+ }
151
+ else if (input.contractName) {
152
+ console.log('📖 从 artifacts 目录查找 ABI...');
153
+ console.log(' 合约名称:', input.contractName);
154
+ abi = findContractABI(input.contractName);
155
+ if (!abi) {
156
+ throw new Error(`未找到合约 "${input.contractName}" 的 ABI。`);
157
+ }
158
+ abiSource = 'artifacts 目录';
159
+ }
160
+ else {
161
+ throw new Error('缺少 ABI 来源。');
162
+ }
163
+ console.log(chalk.green(' ✅ ABI 加载成功'));
164
+ console.log('');
165
+ // 创建 Contract Interface
166
+ const iface = new ethers.Interface(abi);
167
+ // 解析 calldata
168
+ console.log('🔧 解析 Calldata...');
169
+ const txData = iface.parseTransaction({ data: input.calldata });
170
+ if (!txData) {
171
+ throw new Error('无法解析 calldata,函数签名可能不在提供的 ABI 中');
172
+ }
173
+ console.log(chalk.green(' ✅ 解析成功'));
174
+ console.log('');
175
+ // 提取函数信息
176
+ const functionFragment = txData.fragment;
177
+ const functionName = txData.name;
178
+ const functionSignature = txData.signature;
179
+ const selector = txData.selector;
180
+ const args = txData.args;
181
+ // 构建参数信息
182
+ const argsList = functionFragment.inputs.map((input, index) => ({
183
+ name: input.name || `arg${index}`,
184
+ type: input.type,
185
+ value: args[index],
186
+ formattedValue: formatValue(args[index], input.type)
187
+ }));
188
+ // 打印结果
189
+ console.log('=====================================');
190
+ console.log(chalk.bold.cyan('📋 解析结果'));
191
+ console.log('=====================================');
192
+ console.log('');
193
+ console.log(chalk.bold('基本信息:'));
194
+ console.log('-------------------------------------');
195
+ console.log('合约地址:', chalk.yellow(input.to));
196
+ if (input.contractName) {
197
+ console.log('合约名称:', chalk.yellow(input.contractName));
198
+ }
199
+ console.log('ABI 来源:', chalk.gray(abiSource));
200
+ console.log('');
201
+ console.log(chalk.bold('函数信息:'));
202
+ console.log('-------------------------------------');
203
+ console.log('函数名称:', chalk.green(functionName));
204
+ console.log('函数签名:', chalk.green(functionSignature));
205
+ console.log('函数选择器:', chalk.green(selector));
206
+ console.log('');
207
+ if (argsList.length > 0) {
208
+ console.log(chalk.bold('📝 参数列表:'));
209
+ console.log('-------------------------------------');
210
+ argsList.forEach((arg, index) => {
211
+ console.log(chalk.cyan(` [${index}] ${arg.name}`) + chalk.gray(` (${arg.type}):`));
212
+ console.log(' ' + chalk.white(arg.formattedValue));
213
+ });
214
+ }
215
+ else {
216
+ console.log(chalk.bold('📝 参数列表:'));
217
+ console.log('-------------------------------------');
218
+ console.log(chalk.gray(' (无参数)'));
219
+ }
220
+ console.log('');
221
+ console.log('=====================================\n');
222
+ return {
223
+ success: true,
224
+ to: input.to,
225
+ contractName: input.contractName,
226
+ functionName,
227
+ functionSignature,
228
+ selector,
229
+ args: argsList,
230
+ rawCalldata: input.calldata
231
+ };
232
+ }
233
+ catch (error) {
234
+ console.error(chalk.red('❌ 解析失败:'), error.message);
235
+ console.log('');
236
+ return {
237
+ success: false,
238
+ to: input.to,
239
+ contractName: input.contractName,
240
+ functionName: '',
241
+ functionSignature: '',
242
+ selector: input.calldata.slice(0, 10),
243
+ args: [],
244
+ rawCalldata: input.calldata,
245
+ error: error.message
246
+ };
247
+ }
248
+ }
249
+ /**
250
+ * 从 JSON 文件解析 calldata
251
+ */
252
+ export async function parseCalldataFromFile(filePath) {
253
+ const fullPath = path.isAbsolute(filePath) ? filePath : path.join(process.cwd(), filePath);
254
+ if (!fs.existsSync(fullPath)) {
255
+ throw new Error(`文件不存在: ${fullPath}`);
256
+ }
257
+ console.log(chalk.gray(`📂 读取输入文件: ${fullPath}`));
258
+ const input = JSON.parse(fs.readFileSync(fullPath, 'utf8'));
259
+ return parseCalldata(input);
260
+ }
261
+ /**
262
+ * 批量解析多个 calldata
263
+ */
264
+ export async function parseMultipleCalldata(inputs) {
265
+ console.log(chalk.bold.cyan(`\n🔄 批量解析 ${inputs.length} 个 Calldata\n`));
266
+ const results = [];
267
+ for (let i = 0; i < inputs.length; i++) {
268
+ console.log(chalk.bold(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`));
269
+ console.log(chalk.bold(`📦 [${i + 1}/${inputs.length}]`));
270
+ console.log(chalk.bold(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`));
271
+ const result = await parseCalldata(inputs[i]);
272
+ results.push(result);
273
+ }
274
+ // 打印汇总
275
+ const successCount = results.filter(r => r.success).length;
276
+ const failureCount = results.length - successCount;
277
+ console.log(chalk.bold.cyan('\n📊 批量解析完成'));
278
+ console.log('=====================================');
279
+ console.log('总数:', results.length);
280
+ console.log('成功:', chalk.green(successCount));
281
+ console.log('失败:', failureCount > 0 ? chalk.red(failureCount) : chalk.gray(failureCount));
282
+ console.log('=====================================\n');
283
+ return results;
284
+ }
285
+ //# sourceMappingURL=parseCalldata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseCalldata.js","sourceRoot":"","sources":["../../src/core/parseCalldata.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgFA,wBAAsB,GAAG,kBAOxB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoHA,wBAAsB,GAAG,kBAOxB"}
package/dist/index.js CHANGED
@@ -3,6 +3,8 @@ import chalk from 'chalk';
3
3
  import { checkBytecode } from './commands/check.js';
4
4
  import { syncUpgrade } from './commands/sync.js';
5
5
  import { validateUpgrade } from './commands/validate.js';
6
+ import { fixConfig } from './commands/fix.js';
7
+ import { parseCalldataCommand } from './commands/parse.js';
6
8
  import { readFileSync } from 'fs';
7
9
  import { fileURLToPath } from 'url';
8
10
  import { dirname, join } from 'path';
@@ -66,6 +68,40 @@ program
66
68
  process.exit(1);
67
69
  }
68
70
  });
71
+ // fix 命令
72
+ program
73
+ .command('fix')
74
+ .description('自动修复 Hardhat 配置文件的兼容性问题')
75
+ .option('--yes', '跳过确认,直接修复')
76
+ .option('--check', '仅检查问题,不执行修复')
77
+ .action(async (options) => {
78
+ try {
79
+ await fixConfig(options);
80
+ }
81
+ catch (error) {
82
+ console.error(chalk.red('\n❌ 执行失败:'), error.message);
83
+ process.exit(1);
84
+ }
85
+ });
86
+ // parse 命令
87
+ program
88
+ .command('parse')
89
+ .description('解析 calldata,显示函数名称和参数')
90
+ .option('-i, --input <path>', '输入 JSON 文件路径')
91
+ .option('--to <address>', '目标合约地址')
92
+ .option('--calldata <data>', 'calldata 十六进制数据')
93
+ .option('-c, --contract <name>', '合约名称(从 artifacts 查找 ABI)')
94
+ .option('--abi-path <path>', 'ABI 文件路径')
95
+ .option('-o, --output <path>', '输出 JSON 文件路径')
96
+ .action(async (options) => {
97
+ try {
98
+ await parseCalldataCommand(options);
99
+ }
100
+ catch (error) {
101
+ console.error(chalk.red('\n❌ 执行失败:'), error.message);
102
+ process.exit(1);
103
+ }
104
+ });
69
105
  // 显示帮助信息(无命令时)
70
106
  program.action(() => {
71
107
  program.outputHelp();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,wBAAwB;AACxB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;AAE1D,WAAW;AACX,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,SAAS,CAAC;KACtB,MAAM,CAAC,uBAAuB,EAAE,YAAY,CAAC;KAC7C,MAAM,CAAC,sBAAsB,EAAE,YAAY,CAAC;KAC5C,MAAM,CAAC,iBAAiB,EAAE,oCAAoC,CAAC;KAC/D,MAAM,CAAC,qBAAqB,EAAE,+CAA+C,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,UAAU;AACV,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,8BAA8B,CAAC;KAC3C,cAAc,CAAC,mBAAmB,EAAE,QAAQ,CAAC;KAC7C,cAAc,CAAC,mBAAmB,EAAE,MAAM,CAAC;KAC3C,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC;KACtC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,cAAc;AACd,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,uBAAuB,CAAC;KACpC,cAAc,CAAC,mBAAmB,EAAE,QAAQ,CAAC;KAC7C,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC;KACvC,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC;KACvC,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC;KACtC,MAAM,CAAC,qBAAqB,EAAE,qCAAqC,CAAC;KACpE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,SAAS;AACT,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC;KAC5B,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC;KAChC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,WAAW;AACX,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,oBAAoB,EAAE,cAAc,CAAC;KAC5C,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC;KAClC,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;KAC9C,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC;KAC3D,MAAM,CAAC,mBAAmB,EAAE,UAAU,CAAC;KACvC,MAAM,CAAC,qBAAqB,EAAE,cAAc,CAAC;KAC7C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,GAAG;IACvB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,gBAAgB;IAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,CAAC,UAAU,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 检测结果
3
+ */
4
+ interface DetectionResult {
5
+ hasIssues: boolean;
6
+ issues: Array<{
7
+ description: string;
8
+ category: string;
9
+ match: string;
10
+ }>;
11
+ }
12
+ /**
13
+ * 检测 hardhat.config.ts 中的问题
14
+ */
15
+ export declare function detectConfigIssues(configPath?: string): Promise<DetectionResult>;
16
+ /**
17
+ * 查找 hardhat 配置文件
18
+ */
19
+ export declare function findHardhatConfig(): string | null;
20
+ /**
21
+ * 自动修复配置文件问题
22
+ */
23
+ export declare function fixConfigIssues(configPath?: string, silent?: boolean): Promise<boolean>;
24
+ /**
25
+ * 检测并询问用户是否修复
26
+ */
27
+ export declare function detectAndFixWithPrompt(): Promise<boolean>;
28
+ /**
29
+ * 显示手动修复指南
30
+ */
31
+ export declare function showManualFixGuide(): void;
32
+ /**
33
+ * 检查是否是 hardhat config 导入错误
34
+ */
35
+ export declare function isHardhatConfigImportError(error: Error): boolean;
36
+ export {};
37
+ //# sourceMappingURL=configFixer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configFixer.d.ts","sourceRoot":"","sources":["../../src/utils/configFixer.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,UAAU,eAAe;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AA2DD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA2BtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAYjD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAuDpG;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAmD/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAkBzC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAchE"}
@@ -0,0 +1,235 @@
1
+ import fs from "fs-extra";
2
+ import path from "path";
3
+ import chalk from "chalk";
4
+ import prompts from "prompts";
5
+ /**
6
+ * 所有可检测和修复的配置问题
7
+ */
8
+ const CONFIG_ISSUES = [
9
+ {
10
+ pattern: /import\s+\{\s*HardhatUserConfig\s*\}\s+from\s+["']hardhat\/config["']/g,
11
+ fix: () => 'import type { HardhatUserConfig } from "hardhat/config"',
12
+ description: "HardhatUserConfig 应使用 type 导入",
13
+ category: "import"
14
+ },
15
+ {
16
+ pattern: /import\s+\{\s*([^}]+)\s*\}\s+from\s+["']hardhat\/types["']/g,
17
+ fix: (match) => {
18
+ // 提取导入的内容
19
+ const importsMatch = match.match(/\{\s*([^}]+)\s*\}/);
20
+ if (!importsMatch)
21
+ return match;
22
+ return `import type { ${importsMatch[1]} } from "hardhat/types"`;
23
+ },
24
+ description: "hardhat/types 导入需要使用 type 关键字",
25
+ category: "import"
26
+ },
27
+ {
28
+ pattern: /import\s+\{\s*([^}]*HardhatUserConfig[^}]*)\s*\}\s+from\s+["']hardhat\/config["']/g,
29
+ fix: (match) => {
30
+ // 提取导入列表
31
+ const importsMatch = match.match(/\{\s*([^}]+)\s*\}/);
32
+ if (!importsMatch)
33
+ return match;
34
+ const imports = importsMatch[1].split(',').map(s => s.trim());
35
+ const typeImports = [];
36
+ const valueImports = [];
37
+ imports.forEach(imp => {
38
+ // 如果包含 Config 或者是类型相关的,归类为 type import
39
+ if (imp.includes('Config') || imp.includes('Type')) {
40
+ typeImports.push(imp);
41
+ }
42
+ else {
43
+ valueImports.push(imp);
44
+ }
45
+ });
46
+ let result = '';
47
+ if (typeImports.length > 0) {
48
+ result += `import type { ${typeImports.join(', ')} } from "hardhat/config"`;
49
+ }
50
+ if (valueImports.length > 0) {
51
+ if (result)
52
+ result += '\n';
53
+ result += `import { ${valueImports.join(', ')} } from "hardhat/config.js"`;
54
+ }
55
+ return result || match;
56
+ },
57
+ description: "混合导入应分离为 type 导入和值导入",
58
+ category: "import"
59
+ }
60
+ ];
61
+ /**
62
+ * 检测 hardhat.config.ts 中的问题
63
+ */
64
+ export async function detectConfigIssues(configPath) {
65
+ const actualPath = configPath || findHardhatConfig();
66
+ if (!actualPath || !await fs.pathExists(actualPath)) {
67
+ return { hasIssues: false, issues: [] };
68
+ }
69
+ const content = await fs.readFile(actualPath, "utf-8");
70
+ const foundIssues = [];
71
+ for (const issue of CONFIG_ISSUES) {
72
+ const matches = content.match(issue.pattern);
73
+ if (matches && matches.length > 0) {
74
+ matches.forEach(match => {
75
+ foundIssues.push({
76
+ description: issue.description,
77
+ category: issue.category,
78
+ match
79
+ });
80
+ });
81
+ }
82
+ }
83
+ return {
84
+ hasIssues: foundIssues.length > 0,
85
+ issues: foundIssues
86
+ };
87
+ }
88
+ /**
89
+ * 查找 hardhat 配置文件
90
+ */
91
+ export function findHardhatConfig() {
92
+ const cwd = process.cwd();
93
+ const tsConfig = path.join(cwd, 'hardhat.config.ts');
94
+ const jsConfig = path.join(cwd, 'hardhat.config.js');
95
+ if (fs.existsSync(tsConfig)) {
96
+ return tsConfig;
97
+ }
98
+ else if (fs.existsSync(jsConfig)) {
99
+ return jsConfig;
100
+ }
101
+ return null;
102
+ }
103
+ /**
104
+ * 自动修复配置文件问题
105
+ */
106
+ export async function fixConfigIssues(configPath, silent = false) {
107
+ const actualPath = configPath || findHardhatConfig();
108
+ if (!actualPath) {
109
+ if (!silent) {
110
+ console.log(chalk.yellow("\n⚠️ 未找到 hardhat.config.ts 或 hardhat.config.js"));
111
+ }
112
+ return false;
113
+ }
114
+ const content = await fs.readFile(actualPath, "utf-8");
115
+ let fixedContent = content;
116
+ let fixCount = 0;
117
+ // 应用所有修复规则
118
+ for (const issue of CONFIG_ISSUES) {
119
+ const matches = fixedContent.match(issue.pattern);
120
+ if (matches && matches.length > 0) {
121
+ fixedContent = fixedContent.replace(issue.pattern, (match) => {
122
+ fixCount++;
123
+ return issue.fix(match);
124
+ });
125
+ }
126
+ }
127
+ if (fixCount === 0) {
128
+ if (!silent) {
129
+ console.log(chalk.blue("\nℹ️ 配置文件无需修复"));
130
+ }
131
+ return true;
132
+ }
133
+ // 备份原文件
134
+ const backupPath = actualPath + '.backup';
135
+ await fs.copy(actualPath, backupPath);
136
+ try {
137
+ await fs.writeFile(actualPath, fixedContent, "utf-8");
138
+ if (!silent) {
139
+ console.log(chalk.green(`\n✅ 已自动修复 ${fixCount} 个问题`));
140
+ console.log(chalk.gray(` 原文件已备份至: ${path.basename(backupPath)}`));
141
+ }
142
+ return true;
143
+ }
144
+ catch (error) {
145
+ // 修复失败,恢复备份
146
+ await fs.copy(backupPath, actualPath);
147
+ await fs.remove(backupPath);
148
+ if (!silent) {
149
+ console.error(chalk.red("❌ 修复失败,已恢复原文件"));
150
+ }
151
+ return false;
152
+ }
153
+ }
154
+ /**
155
+ * 检测并询问用户是否修复
156
+ */
157
+ export async function detectAndFixWithPrompt() {
158
+ const configPath = findHardhatConfig();
159
+ if (!configPath) {
160
+ console.log(chalk.yellow("\n⚠️ 未找到 hardhat.config.ts 或 hardhat.config.js"));
161
+ return false;
162
+ }
163
+ const detection = await detectConfigIssues(configPath);
164
+ if (!detection.hasIssues) {
165
+ console.log(chalk.blue("\nℹ️ 配置文件检查通过,无需修复"));
166
+ return true;
167
+ }
168
+ // 显示发现的问题
169
+ console.log(chalk.yellow(`\n⚠️ 在 ${path.basename(configPath)} 中检测到 ${detection.issues.length} 个问题:\n`));
170
+ // 按类别分组显示
171
+ const issuesByCategory = detection.issues.reduce((acc, issue) => {
172
+ if (!acc[issue.category])
173
+ acc[issue.category] = [];
174
+ acc[issue.category].push(issue);
175
+ return acc;
176
+ }, {});
177
+ let index = 1;
178
+ for (const [category, issues] of Object.entries(issuesByCategory)) {
179
+ console.log(chalk.cyan(` ${category.toUpperCase()} 问题:`));
180
+ for (const issue of issues) {
181
+ console.log(chalk.yellow(` ${index}. ${issue.description}`));
182
+ console.log(chalk.gray(` ${issue.match.substring(0, 60)}${issue.match.length > 60 ? '...' : ''}`));
183
+ index++;
184
+ }
185
+ console.log();
186
+ }
187
+ // 询问是否修复
188
+ const { shouldFix } = await prompts({
189
+ type: "confirm",
190
+ name: "shouldFix",
191
+ message: "是否自动修复这些问题?",
192
+ initial: true
193
+ });
194
+ if (!shouldFix) {
195
+ console.log(chalk.blue("\n💡 您可以手动修复,或稍后运行 'npx gate-tool fix'\n"));
196
+ return false;
197
+ }
198
+ // 执行修复
199
+ return await fixConfigIssues(configPath);
200
+ }
201
+ /**
202
+ * 显示手动修复指南
203
+ */
204
+ export function showManualFixGuide() {
205
+ console.log(chalk.cyan('\n💡 手动修复指南:\n'));
206
+ console.log(chalk.white('问题:hardhat.config.ts 中的导入语句与当前环境不兼容\n'));
207
+ console.log(chalk.yellow('方案 1:使用 type 导入(推荐)'));
208
+ console.log(chalk.gray(' 将 hardhat.config.ts 中的:'));
209
+ console.log(chalk.red(' import { HardhatUserConfig } from "hardhat/config"'));
210
+ console.log(chalk.gray(' 改为:'));
211
+ console.log(chalk.green(' import type { HardhatUserConfig } from "hardhat/config"\n'));
212
+ console.log(chalk.yellow('方案 2:使用 CommonJS'));
213
+ console.log(chalk.gray(' 将 hardhat.config.ts 重命名为 hardhat.config.js'));
214
+ console.log(chalk.gray(' 并使用 require 语法:'));
215
+ console.log(chalk.green(' const { task } = require("hardhat/config");\n'));
216
+ console.log(chalk.yellow('方案 3:运行自动修复'));
217
+ console.log(chalk.green(' npx gate-tool fix\n'));
218
+ }
219
+ /**
220
+ * 检查是否是 hardhat config 导入错误
221
+ */
222
+ export function isHardhatConfigImportError(error) {
223
+ const message = error.message || '';
224
+ return ((message.includes('Cannot find module') &&
225
+ message.includes('hardhat/config') &&
226
+ (message.includes('Did you mean') || message.includes('.js')))
227
+ ||
228
+ (message.includes('Directory import') &&
229
+ message.includes('hardhat/types') &&
230
+ message.includes('is not supported'))
231
+ ||
232
+ (message.includes('ERR_UNSUPPORTED_DIR_IMPORT') &&
233
+ message.includes('hardhat')));
234
+ }
235
+ //# sourceMappingURL=configFixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configFixer.js","sourceRoot":"","sources":["../../src/utils/configFixer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "gate-evm-tools",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Gate 智能合约工具集 - 字节码检查、合约升级验证、合约状态同步",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "gate-tool": "./bin/cli.js"
8
- },
8
+ },
9
9
  "files": [
10
10
  "bin/",
11
11
  "dist/",
@@ -49,10 +49,10 @@
49
49
  "typescript": "^5.9.3"
50
50
  },
51
51
  "peerDependencies": {
52
- "@openzeppelin/hardhat-upgrades": "^2.5.0",
53
- "@openzeppelin/upgrades-core": "^1.0.0",
54
- "ethers": "^6.0.0",
55
- "hardhat": "^2.26.3"
52
+ "@openzeppelin/hardhat-upgrades": ">=2.0.0 <4.0.0",
53
+ "@openzeppelin/upgrades-core": ">=1.0.0 <2.0.0",
54
+ "ethers": ">=6.0.0 <7.0.0",
55
+ "hardhat": ">=2.0.0 <3.0.0"
56
56
  },
57
57
  "engines": {
58
58
  "node": ">=18.0.0"