重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
solidity-testing by 0xlayerghost/solidity-agent-kit
npx skills add https://github.com/0xlayerghost/solidity-agent-kit --skill solidity-testingMyToken.sol → MyToken.t.soltest/ 目录下test_<功能>_<场景>,预期回退的测试使用 testFail_<功能>_<场景>
test_transfer_revertsWhenInsufficientBalancetest_stake_updatesBalanceCorrectly广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
setUp() 处理共享状态,测试之间无依赖--match-test 和 --match-contract 进行针对性运行每个核心函数都必须有测试覆盖以下方面:
| 场景 | 需要验证的内容 |
|---|---|
| 正常路径 | 标准输入 → 预期输出,正确的状态变更 |
| 权限检查 | 未授权调用者 → 使用正确的错误信息进行 vm.expectRevert |
| 边界条件 | 零值、最大值(type(uint256).max)、差一错误 |
| 失败场景 | 每个 require / revert / 自定义错误路径 |
| 状态变更 | 存储更新、余额变更、事件发射(vm.expectEmit) |
| 边缘情况 | 空数组、重复调用、自我转账 |
| 作弊码 | 用途 |
|---|---|
vm.prank(addr) | 下一次调用来自 addr |
vm.startPrank(addr) | 所有调用来自 addr,直到 vm.stopPrank() |
vm.warp(timestamp) | 设置 block.timestamp |
vm.roll(blockNum) | 设置 block.number |
vm.deal(addr, amount) | 设置 ETH 余额 |
vm.expectRevert(error) | 下一次调用必须回退并抛出特定错误 |
vm.expectEmit(true,true,false,true) | 验证事件发射(主题检查) |
vm.record() / vm.accesses() | 跟踪存储读写 |
makeAddr("name") | 创建带标签的地址,便于跟踪阅读 |
function testFuzz_<名称>(uint256 amount) publicvm.assume() 约束输入:vm.assume(amount > 0 && amount < MAX_SUPPLY);forge test --fuzz-runs 10000# 运行所有测试
forge test
# 运行特定测试函数
forge test --match-test test_transfer
# 运行特定测试合约
forge test --match-contract MyTokenTest
# 详细输出,包含完整跟踪
forge test -vvvv
# 生成 Gas 报告
forge test --gas-report
# 增加运行次数的模糊测试
forge test --fuzz-runs 10000
# 测试覆盖率
forge coverage
# 生成覆盖率报告
forge coverage --report lcov
每周安装次数
36
代码仓库
GitHub 星标数
1
首次出现
2026年2月9日
安全审计
已安装于
claude-code28
opencode22
gemini-cli22
codex22
cursor21
github-copilot19
MyToken.sol → MyToken.t.soltest/ directorytest_<feature>_<scenario> for passing tests, testFail_<feature>_<scenario> for expected reverts
test_transfer_revertsWhenInsufficientBalancetest_stake_updatesBalanceCorrectlysetUp() for shared state, no cross-test dependencies--match-test and --match-contract for targeted runsEvery core function must have tests covering:
| Scenario | What to verify |
|---|---|
| Happy path | Standard input → expected output, correct state changes |
| Permission checks | Unauthorized caller → vm.expectRevert with correct error |
| Boundary conditions | Zero values, max values (type(uint256).max), off-by-one |
| Failure scenarios | Every require / revert / custom error path |
| State changes | Storage updates, balance changes, event emissions (vm.expectEmit) |
| Edge cases | Empty arrays, duplicate calls, self-transfers |
| Cheatcode | Usage |
|---|---|
vm.prank(addr) | Next call from addr |
vm.startPrank(addr) | All calls from addr until vm.stopPrank() |
vm.warp(timestamp) | Set block.timestamp |
vm.roll(blockNum) |
function testFuzz_<name>(uint256 amount) publicvm.assume() to constrain inputs: vm.assume(amount > 0 && amount < MAX_SUPPLY);forge test --fuzz-runs 10000# Run all tests
forge test
# Run specific test function
forge test --match-test test_transfer
# Run specific test contract
forge test --match-contract MyTokenTest
# Verbose output with full trace
forge test -vvvv
# Gas report
forge test --gas-report
# Fuzz with more runs
forge test --fuzz-runs 10000
# Test coverage
forge coverage
# Coverage with report
forge coverage --report lcov
Weekly Installs
36
Repository
GitHub Stars
1
First Seen
Feb 9, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
claude-code28
opencode22
gemini-cli22
codex22
cursor21
github-copilot19
Grimoire Polymarket 技能:Polymarket 市场发现、CLOB 数据与订单管理 CLI 工具
11,400 周安装
Set block.number |
vm.deal(addr, amount) | Set ETH balance |
vm.expectRevert(error) | Next call must revert with specific error |
vm.expectEmit(true,true,false,true) | Verify event emission (topic checks) |
vm.record() / vm.accesses() | Track storage reads/writes |
makeAddr("name") | Create labeled address for readable traces |