stacks-network/rendezvous

GitHub: stacks-network/rendezvous

一款基于 Clarity 的模糊测试工具,通过属性测试与不变量检验帮助开发者精准发现智能合约漏洞。

Stars: 17 | Forks: 10

## Rendezvous `rv`:清晰度模糊测试器 Rendezvous `rv` 是一款清晰度模糊测试器,旨在精准突破您的智能合约防御。以无与伦比的力量和强度发现漏洞。准备好直面您合约的漏洞吧。 ### 先决条件 - **Node.js**:支持的版本包括 20、22 和 24。其他版本可能可用,但未经过测试。 ### 灵感来源 `rv` 模糊测试器受到 John Hughes 论文《Testing the Hard Stuff and Staying Sane》[^1] 的启发,利用 Clarity 不变量和测试确保合约健壮性。 ### 示例目录结构 ``` root ├── Clarinet.toml ├── contracts │ └── contract.clar └── settings └── Devnet.toml ``` ### 安装 ``` npm install @stacks/rendezvous ``` ### 用法 ``` npx rv ``` ### 配置 **位置参数:** - `path-to-clarinet-project` - Clarinet 项目的根目录路径(包含 Clarinet.toml)。 - `contract-name` - 要测试的合约名称,依据 Clarinet.toml。 - `type` - 要运行的测试类型。选项包括: - `test` - 运行基于属性的测试。 - `invariant` - 运行不变量测试。 **选项:** - `--seed` – 用于回放功能的种子。 - `--runs` – 用于执行合约的测试迭代次数。 (默认值:`100`) - `--regr` – 仅运行回归测试(重放保存的失败)。 - `--bail` – 在首次失败后停止。 - `--dial` – 包含自定义预执行和 后执行函数(拨号器)的 JavaScript 文件路径。 ### 示例(`test`) 以下是一个测试示例,用于检查对列表进行两次反转是否返回原始列表: ``` (define-public (test-reverse-list (seq (list 127 uint))) (begin (asserts! (is-eq seq (reverse-uint (reverse-uint seq))) (err u999)) (ok true))) ``` 您可以使用以下命令运行 `rv` 的基于属性测试: ``` rv example reverse test ``` ### 示例(`invariant`) 以下是一个用于检测示例计数器合约中错误的 Clarity 不变量: ``` (define-read-only (invariant-counter-gt-zero) (let ((increment-num-calls (default-to u0 (get called (map-get? context "increment")))) (decrement-num-calls (default-to u0 (get called (map-get? context "decrement"))))) (if (> increment-num-calls decrement-num-calls) (> (var-get counter) u0) true))) ``` 您可以使用以下命令运行 `rv` 的不变量测试: ``` rv example counter invariant ``` ### 文档 完整文档请参阅官方 [Rendezvous 手册](https://stacks-network.github.io/rendezvous/)。 [^1]: Hughes, J. (2004). _Testing the Hard Stuff and Staying Sane_. In Proceedings of the ACM SIGPLAN Workshop on Haskell (Haskell '04).
标签:Clarity, GNU通用公共许可证, JavaScript 插件, MITM代理, Node.js, npm, Stacks 区块链, 不变式测试, 二进制发布, 区块链安全, 合约审计, 回归测试, 属性测试, 开源工具, 数据可视化, 智能合约安全, 智能合约漏洞, 种子测试, 自动化攻击