Pengantar kontrak pintar
Apa itu kontrak pintar?
"Kontrak pintar" pada dasarnya adalah program yang berjalan di rantai blok Ethereum. Ini adalah kumpulan kode (fungsinya) dan data (state-nya) yang berada di alamat spesifik pada rantai blok Ethereum.
Kontrak pintar adalah 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.
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, seperti yang dijelaskan oleh Nick Szabo (opens in a new tab). Dengan input yang tepat, output tertentu dijamin.
Untuk mendapatkan camilan dari mesin penjual otomatis:
uang + pilihan camilan = camilan dikeluarkan
Logika 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:
pragma solidity 0.8.7;
contract VendingMachine {
// Deklarasikan variabel state dari kontrak
address public owner;
mapping (address => uint) public cupcakeBalances;
// Ketika kontrak 'VendingMachine' disebarkan:
// 1. tetapkan alamat yang menyebarkan sebagai pemilik kontrak
// 2. tetapkan saldo cupcake kontrak pintar yang disebarkan menjadi 100
constructor() {
owner = msg.sender;
cupcakeBalances[address(this)] = 100;
}
// Izinkan pemilik untuk menambah saldo cupcake kontrak pintar
function refill(uint amount) public {
require(msg.sender == owner, "Only the owner can refill.");
cupcakeBalances[address(this)] += amount;
}
// Izinkan siapa saja untuk membeli cupcake
function purchase(uint amount) public payable {
require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
cupcakeBalances[address(this)] -= amount;
cupcakeBalances[msg.sender] += amount;
}
}
Sama 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 belajar 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 lain.
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 rantai blok 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. Ini dapat diakali dengan menggunakan Pola Berlian (The Diamond Pattern) (opens in a new tab).
Kontrak multisig
Kontrak multisig (tanda tangan ganda) adalah akun kontrak pintar yang mewajibkan beberapa tanda tangan yang valid untuk mengeksekusi sebuah transaksi. Ini sangat berguna untuk menghindari titik kegagalan tunggal untuk kontrak yang menyimpan sejumlah besar Ether atau token lainnya. Multisig juga membagi tanggung jawab untuk eksekusi kontrak dan manajemen kunci di antara beberapa pihak dan mencegah hilangnya satu kunci privat yang menyebabkan hilangnya dana yang tidak dapat diubah. Karena alasan ini, kontrak multisig dapat digunakan untuk tata kelola DAO sederhana. Multisig mewajibkan 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. Multisig 4/7 mewajibkan 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.
Pembaruan terakhir halaman: 25 Februari 2026