测试
Parano1d 使用三层测试:crate 级不变量、跨 crate 发布测试,以及从全新数据目录启动真实进程的 端到端测试场景。
快速检查
针对性修改前运行:
cargo fmt --all -- --check
cargo check --locked --workspace --all-targets
cargo test --locked -p CHANGED_CRATE
协议代码还应包含直接依赖者。交易改动通常至少需要:
cargo test --locked \
-p noid_tx \
-p noid_chain \
-p noid_mempool \
-p noid_miner \
-p noid_rpc \
-p noid_node
证明内核
生产用证明内核的测试应使用 release 模式:
cargo test --locked --release \
-p noid_core \
-p noid_poseidon2b \
-p noid-ivc-core
x86-64 上强制测试发布版最低后端:
NOID_CPU_BACKEND=pclmul \
cargo test --locked --release \
-p noid_core -p noid_poseidon2b -p noid-ivc-core
标量后端只用于差分检查:
NOID_CPU_BACKEND=scalar \
cargo test --locked --release \
-p noid_core -p noid_poseidon2b
发布门禁
scripts/build_release.sh 会认证规范矩阵包、将其嵌入、运行原生发布测试,
并执行以下冒烟测试:
- 硬件预检;
- 节点帮助和启动边界;
- CLI;
- 外部矿工;
- 已打包 GUI 自检。
调试版二进制文件或没有矩阵包的开发节点不能算作区块生产测试。
真实进程测试场景
真实进程测试脚本会在 target/live-tests 下创建全新数据目录,并运行真实进程、
RPC、P2P、MDBX 和生产用证明路径。
| 场景 | 覆盖范围 |
|---|---|
live_single_transaction_scenario.py |
钱包 → 内存池 → 矿工 → 规范区块 |
live_multi_transaction_mempool_scenario.py |
三笔互不冲突的交易意图与中继 |
live_large_mempool_single_miner_scenario.py |
由 B64 区块清空 128 笔交易意图 |
live_large_mempool_two_miners_scenario.py |
矿工竞争下的大型内存池 |
live_two_miner_fork_reorg_scenario.py |
竞争子区块与浅层重组 |
live_connected_miner_restart_sync_scenario.py |
矿工重启与过期父区块防护 |
live_mining_peer_gate_scenario.py |
普通对等节点数量要求 |
live_sync_scenarios.py |
全新、5 区块和 19 区块同步边界 |
live_incremental_snapshot_scenario.py |
完整与增量快照发布 |
live_sync_announced_tip_scenario.py |
以宣布链尖为上界的追赶同步 |
live_state_restart_scenario.py |
紧凑 Live State 重启和首个新区块 |
live_state_slot_lifecycle_scenario.py |
Live State 槽位清除、复用、密度与重启 |
live_receipt_lifecycle_scenario.py |
收据保存、篡改、重启与区块体裁剪后验证 |
live_wallet_active_address_scenario.py |
生成、注资、激活并持久化活动地址 |
live_wallet_mining_payout_switch_scenario.py |
原子切换奖励地址 |
live_wallet_receive_online_scenario.py |
在线接收者增量更新 |
live_wallet_receive_offline_shallow_scenario.py |
通过保留区块恢复离线接收者 |
live_wallet_receive_offline_snapshot_scenario.py |
通过快照同步恢复离线接收者 |
live_slot_mempool_wallet_scenarios.py |
带盐值的槽位提示、多节点发送与收敛 |
live_p2p_identity_handshake_scenario.py |
持久对等节点 ID 与双向握手 |
live_p2p_fan_in_scenario.py |
并发入站握手负载 |
live_p2p_inbound_sybil_scenario.py |
每 IP 入站限制 |
live_p2p_outbound_diversity_scenario.py |
出站网络组多样性 |
live_p2p_mesh_block_scenario.py |
超出首选网格的区块中继 |
每个脚本开头都说明环境参数和二进制要求。从仓库根目录运行:
python3 scripts/live_two_miner_fork_reorg_scenario.py
边界改动
涉及最终性、周期或 State 扩展边界的修改,需要显式边界测试向量,不能只依赖长时间运行的 正常路径测试。应覆盖:
- 交易锚点高度 143、144、145;
- 17 和 18 区块分叉深度;
- 18 和 19 区块同步差距;
- 占用率 9/9 和 10/8 的已达最终性扩展窗口;
- 使用完整 36 区块头扩展回看窗口的重启;
- 奖励分配边界和最终分配高度;
- 从一个
log_slots层级扩展到下一个。
测试应使用隔离数据目录。并发运行时可以使用不同端口,但不得修改测试样例 或生产数据。