Apa kita kudu mbangun blockchain?

Kabeh sejarah manungsa minangka proses terus-terusan nyingkirake rantΓ© lan nggawe rantai anyar, sing luwih kuwat. (Penulis anonim)

Nganalisis akeh proyek pamblokiran (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, lan sapiturute), aku ngerti yen saka sudut pandang teknis, kabeh dibangun kanthi prinsip sing padha. Blockchain kaya omah, sing, sanajan ana macem-macem desain, dekorasi lan tujuan, duwe pondasi, tembok, atap, jendhela, lawang sing disambungake kanthi cara tartamtu. Lan yen sampeyan ngerti prinsip dhasar desain bangunan lan ngerti sifat-sifat bahan sing digunakake, sampeyan bisa nemtokake tujuan omah tartamtu. Saiki, ana kahanan karo blockchain sing kabeh wong wis krungu babagan iki, nanging sawetara wong ngerti arsitektur lan prinsip operasi. Mulane, ana salah pangerten kenapa lan kepiye carane nggunakake teknologi blockchain.

Ing artikel iki, kita bakal nganalisa sifat lan prinsip umum kanggo kabeh blockchain. Sabanjure, ayo ndeleng masalah sing bisa ditanggulangi kanthi nggunakake pamblokiran lan kanggo nguatake materi kasebut, ayo mbangun blokir cilik nanging nyata ing situs virtual kita!

Dadi, ayo elinga masalah apa sing diatasi blockchain sing wiwitane ditanggulangi.

Aku yakin manawa akeh sing bakal ngomong babagan database sing disebarake, desentralisasi, umum lan ora bisa diganti. Nanging kenapa kabeh iki perlu?

Aku luwih seneng miwiti sinau teknologi apa wae kanthi maca standar, amarga kabeh artikel lan buku babagan topik sing diteliti adhedhasar. Nanging saiki ora ana standar blockchain; ISO mung digawe panitia kanggo pangembangane. Saiki, saben proyek blockchain umum duwe dokumen kertas Putih dhewe, sing sejatine minangka spesifikasi teknis. Proyek blockchain pisanan sing dikenal umum yaiku jaringan Bitcoin. Pindhah menyang situs web resmi jaringan lan katon ngendi iku kabeh wiwit.

Tantangan Blockchain

Dadi, tugas sing ditanggulangi pamblokiran ing jaringan pionir Bitcoin yaiku kanggo nindakake transfer kepemilikan sing dipercaya saka aset digital (aset) ing lingkungan sing ora dipercaya tanpa perantara. Contone, ing jaringan Bitcoin, aset digital yaiku koin digital bitcoin. Lan kabeh solusi teknis Bitcoin lan pamblokiran liyane teka kanggo ngrampungake masalah iki.

Masalah sing ditanggulangi blockchain

Upamane organisasi finansial tartamtu ujar manawa wis nggawe jaringan ing saindenging jagad kanthi bantuan sing bisa nransfer dhuwit menyang sapa wae. Apa sampeyan bakal percaya dheweke? Yen organisasi iki Visa utawa MasterCard, paling kamungkinan sampeyan bakal pracaya, nanging yen, relatif ngandika, AnonymousWorldMoney, sampeyan mbokmenawa ora bakal. Kenging punapa? Nanging amarga kita ngerti banget carane sistem mbagekke digawe dening perusahaan swasta, kanggo tujuan apa, lan apa iki bisa mimpin kanggo. Ayo goleki kanthi luwih rinci babagan masalah sistem kasebut lan kepiye carane bisa ditanggulangi kanthi nggunakake teknologi blockchain.

Ayo dadi ngomong sing ing AnonymousWorldMoney kondisional ana server karo database, lan iku apik yen ana sawetara wong ing pusat data beda. Nalika pangirim nransfer dhuwit, transaksi didaftar, sing ditiru menyang kabeh server, lan dhuwit kasebut tekan panampa.

Apa kita kudu mbangun blockchain?

Ing donya sing becik, skema iki bisa digunakake kanthi apik, nanging ing kita ana masalah ing ngisor iki:

  1. Masalah ngenali peserta ing tangan siji lan perlu kanggo anonimitas transaksi ing sisih liyane. Sing. sampeyan kudu nransfer dhuwit menyang panampa tartamtu lan kanthi cara sing ora ana sing ngerti babagan transaksi iki kajaba peserta ing transaksi kasebut. Bank-bank duwe nomer akun lan kertu bank sing disambung menyang individu utawa entitas legal tartamtu, lan rahasia bank nglindhungi informasi transaksi. Lan sapa sing njamin yen AnonymousWorldMoney bersyarat ora nggunakake data pribadhi lan informasi transaksi kanggo tujuane dhewe?
  2. Carane nggawe manawa panampa nampa persis jumlah sing ditransfer kanggo wong? Relatif ngandika, pangirim nransfer $100, lan panampa nampa $10. Pangirim teka menyang kantor AnonymousWorldMoney karo kuitansi, lan juru tulis nuduhake versi, ngendi iku ditulis sing pangirim ditransfer mung $10.
  3. Masalah lingkungan sing ora dipercaya, umpamane, penipuan sing diarani belanja kaping pindho. Peserta sing ora sopan bisa nglampahi imbangan kaping pirang-pirang nganti pembayaran ditiru menyang kabeh server. Teorema CAP, mesthi, ora ana siji dibatalake, lan persetujuan pungkasanipun bakal ngrambah, nanging wong ora bakal nampa dhuwit kanggo layanan utawa barang kasedhiya. Mulane, yen ora ana kapercayan lengkap ing organisasi pembayaran utawa peserta ing transaksi, mula perlu kanggo mbangun jaringan sing ora adhedhasar kapercayan, nanging ing kriptografi.
  4. Conditional AnonymousWorldMoney duwe sawetara server winates sing bisa uga ora kasedhiya kanthi ora sengaja utawa amarga niat jahat.
  5. AnonymousWorldMoney bakal njupuk komisi nyata dhewe.
  6. Kemungkinan kontrol. Sajrone operasi Bitcoin, ternyata wong ora mung pengin nransfer dhuwit recehan, nanging uga mriksa macem-macem kondisi kanggo transaksi, skenario karya program, kanthi otomatis nindakake tumindak gumantung ing kahanan, etc.

Kepiye blockchain ngatasi masalah kasebut

  1. Identifikasi peserta ditindakake kanthi nggunakake sepasang kunci: pribadi lan umum, lan algoritma tandha digital kanthi unik ngenali pangirim lan panampa, supaya identitase anonim.
  2. Transaksi diklumpukake dadi blok, hash blok diitung lan ditulis ing blok sabanjure. Urutan ngrekam hash ing blok kasebut menehi jeneng teknologi blockchain, lan uga ora bisa ngganti / mbusak blok utawa transaksi individu saka blok. Mangkono, yen transaksi kalebu ing pamblokiran, sampeyan bisa yakin manawa data kasebut bakal tetep ora owah.
  3. Penipuan mbuwang kaping pindho dicegah kanthi nggayuh konsensus jaringan babagan data sing dianggep bener lan sing kudu dibuwang. Ing jaringan Bitcoin, konsensus digayuh kanthi bukti karya (PoW).
  4. Keandalan jaringan kasebut digayuh kanthi kasunyatan manawa pamblokiran kasebut umum, ing ngendi saben peserta bisa mbukak simpul dhewe, nampa salinan lengkap pamblokiran lan, luwih-luwih, kanthi mandiri miwiti mriksa transaksi kanggo bener. Perlu dicathet yen pamblokiran modern bisa nggawe ora mung pamblokiran umum (mbukak) nanging uga pribadi (ditutup), uga nggunakake skema gabungan.
  5. Blockchain ora bakal ngilangi komisi, amarga ... sampeyan kudu mbayar wong-wong sing ndhukung jaringan, nanging ing pamblokiran perlu kanggo komisi wis kabukten supaya convincingly sing ora ana sangsi babagan kabutuhan.
  6. Blockchain modern nduweni kemampuan kanggo ngetrapake logika bisnis, sing ing blok kasebut diarani Smart Contracts. Logika kontrak pinter dileksanakake ing macem-macem basa tingkat dhuwur.

Sabanjure, kita bakal nimbang solusi kasebut kanthi luwih rinci.

Arsitektur blockchain

Komponen Blockchain

Saben peserta bisa miwiti simpul dhewe kanthi salinan lengkap blockchain (simpul lengkap). Node lengkap sing bisa ngrekam transaksi ing blockchain diarani simpul konsensus (saksi) utawa panambang (penambang). Node lengkap sing mung mriksa kabeneran transaksi diarani simpul audit (audit). Klien cahya (klien cahya) ora nyimpen salinan lengkap blockchain, nanging sesambungan karo jaringan nggunakake node lengkap.
Umume pangguna nggunakake klien ringan utawa dompet web kanggo nggawe transaksi. Kabeh simpul disambungake siji liyane. Kanthi set unsur iki, arsitektur jaringan dadi luwih stabil:

Apa kita kudu mbangun blockchain?

Siklus urip transaksi

Ayo goleki siklus urip transaksi lan pecahake sepotong:

Apa kita kudu mbangun blockchain?

Teknologi Blockchain

Ayo dadi luwih rinci babagan solusi teknis lan hubungane karo siji liyane.

Identifikasi

Saben transaksi blockchain kudu ditandatangani kanthi digital. Mula, kanggo ngrampungake transaksi, saben peserta kudu duwe pasangan kunci: pribadi / umum. Kadhangkala sepasang kunci diarani dompet, amarga tombol unik gadhah alamat digital unik peserta lan imbangan. Ing kasunyatan, tombol lan alamat mung strings saka nomer ing sistem nomer beda. Conto kunci lan alamat dompet:

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

Kanggo nggawe teken digital ing blockchains, algoritma adhedhasar kurva elliptic digunakake: Elliptic Curve Digital Signature Algorithm (ECDSA). Kanggo bisa digunakake, kunci pribadi (nomer 256-bit) biasane dijupuk kanthi acak. Jumlah opsi tombol yaiku 2 kanggo kekuwatan 256, supaya kita bisa ngomong babagan impossibility praktis kanggo cocog karo nilai kunci pribadi.

Sabanjure, kunci umum dipikolehi saka pribadhi kanthi nggandakake nilai kasebut kanthi koordinat titik sing ana ing kurva elips, sing ngasilake koordinat titik anyar ing kurva sing padha. Tumindak iki njamin sampeyan entuk pasangan kunci sing cocog kanggo transaksi tandha digital. Akhire, alamat dompet unik asalΓ© saka kunci umum.

Ana akeh artikel kanthi rincian babagan kriptografi sing digunakake ing pamblokiran, contone: Bitcoin kanthi ringkes - Kriptografi

Kunci pribadhi kudu rahasia banget lan dijaga kanthi aman. Kunci umum dikenal kabeh wong. Yen kunci pribadi ilang, akses menyang aset (koin) ora bisa dibalèkaké lan dhuwit bakal ilang ing salawas-lawase. Mulane, tugas nyimpen kunci pribadi kanthi aman banget relevan, amarga Iki ora bank ngendi sampeyan bisa tansah teka karo passport lan mulihake akun. Ana kabeh industri kanggo produksi sing diarani dompet crypto kadhemen, padha karo flash drive:

Apa kita kudu mbangun blockchain?

utawa sampeyan bisa nggunakake cara sing luwih dipercaya, contone, stamping nilai kunci pribadi ing token:

Apa kita kudu mbangun blockchain?

Transaksi

Rincian liyane babagan struktur transaksi bisa ditemokake ing artikel kasebut Bitcoin ing ringkesan - Transaksi. Penting kanggo kita ngerti manawa saben transaksi duwe paling ora data ing ngisor iki:

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

Sabanjure, transaksi kasebut ditandatangani nganggo kunci pribadi lan dikirim metu (ndeleng rincian babagan operasi protokol Bitcoin ing Cekakipun-Protokol) menyang kabeh simpul ing pamblokiran sing mriksa transaksi kanggo validitas. Algoritma verifikasi transaksi ora pati penting lan kalebu rong puluh langkah.

Blok transaksi

Sawise mriksa validitas transaksi, node mbentuk blok saka wong-wong mau. Saliyane transaksi, hash blok sadurunge lan nomer (Nonce counter) ditulis ing blok kasebut, lan hash blok saiki diwilang nggunakake algoritma SHA-256. Hash kudu nggawe kahanan kerumitan. Contone, ing jaringan Bitcoin, kangelan saka hash diganti kanthi otomatis saben 2 minggu gumantung saka daya jaringan supaya blok digawe kira-kira sapisan saben 10 menit. Kompleksitas ditemtokake dening kondisi ing ngisor iki: hash sing ditemokake kudu kurang saka nomer sing wis ditemtokake. Yen kondisi iki ora ketemu, banjur 1 ditambahake menyang Nonce, lan karya ngetung hash diulang. Kanggo milih hash, kolom Nonce digunakake, amarga Iki mung data ing blok sing bisa diganti; liyane kudu tetep ora diganti. Hash sing bener kudu duwe nomer nol utama, kayata salah sawijining hash nyata:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Sukses nemokake hash minangka bukti karya sing wis rampung (Proof-of-Work, PoW) kanggo jaringan Bitcoin utawa Ethereum. Proses nemokake hash diarani pertambangan, padha karo pertambangan emas. Jeneng kasebut kanthi tepat nemtokake inti saka proses kasebut, amarga ana telusuran pilihan sing gampang, lan yen ana wong sing nemokake hash sing cocog, mula iki pancene luck. Iku kaya golek nugget emas nyata ing ton saka sampah rock. Ganjaran pamblokiran saiki 12.5 BTC lan yen sampeyan tikelake kanthi tingkat Bitcoin saiki $ 3900, sampeyan entuk luwih saka kilogram emas murni. Ana sing kudu diperjuangake!

Sawise sukses nemokake hash, blok lan hash sing ditemokake dhewe ditulis ing blokchain minangka blok sabanjure. Rincian liyane babagan struktur blok bisa ditemokake ing artikel kasebut Bitcoin ing Cekakipun-Blockchain, lan ing ngisor iki diagram sing disederhanakake:

Apa kita kudu mbangun blockchain?

Blockchain diwiwiti kanthi blok sing durung duwe hash saka blok sadurunge. Mung ana siji blok ing blok kasebut lan duwe jeneng blok Genesis dhewe. Blok sing isih ana duwe struktur sing padha lan beda-beda mung ing jumlah transaksi. Transaksi nyata lan pamblokiran sing saiki digawe ing Bitcoin utawa Ethereum bisa dideleng ing Blokir Explorer.

Ukuran blok ing Bitcoin diwatesi nganti 1MB lan kanthi jumlah informasi minimal ing transaksi udakara 200 bita, jumlah maksimal transaksi ing blok bisa udakara 6000. Saka kene, kanthi cara, nderek kinerja Bitcoin, sing saben wong ngguyu: blok digawe kira-kira sapisan saben 10 menit * 60 detik = 600 detik, sing menehi kinerja resmi babagan 10 TPS. Sanajan nyatane, iki dudu produktivitas, nanging algoritma kerja sing sengaja ditindakake. Ing Ethereum, kanggo kompetisi, dheweke mung nggawe wektu generasi blok 15 detik. lan produktivitas resmi melonjak. Mulane, ing pamblokiran sing nggunakake PoW minangka konsensus, ora ana gunane kanggo mbandhingake kinerja, amarga iku langsung gumantung ing kerumitan pitungan cache, kang bisa diutus kanggo Nilai sembarang.

Garpu

Apa sing kedadeyan yen, contone, sawetara simpul nemokake hash sing cocog karo kondisi kerumitan, nanging beda-beda ing nilai (kanthi tembung liya, padha teka ing konsensus sing beda) lan nulis blok menyang blok? Ayo ndeleng kepiye blockchain nglindhungi kahanan iki. Ing kasus iki, garpu sing diarani, lan pamblokiran duwe rong versi rantai:

Apa kita kudu mbangun blockchain?

Apa sing kedadeyan sabanjure? Sabanjure, bagean saka jaringan wiwit nggarap blok N + 2 saka siji rantai, lan bagean saka liyane:

Apa kita kudu mbangun blockchain?

Salah sawijining pamblokiran kasebut bakal ditemokake sadurunge lan dikirim menyang pamblokiran, banjur, miturut aturan, pamblokiran kudu ngalih menyang rantai sing luwih dawa lan mbatalake kabeh transaksi saka blok alternatif:

Apa kita kudu mbangun blockchain?

Ing wektu sing padha, kahanan bisa uga muncul nalika transaksi peserta mung ana ing salah sawijining blok garpu, sing dibatalake. Mulane, kanggo mesthekake yen transaksi sing dikarepake dicathet ing pamblokiran, ana rekomendasi umum - sadurunge ngandelake transaksi kasebut, sampeyan kudu ngenteni nganti sawetara blok sabanjure ditambahake ing pamblokiran kasebut. Rekomendasi babagan pirang-pirang blok kanggo ngenteni blokir sing beda-beda beda-beda. Contone, kanggo jaringan Bitcoin minimal 2 blok, maksimal 6.

Gambar sing padha karo garpu pemblokiran bakal diamati sajrone serangan sing diarani 51% - iki nalika klompok penambang nyoba ngembangake rantai blok alternatif, ngupaya mbatalake rantai kasebut kanthi transaksi penipuan. Sanajan saiki, tinimbang penipuan, luwih nguntungake nggunakake kekuwatan sampeyan kanggo pertambangan sing jujur.

Konsensus

Kanggo ngrekam blok ing pamblokiran, jaringan kudu entuk konsensus. Ayo padha ngelingi tugas kanggo nggayuh konsensus ing jaringan komunikasi komputer. Masalah kasebut dirumusake minangka tugas jenderal Bizantium BFT (Toleransi kesalahan Byzantine). Ngilangi gambaran sing apik babagan masalah tentara Bizantium, masalah kasebut bisa dirumusake kaya ing ngisor iki: kepiye simpul jaringan bisa entuk asil sing umum yen sawetara kelenjar jaringan kanthi sengaja bisa ngrusak. Algoritma sing ana kanggo ngatasi masalah BFT nuduhake yen jaringan bisa dienggo kanthi bener yen ana kurang saka 1/3 penipu. Napa konsensus BFT durung ditrapake ing jaringan Bitcoin? Napa kudu nggunakake PoW? Ana sawetara alasan:

  • BFT bisa dianggo kanthi apik karo simpul tetep cilik, nanging ing pamblokiran umum jumlah simpul ora bisa diprediksi lan, luwih-luwih, simpul bisa diuripake lan dipateni kanthi acak.
  • Perlu kanggo motivasi wong kanggo miwiti simpul blockchain. Kanggo nindakake iki, wong kudu diganjar. Ing BFT ana formal apa-apa kanggo nampa ganjaran, nanging apa ganjaran ing PoW cetha kanggo saben wong ing tingkat intuisi: kanggo listrik migunakaken prosesor ing proses nemokake Hash pemblokiran.

Saliyane PoW, ana sawetara konsensus liyane sing digunakake ing pamblokiran modern, contone:

  • PoS (Proof-of-Stake) - ing pamblokiran Hyperledger
  • DPoS (Delegated Proof-of-Stake) - ing pamblokiran BitShares
  • Modifikasi BFT: SBFT (Simplified BFT) lan PBFT (BFT Praktis), contone ing blockchain Eksonum

Ayo dipikirake babagan konsensus PoS, amarga ... Iku PoS lan varietas sing paling nyebar ing blockchain pribadi. Kenapa ing pribadi? Ing tangan siji, karakteristik PoS luwih apik dibandhingake karo PoW, amarga Kanggo entuk konsensus, sumber daya komputasi kurang dibutuhake, sing tegese kacepetan nulis data menyang pamblokiran mundhak. Nanging ing sisih liya, PoS duwe kesempatan luwih akeh kanggo penipuan, mula kanggo netralake iki, kabeh peserta ing blokchain kudu dingerteni.

Konsensus PoS adhedhasar pilihan saka simpul sing bisa nulis blok karo transaksi menyang blockchain gumantung saka jumlah dana ing akun, utawa luwih, ora ing akun, nanging ing jaminan, i.e. Luwih akeh dana sing sampeyan duwe minangka jaminan, luwih akeh jaringan bakal milih simpul sampeyan kanggo nulis blok. Simpenan ora bakal bali yen pamblokiran ora bener. Iki menehi pangayoman marang penipuan. Ana variasi PoS ing ngisor iki:

  • Konsensus Delegated PoS (DPoS) mbagi peserta dadi "pemilih" lan "validator". Pemegang koin (peserta voting) utusan kekuwatane kanggo verifikasi lan ngrekam transaksi ing blockchain menyang peserta liyane. Mangkono, validator nindakake kabeh karya komputasi lan entuk ganjaran, lan anane peserta voting njamin kejujuran validator, amarga padha bisa diganti sawayah-wayah.
  • Konsensus LPoS (Leased Proof-of-Stake) ngidini sampeyan nyewakake dana menyang simpul liyane supaya duwe kesempatan sing luwih apik kanggo validasi blok. Iku. Sampeyan bisa nampa komisi kanggo transaksi tanpa melu verifikasi transaksi nyata lan blok pertambangan.

Ana uga sawetara konsensus sing durung nyebar; Aku mung bakal dhaptar ing kene kanggo informasi, lan ringkesan algoritma konsensus dhewe bisa ditemokake, contone, ing artikel: Algoritma Konsensus ing Blockchain.

  • PoET (Wektu Bukti sing wis Lawas)
  • PoC (Bukti Kapasitas)
  • PoB (Bukti Bakar)
  • PoWeight (Bukti Bobot)
  • PoA (Proof-of-Activity) – PoW + PoS
  • PoI (Bukti Penting)

Reliabilitas lan panyebaran model blockchain

Blockchain umum

Kelestarian Public utawa jeneng liyane Blockchain tanpa idin Iki digayuh kanthi ngidini sapa wae nyambung lan ndeleng informasi utawa malah nyambungake simpul dhewe, lan kepercayaan dibangun ing konsensus PoW.

Blockchain pribadi

Private utawa Blockchain Idin Pribadi. Ing pamblokiran kasebut, mung klompok peserta tartamtu (organisasi utawa wong) sing duwe akses menyang informasi. Blockchain kasebut dibangun dening organisasi kanthi tujuan nambah keuntungan utawa efisiensi sakabèhé. Kapercayan kasebut dijamin dening tujuan umum para peserta lan algoritma konsensus PoS lan BFT.

Konsorsium Blockchain

Ana Konsorsium utawa Blockchain Idin Umum. Iki minangka pamblokiran sing bisa disambungake sapa wae kanggo ndeleng, nanging peserta bisa nambah informasi utawa nyambungake simpul mung kanthi ijin saka peserta liyane. Blockchain kasebut dibangun dening organisasi kanggo nambah kapercayan ing bagean pelanggan utawa konsumen produk utawa masyarakat kanthi sakabehe. Ing kene, linuwih uga digayuh kanthi anane kepercayaan antarane peserta lan algoritma konsensus PoS lan BFT sing padha.

Kontrak Smart

Blockchains dileksanakake sawise Bitcoin duwe, kanggo siji gelar utawa liyane, nambah kemampuan kanggo nglakokakΓ© kontrak pinter. Ateges, kontrak cerdas minangka transaksi ing ngendi kode program diselehake kanggo eksekusi. Kontrak cerdas ing jaringan Ethereum dieksekusi ing EVM (Mesin Virtual Ethereum). Kanggo miwiti nglakokake kontrak cerdas, kontrak kasebut kudu diluncurake kanthi jelas dening transaksi liyane, utawa prasyarat kanggo eksekusi kudu ditindakake. Asil eksekusi kontrak cerdas uga bakal dicathet ing pamblokiran. Nampa data saka njaba blockchain bisa, nanging winates banget.

Logika bisnis apa sing bisa ditindakake nggunakake kontrak cerdas? Nyatane, ora akeh, contone, mriksa kahanan nggunakake data saka pamblokiran, ngganti pemilik aset digital gumantung ing kondisi kasebut, ngrekam data ing panyimpenan permanen ing pamblokiran. Logika dileksanakake ing Solidity basa tingkat dhuwur khusus.

Conto klasik saka fungsi sing diimplementasikake nggunakake kontrak cerdas yaiku penerbitan token kanggo ICO. Contone, aku ngetrapake kontrak cerdas kanggo ngetokake AlexToken 500 sing andhap asor. Miturut link ing Etherscan dumunung

kode sumber kontrak pinter ing basa 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;
}

lan perwakilan binar minangka jaringan ndeleng

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Rincian liyane babagan kontrak cerdas bisa ditemokake ing artikel: Apa kontrak pinter ing Ethereum.

kesimpulan

Kita wis nyathet teknologi sing dibangun blockchains modern lan cara disambungake. Saiki ayo ngrumusake masalah endi sing bisa ditanggulangi nggunakake blockchain, lan solusi sing paling apik, ora efektif. Dadi, nggunakake blockchain ora perlu yen:

  • Transaksi ditindakake ing lingkungan sing dipercaya;
  • Anane komisi perantara ora ngrusak urip para peserta;
  • Peserta ora duwe properti sing bisa diwakili minangka aset digital;
  • Ora ana distribusi ing aset digital, i.e. regane diduweni utawa diwenehake dening mung siji peserta.

Apa masa depan kanggo blockchain? Saiki kita mung bisa spekulasi babagan cara sing bisa ditindakake kanggo pangembangan teknologi pamblokiran:

  • Blockchain bakal dadi teknologi database umum sing padha, contone, SQL utawa NoSQL kanggo ngrampungake sawetara masalah tartamtu;
  • Blockchain bakal dadi protokol sing nyebar, kaya HTTP kanggo Internet;
  • Blockchain bakal dadi basis kanggo sistem finansial lan politik anyar ing planet iki!

Ing bagean sabanjure kita bakal ndeleng apa blockchain saiki ana lan ngapa digunakake ing industri sing beda-beda.

Iki mung wiwitan!

Source: www.habr.com

Add a comment