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 区块链, 不变式测试, 二进制发布, 区块链安全, 合约审计, 回归测试, 属性测试, 开源工具, 数据可视化, 智能合约安全, 智能合约漏洞, 种子测试, 自动化攻击