| 组件 | 状态 | 备注 |
|---|---|---|
| Rust Signer 骨架 | ✅ 完成 | 代码 + 文档 + 安全配置 |
| Node.js DVT 集成 | ✅ 完成 | signDerivedHash() 改造完毕 |
| 单元测试 | ✅ 145/145 通过 | 包括降级模式 |
| 集成测试 | 🔄 本文档 | 本地运行验证 |
前置条件:Rust signer 未启动
步骤:
npm run start:dev
# 日志应显示: "Rust signer unavailable (fetch failed), falling back to Node.js local signing"验证:
# 在另一个终端测试签名端点
curl -X POST http://localhost:4001/signature/sign \
-H "Content-Type: application/json" \
-d '{
"userOp": {...}, # 完整 UserOperation
"ownerAuth": "0x..."
}'
# 应返回有效签名(使用 Node.js @noble/curves)预期结果:✅ 签名成功,日志显示降级
前置条件:编译 Rust signer
步骤 1: 编译 Rust signer
cd signer
cargo build --release
# 输出: target/release/aastar-bls-signer (~20MB)步骤 2: 启动 Rust signer
# 终端 1
cd signer
./target/release/aastar-bls-signer
# 日志: "🔒 BLS Signer starting on 127.0.0.1:5001 (LOCAL ONLY)"步骤 3: 验证 Rust signer 在线
curl http://127.0.0.1:5001/health
# 应返回: OK步骤 4: 启动 Node.js DVT
# 终端 2
npm run start:dev
# 日志应显示: "Signed via Rust signer: node_test" (✓ 调用成功)步骤 5: 测试签名端点
curl -X POST http://localhost:4001/signature/sign \
-H "Content-Type: application/json" \
-d '{
"userOp": {...},
"ownerAuth": "0x..."
}'
# 日志应显示:
# "Signed via Rust signer: node_test"
# 应返回有效签名(来自 Rust)预期结果:
- ✅ Rust signer HTTP 200
- ✅ DVT 日志显示 "Signed via Rust signer"
- ✅ 签名有效且与 Node.js 模式兼容
模拟 Rust signer 崩溃
步骤:
# 终端 1 正在运行 Rust signer
# 在终端 1 按 Ctrl+C 杀死它
# 终端 2 的 Node.js DVT 仍在运行,发送请求
curl -X POST http://localhost:4001/signature/sign ...
# DVT 日志应显示:
# "Rust signer unavailable (fetch failed), falling back to Node.js local signing"预期结果:
- ✅ DVT 自动降级
- ✅ 签名仍然成功(用 Node.js)
- ✅ 用户无感知故障
验证 Rust 签名和 Node.js 签名在链上行为一致
步骤:
# 1. 用 Node.js 签名
npm run build
PORT=4001 node dist/main.js
# 2. 调用 /signature/sign,保存 signature_nodejs
# 3. 启动 Rust signer,用 Hybrid 模式再签一次
./signer/target/release/aastar-bls-signer
npm run start:dev
PORT=4001 npm run start:dev
# 4. 调用 /signature/sign,保存 signature_rust
# 5. 验证两个签名都能通过 EntryPoint 验证
# (或用 /signature/verify 验证)预期结果:
- ✅ 两个签名格式相同(EIP-2537)
- ✅ 都通过链上验证
- ✅ 输出格式 100% 兼容
# Node.js 模式
ab -n 100 -c 1 -p payload.json http://localhost:4001/signature/sign
# Hybrid 模式
ab -n 100 -c 1 -p payload.json http://localhost:4001/signature/sign预期结果(单核 ARM A55):
| 模式 | 平均响应时间 | Min | Max | 吞吐 (req/sec) |
|---|---|---|---|---|
| Node.js | ~200ms | 150ms | 300ms | 5 |
| Hybrid | ~130ms | 100ms | 200ms | 7.5 |
| 改进 | -35% | - | - | +50% |
# 检查 Rust signer 是否运行
lsof -ti :5001
# 重启 Rust signer
cd signer
./target/release/aastar-bls-signer# 检查 node_state.json 存在
ls deploy/node1/node_state.json
# 检查 JSON 有效性
cat deploy/node1/node_state.json | jq .# 对比两种模式的签名输出
# Node.js 模式日志: "Using local Node.js signing"
# Hybrid 模式日志: "Signed via Rust signer"
# 两个签名应该相同(hash 输入相同)
# 如果不同,检查:
# 1. userOpHash 是否一致
# 2. node_id 是否一致
# 3. 私钥是否一致- 在 i.MX93 实机运行 Hybrid 模式
- 验证内存占用(预期 ~180MB 总计)
- 验证性能(预期 ~90ms/签名)
- 运行 24h 压力测试
- 合并 PR(feat/rust-signer → main)
- 发布 v1.8.0 (Hybrid 生产版)
- 📖 Hybrid 架构
- 📖 Rust Signer README
- 🔗 提交历史