Study
Foundry

Cheatcodes Dasar (vm.prank, vm.deal, vm.expectRevert)

Penjelasan

Cheatcode adalah fungsi khusus yang hanya tersedia di lingkungan test Foundry, diakses lewat objek global `vm`. Cheatcode memungkinkan kita memanipulasi state EVM secara langsung tanpa perlu transaksi asli — misalnya `vm.prank(address)` membuat pemanggilan berikutnya seolah dikirim dari address tertentu, `vm.deal(address, amount)` mengisi saldo ETH sebuah address secara instan. `vm.expectRevert()` dipakai untuk menguji bahwa suatu pemanggilan fungsi memang harus gagal (revert) dengan pesan tertentu — dipanggil sebelum baris kode yang diharapkan revert. Kombinasi cheatcode ini membuat skenario testing kompleks (multi-user, multi-saldo, kondisi error) bisa ditulis ringkas tanpa setup rumit.

Contoh Konsep

function testOnlyOwnerCanWithdraw() public {
    address alice = address(0x1);
    address bob = address(0x2);

    // Beri Bob saldo 5 ETH secara instan
    vm.deal(bob, 5 ether);

    // Pemanggilan berikutnya seolah dikirim dari alice
    vm.prank(alice);

    // Diharapkan revert karena alice bukan owner
    vm.expectRevert("Not owner");
    vault.withdraw(1 ether);
}

Praktikum

Tulis test yang memberi address bernama user saldo 10 ether dengan vm.deal, lalu memanggil fungsi deposit sebagai user tersebut menggunakan vm.prank.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Gunakan `vm.startPrank(addr)` dan `vm.stopPrank()` kalau butuh beberapa pemanggilan berturut-turut dari address yang sama, bukan mengulang vm.prank tiap baris.