Pengantar kontrak pintar
Pembaruan terakhir halaman: 25 Februari 2026
Apa itu kontrak pintar?
"Kontrak pintar" pada dasarnya adalah sebuah program yang berjalan di blockchain Ethereum. Ini adalah kumpulan kode (fungsinya) dan data (statusnya) yang berada pada alamat spesifik di blockchain Ethereum.
Kontrak pintar adalah salah satu jenis akun Ethereum. Ini berarti mereka memiliki saldo dan dapat menjadi target transaksi. Namun, mereka tidak dikendalikan oleh pengguna, melainkan disebarkan ke jaringan dan berjalan sesuai program. Akun pengguna kemudian dapat berinteraksi dengan kontrak pintar dengan mengirimkan transaksi yang mengeksekusi fungsi yang ditentukan pada kontrak pintar. Kontrak pintar dapat menentukan aturan, seperti kontrak biasa, dan secara otomatis menegakkannya melalui kode. Kontrak pintar tidak dapat dihapus secara default, dan interaksi dengannya tidak dapat diubah (irreversible).
Prasyarat
Jika Anda baru memulai atau mencari pengantar yang tidak terlalu teknis, kami merekomendasikan pengantar kontrak pintar kami.
Pastikan Anda telah membaca tentang akun, transaksi, dan Mesin Virtual Ethereum sebelum terjun ke dunia kontrak pintar.
Mesin penjual otomatis digital
Mungkin metafora terbaik untuk kontrak pintar adalah mesin penjual otomatis (vending machine), seperti yang dijelaskan oleh Nick Szabo (opens in a new tab). Dengan input yang tepat, output tertentu dijamin.
Untuk mendapatkan makanan ringan dari mesin penjual otomatis:
1money + snack selection = snack dispensedLogika ini diprogram ke dalam mesin penjual otomatis.
Kontrak pintar, seperti mesin penjual otomatis, memiliki logika yang diprogram ke dalamnya. Berikut adalah contoh sederhana tentang bagaimana mesin penjual otomatis ini akan terlihat jika itu adalah kontrak pintar yang ditulis dalam Solidity:
1pragma solidity 0.8.7;23contract VendingMachine {45 // Declare state variables of the contract // Deklarasikan variabel state dari kontrak6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // When 'VendingMachine' contract is deployed: // Ketika kontrak 'VendingMachine' di-deploy:10 // 1. set the deploying address as the owner of the contract // 1. atur alamat yang men-deploy sebagai pemilik kontrak11 // 2. set the deployed smart contract's cupcake balance to 100 // 2. atur saldo cupcake smart contract yang di-deploy menjadi 10012 constructor() {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Allow the owner to increase the smart contract's cupcake balance // Izinkan pemilik untuk menambah saldo cupcake smart contract18 function refill(uint amount) public {19 require(msg.sender == owner, "Only the owner can refill.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Allow anyone to purchase cupcakes // Izinkan siapa saja untuk membeli cupcake24 function purchase(uint amount) public payable {25 require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");26 require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");27 cupcakeBalances[address(this)] -= amount;28 cupcakeBalances[msg.sender] += amount;29 }30}Tampilkan semuaSama seperti bagaimana mesin penjual otomatis menghilangkan kebutuhan akan karyawan penjual, kontrak pintar dapat menggantikan perantara di banyak industri.
Tanpa izin
Siapa pun dapat menulis kontrak pintar dan menyebarkannya ke jaringan. Anda hanya perlu mempelajari cara membuat kode dalam bahasa kontrak pintar, dan memiliki cukup ETH untuk menyebarkan kontrak Anda. Menyebarkan kontrak pintar secara teknis adalah sebuah transaksi, jadi Anda perlu membayar gas dengan cara yang sama seperti Anda perlu membayar gas untuk transfer ETH sederhana. Namun, biaya gas untuk penyebaran kontrak jauh lebih tinggi.
Ethereum memiliki bahasa yang ramah pengembang untuk menulis kontrak pintar:
- Solidity
- Vyper
Namun, mereka harus dikompilasi sebelum dapat disebarkan sehingga mesin virtual Ethereum dapat menafsirkan dan menyimpan kontrak tersebut. Lebih lanjut tentang kompilasi
Komposabilitas
Kontrak pintar bersifat publik di Ethereum dan dapat dianggap sebagai API terbuka. Ini berarti Anda dapat memanggil kontrak pintar lain di dalam kontrak pintar Anda sendiri untuk sangat memperluas apa yang mungkin dilakukan. Kontrak bahkan dapat menyebarkan kontrak lainnya.
Pelajari lebih lanjut tentang komposabilitas kontrak pintar.
Batasan
Kontrak pintar itu sendiri tidak bisa mendapatkan informasi tentang peristiwa "dunia nyata" karena mereka tidak dapat mengambil data dari sumber offchain. Ini berarti mereka tidak dapat merespons peristiwa di dunia nyata. Ini memang disengaja. Mengandalkan informasi eksternal dapat membahayakan konsensus, yang penting untuk keamanan dan desentralisasi.
Namun, penting bagi aplikasi blockchain untuk dapat menggunakan data offchain. Solusinya adalah oracle yang merupakan alat yang menyerap data offchain dan membuatnya tersedia untuk kontrak pintar.
Batasan lain dari kontrak pintar adalah ukuran kontrak maksimum. Kontrak pintar dapat berukuran maksimum 24KB atau akan kehabisan gas. Hal ini dapat diatasi dengan menggunakan Pola Berlian (The Diamond Pattern) (opens in a new tab).
Kontrak multi tanda tangan
Kontrak multi tanda tangan (multisig) adalah akun kontrak pintar yang memerlukan beberapa tanda tangan yang valid untuk mengeksekusi sebuah transaksi. Ini sangat berguna untuk menghindari titik kegagalan tunggal (single points of failure) untuk kontrak yang menyimpan sejumlah besar ether atau token lainnya. Multi tanda tangan juga membagi tanggung jawab untuk eksekusi kontrak dan manajemen kunci di antara beberapa pihak dan mencegah hilangnya satu kunci pribadi yang menyebabkan hilangnya dana yang tidak dapat diubah. Karena alasan ini, kontrak multi tanda tangan dapat digunakan untuk tata kelola DAO yang sederhana. Multi tanda tangan memerlukan N tanda tangan dari M kemungkinan tanda tangan yang dapat diterima (di mana N ≤ M, dan M > 1) untuk dapat dieksekusi. N = 3, M = 5 dan N = 4, M = 7 umumnya digunakan. Multi tanda tangan 4/7 memerlukan empat dari tujuh kemungkinan tanda tangan yang valid. Ini berarti dana masih dapat diambil meskipun tiga tanda tangan hilang. Dalam hal ini, ini juga berarti bahwa mayoritas pemegang kunci harus setuju dan menandatangani agar kontrak dapat dieksekusi.
Sumber daya kontrak pintar
Kontrak OpenZeppelin - Pustaka untuk pengembangan kontrak pintar yang aman.
- openzeppelin.com/contracts/ (opens in a new tab)
- GitHub (opens in a new tab)
- Forum Komunitas (opens in a new tab)
Bacaan lebih lanjut
- Coinbase: Apa itu kontrak pintar? (opens in a new tab)
- Chainlink: Apa itu kontrak pintar? (opens in a new tab)
- Video: Penjelasan Sederhana - Kontrak Pintar (opens in a new tab)
- Cyfrin Updraft: Platform pembelajaran dan audit Web3 (opens in a new tab)
Tutorial: Tanda tangan kontrak pintar (EIP-1271) di Ethereum
- EIP-1271: Menandatangani dan Memverifikasi Tanda Tangan Kontrak Pintar – Bagaimana EIP-1271 memungkinkan kontrak pintar untuk memverifikasi tanda tangan, dengan panduan implementasi Safe.