OverviewHistoryStatsSecurity
npx skills add ...
Documentation
SKILL.md
npx skills add 0xlayerghost/solidity-agent-kit --skill solidity-testing
[AUTO-INVOKE] MUST be invoked BEFORE writing or modifying any test files (*.t.sol). Covers test structure, naming conventions, coverage requirements, fuzz testing, and Foundry cheatcodes. Trigger: any task involving creating, editing, or running Solidity tests.
npx skills add 0xlayerghost/solidity-agent-kit --skill solidity-testing
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) | 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 |
function testFuzz_<name>(uint256 amount) publicvm.assume() to constrain inputs: vm.assume(amount > 0 && amount < MAX_SUPPLY);forge test --fuzz-runs 10000