Se ni rigardas la tendencojn de la antaŭaj jaroj, ni aŭdis pri blokoĉeno la tutan tempon, sed ne multe pri la specifaĵoj.
Ni ĉiuj konscias, ke kriptaj moneroj kiel Bitcoin, Ethereum, Dogecoin, Matic kaj aliaj dependas de blokĉena teknologio. Blockchain gvidis la signifajn eventojn, kiuj revoluciis multajn industriojn en 2021 kaj malfermis la vojon al novaj atingoj.
Blokoĉeno estas rimedo por konservi datumojn en maniero malfacile aŭ neeble redakti, haki aŭ trompi. Ĝi estas cifereca ĉeflibro de transakcioj, kiuj estas duobligitaj kaj disvastigitaj tra la tuta reto de komputilaj sistemoj de la blokĉeno.
Ĝi estas la pionira datumbaza teknologio, kiu funkciigas preskaŭ ĉiujn kriptajn monerojn. Blokoĉeno faras nekredeble malfacila haki aŭ trompi la sistemon disvastigante identajn kopiojn de datumbazo tra tuta reto.
Dum Bitcoin nun estas la plej elstara uzo por blokĉeno, la teknologio povas servi tre larĝan gamon da aplikoj.
Kriptaj moneroj kaj blokĉenoj estis ĉiam pli popularaj en la lastaj jaroj, kaj ĉi tiu tendenco estas atendita daŭri.
Ni faros simplan blokĉenon kun JavaScript en ĉi tiu lernilo. Ĝi provizos al vi bazan komprenon pri kiel funkcias blokĉeno.
Ni nomu ĝin MelodyCoin kaj tuj eniru la agon!
Kreante Blokon
Por komenci, ni kreos novan JavaScript-dosieron en kiu ni metos la tutan kodon.
Ni nomu ĝin main.js kaj komencu per priskribo de kiel devus aspekti blokĉeno kaj blokoj.
Kreu Block-klason kaj donu al ĝi funkcion Object() { [denaska kodo] } por komenci.
Vi devas doni daton, kaj la haŝon de la antaŭa bloko kiam vi kreas novan blokon:
Jen la difinoj por ĉiu posedaĵo:
- La tempomarko indikas kiam la bloko estis farita. Vi povas uzi kian ajn formaton vi elektas (en ĉi tiu kazo, UNIX-tempomarko).
- Ajna formo de datumoj, kiujn vi volas konekti al ĉi tiu bloko, povas esti inkluzivita en la datuma parametro. Se vi volas krei kriptan moneron, vi povas konservi transakciajn datumojn kiel la sendinto/ricevanto kaj la monsumo movita ĉi tie.
- La antaŭaHash estas ĉeno kiu tenas la hash de la antaŭa bloko. Jen kio generos la ĉenon de blokoj, kiu estos kritika por provizi la integrecon de nia blokĉeno poste.
Kreante Hashojn
Ĉiu bloko ligas al la antaŭa bloko (tiel la antaŭa Hash-posedaĵo). Tio estas, ĉiu bloko postulas haŝiŝon. Haŝiŝo similas al fingrospuro. Ĝi estas klara por ĉiu bloko.
La hash de bloko povas esti komputita pasante sian tutan enhavon tra hashfunkcio.
Do, ni komencu efektivigante funkcion kiu komputas la hash de la nuna bloko.
Do, sub la Block-klaso, ni difinas la calculateHash-funkcion:
Tamen, la SHA256 hash ne estas subtenata de JavaScript kaj devas esti akirita de ekstera biblioteko.
Crypto-js estas mirinda pako, kiu inkluzivas sekurajn realigojn de pluraj hash-algoritmoj.
Tiam ni povas importi ĝin en nian main.js-kodon.
Nun kiam ni havas nian funkcion calculateHash(), ni uzu ĝin en la funkcio de nia Bloko:
Post priskribi kiel Bloko aspektas, ni povas difini kiel Blockchain devus aspekti. Do ni kreu novan klason.
En ĉi tiu scenaro, la blokĉeno estas tre simpla objekto, kiu havas posedaĵĉenon. Ĉi tio estas tabelo tenanta ĉiujn blokojn sur la ĉeno.
Antaŭ ol ni povas aldoni blokojn, ni unue devas krei tion, kio estas konata kiel "genezbloko". Ĉi tiu estas la unua bloko en la ĉeno, kaj ĝi estas unika ĉar ĝi ne povas montri antaŭan blokon (ĝi estas la unua!).
Do, por konstrui la genezan blokon, mi aldonos funkcion al nia klaso nomita createGenesisBlock (). Reen en la funkcio Object() { [denaska kodo] } de nia Blockchain klaso.
Ni nun povas inkluzivi la genezan blokon kiam ajn ni konstruas novan Blockchain-instancon:
Blokoĉenaj Metodoj
Nun, ni aldonu metodojn al nia Blockchain-klaso, kiuj permesos al ni fari aferojn kiel aldoni novajn blokojn kaj alporti la plej freŝan blokon.
La funkcio getLatestBlock estas la plej baza. Ĝi simple resendas la finan membron de la ĉenaro:
La addBlock-tekniko estas iom pli implikita.
Antaŭ ol ni povas aldoni novan blokon al nia ĉeno, ni unue devas taŭge agordi la antaŭan Hash-kampon de tiu bloko.
Ĝi devas esti agordita al la hash de la plej lastatempe aldonita bloko al nia ĉeno. Ni ankaŭ devas kalkuli la haŝon de la nova bloko:
provoj
Ni vidu kiel nia MelodyCoin eliris.
Kreu blokĉenon por plenumi ĉi tion. Ni aldonu kelkajn pliajn blokojn:
Ni faris du novajn blokojn tie. Ni rigardu kiel nia blokĉeno aspektas nuntempe.
MelodyCoin estos stringita kaj formatita kun kvar spacoj:
Kontrolu la Integrecon de La Blokoĉeno
Blokoĉenoj estas mirindaj ĉar post kiam bloko estis aldonita, ĝi ne povas esti modifita sen nuligi la reston de la ĉeno.
Tamen, ne ekzistas metodo por mi kontroli la integrecon de nia blokĉeno kun ĉi tiu efektivigo.
Ni enkonduku funkcion isChainValid al nia blokĉeno. Se la ĉeno estas legitima, ĝi revenos vera; alie, ĝi revenos falsa:
Testante Integrecon
Ni nun povas provi la integrecon de nia blokĉeno. Se ni plenumos ĝin nun, ĝi konfirmos, ke nia ĉeno estas aŭtenta.
Ni nun provu manipuli nian blokĉenon. Ni ŝanĝu blokon 2 kaj anstataŭigu ĝian enhavon (ni supozu, ke ni translokigis 100 monerojn anstataŭ kvar).
Kiam ni plenumas ĉi tion, ni povas vidi, ke la programaro rekonas nian klopodon manipuli la ĉenon.
Tamen, vi povas kredi, ke ekzistas alia metodo por mi enmiksi ĉi tion. Mi ŝanĝis la enhavon en la bloko sed ne rekalkulis la haŝiŝon. Do vi povas provi esti lerta kaj rekalkuli la hash de tiu sama bloko.
Jen ĉio estis al nia eta blokĉena aranĝo! Ĝi ebligas al ni aldoni novajn blokojn kaj detekti mistraktadon de datumoj ene de la ĉeno.
Estas du problemoj kun nia malgranda blokĉeno, kiujn ni devas trakti:
- Modernaj komputiloj estas ekstreme rapidaj kaj povas aldoni milojn da blokoj al nia ĉeno en sekundoj. Ni evidente ne volas, ke iu ajn spamu nian blokĉenon.
- Nia blokĉeno ankoraŭ estas vundebla al mistraktado. Vi povas ĝisdatigi la enhavon de bloko kaj poste simple rekalkuli la haŝojn (kaj antaŭajn haŝojn) por ĉiuj sekvaj blokoj. Eĉ se vi fuŝas kun ĝi, vi finos kun legitima ĉeno.
Por trakti ĉi tiujn zorgojn, blokĉenoj uzas teknikon konatan kiel "pruvo de laboro". Vi devas pruvi, ke vi uzis signifan kvanton da komputilaj rimedoj por krei blokon uzante ĉi tiun aliron. Ĉi tio ankaŭ estas nomita Minado.
Pruvo-de-laboro postulas ke la hash de bloko komenciĝu per specifa kvanto de nuloj. Sed kiel vi povas scii ĉu via hash konformas al ĉi tiu regulo?
La enhavo de bloko determinas ĝian haŝon. Do ni ĉiam ricevas la saman haŝon, kondiĉe ke ni ne modifas la enhavon.
Ĉiu bloko devus havi nonce valoron aldonitan al ĝi kiel solvo. Ĉi tio estas esence iuj hazardaj datumoj, kiujn ni povas ĝisdatigi ĝis la hash de nia bloko komenciĝas per sufiĉe da nuloj. Ĉar vi ne povas ŝanĝi la eligon de hash-funkcio, vi devas testi multajn malsamajn kombinaĵojn kaj esperi la plej bonan.
Enkonduku Minadon al La Blokoĉeno
Ni komencu inkludante nonce en nia Bloko-klaso. La nonce estas la ununura valoro ene de nia bloko, kiun ni povas modifi por efiki la haŝon de la bloko.
Ni ne povas ŝanĝi la tempomarkon aŭ la datumojn.
Poste, ni skribu mineBlock() funkcion, kiu faros la realan minadon de bloko. Ĉi tiu funkcio estos sendita la bezonatan malfacilaĵon kiel parametron kaj daŭre efektiviĝos ĝis la hash de nia bloko komenciĝos kun sufiĉe da nuloj.
Mi ĵus faris bazan dum-buklon, kiu kurus ĝis nia haŝo komenciĝos per sufiĉe da nuloj. Ni uzas la malfacilecon por determini kiom da nuloj necesas. Kun malfacileco de 5, nia hash devas komenci per 5 nuloj.
Kiam nia hash ne enhavas sufiĉe da nuloj, ni levas la nonce je unu kaj rekalkulas la hash. Kaj se ni trovas hash kiu respondas al la malfacileco, ni ensalutas ĝin al la konzolo.
Estas unu plia afero, kiun ni devas fari. Ni ne vere konsideras la nonce variablon en nia calculateHash-metodo, do jen ĝi:
Klaso de Blokoĉeno
Ni metu ĉi tiun novan aliron al la testo en nia blokĉena klaso kaj vidu kiel ĝi iras.
Por komenci, mi difinos la malfacilecon de nia blokĉeno en la funkcio Object(). Ni difinas ĝin ĉi tie ĉar ni povas uzi ĝin ie poste.
La addBlock-funkcio tiam devas esti modifita tiel ke ĝi minas la blokon antaŭ ol aldoni ĝin en nian ĉenon.
Uzu La Blokoĉenon
Nun, ni uzu nian novan blokĉenon kun la pruva algoritmo. Ĉi tie, aldonu kelkajn console.log deklarojn.
Kiam ni plenumas ĉi tiun kodon, ni povas observi, ke la minindustria procezo ne plu estas precipe rapida.
Necesas iom da tempo por ke la algoritmo generi blokojn kun hashoj, kiuj komenciĝas per tri nuloj (kiel agordita de malfacileco).
Do tio estis la fino de nia baza blokĉena aranĝo.
Ni povas reguligi kiom rapide novaj blokoj aldoniĝas al nia blokĉeno danke al la pruvo-de-labora mekanismo.
Ĝi estas la plej signifa sekureca trajto sur blokĉenoj. Kaj nun kiam vi komprenas kiel ĝi funkcias, kreu vian propran!
Lasi Respondon