Ethereum berada di balik salah satu mata uang kripto yang paling populer – namun lebih dari itu. Berkat algoritme, mata uang kripto ini dapat dikelola sepenuhnya secara mandiri. Namun, bagaimana cara kerja “kontrak pintar”, dan sejauh mana kita sudah melangkah di jalan ini?
Bagaimana cara kerja kontrak pintar di Ethereum?
Untuk memahami prinsip smart contract di Ethereum, pertama-tama kita perlu melakukan sedikit perjalanan ke dunia bahasa pemrograman. Bahasa pemrograman saat ini pada dasarnya dibagi menjadi dua kelompok: bahasa yang ditafsirkan dan bahasa yang dikompilasi. Pada kelompok pertama, program ditulis dalam bahasa tingkat tinggi dan kemudian dieksekusi oleh penerjemah. Dua contoh yang populer adalah Python dan JavaScript. Bahasa yang diinterpretasikan adalah bahasa yang umum digunakan di banyak area aplikasi (seperti web) karena memungkinkan Anda untuk langsung memulai. Bahasa ini juga sangat universal dan dapat digunakan di berbagai platform tanpa memerlukan alat tambahan.
Sebaliknya, ada bahasa yang dikompilasi, di mana kompiler pertama-tama mengonversi teks program ke dalam bahasa lain – sering kali kode mesin biner. Kode biner ini bergantung pada platform dan dieksekusi langsung pada prosesor. Kompiler dapat (dan harus) menghasilkan kode khusus untuk set instruksi prosesor, misalnya untuk CPU yang kompatibel dengan ARM atau Intel. Perwakilan yang terkenal dari jenis ini adalah C dan Rust.
Namun, kenyataannya, seperti biasa, lebih kompleks daripada yang disarankan oleh kategori sederhana ini. Untuk beberapa waktu sekarang, ada bentuk hibrida, seperti Java. Kompiler Java tidak menerjemahkan kode Java secara langsung ke dalam kode mesin 'nyata', tetapi ke dalam format perantara khusus. Format perantara ini, pada gilirannya, kemudian dieksekusi oleh penerjemah – mesin virtual Java – pada arsitektur konkret prosesor.
Kontrak pintar Ethereum juga bekerja dengan cara yang sama. Semua node yang memvalidasi transaksi dan mengekstrak mata uang baru di Ethereum berisi sebuah contoh Ethereum Virtual Machine (EVM). Yellow Paper, spesifikasi teknis Ethereum, mendefinisikan secara detail instruksi yang mendukung EVM – dan bagaimana mereka harus dieksekusi.
Ini adalah pengembangan eksklusif dengan sejumlah fitur khusus:
Interaksi dengan dunia luar tidak dimungkinkan: semua keputusan algoritmik harus dihasilkan dari blockchain dan transaksinya.
Aritmatika didasarkan pada nilai 256-bit untuk membuatnya lebih mudah menangani alamat dan jumlah yang lebih besar.
Operasi khusus seperti fungsi hash diintegrasikan untuk meningkatkan kinerja.
Semua instruksi diberikan fungsi biaya (bahan bakar), yang sesuai dengan waktu eksekusi yang dibutuhkan dan jumlah memori yang dibutuhkan. Istilah metering umumnya digunakan dalam bahasa Inggris.
Pemrograman pada EVM
Seperti halnya ekosistem Java, ada beberapa bahasa pemrograman yang tersedia untuk kompiler EVM. Bahasa yang paling umum adalah Solidity, yang secara dangkal (sintaksis) mirip dengan JavaScript. Pada akhir tahun 2020, dokumentasi Ethereum mencantumkan dua bahasa tambahan: Vyper, yang didasarkan pada Python, dan Yul Plus, sebuah pengembangan yang sepenuhnya independen.
Kesamaan dari semua bahasa ini adalah bahwa mereka adalah bahasa khusus domain karena, tidak seperti bahasa tujuan umum, mereka menempati ceruk dengan karakteristik khusus dan, khususnya, mesin eksekusi khusus: EVM. Tentu saja, bahasa khusus domain (DSL) ini pada dasarnya adalah ide yang bagus untuk mengurangi kompleksitas aplikasi.
Tetapi dalam kasus EVM, hal ini tampaknya tidak masuk akal. Bagaimanapun, EVM dapat – terlepas dari kurangnya kemampuan untuk berinteraksi dengan dunia di luar blockchain – mengeksekusi algoritme sewenang-wenang, sehingga (sederhananya) EVM bersifat Turing-complete.
Mengapa tidak menggunakan bahasa dan lingkungan eksekusi yang sudah ada?
Jika perlu, beberapa fungsionalitas harus dihapus, tetapi kita dapat memanfaatkan pengalaman yang lebih lama, alat yang lebih stabil, dan – yang lebih penting – basis programmer yang lebih luas. Memang, sudah menjadi rahasia umum bahwa saat ini, popularitas bahasa pemrograman tidak hanya ditentukan oleh apakah bahasa tersebut ringkas, aman dari segi tipe, atau dinamis, tetapi juga oleh seberapa mudah mengakses banyak pustaka dan paket yang ada. Perubahan era ini diilustrasikan dengan baik oleh JavaScript, yang sering dikritik karena semantiknya yang kasar, tetapi harus dianggap sebagai bahasa pemrograman paling populer paling lambat sejak paket NPM yang kesekian juta.
Webassembly, bahasa perantara yang universal
Orang-orang di balik spesifikasi Ethereum sampai pada kesimpulan bahwa masalah tertentu dapat diselesaikan dengan meninggalkan pengembangan khusus dan beralih ke bahasa universal. Betapa nyamannya pengembangan yang sedang berlangsung di web untuk membuat alternatif bagi JavaScript yang sudah sangat populer: Webassembly (WASM). Ini adalah bahasa perantara universal dan format biner, dikombinasikan dengan spesifikasi untuk penerjemah. Seperti namanya, standar terbuka ini pada awalnya dirancang untuk web. Sementara itu, area aplikasi lain (misalnya aplikasi ponsel cerdas) telah diperiksa.
Pengembangan WASM dipimpin oleh raksasa industri seperti Microsoft, Google, dan Apple. Fitur utama dari bahasa ini adalah bahwa bahasa ini telah dirancang untuk portabilitas sejak awal. Hal ini dapat dilihat dari fakta bahwa banyak bahasa pemrograman yang sudah ada seperti Rust, C++ atau Go sudah dapat dikompilasi untuk perakitan web.