Ko mums vajadzētu izveidot blokķēdi?

Visa cilvēces vēsture ir nepārtraukts process, lai atbrīvotos no ķēdēm un radītu jaunas, vēl stiprākas. (Anonīms autors)

Analizējot daudzus blokķēdes projektus (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin u.c.), es saprotu, ka no tehniskā viedokļa tie visi ir veidoti uz vieniem un tiem paÅ”iem principiem. Blokķēdes atgādina mājas, kurām, neskatoties uz visu dizainu, dekoru un nolÅ«ku dažādÄ«bu, ir pamati, sienas, jumts, logi, durvis, kas savā starpā ir savienotas noteiktos veidos. Un, ja jÅ«s saprotat ēku projektÄ“Å”anas pamatprincipus un zināt izmantoto materiālu Ä«paŔības, tad varat noteikt konkrētas mājas paredzēto mērÄ·i. Å obrÄ«d ar blokķēdi ir izveidojusies tāda situācija, ka visi par to ir dzirdējuÅ”i, taču reti kurÅ” saprot arhitektÅ«ru un darbÄ«bas principus. Tāpēc rodas pārpratums par to, kāpēc un kā ir jēga izmantot blokķēdes tehnoloÄ£ijas.

Å ajā rakstā mēs analizēsim Ä«paŔības un principus, kas ir kopÄ«gi visām blokķēdēm. Tālāk apskatÄ«sim problēmas, kuras var atrisināt, izmantojot blokķēdi, un, lai nostiprinātu materiālu, izveidosim nelielu, bet Ä«stu blokķēdi mÅ«su virtuālajā vietnē!

Tātad, atcerēsimies, kādas problēmas blokķēde sākotnēji atrisināja.

Esmu pārliecināts, ka daudzi teiks par izkliedētu, decentralizētu, publisku un nemainīgu datubāzi. Bet kāpēc tas viss bija vajadzīgs?

Es gribētu sākt apgÅ«t jebkuru tehnoloÄ£iju, izlasot standartus, jo uz tiem ir balstÄ«ti visi raksti un grāmatas par pētāmo tēmu. Bet paÅ”laik nav blokķēdes standartu; ISO ir tikai izveidojis komitejas to attÄ«stÄ«bai. PaÅ”laik katram publiskajam blokķēdes projektam ir savs baltās grāmatas dokuments, kas bÅ«tÄ«bā ir tehniskā specifikācija. Pirmais publiski zināmais blokķēdes projekts ir Bitcoin tÄ«kls. Dodieties uz tÄ«kla oficiālo vietni un izskatu kur tas viss sākās.

Blockchain izaicinājums

Tātad uzdevums, ko blokķēde atrisināja Bitcoin pionieru tÄ«klā, ir veikt uzticamu digitālo aktÄ«vu (aktÄ«vu) Ä«paÅ”umtiesÄ«bu nodoÅ”anu neuzticamā vidē bez starpniekiem. Piemēram, Bitcoin tÄ«klā digitālais aktÄ«vs ir bitcoin digitālās monētas. Un visi Bitcoin un citu blokķēžu tehniskie risinājumi ir saistÄ«ti ar Ŕīs problēmas risināŔanu.

Problēmas, kuras atrisina blokķēde

Pieņemsim, ka noteikta finanÅ”u organizācija saka, ka tā ir izveidojusi tÄ«klu visā pasaulē, ar kura palÄ«dzÄ«bu ir iespējams pārskaitÄ«t naudu jebkurai personai. Vai tu viņai ticēsi? Ja Ŕī organizācija ir Visa vai MasterCard, visticamāk, jÅ«s tam ticēsit, bet ja, nosacÄ«ti runājot, AnonymousWorldMoney, visticamāk, nē. Kāpēc? Bet tāpēc, ka mēs ļoti labi zinām, kā izdalÄ«tās sistēmas veido privātie uzņēmumi, kādiem nolÅ«kiem un pie kā tas var novest. SÄ«kāk aplÅ«kosim Ŕādu sistēmu problēmas un to, kā tās var atrisināt, izmantojot blokķēdes tehnoloÄ£ijas.

Pieņemsim, ka nosacītajā AnonymousWorldMoney ir serveri ar datu bāzēm, un ir labi, ja tie ir vairāki dažādos datu centros. Sūtītājam pārskaitot naudu, tiek reģistrēts darījums, kas tiek replicēts uz visiem serveriem, un nauda nonāk pie saņēmēja.

Ko mums vajadzētu izveidot blokķēdi?

Ideālā pasaulē Ŕī shēma darbojas lieliski, bet mÅ«sējā rodas Ŕādas problēmas:

  1. DalÄ«bnieku identificÄ“Å”anas problēma, no vienas puses, un nepiecieÅ”amÄ«ba pēc darÄ«jumu anonimitātes, no otras puses. Tie. jāpārskaita nauda konkrētam saņēmējam un tā, lai neviens, izņemot darÄ«juma dalÄ«bniekus, par Å”o darÄ«jumu nezinātu. Bankām ir kontu numuri un bankas kartes, kas piesaistÄ«tas konkrētai fiziskai vai juridiskai personai, un bankas noslēpums aizsargā darÄ«jumu informāciju. Un kurÅ” garantē, ka nosacÄ«tā AnonymousWorldMoney neizmanto personas datus un darÄ«jumu informāciju saviem mērÄ·iem?
  2. Kā pārliecināties, ka saņēmējs saņēma tieÅ”i tādu summu, kāda viņam tika pārskaitÄ«ta? RelatÄ«vi runājot, sÅ«tÄ«tājs pārskaitÄ«ja 100 USD, un saņēmējs saņēma 10 USD. SÅ«tÄ«tājs ierodas AnonymousWorldMoney birojā ar savu kvÄ«ti, un ierēdnis parāda savu versiju, kur rakstÄ«ts, ka sÅ«tÄ«tājs pārskaitÄ«jis tikai 10 USD.
  3. Neuzticamas vides problēma, piemēram, krāpniecÄ«ba, ko sauc par dubultiem tēriņiem. NegodÄ«gs dalÄ«bnieks var iztērēt savu atlikumu vairākas reizes, lÄ«dz maksājums tiek pārsÅ«tÄ«ts uz visiem serveriem. CAP teorēma, protams, neviens neatcēla, un vienoÅ”anās galu galā tiks panākta, bet kāds nesaņems naudu par sniegtajiem pakalpojumiem vai precēm. Tāpēc, ja nav pilnÄ«gas uzticÄ«bas maksājumu organizācijai vai darÄ«jumu dalÄ«bniekiem, tad ir jāveido tÄ«kls, kas balstÄ«ts nevis uz uzticÄ“Å”anos, bet gan uz kriptogrāfiju.
  4. NosacÄ«ti AnonymousWorldMoney ir ierobežots skaits serveru, kas var kļūt nepieejami netÄ«Å”i vai ļaunprātÄ«ga nolÅ«ka dēļ.
  5. AnonymousWorldMoney iekasēs savu taustāmo komisiju.
  6. Kontroles iespēja. Bitcoin darbības laikā izrādījās, ka cilvēki vēlas ne tikai pārskaitīt viens otram monētas, bet arī pārbaudīt dažādus darījuma nosacījumus, programmēt darba scenārijus, automātiski veikt darbības atkarībā no apstākļiem utt.

Kā blokķēde atrisina Ŕīs problēmas

  1. Dalībnieku identifikācija tiek veikta, izmantojot atslēgu pāri: privāto un publisko, un digitālā paraksta algoritms unikāli identificē sūtītāju un saņēmēju, atstājot viņu identitāti anonīmu.
  2. DarÄ«jumi tiek apkopoti blokos, bloka hash tiek aprēķināts un ierakstÄ«ts nākamajā blokā. Å Ä« jaucēju ierakstÄ«Å”anas secÄ«ba blokos pieŔķir blokķēdes tehnoloÄ£ijai savu nosaukumu, kā arÄ« padara neiespējamu nemanāmi mainÄ«t/dzēst blokus vai atseviŔķus darÄ«jumus no blokiem. Tādējādi, ja darÄ«jums ir iekļauts blokķēdē, varat bÅ«t droÅ”s, ka tā dati paliks nemainÄ«gi.
  3. DivkārÅ”u tēriņu krāpÅ”ana tiek novērsta, panākot tÄ«kla vienprātÄ«bu par to, kuri dati uzskatāmi par derÄ«giem un kuri jāizmet. Bitcoin tÄ«klā vienprātÄ«ba tiek panākta ar darba pierādÄ«jumu (PoW).
  4. Tīkla uzticamība tiek panākta ar to, ka blokķēde ir publiska, kur katrs dalībnieks var palaist savu mezglu, saņemt pilnu blokķēdes kopiju un turklāt patstāvīgi sākt pārbaudīt darījumu pareizību. Jāpiebilst, ka mūsdienu blokķēdes dod iespēju veidot ne tikai publiskas (atvērtas), bet arī privātas (slēgtas) blokķēdes, kā arī izmantot kombinētās shēmas.
  5. Blokķēde pilnÄ«bā neatbrÄ«vosies no komisijām, jo... jāmaksā cilvēkiem, kas atbalsta tÄ«klu, bet blokķēdē komisijas nepiecieÅ”amÄ«ba ir pierādÄ«ta tik pārliecinoÅ”i, ka par tās nepiecieÅ”amÄ«bu nav Å”aubu.
  6. Mūsdienu blokķēdes spēj ieviest biznesa loģiku, ko blokķēdē sauc par viedajiem līgumiem. Viedo līgumu loģika tiek realizēta dažādās augsta līmeņa valodās.

Tālāk mēs Å”os risinājumus apsvērsim sÄ«kāk.

Blockchain arhitektūra

Blockchain komponenti

Katrs dalībnieks var palaist savu mezglu ar pilnu blokķēdes kopiju (pilnu mezglu). Tiek izsaukti pilni mezgli, kas var ierakstīt darījumus blokķēdē vienprātības mezgli (liecinieks) vai kalnrači (kalnracis). Tiek izsaukti pilni mezgli, kas pārbauda tikai darījumu pareizību audita mezgli (audits). Vieglie klienti (vieglie klienti) nesaglabā pilnas blokķēdes kopijas, bet mijiedarbojas ar tīklu, izmantojot pilnus mezglus.
Lielākā daļa lietotāju darījumu veikŔanai izmanto vieglos klientus vai tīmekļa makus. Visi mezgli ir savienoti viens ar otru. Izmantojot Ŕo elementu kopu, tīkla arhitektūra kļūst stabilāka:

Ko mums vajadzētu izveidot blokķēdi?

Darījuma dzīves cikls

Apskatīsim darījuma dzīves ciklu un sadalīsim to pa gabalam:

Ko mums vajadzētu izveidot blokķēdi?

Blockchain tehnoloģijas

Pakavēsimies sīkāk pie tehniskajiem risinājumiem un to savstarpējām saistībām.

Identifikācija

Katram blokķēdes darÄ«jumam ir jābÅ«t digitāli parakstÄ«tam. Tāpēc, lai pabeigtu darÄ«jumu, katram dalÄ«bniekam ir jābÅ«t atslēgu pārim: privātais / publiskais. Dažkārt atslēgu pāri sauc par maku, jo atslēgas ir unikāli saistÄ«tas ar dalÄ«bnieka unikālo digitālo adresi un bilanci. PatiesÄ«bā atslēgas un adreses ir tikai ciparu virknes dažādās numuru sistēmās. Atslēgu un maku adreÅ”u piemēri:

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

Lai izveidotu digitālo parakstu blokķēdēs, tiek izmantots algoritms, kura pamatā ir eliptiskās lÄ«knes: Eliptiskās lÄ«knes digitālā paraksta algoritms (ECDSA). Lai tas darbotos, privātā atslēga (256 bitu numurs) parasti tiek ņemta nejauÅ”i. Atslēgu opciju skaits ir 2 lÄ«dz 256, tāpēc mēs varam runāt par praktisko neiespējamÄ«bu saskaņot privāto atslēgu vērtÄ«bas.

Pēc tam publisko atslēgu iegÅ«st no privātās, reizinot tās vērtÄ«bu ar punkta koordinātām, kas atrodas uz eliptiskās lÄ«knes, iegÅ«stot jauna punkta koordinātas tajā paŔā lÄ«knē. Å Ä« darbÄ«ba nodroÅ”ina, ka iegÅ«stat atslēgu pāri, kas ir piemērots transakciju ciparparakstÄ«Å”anai. Visbeidzot, maka adrese ir unikāli atvasināta no publiskās atslēgas.

Ir daudz rakstu ar detalizētu informāciju par blokķēdē izmantoto kriptogrāfiju, piemēram: Bitcoin Ä«sumā ā€“ kriptogrāfija

Privātajai atslēgai ir jābÅ«t stingri konfidenciālai un jāglabā droŔībā. Publiskā atslēga ir zināma visiem. Ja tiek pazaudēta privātā atslēga, piekļuvi Ä«paÅ”umam (monētām) nevarēs atjaunot un nauda tiks zaudēta uz visiem laikiem. Tāpēc uzdevums droÅ”i glabāt privātās atslēgas ir ārkārtÄ«gi bÅ«tisks, jo Å Ä« nav banka, kur jÅ«s vienmēr varat ierasties ar savu pasi un atjaunot kontu. Ir vesela nozare tā saukto auksto kriptomaku ražoÅ”anai, lÄ«dzÄ«gi kā zibatmiņas diskiem:

Ko mums vajadzētu izveidot blokķēdi?

vai arī varat izmantot uzticamākas metodes, piemēram, uz marķieriem uzspiežot privātās atslēgas vērtību:

Ko mums vajadzētu izveidot blokķēdi?

Darījumi

SÄ«kāka informācija par darÄ«juma struktÅ«ru ir atrodama rakstā Bitcoin Ä«sumā ā€“ DarÄ«jums. Mums ir svarÄ«gi saprast, ka katram darÄ«jumam ir vismaz Ŕādi dati:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цŠøфрŠ¾Š²Š¾Š¹ Š°Š“рŠµŃ Š¾Ń‚ŠæрŠ°Š²ŠøтŠµŠ»Ń
To: 0x367adb7894334678b90Š°fe7882a5b06f7fbc783a - цŠøфрŠ¾Š²Š¾Š¹ Š°Š“рŠµŃ ŠæŠ¾Š»ŃƒŃ‡Š°Ń‚ŠµŠ»Ń
Value: 0.0001 - суŠ¼Š¼Š° трŠ°Š½Š·Š°ŠŗцŠøŠø
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш трŠ°Š½Š·Š°ŠŗцŠøŠø

Pēc tam darījums tiek parakstīts ar privāto atslēgu un izsūtīts (skatīt sīkāku informāciju par protokola darbību Bitcoin īsumā-Protokols) visiem blokķēdes mezgliem, kas pārbauda darījumu derīgumu. Darījuma pārbaudes algoritms nav triviāls un ietver divi desmiti soļu.

Darījumu bloki

Pēc darÄ«jumu derÄ«guma pārbaudes mezgli no tiem veido blokus. Papildus transakcijām blokā tiek ierakstÄ«ts iepriekŔējā bloka jaucējvārds un skaitlis (Nonce counter), un paÅ”reizējā bloka jaucējvērtÄ«ba tiek aprēķināta, izmantojot SHA-256 algoritmu. Jauktam ir jābÅ«t noteiktiem sarežģītÄ«bas nosacÄ«jumiem. Piemēram, Bitcoin tÄ«klā sajaukÅ”anas grÅ«tÄ«bas pakāpe tiek automātiski mainÄ«ta ik pēc 2 nedēļām atkarÄ«bā no tÄ«kla jaudas, lai bloks tiktu Ä£enerēts aptuveni reizi 10 minÅ«tēs. SarežģītÄ«bu nosaka Ŕāds nosacÄ«jums: atrastajam hash ir jābÅ«t mazākam par iepriekÅ” noteiktu skaitli. Ja Å”is nosacÄ«jums nav izpildÄ«ts, Nonce tiek pievienots 1, un jaucējkrāna aprēķināŔanas darbs tiek atkārtots. Lai atlasÄ«tu jaucējkodu, tiek izmantots lauks Nonce, jo Å ie ir vienÄ«gie dati blokā, ko var mainÄ«t; pārējiem ir jāpaliek nemainÄ«giem. DerÄ«gam jaucējam ir jābÅ«t noteiktam skaitam sākuma nulles, piemēram, vienai no reālajām jauktām:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

VeiksmÄ«ga jaucējkoda atraÅ”ana ir pierādÄ«jums par paveikto darbu (Proof-of-Work, PoW) Bitcoin vai Ethereum tÄ«kliem. HaÅ”u atraÅ”anas procesu sauc par ieguvi, lÄ«dzÄ«gi kā zelta ieguvi. Nosaukums diezgan precÄ«zi definē procesa bÅ«tÄ«bu, jo ir vienkārÅ”a opciju meklÄ“Å”ana, un, ja kāds atrod piemērotu hash, tad tā patieŔām ir veiksme. Tas ir tāpat kā atrast Ä«stu zelta tÄ«rradni tonnās atkritumiežu. Bloka atlÄ«dzÄ«ba tagad ir 12.5 BTC, un, reizinot to ar paÅ”reizējo Bitcoin likmi 3900 $, jÅ«s saņemsiet vairāk nekā kilogramu tÄ«ra zelta. Ir par ko cÄ«nÄ«ties!

Pēc veiksmÄ«gas hash atraÅ”anas bloks un pats atrastais hash tiek ierakstÄ«ts blokķēdē kā nākamais bloks. SÄ«kāka informācija par bloku struktÅ«ru ir atrodama rakstā Bitcoin Ä«sumā-Blockchain, un zemāk ir vienkārÅ”ota diagramma:

Ko mums vajadzētu izveidot blokķēdi?

Blokķēde sākas ar bloku, kuram vēl nav iepriekŔējā bloka jaucējkoda. Blokķēdē ir tikai viens Ŕāds bloks, un tam ir savs nosaukums Genesis bloks. Pārējiem blokiem ir tāda pati struktÅ«ra un tie atŔķiras tikai ar darÄ«jumu skaitu. Reālos darÄ«jumus un blokus, kas paÅ”laik tiek veidoti Bitcoin vai Ethereum, var apskatÄ«t Bloķēt pārlÅ«ku.

Bloku lielums Bitcoin ir ierobežots lÄ«dz 1 MB, un ar minimālo informācijas apjomu darÄ«jumā aptuveni 200 baiti, maksimālais darÄ«jumu skaits blokā var bÅ«t aptuveni 6000. No Å”ejienes, starp citu, seko Bitcoin veiktspēja, par kuru visi smejas: bloks tiek Ä£enerēts aptuveni reizi 10 minÅ«tēs * 60 sekundes = 600 sekundes, kas nodroÅ”ina formālu veiktspēju aptuveni 10 TPS. Lai gan patiesÄ«bā tas nav produktivitāte, bet gan apzināti ieviests darba algoritms. Programmā Ethereum konkurencei viņi vienkārÅ”i padarÄ«ja bloka Ä£enerÄ“Å”anas laiku 15 sekundes. un produktivitāte formāli pieauga. Tāpēc blokķēdēs, kas izmanto PoW kā vienprātÄ«bu, nav jēgas salÄ«dzināt veiktspēju vispār, jo tas ir tieÅ”i atkarÄ«gs no keÅ”atmiņas aprēķina sarežģītÄ«bas, ko var pieŔķirt jebkurai vērtÄ«bai.

DakŔas

Kas notiek, ja, piemēram, vairāki mezgli atrada jaucējfunkcijas, kas atbilst sarežģītÄ«bas nosacÄ«jumiem, bet ir atŔķirÄ«gas pēc vērtÄ«bas (citiem vārdiem sakot, tika panākta atŔķirÄ«ga vienprātÄ«ba) un ierakstÄ«ja blokus blokķēdē? ApskatÄ«sim, kā blokķēde aizsargā pret Å”o situāciju. Å ajā gadÄ«jumā notiek tā sauktā dakÅ”a, un blokķēdei ir divas ķēdes versijas:

Ko mums vajadzētu izveidot blokķēdi?

Kas notiek tālāk? Tālāk daļa tīkla sāk strādāt blokā N+2 no vienas ķēdes, bet daļa no citas:

Ko mums vajadzētu izveidot blokķēdi?

Viens no Å”iem blokiem tiks atrasts agrāk un nosÅ«tÄ«ts uz blokķēdi, un pēc tam saskaņā ar noteikumiem blokķēdei bÅ«s jāpārslēdzas uz garāku ķēdi un jāatceļ visi darÄ«jumi no alternatÄ«vā bloka:

Ko mums vajadzētu izveidot blokķēdi?

Tajā paŔā laikā var rasties situācija, kad dalÄ«bnieka darÄ«jums bija tikai vienā no dakÅ”u blokiem, kas tika atcelts. Tāpēc, lai bÅ«tu droÅ”s, ka vēlamais darÄ«jums ir ierakstÄ«ts blokķēdē, ir vispārÄ«gs ieteikums ā€“ pirms uzticēties darÄ«jumam, jāpagaida, lÄ«dz blokķēdē tiks pievienoti nākamie bloki. Ieteikumi, cik daudz bloku jāgaida dažādām blokķēdēm, atŔķiras. Piemēram, Bitcoin tÄ«klam minimālais ir 2 bloki, maksimālais ir 6.

Tāda pati aina ar blokdakŔām bÅ«s vērojama tā dēvētā 51% uzbrukuma laikā ā€“ tas ir tad, kad kalnraču grupa mēģina izveidot alternatÄ«vu bloku ķēdi, cenÅ”oties pārtraukt ķēdi ar saviem krāpnieciskajiem darÄ«jumiem. Lai gan paÅ”laik krāpÅ”anas vietā izdevÄ«gāk ir tērēt savu spēku godÄ«gai ieguvei.

Vienprātība

Lai ierakstÄ«tu bloku blokķēdē, tÄ«klam ir jāpanāk vienprātÄ«ba. Atcerēsimies uzdevumu panākt vienprātÄ«bu datorkomunikāciju tÄ«klos. Problēma ir formulēta kā bizantieÅ”u Ä£enerāļu BFT (Bizantijas kļūdu tolerance). Izlaižot gleznaino Bizantijas armijas problēmu aprakstu, problēmu var formulēt Ŕādi: kā tÄ«kla mezgli var nonākt pie kopēja rezultāta, ja daži tÄ«kla mezgli var tos apzināti deformēt. EsoÅ”ie BFT problēmas risināŔanas algoritmi parāda, ka tÄ«kls var darboties pareizi, ja tajā ir mazāk nekā 1/3 krāpnieku. Kāpēc BFT konsenss nav piemērots Bitcoin tÄ«klam? Kāpēc bija nepiecieÅ”ams izmantot PoW? Ir vairāki iemesli:

  • BFT labi darbojas ar nelielu fiksētu mezglu komplektu, taču publiskā blokķēdē mezglu skaits nav prognozējams un turklāt mezglus var ieslēgt un izslēgt nejauÅ”i.
  • Ir nepiecieÅ”ams motivēt cilvēkus palaist blokķēdes mezglus. Lai to izdarÄ«tu, cilvēkiem ir jāsaņem atalgojums. BFT formāli nav par ko saņemt atlÄ«dzÄ«bu, bet tas, par ko atlÄ«dzÄ«ba tiek pieŔķirta PoW, ikvienam ir skaidrs intuitÄ«vā lÄ«menÄ«: par elektrÄ«bu, ko procesors patērē bloka hash atraÅ”anas procesā.

Papildus PoW mūsdienu blokķēdēs tiek izmantotas vairākas citas vienprātības, piemēram:

  • PoS (Proof-of-Stake) ā€” blokķēdē Hiperspēks
  • DPoS (Delegated Proof-of-Stake) ā€” blokķēdē BitShares
  • BFT modifikācijas: SBFT (vienkārÅ”otā BFT) un PBFT (praktiskā BFT), piemēram, blokķēdē Exonum

Nedaudz pakavēsimies pie PoS vienprātÄ«bas, jo... TieÅ”i PoS un tā Ŕķirnes ir visizplatÄ«tākās privātajās blokķēdēs. Kāpēc privāti? No vienas puses, PoS Ä«paŔības ir labākas salÄ«dzinājumā ar PoW, jo Lai panāktu vienprātÄ«bu, ir nepiecieÅ”ams mazāk skaitļoÅ”anas resursu, kas nozÄ«mē, ka palielinās datu ierakstÄ«Å”anas ātrums blokķēdē. Bet no otras puses, PoS ir lielākas krāpÅ”anas iespējas, tāpēc, lai to neitralizētu, ir jāzina visi blokķēdes dalÄ«bnieki.

PoS konsenss balstās uz tāda mezgla izvēli, kas var ierakstÄ«t bloku ar transakcijām uz blokķēdi atkarÄ«bā no naudas lÄ«dzekļu apjoma kontā, pareizāk sakot, nevis kontā, bet nodroÅ”inājumā, t.i. Jo vairāk lÄ«dzekļu jums ir kā nodroÅ”inājums, jo lielāka iespēja, ka tÄ«kls izvēlēsies jÅ«su mezglu bloka rakstÄ«Å”anai. DepozÄ«ts netiks atgriezts, ja bloks ir nederÄ«gs. Tas nodroÅ”ina aizsardzÄ«bu pret krāpÅ”anu. Ir Ŕādas PoS variācijas:

  • Deleģētā PoS (DPoS) vienprātÄ«ba sadala dalÄ«bniekus ā€œbalsotājosā€ un ā€œvalidatorosā€. Monētu turētāji (balsoÅ”anas dalÄ«bnieki) deleģē savas tiesÄ«bas pārbaudÄ«t un reÄ£istrēt darÄ«jumus blokķēdē citiem dalÄ«bniekiem. Tādējādi vērtētāji veic visu skaitļoÅ”anas darbu un par to saņem atlÄ«dzÄ«bu, un balsotāju klātbÅ«tne garantē vērtētāju godÄ«gumu, jo tos var mainÄ«t jebkurā laikā.
  • LPoS (leased Proof-of-Stake) vienprātÄ«ba ļauj iznomāt savus lÄ«dzekļus citiem mezgliem, lai tiem bÅ«tu lielāka iespēja apstiprināt blokus. Tas. JÅ«s varat saņemt komisiju par darÄ«jumiem, nepiedaloties faktiskā darÄ«juma pārbaudē un bloku ieguvē.

Ir virkne citu konsensu, kas vēl netiek plaÅ”i izmantoti, es tos Å”eit uzskaitÄ«Å”u tikai informācijai, un pārskatu par paÅ”iem vienprātÄ«bas algoritmiem var atrast, piemēram, rakstā: VienprātÄ«bas algoritmi blokķēdē.

  • PoET (pagājuŔā laika pierādÄ«jums)
  • PoC (kapacitātes apliecinājums)
  • PoB (iedeguma pierādÄ«jums)
  • PoWeight (svara pierādÄ«jums)
  • PoA (aktivitātes pierādÄ«jums) ā€“ PoW + PoS
  • PoI (Proof-of-Importans)

Blokķēžu uzticamÄ«bas un izvietoÅ”anas modeļi

Publiskā blokķēde

Stabilitāte valsts vai cits vārds Neatļauta blokķēde Tas tiek panākts, ļaujot ikvienam izveidot savienojumu un skatÄ«t informāciju vai pat izveidot savienojumu ar savu mezglu, un uzticÄ“Å”anās tiek veidota, pamatojoties uz PoW vienprātÄ«bu.

Privātā blokķēde

Privāts vai Privāta atļauta blokķēde. Å ajās blokķēdēs informācijai ir pieejama tikai noteikta dalÄ«bnieku grupa (organizācijas vai cilvēki). Šādas blokķēdes veido organizācijas ar mērÄ·i palielināt kopējo ieguvumu vai efektivitāti. To uzticamÄ«bu nodroÅ”ina dalÄ«bnieku kopÄ«gie mērÄ·i un PoS un BFT konsensa algoritmi.

Blockchain konsorcijs

Tur Konsorcijs vai Publiski atļauta blokķēde. Tās ir blokķēdes, kurām ikviens var pieslēgties, lai skatÄ«tu, bet dalÄ«bnieks var pievienot informāciju vai savienot savu mezglu tikai ar citu dalÄ«bnieku atļauju. Šādas blokķēdes veido organizācijas, lai palielinātu klientu vai produktu patērētāju vai visas sabiedrÄ«bas uzticÄ«bu. Å eit uzticamÄ«ba tiek panākta arÄ« ar uzticÄ“Å”anos starp dalÄ«bniekiem un tiem paÅ”iem PoS un BFT konsensa algoritmiem.

Viedie līgumi

Blokķēdes, kas ieviestas pēc Bitcoin, vienā vai otrā pakāpē ir pievienojuÅ”as iespēju izpildÄ«t viedos lÄ«gumus. BÅ«tÄ«bā viedais lÄ«gums ir darÄ«jums, kurā izpildei tiek ievietots programmas kods. Viedie lÄ«gumi Ethereum tÄ«klā tiek izpildÄ«ti EVM (Ethereum virtuālajā maŔīnā). Lai sāktu viedā lÄ«guma izpildi, tas ir skaidri jāpalaiž citā transakcijā vai arÄ« ir jābÅ«t izpildÄ«tiem izpildes priekÅ”nosacÄ«jumiem. Viedā lÄ«guma izpildes rezultāti tiks ierakstÄ«ti arÄ« blokķēdē. Datu saņemÅ”ana ārpus blokķēdes ir iespējama, taču ārkārtÄ«gi ierobežota.

Kādu biznesa loÄ£iku var Ä«stenot, izmantojot viedo lÄ«gumu? PatiesÄ«bā nav daudz, piemēram, apstākļu pārbaude, izmantojot datus no blokķēdes, digitālo aktÄ«vu Ä«paÅ”nieku maiņa atkarÄ«bā no Å”iem apstākļiem, datu ierakstÄ«Å”ana pastāvÄ«gā krātuvē blokķēdes ietvaros. LoÄ£ika tiek Ä«stenota Ä«paŔā augsta lÄ«meņa valodā Solidity.

Klasisks piemērs funkcionalitātei, kas tiek ieviesta, izmantojot viedos lÄ«gumus, ir tokenu izsniegÅ”ana ICO. Piemēram, es Ä«stenoju viedo lÄ«gumu, lai izsniegtu pieticÄ«gu 500 000 000 AlexToken. Autors saite programmā Etherscan ir

viedā līguma pirmkods Solidity valodā

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;
}

un bināro attēlojumu, kā to redz tīkls

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

PlaŔāku informāciju par viedajiem līgumiem var atrast rakstā: Kas ir viedie līgumi Ethereum.

Secinājums

Mēs esam uzskaitÄ«juÅ”i tehnoloÄ£ijas, uz kurām tiek veidotas mÅ«sdienu blokķēdes, un kā tās ir savienotas viena ar otru. Tagad formulēsim, kuras problēmas var atrisināt, izmantojot blokķēdi, un kuri risinājumi labākajā gadÄ«jumā bÅ«s neefektÄ«vi. Tātad blokķēdes izmantoÅ”ana nav nepiecieÅ”ama, ja:

  • DarÄ«jumi tiek veikti uzticamā vidē;
  • Starpnieku komisijas klātbÅ«tne nepasliktina dalÄ«bnieku dzÄ«vi;
  • DalÄ«bniekiem nav Ä«paÅ”uma, ko var attēlot kā digitālos aktÄ«vus;
  • Digitālajos aktÄ«vos nav izplatÄ«Å”anas, t.i. vērtÄ«ba pieder vai piegādā tikai viens dalÄ«bnieks.

Kāda ir blokķēdes nākotne? Tagad mēs varam tikai spekulēt par iespējamiem blokķēdes tehnoloģiju attīstības veidiem:

  • Blockchain kļūs par tādu paÅ”u izplatÄ«tu datu bāzes tehnoloÄ£iju kā, piemēram, SQL vai NoSQL, lai atrisinātu savu specifisko problēmu loku;
  • Blockchain kļūs par plaÅ”i izplatÄ«tu protokolu, tāpat kā HTTP ir paredzēts internetam;
  • Blockchain kļūs par pamatu jaunai finanÅ”u un politiskajai sistēmai uz planētas!

Nākamajā daļā apskatÄ«sim, kādas blokķēdes Å”obrÄ«d pastāv un kāpēc tās tiek izmantotas dažādās nozarēs.

Šis ir tikai sākums!

Avots: www.habr.com

Pievieno komentāru