Mainnet Forking di Hardhat Network
Penjelasan
Hardhat Network mendukung forking mainnet (atau network lain) langsung lewat konfigurasi di hardhat.config.js, tanpa perlu flag tambahan saat menjalankan test. Dengan mengisi `networks.hardhat.forking.url`, seluruh state blockchain sungguhan (saldo, contract yang sudah ter-deploy, storage) tersedia secara lokal, dan setiap perubahan yang kita buat saat testing tidak memengaruhi mainnet asli. Forking sangat berguna untuk menguji integrasi dengan protokol DeFi yang sudah live, misalnya menguji contract kita berinteraksi dengan pool Uniswap sungguhan atau token stablecoin nyata, sekaligus tetap bisa memanipulasi saldo akun manapun lewat `hardhat_setBalance` atau impersonation akun via `hardhat_impersonateAccount`.
Contoh Konsep
// hardhat.config.js
module.exports = {
solidity: "0.8.20",
networks: {
hardhat: {
forking: {
url: process.env.MAINNET_RPC_URL,
blockNumber: 19000000, // opsional, agar hasil reproducible
},
},
},
};
// Di dalam test, impersonate akun whale untuk berinteraksi seolah kita akun itu
await network.provider.request({
method: "hardhat_impersonateAccount",
params: [whaleAddress],
});
const whaleSigner = await ethers.getSigner(whaleAddress);
Praktikum
Konfigurasikan forking mainnet di hardhat.config.js, lalu tulis test yang membaca totalSupply() dari contract token USDC sungguhan di mainnet lewat state hasil fork.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Set `blockNumber` tetap pada konfigurasi forking supaya hasil test konsisten dan bisa memanfaatkan cache RPC provider, alih-alih selalu fork dari block terbaru yang berubah tiap run.