SuperAPI AI 工具集

bitcoin-testing-fuzz

测试与质量

查看项目

更新于 10-16 04:58

技能介绍

用途:对解析不可信数据的比特币代码做模糊测试,通过随机输入观察崩溃或断言失败,主要面向交易、脚本、P2P 消息等解析器。\n\n主要能力:覆盖 Bitcoin Core 的 fuzz harness(位于 src/test/fuzz/,每个 .cpp 为一个 harness),可用目标包括 tx_in、tx_out、script、descriptor_parse、miniscript_string、psbt、addrman、block_header、process_message 等;也支持 rust-bitcoin/BDK 的 cargo-fuzz 及 secp256k1 原生 libFuzzer。\n\n使用方式:Bitcoin Core 29.0 起改用 CMake(最低 3.22),./autogen.sh 与 ./configure 已移除,驱动由 src/test/fuzz/fuzz 移至 build_fuzz/bin/fuzz。构建:cmake --preset=libfuzzer;cmake --build build_fuzz。运行:FUZZ=tx_in build_fuzz/bin/fuzz <corpus_dir>;FUZZ=script build_fuzz/bin/fuzz <corpus_dir>。--preset=libfuzzer-nosan 生成不带 sanitizer 的 build_fuzz_nosan,吞吐更高,适合长时间覆盖搜索。AFL++/Honggfuzz 需用 -DBUILD_FOR_FUZZING=ON 及对应编译器包装器(afl-clang-lto++、hfuzz-clang++)。rust-bitcoin/BDK 用 cargo +nightly fuzz run script_decode。build_fuzz/test/fuzz/test_runner.py 可执行全部 harness。\n\n语料库:种子语料为覆盖边界的合法样例,崩溃语料作为回归保留;Bitcoin Core 公共语料在 bitcoin-core/qa-assets,每 harness 一个目录,字典在 fuzz_dicts/。\n\n适用场景:生产前加固解析器、Bitcoin Core 共识代码 PR 预合并检查、库审计(如新 BIP 实现)。\n\n限制与注意:种子语料过窄会降低新分支发现;全局变量与缓存可能影响测试隔离;sanitizer 会拖慢速度,需在速度与检测间权衡。缺失事实:具体缺陷细节、持续 fuzz 农场配置等暂未提供。