Jekk inħarsu lejn ix-xejriet tal-ftit snin preċedenti, smajna dwar blockchain il-ħin kollu, iżda mhux ħafna dwar l-ispeċifiċitajiet.
Aħna lkoll konxji li kripto-muniti bħal Bitcoin, Ethereum, Dogecoin, Matic, u oħrajn jiddependu fuq it-teknoloġija blockchain. Blockchain mexxa l-avvenimenti sinifikanti li rrivoluzzjonaw bosta industriji fl-2021 u wittew it-triq għal kisbiet ġodda.
Blockchain huwa mezz ta 'ħażna ta' data b'mod li huwa diffiċli jew impossibbli li teditja, hack, jew tiswad. Huwa reġistru diġitali ta 'tranżazzjonijiet li huma duplikati u mifruxa fuq in-netwerk kollu ta' sistemi tal-kompjuter tal-blockchain.
Hija t-teknoloġija tal-bażi tad-data innovattiva li tħaddem prattikament il-kripto-muniti kollha. Il-Blockchain jagħmilha oerhört diffiċli li tħassar jew iqarraq is-sistema billi tifrex kopji identiċi ta 'database fuq netwerk kollu.
Filwaqt li Bitcoin issa huwa l-aktar użu prominenti għall-blockchain, it-teknoloġija tista 'sservi varjetà wiesgħa ħafna ta' applikazzjonijiet.
Il-kripto-muniti u l-blockchains kienu dejjem aktar popolari f'dawn l-aħħar snin, u din it-tendenza hija mistennija li tkompli.
Aħna ser nagħmlu blockchain sempliċi b'JavaScript f'dan it-tutorja. Se tagħtik fehim bażiku ta 'kif taħdem blockchain.
Ejja nsejħulha MelodyCoin u nidħlu dritt fl-azzjoni!
Ħolqien A Blokk
Biex tibda, aħna ser noħolqu fajl JavaScript ġdid li fih inpoġġu l-kodiċi tagħna kollu.
Ejja nsejħulha main.js u nibdew b'deskrizzjoni ta' kif għandhom jidhru blockchain u blokki.
Oħloq klassi Blokk u agħtiha funzjoni Object() { [kodiċi nattiv] } biex tibda.
Trid tagħti data, u l-hash tal-blokk preċedenti meta toħloq blokk ġdid:
Hawn huma d-definizzjonijiet għal kull proprjetà:
- Il-timestamp jindika meta sar il-blokk. Tista' tuża kwalunkwe format li tagħżel (f'dan il-każ, timestamp UNIX).
- Kwalunkwe forma ta' dejta li tixtieq tikkonnettja ma' din il-blokka tista' tiġi inkluża fil-parametru tad-dejta. Jekk tixtieq toħloq munita kriptografika, tista 'żżomm dejta tat-tranżazzjoni bħal min jibgħat/riċevitur u l-ammont ta' flus imċaqlaq hawn.
- Il- previousHash hija string li żżomm il-hash tal-blokk preċedenti. Dan huwa dak li se jiġġenera l-katina ta 'blokki, li se tkun kritika biex tipprovdi l-integrità tal-blockchain tagħna aktar tard.
Ħolqien ta 'Hashes
Kull blokka torbot mal-blokk preċedenti (għalhekk il-proprjetà previousHash). Jiġifieri, kull blokka teħtieġ hash. A hash huwa simili għal marki tas-swaba. Huwa distint għal kull blokk.
Hash ta 'blokk jista' jiġi kkalkulat billi jgħaddi l-kontenut kollu tiegħu minn funzjoni hash.
Allura, ejja nibdew billi timplimenta funzjoni li tikkalkula l-hash tal-blokk kurrenti.
Allura, taħt il-klassi Blokk, aħna niddefinixxu l-funzjoni calculateHash:
Madankollu, il-hash SHA256 mhuwiex appoġġjat minn JavaScript u għandu jinkiseb minn librerija esterna.
Crypto-js huwa pakkett meraviljuż li jinkludi implimentazzjonijiet siguri ta 'diversi algoritmi tal-hash.
Imbagħad nistgħu nimportawh fil-kodiċi main.js tagħna.
Issa li għandna l-funzjoni calculateHash() tagħna, ejja nużawha fil-funzjoni tal-Blokk tagħna:
Wara li niddeskrivew kif tidher Blokk, nistgħu niddefinixxu kif għandha tidher Blockchain. Mela ejja noħolqu klassi ġdida.
F'dan ix-xenarju, il-blockchain huwa oġġett sempliċi ħafna li għandu katina ta 'proprjetà. Din hija firxa li żżomm il-blokki kollha fuq il-katina.
Qabel ma nkunu nistgħu nżidu l-blokki, l-ewwel irridu noħolqu dak li hu magħruf bħala "blokk tal-ġenesi." Din hija l-ewwel blokka fil-katina, u hija unika peress li ma tistax tipponta lejn blokka preċedenti (huwa l-ewwel!).
Allura, biex nibni l-blokka tal-ġenesi, ser inżid funzjoni mal-klassi tagħna bl-isem createGenesisBlock (). Lura fil-funzjoni Object() { [native code] } tal-klassi Blockchain tagħna.
Issa nistgħu ninkludu l-blokka tal-ġenesi kull meta nibnu istanza ġdida ta’ Blockchain:
Metodi Blockchain
Issa, ejja nżidu metodi mal-klassi tagħna Blockchain li se jippermettulna nagħmlu affarijiet bħal żid blokki ġodda u nġibu l-aktar blokk reċenti.
Il-funzjoni getLatestBlock hija l-aktar bażika. Sempliċement jirritorna l-membru finali tal-firxa tal-katina:
It-teknika addBlock hija ftit aktar involuta.
Qabel ma nkunu nistgħu nżidu blokk ġdid mal-katina tagħna, l-ewwel irridu nissettjaw b'mod xieraq il-field Hash preċedenti ta 'dak il-blokk.
Għandu jkun issettjat għall-hash tal-blokka miżjuda l-aktar reċentement fil-katina tagħna. Għandna bżonn ukoll nikkalkulaw il-hash tal-blokk il-ġdid:
Ittestjar
Ejja naraw kif ħareġ il-MelodyCoin tagħna.
Oħloq eżempju ta 'blockchain biex twettaq dan. Ejja nżidu ftit blokki oħra:
Għamilna żewġ blokki ġodda hemmhekk. Ejja nagħtu ħarsa lejn kif tidher il-blockchain tagħna bħalissa.
MelodyCoin se jiġi stringified u fformattjat b'erba' spazji:
Ivverifika l-Integrità tal-Blockchain
Blockchains huma meraviljużi għaliex ladarba blokka tkun ġiet miżjuda, ma tistax tiġi modifikata mingħajr ma jiġi invalidat il-bqija tal-katina.
Madankollu, m'hemm l-ebda metodu għalija biex niċċekkja l-integrità tal-blockchain tagħna b'din l-implimentazzjoni.
Ejja nintroduċu funzjoni isChainValid fil-blockchain tagħna. Jekk il-katina hija leġittima, se terġa 'lura vera; inkella, se jirritorna falza:
Ittestjar tal-Integrità
Issa nistgħu npoġġu l-integrità tal-blockchain tagħna għat-test. Jekk inwettquha issa, tikkonferma li l-katina tagħna hija ġenwina.
Ejja issa nippruvaw inbagħbsu l-blockchain tagħna. Ejja nbiddlu l-blokk 2 u nikteb fuqu l-kontenut tiegħu (ejja nassumu li ttrasferijna 100 munita minflok erbgħa).
Meta nwettqu dan, nistgħu naraw li s-softwer jirrikonoxxi l-isforz tagħna biex inbagħbsu l-katina.
Madankollu, tista’ temmen li hemm metodu ieħor biex nidħol f’dan. Bdilt il-kontenut fil-blokk iżda ma kkalkolax mill-ġdid il-hash. Allura tista 'tipprova tkun għaqlija u tikkalkula mill-ġdid il-hash ta' dak l-istess blokk.
Dak hu kollu li kien hemm fis-setup ċkejkna tagħna tal-blockchain! Dan jippermettilna nżidu blokki ġodda u niskopru t-tbagħbis tad-dejta fi ħdan il-katina.
Hemm żewġ kwistjonijiet mal-blockchain żgħir tagħna li rridu nindirizzaw:
- Kompjuters moderni huma estremament veloċi u jistgħu jżidu eluf ta 'blokki mal-katina tagħna f'sekondi. Aħna ovvjament ma rridu lil ħadd jispammja l-blockchain tagħna.
- Il-blockchain tagħna għadu vulnerabbli għat-tbagħbis. Tista 'taġġorna l-kontenut ta' blokka u mbagħad sempliċement tikkalkula mill-ġdid il-hashes (u l-hashes preċedenti) għall-blokki kollha li ġejjin. Anke jekk tħawwad magħha, tispiċċa b'katina leġittima.
Biex jindirizzaw dan it-tħassib, blockchains jużaw teknika magħrufa bħala "prova ta 'xogħol." Trid turi li użajt ammont sinifikanti ta' riżorsi komputazzjonali biex toħloq blokka bl-użu ta' dan l-approċċ. Dan jissejjaħ ukoll minjieri.
Il-prova tax-xogħol teħtieġ li hash ta 'blokk jibda b'ammont speċifiku ta' żerijiet. Imma kif tista' tkun taf jekk il-hash tiegħek jaqbilx ma' din ir-regola?
Il-kontenut ta 'blokk jiddetermina l-hash tagħha. Allura aħna dejjem niksbu l-istess hash, sakemm ma nimmodifikawx il-kontenut.
Kull blokka għandu jkollha valur nonce miżjud magħha bħala soluzzjoni. Din hija essenzjalment xi dejta każwali li nistgħu naġġornaw sakemm il-hash tal-blokk tagħna jibda b'żerijiet biżżejjed. Minħabba li ma tistax tbiddel l-output ta 'funzjoni hash, għandek tittestja ħafna kombinazzjonijiet differenti u tittama għall-aħjar.
Introduċi l-Minjieri għal The Blockchain
Nibdew billi ninkludu nonce fil-klassi Blokk tagħna. In-nonce huwa l-valur uniku fi ħdan il-blokk tagħna li nistgħu nimmodifikaw biex ikollu impatt fuq il-hash tal-blokk.
Aħna ma nistgħux nibdlu l-timestamp jew id-data.
Sussegwentement, ejja nikteb funzjoni mineBlock() li se tagħmel il-minjieri attwali ta 'blokk. Din il-funzjoni se tintbagħat id-diffikultà meħtieġa bħala parametru u se tkompli tesegwixxi sakemm il-hash tal-blokk tagħna jibda b'żerijiet biżżejjed.
Għamilt biss linja filwaqt bażiku li se taħdem sakemm il-hash tagħna jibda b'żerijiet biżżejjed. Aħna nużaw id-diffikultà biex niddeterminaw kemm żerijiet huma meħtieġa. B'diffikultà ta '5, il-hash tagħna għandu jibda b'5 żerijiet.
Meta l-hash tagħna ma jkunx fih biżżejjed żerijiet, ngħollu n-nonce b'wieħed u nikkalkulaw mill-ġdid il-hash. U jekk insibu hash li jikkorrispondi għad-diffikultà, aħna logh mal-console.
Hemm ħaġa oħra li rridu nagħmlu. Aħna ma nqisux il-varjabbli nonce fil-metodu calculateHash tagħna, għalhekk hawnhekk qiegħed:
Klassi Blockchain
Ejja npoġġu dan l-approċċ il-ġdid għat-test fil-klassi tal-blockchain tagħna u naraw kif sejjer.
Biex tibda, ser niddefinixxi d-diffikultà tal-blockchain tagħna fil-funzjoni Object(). Aħna niddefinixxuha hawn peress li nistgħu nużawha x'imkien aktar tard.
Il-funzjoni addBlock imbagħad trid tiġi modifikata b'tali mod li tmina l-blokk qabel ma żżidha fil-katina tagħna.
Uża l-Blockchain
Issa, ejja npoġġu l-blockchain il-ġdid tagħna għall-użu mal-algoritmu tal-prova tax-xogħol. Hawnhekk, żid koppja console.log dikjarazzjonijiet.
Meta nwettqu dan il-kodiċi, nistgħu nosservaw li l-proċess tal-minjieri m'għadux partikolarment mgħaġġel.
Huwa jieħu ftit taż-żmien biex l-algoritmu jiġġenera blokki b'hashes li jibdew bi tliet żerijiet (kif konfigurat minn diffikultà).
Allura dak kien it-tmiem tas-setup bażiku tal-blockchain tagħna.
Nistgħu nirregolaw kemm malajr jiżdiedu blokki ġodda mal-blockchain tagħna grazzi għall-mekkaniżmu tal-prova tax-xogħol.
Hija l-aktar karatteristika sinifikanti tas-sigurtà fuq blockchains. U issa li tifhem kif taħdem, kompli oħloq tiegħek!
Ħalli Irrispondi