1

03 Foundry workflow

2

The tools

3

Project layout

foundry.toml   # solc 0.8.24, evm_version = "cancun" for XDC mainnet
src/           # contracts
test/          # *.t.sol, contracts that inherit forge-std Test
script/        # *.s.sol deploy scripts
4

Tests in Solidity

function test_RevertWhen_Full() public {
    vm.prank(alice); seats.book();
    vm.prank(bob);   seats.book();
    vm.expectRevert(WorkshopSeats.Full.selector);
    seats.book();
}
function testFuzz_NeverOverbooked(uint8 n) public { ... }

Cheatcodes: vm.prank, vm.warp, vm.expectRevert, makeAddr, vm.createSelectFork

5

Local deploy loop

anvil --port 18513
forge script script/Deploy.s.sol --rpc-url http://127.0.0.1:18513 \
  --broadcast --private-key <anvil test account #0>
cast call <addr> "seatsLeft()(uint256)" --rpc-url http://127.0.0.1:18513

Same commands target XDC/Apothem by changing --rpc-url (not in this workshop).

6

Habits

→ Lab 1

All workshop material