# 05 — Hands-on lab: Modifiers, custom errors and events

## Chuẩn bị
- Foundry (forge, cast, anvil); Solidity 0.8.24
- Chạy hoàn toàn local, không dùng mainnet funds

## Thực hiện
1. Đọc `theory.md` và `solution/src/Lab.sol`, xác định state, invariants và external calls.
2. Tự triển khai `starter/src/Lab.sol` trước khi xem solution.
3. Viết các test trong `starter/test/Lab.t.sol`.
4. `cd solution && forge build && forge test -vvv`
5. `forge test --gas-report` để quan sát chi phí.
6. `forge test -vvvv` nếu test fail, đọc call trace và revert reason.

## Các test trong reference
- `testOwner`
- `testUnauthorized`
- `testOperator`
- `testPause`
- `testUnapprovedCannotExecute`

## Expected output
`forge build` thành công, tất cả các test trên PASS. Đây là kết quả **dự kiến**, chưa được xác minh trong môi trường đóng gói vì không có forge/solc.

## Troubleshooting
- `forge: command not found`: cài Foundry chính thức.
- Compiler download error: kiểm tra network và solc_version.
- Assertion failure: chạy `forge test -vvvv` để xem trace.
