Apakah yang perlu kita bina blockchain?

Keseluruhan sejarah umat manusia adalah proses berterusan untuk menyingkirkan rantai dan mencipta rantai baru, bahkan lebih kuat. (Penulis tanpa nama)

Menganalisis banyak projek blockchain (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, dll.), Saya faham bahawa dari sudut teknikal, semuanya dibina berdasarkan prinsip yang sama. Blockchain mengingatkan rumah, yang, walaupun pelbagai reka bentuk, hiasan dan tujuan, mempunyai asas, dinding, bumbung, tingkap, pintu yang disambungkan antara satu sama lain dengan cara tertentu. Dan jika anda memahami prinsip asas reka bentuk bangunan dan mengetahui sifat bahan yang digunakan, maka anda boleh menentukan tujuan yang dimaksudkan untuk rumah tertentu. Pada masa ini, situasi telah timbul dengan blockchain yang semua orang telah mendengar tentangnya, tetapi hanya sedikit orang yang memahami seni bina dan prinsip operasi. Oleh itu, terdapat salah faham mengapa dan bagaimana ia masuk akal untuk menggunakan teknologi blockchain.

Dalam artikel ini kami akan menganalisis sifat-sifat dan prinsip-prinsip yang sama untuk semua blok. Seterusnya, mari kita lihat masalah yang boleh diselesaikan menggunakan blockchain dan untuk mengukuhkan bahan tersebut, mari kita bina blockchain yang kecil tetapi nyata di laman maya kami!

Jadi, mari kita ingat apa masalah yang diselesaikan oleh blokchain pada mulanya.

Saya pasti ramai yang akan berkata tentang pangkalan data yang diedarkan, terdesentralisasi, awam dan tidak berubah. Tetapi mengapa semua ini perlu?

Saya lebih suka untuk mula mempelajari mana-mana teknologi dengan membaca piawaian, kerana semua artikel dan buku mengenai topik yang dikaji adalah berdasarkannya. Tetapi pada masa ini tiada piawaian blockchain; ISO hanya mencipta jawatankuasa untuk perkembangan mereka. Pada masa ini, setiap projek blockchain awam mempunyai dokumen kertas Putih sendiri, yang pada asasnya adalah spesifikasi teknikal. Projek blockchain pertama yang diketahui umum ialah rangkaian Bitcoin. Pergi ke laman web rasmi rangkaian dan lihat di mana semuanya bermula.

Cabaran Blockchain

Jadi, tugas yang diselesaikan oleh blokchain dalam rangkaian perintis Bitcoin adalah untuk melaksanakan pemindahan pemilikan yang dipercayai bagi aset digital (aset) dalam persekitaran yang tidak dipercayai tanpa perantara. Sebagai contoh, dalam rangkaian Bitcoin, aset digital ialah syiling digital bitcoin. Dan semua penyelesaian teknikal Bitcoin dan blockchain lain turun untuk menyelesaikan masalah ini.

Masalah yang diselesaikan oleh blockchain

Katakan organisasi kewangan tertentu mengatakan bahawa ia telah membina rangkaian di seluruh dunia dengan bantuan yang memungkinkan untuk memindahkan wang kepada mana-mana orang. Adakah anda akan mempercayainya? Jika organisasi ini adalah Visa atau MasterCard, kemungkinan besar anda akan mempercayainya, tetapi jika secara relatifnya, AnonymousWorldMoney, anda mungkin tidak akan mempercayainya. kenapa? Tetapi kerana kita tahu dengan baik cara sistem teragih dibuat oleh syarikat swasta, untuk tujuan apa, dan apa yang boleh menyebabkannya. Mari kita lihat lebih dekat masalah sistem sedemikian dan bagaimana ia boleh diselesaikan menggunakan teknologi blockchain.

Katakan bahawa dalam AnonymousWorldMoney bersyarat terdapat pelayan dengan pangkalan data, dan adalah baik jika terdapat beberapa daripada mereka di pusat data yang berbeza. Apabila pengirim memindahkan wang, transaksi didaftarkan, yang direplikasi ke semua pelayan, dan wang itu sampai kepada penerima.

Apakah yang perlu kita bina blockchain?

Dalam dunia yang ideal, skim ini berfungsi dengan baik, tetapi dalam dunia kita masalah berikut timbul:

  1. Masalah mengenal pasti peserta di satu pihak dan keperluan untuk tidak mahu namanya disiarkan di pihak lain. Itu. anda perlu memindahkan wang kepada penerima tertentu dan dengan cara yang tiada siapa yang tahu tentang transaksi ini kecuali peserta dalam transaksi. Bank mempunyai nombor akaun dan kad bank yang dipautkan kepada individu atau entiti undang-undang tertentu, dan kerahsiaan bank melindungi maklumat transaksi. Dan siapa yang menjamin bahawa AnonymousWorldMoney bersyarat tidak menggunakan data peribadi dan maklumat transaksi untuk tujuannya sendiri?
  2. Bagaimana untuk memastikan bahawa penerima menerima dengan tepat jumlah yang dipindahkan kepadanya? Secara relatifnya, pengirim memindahkan $100, dan penerima menerima $10. Pengirim datang ke pejabat AnonymousWorldMoney dengan resitnya, dan kerani menunjukkan versinya, di mana tertulis bahawa pengirim memindahkan hanya $10.
  3. Masalah persekitaran yang tidak dipercayai, sebagai contoh, penipuan yang dipanggil perbelanjaan berganda. Peserta yang tidak bertanggungjawab boleh menghabiskan bakinya beberapa kali sehingga pembayaran direplikasi kepada semua pelayan. Teorem CAP, sudah tentu, tiada siapa yang membatalkan, dan persetujuan akhirnya akan dicapai, tetapi seseorang tidak akan menerima wang untuk perkhidmatan atau barangan yang disediakan. Oleh itu, jika tidak ada kepercayaan sepenuhnya dalam organisasi pembayaran atau peserta dalam transaksi, maka perlu untuk membina rangkaian bukan berdasarkan kepercayaan, tetapi pada kriptografi.
  4. Conditional AnonymousWorldMoney mempunyai bilangan pelayan yang terhad yang mungkin tidak tersedia secara tidak sengaja atau disebabkan niat jahat.
  5. AnonymousWorldMoney akan mengambil komisen ketaranya sendiri.
  6. Kemungkinan kawalan. Semasa operasi Bitcoin, ternyata orang ramai bukan sahaja mahu memindahkan syiling antara satu sama lain, tetapi juga untuk memeriksa pelbagai syarat untuk transaksi, senario kerja program, secara automatik melakukan tindakan bergantung pada syarat, dll.

Bagaimana blockchain menyelesaikan masalah ini

  1. Pengenalpastian peserta dijalankan menggunakan sepasang kunci: peribadi dan awam, dan algoritma tandatangan digital secara unik mengenal pasti pengirim dan penerima, menjadikan identiti mereka tanpa nama.
  2. Transaksi dikumpulkan ke dalam blok, cincangan blok dikira dan ditulis ke dalam blok seterusnya. Urutan merekodkan cincang dalam blok ini memberikan teknologi blockchain namanya, dan ia juga menjadikannya mustahil untuk menukar / memadamkan blok atau transaksi individu daripada blok secara tidak ketara. Oleh itu, jika transaksi dimasukkan dalam rantaian blok, anda boleh yakin bahawa datanya akan kekal tidak berubah.
  3. Penipuan perbelanjaan dua kali dihalang dengan mencapai konsensus rangkaian mengenai data yang dianggap sah dan yang harus dibuang. Dalam rangkaian Bitcoin, konsensus dicapai dengan bukti kerja (PoW).
  4. Kebolehpercayaan rangkaian dicapai oleh fakta bahawa blockchain adalah awam, di mana setiap peserta boleh menjalankan nod mereka sendiri, menerima salinan lengkap blockchain dan, lebih-lebih lagi, secara bebas mula menyemak urus niaga untuk kebenaran. Perlu diingatkan bahawa blok blok moden memungkinkan untuk membina bukan sahaja blok awam (terbuka) tetapi juga blok swasta (tertutup), serta penggunaan skema gabungan.
  5. Blockchain tidak akan menghapuskan sepenuhnya komisen, kerana... anda perlu membayar orang yang menyokong rangkaian, tetapi dalam blockchain keperluan untuk komisen terbukti dengan begitu meyakinkan bahawa tidak ada keraguan tentang keperluannya.
  6. Blockchain moden mempunyai keupayaan untuk melaksanakan logik perniagaan, yang dalam blockchain dipanggil Kontrak Pintar. Logik kontrak pintar dilaksanakan dalam pelbagai bahasa peringkat tinggi.

Seterusnya, kami akan mempertimbangkan penyelesaian ini dengan lebih terperinci.

Seni bina rantaian blok

Komponen Rantaian Sekat

Setiap peserta boleh melancarkan nod mereka sendiri dengan salinan penuh blokchain (nod penuh). Nod penuh yang boleh merekodkan transaksi pada blockchain dipanggil nod konsensus (saksi) atau pelombong (pelombong). Nod penuh yang hanya menyemak ketepatan transaksi dipanggil nod audit (audit). Pelanggan ringan (pelanggan ringan) tidak menyimpan salinan penuh blokchain, tetapi berinteraksi dengan rangkaian menggunakan nod penuh.
Kebanyakan pengguna menggunakan pelanggan ringan atau dompet web untuk membuat transaksi. Semua nod bersambung antara satu sama lain. Dengan set elemen ini, seni bina rangkaian menjadi lebih stabil:

Apakah yang perlu kita bina blockchain?

Kitaran hayat transaksi

Mari lihat kitaran hayat transaksi dan pecahkannya sekeping demi sekeping:

Apakah yang perlu kita bina blockchain?

Teknologi rantaian sekat

Marilah kita membincangkan dengan lebih terperinci mengenai penyelesaian teknikal dan hubungannya antara satu sama lain.

Pengenalan

Setiap transaksi blockchain mesti ditandatangani secara digital. Oleh itu, untuk menyelesaikan transaksi, setiap peserta mesti mempunyai pasangan kunci: swasta / awam. Kadang-kadang sepasang kunci dipanggil dompet, kerana kunci dikaitkan secara unik dengan alamat dan baki digital unik peserta. Pada hakikatnya, kunci dan alamat hanyalah rentetan nombor dalam sistem nombor yang berbeza. Contoh kunci dan alamat dompet:

Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V

Untuk mencipta tandatangan digital dalam blok blok, algoritma berdasarkan lengkung eliptik digunakan: Elliptic Curve Digital Signature Algorithm (ECDSA). Untuk berfungsi, kunci persendirian (nombor 256-bit) biasanya diambil secara rawak. Bilangan pilihan utama adalah 2 hingga kuasa 256, jadi kita boleh bercakap tentang kemustahilan praktikal untuk memadankan nilai kunci peribadi.

Seterusnya, kunci awam diperoleh daripada kunci persendirian dengan mendarabkan nilainya dengan koordinat titik yang terletak pada lengkung eliptik, menghasilkan koordinat titik baharu pada lengkung yang sama. Tindakan ini memastikan anda memperoleh pasangan kunci yang sesuai untuk transaksi menandatangani digital. Akhir sekali, alamat dompet diperoleh secara unik daripada kunci awam.

Terdapat banyak artikel dengan butiran mengenai kriptografi yang digunakan dalam rantaian blok, sebagai contoh: Bitcoin secara ringkas – Kriptografi

Kunci persendirian mestilah dirahsiakan dan disimpan dengan selamat. Kunci awam diketahui oleh semua orang. Jika kunci persendirian hilang, akses kepada aset (syiling) tidak boleh dipulihkan dan wang itu akan hilang selama-lamanya. Oleh itu, tugas menyimpan kunci peribadi dengan selamat adalah sangat relevan, kerana Ini bukan bank di mana anda sentiasa boleh datang dengan pasport anda dan memulihkan akaun anda. Terdapat keseluruhan industri untuk pengeluaran yang dipanggil dompet crypto sejuk, serupa dengan pemacu kilat:

Apakah yang perlu kita bina blockchain?

atau anda boleh menggunakan kaedah yang lebih dipercayai, contohnya, mengecap nilai kunci persendirian pada token:

Apakah yang perlu kita bina blockchain?

Transaksi

Butiran lanjut tentang struktur transaksi boleh didapati dalam artikel Bitcoin secara ringkas – Transaksi. Adalah penting untuk kita memahami bahawa setiap transaksi mempunyai sekurang-kurangnya data berikut:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ адрСс отправитСля
To: 0x367adb7894334678b90Π°fe7882a5b06f7fbc783a - Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ адрСс получатСля
Value: 0.0001 - сумма Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - Ρ…ΡΡˆ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

Seterusnya, urus niaga ditandatangani dengan kunci peribadi dan dihantar (lihat butiran mengenai operasi protokol Bitcoin secara ringkas-Protokol) kepada semua nod dalam rantaian blok yang menyemak urus niaga untuk kesahihan. Algoritma pengesahan transaksi bukan remeh dan termasuk dua belas langkah.

Blok urus niaga

Selepas menyemak kesahihan transaksi, nod membentuk blok daripadanya. Selain urus niaga, cincang blok sebelumnya dan nombor (Nonce counter) ditulis ke dalam blok, dan cincang blok semasa dikira menggunakan algoritma SHA-256. Cincang mestilah mempunyai keadaan kerumitan yang ditetapkan. Sebagai contoh, dalam rangkaian Bitcoin, kesukaran cincangan diubah secara automatik setiap 2 minggu bergantung pada kuasa rangkaian supaya blok dijana lebih kurang sekali setiap 10 minit. Kerumitan ditentukan oleh keadaan berikut: cincang yang ditemui mestilah kurang daripada nombor yang telah ditetapkan. Jika syarat ini tidak dipenuhi, maka 1 ditambahkan pada Nonce, dan kerja mengira cincang diulang. Untuk memilih cincang, medan Nonce digunakan, kerana Ini adalah satu-satunya data dalam blok yang boleh diubah; selebihnya mesti kekal tidak berubah. Cincang yang sah mesti mempunyai bilangan sifar pendahuluan tertentu, seperti salah satu cincang sebenar:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Berjaya mencari cincang adalah bukti kerja yang dilakukan (Proof-of-Work, PoW) untuk rangkaian Bitcoin atau Ethereum. Proses mencari cincang dipanggil perlombongan, serupa dengan perlombongan emas. Nama itu agak tepat mentakrifkan intipati proses itu, kerana terdapat carian mudah pilihan, dan jika seseorang menemui hash yang sesuai, maka ini benar-benar bertuah. Ia seperti mencari ketulan emas sebenar dalam banyak batu sisa. Ganjaran blok kini ialah 12.5 BTC dan jika anda mendarabkannya dengan kadar Bitcoin semasa $3900, anda mendapat lebih daripada satu kilogram emas tulen. Ada sesuatu untuk diperjuangkan!

Selepas berjaya mencari cincang, blok dan cincang yang ditemui itu sendiri ditulis ke blok blok sebagai blok seterusnya. Butiran lanjut mengenai struktur blok boleh didapati dalam artikel Bitcoin secara ringkas-Blockchain, dan di bawah ialah gambar rajah yang dipermudahkan:

Apakah yang perlu kita bina blockchain?

Blockchain bermula dengan blok yang belum mempunyai cincang blok sebelumnya. Hanya terdapat satu blok sedemikian dalam blokchain dan mempunyai nama blok Genesis sendiri. Blok selebihnya mempunyai struktur yang sama dan hanya berbeza dalam bilangan transaksi. Urus niaga sebenar dan blok yang sedang dibuat dalam Bitcoin atau Ethereum boleh dilihat dalam Blok Explorer.

Saiz blok dalam Bitcoin dihadkan kepada 1MB dan dengan jumlah maklumat minimum dalam transaksi kira-kira 200 bait, bilangan maksimum transaksi dalam blok boleh menjadi kira-kira 6000. Dari sini, dengan cara ini, mengikuti prestasi Bitcoin, yang semua orang ketawa: satu blok dijana kira-kira sekali setiap 10 minit * 60 saat = 600 saat, yang memberikan prestasi rasmi kira-kira 10 TPS. Walaupun sebenarnya, ini bukan produktiviti, tetapi algoritma kerja yang sengaja dilaksanakan. Dalam Ethereum, untuk persaingan, mereka hanya membuat masa penjanaan blok 15 saat. dan produktiviti secara rasmi melonjak. Oleh itu, dalam blockchain yang menggunakan PoW sebagai konsensus, tidak masuk akal untuk membandingkan prestasi sama sekali, kerana ia secara langsung bergantung pada kerumitan pengiraan cache, yang boleh diberikan kepada sebarang nilai.

garpu

Apa yang berlaku jika, sebagai contoh, beberapa nod menemui cincang yang memenuhi syarat kerumitan, tetapi berbeza dari segi nilai (dengan kata lain, mereka mencapai kata sepakat yang berbeza) dan menulis blok ke blok blok? Mari lihat bagaimana blockchain melindungi daripada situasi ini. Dalam kes ini, apa yang dipanggil fork berlaku, dan blockchain mempunyai dua versi rantai:

Apakah yang perlu kita bina blockchain?

Apa yang berlaku seterusnya? Seterusnya, sebahagian daripada rangkaian mula berfungsi pada blok N+2 dari satu rantai, dan sebahagian daripada yang lain:

Apakah yang perlu kita bina blockchain?

Salah satu daripada blok ini akan ditemui lebih awal dan dihantar ke blockchain, dan kemudian, mengikut peraturan, blockchain perlu beralih kepada rantaian yang lebih panjang dan membatalkan semua transaksi dari blok alternatif:

Apakah yang perlu kita bina blockchain?

Pada masa yang sama, situasi mungkin timbul apabila transaksi peserta hanya berada di salah satu blok garpu, yang telah dibatalkan. Oleh itu, untuk memastikan transaksi yang diingini direkodkan dalam rantaian blok, terdapat cadangan umum - sebelum mempercayai transaksi, anda harus menunggu sehingga beberapa blok seterusnya ditambahkan pada rantaian blok. Pengesyoran untuk berapa banyak blok untuk menunggu blok yang berbeza berbeza-beza. Sebagai contoh, untuk rangkaian Bitcoin minimum ialah 2 blok, maksimum ialah 6.

Gambar yang sama dengan garpu blok akan diperhatikan semasa serangan yang dipanggil 51% - ini adalah apabila sekumpulan pelombong cuba mengembangkan rantaian blok alternatif, berusaha untuk membatalkan rantaian dengan transaksi penipuan mereka. Walaupun pada masa ini, bukannya penipuan, adalah lebih menguntungkan untuk membelanjakan kuasa anda pada perlombongan yang jujur.

Permuafakatan

Untuk merekodkan blok pada blockchain, rangkaian mesti mencapai kata sepakat. Mari kita ingat tugas untuk mencapai konsensus dalam rangkaian komunikasi komputer. Masalah ini dirumuskan sebagai tugas jeneral Byzantine BFT (Toleransi kesalahan Byzantine). Meninggalkan penerangan indah tentang masalah tentera Byzantine, masalahnya boleh dirumuskan seperti berikut: bagaimana nod rangkaian boleh mencapai hasil yang sama jika beberapa nod rangkaian boleh dengan sengaja memesongkannya. Algoritma sedia ada untuk menyelesaikan masalah BFT menunjukkan bahawa rangkaian boleh berfungsi dengan betul jika terdapat kurang daripada 1/3 penipu. Mengapakah konsensus BFT tidak digunakan pada rangkaian Bitcoin? Mengapa perlu menggunakan PoW? Terdapat beberapa sebab:

  • BFT berfungsi dengan baik dengan set kecil nod tetap, tetapi dalam blok blok awam bilangan nod tidak dapat diramalkan dan, lebih-lebih lagi, nod boleh dihidupkan dan dimatikan secara rawak.
  • Ia adalah perlu untuk memotivasikan orang ramai untuk melancarkan nod blockchain. Untuk melakukan ini, orang mesti diberi ganjaran. Dalam BFT secara rasmi tiada apa-apa untuk menerima ganjaran, tetapi ganjaran untuk PoW adalah jelas kepada semua orang pada tahap intuitif: untuk elektrik yang digunakan oleh pemproses dalam proses mencari cincang blok.

Sebagai tambahan kepada PoW, terdapat beberapa konsensus lain yang digunakan dalam blockchain moden, sebagai contoh:

  • PoS (Proof-of-Stake) - pada blockchain Hyperledger
  • DPoS (Delegated Proof-of-Stake) - pada blockchain BitShares
  • Pengubahsuaian BFT: SBFT (Simplified BFT) dan PBFT (Praktikal BFT), contohnya dalam blockchain Exonum

Mari kita fikirkan sedikit tentang konsensus PoS, kerana... Ia adalah PoS dan jenisnya yang paling meluas dalam rantaian blok peribadi. Kenapa secara peribadi? Di satu pihak, ciri-ciri PoS adalah lebih baik berbanding dengan PoW, kerana Untuk mencapai konsensus, kurang sumber pengkomputeran diperlukan, yang bermaksud kelajuan menulis data ke blockchain meningkat. Tetapi sebaliknya, PoS mempunyai lebih banyak peluang untuk penipuan, jadi untuk meneutralkan ini, semua peserta dalam blockchain mesti diketahui.

Konsensus PoS adalah berdasarkan pemilihan nod yang boleh menulis blok dengan transaksi ke blockchain bergantung pada jumlah dana dalam akaun, atau sebaliknya, bukan dalam akaun, tetapi dalam cagaran, i.e. Lebih banyak dana yang anda miliki sebagai cagaran, lebih besar kemungkinan rangkaian akan memilih nod anda untuk menulis blok. Deposit tidak akan dikembalikan jika blok tidak sah. Ini memberikan perlindungan terhadap penipuan. Terdapat variasi PoS berikut:

  • Konsensus Delegated PoS (DPoS) membahagikan peserta kepada "pengundi" dan "pengesah". Pemegang syiling (peserta mengundi) mewakilkan kuasa mereka untuk mengesahkan dan merekodkan urus niaga pada blockchain kepada peserta lain. Oleh itu, pengesah melakukan semua kerja pengiraan dan menerima ganjaran untuknya, dan kehadiran peserta mengundi menjamin kejujuran pengesah, kerana mereka boleh ditukar pada bila-bila masa.
  • Konsensus LPoS (Leased Proof-of-Stake) membolehkan anda memajak dana anda kepada nod lain supaya mereka mempunyai peluang yang lebih baik untuk mengesahkan blok. Itu. Anda boleh menerima komisen untuk transaksi tanpa mengambil bahagian dalam pengesahan transaksi sebenar dan perlombongan blok.

Terdapat beberapa konsensus lain yang belum digunakan secara meluas, saya hanya akan menyenaraikannya di sini untuk mendapatkan maklumat, dan gambaran keseluruhan algoritma konsensus itu sendiri boleh didapati, sebagai contoh, dalam artikel: Algoritma Konsensus dalam Blockchain.

  • PoET (Bukti Masa Berlalu)
  • PoC (Bukti Kapasiti)
  • PoB (Bukti Pembakaran)
  • PoWeight (Bukti Berat)
  • PoA (Bukti-Aktiviti) – PoW + PoS
  • PoI (Bukti Penting)

Kebolehpercayaan dan model penggunaan blockchain

Blockchain awam

Kemampanan Awam atau nama lain Blockchain tanpa kebenaran Ini dicapai dengan membenarkan sesiapa sahaja menyambung dan melihat maklumat atau bahkan menyambungkan nod mereka sendiri, dan kepercayaan dibina atas konsensus PoW.

Blockchain peribadi

Swasta atau Blockchain yang Dibenarkan Persendirian. Dalam rantaian blok ini, hanya kumpulan peserta tertentu (organisasi atau orang) mempunyai akses kepada maklumat. Blockchain sedemikian dibina oleh organisasi dengan matlamat untuk meningkatkan manfaat atau kecekapan keseluruhan. Kebolehpercayaan mereka dipastikan oleh matlamat bersama peserta dan algoritma konsensus PoS dan BFT.

Konsortium rantaian blok

Terdapat Konsortium atau Blockchain yang Dibenarkan Awam. Ini adalah blok blok yang boleh disambungkan oleh sesiapa sahaja untuk melihat, tetapi peserta boleh menambah maklumat atau menyambungkan nodnya hanya dengan kebenaran peserta lain. Blockchain sedemikian dibina oleh organisasi untuk meningkatkan kepercayaan di pihak pelanggan atau pengguna produk atau masyarakat secara keseluruhan. Di sini, kebolehpercayaan juga dicapai dengan kehadiran kepercayaan antara peserta dan algoritma konsensus PoS dan BFT yang sama.

Kontrak Pintar

Rantaian sekat yang dilaksanakan selepas Bitcoin mempunyai, pada satu tahap atau yang lain, menambah keupayaan untuk melaksanakan kontrak pintar. Pada asasnya, kontrak pintar ialah transaksi di mana kod program diletakkan untuk pelaksanaan. Kontrak pintar pada rangkaian Ethereum dilaksanakan dalam EVM (Mesin Maya Ethereum). Untuk mula melaksanakan kontrak pintar, kontrak itu mesti dilancarkan secara eksplisit oleh transaksi lain atau prasyarat untuk pelaksanaan mesti dipenuhi. Keputusan pelaksanaan kontrak pintar juga akan direkodkan dalam rantaian blok. Menerima data dari luar blockchain adalah mungkin, tetapi sangat terhad.

Apakah logik perniagaan yang boleh dilaksanakan menggunakan kontrak pintar? Sebenarnya, tidak banyak, sebagai contoh, menyemak keadaan menggunakan data dari blokchain, menukar pemilik aset digital bergantung pada syarat ini, merekodkan data dalam storan kekal dalam blokchain. Logik ini dilaksanakan dalam bahasa khas peringkat tinggi Solidity.

Contoh klasik kefungsian yang dilaksanakan menggunakan kontrak pintar ialah pengeluaran token untuk ICO. Sebagai contoh, saya melaksanakan kontrak pintar untuk mengeluarkan 500 AlexToken yang sederhana. Oleh pautan dalam Etherscan adalah

kod sumber kontrak pintar dalam bahasa Solidity

pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken 
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart, 
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO 
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance); 
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken 
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}

dan perwakilan binari seperti yang dilihat oleh rangkaian

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Butiran lanjut tentang kontrak pintar boleh didapati dalam artikel: Apakah kontrak pintar dalam Ethereum.

Kesimpulan

Kami telah menyenaraikan teknologi di mana blockchain moden dibina dan cara ia disambungkan antara satu sama lain. Sekarang mari kita rumuskan masalah mana yang boleh diselesaikan menggunakan rantaian blok, dan penyelesaian mana yang paling baik, tidak berkesan. Jadi, menggunakan blockchain tidak perlu jika:

  • Urus niaga dijalankan dalam persekitaran yang dipercayai;
  • Kehadiran suruhanjaya perantara tidak memburukkan kehidupan peserta;
  • Peserta tidak mempunyai harta yang boleh diwakili sebagai aset digital;
  • Tiada pengagihan dalam aset digital, i.e. nilai itu dimiliki atau dibekalkan oleh seorang peserta sahaja.

Apakah masa depan untuk blockchain? Sekarang kita hanya boleh membuat spekulasi mengenai kemungkinan cara untuk pembangunan teknologi blockchain:

  • Blockchain akan menjadi teknologi pangkalan data biasa yang sama seperti, contohnya, SQL atau NoSQL untuk menyelesaikan pelbagai masalah khususnya;
  • Blockchain akan menjadi protokol yang meluas, seperti HTTP adalah untuk Internet;
  • Blockchain akan menjadi asas untuk sistem kewangan dan politik baharu di planet ini!

Dalam bahagian seterusnya kita akan melihat apakah blockchain yang wujud pada masa ini dan mengapa ia digunakan dalam industri yang berbeza.

Ini hanya permulaan!

Sumber: www.habr.com

Tambah komen