Pengantar Kontrak Cerdas

Pada artikel ini, kita akan melihat apa itu kontrak pintar, apa itu kontrak pintar, kita akan mengenal berbagai platform kontrak pintar, fitur-fiturnya, dan juga membahas cara kerjanya dan keuntungan apa yang dapat dihasilkannya. Materi ini akan sangat berguna bagi pembaca yang belum terlalu paham dengan topik kontrak pintar, namun ingin lebih dekat untuk memahaminya.

Kontrak biasa vs. kontrak pintar

Sebelum kita mendalami detailnya, mari kita ambil contoh perbedaan antara kontrak reguler, yang ditentukan di atas kertas, dan kontrak pintar, yang direpresentasikan secara digital.

Pengantar Kontrak Cerdas

Bagaimana cara kerjanya sebelum munculnya kontrak pintar? Bayangkan sekelompok orang yang ingin menetapkan aturan dan syarat tertentu bagi pendistribusian nilai, serta mekanisme tertentu untuk menjamin terlaksananya pendistribusian tersebut menurut aturan dan ketentuan yang diberikan. Kemudian mereka berkumpul, membuat kertas di mana mereka menuliskan rincian identifikasi mereka, syarat-syaratnya, nilai-nilai yang terlibat, memberi tanggal dan menandatanganinya. Akad ini juga disahkan oleh pihak terpercaya seperti notaris. Selanjutnya, orang-orang ini pergi ke arah yang berbeda dengan salinan kertas kontrak tersebut dan mulai melakukan beberapa tindakan yang mungkin tidak sesuai dengan kontrak itu sendiri, yaitu, mereka melakukan satu hal, tetapi di atas kertas dinyatakan bahwa mereka harus melakukan sesuatu. benar-benar berbeda. Dan bagaimana cara keluar dari situasi ini? Faktanya, salah satu anggota kelompok perlu mengambil kertas ini, mengambil beberapa bukti, membawanya ke pengadilan dan mencapai kepatuhan antara kontrak dan tindakan nyata. Seringkali sulit untuk mencapai implementasi yang adil dari kontrak ini, yang mengakibatkan konsekuensi yang tidak menyenangkan.

Apa yang bisa dikatakan tentang kontrak pintar? Mereka menggabungkan kemungkinan penulisan ketentuan kontrak dan mekanisme penerapannya yang ketat. Jika ketentuan telah ditetapkan dan transaksi atau permintaan terkait telah ditandatangani, maka setelah permintaan atau transaksi tersebut diterima, ketentuan atau implementasinya tidak dapat lagi diubah.

Terdapat satu validator atau seluruh jaringan, serta database yang menyimpan semua kontrak pintar yang diserahkan untuk dieksekusi dalam urutan kronologis yang ketat. Penting juga bahwa database ini harus berisi semua kondisi pemicu untuk mengeksekusi kontrak pintar. Selain itu, harus memperhitungkan nilai yang pembagiannya dijelaskan dalam kontrak. Jika ini berlaku untuk beberapa mata uang digital, maka database ini harus memperhitungkannya.

Dengan kata lain, validator kontrak pintar harus memiliki akses ke semua data tempat kontrak pintar beroperasi. Misalnya, satu database harus digunakan untuk memperhitungkan mata uang digital, saldo pengguna, transaksi pengguna, dan stempel waktu secara bersamaan. Kemudian, dalam kontrak pintar, kondisinya bisa berupa saldo pengguna dalam mata uang tertentu, kedatangan waktu tertentu, atau fakta bahwa transaksi tertentu telah dilakukan, tetapi tidak lebih.

Definisi kontrak pintar

Secara umum, terminologi itu sendiri diciptakan oleh peneliti Nick Szabo dan pertama kali digunakan pada tahun 1994, dan didokumentasikan pada tahun 1997 dalam sebuah artikel yang menjelaskan gagasan tentang kontrak pintar.

Kontrak pintar menyiratkan bahwa beberapa otomatisasi distribusi nilai dilakukan, yang hanya dapat bergantung pada kondisi yang telah ditentukan sebelumnya. Dalam bentuknya yang paling sederhana, ini tampak seperti kontrak dengan syarat-syarat yang ditentukan secara ketat, yang ditandatangani oleh pihak-pihak tertentu.

Kontrak pintar dirancang untuk meminimalkan kepercayaan pada pihak ketiga. Terkadang pusat pengambilan keputusan yang menjadi sandaran segalanya sama sekali tidak ada. Selain itu, kontrak semacam itu lebih mudah diaudit. Hal ini merupakan konsekuensi dari beberapa fitur desain sistem seperti itu, namun yang paling sering kita pahami dengan kontrak pintar adalah lingkungan terdesentralisasi dan adanya fungsi yang memungkinkan siapa pun menganalisis database dan melakukan audit penuh terhadap pelaksanaan kontrak. Hal ini menjamin perlindungan terhadap perubahan data retroaktif yang dapat mengakibatkan perubahan kinerja kontrak itu sendiri. Digitalisasi sebagian besar proses saat membuat dan meluncurkan kontrak pintar sering kali menyederhanakan teknologi dan biaya penerapannya.

Contoh sederhananya adalah layanan escrow

Mari kita lihat contoh yang sangat sederhana. Ini akan membantu Anda lebih memahami fungsi kontrak pintar, serta lebih memahami dalam kasus apa kontrak tersebut harus digunakan.

Pengantar Kontrak Cerdas

Hal ini juga dapat diimplementasikan menggunakan Bitcoin, meskipun saat ini Bitcoin masih belum bisa disebut sebagai platform lengkap untuk kontrak pintar. Jadi, kami memiliki beberapa pembeli dan kami memiliki toko online. Seorang pelanggan ingin membeli monitor dari toko ini. Dalam kasus yang paling sederhana, pembeli menyelesaikan dan mengirimkan pembayaran, dan toko online menerimanya, mengonfirmasinya, dan kemudian mengirimkan barangnya. Namun, dalam situasi ini terdapat kebutuhan akan kepercayaan yang besar - pembeli harus mempercayai toko online untuk seluruh biaya monitor. Karena sebuah toko online mungkin memiliki reputasi yang rendah di mata pembeli, terdapat risiko karena alasan tertentu, setelah menerima pembayaran, toko tersebut akan menolak layanan dan tidak akan mengirimkan barang kepada pembeli. Oleh karena itu, pembeli mengajukan pertanyaan (dan, karenanya, toko online menanyakan pertanyaan ini) apa yang dapat diterapkan dalam kasus ini untuk meminimalkan risiko tersebut dan membuat transaksi tersebut lebih dapat diandalkan.

Dalam kasus Bitcoin, pembeli dan penjual dapat memilih mediator secara mandiri. Ada banyak orang yang terlibat dalam menyelesaikan isu-isu kontroversial. Dan peserta kami dapat memilih dari daftar umum mediator yang mereka percayai. Bersama-sama mereka membuat alamat multitanda tangan 2 dari 3 di mana terdapat tiga kunci dan dua tanda tangan dengan dua kunci diperlukan untuk mengeluarkan koin dari alamat tersebut. Satu kunci akan menjadi milik pembeli, kunci kedua milik toko online, dan kunci ketiga milik mediator. Dan ke alamat multitanda tangan seperti itu, pembeli akan mengirimkan jumlah yang diperlukan untuk membayar monitor. Sekarang, ketika penjual melihat bahwa uang diblokir selama beberapa waktu di alamat multi-tanda tangan yang bergantung padanya, dia dapat dengan aman mengirim monitor melalui pos.

Selanjutnya, pembeli menerima parsel, memeriksa barang dan mengambil keputusan tentang pembelian akhir. Dia mungkin sepenuhnya setuju dengan layanan yang diberikan dan menandatangani transaksi dengan kuncinya, di mana dia mentransfer koin dari alamat multi-tanda tangan ke penjual, atau dia mungkin tidak puas dengan sesuatu. Dalam kasus kedua, dia menghubungi mediator untuk menyusun transaksi alternatif yang akan mendistribusikan koin tersebut secara berbeda.

Katakanlah monitor tiba sedikit tergores dan kit tidak menyertakan kabel untuk menghubungkan ke komputer, meskipun situs toko online mengatakan bahwa kabel tersebut harus disertakan dalam kit. Kemudian pembeli mengumpulkan bukti yang diperlukan untuk membuktikan kepada mediator bahwa dia tertipu dalam situasi ini: dia mengambil tangkapan layar situs tersebut, mengambil foto tanda terima surat, mengambil foto goresan di monitor dan menunjukkan bahwa segelnya adalah putus dan kabelnya dicabut. Toko online, pada gilirannya, mengumpulkan buktinya dan mentransfernya ke mediator.

Mediator tertarik untuk memuaskan kemarahan pembeli dan kepentingan toko online secara bersamaan (akan menjadi jelas alasannya nanti). Ini merupakan transaksi di mana koin dari alamat multi-tanda tangan akan dibelanjakan dalam proporsi tertentu antara pembeli, toko online, dan mediator, karena ia mengambil sebagian untuk dirinya sendiri sebagai hadiah atas karyanya. Katakanlah 90% dari jumlah total diberikan kepada penjual, 5% kepada mediator, dan 5% kompensasi kepada pembeli. Mediator menandatangani transaksi ini dengan kuncinya, namun belum bisa diterapkan, karena memerlukan dua tanda tangan, namun hanya satu yang layak. Ini mengirimkan transaksi seperti itu kepada pembeli dan penjual. Jika setidaknya salah satu dari mereka puas dengan opsi untuk mendistribusikan ulang koin ini, maka transaksi akan ditandatangani sebelumnya dan didistribusikan ke jaringan. Untuk memvalidasinya, cukup salah satu pihak yang bertransaksi menyetujui pilihan mediator.

Penting untuk memilih mediator pada awalnya agar kedua belah pihak mempercayainya. Dalam hal ini, dia akan bertindak terlepas dari kepentingan salah satu pihak dan menilai situasi secara objektif. Jika mediator tidak memberikan pilihan untuk mendistribusikan koin yang akan memuaskan setidaknya satu peserta, maka, dengan kesepakatan bersama, baik pembeli maupun toko online dapat mengirim koin tersebut ke alamat multi-tanda tangan baru dengan membubuhkan dua tanda tangan mereka. Alamat multisignature yang baru akan disusun dengan mediator yang berbeda, yang mungkin lebih kompeten dalam masalah ini dan memberikan pilihan yang lebih baik.

Contohnya dengan asrama dan kulkas

Mari kita lihat contoh yang lebih kompleks yang menampilkan kemampuan kontrak pintar secara lebih eksplisit.

Pengantar Kontrak Cerdas

Katakanlah ada tiga pria yang baru saja pindah ke kamar asrama yang sama. Mereka bertiga tertarik membeli kulkas untuk kamar mereka yang bisa mereka gunakan bersama. Salah satu dari mereka dengan sukarela mengumpulkan jumlah yang diperlukan untuk membeli lemari es dan bernegosiasi dengan penjual. Namun, mereka baru saja bertemu satu sama lain dan tidak ada cukup kepercayaan di antara mereka. Jelas sekali, dua di antara mereka mengambil risiko dengan memberikan uang kepada yang ketiga. Selain itu, mereka perlu mencapai kesepakatan dalam memilih penjual.

Mereka dapat menggunakan layanan escrow, yaitu memilih mediator yang akan memantau pelaksanaan transaksi dan menyelesaikan masalah kontroversial jika ada. Kemudian, setelah setuju, mereka membuat kontrak pintar dan menetapkan kondisi tertentu di dalamnya.

Syarat pertama adalah sebelum waktu tertentu, katakanlah dalam satu minggu, akun kontrak pintar yang bersangkutan harus menerima tiga pembayaran dari alamat tertentu dengan jumlah tertentu. Jika ini tidak terjadi, kontrak pintar akan berhenti dijalankan dan mengembalikan koin ke semua peserta. Jika kondisi terpenuhi, maka nilai pengidentifikasi penjual dan mediator ditetapkan, dan kondisi diperiksa bahwa semua peserta setuju dengan pilihan penjual dan mediator. Jika semua syarat terpenuhi, maka dana akan ditransfer ke alamat yang ditentukan. Pendekatan ini dapat melindungi peserta dari penipuan dari pihak manapun dan secara umum menghilangkan kebutuhan untuk percaya.

Kita melihat dalam contoh ini prinsip bahwa kemampuan untuk menetapkan parameter langkah demi langkah untuk memenuhi setiap kondisi memungkinkan Anda membuat sistem dengan kompleksitas dan kedalaman level bersarang apa pun. Selain itu, Anda dapat terlebih dahulu menentukan kondisi pertama dalam kontrak pintar, dan hanya setelah terpenuhi, Anda dapat menetapkan parameter untuk kondisi berikutnya. Dengan kata lain, kondisi tersebut ditulis secara formal, dan parameternya sudah dapat diatur selama pengoperasiannya.

Klasifikasi kontrak pintar

Untuk klasifikasi, Anda dapat menetapkan kelompok kriteria yang berbeda. Namun, dengan perkembangan teknologi, empat di antaranya relevan.

Kontrak pintar dapat dibedakan berdasarkan lingkungan pelaksanaannya, yang dapat terpusat atau terdesentralisasi. Dalam kasus desentralisasi, kita memiliki kemandirian dan toleransi kesalahan yang lebih besar ketika melaksanakan kontrak pintar.

Mereka juga dapat dibedakan berdasarkan proses pengaturan dan pemenuhan kondisi: mereka dapat diprogram secara bebas, terbatas atau ditentukan sebelumnya, yaitu diketik secara ketat. Ketika hanya ada 4 kontrak pintar tertentu pada platform kontrak pintar, parameternya dapat diatur dengan cara apa pun. Oleh karena itu, pengaturannya jauh lebih sederhana: kami memilih kontrak dari daftar dan meneruskan parameternya.

Menurut metode inisiasi, ada kontrak pintar otomatis, yaitu, ketika kondisi tertentu terjadi, kontrak tersebut dijalankan sendiri, dan ada kontrak yang ketentuannya ditentukan, namun platform tidak secara otomatis memeriksa pemenuhannya; untuk ini mereka perlu dimulai secara terpisah.

Selain itu, kontrak pintar memiliki tingkat privasi yang bervariasi. Mereka bisa sepenuhnya terbuka, sebagian, atau sepenuhnya rahasia. Yang terakhir ini berarti bahwa pengamat pihak ketiga tidak melihat ketentuan kontrak pintar. Namun, topik privasi sangat luas dan sebaiknya dibahas secara terpisah dari artikel kali ini.

Di bawah ini kita akan melihat lebih dekat tiga kriteria pertama untuk lebih memperjelas pemahaman topik saat ini.

Kontrak pintar berdasarkan waktu proses

Pengantar Kontrak Cerdas

Berdasarkan lingkungan eksekusi, perbedaan dibuat antara platform kontrak pintar terpusat dan terdesentralisasi. Dalam kasus kontrak digital terpusat, satu layanan digunakan, di mana hanya ada satu validator dan mungkin ada layanan pencadangan dan pemulihan, yang juga dikelola secara terpusat. Ada satu database yang menyimpan semua informasi yang diperlukan untuk menetapkan ketentuan kontrak pintar dan mendistribusikan nilai yang diperhitungkan dalam database layanan ini. Layanan terpusat tersebut memiliki klien yang menetapkan kondisi dengan permintaan tertentu dan menggunakan kontrak tersebut. Karena sifat platform yang terpusat, mekanisme autentikasi mungkin kurang aman dibandingkan mata uang kripto.

Sebagai contoh, kita dapat mengambil penyedia komunikasi seluler (operator seluler yang berbeda). Katakanlah suatu operator tertentu menyimpan catatan lalu lintas terpusat di servernya, yang dapat ditransmisikan dalam berbagai format, misalnya: dalam bentuk panggilan suara, transmisi SMS, lalu lintas Internet seluler, dan menurut standar yang berbeda, dan juga menyimpan catatan dana pada saldo pengguna. Oleh karena itu, penyedia komunikasi seluler dapat membuat kontrak untuk akuntansi layanan yang diberikan dan pembayarannya dengan kondisi berbeda. Dalam hal ini, mudah untuk mengatur kondisi seperti "kirim SMS dengan kode ini dan itu ke nomor ini dan itu dan Anda akan menerima kondisi ini dan itu untuk distribusi lalu lintas."

Satu contoh lagi dapat diberikan: bank tradisional dengan fungsionalitas perbankan Internet yang diperluas dan kontrak yang sangat sederhana seperti pembayaran reguler, konversi otomatis pembayaran masuk, pengurangan bunga otomatis ke rekening tertentu, dll.

Jika kita berbicara tentang kontrak pintar dengan lingkungan eksekusi terdesentralisasi, maka kita memiliki sekelompok validator. Idealnya, siapa pun bisa menjadi validator. Karena protokol sinkronisasi basis data dan pencapaian konsensus, kami memiliki beberapa basis data umum yang sekarang akan menyimpan semua transaksi dengan kontrak yang dijelaskan secara ketat, dan bukan beberapa kueri bersyarat, format yang sering berubah, dan tidak ada spesifikasi terbuka. Di sini, transaksi akan berisi instruksi untuk melaksanakan kontrak sesuai spesifikasi yang ketat. Spesifikasi ini terbuka dan, oleh karena itu, pengguna platform sendiri dapat mengaudit dan memvalidasi kontrak pintar. Di sini kita melihat bahwa platform terdesentralisasi lebih unggul daripada platform terpusat dalam hal independensi dan toleransi kesalahan, namun desain dan pemeliharaannya jauh lebih kompleks.

Kontrak pintar dengan metode pengaturan dan pemenuhan ketentuan

Sekarang mari kita lihat lebih dekat bagaimana kontrak pintar dapat berbeda dalam cara mereka menetapkan dan memenuhi ketentuan. Di sini kami mengalihkan perhatian kami ke kontrak pintar yang dapat diprogram secara acak dan Turing lengkap. Kontrak pintar Turing-lengkap memungkinkan Anda mengatur hampir semua algoritme sebagai syarat untuk pelaksanaan kontrak: siklus tulis, beberapa fungsi untuk menghitung probabilitas, dan sejenisnya - hingga algoritme tanda tangan elektronik Anda sendiri. Dalam hal ini yang kami maksud adalah penulisan logika yang benar-benar sewenang-wenang.

Ada juga kontrak pintar yang sewenang-wenang, tetapi bukan kontrak Turing yang lengkap. Ini termasuk Bitcoin dan Litecoin dengan skripnya sendiri. Ini berarti Anda hanya dapat menggunakan operasi tertentu dalam urutan apa pun, tetapi Anda tidak dapat lagi menulis loop dan algoritme Anda sendiri.

Selain itu, ada platform kontrak pintar yang menerapkan kontrak pintar yang telah ditentukan sebelumnya. Ini termasuk Bitshares dan Steemit. Bitshares memiliki serangkaian kontrak pintar untuk perdagangan, manajemen akun, manajemen platform itu sendiri dan parameternya. Steemit adalah platform serupa, namun tidak lagi berfokus pada penerbitan token dan perdagangan, seperti Bitshares, namun pada blogging, yaitu menyimpan dan memproses konten dengan cara yang terdesentralisasi.

Kontrak lengkap Turing yang sewenang-wenang mencakup platform Ethereum dan RootStock, yang masih dalam pengembangan. Oleh karena itu, di bawah ini kita akan membahas lebih detail tentang platform kontrak pintar Ethereum.

Kontrak pintar dengan metode inisiasi

Berdasarkan metode inisiasinya, kontrak pintar juga dapat dibagi menjadi setidaknya dua kelompok: otomatis dan manual (tidak otomatis). Kontrak otomatis dicirikan oleh fakta bahwa, dengan mempertimbangkan semua parameter dan ketentuan yang diketahui, kontrak pintar sepenuhnya dieksekusi secara otomatis, yaitu, tidak memerlukan pengiriman transaksi tambahan dan mengeluarkan komisi tambahan untuk setiap eksekusi berikutnya. Platform itu sendiri memiliki semua data untuk menghitung bagaimana kontrak pintar akan diselesaikan. Logikanya di sana tidak sembarangan, melainkan sudah ditentukan sebelumnya dan semua itu bisa diprediksi. Artinya, Anda dapat memperkirakan terlebih dahulu kompleksitas pelaksanaan kontrak pintar, menggunakan semacam komisi konstan untuk itu, dan semua proses penerapannya lebih efisien.

Untuk kontrak pintar yang diprogram secara bebas, eksekusinya tidak otomatis. Untuk memulai kontrak pintar seperti itu, di hampir setiap langkah Anda perlu membuat transaksi baru, yang akan memanggil tahap eksekusi berikutnya atau metode kontrak pintar berikutnya, membayar komisi yang sesuai, dan menunggu transaksi dikonfirmasi. Eksekusi mungkin berhasil atau tidak, karena kode kontrak pintar bersifat arbitrer dan beberapa momen tak terduga mungkin muncul, seperti perulangan abadi, kurangnya beberapa parameter dan argumen, pengecualian yang tidak tertangani, dll.

Akun Ethereum

Jenis Akun Ethereum

Mari kita lihat jenis akun apa saja yang ada di platform Ethereum. Hanya ada dua jenis akun di sini dan tidak ada pilihan lain. Tipe pertama disebut akun pengguna, yang kedua adalah akun kontrak. Mari kita cari tahu perbedaannya.

Akun pengguna hanya dikendalikan oleh kunci pribadi dari tanda tangan elektronik. Pemilik akun membuat pasangan kuncinya sendiri untuk tanda tangan elektronik menggunakan algoritma ECDSA (Elliptic Curve Digital Signature Algorithm). Hanya transaksi yang ditandatangani dengan kunci ini yang dapat mengubah status akun ini.

Logika terpisah disediakan untuk akun kontrak pintar. Ini hanya dapat dikontrol oleh kode perangkat lunak yang telah ditentukan sebelumnya yang sepenuhnya menentukan perilaku kontrak pintar: bagaimana ia akan mengelola koinnya dalam keadaan tertentu, atas inisiatif pengguna mana dan dalam kondisi tambahan apa koin ini akan didistribusikan. Jika beberapa poin tidak disediakan oleh pengembang dalam kode program, masalah mungkin timbul. Misalnya, kontrak pintar mungkin menerima keadaan tertentu yang tidak menerima inisiasi eksekusi lebih lanjut dari pengguna mana pun. Dalam hal ini, koin sebenarnya akan dibekukan, karena kontrak pintar tidak mengatur untuk keluar dari keadaan ini.

Bagaimana akun dibuat di Ethereum

Dalam kasus akun pengguna, pemilik secara mandiri membuat pasangan kunci menggunakan ECDSA. Penting untuk dicatat bahwa Ethereum menggunakan algoritma yang sama persis dan kurva elips yang sama persis untuk tanda tangan elektronik seperti Bitcoin, namun alamatnya dihitung dengan cara yang sedikit berbeda. Di sini, hasil hashing ganda tidak lagi digunakan seperti pada Bitcoin, melainkan disediakan hashing tunggal dengan fungsi Keccak dengan panjang 256 bit. Bit paling tidak signifikan dipotong dari nilai yang dihasilkan, yaitu 160 bit paling tidak signifikan dari nilai hash keluaran. Hasilnya, kami mendapatkan alamat di Ethereum. Faktanya, ini membutuhkan 20 byte.

Harap dicatat bahwa pengidentifikasi akun di Ethereum dikodekan dalam hex tanpa menerapkan checksum, tidak seperti Bitcoin dan banyak sistem lainnya, di mana alamatnya dikodekan dalam sistem bilangan basis 58 dengan tambahan checksum. Ini berarti Anda harus berhati-hati saat bekerja dengan pengidentifikasi akun di Ethereum: bahkan satu kesalahan dalam pengidentifikasi dijamin akan menyebabkan hilangnya koin.

Ada fitur penting yaitu akun pengguna di tingkat database umum dibuat pada saat dia menerima pembayaran masuk pertama.

Membuat akun kontrak pintar memerlukan pendekatan yang sangat berbeda. Awalnya, salah satu pengguna menulis kode sumber kontrak pintar, setelah itu kode tersebut dilewatkan melalui kompiler khusus untuk platform Ethereum, memperoleh bytecode untuk mesin virtual Ethereum miliknya. Bytecode yang dihasilkan ditempatkan di bidang transaksi khusus. Ini disertifikasi atas nama akun pemrakarsa. Selanjutnya, transaksi ini disebarkan ke seluruh jaringan dan menempatkan kode kontrak pintar. Komisi untuk transaksi dan, karenanya, untuk pelaksanaan kontrak ditarik dari saldo akun pemrakarsa.

Setiap kontrak pintar harus berisi konstruktornya sendiri (kontrak ini). Mungkin kosong atau mungkin ada isinya. Setelah konstruktor dijalankan, pengidentifikasi akun kontrak pintar dibuat, yang dengannya Anda dapat mengirim koin, memanggil metode kontrak pintar tertentu, dll.

Struktur Transaksi Ethereum

Agar lebih jelas, kita akan mulai melihat struktur transaksi Ethereum dan contoh kode kontrak pintar.

Pengantar Kontrak Cerdas

Transaksi Ethereum terdiri dari beberapa bidang. Yang pertama, nonce, adalah nomor seri tertentu dari transaksi yang berhubungan dengan akun itu sendiri yang mendistribusikannya dan pembuatnya. Hal ini diperlukan untuk membedakan transaksi ganda, yaitu untuk mengecualikan kasus ketika transaksi yang sama diterima dua kali. Dengan menggunakan pengenal, setiap transaksi memiliki nilai hash yang unik.

Berikutnya adalah bidang seperti harga gas. Hal ini menunjukkan harga di mana mata uang dasar Ethereum diubah menjadi gas, yang digunakan untuk membayar pelaksanaan kontrak pintar dan alokasi sumber daya mesin virtual. Apa artinya?

Di Bitcoin, biaya dibayarkan langsung oleh mata uang dasarβ€”Bitcoin itu sendiri. Hal ini dimungkinkan berkat mekanisme sederhana untuk menghitungnya: kami membayar secara ketat untuk jumlah data yang terkandung dalam transaksi. Di Ethereum situasinya lebih rumit, karena sangat sulit untuk mengandalkan volume data transaksi. Di sini, transaksi juga dapat berisi kode program yang akan dieksekusi pada mesin virtual, dan setiap pengoperasian mesin virtual mungkin memiliki kompleksitas yang berbeda. Ada juga operasi yang mengalokasikan memori untuk variabel. Mereka akan memiliki kompleksitasnya sendiri, yang menjadi dasar pembayaran untuk setiap operasi.

Biaya setiap operasi setara gas akan konstan. Ini diperkenalkan secara khusus untuk menentukan biaya tetap setiap operasi. Tergantung pada beban pada jaringan, harga gas akan berubah, yaitu koefisien yang sesuai dengan mata uang dasar yang akan diubah menjadi unit tambahan ini untuk membayar komisi.

Ada satu lagi fitur transaksi di Ethereum: bytecode yang dikandungnya untuk dieksekusi di mesin virtual akan dieksekusi hingga selesai dengan hasil tertentu (berhasil atau gagal) atau hingga sejumlah koin yang dialokasikan habis untuk membayar komisi . Untuk menghindari situasi di mana, jika terjadi kesalahan, semua koin dari akun pengirim dibelanjakan untuk komisi (misalnya, semacam siklus abadi yang dimulai di mesin virtual), bidang berikut ada - mulai gas (sering disebut batas gas) - ini menentukan jumlah maksimum koin yang bersedia dikeluarkan pengirim untuk menyelesaikan transaksi tertentu.

Bidang berikutnya disebut alamat tujuan. Ini termasuk alamat penerima koin atau alamat kontrak pintar tertentu yang metodenya akan dipanggil. Setelah itu tibalah lapangan nilai, dimana dimasukkan jumlah koin yang dikirim ke alamat tujuan.

Berikutnya adalah bidang menarik yang disebut data, di mana seluruh struktur cocok. Ini bukan bidang yang terpisah, tetapi keseluruhan struktur tempat kode untuk mesin virtual ditentukan. Anda dapat menempatkan data sewenang-wenang di sini - ada aturan terpisah untuk ini.

Dan bidang terakhir dipanggil tanda tangan. Ini secara bersamaan berisi tanda tangan elektronik dari penulis transaksi ini dan kunci publik yang akan digunakan untuk memverifikasi tanda tangan ini. Dari kunci publik Anda dapat memperoleh pengidentifikasi akun pengirim transaksi ini, yaitu mengidentifikasi secara unik akun pengirim di sistem itu sendiri. Kami menemukan hal utama tentang struktur transaksi.

Contoh kode kontrak pintar untuk Solidity

Sekarang mari kita lihat lebih dekat kontrak pintar paling sederhana menggunakan sebuah contoh.

contract Bank {
    address owner;
    mapping(address => uint) balances;
    
    function Bank() {
        owner = msg.sender;
    }

    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint amount) public {
        if (balances[msg.sender] >= amount) {
            balances[msg.sender] -= amount;
            msg.sender.transfer(amount);
        }
    }

    function getMyBalance() public view returns(uint) {
        return balances[msg.sender];
    }

    function kill() public {
        if (msg.sender == owner)
            selfdestruct(owner);
    }
}

Di atas adalah kode sumber sederhana yang dapat menyimpan koin pengguna dan mengembalikannya sesuai permintaan.

Jadi, ada kontrak pintar Bank yang menjalankan fungsi berikut: ia mengumpulkan koin di saldonya, yaitu, ketika transaksi dikonfirmasi dan kontrak pintar tersebut ditempatkan, akun baru dibuat yang dapat berisi koin di saldonya; ia mengingat pengguna dan distribusi koin di antara mereka; memiliki beberapa metode untuk mengelola saldo, yaitu dapat mengisi, menarik, dan memeriksa saldo pengguna.

Mari kita lihat setiap baris kode sumber. Kontrak ini memiliki bidang yang konstan. Salah satunya, yang bertipe alamat, disebut pemilik. Di sini kontrak mengingat alamat pengguna yang membuat kontrak pintar ini. Selanjutnya, ada struktur dinamis yang menjaga korespondensi antara alamat dan saldo pengguna.

Ini diikuti dengan metode Bank - yang namanya sama dengan kontrak. Oleh karena itu, ini adalah konstruktornya. Di sini variabel pemilik diberi alamat orang yang menempatkan kontrak pintar ini di jaringan. Ini adalah satu-satunya hal yang terjadi di konstruktor ini. Artinya, pesan dalam hal ini adalah data yang ditransfer ke mesin virtual bersama dengan transaksi yang berisi seluruh kode kontrak ini. Oleh karena itu, msg.sender adalah pembuat transaksi yang menampung kode ini. Dia akan menjadi pemilik kontrak pintar.

Metode deposit memungkinkan Anda mentransfer sejumlah koin ke akun kontrak melalui transaksi. Dalam hal ini, kontrak pintar, yang menerima koin-koin ini, meninggalkannya di neraca, tetapi mencatat dalam struktur saldo siapa sebenarnya pengirim koin-koin ini untuk mengetahui milik siapa koin-koin tersebut.

Metode selanjutnya disebut penarikan dan memerlukan satu parameter - jumlah koin yang ingin ditarik seseorang dari bank ini. Ini memeriksa apakah ada cukup koin di saldo pengguna yang memanggil metode ini untuk mengirimnya. Jika jumlahnya cukup, maka kontrak pintar itu sendiri mengembalikan jumlah koin tersebut ke pemanggil.

Berikutnya adalah metode pengecekan saldo pengguna saat ini. Siapa pun yang memanggil metode ini akan digunakan untuk mengambil saldo ini dalam kontrak pintar. Perlu dicatat bahwa pengubah metode ini adalah tampilan. Artinya metode itu sendiri tidak mengubah variabel kelasnya dengan cara apa pun dan sebenarnya hanya metode baca. Tidak ada transaksi terpisah yang dibuat untuk memanggil metode ini, tidak ada biaya yang dibayarkan, dan semua perhitungan dilakukan secara lokal, setelah itu pengguna menerima hasilnya.

Metode kill diperlukan untuk menghancurkan status kontrak pintar. Dan disini ada pemeriksaan tambahan apakah pemanggil metode ini adalah pemilik kontrak ini. Jika demikian, maka kontrak akan hancur dengan sendirinya, dan fungsi penghancuran mengambil satu parameter - pengidentifikasi akun ke mana kontrak akan mengirimkan semua koin yang tersisa di saldonya. Dalam hal ini, sisa koin akan otomatis masuk ke alamat pemilik kontrak.

Bagaimana cara kerja node penuh di jaringan Ethereum?

Mari kita lihat secara skematis bagaimana kontrak pintar tersebut dijalankan pada platform Ethereum dan cara kerja node jaringan lengkap.

Pengantar Kontrak Cerdas

Sebuah node penuh di jaringan Ethereum harus memiliki setidaknya empat modul.
Yang pertama, seperti halnya protokol terdesentralisasi lainnya, adalah modul jaringan P2P - modul untuk koneksi jaringan dan bekerja dengan node lain, tempat blok, transaksi, dan informasi tentang node lain dipertukarkan. Ini adalah komponen tradisional untuk semua mata uang kripto yang terdesentralisasi.

Selanjutnya, kita memiliki modul untuk menyimpan data blockchain, memproses, memilih cabang prioritas, menambahkan blok, memutuskan tautan blok, memvalidasi blok ini, dll.

Modul ketiga disebut EVM (mesin virtual Ethereum) - ini adalah mesin virtual yang menerima bytecode dari transaksi Ethereum. Modul ini mengambil status terkini dari akun tertentu dan membuat perubahan pada statusnya berdasarkan bytecode yang diterima. Versi mesin virtual pada setiap node jaringan harus sama. Perhitungan yang terjadi pada setiap node Ethereum persis sama, tetapi terjadi secara asinkron: seseorang memeriksa dan menerima transaksi ini lebih awal, yaitu mengeksekusi semua kode yang terkandung di dalamnya, dan seseorang kemudian. Oleh karena itu, ketika suatu transaksi dibuat, transaksi tersebut didistribusikan ke jaringan, node menerimanya, dan pada saat verifikasi, dengan cara yang sama seperti Bitcoin Script dijalankan dalam Bitcoin, bytecode mesin virtual dieksekusi di sini.

Suatu transaksi dianggap terverifikasi jika semua kode yang terkandung di dalamnya telah dieksekusi, keadaan baru akun tertentu telah dibuat dan disimpan hingga jelas apakah transaksi tersebut telah diterapkan atau belum. Jika transaksi diterapkan, maka keadaan ini dianggap tidak hanya selesai, tetapi juga terkini. Terdapat database yang menyimpan status setiap akun untuk setiap node jaringan. Karena kenyataan bahwa semua penghitungan dilakukan dengan cara yang sama dan status blockchainnya sama, database yang berisi status semua akun juga akan sama untuk setiap node.

Mitos dan keterbatasan kontrak pintar

Adapun batasan yang ada untuk platform kontrak pintar yang mirip dengan Ethereum, dapat dikutip sebagai berikut:

  • eksekusi kode;
  • mengalokasikan memori;
  • data blockchain;
  • mengirim pembayaran;
  • membuat kontrak baru;
  • hubungi kontrak lainnya.

Mari kita lihat batasan yang diberlakukan pada mesin virtual, dan oleh karena itu, hilangkan beberapa mitos tentang kontrak pintar. Pada mesin virtual, yang tidak hanya ada di Ethereum, tetapi juga di platform serupa, Anda dapat melakukan operasi logis yang benar-benar sewenang-wenang, yaitu menulis kode dan akan dieksekusi di sana, Anda juga dapat mengalokasikan memori. Namun, biayanya dibayarkan secara terpisah untuk setiap operasi dan untuk setiap unit memori tambahan yang dialokasikan.

Selanjutnya, mesin virtual dapat membaca data dari database blockchain untuk menggunakan data ini sebagai pemicu untuk mengeksekusi satu atau beberapa logika kontrak pintar. Mesin virtual dapat membuat dan mengirim transaksi, dapat membuat kontrak baru dan memanggil metode kontrak pintar lain yang sudah dipublikasikan di jaringan: yang sudah ada, tersedia, dll.

Mitos yang paling umum adalah bahwa kontrak pintar Ethereum dapat menggunakan informasi dari sumber daya Internet apa pun sesuai ketentuannya. Kenyataannya adalah bahwa mesin virtual tidak dapat mengirimkan permintaan jaringan ke sumber informasi eksternal di Internet, yaitu, tidak mungkin untuk menulis kontrak pintar yang akan mendistribusikan nilai antar pengguna tergantung pada, katakanlah, seperti apa cuaca di luar, atau siapa yang memenangkan suatu kejuaraan, atau berdasarkan kejadian lain yang terjadi di dunia luar, karena informasi tentang kejadian tersebut tidak ada dalam database platform itu sendiri. Artinya, tidak ada apa pun di blockchain tentang hal ini. Jika tidak muncul di sana, maka mesin virtual tidak dapat menggunakan data ini sebagai pemicu.

Kekurangan Ethereum

Mari kita daftar yang utama. Kerugian pertama adalah adanya beberapa kesulitan dalam merancang, mengembangkan dan menguji kontrak pintar di Ethereum (Ethereum menggunakan bahasa Soliditas untuk menulis kontrak pintar). Memang, praktik menunjukkan bahwa persentase yang sangat besar dari semua kesalahan disebabkan oleh faktor manusia. Hal ini sebenarnya berlaku untuk kontrak pintar Ethereum yang sudah ditulis dan memiliki kompleksitas rata-rata atau lebih tinggi. Jika untuk kontrak pintar sederhana kemungkinan kesalahannya kecil, maka dalam kontrak pintar yang kompleks sangat sering terdapat kesalahan yang menyebabkan pencurian dana, pembekuannya, penghancuran kontrak pintar dengan cara yang tidak terduga, dll. Banyak kasus seperti itu sudah terjadi. diketahui.

Kerugian kedua adalah mesin virtual itu sendiri tidak sempurna, karena juga ditulis oleh manusia. Ia dapat menjalankan perintah sewenang-wenang, dan di situlah letak kerentanannya: sejumlah perintah dapat dikonfigurasi dengan cara tertentu yang akan menimbulkan konsekuensi yang tidak terduga sebelumnya. Ini adalah area yang sangat kompleks, namun sudah ada beberapa penelitian yang menunjukkan bahwa kerentanan ini ada pada versi jaringan Ethereum saat ini dan dapat menyebabkan kegagalan banyak kontrak pintar.

Kesulitan besar lainnya, dapat dianggap sebagai kerugian. Itu terletak pada kenyataan bahwa Anda secara praktis atau teknis dapat sampai pada kesimpulan bahwa jika Anda mengkompilasi bytecode kontrak yang akan dieksekusi pada mesin virtual, Anda dapat menentukan beberapa urutan operasi tertentu. Jika dilakukan bersamaan, operasi ini akan membebani mesin virtual secara signifikan dan memperlambatnya secara tidak proporsional dengan biaya yang dibayarkan untuk melakukan operasi ini.

Di masa lalu, sudah ada periode dalam pengembangan Ethereum, ketika banyak orang yang memahami secara detail pengoperasian mesin virtual menemukan kerentanan tersebut. Faktanya, transaksi membayar biaya yang sangat kecil, namun praktis memperlambat seluruh jaringan. Masalah-masalah ini sangat sulit untuk dipecahkan, karena pertama-tama perlu untuk menentukannya, kedua, untuk menyesuaikan harga untuk melakukan operasi ini dan, ketiga, untuk melakukan hard fork, yang berarti memperbarui semua node jaringan ke versi baru. perangkat lunak, dan kemudian aktivasi perubahan ini secara bersamaan.

Adapun Ethereum, banyak penelitian telah dilakukan, banyak pengalaman praktis telah diperoleh: baik positif maupun negatif, namun masih ada kesulitan dan kerentanan yang masih harus diatasi.

Nah, bagian tematik artikel sudah selesai, mari kita beralih ke pertanyaan yang cukup sering muncul.

FAQ

β€” Jika semua pihak dalam kontrak pintar yang ada ingin mengubah ketentuan, dapatkah mereka membatalkan kontrak pintar ini menggunakan multisig, dan kemudian membuat kontrak pintar baru dengan ketentuan pelaksanaannya yang diperbarui?

Jawabannya di sini ada dua. Mengapa? Karena di satu sisi, kontrak pintar didefinisikan satu kali dan tidak lagi menyiratkan perubahan apa pun, dan di sisi lain, kontrak tersebut dapat memiliki logika yang telah ditulis sebelumnya yang menyediakan perubahan total atau sebagian pada kondisi tertentu. Artinya, jika Anda ingin mengubah sesuatu dalam kontrak pintar Anda, maka Anda harus menentukan ketentuan di mana Anda dapat memperbarui ketentuan ini. Oleh karena itu, hanya dengan cara yang bijaksana pembaruan kontrak dapat dilakukan. Namun di sini juga, Anda bisa mendapat masalah: membuat kesalahan dan mendapatkan kerentanan yang sesuai. Oleh karena itu, hal-hal seperti itu perlu dirancang dan diuji dengan sangat rinci dan cermat.

β€” Bagaimana jika mediator mengadakan perjanjian dengan salah satu pihak yang berpartisipasi: escrow atau smart contract? Apakah mediator diperlukan dalam kontrak pintar?

Seorang mediator tidak diperlukan dalam kontrak pintar. Itu mungkin tidak ada. Jika, dalam kasus escrow, mediator mengadakan persekongkolan dengan salah satu pihak, maka ya, skema ini kemudian kehilangan nilainya secara drastis. Oleh karena itu, mediator dipilih sedemikian rupa sehingga dipercaya oleh semua pihak yang terlibat dalam proses ini pada saat yang bersamaan. Oleh karena itu, Anda tidak akan mentransfer koin ke alamat multi-tanda tangan dengan mediator yang tidak Anda percayai.

β€” Apakah mungkin dengan satu transaksi Ethereum untuk mentransfer banyak token berbeda dari alamat Anda ke alamat target berbeda, misalnya, alamat pertukaran tempat token ini diperdagangkan?

Ini adalah pertanyaan yang bagus dan ini menyangkut model transaksi Ethereum dan perbedaannya dengan model Bitcoin. Dan perbedaannya sangat radikal. Jika dalam model transaksi Ethereum Anda hanya mentransfer koin, maka koin tersebut hanya ditransfer dari satu alamat ke alamat lain, tidak ada perubahan, hanya jumlah tertentu yang Anda tentukan. Dengan kata lain, ini bukanlah model keluaran yang tidak terpakai (UTXO), namun model akun dan saldo terkait. Secara teori dimungkinkan untuk mengirim beberapa token berbeda dalam satu transaksi sekaligus jika Anda menulis kontrak pintar yang rumit, namun Anda masih harus melakukan banyak transaksi, membuat kontrak, lalu mentransfer token dan koin ke dalamnya, lalu memanggil metode yang sesuai. . Ini membutuhkan usaha dan waktu, jadi dalam praktiknya tidak seperti itu dan semua pembayaran dalam Ethereum dilakukan dalam transaksi terpisah.

β€” Salah satu mitos tentang platform Ethereum adalah tidak mungkin menggambarkan kondisi yang bergantung pada data sumber daya Internet eksternal, lalu apa yang harus dilakukan?

Solusinya adalah kontrak pintar itu sendiri dapat menyediakan satu atau lebih oracle tepercaya, yang mengumpulkan data tentang keadaan di dunia luar dan mengirimkannya ke kontrak pintar melalui metode khusus. Kontraknya sendiri menganggap data yang diterima dari pihak terpercaya adalah benar. Untuk keandalan yang lebih baik, cukup pilih sekelompok besar oracle dan minimalkan risiko kolusi mereka. Kontrak itu sendiri mungkin tidak memperhitungkan data dari ramalan yang bertentangan dengan mayoritas.

Salah satu ceramah kursus online tentang Blockchain dikhususkan untuk topik ini - β€œPengantar Kontrak Cerdas".

Sumber: www.habr.com

Tambah komentar