Pengenalan kepada Kontrak Pintar

Dalam artikel ini, kita akan melihat apakah kontrak pintar, apakah itu, kita akan berkenalan dengan platform kontrak pintar yang berbeza, ciri-cirinya, dan juga membincangkan cara ia berfungsi dan apakah kelebihan yang boleh dibawanya. Bahan ini akan sangat berguna untuk pembaca yang tidak begitu faham dengan topik kontrak pintar, tetapi ingin lebih dekat untuk memahaminya.

Kontrak biasa vs. kontrak pintar

Sebelum kita menyelidiki butirannya, mari kita ambil contoh perbezaan antara kontrak biasa, yang dinyatakan di atas kertas, dan kontrak pintar, yang diwakili secara digital.

Pengenalan kepada Kontrak Pintar

Bagaimanakah ini berfungsi sebelum kemunculan kontrak pintar? Bayangkan sekumpulan orang yang ingin mewujudkan peraturan dan syarat tertentu untuk pengagihan nilai, serta mekanisme tertentu untuk menjamin pelaksanaan pengagihan ini mengikut peraturan dan syarat yang diberikan. Kemudian mereka akan berkumpul, membuat kertas di mana mereka menulis butiran pengenalan mereka, syarat, nilai yang terlibat, tarikh mereka dan menandatanganinya. Kontrak ini juga telah disahkan oleh pihak yang dipercayai, seperti notari. Selanjutnya, orang-orang ini pergi ke arah yang berbeza dengan salinan kertas kontrak sedemikian dan mula melakukan beberapa tindakan yang mungkin tidak sesuai dengan kontrak itu sendiri, iaitu, mereka melakukan satu perkara, tetapi di atas kertas ia diperakui bahawa mereka harus melakukan sesuatu. berbeza sama sekali. Dan bagaimana untuk keluar dari situasi ini? Malah, salah seorang ahli kumpulan perlu mengambil kertas ini, mengambil beberapa bukti, membawanya ke mahkamah dan mencapai pematuhan antara kontrak dan tindakan sebenar. Selalunya, sukar untuk mencapai pelaksanaan adil kontrak ini, yang membawa kepada akibat yang tidak menyenangkan.

Apa yang boleh dikatakan tentang kontrak pintar? Mereka menggabungkan kedua-dua kemungkinan menulis syarat kontrak dan mekanisme untuk pelaksanaan ketat mereka. Jika syarat telah ditetapkan dan transaksi atau permintaan yang sepadan telah ditandatangani, maka apabila permintaan atau transaksi itu telah diterima, ia tidak lagi boleh mengubah syarat atau menjejaskan pelaksanaannya.

Terdapat satu pengesah atau keseluruhan rangkaian, serta pangkalan data yang menyimpan semua kontrak pintar yang telah diserahkan untuk pelaksanaan dalam susunan kronologi yang ketat. Ia juga penting bahawa pangkalan data ini mesti mengandungi semua syarat pencetus untuk melaksanakan kontrak pintar. Di samping itu, ia mesti mengambil kira nilai yang pembahagiannya diterangkan dalam kontrak. Jika ini terpakai pada beberapa mata wang digital, maka pangkalan data ini harus mengambil kiranya.

Dalam erti kata lain, pengesah kontrak pintar mesti mempunyai akses kepada semua data yang kontrak pintar beroperasi. Sebagai contoh, satu pangkalan data harus digunakan untuk mengambil kira mata wang digital, baki pengguna, transaksi pengguna dan cap masa secara serentak. Kemudian, dalam kontrak pintar, syaratnya mungkin baki pengguna dalam mata wang tertentu, ketibaan masa tertentu, atau fakta bahawa transaksi tertentu telah dijalankan, tetapi tidak lebih.

Definisi kontrak pintar

Secara umum, istilah itu sendiri dicipta oleh penyelidik Nick Szabo dan pertama kali digunakan pada tahun 1994, dan telah didokumenkan pada tahun 1997 dalam artikel yang menerangkan idea kontrak pintar.

Kontrak pintar membayangkan bahawa beberapa automasi pengagihan nilai dilakukan, yang hanya boleh bergantung pada syarat-syarat yang telah ditetapkan terlebih dahulu. Dalam bentuk yang paling mudah, ia kelihatan seperti kontrak dengan syarat yang ditetapkan dengan ketat, yang ditandatangani oleh pihak tertentu.

Kontrak pintar direka untuk meminimumkan kepercayaan kepada pihak ketiga. Kadangkala pusat membuat keputusan di mana segala-galanya bergantung sepenuhnya dikecualikan. Di samping itu, kontrak sedemikian lebih mudah untuk diaudit. Ini adalah akibat daripada beberapa ciri reka bentuk sistem sedemikian, tetapi selalunya kita memahami melalui kontrak pintar persekitaran terdesentralisasi dan kehadiran fungsi yang membolehkan sesiapa sahaja menganalisis pangkalan data dan menjalankan audit penuh pelaksanaan kontrak. Ini memastikan perlindungan terhadap perubahan data retroaktif yang akan melibatkan perubahan dalam prestasi kontrak itu sendiri. Pendigitalan kebanyakan proses apabila mencipta dan melancarkan kontrak pintar selalunya memudahkan teknologi dan kos pelaksanaannya.

Contoh mudah - Perkhidmatan Escrow

Mari kita lihat contoh yang sangat mudah. Ini akan membantu anda lebih dekat untuk memahami kefungsian kontrak pintar, serta memahami dengan lebih baik dalam kes yang mana ia harus digunakan.

Pengenalan kepada Kontrak Pintar

Ia juga boleh dilaksanakan menggunakan Bitcoin, walaupun pada masa ini Bitcoin masih sukar dipanggil platform penuh untuk kontrak pintar. Jadi, kami mempunyai beberapa pembeli dan kami mempunyai kedai dalam talian. Seorang pelanggan ingin membeli monitor dari kedai ini. Dalam kes paling mudah, pembeli melengkapkan dan menghantar pembayaran, dan kedai dalam talian menerimanya, mengesahkannya, dan kemudian menghantar barang. Walau bagaimanapun, dalam keadaan ini terdapat keperluan untuk kepercayaan yang besar - pembeli mesti mempercayai kedai dalam talian untuk keseluruhan kos monitor. Memandangkan kedai dalam talian mungkin mempunyai reputasi yang rendah di mata pembeli, terdapat risiko bahawa atas sebab tertentu, selepas menerima pembayaran, kedai akan menolak perkhidmatan dan tidak akan menghantar barang kepada pembeli. Oleh itu, pembeli bertanya soalan (dan, sewajarnya, kedai dalam talian menanyakan soalan ini) apa yang boleh digunakan dalam kes ini untuk meminimumkan risiko sedemikian dan menjadikan transaksi sedemikian lebih dipercayai.

Dalam kes Bitcoin, adalah mungkin untuk membenarkan pembeli dan penjual memilih pengantara secara bebas. Terdapat ramai orang yang terlibat dalam menyelesaikan isu kontroversi. Dan peserta kami boleh memilih daripada senarai umum pengantara yang akan mereka percayai. Bersama-sama mereka mencipta 2 daripada 3 alamat berbilang tandatangan di mana terdapat tiga kunci dan dua tandatangan dengan mana-mana dua kunci diperlukan untuk membelanjakan syiling dari alamat tersebut. Satu kunci akan menjadi milik pembeli, yang kedua untuk kedai dalam talian, dan yang ketiga untuk pengantara. Dan ke alamat berbilang tandatangan itu pembeli akan menghantar jumlah yang diperlukan untuk membayar monitor. Kini, apabila penjual melihat bahawa wang disekat untuk beberapa waktu di alamat berbilang tandatangan yang bergantung padanya, dia boleh menghantar monitor dengan selamat melalui pos.

Seterusnya, pembeli menerima bungkusan, memeriksa barangan dan membuat keputusan mengenai pembelian terakhir. Dia mungkin bersetuju sepenuhnya dengan perkhidmatan yang disediakan dan menandatangani transaksi dengan kuncinya, di mana dia memindahkan syiling dari alamat berbilang tandatangan kepada penjual, atau dia mungkin tidak berpuas hati dengan sesuatu. Dalam kes kedua, dia menghubungi pengantara untuk menyusun transaksi alternatif yang akan mengedarkan syiling tersebut secara berbeza.

Katakan monitor tiba sedikit tercalar dan kit tidak termasuk kabel untuk menyambung ke komputer, walaupun laman web kedai dalam talian mengatakan bahawa kabel harus dimasukkan ke dalam kit. Kemudian pembeli mengumpul bukti yang diperlukan untuk membuktikan kepada pengantara bahawa dia telah ditipu dalam situasi ini: dia mengambil tangkapan skrin tapak, mengambil foto resit mel, mengambil gambar calar pada monitor dan menunjukkan bahawa meterai itu putus dan kabel tercabut. Kedai dalam talian pula, mengumpul buktinya dan memindahkannya kepada pengantara.

Pengantara berminat untuk memuaskan kedua-dua kemarahan pembeli dan kepentingan kedai dalam talian secara serentak (ia akan menjadi jelas mengapa kemudian). Ia merupakan transaksi di mana syiling daripada alamat berbilang tandatangan akan dibelanjakan dalam beberapa bahagian antara pembeli, kedai dalam talian dan pengantara, kerana dia mengambil bahagian untuk dirinya sendiri sebagai ganjaran untuk kerjanya. Katakan 90% daripada jumlah keseluruhan pergi kepada penjual, 5% kepada pengantara dan 5% pampasan kepada pembeli. Pengantara menandatangani transaksi ini dengan kuncinya, tetapi ia masih belum boleh digunakan, kerana ia memerlukan dua tandatangan, tetapi hanya satu yang berbaloi. Ia menghantar transaksi sedemikian kepada kedua-dua pembeli dan penjual. Jika sekurang-kurangnya salah seorang daripada mereka berpuas hati dengan pilihan ini untuk mengagihkan semula syiling, maka transaksi akan ditandatangani terlebih dahulu dan diedarkan ke rangkaian. Untuk mengesahkannya, cukuplah bahawa salah satu pihak dalam transaksi bersetuju dengan pilihan pengantara.

Adalah penting untuk memilih pengantara pada mulanya supaya kedua-dua peserta mempercayainya. Dalam kes ini, dia akan bertindak secara bebas daripada kepentingan satu atau yang lain dan secara objektif menilai keadaan. Jika pengantara tidak memberikan pilihan untuk mengedarkan syiling yang akan memuaskan sekurang-kurangnya seorang peserta, maka, setelah bersetuju bersama, kedua-dua pembeli dan kedai dalam talian boleh menghantar syiling ke alamat berbilang tandatangan baharu dengan meletakkan dua tandatangan mereka. Alamat berbilang tandatangan baharu akan disusun dengan pengantara yang berbeza, yang mungkin lebih cekap dalam perkara itu dan memberikan pilihan yang lebih baik.

Contoh dengan asrama dan peti ais

Mari lihat contoh yang lebih kompleks yang memaparkan keupayaan kontrak pintar dengan lebih jelas.

Pengenalan kepada Kontrak Pintar

Katakan ada tiga lelaki yang baru berpindah ke bilik asrama yang sama. Mereka bertiga berminat untuk membeli peti ais untuk bilik mereka yang boleh digunakan bersama. Salah seorang daripada mereka menawarkan diri untuk mengumpul jumlah yang diperlukan untuk membeli peti sejuk dan berunding dengan penjual. Namun, mereka baru sahaja bertemu antara satu sama lain dan tidak cukup kepercayaan antara mereka. Jelas sekali, dua daripada mereka mengambil risiko dengan memberi wang kepada yang ketiga. Selain itu, mereka perlu mencapai kata sepakat dalam memilih penjual.

Mereka boleh menggunakan perkhidmatan escrow, iaitu memilih pengantara yang akan memantau pelaksanaan transaksi dan menyelesaikan isu kontroversi jika timbul. Kemudian, setelah bersetuju, mereka membuat kontrak pintar dan menetapkan syarat tertentu di dalamnya.

Syarat pertama ialah sebelum masa tertentu, katakan dalam masa satu minggu, akaun kontrak pintar yang sepadan mesti menerima tiga pembayaran dari alamat tertentu untuk jumlah tertentu. Jika ini tidak berlaku, kontrak pintar berhenti melaksanakan dan mengembalikan syiling kepada semua peserta. Jika syarat dipenuhi, maka nilai penjual dan pengecam pengantara ditetapkan, dan syarat diperiksa bahawa semua peserta bersetuju dengan pilihan penjual dan pengantara. Apabila semua syarat dipenuhi, maka dana akan dipindahkan ke alamat yang ditentukan. Pendekatan ini boleh melindungi peserta daripada penipuan dari mana-mana pihak dan secara amnya menghapuskan keperluan untuk mempercayai.

Kami melihat dalam contoh ini prinsip bahawa keupayaan untuk menetapkan parameter langkah demi langkah untuk memenuhi setiap syarat membolehkan anda mencipta sistem dengan sebarang kerumitan dan kedalaman tahap bersarang. Di samping itu, anda boleh mentakrifkan syarat pertama dalam kontrak pintar dahulu, dan hanya selepas dipenuhinya anda boleh menetapkan parameter untuk syarat seterusnya. Dalam erti kata lain, syarat itu ditulis secara rasmi, dan parameter untuknya boleh ditetapkan semasa operasinya.

Klasifikasi kontrak pintar

Untuk pengelasan, anda boleh menetapkan kumpulan kriteria yang berbeza. Walau bagaimanapun, pada masa pembangunan teknologi, empat daripadanya adalah relevan.

Kontrak pintar boleh dibezakan dengan persekitaran pelaksanaannya, yang boleh sama ada berpusat atau tidak berpusat. Dalam kes desentralisasi, kita mempunyai kebebasan yang lebih besar dan toleransi kesalahan apabila melaksanakan kontrak pintar.

Ia juga boleh dibezakan dengan proses menetapkan dan memenuhi syarat: ia boleh diprogramkan secara bebas, terhad atau dipratentukan, iaitu ditaip dengan ketat. Apabila terdapat hanya 4 kontrak pintar khusus pada platform kontrak pintar, parameter untuk kontrak tersebut boleh ditetapkan dalam apa jua cara. Oleh itu, menetapkannya adalah lebih mudah: kami memilih kontrak daripada senarai dan lulus parameter.

Mengikut kaedah permulaan, terdapat kontrak pintar automatik, iaitu, apabila keadaan tertentu berlaku, ia dilaksanakan sendiri, dan terdapat kontrak di mana syaratnya ditentukan, tetapi platform tidak secara automatik menyemak pemenuhannya; untuk ini mereka perlu dimulakan secara berasingan.

Di samping itu, kontrak pintar berbeza dalam tahap privasinya. Ia boleh sama ada terbuka sepenuhnya, separa atau sulit sepenuhnya. Yang terakhir ini bermakna pemerhati pihak ketiga tidak melihat syarat kontrak pintar. Walau bagaimanapun, topik privasi adalah sangat luas dan adalah lebih baik untuk mempertimbangkannya secara berasingan daripada artikel semasa.

Di bawah ini kita akan melihat dengan lebih dekat pada tiga kriteria pertama untuk membawa lebih kejelasan kepada pemahaman topik semasa.

Kontrak pintar mengikut masa jalan

Pengenalan kepada Kontrak Pintar

Berdasarkan persekitaran pelaksanaan, perbezaan dibuat antara platform kontrak pintar terpusat dan terdesentralisasi. Dalam kes kontrak digital berpusat, perkhidmatan tunggal digunakan, di mana hanya terdapat satu pengesah dan mungkin terdapat perkhidmatan sandaran dan pemulihan, yang juga diuruskan secara berpusat. Terdapat satu pangkalan data yang menyimpan semua maklumat yang diperlukan untuk menetapkan syarat kontrak pintar dan mengedarkan nilai yang diambil kira dalam pangkalan data perkhidmatan ini. Perkhidmatan berpusat sedemikian mempunyai pelanggan yang menetapkan syarat dengan permintaan tertentu dan menggunakan kontrak sedemikian. Disebabkan sifat platform yang terpusat, mekanisme pengesahan mungkin kurang selamat berbanding dengan mata wang kripto.

Sebagai contoh, kita boleh mengambil pembekal komunikasi mudah alih (pengendali mudah alih yang berbeza). Katakan pengendali tertentu menyimpan rekod trafik terpusat pada pelayannya, yang boleh dihantar dalam format yang berbeza, contohnya: dalam bentuk panggilan suara, penghantaran SMS, trafik Internet mudah alih, dan mengikut piawaian yang berbeza, dan juga menyimpan rekod dana pada baki pengguna. Sehubungan itu, pembekal komunikasi mudah alih boleh membuat kontrak untuk perakaunan perkhidmatan yang disediakan dan pembayarannya dengan syarat yang berbeza. Dalam kes ini, adalah mudah untuk menetapkan syarat seperti "hantar SMS dengan kod ini dan ini kepada nombor ini dan itu dan anda akan menerima syarat ini dan itu untuk pengedaran trafik."

Satu lagi contoh boleh diberikan: bank tradisional dengan fungsi perbankan Internet yang diperluas dan kontrak yang sangat mudah seperti pembayaran biasa, penukaran automatik pembayaran masuk, potongan faedah automatik kepada akaun tertentu, dsb.

Jika kita bercakap tentang kontrak pintar dengan persekitaran pelaksanaan terdesentralisasi, maka kita mempunyai kumpulan pengesah. Sebaik-baiknya, sesiapa sahaja boleh menjadi pengesah. Disebabkan oleh protokol penyegerakan pangkalan data dan mencapai kata sepakat, kami mempunyai beberapa pangkalan data biasa yang kini akan menyimpan semua transaksi dengan kontrak yang diterangkan dengan ketat, dan bukan beberapa pertanyaan bersyarat, format yang sering berubah dan tiada spesifikasi terbuka. Di sini, urus niaga akan mengandungi arahan untuk melaksanakan kontrak mengikut spesifikasi yang ketat. Spesifikasi ini terbuka dan oleh itu, pengguna platform sendiri boleh mengaudit dan mengesahkan kontrak pintar. Di sini kita melihat bahawa platform terdesentralisasi lebih unggul daripada platform terpusat dari segi kebebasan dan toleransi kesalahan, tetapi reka bentuk dan penyelenggaraannya jauh lebih kompleks.

Kontrak pintar dengan kaedah menetapkan dan memenuhi syarat

Sekarang mari kita lihat dengan lebih dekat cara kontrak pintar boleh berbeza dalam cara mereka menetapkan dan memenuhi syarat. Di sini kami mengalihkan perhatian kami kepada kontrak pintar yang boleh diprogramkan secara rawak dan Turing lengkap. Kontrak pintar lengkap Turing membolehkan anda menetapkan hampir mana-mana algoritma sebagai syarat untuk pelaksanaan kontrak: kitaran tulis, beberapa fungsi untuk mengira kebarangkalian, dan seumpamanya - hingga ke algoritma tandatangan elektronik anda sendiri. Dalam kes ini, kami maksudkan penulisan logik yang sewenang-wenangnya.

Terdapat juga kontrak pintar sewenang-wenangnya, tetapi bukan kontrak lengkap Turing. Ini termasuk Bitcoin dan Litecoin dengan skrip mereka sendiri. Ini bermakna anda boleh menggunakan hanya operasi tertentu dalam sebarang susunan, tetapi anda tidak lagi boleh menulis gelung dan algoritma anda sendiri.

Selain itu, terdapat platform kontrak pintar yang melaksanakan kontrak pintar yang telah ditetapkan. Ini termasuk Bitshares dan Steemit. Bitshares mempunyai pelbagai kontrak pintar untuk perdagangan, pengurusan akaun, pengurusan platform itu sendiri dan parameternya. Steemit ialah platform yang serupa, tetapi ia tidak lagi tertumpu pada pengeluaran token dan perdagangan, seperti Bitshares, tetapi pada blog, iaitu ia menyimpan dan memproses kandungan secara terpencar.

Kontrak lengkap Turing sewenang-wenangnya termasuk platform Ethereum dan RootStock, yang masih dalam pembangunan. Oleh itu, di bawah ini kami akan membincangkan lebih terperinci mengenai platform kontrak pintar Ethereum.

Kontrak pintar melalui kaedah permulaan

Berdasarkan kaedah permulaan, kontrak pintar juga boleh dibahagikan kepada sekurang-kurangnya dua kumpulan: automatik dan manual (bukan automatik). Yang automatik dicirikan oleh fakta bahawa, memandangkan semua parameter dan syarat yang diketahui, kontrak pintar sepenuhnya dilaksanakan secara automatik, iaitu, ia tidak memerlukan penghantaran sebarang transaksi tambahan dan membelanjakan komisen tambahan pada setiap pelaksanaan berikutnya. Platform itu sendiri mempunyai semua data untuk mengira bagaimana kontrak pintar akan selesai. Logik di sana tidak sewenang-wenangnya, tetapi telah ditetapkan dan semua ini boleh diramal. Iaitu, anda boleh menganggarkan terlebih dahulu kerumitan melaksanakan kontrak pintar, menggunakan beberapa jenis komisen berterusan untuknya, dan semua proses untuk pelaksanaannya lebih cekap.

Untuk kontrak pintar yang diprogramkan secara bebas, pelaksanaan tidak automatik. Untuk memulakan kontrak pintar sedemikian, pada hampir setiap langkah anda perlu membuat transaksi baharu, yang akan memanggil peringkat pelaksanaan seterusnya atau kaedah kontrak pintar seterusnya, bayar komisen yang sesuai dan tunggu sehingga transaksi disahkan. Pelaksanaan mungkin berjaya atau tidak selesai, kerana kod kontrak pintar adalah sewenang-wenangnya dan beberapa detik yang tidak dapat diramalkan mungkin muncul, seperti gelung kekal, kekurangan beberapa parameter dan hujah, pengecualian yang tidak dikendalikan, dsb.

Akaun Ethereum

Jenis Akaun Ethereum

Mari lihat jenis akaun yang boleh ada pada platform Ethereum. Terdapat hanya dua jenis akaun di sini dan tiada pilihan lain. Jenis pertama dipanggil akaun pengguna, yang kedua ialah akaun kontrak. Mari kita fikirkan bagaimana mereka berbeza.

Akaun pengguna dikawal hanya oleh kunci peribadi tandatangan elektronik. Pemilik akaun menjana pasangan kuncinya sendiri untuk tandatangan elektronik menggunakan algoritma ECDSA (Elliptic Curve Digital Signature Algorithm). Hanya transaksi yang ditandatangani dengan kunci ini boleh mengubah keadaan akaun ini.

Logik berasingan disediakan untuk akaun kontrak pintar. Ia hanya boleh dikawal oleh kod perisian yang dipratentukan yang sepenuhnya menentukan gelagat kontrak pintar: cara ia akan mengurus syilingnya dalam keadaan tertentu, atas inisiatif pengguna mana dan dalam keadaan tambahan apa syiling ini akan diedarkan. Jika beberapa mata tidak disediakan oleh pembangun dalam kod program, masalah mungkin timbul. Sebagai contoh, kontrak pintar mungkin menerima keadaan tertentu di mana ia tidak menerima permulaan pelaksanaan selanjutnya daripada mana-mana pengguna. Dalam kes ini, syiling sebenarnya akan dibekukan, kerana kontrak pintar tidak menyediakan untuk keluar dari negeri ini.

Bagaimana akaun dibuat di Ethereum

Dalam kes akaun pengguna, pemilik secara bebas menjana pasangan kunci menggunakan ECDSA. Adalah penting untuk ambil perhatian bahawa Ethereum menggunakan algoritma yang sama dan lengkung eliptik yang sama untuk tandatangan elektronik seperti Bitcoin, tetapi alamatnya dikira dengan cara yang sedikit berbeza. Di sini, hasil pencincangan berganda tidak lagi digunakan, seperti dalam Bitcoin, tetapi pencincangan tunggal disediakan dengan fungsi Keccak pada panjang 256 bit. Bit yang paling kurang ketara dipotong daripada nilai yang terhasil, iaitu 160 bit nilai cincang keluaran yang paling kurang ketara. Akibatnya, kami mendapat alamat dalam Ethereum. Malah, ia memerlukan 20 bait.

Sila ambil perhatian bahawa pengecam akaun dalam Ethereum dikodkan dalam hex tanpa menggunakan jumlah semak, tidak seperti Bitcoin dan banyak sistem lain, di mana alamat dikodkan dalam sistem nombor asas 58 dengan penambahan jumlah semak. Ini bermakna anda perlu berhati-hati apabila bekerja dengan pengecam akaun dalam Ethereum: walaupun satu kesilapan dalam pengecam dijamin akan menyebabkan kehilangan syiling.

Terdapat ciri penting dan akaun pengguna di peringkat pangkalan data umum dibuat pada masa dia menerima bayaran masuk pertama.

Mencipta akaun kontrak pintar mengambil pendekatan yang sama sekali berbeza. Pada mulanya, salah seorang pengguna menulis kod sumber kontrak pintar, selepas itu kod itu dihantar melalui pengkompil khas untuk platform Ethereum, mendapatkan bytecode untuk mesin maya Ethereumnya sendiri. Bytecode yang terhasil diletakkan dalam medan khas transaksi. Ia diperakui bagi pihak akaun pemula. Seterusnya, transaksi ini disebarkan ke seluruh rangkaian dan meletakkan kod kontrak pintar. Komisen untuk transaksi dan, dengan itu, untuk pelaksanaan kontrak dikeluarkan daripada baki akaun pemula.

Setiap kontrak pintar semestinya mengandungi pembinanya sendiri (kontrak ini). Ia mungkin kosong atau mungkin ada kandungan. Selepas pembina dilaksanakan, pengecam akaun kontrak pintar dibuat, yang menggunakan mana anda boleh menghantar syiling, memanggil kaedah kontrak pintar tertentu, dsb.

Struktur Transaksi Ethereum

Untuk menjadikannya lebih jelas, kami akan mula melihat struktur transaksi Ethereum dan contoh kod kontrak pintar.

Pengenalan kepada Kontrak Pintar

Transaksi Ethereum terdiri daripada beberapa medan. Yang pertama daripada ini, bukan, ialah nombor siri urus niaga tertentu berbanding dengan akaun itu sendiri yang mengedarkannya dan merupakan pengarangnya. Ini adalah perlu untuk membezakan transaksi berganda, iaitu, untuk mengecualikan kes apabila transaksi yang sama diterima dua kali. Dengan menggunakan pengecam, setiap transaksi mempunyai nilai cincang yang unik.

Seterusnya datang bidang seperti harga gas. Ini menunjukkan harga di mana mata wang asas Ethereum ditukar kepada gas, yang digunakan untuk membayar pelaksanaan kontrak pintar dan peruntukan sumber mesin maya. Apakah maksudnya?

Dalam Bitcoin, yuran dibayar terus oleh mata wang asasβ€”Bitcoin itu sendiri. Ini adalah mungkin terima kasih kepada mekanisme mudah untuk mengira mereka: kami membayar dengan ketat untuk jumlah data yang terkandung dalam transaksi. Dalam Ethereum keadaannya lebih rumit, kerana sangat sukar untuk bergantung pada jumlah data transaksi. Di sini, transaksi juga mungkin mengandungi kod program yang akan dilaksanakan pada mesin maya, dan setiap operasi mesin maya mungkin mempunyai kerumitan yang berbeza. Terdapat juga operasi yang memperuntukkan memori untuk pembolehubah. Mereka akan mempunyai kerumitan mereka sendiri, yang mana pembayaran untuk setiap operasi akan bergantung.

Kos setiap operasi dalam setara gas akan tetap. Ia diperkenalkan secara khusus untuk menentukan kos tetap bagi setiap operasi. Bergantung pada beban pada rangkaian, harga gas akan berubah, iaitu, pekali mengikut mana mata wang asas akan ditukar menjadi unit tambahan ini untuk membayar komisen.

Terdapat satu lagi ciri transaksi dalam Ethereum: kod bait yang terkandung di dalamnya untuk pelaksanaan dalam mesin maya akan dilaksanakan sehingga ia selesai dengan beberapa keputusan (berjaya atau gagal) atau sehingga sejumlah syiling yang diperuntukkan habis untuk membayar komisen . Ia adalah untuk mengelakkan situasi di mana, sekiranya berlaku ralat, semua syiling dari akaun pengirim telah dibelanjakan untuk komisen (contohnya, sejenis kitaran kekal yang dimulakan dalam mesin maya), medan berikut wujud - mulakan gas (sering dipanggil had gas) - ia menentukan jumlah maksimum syiling yang pengirim sanggup belanjakan untuk menyelesaikan transaksi tertentu.

Medan seterusnya dipanggil alamat destinasi. Ini termasuk alamat penerima syiling atau alamat kontrak pintar tertentu yang kaedahnya akan dipanggil. Selepas ia datang padang nilai, di mana jumlah syiling yang dihantar ke alamat destinasi dimasukkan.

Seterusnya adalah bidang yang menarik dipanggil data, di mana keseluruhan struktur sesuai. Ini bukan medan yang berasingan, tetapi keseluruhan struktur di mana kod untuk mesin maya ditakrifkan. Anda boleh meletakkan data sewenang-wenangnya di sini - terdapat peraturan berasingan untuk ini.

Dan medan terakhir dipanggil tanda tangan. Ia pada masa yang sama mengandungi kedua-dua tandatangan elektronik pengarang transaksi ini dan kunci awam yang dengannya tandatangan ini akan disahkan. Daripada kunci awam anda boleh mendapatkan pengecam akaun pengirim transaksi ini, iaitu, mengenal pasti secara unik akaun pengirim dalam sistem itu sendiri. Kami mendapati perkara utama tentang struktur urus niaga.

Contoh kod kontrak pintar untuk Solidity

Sekarang mari kita lihat dengan lebih dekat kontrak pintar paling mudah menggunakan 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 ialah kod sumber ringkas yang boleh menyimpan syiling pengguna dan mengembalikannya atas permintaan.

Jadi, terdapat kontrak pintar Bank yang melaksanakan fungsi berikut: ia mengumpul syiling pada bakinya, iaitu, apabila transaksi disahkan dan kontrak pintar sedemikian diletakkan, akaun baharu dicipta yang boleh mengandungi syiling pada bakinya; ia mengingati pengguna dan pengedaran syiling di antara mereka; mempunyai beberapa kaedah untuk menguruskan baki, iaitu, adalah mungkin untuk menambah, mengeluarkan dan menyemak baki pengguna.

Mari kita lihat setiap baris kod sumber. Kontrak ini mempunyai bidang yang tetap. Salah satunya, dengan alamat jenis, dipanggil pemilik. Di sini kontrak mengingati alamat pengguna yang mencipta kontrak pintar ini. Selanjutnya, terdapat struktur dinamik yang mengekalkan surat-menyurat antara alamat dan baki pengguna.

Ini diikuti dengan kaedah Bank - ia mempunyai nama yang sama dengan kontrak. Oleh itu, ini adalah pembinanya. Di sini pembolehubah pemilik diberikan alamat orang yang meletakkan kontrak pintar ini pada rangkaian. Ini adalah satu-satunya perkara yang berlaku dalam pembina ini. Iaitu, msg dalam kes ini adalah betul-betul data yang telah dipindahkan ke mesin maya bersama-sama dengan transaksi yang mengandungi keseluruhan kod kontrak ini. Sehubungan itu, msg.sender ialah pengarang transaksi ini yang mengehoskan kod ini. Dia akan menjadi pemilik kontrak pintar itu.

Kaedah deposit membolehkan anda memindahkan sejumlah syiling ke akaun kontrak melalui transaksi. Dalam kes ini, kontrak pintar, menerima syiling ini, meninggalkannya pada kunci kira-kiranya, tetapi merekodkan dalam struktur baki siapa sebenarnya penghantar syiling ini untuk mengetahui milik siapa syiling tersebut.

Kaedah seterusnya dipanggil pengeluaran dan ia memerlukan satu parameter - jumlah syiling yang seseorang ingin keluarkan dari bank ini. Ini menyemak sama ada terdapat cukup syiling dalam baki pengguna yang memanggil kaedah ini untuk menghantarnya. Jika jumlahnya mencukupi, maka kontrak pintar itu sendiri mengembalikan bilangan syiling itu kepada pemanggil.

Seterusnya datang kaedah untuk menyemak baki semasa pengguna. Sesiapa yang memanggil kaedah ini akan digunakan untuk mendapatkan baki ini dalam kontrak pintar. Perlu diingat bahawa pengubah kaedah ini adalah pandangan. Ini bermakna kaedah itu sendiri tidak mengubah pembolehubah kelasnya dalam apa jua cara dan ia sebenarnya hanya kaedah baca. Tiada transaksi berasingan dibuat untuk memanggil kaedah ini, tiada yuran dibayar, dan semua pengiraan dilakukan secara tempatan, selepas itu pengguna menerima hasilnya.

Kaedah bunuh diperlukan untuk memusnahkan keadaan kontrak pintar. Dan di sini terdapat pemeriksaan tambahan sama ada pemanggil kaedah ini adalah pemilik kontrak ini. Jika ya, maka kontrak itu memusnahkan sendiri, dan fungsi pemusnahan mengambil satu parameter - pengecam akaun yang kontrak akan menghantar semua syiling yang tinggal pada bakinya. Dalam kes ini, syiling yang tinggal akan secara automatik pergi ke alamat pemilik kontrak.

Bagaimanakah nod penuh pada rangkaian Ethereum berfungsi?

Mari kita lihat secara skematik cara kontrak pintar tersebut dilaksanakan pada platform Ethereum dan cara nod rangkaian penuh berfungsi.

Pengenalan kepada Kontrak Pintar

Nod penuh pada rangkaian Ethereum mesti mempunyai sekurang-kurangnya empat modul.
Yang pertama, seperti mana-mana protokol terdesentralisasi, ialah modul rangkaian P2P - modul untuk sambungan rangkaian dan berfungsi dengan nod lain, di mana blok, urus niaga dan maklumat tentang nod lain ditukar. Ini adalah komponen tradisional untuk semua mata wang kripto terdesentralisasi.

Seterusnya, kami mempunyai modul untuk menyimpan data blockchain, memproses, memilih cawangan keutamaan, menambahkan blok, menyahpaut blok, mengesahkan blok ini, dsb.

Modul ketiga dipanggil EVM (mesin maya Ethereum) - ini adalah mesin maya yang menerima bytecode daripada transaksi Ethereum. Modul ini mengambil keadaan semasa akaun tertentu dan membuat perubahan pada keadaannya berdasarkan kod bait yang diterima. Versi mesin maya pada setiap nod rangkaian mestilah sama. Pengiraan yang berlaku pada setiap nod Ethereum adalah sama, tetapi ia berlaku dalam cara tidak segerak: seseorang menyemak dan menerima transaksi ini lebih awal, iaitu, melaksanakan semua kod yang terkandung di dalamnya, dan seseorang kemudian. Sehubungan itu, apabila transaksi dibuat, ia diedarkan ke rangkaian, nod menerimanya, dan pada masa pengesahan, dengan cara yang sama seperti Skrip Bitcoin dilaksanakan dalam Bitcoin, kod bait mesin maya dilaksanakan di sini.

Transaksi dianggap disahkan jika semua kod yang terkandung di dalamnya telah dilaksanakan, keadaan baharu akaun tertentu telah dijana dan disimpan sehingga jelas sama ada transaksi ini telah digunakan atau tidak. Sekiranya transaksi digunakan, maka keadaan ini dianggap bukan sahaja selesai, tetapi juga semasa. Terdapat pangkalan data yang menyimpan keadaan setiap akaun untuk setiap nod rangkaian. Disebabkan fakta bahawa semua pengiraan berlaku dengan cara yang sama dan keadaan blockchain adalah sama, pangkalan data yang mengandungi keadaan semua akaun juga akan sama untuk setiap nod.

Mitos dan batasan kontrak pintar

Bagi sekatan yang wujud untuk platform kontrak pintar yang serupa dengan Ethereum, perkara berikut boleh dipetik:

  • pelaksanaan kod;
  • memperuntukkan ingatan;
  • data blockchain;
  • menghantar bayaran;
  • membuat kontrak baru;
  • memanggil kontrak lain.

Mari kita lihat sekatan yang dikenakan pada mesin maya, dan, dengan itu, menghapuskan beberapa mitos tentang kontrak pintar. Pada mesin maya, yang boleh bukan sahaja dalam Ethereum, tetapi juga dalam platform yang serupa, anda boleh melakukan operasi logik yang sewenang-wenangnya, iaitu, tulis kod dan ia akan dilaksanakan di sana, anda juga boleh memperuntukkan memori. Walau bagaimanapun, yuran dibayar secara berasingan untuk setiap operasi dan untuk setiap unit tambahan memori yang diperuntukkan.

Seterusnya, mesin maya boleh membaca data daripada pangkalan data blockchain untuk menggunakan data ini sebagai pencetus untuk melaksanakan satu atau lain logik kontrak pintar. Mesin maya boleh membuat dan menghantar urus niaga, ia boleh mencipta kontrak baharu dan kaedah panggilan kontrak pintar lain yang telah diterbitkan pada rangkaian: sedia ada, tersedia, dsb.

Mitos yang paling biasa ialah kontrak pintar Ethereum boleh menggunakan maklumat daripada mana-mana sumber Internet mengikut syarat mereka. Sebenarnya mesin maya tidak boleh menghantar permintaan rangkaian ke beberapa sumber maklumat luaran di Internet, iaitu, adalah mustahil untuk menulis kontrak pintar yang akan mengagihkan nilai antara pengguna bergantung pada, katakan, bagaimana cuaca di luar, atau siapa yang memenangi beberapa kejuaraan, atau berdasarkan kejadian lain yang berlaku di dunia luar, kerana maklumat tentang insiden ini sememangnya tiada dalam pangkalan data platform itu sendiri. Iaitu, tiada apa-apa pada blockchain tentang perkara ini. Jika ia tidak muncul di sana, maka mesin maya tidak boleh menggunakan data ini sebagai pencetus.

Kelemahan Ethereum

Mari kita senaraikan yang utama. Kelemahan pertama ialah terdapat beberapa kesukaran dalam mereka bentuk, membangun dan menguji kontrak pintar dalam Ethereum (Ethereum menggunakan bahasa Solidity untuk menulis kontrak pintar). Sesungguhnya, amalan menunjukkan bahawa peratusan yang sangat besar daripada semua kesilapan adalah disebabkan oleh faktor manusia. Ini sebenarnya benar untuk kontrak pintar Ethereum yang telah ditulis yang mempunyai kerumitan purata atau lebih tinggi. Jika untuk kontrak pintar mudah kebarangkalian ralat adalah kecil, maka dalam kontrak pintar yang kompleks sering terdapat ralat yang membawa kepada kecurian dana, pembekuan mereka, pemusnahan kontrak pintar dengan cara yang tidak dijangka, dan lain-lain. Banyak kes sedemikian sudah pun diketahui.

Kelemahan kedua ialah mesin maya itu sendiri tidak sempurna, kerana ia juga ditulis oleh orang. Ia boleh melaksanakan arahan sewenang-wenangnya, dan di dalamnya terdapat kelemahan: beberapa arahan boleh dikonfigurasikan dengan cara tertentu yang akan membawa kepada akibat yang tidak diduga terlebih dahulu. Ini adalah kawasan yang sangat kompleks, tetapi sudah ada beberapa kajian yang menunjukkan bahawa kelemahan ini wujud dalam versi semasa rangkaian Ethereum dan ia boleh menyebabkan kegagalan banyak kontrak pintar.

Satu lagi kesukaran besar, ia boleh dianggap sebagai kelemahan. Ia terletak pada hakikat bahawa anda boleh secara praktikal atau teknikal membuat kesimpulan bahawa jika anda menyusun bytecode kontrak yang akan dilaksanakan pada mesin maya, anda boleh menentukan beberapa susunan operasi tertentu. Apabila dilakukan bersama-sama, operasi ini akan memuatkan mesin maya dengan banyak dan memperlahankannya secara tidak seimbang dengan bayaran yang telah dibayar untuk melaksanakan operasi ini.

Pada masa lalu, sudah ada tempoh dalam pembangunan Ethereum, apabila ramai lelaki yang memahami secara terperinci operasi mesin maya menemui kelemahan sedemikian. Malah, urus niaga membayar yuran yang sangat kecil, tetapi boleh dikatakan memperlahankan keseluruhan rangkaian. Masalah ini sangat sukar untuk diselesaikan, kerana perlu, pertama, untuk menentukannya, kedua, untuk melaraskan harga untuk melaksanakan operasi ini dan, ketiga, untuk menjalankan hard fork, yang bermaksud mengemas kini semua nod rangkaian ke versi baharu perisian, dan kemudian pengaktifan serentak perubahan ini.

Bagi Ethereum, banyak penyelidikan telah dijalankan, banyak pengalaman praktikal telah diperoleh: kedua-dua positif dan negatif, tetapi masih terdapat kesukaran dan kelemahan yang masih perlu ditangani entah bagaimana.

Jadi, bahagian tematik artikel selesai, mari kita beralih kepada soalan yang sering timbul.

FAQ

β€” Jika semua pihak dalam kontrak pintar sedia ada ingin menukar syarat, bolehkah mereka membatalkan kontrak pintar ini menggunakan multisig, dan kemudian mencipta kontrak pintar baharu dengan syarat pelaksanaannya yang dikemas kini?

Jawapan di sini akan menjadi dua kali ganda. kenapa? Kerana dalam satu pihak, kontrak pintar ditakrifkan sekali dan ia tidak lagi membayangkan sebarang perubahan, dan sebaliknya, ia boleh mempunyai logik pratulis yang menyediakan perubahan lengkap atau separa bagi beberapa syarat. Iaitu, jika anda ingin menukar sesuatu dalam kontrak pintar anda, maka anda mesti menetapkan syarat di mana anda boleh mengemas kini syarat ini. Sehubungan itu, hanya dengan cara yang berhemat sebegini bolehlah pembaharuan kontrak itu dianjurkan. Tetapi di sini juga, anda boleh menghadapi masalah: membuat beberapa kesilapan dan mendapat kelemahan yang sepadan. Oleh itu, perkara sedemikian perlu sangat terperinci dan direka dan diuji dengan teliti.

β€” Bagaimana jika pengantara membuat perjanjian dengan salah satu pihak yang mengambil bahagian: escrow atau kontrak pintar? Adakah pengantara diperlukan dalam kontrak pintar?

Pengantara tidak diperlukan dalam kontrak pintar. Ia mungkin tidak wujud. Jika, dalam kes escrow, pengantara masuk ke dalam konspirasi dengan salah satu pihak, maka ya, skim ini kemudiannya kehilangan semua nilainya. Oleh itu, mediator dipilih sedemikian rupa sehingga mereka dipercayai oleh semua pihak yang terlibat dalam proses ini pada masa yang sama. Oleh itu, anda tidak akan memindahkan syiling ke alamat berbilang tandatangan dengan pengantara yang anda tidak percayai.

β€” Adakah mungkin dengan satu transaksi Ethereum untuk memindahkan banyak token berbeza dari alamat anda ke alamat sasaran yang berbeza, contohnya, alamat pertukaran tempat token ini didagangkan?

Ini adalah soalan yang baik dan ia melibatkan model transaksi Ethereum dan bagaimana ia berbeza daripada model Bitcoin. Dan perbezaannya adalah radikal. Jika dalam model transaksi Ethereum anda hanya memindahkan syiling, maka ia hanya dipindahkan dari satu alamat ke alamat yang lain, tiada perubahan, hanya jumlah tertentu yang anda tentukan. Dalam erti kata lain, ini bukan model output yang tidak dibelanjakan (UTXO), tetapi model akaun dan baki yang sepadan. Secara teorinya adalah mungkin untuk menghantar beberapa token berbeza dalam satu transaksi sekaligus jika anda menulis kontrak pintar yang licik, tetapi anda masih perlu membuat banyak transaksi, mencipta kontrak, kemudian memindahkan token dan syiling kepadanya, dan kemudian memanggil kaedah yang sesuai . Ini memerlukan usaha dan masa, jadi dalam praktiknya ia tidak berfungsi seperti itu dan semua pembayaran dalam Ethereum dibuat dalam urus niaga berasingan.

β€” Salah satu mitos mengenai platform Ethereum ialah mustahil untuk menerangkan keadaan yang bergantung pada data sumber Internet luaran, jadi apa yang perlu dilakukan?

Penyelesaiannya ialah kontrak pintar itu sendiri boleh menyediakan satu atau lebih apa yang dipanggil oracle yang dipercayai, yang mengumpul data tentang keadaan perkara di dunia luar dan menghantarnya kepada kontrak pintar melalui kaedah khas. Kontrak itu sendiri menganggap data yang diterima daripada pihak yang dipercayai adalah benar. Untuk kebolehpercayaan yang lebih besar, hanya pilih kumpulan besar peramal dan meminimumkan risiko pakatan sulit mereka. Kontrak itu sendiri mungkin tidak mengambil kira data daripada oracle yang bercanggah dengan majoriti.

Salah satu kuliah kursus dalam talian mengenai Blockchain dikhaskan untuk topik ini - β€œPengenalan kepada Kontrak Pintar".

Sumber: www.habr.com

Tambah komen