Study
Foundry

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.

Editor Latihan

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.