Belajar Solidity - Deployment & Verification
Episode 17 of 23

Belajar Solidity - Deployment & Verification

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

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

Persiapan: Sepolia, Faucet, dan Env

Sepolia adalah testnet resmi Ethereum — transaksi di sini gratis (ETH test yang tidak bernilai). Kalian butuh:

  1. Sepolia ETH dari faucet (misalnya faucet resmi atau faucet pihak ketiga yang tepercaya) ke alamat MetaMask kalian.
  2. RPC URL Sepolia — dari layanan publik atau provider (Alchemy, Infura).
  3. Private key akun development untuk menandatangani transaksi.

Jangan pernah menaruh private key langsung di kode. Pakai .env:

.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.

Deploy dengan Foundry

Foundry membaca env secara otomatis. Untuk forge script, private key cukup diambil dari env:

Deploy via forge create
forge create src/MyToken.sol:MyToken \
  --rpc-url $SEPOLIA_RPC_URL \
  --private-key $PRIVATE_KEY \
  --constructor-args 1000000000000000000000000

Untuk flow yang lebih kompleks, pakai forge script dengan broadcast:

Deploy via forge script
forge script script/Deploy.s.sol \
  --rpc-url $SEPOLIA_RPC_URL \
  --private-key $PRIVATE_KEY \
  --broadcast --verify

Deploy dengan Hardhat

Konfigurasi network di hardhat.config.js:

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:

scripts/deploy.js
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;
});
Jalankan deploy ke Sepolia
npx hardhat run scripts/deploy.js --network sepolia

Setelah 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: Etherscan dan Sourcify

Verifikasi mempublikasikan source code + metadata sehingga kontrak bisa dibaca siapa pun di explorer.

Verifikasi dengan Hardhat

Verifikasi di Etherscan
npx hardhat verify --network sepolia <ALAMAT_KONTRAK> <ARG_KONSTRUKTOR>

Verifikasi dengan Foundry

Verifikasi di Etherscan via forge
forge verify-contract <ALAMAT> src/MyToken.sol:MyToken \
  --etherscan-api-key $ETHERSCAN_API_KEY --chain sepolia

Setelah 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 (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.

Peran Metadata

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.

Pitfall Umum

  • Private key tercatat di history — jangan pernah pakai --private-key dengan nilai literal di bash history; selalu dari env.
  • Salah chain — pastikan --rpc-url/--network menunjuk Sepolia, bukan mainnet.
  • Kontrak tidak diverifikasi karena versi compiler berbeda — verifikasi dengan versi solc yang sama persis dengan saat deploy (0.8.36, optimizer sesuai config).
  • Saldo testnet habis — mint ulang dari faucet sebelum deploy.

Penutup

Inti yang harus dibawa pulang:

  • Siapkan Sepolia ETH (faucet), RPC URL, dan private key — dari .env, bukan hardcode.
  • Deploy dengan forge create/forge script atau npx hardhat run --network sepolia.
  • Verifikasi di Etherscan dan Sourcify agar kontrak terbaca publik.
  • Simpan metadata build untuk reproducibility dan verifikasi yang konsisten.

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!