Kontrak cerdas: Yang baik, yang buruk dan yang malas

Mengapa blockchain pribadi tidak ingin menjalankan kode

Saya bukan penggemar istilah "kontrak pintar". Sebagai permulaan, ini telah digunakan oleh begitu banyak orang untuk begitu banyak hal yang berbeda, sehingga kita mungkin harus melarangnya sepenuhnya. Sebagai contoh, referensi pertama yang diketahui adalah dari tahun 1997, ketika Nick Szabo menggunakannya untuk menggambarkan benda-benda fisik itu ubah perilaku mereka berdasarkan beberapa data. Baru-baru ini, istilah tersebut telah digunakan untuk kebalikannya: untuk menggambarkan perhitungan pada blockchain yang dipengaruhi oleh peristiwa eksternal seperti cuaca. Untuk sekarang mari kita kesampingkan kedua arti ini.

Saya ingin fokus di sini pada "kontrak pintar" dalam arti perhitungan tujuan umum yang terjadi pada blockchain. Makna ini dipopulerkan oleh EthereumSiapa, laporan resmi dengan judul "Kontrak Cerdas Generasi Berikutnya dan Platform Aplikasi Terdesentralisasi". Sebagai hasil dari perhatian yang diterima Ethereum, makna ini telah menjadi yang dominan, dengan bank (dan lainnya) mengerjakan bukti konsep kontrak pintar. Tentu saja, karena kita berbicara tentang lembaga keuangan yang diatur, ini sebagian besar dalam konteks blockchain pribadi atau berizin, yang memiliki sekelompok peserta teridentifikasi terbatas. Untuk alasan yang sekarang dimengerti, blockchain publik, untuk semua kejeniusan mereka, belum cocok untuk keperluan perusahaan.

Jadi apakah masa depan cerah untuk kontrak pintar di blockchains pribadi? Yah, agak, tapi tidak juga. Soalnya, masalahnya adalah:

Dalam blockchain pribadi, kontrak pintar menggabungkan empat ide bagus dengan satu ide buruk.

Jadi apa ide bagusnya? (a) mengungkapkan logika bisnis sebagai program komputer, (b) mewakili peristiwa yang memicu logika itu sebagai pesan ke program, (c) menggunakan tanda tangan digital untuk membuktikan siapa yang mengirim pesan, dan (d) menempatkan semua hal di atas sebuah blockchain.

Dan yang buruk? Menjalankan setiap program untuk setiap pesan di setiap node blockchain. Dengan kata lain, membuat eksekusi dari semua program, pekerjaan blockchain, bukan hanya menggunakannya sebagai penyimpanan untuk program dan pesan. Namun eksekusi global ini adalah alasan mengapa Ethereum dikembangkan.

Jika Anda mengetahui sifat deterministik dari perhitungan, tahu tentang menghentikan masalah, dan pahami caranya ketergantungan data mencegah konkurensi maka Anda mungkin sudah diyakinkan. Tetapi jika tidak, buatlah diri Anda kopi, ambil napas dalam-dalam, dan ikuti saya ke lubang kelinci ...

Memahami Ethereum

Untuk memahami kontrak pintar bergaya Ethereum, kita perlu mulai dengan bitcoin, blockchain publik pertama (dan masih paling populer). Blockchain bitcoin pada awalnya dirancang hanya untuk satu hal: memindahkan mata uang bitcoin dari satu pemilik ke pemilik lainnya. Tapi setelah itu aktif dan berjalan, orang-orang mulai menyematkan "metadata" dalam transaksi untuk melayani tujuan lain, seperti Aset digital dan notaris dokumen. Sementara beberapa bitcoiners berjuang aplikasi ini, suatu mekanisme resmi untuk metadata diperkenalkan pada Maret 2014, dengan penggunaan tumbuh secara eksponensial semenjak.

Selain proyek yang dibangun di atas bitcoin blockchain, banyak blockchain publik generasi berikutnya dikembangkan dan diluncurkan, seperti nxt, Bitshares, Ripple dan terkenal. Ini dirancang dari bawah ke atas untuk mendukung berbagai kegiatan yang lebih luas, seperti aset yang dibuat pengguna, pertukaran desentralisasi dan pinjaman yang dijaminkan. Masing-masing blockchains ini memiliki serangkaian fitur yang berbeda, seperti yang ditentukan oleh pengembangnya, dan masing-masing harus ditingkatkan oleh semua penggunanya ketika fitur baru ditambahkan. Segalanya mulai agak berantakan.

Setelah terlibat dalam beberapa proyek ini, Vitalik Buterin mengajukan pertanyaan sederhana namun brilian: Daripada banyak blockchain khusus aplikasi, mengapa tidak memiliki satu blockchain publik yang dapat diprogram untuk melakukannya apapun yang kita inginkan? รœber-blockchain ini akan dapat diperpanjang tanpa batas, hanya dibatasi oleh imajinasi mereka yang menggunakannya. Dunia para penggemar crypto hampir secara bulat diyakinkan oleh ide kuat ini. Jadi, dengan $ 18 juta dalam pendanaan kerumunan dan dengan sangat gembira, Ethereum lahir.

Ethereum adalah blockchain publik baru dengan cryptocurrency terkait yang disebut "ether" ratusan yang datang sebelumnya. Tapi tidak seperti blockchain lainnya, Ethereum memungkinkan siapa saja untuk membuat "kontrak" di dalam blockchain. Kontrak adalah program komputer dengan database miniatur terkait, yang hanya dapat dimodifikasi oleh program yang memilikinya. Jika pengguna blockchain ingin mengubah database, mereka harus mengirim pesan yang ditandatangani secara digital ke kontraknya. Kode dalam kontrak memeriksa pesan ini untuk memutuskan apakah dan bagaimana bereaksi. (Ini "enkapsulasiKode dan data juga merupakan fondasi Berorientasi pada objek pemrograman.)

Kontrak Ethereum dapat ditulis dalam salah satu dari beberapa bahasa pemrograman baru, seperti Kepadatan dan Ular. Seperti kebanyakan bahasa pemrograman, ini Turing lengkap, artinya mereka dapat mengekspresikan perhitungan tujuan umum apa pun. Fitur utama dari bahasa lengkap Turing adalah struktur lingkaran, yang melakukan operasi berulang kali hingga beberapa kondisi terpenuhi. Misalnya, satu loop dapat digunakan untuk mencetak angka dari satu hingga satu juta, tanpa memerlukan sejuta baris kode. Demi efisiensi, program yang ditulis untuk Ethereum adalah dikompilasi (Yaitu dikonversi) menjadi lebih kompak bytecode sebelum disimpan di rantai. Node Ethereum kemudian mengeksekusi bytecode ini dalam a mesin virtual, yang pada dasarnya adalah komputer simulasi yang berjalan di dalam komputer asli.

Ketika kontrak Ethereum dibuat di blockchain, ia mengatur keadaan awal dari basis datanya. Kemudian berhenti, menunggu dengan sopan sampai dipanggil. Ketika seorang pengguna blockchain (atau kontrak lain) mengirimkannya pesan dalam suatu transaksi, kontrak tersebut akan beraksi. Bergantung pada kode di dalamnya, ia dapat mengidentifikasi sumber pesan, memicu kontrak lain, memodifikasi database-nya, dan / atau mengirim kembali respons ke penelepon. Semua langkah ini dilakukan secara independen pada setiap node di jaringan, dengan hasil yang identik.

Sebagai contoh, Ethereum sederhana kontrak sub-mata uang memelihara database saldo pengguna untuk aset tertentu. Jika menerima pesan untuk mentransfer dana dari Alice ke Bob, ia akan (a) memeriksa pesan yang ditandatangani oleh Alice, (b) memeriksa apakah Alice memiliki dana yang cukup, (c) mentransfer dana dari Alice ke akun Bob di database dan (d) menjawab bahwa operasi berhasil. Tentu saja, kita tidak memerlukan Ethereum untuk itu, karena dengan blockchain bergaya bitcoin sederhana dukungan aset asli dapat melakukan hal yang sama. Ethereum benar-benar hadir dengan logika bisnis multi-tahap yang kompleks, seperti crowdfunding, pertukaran desentralisasi, dan struktur tata kelola hirarkis. Atau setidaknya, janji itu pergi.

Memecahnya

Sekarang kita tahu cara kerja kontrak pintar Ethereum, kita dapat memecahnya menjadi lima bagian:

  1. Mengekspresikan logika bisnis sebagai program komputer.
  2. Merupakan peristiwa yang memicu logika itu sebagai pesan ke program.
  3. Menggunakan tanda tangan digital untuk membuktikan siapa yang mengirim pesan.
  4. Menempatkan program, pesan, dan tanda tangan di blockchain.
  5. Menjalankan setiap program untuk setiap pesan di setiap node.

Untuk mengulangi apa yang saya katakan di awal, saya percaya bahwa bagian 1 hingga 4 adalah ide yang sangat bagus. Mari kita mulai dengan dua yang pertama (yang, omong-omong, bukan hal baru). Berbeda dengan kontrak hukum yang bisa dimiliki perbedaan interpretasi, program komputer tidak ambigu. Untuk program tertentu dalam bahasa pemrograman yang terdefinisi dengan baik, input yang sama selalu mengarah ke output yang sama. Jadi jika beberapa logika bisnis diekspresikan sebagai program komputer, dan peristiwa direpresentasikan sebagai pesan untuk program itu, maka hasil bisnis ditetapkan di atas batu. Memang, sifat deterministik dari komputasi ini keserampangan masalah sulit dalam ilmu komputer, dan bahkan para ahli di Google pun bisa salah.

Bagaimana dengan tanda tangan digital dan blockchains? Ini menghindari perlunya otoritas pusat untuk menentukan pesan mana yang dikirim, dalam urutan apa, dan oleh siapa. Sebaliknya, setiap peserta membuat pasangan kunci pribadi dan publik, dan mendistribusikan kunci publiknya sekali kepada peserta lainnya. Setelah itu, mereka menandatangani setiap pesan dengan kunci privat mereka sebelum mendistribusikan pesan itu ke seluruh jaringan. Peserta lain kemudian dapat memverifikasi sumber pesan menggunakan kunci publik pengirim saja. Ini barang kriptografi yang pintar. Terakhir, dengan meletakkan program dan pesan yang ditandatangani pada sebuah blockchain, kami dapat memastikan bahwa setiap peserta memiliki pandangan yang sama tentang siapa melakukan apa dan kapan. Dikombinasikan dengan perhitungan deterministik, ini berarti peserta tidak dapat tidak setuju atas hasil bisnis akhir.

Tetapi bagaimana dengan ide terakhir, setiap node menjalankan setiap program untuk setiap pesan? Di sini kita sampai pada bagian yang diperdebatkan. Karena meskipun eksekusi global ini mungkin bagus untuk dilakukan, itu juga tidak perlu. Karena komputasi bersifat deterministik, tidak ada bedanya apakah suatu program dijalankan oleh satu node, setiap node, atau beberapa proses eksternal. Tidak masalah apakah ini terjadi secara real time, sesuai permintaan, atau 10 tahun kemudian. Hasil perhitungan akan selalu sama. Dan jika karena alasan tertentu bukan ini masalahnya, ini hanya dapat disebabkan oleh a masalah dalam perangkat lunak atau jaringan blockchain.

Masalah dengan perhitungan

Jika tidak masalah di mana perhitungan dilakukan, mengapa tidak lakukan dimana-mana? Ya, ternyata begitu program komputer tidak dapat diprediksi. Betapapun polosnya penampilan mereka, mereka butuh waktu lama untuk lari. Dan terkadang, mereka terus berlari selamanya. Pertimbangkan contoh klasik berikut (dikenal sebagai file LCG):

  1. set x ke nomor satu digit pilihan Anda
  2. set y untuk 123 * x + 567
  3. set x ke dua digit terakhir yyaitu kamu modulo 100
  4. If x lebih dari 2 lalu kembali ke langkah 2
  5. Jika tidak, hentikan dan keluarkan nilai x

Cukup sederhana, bukan? Jadi, inilah pertanyaan untuk Anda: Apakah program ini akan pernah selesai? Atau akan macet di file loop tak terbatas? Tidak begitu yakin? Baiklah saya biarkan Anda keluar dari penderitaan Anda: Itu tergantung pada nilai awal x.

If x is 0, 1, 2, 5, 6, 7 or 8, program berhenti cukup cepat. Tapi jika x is 3, 4 or 9, itu berlanjut tanpa batas. Tidak percaya padaku Buka Excel dan coba sendiri (Anda memerlukan fungsi "MOD").

Jika Anda tidak dapat memprediksinya hanya dengan melihat kodenya, jangan merasa terlalu buruk. Karena ini tidak hanya sulit bagi orang, tidak mungkin untuk komputer. Masalah menentukan apakah suatu program akan menyelesaikan eksekusi disebut menghentikan masalah. Pada tahun 1936, Alan Turing, dari "Turing complete" dan The Imitation Permainan ketenaran, membuktikan bahwa itu tidak dapat diselesaikan untuk kasus umum. Kecuali pengecualian sepele, satu-satunya cara untuk mengetahui apakah program akan selesai dijalankan adalah menjalankannya selama yang dibutuhkan, dan itu bisa selamanya.

Bagi kita yang lebih suka hidup tanpanya layar biru kematian dan bola pantai berputar, itu semua agak merepotkan. Tapi hidup dengan itu kami lakukan dan, luar biasa, sebagian besar perangkat lunak bekerja dengan lancar di sebagian besar waktu. Dan jika tidak, sistem operasi modern seperti Windows melindungi kita dari kode pelarian dengan membiarkan kita menghentikan program secara manual. Namun hal yang sama tidak dapat dilakukan pada blockchain seperti Ethereum. Jika kita mengizinkan node individu untuk menghentikan komputasi sesuka hati, node yang berbeda akan memiliki pendapat berbeda tentang hasil dari komputasi tersebut. Dengan kata lain, file konsensus jaringan akan rusak. Jadi apa yang harus dilakukan dengan blockchain?

Jawaban Ethereum didasarkan pada biaya transaksi, juga dikenal sebagai gas. Pengirim setiap transaksi negara untuk perhitungan yang dipicu, dan pembayaran ini dikumpulkan oleh penambang yang mengonfirmasinya dalam satu blok. Lebih tepatnya, setiap transaksi Ethereum menyatakan di depan berapa banyak "eter" pengirim yang dapat digunakan untuk memprosesnya. Biaya dibelanjakan secara bertahap saat kontrak dijalankan, selangkah demi selangkah, di dalam Mesin Virtual Ethereum. Jika transaksi kehabisan biaya sebelum selesai dieksekusi, perubahan database apa pun dikembalikan dan biaya tidak dikembalikan. Jika transaksi berhasil diselesaikan, semua biaya yang tersisa dikembalikan ke pengirimnya. Dengan cara ini, transaksi hanya dapat membebani jaringan sejauh mereka bersedia membayarnya. Tidak diragukan lagi ini adalah solusi ekonomi yang rapi, tetapi itu membutuhkan mata uang blockchain asli agar dapat berfungsi.

Kontrak pintar vs konkurensi

Jika gas dapat mencegah penghitungan yang tidak terkendali, apakah kontrak pintar mendapatkan lampu hijau? Ya, jangan terlalu cepat, karena ada masalah lain dengan kontrak pintar yang perlu kita bicarakan:

Kontrak pintar bekerja dengan buruk untuk hasil transaksi yang tinggi.

Concurrency adalah salah satu masalah paling mendasar dalam arsitektur komputer. Suatu sistem memiliki konkurensi yang baik jika memungkinkan beberapa proses terjadi secara bersamaan dan dalam urutan apa pun. Sistem bersamaan mengurangi penundaan dan memungkinkan throughput yang jauh lebih tinggi secara keseluruhan, dengan memanfaatkan teknologi yang optimal seperti penjadwalan proses, proses paralel dan partisi data. Begitulah cara Google mencari 30 triliun halaman web hampir 100,000 kali per detik.

Dalam sistem komputer mana pun, sekumpulan transaksi hanya dapat diproses secara bersamaan jika tidak bergantung, atau mengganggu, satu sama lain. Jika tidak, urutan pemrosesan yang berbeda dapat memberikan hasil yang sama sekali berbeda. Sekarang ingatlah bahwa kontrak pintar memiliki database terkait, dan itu melakukan komputasi tujuan umum termasuk loop. Artinya, sebagai tanggapan atas pesan tertentu, kontrak pintar mungkin membaca atau menulis setiap informasi dalam database-nya. Misalnya, jika ia mengelola sub-mata uang, ia mungkin memutuskan untuk membayar sejumlah bunga kepada setiap pemegang mata uang itu. Tentu saja, tidak selalu demikian. Tetapi masalahnya adalah: sebelum menjalankan program kontrak untuk pesan tertentu, node blockchain tidak dapat memprediksi bagian mana dari database kontrak yang akan digunakan. Juga tidak dapat dikatakan apakah subset ini mungkin berbeda dalam keadaan yang berbeda. Dan jika satu kontrak dapat memicu kontrak lainnya, masalah ini meluas ke seluruh konten setiap basis data dari setiap kontrak. Jadi setiap transaksi harus diperlakukan seolah-olah bisa saling mengganggu. Dalam istilah database, setiap transaksi membutuhkan kunci global.

Sekarang pikirkan tentang dunia tempat node blockchain berada. Transaksi datang dari rekan yang berbeda, tanpa urutan tertentu, karena tidak ada antrian yang dikelola secara terpusat. Selain itu, dengan interval rata-rata antara 12 detik (Ethereum) dan 10 menit (bitcoin), blok baru masuk, mengonfirmasi serangkaian transaksi dalam urutan tertentu. Node mungkin telah melihat sebagian besar transaksi blok, tetapi beberapa mungkin baru. Bagaimanapun, urutan transaksi di blok tidak mungkin mencerminkan urutan transaksi tersebut tiba secara individual. Dan karena urutan transaksi mungkin mempengaruhi hasilnya, ini berarti transaksi tidak dapat diproses sampai pesanan mereka di blockchain dikonfirmasi.

Sekarang, memang benar bahwa transaksi bitcoin yang belum dikonfirmasi mungkin perlu dibalik karena a belanja ganda. Tapi transaksi Ethereum yang belum dikonfirmasi tidak memiliki hasil yang dapat diprediksi sama sekali. Memang, implementasi Ethereum saat ini bahkan tidak memproses transaksi yang tidak dibatasi. Tetapi jika node Ethereum adalah untuk memproses transaksi dengan segera, ia masih perlu memutar ulang dan memutar ulang dalam urutan yang benar saat blok masuk. Pemrosesan ulang ini membuang-buang tenaga, dan mencegah proses eksternal dari secara bersamaan membaca basis data Ethereum ketika sedang berjalan. (Agar adil, harus dicatat bahwa bitcoin itu implementasi referensi juga memundurkan dan memutar ulang transaksi saat blok masuk, tetapi ini hanya disebabkan oleh kurangnya optimisasi.)

Jadi ada apa dengan model transaksi bitcoin yang memungkinkan eksekusi out-of-order? Dalam bitcoin, setiap transaksi secara eksplisit menyatakan hubungannya dengan transaksi lain. Ini memiliki satu set input dan output, di mana setiap input terhubung ke output dari transaksi sebelumnya yang "dibelanjakan". Tidak ada ketergantungan lain yang perlu dikhawatirkan. Selama (a) dua transaksi bitcoin tidak mencoba untuk mengeluarkan output yang sama, dan (b) output dari satu tidak mengarah ke input yang lain, node bitcoin dapat memastikan bahwa transaksinya independen, dan itu dapat memprosesnya dalam urutan apa pun. Posisi terakhir mereka di blockchain tidak penting sama sekali.

Untuk menggunakan terminologi ilmu komputer formal, transaksi Ethereum harus benar-benar dipesan, artinya urutan relatif antara setiap pasangan transaksi harus ditentukan. Sebaliknya, transaksi bitcoin membentuk a grafik asiklik diarahkan yang mana saja dipesan sebagian, yang berarti bahwa beberapa ambiguitas dalam pemesanan transaksi diperbolehkan. Dalam hal konkurensi, ini membuat semua perbedaan di dunia.

Untuk melihatnya secara praktis, ada banyak pembicaraan tentang blockchain pribadi di perusahaan. Tetapi blockchain pribadi hanyalah a database terdistribusi dengan beberapa fitur tambahan. Dan jika Anda mencoba menjual database kelas perusahaan hari ini yang tidak mendukung konkurensi, Anda akan ditertawakan keluar dari ruangan. Sama menggelikan akan menjadi saran bahwa node individu harus menunggu 12 detik sebelum melihat hasil transaksi sendiri. Seperti Vitalik sendiri baru-baru ini mentweet:

Bagi kami di Coin Sciences, ini bukan hanya masalah akademis, karena kami perlu memutuskan apakah dan bagaimana memasukkan kontrak pintar ke dalamnya MultiRantai. Anehnya, meskipun ada ratusan permintaan fitur dan pertanyaan kami telah menerima sejauh ini, hanya dua yang terkait dengan kontrak pintar, dan bahkan dalam bentuk yang lebih lemah dari yang disediakan Ethereum. Jadi, sementara kami tetap berpikiran terbuka, mungkin ternyata kontrak pintar tidak menyelesaikan masalah nyata apa pun bagi pengguna kami.

Mendukung Ethereum

Jika Anda hanya tertarik pada satu sisi argumen, Anda dapat berhenti membaca di sini. Tetapi Anda mungkin bertanya-tanya: Apakah pencipta Ethereum bodoh? Mengapa mereka membutuhkan eksekusi global dalam database terdistribusi publik, jika setiap node dapat dengan mudah memilih program mana yang ingin dijalankan? Apakah ada alasan bagus untuk cara Ethereum?

Sebenarnya, jika kita berbicara tentang blockchain publik, saya yakin ada. Tetapi untuk memahami alasan ini, kita perlu memikirkan dinamika jaringan Ethereum itu sendiri.

Mencegah spam transaksi

Blockchain dikelola oleh jaringan peer-to-peer, di mana setiap node terhubung ke subset acak dari node lain. Ketika sebuah transaksi baru dibuat di satu node, transaksi itu menyebar dengan cepat dan sembarangan ke node lain melalui proses yang disebut "relaying". Dalam jaringan publik terbuka, siapa pun dapat membuat transaksi, jadi kami membutuhkan cara untuk melindungi diri spam transaksi yang dapat membebani sistem. Karena jaringan terdesentralisasi, ini hanya dapat dicapai oleh node individu yang menilai transaksi baru saat transaksi masuk, dan memutuskan apakah akan merelaynya atau tidak. Meskipun mekanisme ini tidak dapat mencegah spammer luar biasa sebuah node individual, ia melindungi jaringan secara keseluruhan.

Dalam jaringan publik, ketika sebuah node memutuskan apakah akan merelay transaksi baru, salah satu kriteria utamanya adalah rasio antara biayanya dan biayanya ke jaringan. Dalam kasus bitcoin, biaya ini terutama didasarkan pada ukuran mentah transaksi dalam byte. Di Ethereum, a formula yang lebih kompleks digunakan, berdasarkan upaya komputasi yang akan dikonsumsi transaksi. Bagaimanapun, biaya bertindak sebagai mekanisme berbasis pasar untuk pencegahan spam transaksi.

Tetapi bagaimana node mengetahui apakah pengirim memiliki dana yang cukup untuk menutupi biaya yang mereka tawarkan? Dalam kasus Ethereum, saldo "eter" setiap pengguna dipengaruhi oleh hasil transaksi sebelumnya, sejak kontrak dapat menghabiskan dan membayar eter. Jadi tanpa benar-benar menjalankan semua program untuk semua pesan sebelumnya, sebuah node Ethereum tidak memiliki cara untuk mengetahui saldo terbaru pengguna. Oleh karena itu, ia tidak dapat menilai apakah suatu transaksi harus diteruskan ke node lain. Dan tanpa itu, jaringan terbuka bisa dihancurkan secara sepele.

Bukti data yang ringkas

Dalam blockchain, blok sebagian besar diisi oleh transaksi yang mereka konfirmasikan. Namun setiap blok juga memiliki โ€œheaderโ€ yang ringkas, yang berisi informasi penting seperti stempel waktu dan tautan ke blok sebelumnya. Untuk blockchain publik berdasarkan bukti hashing kerja, masukan untuk algoritme hashing adalah header blok ini saja. Ini berarti bahwa otoritas rantai dapat dinilai oleh "klien ringan" tanpa mengunduh sebagian besar kontennya. Misalnya, pada November 2015, set lengkap header bitcoin berukuran 30 MB, dibandingkan dengan 45 GB untuk rantai penuh. Itu rasio 1500: 1, membuat perbedaan penting untuk perangkat seluler dengan bandwidth dan penyimpanan terbatas.

Header dari setiap blok Ethereum berisi "root negara", yang mengambil sidik jari status rantai setelah memproses transaksi di blok itu. Antara lain, status ini mencakup konten dari setiap database kontrak, dengan sidik jari yang dihitung secara efisien menggunakan file pohon fungsi hash satu arah. Perubahan sekecil apa pun pada database kontrak akan mengarah ke root status yang sama sekali berbeda, jadi root "mengikat" konten database. (Gagasan yang setara tentang "komitmen UTXO" untuk bitcoin telah dibahas tetapi belum diimplementasikan.)

Metode seperti pohon untuk menghitung akar keadaan memiliki sifat penting: Diberikan akar keadaan yang diketahui, nilai entri tertentu dalam database kontrak dapat dibuktikan secara efisien. Ukuran bukti ini sebanding dengan kedalaman a pohon biner yang daunnya adalah entri basis data individu, yaitu log2 total ukuran basis data. Itu berarti bahwa, untuk entri individu, buktinya saja ganda panjang ketika ukuran database kuadrat - jenis skalabilitas yang dibunuh oleh para ilmuwan komputer. Sekarang ingatlah bahwa root status setiap blok ada di headernya, yang dapat diverifikasi oleh klien ringan. Hasilnya, klien ringan dapat dengan aman dan efisien melakukan kueri node penuh mana pun di jaringan untuk entri database individual, dan node penuh tidak bisa berbohong.

Tetapi jika header blockchain kami menyertakan root negara, dan root negara bergantung pada konten database, maka setiap node harus memperbarui basis data blockchain. Pada gilirannya, ini berarti menjalankan setiap kontrak untuk setiap pesan yang telah diterima sejauh ini. Tanpa ini, node penambangan tidak akan tahu root negara untuk ditempatkan di header blok, dan node lain tidak dapat memverifikasi blok yang mereka terima. Intinya adalah: jika kita ingin klien ringan untuk dengan aman mengambil bukti data kompak dari jaringan, node penuh harus melakukan semua perhitungan yang dijelaskan oleh data dalam rantai.

Putusan untuk blockchains pribadi

Mari kita lihat kembali kedua argumen ini dalam konteks blockchain pribadi. Hal pertama yang perlu diperhatikan tentang private chain adalah mereka cenderung tidak memiliki token atau cryptocurrency asli. Ini untuk beberapa alasan:

  • Jenis entitas yang tertarik pada rantai privat tidak ingin berurusan dengan kelas aset baru.
  • Model konsensus untuk rantai swasta didasarkan pada kesepakatan antara satu set penambang tertutup, bukan bukti kerja. Jadi biaya penambangan minimal dan penambang tidak perlu banyak hadiah.
  • Karena semua peserta dalam rantai pribadi diperiksa, ada sedikit kekhawatiran tentang spam dan penyalahgunaan.

Ingatlah bahwa argumen pertama untuk eksekusi global adalah mengaktifkan setiap node Ethereum untuk memutuskan apakah akan menyampaikan transaksi yang masuk, berdasarkan biaya yang ditawarkan. Nah, kurangnya token asli menjadikan alasan ini tidak relevan karena, jika blockchain tidak memiliki token asli, transaksi tidak dapat membayar biaya. Jika karena alasan tertentu spam tetap menjadi masalah, itu harus dikendalikan dengan cara lain, misalnya dengan mencabut izin pengirim.

Sekarang mari kita pertimbangkan argumen kedua, untuk mengaktifkan bukti data kompak. Blockchain publik cenderung memiliki pengguna akhir di ponsel atau dompet ringan lainnya. Tetapi ini lebih kecil kemungkinannya dengan rantai pribadi, yang fungsi utamanya adalah berbagi database antara perusahaan besar. Dan jika blockchain is diakses dari perangkat seluler, pengguna seluler kemungkinan besar menjadi pelanggan salah satu perusahaan ini, dan dapat mempercayai apa yang dikatakan perusahaan tersebut kepada mereka.

Sebaliknya, di blockchains pribadi, masalah eksekusi global sangat akut. Jika blockchain pribadi tidak memiliki token asli, kami tidak memiliki mekanisme pasar seperti gas untuk mencegah kode pelarian. Sebaliknya, kami perlu memperkenalkan beberapa jenis batas tetap dalam hal langkah komputasi per transaksi. Tetapi untuk memungkinkan transaksi dengan sengaja melakukan banyak pemrosesan, batas ini harus tinggi. Akibatnya, jaringan masih bisa menghabiskan banyak energi pada loop yang tidak diinginkan sebelum akhirnya mematikannya.

Sedangkan untuk konkurensi, blockchain pribadi jauh lebih mungkin untuk melihat jenis volume transaksi yang membuat konkurensi penting. Kapasitas blockchain publik dibatasi oleh fakta bahwa, agar dapat didesentralisasi secara berarti, mereka membutuhkan ribuan node yang dijalankan oleh para penggemar dengan anggaran terbatas. Sebaliknya, rantai pribadi jauh lebih mungkin untuk menghubungkan hanya beberapa lusin perusahaan bersama-sama, dalam hal ini kapasitas dan kecepatan sangat penting.

Blockchain tingkat ganda

Jadi, jika segala sesuatu tentang kontrak pintar masuk akal dalam rantai pribadi, selain dari eksekusi global, bagaimana hal ini meninggalkan kita? Jenis blockchain apa yang akan memberi kita kinerja dan fleksibilitas yang kita butuhkan? Sejujurnya, saya masih memikirkannya. Tapi satu jawaban mungkin: blockchain dengan dua tingkatan.

Tingkat yang lebih rendah akan dibangun di atas transaksi bergaya bitcoin yang diproses secara instan dan bersamaan, dan tidak perlu menunggu konfirmasi blok. Transaksi ini dapat melakukan pergerakan aset yang sederhana, termasuk aman pertukaran atom, tanpa menggunakan kontrak pintar. Tapi tingkat yang lebih rendah ini juga akan digunakan sebagai lapisan penyimpanan buta untuk program dan pesan yang mewakili proses bisnis yang lebih kompleks, yang disematkan sebagai metadata transaksi.

Sedangkan untuk tingkat atas, setiap peserta jaringan akan memilih program mana yang ingin mereka jalankan. Beberapa mungkin memilih untuk tidak menjalankan sama sekali, karena mereka hanya tertarik pada pergerakan aset sederhana. Orang lain mungkin menjalankan sekelompok kecil program yang relevan dengan proses internal mereka (dengan pengetahuan bahwa kelompok ini tidak bertukar pesan dengan program di luar). Beberapa bahkan mungkin memilih eksekusi global, memproses setiap pesan untuk setiap program, seperti Ethereum. Tapi kuncinya adalah itu setiap node hanya menjalankan kode yang diperlukan. Dalam ilmu komputer teknik ini disebut evaluasi malas, karena ini memerlukan pekerjaan sesedikit mungkin, tanpa mengabaikan sesuatu yang penting. Dengan evaluasi malas, jika komputasi blockchain berjalan salah, hanya node yang benar-benar menjalankan program itu yang akan memperhatikan. Jaringan itu sendiri tidak akan merasakan apa-apa.

Sedangkan untuk MultiChain, jika kami akhirnya mendukung komputasi lengkap Turing, saya ragu kami akan menerapkan eksekusi global. Mungkin kita akan memilih pendekatan dua tingkat yang malas ini, atau mungkin kita akan memikirkan sesuatu yang lebih baik.

Kontrak cerdas dalam blockchain publik

Seperti yang saya katakan sebelumnya, dalam publik Turing blockchain lengkap seperti Ethereum, di sana adalah alasan bagus untuk eksekusi global. Tapi inilah pertanyaan lain: apa itu perusahaan use case untuk rantai ini? Mari kita bayangkan di masa depan ketika perusahaan memiliki kepercayaan yang cukup pada blockchain publik untuk menggunakannya untuk proses bisnis yang nyata. Jika sekelompok perusahaan ingin menyematkan beberapa logika komputasi dalam blockchain publik, mereka memiliki dua pilihan: (1) menggunakan blockchain bergaya Ethereum dengan eksekusi global, atau (2) menggunakan Apa pun blockchain sebagai lapisan penyimpanan sederhana dan mengeksekusi kode itu sendiri. Dan diberi opsi ini, mengapa mereka memilih (1)?

Pilihan rasionalnya adalah blockchain publik dengan (a) harga termurah per byte penyimpanan, dan / atau (b) tingkat keamanan tertinggi berdasarkan total daya penambangan. Karena komputasi bersifat deterministik, perusahaan hanya perlu membayar jaringan menyimpan kontrak dan pesan mereka, bukan untuk benar-benar proses mereka. Selain itu, dengan menggunakan blockchain untuk penyimpanan saja, mereka dapat menggunakannya bahasa pemrograman yang mereka inginkan. Ini mungkin bytecode Ethereum, JavaScript / ECMAScript untuk dibaca atau bahkan kode mesin untuk performa tinggi. Faktanya, kontrak Ethereum sudah bisa disimpan menggunakan metadata di bitcoin blockchain. Ini persis pendekatan dua tingkat yang saya sarankan.

Diskusi ini terkait dengan gagasan lapisan abstraksi, Dipopulerkan oleh Model jaringan OSI. Untuk keandalan dan fleksibilitas yang optimal, setiap lapisan sistem harus disarikan (yaitu independen) dari lapisan lain sebanyak mungkin. Misalnya, kami tidak ingin pengontrol hard disk kami berisi kode untuk merender gambar JPEG. Jadi mengapa kita menginginkan blockchain untuk menjalankan program yang disimpannya? Untuk sebagian besar kasus penggunaan, kami tidak mendapatkan manfaat dari ini, dan biayanya signifikan.

Epilog

Jika eksekusi global tidak masuk akal dalam blockchain pribadi, mengapa semua orang mengerjakan hal ini? Saya pikir ini bisa dijelaskan, setidaknya sebagian, oleh kesalahpahaman tentang apa yang bisa dilakukan oleh blockchain di dunia nyata. Soalnya, blockchain publik seperti bisa bitcoin langsung memindahkan aset nyata (Yaitu, mata uang asli mereka), karena blockchain mendefinisikan kepemilikan mata uang itu. Ini menggabungkan dua aspek aset yang biasanya berbeda: (a) buku besar yang mencatat siapa yang memiliki aset, dan (b) lokasi fisik sebenarnya. Ini membuat cryptocurrency menjadi yang terbaik instrumen pembawa, menciptakan dunia baru yang berani atau surga pencuci uang, tergantung pada siapa yang Anda tanya.

Tetapi untuk aset lain yang ada secara independen dari blockchain, satu-satunya hal yang dapat dilakukan rantai adalah memegang catatan dari siapa mereka harus milik. Ini akan tetap menjadi kasus sampai kita melihat penerbitan utama aset ke dalam blockchain, dengan kepemilikan legal atas aset tersebut ditentukan dalam basis data rantai. Untuk sektor keuangan kelembagaan, saya yakin hari ini masih jauh, paling tidak karena perubahan regulasi yang diperlukan. Sampai saat itu, akan selalu ada langkah ekstrakontraktual dan prosedural, antara apa yang dikatakan blockchain dan apa yang terjadi di dunia nyata. Langkah ini mungkin juga menyertakan beberapa kode lengkap Turing, yang dijalankan dengan malas pada saat-saat terakhir.

Masalah ini disorot oleh kasus โ€œsmart bondโ€ yang sering kita dengar. Ikatan cerdas langsung dikeluarkan ke blockchain, dengan blockchain memastikan bahwa pembayaran kupon dilakukan kepada pemegang obligasi pada waktu yang tepat. Semuanya baik dan bagus. Tetapi apa yang terjadi jika penerbit obligasi memiliki dana yang tidak mencukupi di akun blockchain mereka untuk menutupi pembayaran yang jatuh tempo? Blockchain pasti dapat memasang bendera untuk mengatakan bahwa ada sesuatu yang salah, tetapi tidak bisa melakukan hal lain. Kita masih membutuhkan pasukan pengacara dan akuntan untuk menyelesaikan semua kekacauan, baik dengan pemotongan rambut, restrukturisasi hutang, penyitaan, atau kebangkrutan. Pendeknya:

Jika kontrak pintar tidak dapat memenuhi janji mereka, mengapa kita membayar harganya?

Terima kasih telah membaca.

Stempel Waktu:

Lebih dari Multichain