Semua artikel

Cara Membuat dan Deploy Smart Contract Ethereum dengan Aman

Langkah praktis dari kode Solidity sampai kontrak terverifikasi di testnet Sepolia: setup Hardhat, memakai OpenZeppelin, menulis test, menghindari celah reentrancy dan access control, menyimpan private key dengan aman, dan persiapan ke mainnet.

Blockchain|Dipublikasikan |10 menit baca
Ilustrasi blok-blok yang saling terhubung dalam jaringan blockchain

Smart contract adalah program yang berjalan di blockchain dan menyimpan aturan, sering kali juga uang, yang tidak bisa diubah diam-diam oleh siapa pun. Sifat inilah yang membuatnya berguna, dan sifat ini juga yang membuat pekerjaannya tidak memberi ruang untuk salah. Begitu kontrak di-deploy, kodenya tidak bisa ditambal seperti aplikasi web, dan bug bisa dieksploitasi siapa saja dalam hitungan menit. Artikel ini membahas alur kerja yang kami ajarkan untuk membangun kontrak Ethereum dengan hati-hati, dari baris Solidity pertama sampai deploy yang terverifikasi.

Pastikan Dulu Anda Memang Butuh Smart Contract

Smart contract cocok dipakai ketika beberapa pihak yang tidak sepenuhnya saling percaya butuh aturan dan catatan yang sama: penerbitan token, escrow, voting on-chain, NFT yang harus bisa dipindahkan antar platform, atau penyelesaian transaksi antar perusahaan. Kalau semua data dikendalikan satu organisasi dan semua pengguna sudah percaya pada organisasi itu, database biasa jauh lebih murah, lebih cepat, dan lebih mudah diperbaiki. Jujur soal ini sejak awal bisa menghindarkan proyek dari biaya gas dan audit yang tidak memberi manfaat apa-apa.

Siapkan Environment Development

  • Hardhat: toolkit berbasis Node.js untuk compile, testing, dan deploy kontrak. Ada jaringan lokal untuk test yang cepat dan pesan error yang jelas.
  • Foundry: alternatif yang test-nya ditulis dalam Solidity, eksekusinya sangat cepat, dan sudah ada fuzzing bawaan. Banyak tim memakainya berdampingan dengan Hardhat.
  • OpenZeppelin Contracts: implementasi ERC-20, ERC-721, access control, dan helper keamanan yang sudah diaudit, jadi Anda tidak perlu menulis semuanya dari nol.
  • ethers.js atau viem: library untuk memanggil kontrak dari script maupun dari aplikasi web.
  • MetaMask dengan wallet khusus development yang tidak pernah diisi dana sungguhan.

Bangun di Atas Kode yang Sudah Diaudit

Kebanyakan kontrak token hanya butuh sedikit kode custom. Token ERC-20 bisa mewarisi implementasi OpenZeppelin lalu menambahkan bagian yang khusus untuk proyek, misalnya batas maksimal supply atau role untuk minting. Setiap baris yang Anda tulis sendiri adalah baris yang harus dites dan di-review, jadi buat logika custom sekecil mungkin dan pakai komponen standar sebanyak mungkin. Kunci versi library di proyek, dan baca changelog-nya sebelum upgrade.

Testing Harus Lebih Ketat daripada Aplikasi Web

  • Unit test untuk setiap fungsi public, mencakup jalur normal dan setiap kondisi yang seharusnya revert.
  • Test hak akses: pastikan akun tanpa role yang sesuai tidak bisa mint, pause, menarik dana, atau mengubah pengaturan.
  • Kasus pinggir: jumlah nol, supply maksimal, transfer ke alamat kontrak itu sendiri, dan pemanggilan berulang.
  • Fuzz test yang mengirim input acak ke fungsi dan mengecek bahwa invariant, misalnya total supply, selalu terjaga.
  • Laporan gas, supaya Anda sadar kalau ada perubahan yang membuat fungsi yang sering dipakai jadi jauh lebih mahal bagi pengguna.

Kesalahan Keamanan yang Sering Terjadi

KesalahanAkibatnyaCara mencegah
ReentrancyKontrak luar memanggil balik fungsi Anda sebelum saldo diperbarui, lalu menguras danaPerbarui state sebelum memanggil kontrak luar (checks-effects-interactions) dan pakai ReentrancyGuard
Tidak ada access controlSiapa pun bisa memanggil fungsi admin seperti mint atau withdrawPakai Ownable atau AccessControl, lalu tes setiap fungsi yang dibatasi
Memakai tx.origin untuk otorisasiKontrak jahat menjebak pengguna untuk memanggilnya, lalu bertindak atas nama pengguna ituCek msg.sender
Mengandalkan satu sumber hargaPenyerang memanipulasi pasar yang sepi untuk menggeser harga yang dibaca kontrak AndaPakai oracle yang andal dan batasi perubahan harga yang masuk akal
Loop tanpa batasFungsi yang melakukan loop atas daftar yang terus bertambah lama-lama melebihi batas gas per blok dan berhenti berfungsiHindari iterasi atas array yang bisa diisi pengguna, dan biarkan pengguna klaim masing-masing

Solidity 0.8 ke atas otomatis revert saat terjadi integer overflow, sehingga satu jenis bug lama sudah hilang. Tapi fitur ini tidak melindungi dari kesalahan logika. Jalankan static analyzer seperti Slither setiap kali ada perubahan. Banyak pola di tabel di atas bisa ketahuan dalam hitungan detik.

Deploy ke Testnet Sepolia

  1. 1Buat wallet khusus untuk deploy, lalu isi dengan ETH testnet dari faucet Sepolia.
  2. 2Simpan private key dan URL RPC di environment variable atau konfigurasi terenkripsi Hardhat, dan jangan pernah masuk ke Git.
  3. 3Tulis script deploy yang mengisi argumen constructor secara eksplisit dan menampilkan alamat kontrak yang di-deploy.
  4. 4Deploy, lalu verifikasi source code di Etherscan supaya siapa pun bisa membaca kontraknya dan berinteraksi dengannya.
  5. 5Jalankan alur pengguna yang sebenarnya dari aplikasi web ke kontrak di testnet, termasuk transaksi yang gagal.

Rencanakan Upgrade Sebelum ke Mainnet

Karena kode yang sudah di-deploy tidak bisa diubah, tentukan sejak awal bagaimana kesalahan akan ditangani. Sebagian proyek membiarkan kontraknya tetap immutable dan men-deploy versi baru beserta jalur migrasinya. Sebagian lain memakai pola upgradeable proxy seperti UUPS, yang memungkinkan perbaikan tapi menambah kerumitan dan memberi kepercayaan besar kepada pemegang kunci upgrade. Keduanya sah, selama dipilih dengan sadar dan dijelaskan ke pengguna. Fungsi pause untuk keadaan darurat juga berguna di banyak kontrak, asalkan role untuk pause dijaga dengan baik.

Sebelum Masuk Mainnet

  • Bekukan kodenya dan minta di-review oleh orang yang tidak menulisnya. Untuk kontrak yang menyimpan nilai besar, gunakan audit eksternal.
  • Pindahkan role admin ke wallet multisig seperti Safe, supaya satu kunci yang hilang atau dicuri tidak bisa mengambil alih kontrak.
  • Deploy dari hardware wallet, jangan dari private key yang tersimpan di laptop developer.
  • Dokumentasikan setiap fungsi admin, siapa pemegang setiap role, dan prosedur daruratnya.
  • Pasang monitoring untuk event kontrak dan transfer dalam jumlah besar, supaya aktivitas yang tidak wajar cepat ketahuan.

Jalankan dulu script deploy lengkap ke fork mainnet di lokal. Cara ini menangkap alamat yang salah, approval yang terlewat, dan estimasi gas yang baru kelihatan dengan state jaringan yang asli.

Poin penting

  • Pakai smart contract hanya kalau beberapa pihak butuh aturan bersama yang tidak bisa diubah oleh satu pihak saja.
  • Bangun di atas kontrak OpenZeppelin yang sudah diaudit, dan buat logika custom sekecil mungkin.
  • Tes hak akses, kasus pinggir, dan invariant, lalu jalankan Slither di setiap perubahan.
  • Deploy dan verifikasi di Sepolia, lalu tes seluruh alur pengguna sebelum menyentuh mainnet.
  • Tentukan strategi upgrade sejak awal, dan lindungi role admin dengan multisig dan hardware wallet.

Artikel terkait

Artikel lain tentang software development, AI, cloud, dan infrastruktur.

Layar komputer yang menampilkan desain landing page di samping tablet dan HP
Pengembangan Web|

Cara Membuat Website Company Profile yang Mendatangkan Calon Klien

Yang dibutuhkan website company profile supaya mendatangkan pertanyaan dari calon klien: halaman layanan yang jelas, bukti seperti studi kasus dan logo klien, kontak yang mudah, cepat dibuka di HP, dasar-dasar SEO, pilihan platform, dan tracking untuk melihat halaman mana yang menghasilkan leads.

Pelanggan membayar dengan HP di kasir toko
Pengembangan Software|

Cara Integrasi Payment Gateway seperti Midtrans dan Xendit dengan Aman

Cara mengintegrasikan payment gateway Indonesia seperti Midtrans atau Xendit: memilih metode pembayaran, halaman checkout bawaan atau API langsung, verifikasi webhook, menangani notifikasi ganda, desain status pesanan, masa berlaku pembayaran, refund, testing di sandbox, dan rekonsiliasi harian.

Sedang mencari partner untuk pengembangan software?

Ceritakan proyek yang sedang Anda bangun, kebutuhan yang ingin diselesaikan, dan tantangan yang dihadapi. Kami dapat membantu membahas pendekatan teknis, scope, timeline, dan estimasi biaya.

Mulai diskusi