Forking Mainnet untuk Testing (vm.createFork)
Penjelasan
Forking memungkinkan Foundry membuat salinan state blockchain nyata (misal mainnet Ethereum) pada block tertentu, lalu menjalankan test di atas state itu secara lokal tanpa mengubah data asli. Ini sangat berguna untuk menguji integrasi dengan protokol yang sudah live, misal berinteraksi dengan Uniswap atau token USDC sungguhan tanpa perlu deploy ulang semuanya. Cheatcode `vm.createFork(url)` membuat fork baru dan mengembalikan fork ID, sementara `vm.selectFork(forkId)` mengaktifkannya. Alternatifnya, `forge test --fork-url <rpc>` langsung menjalankan seluruh suite test di atas fork tanpa perlu cheatcode manual.
Contoh Konsep
function testInteractionWithRealUSDC() public {
// Buat fork mainnet dari RPC URL, lalu aktifkan
uint256 forkId = vm.createFork("https://eth-mainnet.g.alchemy.com/v2/API_KEY");
vm.selectFork(forkId);
IERC20 usdc = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
uint256 totalSupply = usdc.totalSupply();
assertGt(totalSupply, 0);
}
Praktikum
Tulis test yang mem-fork mainnet dan mengecek bahwa saldo sebuah whale address token tertentu lebih besar dari nol.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Tambahkan `--fork-block-number <n>` agar hasil test konsisten (reproducible) — tanpa itu, fork memakai block terbaru yang berubah tiap saat.