Men-deploy kontrak ke testnet Sepolia dengan forge create dan script Hardhat, mengelola private key dan RPC lewat env variable dengan aman, serta memverifikasi kontrak di Etherscan dan Sourcify lengkap dengan metadata-nya

Setelah di episode 16 kalian memahami jalur rilis 0.8.x, pada episode ini kita sampai ke momen yang ditunggu: deploy ke jaringan nyata — testnet Sepolia — lalu memverifikasi kontrak agar bisa dibaca dan dipakai publik.
Mengapa episode ini penting? Karena deploy dan verifikasi adalah gerbang menuju produksi. Kontrak yang belum diverifikasi terlihat sebagai bytecode tidak terbaca — sulit dipercaya komunitas dan tidak bisa di-inspeksi. Kontrak yang diverifikasi (source + ABI terpublikasi) menjadi bagian terbuka dari ekosistem. Proses ini juga melatih kalian mengelola key dan RPC dengan aman — keterampilan produksi yang tidak bisa ditawar.
Sepolia adalah testnet resmi Ethereum — transaksi di sini gratis (ETH test yang tidak bernilai). Kalian butuh:
Jangan pernah menaruh private key langsung di kode. Pakai .env:
SEPOLIA_RPC_URL=https://sepolia.example.com/v2/KEY
PRIVATE_KEY=0xac09...Daftarkan file ini di .gitignore dan sediakan .env.example untuk tim. Library populer (Hardhat, Foundry) otomatis memuat .env; Load via plugin dotenv.
Warning
Dua aturan key yang tidak bisa ditawar: (1) private key testnet tidak sama dengan key mainnet — pisahkan tegas, dan (2) jangan pernah commit .env. Satu key mainnet yang bocor berarti seluruh dana di alamat itu hilang. Di CI, simpan key di secret manager, bukan di repo.
Foundry membaca env secara otomatis. Untuk forge script, private key cukup diambil dari env:
forge create src/MyToken.sol:MyToken \
--rpc-url $SEPOLIA_RPC_URL \
--private-key $PRIVATE_KEY \
--constructor-args 1000000000000000000000000Untuk flow yang lebih kompleks, pakai forge script dengan broadcast:
forge script script/Deploy.s.sol \
--rpc-url $SEPOLIA_RPC_URL \
--private-key $PRIVATE_KEY \
--broadcast --verifyKonfigurasi network di hardhat.config.js:
require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();
module.exports = {
solidity: "0.8.36",
networks: {
sepolia: {
url: process.env.SEPOLIA_RPC_URL,
accounts: [process.env.PRIVATE_KEY],
},
},
};Script deploy:
const { ethers } = require("hardhat");
async function main() {
const MyToken = await ethers.getContractFactory("MyToken");
const token = await MyToken.deploy(ethers.parseEther("1000000"));
await token.waitForDeployment();
console.log("MyToken di-deploy ke:", await token.getAddress());
}
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});npx hardhat run scripts/deploy.js --network sepoliaSetelah transaksi terkonfirmasi, alamat kontrak muncul — catat alamat ini untuk verifikasi.
Tip
Sebelum deploy ke testnet, selalu jalankan dulu di jaringan lokal: npx hardhat run scripts/deploy.js (tanpa --network). Ini menangkap error logika tanpa biaya dan membuat iterasi cepat.
Verifikasi mempublikasikan source code + metadata sehingga kontrak bisa dibaca siapa pun di explorer.
npx hardhat verify --network sepolia <ALAMAT_KONTRAK> <ARG_KONSTRUKTOR>forge verify-contract <ALAMAT> src/MyToken.sol:MyToken \
--etherscan-api-key $ETHERSCAN_API_KEY --chain sepoliaSetelah verifikasi berhasil, halaman kontrak di explorer menampilkan tab Contract dengan source code, ABI, dan tombol Read/Write Contract — siapa pun bisa berinteraksi langsung dari explorer.
Sourcify (sourcify.dev) adalah alternatif yang mendukung metadata lengkap dan tidak bergantung pada Etherscan. Verifikasi di Sourcify memungkinkan kontrak kalian diverifikasi di beberapa explorer sekaligus. Metadata (file .json di artifacts/out) menjadi kuncinya — Sourcify mencocokkan metadata ini dengan bytecode yang di-deploy.
Setiap kompilasi menghasilkan metadata: versi compiler, setting optimizer, daftar library, dan source hash. Karena metadata menentukan reproducibility, simpanlah bersama kode (misal di commit artifacts build). Verifikasi berbasis metadata memastikan kode yang kalian lihat di explorer benar-benar kode yang menghasilkan bytecode yang ter-deploy.
--private-key dengan nilai literal di bash history; selalu dari env.--rpc-url/--network menunjuk Sepolia, bukan mainnet.solc yang sama persis dengan saat deploy (0.8.36, optimizer sesuai config).Inti yang harus dibawa pulang:
.env, bukan hardcode.forge create/forge script atau npx hardhat run --network sepolia.Di episode 18 selanjutnya kita akan membahas auditing & best practice — static analysis dengan Slither dan Mythril, fuzzing dengan Echidna, invariant testing, access control dengan OpenZeppelin AccessControl, pola pausable dan emergency stop, serta keamanan kontrak upgradeable. Sampai jumpa di episode 18!