Naon anu urang kedah ngawangun blockchain?

Sakabéh sajarah umat manusa mangrupikeun prosés anu terus-terusan ngaleungitkeun ranté sareng nyiptakeun anu énggal, bahkan langkung kuat. (Panulis anonim)

Nganalisis seueur proyék blockchain (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, jsb.), Kuring ngarti yén tina sudut pandang téknis, aranjeunna sadayana diwangun dina prinsip anu sami. Blockchains ngingetkeun imah, anu, sanaos sagala rupa desain, hiasan sareng tujuan, gaduh pondasi, témbok, hateup, jandéla, panto anu dihubungkeun ku cara anu tangtu. Sareng upami anjeun ngartos prinsip dasar desain gedong sareng terang sipat bahan anu dianggo, maka anjeun tiasa nangtoskeun tujuan anu dimaksud pikeun bumi anu khusus. Ayeuna, hiji kaayaan geus arisen kalawan blockchain yén dulur geus uninga ngeunaan eta, tapi sababaraha urang ngartos arsitektur jeung prinsip operasi. Ku alatan éta, aya salah paham naha jeung kumaha asup akal ngagunakeun téknologi blockchain.

Dina tulisan ieu kami bakal nganalisis sipat sareng prinsip anu umum pikeun sadaya blockchain. Salajengna, hayu urang tingali masalah anu tiasa direngsekeun nganggo blockchain sareng pikeun nguatkeun bahan, hayu urang ngawangun blockchain leutik tapi nyata dina situs maya urang!

Janten, hayu urang émut naon masalah blockchain anu mimiti direngsekeun.

Kuring yakin yén loba bakal nyebutkeun ngeunaan hiji disebarkeun, desentralisasi, database umum tur immutable. Tapi naha éta sakabéh ieu diperlukeun?

Kuring resep ngamimitian diajar téknologi naon waé ku maca standar, sabab sadaya tulisan sareng buku ngeunaan topik anu ditalungtik dumasar kana éta. Tapi ayeuna teu aya standar blockchain; ISO ngan ukur nyiptakeun panitia pikeun pangwangunan maranéhanana. Ayeuna, unggal proyék blockchain umum gaduh dokumén kertas Bodas sorangan, anu dasarna spésifikasi téknis. Proyék blockchain anu munggaran dikenal ku masarakat nyaéta jaringan Bitcoin. Pindah ka situs wéb resmi jaringan sareng neuteup dimana eta sadayana dimimitian.

Tantangan Blockchain

Janten, tugas anu direngsekeun blockchain dina jaringan pelopor Bitcoin nyaéta ngalaksanakeun transfer anu dipercaya tina kapamilikan aset digital (aset) dina lingkungan anu henteu dipercaya tanpa perantara. Salaku conto, dina jaringan Bitcoin, aset digital nyaéta koin digital bitcoin. Sareng sadaya solusi téknis tina Bitcoin sareng blokchain sanésna turun pikeun ngarengsekeun masalah ieu.

Masalah anu direngsekeun ku blockchain

Anggap hiji organisasi finansial tangtu nyebutkeun yen eta geus ngawangun jaringan sakuliah dunya kalayan bantuan nu kasebut nyaéta dimungkinkeun pikeun mindahkeun duit ka saha wae. Dupi anjeun percanten nya? Lamun organisasi ieu Visa atanapi MasterCard, paling dipikaresep anjeun bakal yakin eta, tapi lamun, rélatif diomongkeun, AnonymousWorldMoney, Anjeun meureun moal. Naha? Tapi kusabab urang terang pisan kumaha sistem anu disebarkeun ku perusahaan swasta, pikeun tujuan naon, sareng naon anu tiasa nyababkeun. Hayu urang ningal langkung caket kana masalah sistem sapertos kitu sareng kumaha aranjeunna tiasa direngsekeun nganggo téknologi blockchain.

Hayu urang nyebutkeun yén dina AnonymousWorldMoney kondisional aya server kalawan database, tur éta alus lamun aya sababaraha di puseur data béda. Nalika pangirim mindahkeun duit, hiji urus didaptarkeun, nu replicated ka sadaya server, jeung duit ngahontal panarima.

Naon anu urang kedah ngawangun blockchain?

Di dunya idéal, skéma ieu tiasa dianggo saé, tapi di urang aya masalah di handap ieu:

  1. Masalah ngaidentipikasi pamilon dina hiji sisi sareng kabutuhan anonimitas transaksi di sisi anu sanés. Jelema. Anjeun kudu nransper duit ka panarima husus sarta dina cara sapertos nu teu saurang ogé weruh ngeunaan urus ieu iwal pamilon dina urus. Bank gaduh nomer rekening sareng kartu bank anu dihubungkeun ka individu atanapi badan hukum khusus, sareng rasiah bank ngajagi inpormasi transaksi. Sareng saha anu ngajamin yén AnonymousWorldMoney bersyarat henteu nganggo data pribadi sareng inpormasi transaksi pikeun tujuanana sorangan?
  2. Kumaha carana mastikeun yén panarima narima persis jumlah nu geus dibikeun ka anjeunna? Sacara rélatif, pangirim nransferkeun $100, sareng panampi nampi $10. Pangirimna sumping ka kantor AnonymousWorldMoney sareng resi na, sareng juru tulis nunjukkeun versi na, dimana ditulis yén pangirim ngan ukur $ 10.
  3. Masalah lingkungan anu teu dipercaya, contona, panipuan anu disebut belanja ganda. Pamilon anu teu sopan tiasa nyéépkeun kasaimbanganna sababaraha kali dugi ka pamayaran ditiru ka sadaya server. Téoréma CAP, tangtosna, teu saurang ogé dibolaykeun, sarta perjangjian pamustunganana bakal dihontal, tapi batur moal nampi duit jasa atawa barang disadiakeun. Ku alatan éta, lamun teu aya kapercayaan lengkep dina organisasi pamayaran atawa pamilon dina transaksi, mangka perlu ngawangun jaringan dumasar kana kapercayaan, tapi dina kriptografi.
  4. Conditional AnonymousWorldMoney gaduh sajumlah pangladén anu terbatas anu tiasa janten teu sayogi tanpa ngahaja atanapi kusabab niat jahat.
  5. AnonymousWorldMoney bakal nyandak komisi tangible sorangan.
  6. Kamungkinan kontrol. Salila operasi Bitcoin, tétéla yén jalma hayang teu ngan pikeun mindahkeun koin ka silih, tapi ogé mariksa rupa kaayaan keur urus, skenario gawé program, otomatis ngalakukeun lampah gumantung kana kaayaan, jsb.

Kumaha blockchain ngajawab masalah ieu

  1. Idéntifikasi pamilon dilumangsungkeun maké sapasang konci: swasta jeung publik, sarta algoritma signature digital uniquely nangtukeun pangirim jeung panarima, ninggalkeun identitas maranéhanana anonim.
  2. Transaksi dikumpulkeun kana blok, hash blok diitung sareng ditulis kana blok salajengna. Runtuyan ngarékam hashes dina blok ieu masihan nami téknologi blockchain, sareng éta ogé ngajantenkeun teu mungkin ngarobih / ngahapus blok atanapi transaksi individu tina blok. Ku kituna, lamun urus kaasup kana blockchain, Anjeun bisa yakin yén data na bakal tetep unchanged.
  3. Penipuan belanja ganda dicegah ku ngahontal konsensus jaringan dimana data anu dianggap valid sareng anu dipiceun. Dina jaringan Bitcoin, konsensus kahontal ku bukti gawé (PoW).
  4. Reliabilitas jaringan kahontal ku kanyataan yén blockchain umum, dimana unggal pamilon tiasa ngajalankeun titik sorangan, nampi salinan lengkep blockchain sareng, komo deui, sacara mandiri ngawitan pariksa transaksi pikeun leres. Ieu kudu dicatet yén blockchains modern ngamungkinkeun pikeun ngawangun teu ukur publik (buka) tapi ogé swasta (tutup) blockchains, kitu ogé pamakéan skéma gabungan.
  5. Blockchain moal lengkep ngaleungitkeun komisi, sabab ... Anjeun kudu mayar jalma nu ngarojong jaringan, tapi dina blockchain nu peryogi komisi a dibuktikeun jadi convincingly yén euweuh ragu ngeunaan kabutuhan na.
  6. Blockchain modéren gaduh kamampuan pikeun nerapkeun logika bisnis, anu dina blockchain disebut Smart Contracts. Logika kontrak pinter dilaksanakeun dina sababaraha basa tingkat luhur.

Salajengna, urang bakal nganggap solusi ieu langkung rinci.

Arsitéktur Blockchain

Komponén Blockchain

Masing-masing pamilon tiasa ngaluncurkeun node sorangan kalayan salinan lengkep blockchain (full node). titik pinuh nu bisa ngarekam transaksi dina blockchain disebut titik konsensus (saksi) atawa panambang (panambang). titik pinuh nu ukur mariksa correctness tina transaksi disebut titik audit (audit). klien lampu (klien lampu) henteu nyimpen salinan pinuh ku blockchain, tapi berinteraksi sareng jaringan nganggo titik pinuh.
Seuseueurna pangguna nganggo klien cahaya atanapi dompét wéb pikeun ngalakukeun transaksi. Kabéh titik disambungkeun ka unggal lianna. Kalayan set elemen ieu, arsitéktur jaringan janten langkung stabil:

Naon anu urang kedah ngawangun blockchain?

Daur hirup transaksi

Hayu urang tingali siklus hirup transaksi sareng ngarecah sapotong-sapotong:

Naon anu urang kedah ngawangun blockchain?

Téknologi Blockchain

Hayu urang langkung jéntré ngeunaan solusi téknis sareng hubunganana.

pangenalan

Unggal transaksi blockchain kedah ditandatanganan sacara digital. Ku alatan éta, pikeun ngarengsekeun transaksi, unggal pamilon kudu boga pasangan konci: swasta / publik. Kadang-kadang sapasang konci disebut dompét, sabab kenop nu uniquely pakait sareng alamat digital unik pamilon sarta kasaimbangan. Kanyataanana, konci sareng alamat ngan ukur senar nomer dina sistem nomer anu béda. Conto konci sareng alamat dompét:

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

Pikeun nyieun tanda tangan digital dina blockchains, algoritma dumasar kana kurva elliptic dipaké: Elliptic Curve Digital Signature Algorithm (ECDSA). Pikeun dianggo, konci pribadi (nomer 256-bit) biasana dicandak sacara acak. Jumlah pilihan konci nyaéta 2 pikeun kakuatan 256, ku kituna urang tiasa ngobrol ngeunaan impossibility praktis cocog nilai konci swasta.

Salajengna, konci publik dicandak ti swasta ku cara ngalikeun nilaina ku koordinat titik lokasina dina kurva elliptic, hasilna koordinat titik anyar dina kurva sarua. Peta ieu mastikeun yén anjeun kéngingkeun pasangan konci anu cocog pikeun transaksi nandatanganan digital. Tungtungna, alamat dompét unik diturunkeun tina konci umum.

Aya seueur tulisan anu rinci ngeunaan kriptografi anu dianggo dina blockchain, contona: Bitcoin dina nutshell - Kriptografi

Konci pribados kedah rahasia pisan sareng dijaga aman. Konci publik dipikanyaho ku sadayana. Lamun konci swasta leungit, aksés ka asset (koin) teu bisa dibalikeun jeung duit bakal leungit salawasna. Ku alatan éta, tugas aman nyimpen konci swasta pisan relevan, sabab Ieu sanés bank dimana anjeun salawasna tiasa sumping sareng paspor anjeun sareng malikkeun akun anjeun. Aya sakabeh industri pikeun produksi disebut dompet crypto tiis, sarupa jeung flash drive:

Naon anu urang kedah ngawangun blockchain?

atanapi anjeun tiasa nganggo metode anu langkung dipercaya, contona, nyetak nilai konci pribadi dina token:

Naon anu urang kedah ngawangun blockchain?

Transaksi

Rincian langkung seueur ngeunaan struktur transaksi tiasa dipendakan dina tulisan Bitcoin dina nutshell - Transaksi. Penting pikeun urang ngartos yén unggal transaksi ngagaduhan sahenteuna data ieu:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цифровой адрес отправителя
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цифровой адрес получателя
Value: 0.0001 - сумма транзакции
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш транзакции

Salajengna, transaksi ditandatanganan ku konci pribadi sareng dikirim kaluar (tingali rinci ngeunaan operasi protokol Bitcoin dina nutshell-Protokol) ka sadaya titik dina blockchain nu pariksa transaksi keur validitas. Algoritma verifikasi transaksi non-trivial sareng kalebet dua belas léngkah.

Blok transaksi

Saatos mariksa validitas transaksi, titik ngabentuk blok ti aranjeunna. Salian transaksi, Hash tina blok saméméhna sareng nomer (Nonce counter) ditulis kana blok, sareng hash blok ayeuna diitung nganggo algoritma SHA-256. Hash kudu ngadegkeun kaayaan pajeulitna. Contona, dina jaringan Bitcoin, kasusah tina Hash otomatis robah unggal 2 minggu gumantung kana kakuatan jaringan sahingga blok dihasilkeun kira sakali unggal 10 menit. Pajeulitna ditangtukeun ku kaayaan di handap ieu: hash kapanggih kedah kirang ti jumlah predetermined. Lamun kaayaan ieu teu patepung, lajeng 1 ditambahkeun kana Nonce, sarta karya ngitung Hash diulang. Pikeun milih hash, widang Nonce dipaké, sabab Ieu hiji-hijina data dina blok nu bisa dirobah; sésana kudu tetep unchanged. Hash anu valid kedah gaduh sajumlah nol utama, sapertos salah sahiji hash nyata:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Hasilna mendakan hash mangrupikeun bukti padamelan anu dilakukeun (Bukti-of-Gawé, PoW) pikeun jaringan Bitcoin atanapi Ethereum. Prosés manggihan hashes disebut pertambangan, sarupa jeung pertambangan emas. Ngaranna rada akurat ngahartikeun hakekat prosés, sabab aya hiji pilarian basajan tina pilihan, sarta lamun batur manggihan hiji Hash cocog, lajeng ieu bener untung. Ieu kawas manggihan nugget emas nyata dina ton batu runtah. Ganjaran blok ayeuna 12.5 BTC sareng upami anjeun kalikeun ku laju Bitcoin ayeuna $ 3900, anjeun nampi langkung ti hiji kilogram emas murni. Aya anu diperjuangkeun!

Sanggeus hasil manggihan Hash a, blok jeung Hash kapanggih sorangan ditulis kana blockchain salaku blok salajengna. Langkung seueur ngeunaan struktur blok tiasa dipendakan dina tulisan Bitcoin dina nutshell-Blockchain, sareng di handap ieu diagram saderhana:

Naon anu urang kedah ngawangun blockchain?

Blockchain dimimitian ku blok anu henteu acan gaduh hash blok saméméhna. Aya ngan hiji blok misalna dina blockchain sarta boga ngaran sorangan block Genesis. Blok sésana boga struktur sarua jeung béda ngan dina jumlah transaksi. Transaksi nyata sareng blok ayeuna didamel dina Bitcoin atanapi Ethereum tiasa ditingali Blok Explorer.

Ukuran blok dina Bitcoin dugi ka 1MB sareng kalayan jumlah minimum inpormasi dina transaksi sakitar 200 bait, jumlah maksimal transaksi dina blok tiasa sakitar 6000. Ti dieu, ku jalan kitu, kieu kinerja Bitcoin, nu dulur laughs di: blok dihasilkeun kira sakali unggal 10 menit * 60 detik = 600 detik, nu mere kinerja formal ngeunaan 10 TPS. Sanaos kanyataanna, ieu sanés produktivitas, tapi algoritma padamelan anu ngahaja dilaksanakeun. Dina Ethereum, pikeun kompetisi, aranjeunna ngan ukur ngadamel waktos generasi blok 15 detik. sareng produktivitas sacara resmi ningkat. Ku alatan éta, dina blockchains anu ngagunakeun PoW salaku konsensus, teu aya rasa pikeun ngabandingkeun kinerja pisan, sabab eta langsung gumantung kana pajeulitna itungan cache, nu bisa ditugaskeun ka nilai nanaon.

Garpu

Naon anu lumangsung lamun, contona, sababaraha titik kapanggih hashes nu minuhan kaayaan pajeulitna, tapi béda dina nilai (dina basa sejen, aranjeunna sumping ka consensuses béda) jeung nulis blok kana blockchain nu? Hayu urang tingali kumaha blockchain ngajagaan tina kaayaan ieu. Dina hal ieu, anu disebut garpu lumangsung, sareng blockchain ngagaduhan dua vérsi ranté:

Naon anu urang kedah ngawangun blockchain?

Naon kajadian salajengna? Salajengna, bagian tina jaringan mimiti dianggo dina blok N + 2 ti hiji ranté, sarta bagian ti sejen:

Naon anu urang kedah ngawangun blockchain?

Salah sahiji blok ieu bakal dipendakan sateuacana sareng dikirim ka blockchain, teras, numutkeun aturan, blockchain kedah ngalih ka ranté anu langkung panjang sareng ngabatalkeun sadaya transaksi tina blok alternatif:

Naon anu urang kedah ngawangun blockchain?

Dina waktos anu sami, kaayaan tiasa timbul nalika transaksi pamilon ngan ukur dina salah sahiji blok garpu, anu dibatalkeun. Ku alatan éta, pikeun mastikeun yén transaksi anu dipikahoyong kacatet dina blockchain, aya rekomendasi umum - sateuacan percanten kana transaksi, anjeun kedah ngantosan dugi ka sababaraha blok salajengna ditambah kana blokchain. Rekomendasi pikeun sabaraha blok ngadagoan blockchains béda rupa-rupa. Contona, pikeun jaringan Bitcoin minimum 2 blok, maksimum nyaéta 6.

Gambar sarua jeung block forks bakal dititénan salila disebut 51% serangan - ieu téh nalika grup panambang nyoba tumuwuh hiji ranté block alternatif, néangan pikeun ngabolaykeun ranté kalayan transaksi curang maranéhanana. Sanajan ayeuna, tinimbang panipuan, éta leuwih nguntungkeun méakkeun kakuatan anjeun dina pertambangan jujur.

Konsensus

Pikeun ngarekam blok dina blockchain, jaringan kedah ngahontal konsensus. Hayu urang émut tugas pikeun ngahontal konsensus dina jaringan komunikasi komputer. Masalahna dirumuskeun salaku tugas jenderal Bizantium BFT (Kasabaran kasalahan Bizantium). Ngaleungitkeun pedaran picturesque ngeunaan masalah tentara Bizantium, masalah bisa dirumuskeun kieu: kumaha titik jaringan bisa ngahontal hasil umum lamun sababaraha titik jaringan ngahaja distort aranjeunna. Algoritma anu aya pikeun ngarengsekeun masalah BFT nunjukkeun yén jaringan tiasa dianggo leres upami aya kirang ti 1/3 fraudsters. Naha konsensus BFT henteu dilarapkeun kana jaringan Bitcoin? Naha éta perlu ngagunakeun PoW? Aya sababaraha alesan:

  • BFT tiasa dianggo kalayan sakumpulan titik tetep leutik, tapi dina blockchain umum jumlah titik teu tiasa diprediksi sareng, komo deui, titik tiasa dihurungkeun sareng mareuman sacara acak.
  • Ieu diperlukeun pikeun memotivasi jalma pikeun ngajalankeun titik blockchain. Jang ngalampahkeun ieu, jalma kudu diganjar. Dina BFT aya nanaon formal nampi ganjaran, tapi naon ganjaran pikeun PoW jelas ka dulur dina tingkat intuitif: pikeun listrik dihakan ku processor dina prosés manggihan blok Hash.

Salian PoW, aya sababaraha konsensus sanés anu dianggo dina blockchains modern, contona:

  • PoS (Bukti-of-Stake) - dina blockchain nu Hyperledger
  • DPoS (Delegated Bukti-of-Stake) - dina blockchain nu BitShares
  • Modifikasi BFT: SBFT (BFT Saderhana) sareng PBFT (BFT Praktis), contona dina blockchain Exonum

Hayu urang cicing saeutik dina konsensus PoS, sabab ... Éta PoS sareng variétasna anu paling nyebar di blockchain swasta. Naha sacara pribadi? Di hiji sisi, karakteristik PoS langkung saé dibandingkeun sareng PoW, sabab Pikeun ngahontal konsensus, sumber daya komputasi kirang diperlukeun, nu hartina laju nulis data kana blockchain naek. Tapi di sisi anu sanés, PoS ngagaduhan langkung seueur kasempetan pikeun panipuan, janten pikeun nétralisasi ieu, sadaya pamilon dina blockchain kedah dipikanyaho.

konsensus PoS dumasar kana seleksi titik nu bisa nulis blok jeung transaksi ka blockchain gumantung kana jumlah dana dina akun, atawa rada, teu dina akun, tapi dina jaminan, i.e. Beuki dana anjeun gaduh salaku jaminan, langkung kamungkinan jaringan bakal milih titik anjeun pikeun nyerat blok. Deposit moal dipulangkeun upami blokna henteu sah. Ieu nyadiakeun panyalindungan ngalawan panipuan. Aya variasi PoS ieu:

  • Konsensus Delegated PoS (DPoS) ngabagi pamilon kana "pamilih" sareng "validator". Panyekel koin (pamilon voting) utusan kakuatan maranéhna pikeun pariksa jeung ngarekam transaksi dina blockchain ka pamilon séjén. Ku kituna, validator ngalakukeun sagala pagawean komputasi sarta narima ganjaran pikeun eta, sarta ayana pamilon voting ngajamin kajujuran validators, sabab aranjeunna bisa dirobah iraha wae.
  • LPoS (Leased Proof-of-Stake) konsensus ngidinan Anjeun pikeun ngajakan dana anjeun ka titik séjén ambéh maranéhanana boga kasempetan hadé pikeun validating blok. Anu. Anjeun tiasa nampi komisi pikeun transaksi tanpa ilubiung dina verifikasi transaksi anu saleresna sareng blok pertambangan.

Aya sababaraha consensuses séjén anu teu acan loba dipaké, abdi gé daptar aranjeunna dieu pikeun informasi, sarta tinjauan algoritma konsensus sorangan bisa kapanggih, contona, dina artikel: Algoritma konsensus dina Blockchain.

  • Panyajak (Buktina-Waktos Kaliwat)
  • PoC (Bukti-of-Kapasitas)
  • PoB (Bukti-kaduruk)
  • PoWeight (Buktina-Beurat)
  • PoA (Bukti-aktivitas) - PoW + PoS
  • PoI (Bukti-Penting)

Reliabiliti sarta deployment model blockchains

Blockchain umum

Sustainability masarakat atawa ngaran séjén Blockchain tanpa idin Ieu dihontal ku ngamungkinkeun saha waé pikeun nyambungkeun sareng ningali inpormasi atanapi bahkan nyambungkeun titikna sorangan, sareng kapercayaan diwangun dina konsensus PoW.

blockchain swasta

wasta atawa Swasta Diidinan blockchain. Dina blockchains ieu, ngan grup tangtu pamilon (organisasi atawa jalma) boga aksés ka informasi. Blockchain sapertos kitu diwangun ku organisasi kalayan tujuan ningkatkeun kauntungan atanapi efisiensi sadayana. Kaandalanna dipastikeun ku tujuan umum para pamilon sareng algoritma konsensus PoS sareng BFT.

Konsorsium Blockchain

di ditu Konsorsium atawa Blockchain Diidinan Umum. Ieu mangrupikeun blokchain anu tiasa dihubungkeun ku saha waé pikeun ningali, tapi pamilon tiasa nambihan inpormasi atanapi nyambungkeun titikna ngan ku idin pamilon anu sanés. Blockchain sapertos ieu diwangun ku organisasi pikeun ningkatkeun kapercayaan para nasabah atanapi konsumen produk atanapi masarakat sacara gembleng. Di dieu, réliabilitas ogé kahontal ku ayana kapercayaan antara pamilon sareng algoritma konsensus PoS sareng BFT anu sami.

Kontrak Smart

Blockchains dilaksanakeun sanggeus Bitcoin boga, ka hiji gelar atawa sejen, ditambahkeun kamampuhan pikeun ngaéksekusi kontrak pinter. Intina, kontrak pinter mangrupikeun transaksi dimana kode program disimpen pikeun dieksekusi. Kontrak pinter dina jaringan Ethereum dieksekusi dina EVM (Mesin Virtual Ethereum). Pikeun ngamimitian ngalaksanakeun kontrak pinter, éta kedah diluncurkeun sacara eksplisit ku transaksi anu sanés, atanapi sarat pikeun palaksanaan kedah dicumponan. Hasil tina palaksanaan kontrak pinter ogé bakal kacatet dina blockchain nu. Narima data ti luar blockchain mungkin, tapi kawates pisan.

Logika bisnis naon anu tiasa dilaksanakeun nganggo kontrak pinter? Nyatana, henteu seueur, contona, mariksa kaayaan nganggo data tina blockchain, ngarobih pamilik aset digital gumantung kana kaayaan ieu, ngarékam data dina panyimpenan permanén dina blockchain. Logika dilaksanakeun dina Solidity basa tingkat luhur husus.

Conto klasik fungsionalitas anu dilaksanakeun nganggo kontrak pinter nyaéta ngaluarkeun token pikeun ICO. Salaku conto, kuring ngalaksanakeun kontrak pinter pikeun ngaluarkeun 500 AlexToken anu sederhana. Ku link dina Etherscan éta

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

jeung ngagambarkeun binér salaku jaringan nilik eta

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Langkung rinci ngeunaan kontrak pinter tiasa dipendakan dina tulisan: Naon kontrak pinter dina Ethereum.

kacindekan

Kami parantos daptar téknologi dimana blockchains modern diwangun sareng kumaha nyambungkeunana. Ayeuna hayu urang ngarumuskeun masalah mana anu tiasa direngsekeun nganggo blockchain, sareng solusi mana anu paling saé, henteu efektif. Janten, ngagunakeun blockchain henteu diperyogikeun upami:

  • Transaksi dilaksanakeun di lingkungan anu dipercaya;
  • Ayana komisi perantara henteu ngaganggu kahirupan pamilon;
  • Pamilon teu gaduh harta anu tiasa diwakilan salaku aset digital;
  • Henteu aya distribusi dina aset digital, nyaéta. nilai nu dipiboga atawa disadiakeun ku ngan hiji pamilon.

Naon masa depan pikeun blockchain? Ayeuna urang ngan ukur tiasa ngaduga cara anu mungkin pikeun ngembangkeun téknologi blockchain:

  • Blockchain bakal janten téknologi database umum anu sami sareng, contona, SQL atanapi NoSQL pikeun ngarengsekeun masalah-masalah anu khusus;
  • Blockchain bakal janten protokol anu nyebar, sapertos HTTP pikeun Internét;
  • Blockchain bakal janten dasar pikeun sistem kauangan sareng politik anyar pangeusina!

Dina bagian salajengna urang bakal nempo naon blockchains ayeuna aya na naha maranéhna dipaké dina industri béda.

Ieu ngan mimiti!

sumber: www.habr.com

Tambahkeun komentar