L-istorja kollha tal-umanità hija proċess kontinwu ta 'jeħles mill-ktajjen u l-ħolqien ta' oħrajn ġodda, saħansitra aktar b'saħħithom. (Awtur anonimu)
L-analiżi ta 'bosta proġetti blockchain (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, eċċ.), Nifhem li mil-lat tekniku, huma kollha mibnija fuq l-istess prinċipji. Blockchains huma reminixxenti ta 'djar, li, minkejja l-varjetà kollha ta' disinni, dekorazzjoni u skopijiet, għandhom pedament, ħitan, saqaf, twieqi, bibien li huma konnessi ma 'xulxin b'ċerti modi. U jekk tifhem il-prinċipji bażiċi tad-disinn tal-bini u taf il-proprjetajiet tal-materjali użati, allura tista 'tiddetermina l-iskop maħsub ta' dar partikolari. Bħalissa, qamet sitwazzjoni ma 'blockchain li kulħadd sema' dwarha, iżda ftit nies jifhmu l-arkitettura u l-prinċipji tal-operat. Għalhekk, hemm nuqqas ta 'ftehim dwar għaliex u kif jagħmel sens li tuża teknoloġiji blockchain.
F'dan l-artikolu se nanalizzaw il-proprjetajiet u l-prinċipji komuni għall-blockchains kollha. Sussegwentement, ejja nħarsu lejn il-problemi li jistgħu jiġu solvuti bl-użu tal-blockchain u biex insaħħu l-materjal, ejja nibnu blockchain żgħir iżda reali fuq is-sit virtwali tagħna!
Allura, ejja niftakru liema problemi blockchain inizjalment solvuti.
Jiena ċert li ħafna jgħidu dwar database distribwita, deċentralizzata, pubblika u immutabbli. Imma għaliex kien meħtieġ dan kollu?
Nippreferi nibda nistudja kwalunkwe teknoloġija billi naqra l-istandards, peress li l-artikoli u l-kotba kollha dwar is-suġġett taħt studju huma bbażati fuqhom. Iżda bħalissa m'hemm l-ebda standards ta 'blockchain; ISO ħoloq biss kumitati għall-iżvilupp tagħhom. Bħalissa, kull proġett pubbliku ta 'blockchain għandu d-dokument White Paper tiegħu, li essenzjalment huwa speċifikazzjoni teknika. L-ewwel proġett blockchain magħruf pubblikament huwa n-netwerk Bitcoin. Mur fil-websajt uffiċjali tan-netwerk u ħarsa fejn kollox beda.
Isfida Blockchain
Allura, il-kompitu li blockchain solvuti fin-netwerk tal-pijunieri Bitcoin huwa li jwettaq trasferiment fdat ta 'sjieda ta' assi diġitali (assi) f'ambjent mhux fdat mingħajr intermedjarji. Pereżempju, fin-netwerk Bitcoin, assi diġitali huma muniti diġitali bitcoin. U s-soluzzjonijiet tekniċi kollha ta 'Bitcoin u blockchains oħra jinżlu biex isolvu din il-problema.
Problemi li blockchain issolvi
Ejja ngħidu li ċerta organizzazzjoni finanzjarja tgħid li bniet netwerk madwar id-dinja li bl-għajnuna tiegħu huwa possibbli li tittrasferixxi flus lil kwalunkwe persuna. Se temmenha? Jekk din l-organizzazzjoni hija Visa jew MasterCard, x'aktarx li inti temmenha, imma jekk, relattivament, AnonymousWorldMoney, inti probabilment mhux se. Għaliex? Imma għax nafu tajjeb ħafna kif is-sistemi distribwiti jsiru minn kumpaniji privati, għal liema skopijiet, u dan għal xiex jista’ jwassal. Ejja nagħtu ħarsa aktar mill-qrib lejn il-problemi ta 'sistemi bħal dawn u kif jistgħu jiġu solvuti bl-użu ta' teknoloġiji blockchain.
Ejja ngħidu li fil-kondizzjonali AnonymousWorldMoney hemm servers b'databases, u huwa tajjeb jekk ikun hemm bosta minnhom f'ċentri tad-dejta differenti. Meta l-mittent jittrasferixxi flus, tiġi rreġistrata tranżazzjoni, li tiġi replikata għas-servers kollha, u l-flus jaslu lir-riċevitur.
F'dinja ideali, din l-iskema taħdem tajjeb, iżda f'tagħna jinqalgħu l-problemi li ġejjin:
Il-problema tal-identifikazzjoni tal-parteċipanti min-naħa waħda u l-ħtieġa għall-anonimità tat-tranżazzjonijiet min-naħa l-oħra. Dawk. għandek bżonn tittrasferixxi flus lil riċevitur speċifiku u b'tali mod li ħadd ma jkun jaf dwar din it-tranżazzjoni ħlief il-parteċipanti fit-tranżazzjoni. Il-banek għandhom numri tal-kontijiet u kards bankarji marbuta ma’ individwu jew entità legali speċifika, u s-segretezza bankarja tipproteġi l-informazzjoni dwar it-tranżazzjonijiet. U min jiggarantixxi li l-AnonymousWorldMoney kundizzjonali ma jużax data personali u informazzjoni dwar it-tranżazzjonijiet għall-iskopijiet tiegħu stess?
Kif tiżgura li r-riċevitur irċieva eżattament l-ammont li ġie trasferit lilu? Relattivament, il-mittent ittrasferixxa $100, u r-riċevitur irċieva $10. Il-mittent jiġi fl-uffiċċju AnonymousWorldMoney bl-irċevuta tiegħu, u l-iskrivan juri l-verżjoni tiegħu, fejn hemm miktub li l-mittent ittrasferixxa biss $10.
Il-problema ta 'ambjent mhux fdat, per eżempju, scam imsejħa double-spending. Parteċipant bla skrupli jista' jonfoq il-bilanċ tiegħu diversi drabi sakemm il-ħlas jiġi replikat għas-servers kollha. Teorema tal-PAK, ovvjament, ħadd ma kkanċellat, u l-ftehim fl-aħħar mill-aħħar jintlaħaq, iżda xi ħadd mhux se jirċievi flus għal servizzi jew oġġetti pprovduti. Għalhekk, jekk ma jkunx hemm fiduċja sħiħa fl-organizzazzjoni tal-ħlas jew parteċipanti fit-tranżazzjonijiet, allura huwa meħtieġ li jinbena netwerk ibbażat mhux fuq il-fiduċja, iżda fuq il-kriptografija.
Kundizzjonali AnonymousWorldMoney għandu numru finit ta' servers li jistgħu ma jkunux disponibbli b'mod mhux intenzjonat jew minħabba intenzjoni malizzjuża.
AnonymousWorldMoney se tieħu l-kummissjoni tanġibbli tagħha stess.
Possibbiltà ta 'kontroll. Matul it-tħaddim ta 'Bitcoin, irriżulta li n-nies iridu mhux biss jittrasferixxu muniti lil xulxin, iżda wkoll biex jiċċekkjaw diversi kundizzjonijiet għat-tranżazzjoni, xenarji ta' xogħol tal-programm, awtomatikament iwettqu azzjonijiet skont il-kundizzjonijiet, eċċ.
Kif blockchain issolvi dawn il-problemi
L-identifikazzjoni tal-parteċipanti titwettaq bl-użu ta 'par ċwievet: privati u pubbliċi, u l-algoritmu tal-firma diġitali jidentifika b'mod uniku lill-mittent u r-riċevitur, u jħalli l-identitajiet tagħhom anonimi.
It-tranżazzjonijiet jinġabru fi blokki, il-hash tal-blokk jiġi kkalkulat u miktub fil-blokk li jmiss. Din is-sekwenza ta’ reġistrazzjoni ta’ hashes fi blokki tagħti isimha lit-teknoloġija blockchain, u tagħmilha wkoll impossibbli li jinbidel/tħassar b’mod mhux osservat blokki jew tranżazzjonijiet individwali minn blokki. Għalhekk, jekk tranżazzjoni hija inkluża fil-blockchain, tista 'tkun ċert li d-dejta tagħha tibqa' mhux mibdula.
Il-frodi ta' nfiq doppju tiġi evitata billi jintlaħaq kunsens tan-netwerk dwar liema data għandha titqies bħala valida u liema għandha tintrema. Fin-netwerk Bitcoin, il-kunsens jinkiseb permezz ta 'prova ta' xogħol (PoW).
L-affidabbiltà tan-netwerk tinkiseb mill-fatt li l-blockchain hija pubblika, fejn kull parteċipant jista 'jmexxi n-nodu tiegħu stess, jirċievi kopja sħiħa tal-blockchain u, barra minn hekk, jibda b'mod indipendenti jiċċekkja t-tranżazzjonijiet għall-korrettezza. Għandu jiġi nnutat li blockchains moderni jagħmluha possibbli li jinbnew mhux biss blockchains pubbliċi (miftuħa) iżda wkoll privati (magħluq), kif ukoll l-użu ta 'skemi magħquda.
Il-blockchain mhux se jeħles kompletament mill-kummissjonijiet, għax... trid tħallas lin-nies li jappoġġjaw in-netwerk, iżda fil-blockchain il-ħtieġa għal kummissjoni hija ppruvata b'mod tant konvinċenti li m'hemm l-ebda dubju dwar il-ħtieġa tagħha.
Il-blockchains moderni għandhom il-kapaċità li jimplimentaw loġika tan-negozju, li fil-blockchain tissejjaħ Smart Contracts. Il-loġika tal-kuntratti intelliġenti hija implimentata f'diversi lingwi ta 'livell għoli.
Sussegwentement, aħna se nikkunsidraw dawn is-soluzzjonijiet f'aktar dettall.
Arkitettura blockchain
Komponenti Blockchain
Kull parteċipant jista 'jniedi n-nodu tiegħu stess b'kopja sħiħa tal-blockchain (node sħiħ). Nodi sħaħ li jistgħu jirreġistraw transazzjonijiet fuq il-blockchain jissejħu nodi ta' kunsens (xhud) jew minaturi (minatur). Issejħu nodi sħaħ li jivverifikaw biss il-korrettezza tat-tranżazzjonijiet nodi tal-verifika (verifika). Klijenti ħfief (klijenti ħfief) ma jaħżnux kopji sħaħ tal-blockchain, iżda jinteraġixxu man-netwerk billi jużaw nodi sħaħ.
Ħafna utenti jużaw klijenti ħfief jew kartieri tal-web biex jagħmlu tranżazzjonijiet. In-nodi kollha huma konnessi ma 'xulxin. B'dan is-sett ta 'elementi, l-arkitettura tan-netwerk issir aktar stabbli:
Ċiklu tal-ħajja tat-tranżazzjoni
Ejja nħarsu lejn iċ-ċiklu tal-ħajja tat-tranżazzjoni u nkissruh biċċa biċċa:
Teknoloġiji Blockchain
Ejjew noqogħdu f'aktar dettall fuq soluzzjonijiet tekniċi u l-konnessjonijiet tagħhom ma 'xulxin.
Identifikazzjoni
Kull tranżazzjoni blockchain trid tkun iffirmata b'mod diġitali. Għalhekk, biex tlesti tranżazzjoni, kull parteċipant għandu jkollu par ta 'ċavetta: privat / pubbliku. Xi drabi par ċwievet jissejjaħ kartiera, għax iċ-ċwievet huma assoċjati unikament mal-indirizz diġitali uniku u l-bilanċ tal-parteċipant. Fir-realtà, ċwievet u indirizzi huma biss strings ta 'numri f'sistemi ta' numri differenti. Eżempji ta' ċwievet u indirizzi tal-kartiera:
Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V
Biex tinħoloq firma diġitali fi blockchains, jintuża algoritmu bbażat fuq kurvi ellittiċi: Elliptic Curve Digital Signature Algorithm (ECDSA). Biex taħdem, iċ-ċavetta privata (numru ta '256 bit) ġeneralment tittieħed b'mod każwali. In-numru ta 'għażliet ewlenin huwa 2 għall-qawwa ta' 256, għalhekk nistgħu nitkellmu dwar l-impossibbiltà prattika li tqabbel il-valuri taċ-ċwievet privati.
Sussegwentement, iċ-ċavetta pubblika tinkiseb minn dik privata billi timmultiplika l-valur tagħha bil-koordinati ta 'punt li jinsab fuq il-kurva ellittika, li jirriżulta fil-koordinati ta' punt ġdid fuq l-istess kurva. Din l-azzjoni tiżgura li tikseb par ta 'ċavetta adattat għall-iffirmar diġitali tat-tranżazzjonijiet. Fl-aħħarnett, l-indirizz tal-kartiera huwa derivat b'mod uniku miċ-ċavetta pubblika.
Iċ-ċavetta privata għandha tkun strettament kunfidenzjali u miżmuma sigura. Iċ-ċavetta pubblika hija magħrufa minn kulħadd. Jekk iċ-ċavetta privata tintilef, l-aċċess għall-assi (muniti) ma jistax jiġi rrestawrat u l-flus jintilfu għal dejjem. Għalhekk, il-kompitu li taħżen b'mod sigur ċwievet privati huwa estremament rilevanti, għaliex Dan mhux bank fejn dejjem tista’ tiġi bil-passaport tiegħek u tirrestawra l-kont tiegħek. Hemm industrija sħiħa għall-produzzjoni tal-hekk imsejħa kartieri kripto kesħin, simili għal flash drives:
jew tista 'tuża metodi aktar affidabbli, pereżempju, ittimbrar il-valur taċ-ċavetta privata fuq tokens:
Tranżazzjonijiet
Aktar dettalji dwar l-istruttura tat-tranżazzjoni jistgħu jinstabu fl-artiklu Bitcoin fil-qosor - Transazzjoni. Huwa importanti għalina li nifhmu li kull tranżazzjoni għandha mill-inqas id-dejta li ġejja:
From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цифровой адрес отправителя
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цифровой адрес получателя
Value: 0.0001 - сумма транзакции
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш транзакции
Sussegwentement, it-tranżazzjoni tiġi ffirmata b'ċavetta privata u tintbagħat (ara d-dettalji dwar l-operat tal-protokoll Bitcoin fil-qosor-Protokoll) għan-nodi kollha fil-blockchain li jiċċekkjaw it-tranżazzjonijiet għall-validità. L-algoritmu tal-verifika tat-tranżazzjoni mhuwiex trivjali u jinkludi żewġ tużżani passi.
Blokki tat-tranżazzjonijiet
Wara li tiċċekkja l-validità tat-tranżazzjonijiet, in-nodi jiffurmaw blokki minnhom. Minbarra t-tranżazzjonijiet, il-hash tal-blokk preċedenti u numru (Nonce counter) huma miktuba fil-blokk, u l-hash tal-blokk kurrenti huwa kkalkulat bl-użu tal-algoritmu SHA-256. Il-hash irid ikollu kundizzjonijiet ta' kumplessità stabbiliti. Pereżempju, fin-netwerk Bitcoin, id-diffikultà tal-hash tinbidel awtomatikament kull ġimgħatejn skont il-qawwa tan-netwerk sabiex blokka tiġi ġġenerata bejn wieħed u ieħor darba kull 2 minuti. Il-kumplessità hija ddeterminata mill-kundizzjoni li ġejja: il-hash misjub għandu jkun inqas minn numru predeterminat. Jekk din il-kundizzjoni ma tiġix sodisfatta, allura 10 jiġi miżjud man-Nonce, u x-xogħol tal-kalkolu tal-hash jiġi ripetut. Biex tagħżel hash, jintuża l-qasam Nonce, għaliex Din hija l-unika dejta fil-blokk li tista’ tinbidel; il-bqija trid tibqa’ mhux mibdula. Hash validu għandu jkollu ċertu numru ta 'żeri ewlenin, bħal wieħed mill-hashes reali:
Is-sejba b'suċċess ta 'hash hija prova tax-xogħol magħmul (Prova ta' Xogħol, PoW) għan-netwerks Bitcoin jew Ethereum. Il-proċess tas-sejba tal-hashes jissejjaħ minjieri, simili għall-minjieri tad-deheb. L-isem jiddefinixxi b'mod pjuttost preċiż l-essenza tal-proċess, għaliex hemm tfittxija sempliċi ta 'għażliet, u jekk xi ħadd isib hash adattat, allura dan huwa verament xortih. Qisu ssib nugget tad-deheb reali f’tunnellati ta’ skart ta’ blat. Il-premju tal-blokk issa huwa 12.5 BTC u jekk timmultiplikaha bir-rata Bitcoin attwali ta '$ 3900, ikollok aktar minn kilogramma ta' deheb pur. Hemm xi ħaġa għalxiex tiġġieled!
Wara li ssib b'suċċess hash, il-blokk u l-hash misjub innifsu jinkitbu fil-blockchain bħala l-blokk li jmiss. Aktar dettalji dwar l-istruttura tal-blokki jistgħu jinstabu fl-artiklu Bitcoin fil-qosor-Blockchain, u hawn taħt hemm dijagramma simplifikata:
Il-blockchain jibda bi blokka li għad m'għandhiex il-hash tal-blokk preċedenti. Hemm blokka waħda biss bħal din fil-blockchain u għandha l-isem tagħha stess Genesis block. Il-blokki li jifdal għandhom l-istess struttura u jvarjaw biss fin-numru ta 'tranżazzjonijiet. Tranżazzjonijiet reali u blokki li qed jinħolqu bħalissa f'Bitcoin jew Ethereum jistgħu jitqiesu fihom Blokk Explorer.
Id-daqs tal-blokki f'Bitcoin huwa limitat għal 1MB u b'ammont minimu ta 'informazzjoni fi transazzjoni ta' madwar 200 bytes, in-numru massimu ta 'tranżazzjonijiet fi blokka jista' jkun ta 'madwar 6000. Minn hawn, bil-mod, isegwi l-prestazzjoni ta 'Bitcoin, li kulħadd jidħaq biha: blokka hija ġġenerata madwar darba kull 10 minuti * 60 sekondi = 600 sekondi, li tagħti prestazzjoni formali ta' madwar 10 TPS. Għalkemm fil-fatt, din mhix produttività, iżda algoritmu ta 'xogħol implimentat deliberatament. Fl-Ethereum, għall-kompetizzjoni, huma sempliċement għamlu l-ħin tal-ġenerazzjoni tal-blokk 15-il sekonda. u l-produttività telgħet formalment. Għalhekk, fi blockchains li jużaw PoW bħala kunsens, ma jagħmilx sens li titqabbel il-prestazzjoni għal kollox, għaliex jiddependi direttament fuq il-kumplessità tal-kalkolu tal-cache, li jista 'jiġi assenjat għal kwalunkwe valur.
Frieket
X'jiġri jekk, pereżempju, diversi nodi sabu hashes li jissodisfaw il-kundizzjonijiet ta 'kumplessità, iżda huma differenti fil-valur (fi kliem ieħor, waslu għal kunsensi differenti) u kitbu blokki għall-blockchain? Ejja naraw kif blockchain tipproteġi kontra din is-sitwazzjoni. F'dan il-każ, isseħħ l-hekk imsejħa furketta, u l-blockchain għandha żewġ verżjonijiet tal-katina:
X'jiġri wara? Sussegwentement, parti min-netwerk tibda taħdem fuq blokk N+2 minn katina waħda, u parti minn oħra:
Waħda minn dawn il-blokki tinstab qabel u tintbagħat lill-blockchain, u mbagħad, skont ir-regoli, il-blockchain se jkollha taqleb għal katina itwal u tikkanċella t-tranżazzjonijiet kollha mill-blokk alternattiv:
Fl-istess ħin, tista 'tqum sitwazzjoni meta t-tranżazzjoni ta' parteċipant kienet biss f'wieħed mill-blokki tal-furketta, li ġiet ikkanċellata. Għalhekk, biex tkun ċert li t-tranżazzjoni mixtieqa tiġi rreġistrata fil-blockchain, hemm rakkomandazzjoni ġenerali - qabel ma tafda t-tranżazzjoni, għandek tistenna sakemm il-ftit blokki li jmiss jiġu miżjuda mal-blockchain. Rakkomandazzjonijiet għal kemm blokk li wieħed jistenna għal blockchains differenti jvarjaw. Pereżempju, għan-netwerk Bitcoin il-minimu huwa 2 blokki, il-massimu huwa 6.
L-istess stampa bi frieket tal-blokki se tiġi osservata matul l-hekk imsejjaħ attakk ta '51% - dan huwa meta grupp ta' minaturi jipprova jkabbar katina ta 'blokki alternattiva, li jfittxu li jikkanċellaw il-katina bit-tranżazzjonijiet frawdolenti tagħhom. Għalkemm fil-preżent, minflok frodi, huwa aktar profittabbli li tonfoq il-qawwa tiegħek fuq it-tħaffir onest.
Kunsens
Biex tirreġistra blokka fuq il-blockchain, in-netwerk irid jilħaq kunsens. Ejja niftakru l-kompitu li jinkiseb kunsens fin-netwerks tal-komunikazzjoni tal-kompjuter. Il-problema hija fformulata bħala l-kompitu tal-ġenerali Biżantini BFT (Tolleranza tal-ħsara Biżantina). Billi tħalli barra d-deskrizzjoni pittoreska tal-problemi tal-armata Biżantina, il-problema tista 'tiġi fformulata kif ġej: kif in-nodi tan-netwerk jistgħu jaslu għal riżultat komuni jekk xi nodi tan-netwerk jistgħu jfixkluhom deliberatament. Algoritmi eżistenti għas-soluzzjoni tal-problema tal-BFT juru li n-netwerk jista' jaħdem b'mod korrett jekk ikun hemm inqas minn 1/3 frodisti. Għaliex ma ġiex applikat il-kunsens BFT għan-netwerk Bitcoin? Għaliex kien meħtieġ li tuża PoW? Hemm diversi raġunijiet:
BFT jaħdem tajjeb ma 'sett żgħir fiss ta' nodi, iżda fi blockchain pubbliku in-numru ta 'nodi huwa imprevedibbli u, barra minn hekk, in-nodi jistgħu jinxtegħlu u jintfew b'mod każwali.
Huwa meħtieġ li n-nies jiġu mmotivati biex iniedu nodi blockchain. Biex tagħmel dan, in-nies iridu jiġu ppremjati. F'BFT formalment m'hemm xejn li jirċievi premju għalih, iżda dak li hu l-premju għal PoW huwa ċar għal kulħadd fuq livell intuwittiv: għall-elettriku kkunsmat mill-proċessur fil-proċess li jsib il-blokk hash.
Minbarra PoW, hemm bosta kunsensi oħra li jintużaw fil-blockchains moderni, pereżempju:
PoS (Proof-of-Stake) - fuq il-blockchain Hyperledger
DPoS (Delegated Proof-of-Stake) - fuq il-blockchain BitShares
Ejja noqogħdu ftit fuq il-kunsens PoS, għax... Huwa PoS u l-varjetajiet tiegħu li huma l-aktar mifruxa fil-blockchains privati. Għaliex fil-privat? Min-naħa waħda, il-karatteristiċi ta 'PoS huma aħjar meta mqabbla ma' PoW, għaliex Biex jinkiseb kunsens, huma meħtieġa inqas riżorsi tal-kompjuters, li jfisser li l-veloċità tal-kitba tad-dejta fil-blockchain tiżdied. Iżda min-naħa l-oħra, PoS għandu aktar opportunitajiet għal frodi, għalhekk biex jinnewtralizza dan, il-parteċipanti kollha fil-blockchain għandhom ikunu magħrufa.
Il-kunsens PoS huwa bbażat fuq l-għażla ta 'node li jista' jikteb blokka bi tranżazzjonijiet għall-blockchain skont l-ammont ta 'fondi fil-kont, jew aħjar, mhux fil-kont, iżda fil-kollateral, i.e. Iktar ma jkollok fondi bħala kollateral, iktar ikun probabbli li n-netwerk jagħżel in-nodu tiegħek biex jikteb blokka. Id-depożitu mhux se jiġi rritornat jekk il-blokk ma jkunx validu. Dan jipprovdi protezzjoni kontra l-frodi. Hemm il-varjazzjonijiet li ġejjin tal-PoS:
Il-kunsens tal-PoS Delegat (DPoS) jaqsam il-parteċipanti f'"votanti" u "validaturi". Id-detenturi tal-muniti (parteċipanti li jivvotaw) jiddelegaw is-setgħa tagħhom li jivverifikaw u jirreġistraw tranżazzjonijiet fuq il-blockchain lil parteċipanti oħra. Għalhekk, il-validaturi jagħmlu x-xogħol kollu tal-komputazzjoni u jirċievu premju għalih, u l-preżenza tal-parteċipanti tal-votazzjoni tiggarantixxi l-onestà tal-validaturi, minħabba li jistgħu jinbidlu fi kwalunkwe ħin.
Il-kunsens LPoS (Leased Proof-of-Stake) jippermettilek tikri l-fondi tiegħek lil nodi oħra sabiex ikollhom ċans aħjar li jivvalidaw il-blokki. Dik. Tista 'tirċievi kummissjoni għat-tranżazzjonijiet mingħajr ma tipparteċipa fil-verifika attwali tat-tranżazzjoni u l-minjieri tal-blokk.
Hemm għadd ta 'kunsensi oħra li għadhom mhumiex użati ħafna, jien ser nilnihom hawn biss għall-informazzjoni, u ħarsa ġenerali lejn l-algoritmi ta' kunsens infushom tista 'tinstab, pereżempju, fl-artikolu: Algoritmi ta' Kunsens fil-Blockchain.
PoET (Prova tal-Ħin Għadda)
PoC (Prova tal-Kapaċità)
PoB (Prova tal-Ħruq)
PoWeight (Prova tal-Piż)
PoA (Prova tal-Attività) – PoW + PoS
PoI (Prova ta' l-Importanti)
Mudelli ta' affidabilità u skjerament ta' blockchains
Blockchain pubbliku
Sostenibbiltà Pubblika jew isem ieħor Blockchain bla permess Dan jinkiseb billi kulħadd jippermetti li jgħaqqad u jara l-informazzjoni jew saħansitra jgħaqqad in-nodu tiegħu stess, u l-fiduċja hija mibnija fuq il-kunsens PoW.
Blockchain privat
Privat jew Blockchain Privat Permess. F'dawn il-blockchains, ċertu grupp ta' parteċipanti biss (organizzazzjonijiet jew nies) għandhom aċċess għall-informazzjoni. Blockchains bħal dawn huma mibnija minn organizzazzjonijiet bil-għan li jżidu l-benefiċċju jew l-effiċjenza ġenerali. L-affidabbiltà tagħhom hija żgurata mill-għanijiet komuni tal-parteċipanti u l-algoritmi ta 'kunsens PoS u BFT.
Konsorzju Blockchain
Hemm Konsorzju jew Blockchain Pubbliku Permess. Dawn huma blockchains li kulħadd jista' jgħaqqad magħhom biex jara, iżda parteċipant jista 'jżid informazzjoni jew jgħaqqad in-node tiegħu biss bil-permess ta' parteċipanti oħra. Blockchains bħal dawn jinbnew minn organizzazzjonijiet sabiex tiżdied il-fiduċja min-naħa tal-klijenti jew tal-konsumaturi tal-prodotti jew tas-soċjetà kollha kemm hi. Hawnhekk, l-affidabbiltà tinkiseb ukoll bil-preżenza ta 'fiduċja bejn il-parteċipanti u l-istess algoritmi ta' kunsens PoS u BFT.
Kuntratti Intelliġenti
Blockchains implimentati wara Bitcoin, sa grad jew ieħor, żiedu l-abbiltà li jeżegwixxu kuntratti intelliġenti. Essenzjalment, kuntratt intelliġenti huwa tranżazzjoni li fiha l-kodiċi tal-programm jitqiegħed għall-eżekuzzjoni. Kuntratti intelliġenti fuq in-netwerk Ethereum huma esegwiti fl-EVM (Ethereum Virtual Machine). Biex tibda tesegwixxi kuntratt intelliġenti, għandu jiġi mniedi b'mod espliċitu minn tranżazzjoni oħra, jew il-prekundizzjonijiet għall-eżekuzzjoni għandhom jiġu sodisfatti. Ir-riżultati tal-eżekuzzjoni tal-kuntratt intelliġenti se jiġu rreġistrati wkoll fil-blockchain. Ir-riċeviment tad-dejta minn barra l-blockchain huwa possibbli, iżda estremament limitat.
Liema loġika tan-negozju tista' tiġi implimentata bl-użu ta' kuntratt intelliġenti? Fil-fatt, m'hemmx ħafna, pereżempju, verifika tal-kundizzjonijiet bl-użu ta 'dejta mill-blockchain, tibdil tas-sidien ta' assi diġitali skont dawn il-kundizzjonijiet, reġistrazzjoni tad-dejta f'ħażna permanenti fi ħdan il-blockchain. Il-loġika hija implimentata f'lingwa speċjali ta 'livell għoli Solidità.
Eżempju klassiku ta 'funzjonalità li hija implimentata bl-użu ta' kuntratti intelliġenti huwa l-ħruġ ta 'tokens għall-ICOs. Pereżempju, implimentajt kuntratt intelliġenti biex noħroġ AlexToken modest ta '500. Permezz link f'Etherscan huwa
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;
}
u r-rappreżentazzjoni binarja kif jaraha n-netwerk
Elenkajna t-teknoloġiji li fuqhom jinbnew blockchains moderni u kif huma konnessi ma 'xulxin. Issa ejja nifformulaw liema problemi jistgħu jiġu solvuti bl-użu ta 'blockchain, u liema soluzzjonijiet se jkunu, fl-aħjar, ineffettivi. Għalhekk, l-użu ta 'blockchain mhuwiex meħtieġ jekk:
It-tranżazzjonijiet jitwettqu f'ambjent ta' fiduċja;
Il-preżenza ta 'kummissjoni ta' intermedjarji ma taggravax il-ħajja tal-parteċipanti;
Il-parteċipanti m'għandhomx proprjetà li tista' tiġi rappreżentata bħala assi diġitali;
M'hemm l-ebda distribuzzjoni f'assi diġitali, i.e. il-valur huwa proprjetà jew ipprovdut minn parteċipant wieħed biss.
X'jagħmel il-futur għall-blockchain? Issa nistgħu biss nispekulaw dwar modi possibbli għall-iżvilupp tat-teknoloġiji blockchain:
Blockchain se ssir l-istess teknoloġija komuni tad-database bħal, pereżempju, SQL jew NoSQL biex issolvi l-firxa speċifika ta 'problemi tagħha;
Blockchain se jsir protokoll mifrux, bħal HTTP huwa għall-Internet;
Blockchain se ssir il-bażi għal sistema finanzjarja u politika ġdida fuq il-pjaneta!
Fil-parti li jmiss se nħarsu lejn liema blockchains jeżistu bħalissa u għaliex jintużaw f'industriji differenti.