Kion ni konstruu blokĉenon?

La tuta historio de la homaro estas daŭra procezo forigi ĉenojn kaj krei novajn, eĉ pli fortajn. (Anonima aŭtoro)

Analizante multajn blockchain-projektojn (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, ktp.), mi komprenas, ke de teknika vidpunkto, ili ĉiuj estas konstruitaj laŭ la samaj principoj. Blokĉenoj memorigas domojn, kiuj, malgraŭ ĉiuj diversaj dezajnoj, dekoracio kaj celoj, havas fundamenton, murojn, tegmenton, fenestrojn, pordojn, kiuj estas konektitaj unu al la alia laŭ certaj manieroj. Kaj se vi komprenas la bazajn principojn de konstruado de dezajno kaj konas la ecojn de la uzataj materialoj, tiam vi povas determini la celon de aparta domo. Nuntempe, situacio aperis kun blokoĉeno, kiun ĉiuj aŭdis pri ĝi, sed malmultaj homoj komprenas la arkitekturon kaj principojn de funkciado. Tial, estas miskompreno pri kial kaj kiel havas sencon uzi blokĉenajn teknologiojn.

En ĉi tiu artikolo ni analizos la proprietojn kaj principojn komunajn al ĉiuj blokĉenoj. Poste, ni rigardu la problemojn, kiuj povas esti solvitaj uzante la blokĉenon kaj por plifortigi la materialon, ni konstruu malgrandan sed realan blokĉenon en nia virtuala retejo!

Do, ni memoru, kiajn problemojn blokĉeno komence solvis.

Mi certas, ke multaj diros pri distribuita, malcentralizita, publika kaj neŝanĝebla datumbazo. Sed kial ĉio ĉi estis necesa?

Mi preferas komenci studi ajnan teknologion legante la normojn, ĉar ĉiuj artikoloj kaj libroj pri la studata temo baziĝas sur ili. Sed nuntempe ne ekzistas blokĉenaj normoj; ISO nur kreis komitatoj por ilia evoluo. Nuntempe, ĉiu publika blokĉena projekto havas sian propran Blankan paperan dokumenton, kiu estas esence teknika specifo. La unua publike konata blokĉena projekto estas la Bitcoin-reto. Iru al la oficiala retejo de la reto kaj rigardu kie ĉio komenciĝis.

Blockchain Defio

Do, la tasko, kiun blokoĉeno solvis en la pionira reto de Bitcoin, estas efektivigi fidindan translokigon de proprieto de ciferecaj aktivoj (aktivoj) en nefidinda medio sen perantoj. Ekzemple, en la reto Bitcoin, cifereca valoraĵo estas bitcoin ciferecaj moneroj. Kaj ĉiuj teknikaj solvoj de Bitcoin kaj aliaj blokĉenoj venas al solvi ĉi tiun problemon.

Problemoj, kiujn blokoĉeno solvas

Supozu, ke certa financa organizo diras, ke ĝi konstruis reton tra la mondo per kies helpo eblas transdoni monon al iu ajn persono. Ĉu vi kredos ŝin? Se ĉi tiu organizo estas Visa aŭ MasterCard, plej verŝajne vi kredos ĝin, sed se, relative parolante, AnonymousWorldMoney, vi verŝajne ne faros. Kial? Sed ĉar ni tre bone scias kiel distribuitaj sistemoj estas faritaj de privataj kompanioj, por kiaj celoj, kaj al kio tio povas konduki. Ni rigardu pli detale la problemojn de tiaj sistemoj kaj kiel ili povas esti solvitaj per blokĉenaj teknologioj.

Ni diru, ke en la kondiĉa AnonymousWorldMoney estas serviloj kun datumbazoj, kaj estas bone, se estas pluraj da ili en malsamaj datumcentroj. Kiam la sendinto transdonas monon, transakcio estas registrita, kiu estas reproduktita al ĉiuj serviloj, kaj la mono atingas la ricevanton.

Kion ni konstruu blokĉenon?

En ideala mondo ĉi tiu skemo funkcias bonege, sed en la nia aperas jenaj problemoj:

  1. La problemo de identigado de partoprenantoj unuflanke kaj la bezono de anonimeco de transakcioj aliflanke. Tiuj. vi devas transdoni monon al specifa ricevanto kaj tiel, ke neniu scias pri ĉi tiu transakcio krom la partoprenantoj en la transakcio. Bankoj havas kontnumerojn kaj bankkartojn ligitajn al specifa individuo aŭ jura unuo, kaj banka sekreto protektas transakciajn informojn. Kaj kiu garantias, ke la kondiĉa AnonymousWorldMoney ne uzas personajn datumojn kaj transakciajn informojn por siaj propraj celoj?
  2. Kiel certigi, ke la ricevanto ricevis ĝuste la sumon, kiu estis transdonita al li? Relative parolante, la sendinto transdonis $100, kaj la ricevanto ricevis $10. La sendinto venas al la oficejo de AnonymousWorldMoney kun sia kvitanco, kaj la oficisto montras sian version, kie estas skribite, ke la sendinto transdonis nur $10.
  3. La problemo de nefidinda medio, ekzemple, fraŭdo nomata duobla elspezo. Senskrupula partoprenanto povas elspezi sian saldon plurajn fojojn ĝis la pago estas reproduktita al ĉiuj serviloj. CAP teoremo, kompreneble, neniu nuligis, kaj interkonsento finfine estos atingita, sed iu ne ricevos monon por servoj aŭ varoj provizitaj. Tial, se ne ekzistas kompleta fido en la paga organizo aŭ partoprenantoj en transakcioj, tiam necesas konstrui reton bazitan ne sur fido, sed sur kripto.
  4. Kondiĉa AnonymousWorldMoney havas finhavan nombron da serviloj kiuj povas iĝi neatingeblaj neintence aŭ pro malica intenco.
  5. AnonymousWorldMoney prenos sian propran palpeblan komisionon.
  6. Eblo de kontrolo. Dum la operacio de Bitcoin, montriĝis, ke homoj volas ne nur transdoni monerojn unu al la alia, sed ankaŭ kontroli diversajn kondiĉojn por la transakcio, programi laborscenarojn, aŭtomate plenumi agojn depende de la kondiĉoj, ktp.

Kiel blokĉeno solvas ĉi tiujn problemojn

  1. Identigo de partoprenantoj estas efektivigita per paro da ŝlosiloj: privata kaj publika, kaj la cifereca subskriba algoritmo unike identigas la sendinton kaj ricevanton, lasante iliajn identecojn anonimaj.
  2. Transakcioj estas kolektitaj en blokojn, la hash de la bloko estas kalkulita kaj skribita en la sekvan blokon. Ĉi tiu sekvenco de registrado de hashoj en blokoj donas al la blokĉena teknologio sian nomon, kaj ankaŭ malebligas nerimarkeble ŝanĝi / forigi blokojn aŭ individuajn transakciojn de blokoj. Tiel, se transakcio estas inkluzivita en la blokĉeno, vi povas esti certa, ke ĝiaj datumoj restos senŝanĝaj.
  3. Duobla elspeza fraŭdo estas malhelpita atingante retan konsenton pri kiuj datumoj konsideri validaj kaj kiujn forĵeti. En la reto Bitcoin, konsento estas atingita per pruvo de laboro (PoW).
  4. La fidindeco de la reto estas atingita per la fakto, ke la blokĉeno estas publika, kie ĉiu partoprenanto povas funkciigi sian propran nodon, ricevi kompletan kopion de la blokĉeno kaj, krome, sendepende komenci kontroli transakciojn por ĝusteco. Oni devas rimarki, ke modernaj blokĉenoj ebligas konstrui ne nur publikajn (malfermajn) sed ankaŭ privatajn (fermitajn) blokĉenojn, kaj ankaŭ la uzon de kombinitaj skemoj.
  5. La blokĉeno ne tute forigos komisionojn, ĉar... vi devas pagi la homojn, kiuj subtenas la reton, sed en la blokĉeno la bezono de komisiono estas pruvita tiel konvinke, ke ne estas dubo pri ĝia neceso.
  6. Modernaj blokĉenoj havas la kapablon efektivigi komercan logikon, kiu en la blokĉeno nomiĝas Smart Contracts. La logiko de inteligentaj kontraktoj estas efektivigita en diversaj altnivelaj lingvoj.

Poste ni konsideros ĉi tiujn solvojn pli detale.

Blokoĉena arkitekturo

Blokoĉenaj Komponantoj

Ĉiu partoprenanto povas lanĉi sian propran nodon kun plena kopio de la blokĉeno (plena nodo). Plenaj nodoj, kiuj povas registri transakciojn sur la blokĉeno, estas nomitaj konsentaj nodoj (atestanto) aŭ ministoj (ministo). Plenaj nodoj, kiuj nur kontrolas la ĝustecon de transakcioj, estas nomitaj reviziaj nodoj (revizio). Malpezaj klientoj (malpezaj klientoj) ne stokas plenajn kopiojn de la blokĉeno, sed interagas kun la reto uzante plenajn nodojn.
Plej multaj uzantoj uzas malpezajn klientojn aŭ retajn monujojn por fari transakciojn. Ĉiuj nodoj estas konektitaj unu al la alia. Kun ĉi tiu aro de elementoj, la reto-arkitekturo iĝas pli stabila:

Kion ni konstruu blokĉenon?

Transakcia vivociklo

Ni rigardu la transakcian vivciklon kaj malkonstruu ĝin peco post peco:

Kion ni konstruu blokĉenon?

Blokaj teknologioj

Ni pli detale pritraktu teknikajn solvojn kaj iliajn rilatojn inter si.

Identigo

Ĉiu blokĉena transakcio devas esti ciferece subskribita. Tial, por plenumi transakcion, ĉiu partoprenanto devas havi ŝlosilparon: privata / publika. Foje paro da ŝlosiloj nomiĝas monujo, ĉar la ŝlosiloj estas unike asociitaj kun la unika cifereca adreso kaj ekvilibro de la partoprenanto. En realeco, ŝlosiloj kaj adresoj estas nur ĉenoj de nombroj en malsamaj nombraj sistemoj. Ekzemploj de ŝlosiloj kaj monujo-adresoj:

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

Por krei ciferecan subskribon en blokĉenoj, algoritmo bazita sur elipsaj kurboj estas uzata: Elipsa Kurbo Cifereca Signature Algorithm (ECDSA). Por ke ĝi funkciu, la privata ŝlosilo (256-bita nombro) estas kutime prenita hazarde. La nombro da ŝlosilaj opcioj estas 2 al la potenco de 256, do ni povas paroli pri la praktika neeblo kongrui kun la valoroj de privataj ŝlosiloj.

Poste, la publika ŝlosilo estas akirita de la privata multobligante ĝian valoron per la koordinatoj de punkto situanta sur la elipsa kurbo, rezultigante la koordinatojn de nova punkto sur la sama kurbo. Ĉi tiu ago certigas, ke vi akiras ŝlosilparon taŭgan por ciferece subskribi transakciojn. Fine, la monujo-adreso estas unike derivita de la publika ŝlosilo.

Estas multaj artikoloj kun detaloj pri la kriptografio uzata en blokĉeno, ekzemple: Bitcoin en malmultaj vortoj - Kriptografio

La privata ŝlosilo devas esti strikte konfidenca kaj konservita sekura. La publika ŝlosilo estas konata de ĉiuj. Se la privata ŝlosilo estas perdita, aliro al la valoraĵo (moneroj) ne povas esti restarigita kaj la mono estos perdita por ĉiam. Tial, la tasko sekure konservi privatajn ŝlosilojn estas ege grava, ĉar Ĉi tio ne estas banko, kie vi ĉiam povas veni kun via pasporto kaj restarigi vian konton. Estas tuta industrio por la produktado de tiel nomataj malvarmaj kriptaj monujoj, similaj al poŝmemoriloj:

Kion ni konstruu blokĉenon?

aŭ vi povas uzi pli fidindajn metodojn, ekzemple, stampi la valoron de la privata ŝlosilo sur ĵetonoj:

Kion ni konstruu blokĉenon?

Transakcioj

Pliaj detaloj pri la transakcia strukturo troveblas en la artikolo Bitcoin en malmultaj vortoj - Transakcio. Gravas por ni kompreni, ke ĉiu transakcio havas almenaŭ la sekvajn datumojn:

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

Poste, la transakcio estas subskribita per privata ŝlosilo kaj sendita (vidu detalojn pri la funkciado de la protokolo Bitcoin en resumo-Protokolo) al ĉiuj nodoj en la blokĉeno, kiuj kontrolas transakciojn por valideco. La transakcia konfirmalgoritmo estas ne-triviala kaj inkluzivas du dekduojn da paŝoj.

Transakciaj blokoj

Post kontrolado de la valideco de transakcioj, nodoj formas blokojn de ili. Krom transakcioj, la hash de la antaŭa bloko kaj nombro (Nonce-nombrilo) estas skribitaj en la blokon, kaj la hash de la nuna bloko estas kalkulita per la SHA-256-algoritmo. La haŝiŝo devas esti establitaj komplekseckondiĉoj. Ekzemple, en la reto Bitcoin, la malfacileco de la hash aŭtomate ŝanĝiĝas ĉiujn 2 semajnojn depende de la potenco de la reto tiel ke bloko estas generita proksimume unufoje ĉiujn 10 minutojn. La komplekseco estas determinita de la sekva kondiĉo: la hash trovita devas esti malpli ol antaŭdeterminita nombro. Se ĉi tiu kondiĉo ne estas plenumita, tiam 1 estas aldonita al la Nonce, kaj la laboro de kalkulo de la hash ripetiĝas. Por elekti haŝon, la kampo Nonce estas uzata, ĉar Ĉi tio estas la nuraj datumoj en la bloko, kiuj povas esti ŝanĝitaj; la resto devas resti senŝanĝa. Valida hash devas havi certan nombron da antaŭaj nuloj, kiel unu el la realaj hash:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Sukcese trovi hash estas pruvo de laboro farita (Proof-of-Work, PoW) por la retoj Bitcoin aŭ Ethereum. La procezo de trovado de haŝoj nomiĝas minado, simila al orminado. La nomo sufiĉe precize difinas la esencon de la procezo, ĉar estas simpla serĉo de opcioj, kaj se iu trovas taŭgan haŝiŝon, tiam ĉi tio estas vere bonŝanco. Estas kiel trovi veran oran nuketon en tunoj da rubroko. La bloka rekompenco nun estas 12.5 BTC kaj se vi multobligas ĝin per la nuna Bitcoin-kurzo de $ 3900, vi ricevas pli ol kilogramon da pura oro. Estas io por batali!

Post sukcese trovi hash, la bloko kaj la trovita hash mem estas skribitaj al la blokĉeno kiel la sekva bloko. Pliaj detaloj pri la strukturo de blokoj troveblas en la artikolo Bitcoin en malmultaj vortoj-Blokoĉeno, kaj malsupre estas simpligita diagramo:

Kion ni konstruu blokĉenon?

La blokĉeno komenciĝas per bloko, kiu ankoraŭ ne havas la haŝon de la antaŭa bloko. Estas nur unu tia bloko en la blokĉeno kaj havas sian propran nomon Genesis block. La ceteraj blokoj havas la saman strukturon kaj diferencas nur en la nombro da transakcioj. Realaj transakcioj kaj blokoj nuntempe kreitaj en Bitcoin aŭ Ethereum povas esti rigardataj Esplorilo de Blokoj.

La grandeco de blokoj en Bitcoin estas limigita al 1MB kaj kun minimuma kvanto da informoj en transakcio de ĉirkaŭ 200 bajtoj, la maksimuma nombro da transakcioj en bloko povas esti ĉirkaŭ 6000. De ĉi tie, cetere, sekvas la agado de Bitcoin, pri kiu ĉiuj ridas: bloko estas generita proksimume unufoje ĉiun 10 minutojn * 60 sekundoj = 600 sekundoj, kio donas formalan agadon de ĉirkaŭ 10 TPS. Kvankam fakte, ĉi tio ne estas produktiveco, sed intence efektivigita algoritmo de laboro. En Ethereum, por konkurado, ili simple faris la blokan generaciotempon 15 sekundojn. kaj produktiveco formale ŝvebis. Tial, en blokĉenoj, kiuj uzas PoW kiel konsenton, tute ne havas sencon kompari rendimenton, ĉar ĝi rekte dependas de la komplekseco de la kaŝmemorkalkulo, kiu povas esti asignita al iu ajn valoro.

Forkoj

Kio okazas se, ekzemple, pluraj nodoj trovis haŝojn kiuj plenumas la komplekseckondiĉojn, sed estas malsamaj en valoro (alivorte, ili venis al malsamaj konsentoj) kaj skribis blokojn al la blokĉeno? Ni vidu kiel blokoĉeno protektas kontraŭ ĉi tiu situacio. En ĉi tiu kazo, tiel nomata forko okazas, kaj la blokĉeno havas du versiojn de la ĉeno:

Kion ni konstruu blokĉenon?

Kio okazas poste? Poste, parto de la reto komencas labori sur bloko N+2 de unu ĉeno, kaj parto de alia:

Kion ni konstruu blokĉenon?

Unu el ĉi tiuj blokoj estos trovita pli frue kaj sendita al la blokĉeno, kaj tiam, laŭ la reguloj, la blokĉeno devos ŝanĝi al pli longa ĉeno kaj nuligi ĉiujn transakciojn de la alternativa bloko:

Kion ni konstruu blokĉenon?

Samtempe, situacio povas aperi kiam la transakcio de partoprenanto estis nur en unu el la forkaj blokoj, kiu estis nuligita. Tial, por certigi, ke la dezirata transakcio estas registrita en la blokĉeno, ekzistas ĝenerala rekomendo - antaŭ fidi la transakcion, vi devus atendi ĝis la sekvaj blokoj aldoniĝos al la blokĉeno. Rekomendoj pri kiom da blokoj atendi malsamajn blokĉenojn varias. Ekzemple, por la reto Bitcoin la minimumo estas 2 blokoj, la maksimumo estas 6.

La sama bildo kun blokforkoj estos observita dum la tiel nomata 51%-atako - ĉi tio estas kiam grupo de ministoj provas kreskigi alternativan blokĉenon, serĉante nuligi la ĉenon per siaj fraŭdaj transakcioj. Kvankam nuntempe, anstataŭ fraŭdo, estas pli profite elspezi vian potencon por honesta minado.

Interkonsento

Por registri blokon sur la blokĉeno, la reto devas atingi konsenton. Ni memoru la taskon atingi konsenton en komputilaj komunikaj retoj. La problemo estas formulita kiel la tasko de la bizancaj generaloj BFT (Bizanca kulpa toleremo). Preterlasante la pitoreskan priskribon de la problemoj de la bizanca armeo, la problemo povas esti formulita jene: kiel retaj nodoj povas veni al komuna rezulto, se iuj retaj nodoj povas intence distordi ilin. Ekzistantaj algoritmoj por solvi la BFT-problemon montras, ke la reto povas funkcii ĝuste se estas malpli ol 1/3 fraŭdantoj. Kial BFT-konsento ne estis aplikita al la Bitcoin-reto? Kial estis necese uzi PoW? Estas pluraj kialoj:

  • BFT funkcias bone kun malgranda fiksa aro de nodoj, sed en publika blokĉeno la nombro da nodoj estas neantaŭvidebla kaj, krome, nodoj povas esti ŝaltitaj kaj malŝaltitaj hazarde.
  • Necesas instigi homojn lanĉi blokĉenajn nodojn. Por fari tion, homoj devas esti rekompencitaj. En BFT estas formale nenio por ricevi rekompencon, sed por kio la rekompenco estas en PoW estas klara por ĉiuj sur intuicia nivelo: por la elektro konsumita de la procesoro en la procezo de trovado de la bloko hash.

Krom PoW, ekzistas pluraj aliaj konsentoj, kiuj estas uzataj en modernaj blokĉenoj, ekzemple:

  • PoS (Proof-of-Stake) - sur la blokĉeno Hyperledger
  • DPoS (Delegita Pruvo-de-Paso) - sur la blokĉeno BitShares:
  • Modifoj de BFT: SBFT (Simpligita BFT) kaj PBFT (Praktika BFT), ekzemple en blokĉeno Eksono

Ni iom deteniĝu pri la PoS-konsento, ĉar... Ĝi estas PoS kaj ĝiaj varioj, kiuj estas plej disvastigitaj en privataj blokĉenoj. Kial private? Unuflanke, la karakterizaĵoj de PoS estas pli bonaj kompare kun PoW, ĉar Por atingi konsenton, necesas malpli da komputikaj rimedoj, kio signifas, ke la rapideco de skribado de datumoj al la blokĉeno pliiĝas. Sed aliflanke, PoS havas pli da ŝancoj por fraŭdo, do por neŭtraligi ĉi tion, ĉiuj partoprenantoj en la blokĉeno devas esti konataj.

PoS-konsento baziĝas sur la elekto de nodo, kiu povas skribi blokon kun transakcioj al la blokĉeno depende de la kvanto de financoj en la konto, aŭ pli ĝuste, ne en la konto, sed en la flanka, t.e. Ju pli da financoj vi havas kiel garantion, des pli verŝajne la reto elektos vian nodon por skribi blokon. La deponejo ne estos resendita se la bloko estas malvalida. Ĉi tio provizas protekton kontraŭ fraŭdo. Estas la sekvaj varioj de PoS:

  • La Delegita PoS (DPoS) konsento dividas partoprenantojn en "balotantoj" kaj "validigantoj". Monerposedantoj (voĉdonantaj partoprenantoj) delegas sian potencon kontroli kaj registri transakciojn sur la blokĉeno al aliaj partoprenantoj. Tiel, validigiloj faras la tutan komputilan laboron kaj ricevas rekompencon pro ĝi, kaj la ĉeesto de voĉdonantaj partoprenantoj garantias la honestecon de validigiloj, ĉar ili povas esti ŝanĝitaj en ajna momento.
  • Interkonsento de LPoS (Luita Pruvo-de-Stake) permesas al vi lui viajn financojn al aliaj nodoj por ke ili havu pli bonan ŝancon validigi blokojn. Tio. Vi povas ricevi komisionon por transakcioj sen partopreni en la reala transakcia konfirmo kaj bloki minadon.

Estas kelkaj aliaj konsentoj, kiuj ankoraŭ ne estas vaste uzataj, mi nur listigos ilin ĉi tie por informoj, kaj superrigardo de la konsentaj algoritmoj mem troveblas, ekzemple, en la artikolo: Interkonsentaj Algoritmoj en Blockchain.

  • PoET (Pruvo de Pasinta Tempo)
  • PoC (Pruvo de Kapacito)
  • PoB (Pruvo de Brulvundo)
  • PoWeight (Pruvo de Pezo)
  • PoA (Pruvo-de-Agado) - PoW + PoS
  • PoI (Pruvo-de-Gravaj)

Fidindeco kaj deplojmodeloj de blokĉenoj

Publika blokĉeno

Daŭripovo publikajn aŭ alia nomo Senpermesa blokĉeno Ĉi tio estas atingita permesante al iu ajn konekti kaj vidi informojn aŭ eĉ konekti sian propran nodon, kaj fido estas konstruita sur PoW-konsento.

Privata blokĉeno

privataPrivata Permesita blokĉeno. En ĉi tiuj blokĉenoj, nur certa grupo de partoprenantoj (organizoj aŭ homoj) havas aliron al informoj. Tiaj blokĉenoj estas konstruitaj de organizoj kun la celo pliigi ĝeneralan profiton aŭ efikecon. Ilia fidindeco estas certigita de la komunaj celoj de la partoprenantoj kaj la PoS kaj BFT-konsentaj algoritmoj.

Blockchain-konsorcio

Estas KonsorcioPublika Permesita blokĉeno. Ĉi tiuj estas blokĉenoj al kiuj iu ajn povas konektiĝi por vidi, sed partoprenanto povas aldoni informojn aŭ konekti sian nodon nur kun la permeso de aliaj partoprenantoj. Tiaj blokĉenoj estas konstruitaj de organizoj por pliigi fidon flanke de klientoj aŭ konsumantoj de produktoj aŭ socio entute. Ĉi tie, fidindeco ankaŭ estas atingita per la ĉeesto de fido inter partoprenantoj kaj la samaj PoS kaj BFT-konsentaj algoritmoj.

Inteligentaj Kontraktoj

Blokĉenoj efektivigitaj post kiam Bitcoin, en unu grado aŭ alia, aldonis la kapablon efektivigi inteligentajn kontraktojn. Esence, inteligenta kontrakto estas transakcio en kiu programkodo estas metita por ekzekuto. Inteligentaj kontraktoj en la reto Ethereum estas ekzekutitaj en la EVM (Ethereum Virtual Machine). Por komenci ekzekuti inteligentan kontrakton, ĝi devas esti eksplicite lanĉita de alia transakcio, aŭ la antaŭkondiĉoj por ekzekuto devas esti plenumitaj. La rezultoj de la ekzekuto de la inteligenta kontrakto ankaŭ estos registritaj en la blokĉeno. Ricevi datumojn de ekster la blokĉeno estas ebla, sed ekstreme limigita.

Kia komerca logiko povas esti efektivigita per inteligenta kontrakto? Fakte, estas ne multe, ekzemple, kontroli kondiĉojn uzante datumojn de la blokĉeno, ŝanĝante la posedantojn de ciferecaj aktivoj depende de ĉi tiuj kondiĉoj, registrante datumojn en konstanta stokado ene de la blokĉeno. La logiko estas efektivigita en speciala altnivela lingvo Solideco.

Klasika ekzemplo de funkcieco, kiu estas efektivigita per inteligentaj kontraktoj, estas la emisio de ĵetonoj por ICO-oj. Ekzemple, mi efektivigis inteligentan kontrakton por elsendi modestan 500 AlexToken. De ligilo en Etherscan situas

fontkodo de la inteligenta kontrakto en la lingvo 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;
}

kaj la binara prezento kiel la reto vidas ĝin

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Pliaj detaloj pri inteligentaj kontraktoj troveblas en la artikolo: Kio estas inteligentaj kontraktoj en Ethereum.

konkludo

Ni listigis la teknologiojn sur kiuj modernaj blokĉenoj estas konstruitaj kaj kiel ili estas konektitaj unu al la alia. Nun ni formulu, kiuj problemoj povas esti solvitaj uzante blokĉenon, kaj kiuj solvoj estos, en la plej bona kazo, neefikaj. Do, uzi blokĉenon ne necesas se:

  • Transakcioj estas faritaj en fidinda medio;
  • La ĉeesto de komisiono de perantoj ne plimalbonigas la vivon de la partoprenantoj;
  • Partoprenantoj ne havas posedaĵon, kiu povas esti reprezentita kiel ciferecaj aktivoj;
  • Ne estas distribuo en ciferecaj aktivoj, t.e. la valoro estas posedata aŭ liverita de nur unu partoprenanto.

Kion la estonteco havas por blokĉeno? Nun ni povas nur spekuli pri eblaj manieroj por la disvolviĝo de blokĉenaj teknologioj:

  • Blockchain fariĝos la sama komuna datumbaza teknologio kiel, ekzemple, SQL aŭ NoSQL por solvi ĝian specifan gamon de problemoj;
  • Blockchain fariĝos disvastigita protokolo, kiel HTTP estas por Interreto;
  • Blockchain fariĝos la bazo por nova financa kaj politika sistemo sur la planedo!

En la sekva parto ni rigardos, kiaj blokĉenoj nuntempe ekzistas kaj kial ili estas uzataj en malsamaj industrioj.

Ĉi tio estas nur la komenco!

fonto: www.habr.com

Aldoni komenton