Waspadai kontrak pintar yang mustahil

Node Sumber: 1576899

Tiga kesalahpahaman kontrak pintar yang paling umum

Sebagai pengembang platform blockchain yang populer, kita kadang-kadang ditanya apakah ada kontrak pintar seperti Ethereum MultiRantai peta jalan. Jawaban yang selalu saya berikan adalah: tidak, atau setidaknya belum.

Tetapi di dunia yang penuh dengan sensasi blockchain, kontrak pintar adalah hal yang populer, jadi mengapa tidak? Masalahnya adalah, sementara kita sekarang tahu dari tiga kasus penggunaan yang kuat untuk blockchain bergaya Bitcoin (asal, catatan antar perusahaan dan keuangan yang ringan), kita belum menemukan yang setara dengan kontrak pintar bergaya Ethereum.

Bukan karena orang tidak memiliki gagasan tentang apa yang ingin dilakukan kontrak pintar. Sebaliknya, begitu banyak dari ide-ide ini tidak mungkin. Soalnya, ketika orang pintar mendengar istilah "kontrak pintar", imajinasi mereka cenderung menjadi liar. Mereka menyulap mimpi perangkat lunak cerdas otonom, pergi ke dunia, mengambil data bersama untuk perjalanan.

Sayangnya kenyataan kontrak pintar jauh lebih biasa dari semua itu:

Kontrak pintar adalah sepotong kode yang disimpan pada blockchain, dipicu oleh transaksi blockchain, dan yang membaca dan menulis data dalam database blockchain itu.

Itu dia. Betulkah. Kontrak pintar hanyalah nama mewah untuk kode yang berjalan di blockchain, dan berinteraksi dengan keadaan blockchain itu. Dan apa is kode? Ini Pascal, ini Python, ini PHP. Ini Jawa, itu Fortran, itu C ++. Jika kita berbicara tentang basis data, itu prosedur yang tersimpan ditulis dalam ekstensi SQL. Semua bahasa ini pada dasarnya setara, memecahkan jenis masalah yang sama dengan jenis cara yang sama. Tentu saja, masing-masing memiliki kelebihan dan kekurangan - Anda akan gila untuk membangun situs web di C atau kompres video HD di Ruby. Tetapi pada prinsipnya setidaknya, Anda bisa jika Anda mau. Anda baru saja membayar harga yang mahal dalam hal kenyamanan, kinerja, dan sangat mungkin rambut Anda.

Masalah dengan kontrak pintar bukan hanya harapan orang yang terlalu besar. Harapan inilah yang membuat banyak orang menghabiskan waktu dan uang untuk ide-ide yang tidak mungkin diimplementasikan. Tampaknya perusahaan besar memiliki sumber daya yang cukup untuk menempuh jalan yang panjang - mulai dari saat manajemen senior menemukan teknologi baru, hingga ketika keunggulan dan keterbatasan teknologi benar-benar dipahami. Mungkin pengalaman kami sendiri dapat membantu mempersingkat waktu ini.

Selama sembilan bulan terakhir, kami telah menemukan banyak kasus penggunaan kontrak pintar, dan telah berulang kali menemukan diri kami, bahwa mereka tidak dapat dilakukan. Sebagai hasilnya, kami telah mengidentifikasi tiga kesalahpahaman kontrak pintar yang paling umum dipegang. Gagasan ini tidak salah karena teknologinya belum matang, atau alatnya belum tersedia. Sebaliknya, mereka salah paham sifat dasar kode yang hidup dalam database dan berjalan dengan cara yang terdesentralisasi.

Menghubungi layanan eksternal

Seringkali, use case pertama yang diusulkan adalah kontrak pintar yang mengubah perilakunya sebagai respons terhadap beberapa peristiwa eksternal. Misalnya, polis asuransi pertanian yang membayar secara kondisional berdasarkan jumlah curah hujan pada bulan tertentu. Proses yang dibayangkan berlangsung seperti ini: kontrak pintar menunggu sampai waktu yang telah ditentukan, mengambil laporan cuaca dari layanan eksternal, dan berperilaku sesuai berdasarkan data yang diterima.

Ini semua terdengar cukup sederhana, tetapi juga tidak mungkin. Mengapa? Karena blockchain adalah sistem berbasis konsensus, artinya hanya bekerja jika setiap node mencapai keadaan yang sama setelah memproses setiap transaksi dan blok. Segala sesuatu yang terjadi pada blockchain harus sepenuhnya deterministik, dengan tidak ada cara yang memungkinkan untuk perbedaan masuk. Saat dua node yang jujur โ€‹โ€‹tidak setuju tentang keadaan rantai, seluruh sistem menjadi tidak berharga.

Sekarang ingat bahwa kontrak pintar dijalankan secara independen oleh setiap node pada suatu rantai. Oleh karena itu, jika kontrak pintar mengambil beberapa informasi dari sumber eksternal, pengambilan ini dilakukan berulang kali dan secara terpisah oleh setiap node. Tetapi karena sumber ini berada di luar blockchain, tidak ada jaminan bahwa setiap node akan menerima jawaban yang sama. Mungkin sumber akan mengubah responsnya di waktu antara permintaan dari node yang berbeda, atau mungkin itu akan sementara tidak tersedia. Either way, konsensus rusak dan seluruh blockchain mati.

Jadi apa solusinya? Sebenarnya, ini agak sederhana. Alih-alih kontrak pintar memulai pengambilan data eksternal, satu atau lebih pihak yang dipercaya ("oracle") menciptakan transaksi yang menanamkan data itu dalam rantai. Setiap node akan memiliki salinan data ini yang identik, sehingga dapat digunakan dengan aman dalam perhitungan kontrak cerdas. Dengan kata lain, oracle mendorong data ke blockchain daripada kontrak yang cerdas menarik itu masuk

Ketika datang ke kontrak pintar yang menyebabkan peristiwa di dunia luar, masalah serupa muncul. Misalnya, banyak yang menyukai gagasan kontrak pintar yang menyebut API bank untuk mentransfer uang. Tetapi jika setiap node secara independen mengeksekusi kode dalam rantai, siapa yang bertanggung jawab untuk memanggil API ini? Jika jawabannya hanya satu simpul, apa yang terjadi jika simpul tertentu itu tidak berfungsi, sengaja atau tidak? Dan jika jawabannya adalah setiap simpul, dapatkah kita mempercayai setiap simpul dengan kata sandi API itu? Dan apakah kita benar-benar ingin API disebut ratusan kali? Lebih buruk lagi, jika kontrak pintar perlu mengetahui apakah panggilan API berhasil, kami kembali ke masalah tergantung pada data eksternal.

Seperti sebelumnya, solusi sederhana tersedia. Alih-alih kontrak pintar yang memanggil API eksternal, kami menggunakan layanan tepercaya yang memantau status blockchain dan melakukan tindakan tertentu sebagai tanggapan. Misalnya, bank dapat secara proaktif menonton blockchain, dan melakukan transfer uang yang mencerminkan transaksi on-chain. Ini tidak menimbulkan risiko pada konsensus blockchain karena rantai memainkan peran yang sepenuhnya pasif.

Melihat dua solusi ini, kita bisa melakukan beberapa pengamatan. Pertama, keduanya membutuhkan entitas tepercaya untuk mengelola interaksi antara blockchain dan dunia luar. Walaupun ini secara teknis memungkinkan, ini merusak tujuan sistem desentralisasi. Kedua, mekanisme yang digunakan dalam penyelesaian ini adalah contoh langsung dari membaca dan menulis basis data. Sebuah oracle yang menyediakan informasi eksternal hanya menuliskan informasi itu ke dalam rantai. Dan layanan yang mencerminkan keadaan blockchain di dunia nyata tidak lebih dari membaca dari rantai itu. Dengan kata lain, interaksi apa pun antara blockchain dan dunia luar dibatasi untuk operasi basis data biasa. Kami akan berbicara lebih banyak tentang fakta ini nanti.

Menegakkan pembayaran on-chain

Berikut proposal lain yang cenderung sering kita dengar: menggunakan kontrak pintar untuk mengotomatiskan pembayaran kupon untuk apa yang disebut "obligasi pintar". Idenya adalah untuk kode kontrak pintar untuk secara otomatis memulai pembayaran pada waktu yang tepat, menghindari proses manual dan menjamin bahwa penerbit tidak dapat default.

Tentu saja, agar ini berfungsi, dana yang digunakan untuk melakukan pembayaran harus hidup di dalam blockchain juga, jika tidak, kontrak yang cerdas tidak mungkin menjamin pembayaran mereka. Sekarang ingat bahwa blockchain hanyalah sebuah database, dalam hal ini buku besar keuangan berisi obligasi yang diterbitkan dan sejumlah uang tunai. Jadi ketika kita berbicara tentang pembayaran kupon, yang sebenarnya kita bicarakan adalah operasi basis data yang berlangsung secara otomatis pada waktu yang disepakati.

Meskipun otomatisasi ini layak secara teknis, otomatisasi ini mengalami kesulitan keuangan. Jika dana yang digunakan untuk pembayaran kupon dikendalikan oleh kontrak pintar obligasi, maka pembayaran itu memang bisa dijamin. Tapi ini juga berarti dana itu tidak dapat digunakan oleh penerbit obligasi untuk hal lain. Dan jika dana itu tidak di bawah kendali kontrak pintar, lalu tidak ada cara di mana pembayaran dapat dijamin.

Dengan kata lain, obligasi pintar tidak ada gunanya bagi penerbit, atau tidak berguna bagi investor. Dan jika Anda memikirkannya, ini adalah hasil yang sangat jelas. Dari perspektif investor, seluruh poin obligasi adalah tingkat pengembalian yang menarik, dengan mengorbankan beberapa risiko gagal bayar. Dan untuk penerbit, tujuan obligasi adalah untuk mengumpulkan dana untuk kegiatan yang produktif tetapi agak berisiko, seperti membangun pabrik baru. Tidak ada cara bagi penerbit obligasi untuk menggunakan dana yang dihimpun, sementara secara bersamaan menjamin bahwa investor akan dilunasi. Seharusnya tidak mengejutkan bahwa hubungan antara risiko dan pengembalian bukanlah masalah yang bisa dipecahkan oleh blockchain.

Menyembunyikan data rahasia

Seperti aku ditulis tentang sebelumnya, tantangan terbesar dalam penempatan blockchains adalah transparansi radikal yang mereka berikan. Misalnya, jika sepuluh bank membuat blockchain bersama, dan dua melakukan transaksi bilateral, ini akan segera terlihat oleh delapan bank lainnya. Meskipun ada berbagai strategi untuk mengurangi masalah ini, tidak ada yang mengalahkan kesederhanaan dan efisiensi dari database terpusat, di mana administrator tepercaya memiliki kendali penuh atas siapa yang dapat melihat apa.

Beberapa orang berpikir bahwa kontrak pintar dapat menyelesaikan masalah ini. Mereka mulai dengan fakta bahwa setiap kontrak pintar berisi basis data miniaturnya sendiri, yang di atasnya ia memiliki kendali penuh. Semua operasi baca dan tulis pada basis data ini dimediasi oleh kode kontrak, sehingga tidak memungkinkan bagi satu kontrak untuk membaca data orang lain secara langsung. (Kopling ketat antara data dan kode ini disebut enkapsulasi, dan merupakan dasar dari yang populer pemrograman berorientasi objek paradigma.)

Jadi, jika satu kontrak pintar tidak dapat mengakses data orang lain, sudahkah kita memecahkan masalah kerahasiaan blockchain? Apakah masuk akal untuk berbicara tentang menyembunyikan informasi dalam kontrak yang cerdas? Sayangnya, jawabannya tidak. Karena bahkan jika satu kontrak pintar tidak dapat membaca data orang lain, data itu masih disimpan pada setiap node dalam rantai. Untuk setiap peserta blockchain, itu ada di memori atau disk a sistem yang sepenuhnya dikontrol peserta. Dan tidak ada yang menghentikan mereka membaca informasi dari sistem mereka sendiri, jika dan ketika mereka memilih untuk melakukannya.

Menyembunyikan data dalam kontrak pintar sama amannya dengan menyembunyikannya dalam kode HTML halaman web. Tentu, pengguna web biasa tidak akan melihatnya, karena itu tidak ditampilkan di jendela browser mereka. Tetapi yang diperlukan hanyalah browser web untuk menambahkan fungsi 'Sumber Tampilan' (seperti yang dimiliki semuanya), dan informasi yang disembunyikan menjadi terlihat secara universal. Demikian pula, untuk data yang disembunyikan dalam kontrak pintar, yang diperlukan hanyalah seseorang untuk memodifikasi perangkat lunak blockchain mereka untuk menampilkan status penuh kontrak, dan semua kemiripan kerahasiaan hilang. Seorang programmer setengah layak bisa melakukannya dalam satu jam atau lebih.

Untuk apa kontrak cerdas

Dengan begitu banyak hal yang tidak bisa dilakukan kontrak pintar, orang mungkin bertanya untuk apa sebenarnya itu. Tetapi untuk menjawab pertanyaan ini, kita perlu kembali ke dasar-dasar blockchain sendiri. Untuk rekap, blockchain memungkinkan database untuk secara langsung dan aman dibagikan oleh entitas yang tidak saling percaya, tanpa memerlukan administrator pusat. Blockchain memungkinkan disintermediasi data, dan ini dapat menyebabkan penghematan yang signifikan dalam kompleksitas dan biaya.

Setiap basis data dimodifikasi melalui โ€œtransaksiโ€, yang berisi sekumpulan perubahan pada basis data itu yang harus berhasil atau gagal secara keseluruhan. Misalnya, dalam buku besar keuangan, pembayaran dari Alice ke Bob diwakili oleh transaksi yang (a) memeriksa apakah Alice memiliki dana yang cukup, (b) mengurangi jumlah dari akun Alice, dan (c) menambahkan jumlah yang sama ke Bob's .

Dalam database terpusat yang teratur, transaksi ini dibuat oleh satu otoritas tepercaya. Sebaliknya, dalam database bersama yang digerakkan oleh blockchain, transaksi dapat dibuat oleh salah satu pengguna blockchain itu. Dan karena para pengguna ini tidak saling mempercayai satu sama lain, database harus berisi aturan yang membatasi transaksi yang dilakukan. Misalnya, dalam buku besar keuangan peer-to-peer, setiap transaksi harus menjaga jumlah total dana, jika tidak, peserta dapat dengan bebas memberikan uang sebanyak yang mereka inginkan.

Orang dapat membayangkan berbagai cara untuk mengekspresikan aturan-aturan ini, tetapi untuk saat ini ada dua paradigma dominan, masing-masing terinspirasi oleh Bitcoin dan Ethereum. Metode Bitcoin, yang kami sebut โ€œkendala transaksiโ€, mengevaluasi setiap transaksi dalam hal: (a) entri basis data yang dihapus oleh transaksi itu, dan (b) entri yang dibuat. Dalam buku besar keuangan, aturan menyatakan bahwa jumlah total dana dalam entri yang dihapus harus sesuai dengan total dalam yang dibuat. (Kami menganggap modifikasi entri yang ada setara dengan menghapus entri itu dan membuat entri baru sebagai gantinya.)

Paradigma kedua, yang berasal dari Ethereum, adalah kontrak pintar. Ini menyatakan bahwa semua modifikasi pada data kontrak harus dilakukan oleh kodenya. (Dalam konteks database tradisional, kita dapat menganggap ini sebagai ditegakkan prosedur tersimpan.) Untuk mengubah data kontrak, pengguna blockchain mengirim permintaan ke kodenya, yang menentukan apakah dan bagaimana memenuhi permintaan itu. Seperti dalam contoh ini, kontrak pintar untuk buku besar keuangan melakukan tiga tugas yang sama sebagai administrator dari database terpusat: memeriksa dana yang cukup, memotong dari satu akun, dan menambah yang lain.

Kedua paradigma ini efektif, dan masing-masing memiliki kelebihan dan kekurangan, seperti yang saya miliki dibahas secara mendalam sebelumnya. Untuk meringkas, kendala transaksi gaya Bitcoin memberikan konkurensi dan kinerja yang unggul, sementara kontrak pintar bergaya Ethereum menawarkan fleksibilitas yang lebih besar. Jadi, kembali ke pertanyaan untuk apa kontrak pintar:

Kontrak pintar untuk kasus penggunaan blockchain yang tidak dapat diimplementasikan dengan kendala transaksi.

Mengingat kriteria ini untuk menggunakan kontrak pintar, saya belum melihat kasus penggunaan yang kuat untuk blockchain diizinkan yang memenuhi syarat. Semua aplikasi blockchain yang menarik yang saya tahu dapat diimplementasikan dengan transaksi bergaya Bitcoin, yang dapat menangani perizinan dan penyimpanan data umum, serta pembuatan aset, transfer, escrow, pertukaran dan penghancuran. Meskipun demikian, kasus penggunaan baru masih muncul, dan saya tidak akan terkejut jika ada do membutuhkan kekuatan kontrak yang cerdas. Atau, paling tidak, perpanjangan dari paradigma Bitcoin.

Apa pun jawabannya ternyata, kunci untuk diingat adalah bahwa kontrak pintar hanyalah salah satu metode untuk membatasi transaksi yang dilakukan dalam database. Ini tidak diragukan lagi adalah hal yang berguna, dan sangat penting untuk membuat database itu aman untuk dibagikan. Tetapi kontrak yang cerdas tidak dapat melakukan hal lain, dan mereka tentu saja tidak dapat lepas dari batas-batas basis data tempat mereka tinggal.

Silakan kirim komentar di LinkedIn.

Stempel Waktu:

Lebih dari Multichain