Ha az elmúlt évek trendjeit nézzük, a blokkláncról folyamatosan hallottunk, de a konkrétumokról nem sokat.
Mindannyian tisztában vagyunk azzal, hogy az olyan kriptovaluták, mint a Bitcoin, az Ethereum, a Dogecoin, a Matic és mások a blokklánc technológián alapulnak. A Blockchain vezette azokat a jelentős eseményeket, amelyek 2021-ben számos iparágat forradalmasítottak, és új eredmények előtt nyitották meg az utat.
A blokklánc az adatok nehezen vagy lehetetlen módon történő tárolásának eszköze, amelyet nehéz vagy lehetetlen szerkeszteni, feltörni vagy átverni. Ez egy digitális főkönyv tranzakciókról, amelyek megkettőződnek és szétszórva a blokklánc teljes számítógéprendszer-hálózatán.
Ez az úttörő adatbázis-technológia, amely gyakorlatilag az összes kriptovalutát támogatja. A blokklánc hihetetlenül megnehezíti a rendszer feltörését vagy megtévesztését azáltal, hogy egy adatbázis azonos másolatait a teljes hálózaton elterjeszti.
Míg a Bitcoin jelenleg a blokklánc legjelentősebb felhasználása, a technológia nagyon sokféle alkalmazást képes kiszolgálni.
A kriptovaluták és a blokkláncok egyre népszerűbbek az elmúlt években, és ez a tendencia várhatóan folytatódni fog.
Ebben az oktatóanyagban egy egyszerű blokkláncot készítünk JavaScripttel. Alapvető ismereteket nyújt a blokklánc működéséről.
Nevezzük MelodyCoinnak, és vágjunk bele az akcióba!
Blokk létrehozása
Kezdésként létrehozunk egy új JavaScript-fájlt, amelyben az összes kódunkat elhelyezzük.
Nevezzük main.js-nek, és kezdjük egy leírással, hogyan kell kinéznie a blokkláncnak és a blokkoknak.
Hozzon létre egy Block osztályt, és kezdésként adjon neki egy Object() { [natív kód] } függvényt.
Új blokk létrehozásakor meg kell adnia egy dátumot és az előző blokk hash-jét:
Íme az egyes tulajdonságok definíciói:
- Az időbélyeg jelzi, hogy mikor készült a blokk. Bármilyen formátumot használhat (ebben az esetben UNIX időbélyeget).
- Az adatparaméterben bármilyen adat szerepelhet, amelyet ehhez a blokkhoz szeretne kapcsolni. Ha kriptovalutát szeretne létrehozni, itt tárolhatja a tranzakciós adatokat, például a feladót/fogadót és az áthelyezett pénzösszeget.
- A previousHash egy karakterlánc, amely az előző blokk hash-jét tartalmazza. Ez hozza létre a blokkláncot, amely kritikus fontosságú lesz a blokkláncunk integritásának biztosításában a későbbiekben.
Hashes létrehozása
Minden blokk az előző blokkhoz kapcsolódik (tehát a previousHash tulajdonsághoz). Vagyis minden blokkhoz hash szükséges. A hash hasonló az ujjlenyomathoz. Ez minden blokknál különálló.
Egy blokk hash-je kiszámítható úgy, hogy a teljes tartalmát átadjuk egy hash függvényen.
Tehát kezdjük egy olyan függvény megvalósításával, amely kiszámítja az aktuális blokk hash-jét.
Tehát a Block osztály alatt definiáljuk a számítási hash függvényt:
Az SHA256 hash-t azonban a JavaScript nem támogatja, és azt külső könyvtárból kell beszerezni.
A Crypto-js egy fantasztikus csomag, amely számos hash algoritmus biztonságos megvalósítását tartalmazza.
Ezután importálhatjuk a main.js kódunkba.
Most, hogy megvan a számítás Hash() függvényünk, használjuk a blokk függvényünkben:
Miután leírtuk, hogy néz ki egy blokk, meghatározhatjuk, hogyan nézzen ki egy blokklánc. Tehát hozzunk létre egy új osztályt.
Ebben a forgatókönyvben a blokklánc egy nagyon egyszerű objektum, amely tulajdonságlánccal rendelkezik. Ez egy tömb, amely a lánc összes blokkját tartalmazza.
Mielőtt blokkokat adhatnánk hozzá, először létre kell hoznunk az úgynevezett „genezis blokkot”. Ez az első blokk a láncban, és egyedülálló abban, hogy nem mutathat előző blokkra (ez az első!).
Tehát a genezis blokk felépítéséhez hozzáadok egy függvényt az osztályunkhoz CreateGenesisBlock (). Visszatérve a Blockchain osztályunk Object() { [natív kód] } függvényébe.
Mostantól bármikor beépíthetjük a genezis blokkot, amikor új Blockchain példányt építünk:
Blockchain módszerek
Most adjunk hozzá metódusokat a Blockchain osztályunkhoz, amelyek lehetővé teszik számunkra, hogy olyan dolgokat tegyünk, mint például új blokkok hozzáadása és a legújabb blokk lekérése.
A getLatestBlock funkció a legalapvetőbb. Egyszerűen visszaadja a lánctömb utolsó tagját:
Az addBlock technika egy kicsit jobban érintett.
Mielőtt új blokkot adhatnánk a láncunkhoz, először megfelelően be kell állítani a blokk előző Hash mezőjét.
A láncunkhoz legutóbb hozzáadott blokk hash-jére kell állítani. Ki kell számítanunk az új blokk hash-jét is:
Tesztelés
Lássuk, hogyan jött ki a MelodyCoinunk.
Hozzon létre egy blokklánc-példányt ennek végrehajtásához. Adjunk hozzá még néhány blokkot:
Két új blokkot csináltunk ott. Vessünk egy pillantást, hogy néz ki jelenleg a blokkláncunk.
A MelodyCoin négy szóközzel lesz felkarikálva és formázva:
Ellenőrizze a Blockchain integritását
A blokkláncok fantasztikusak, mert a blokk hozzáadása után nem lehet módosítani a lánc többi részének érvénytelenítése nélkül.
Nincs azonban olyan módszer, amellyel ellenőrizhetném a blokkláncunk integritását ezzel a megvalósítással.
Vezessünk be egy isChainValid függvényt a blokkláncunkba. Ha a lánc legitim, akkor igazat ad vissza; ellenkező esetben hamis értéket ad vissza:
Integritás tesztelése
Most próbára tehetjük blokkláncunk integritását. Ha most végrehajtjuk, megerősíti, hogy a láncunk eredeti.
Most próbáljuk meg manipulálni a blokkláncunkat. Változtassuk meg a 2. blokkot, és írjuk felül a tartalmát (tegyük fel, hogy négy helyett 100 érmét vittünk át).
Amikor ezt végrehajtjuk, láthatjuk, hogy a szoftver felismeri a lánc manipulálására tett erőfeszítésünket.
Azonban elhihetitek, hogy van egy másik módszer is, amellyel ebbe beleavatkozhatok. Módosítottam a blokk tartalmát, de nem számoltam újra a hash-t. Tehát megpróbálhat okos lenni, és újraszámítani ugyanannak a blokknak a hash-ét.
Ennyi volt az apró blokklánc-beállításunkban! Lehetővé teszi számunkra, hogy új blokkokat adjunk hozzá, és észleljük a láncon belüli adatok manipulálását.
Két probléma van a kis blokkláncunkkal kapcsolatban, amelyeket meg kell oldanunk:
- A modern számítógépek rendkívül gyorsak, és másodpercek alatt több ezer blokkot adhatnak láncunkhoz. Nyilvánvalóan nem akarjuk, hogy bárki spammelje a blokkláncunkat.
- A blokkláncunk továbbra is ki van téve a manipulációnak. Frissítheti egy blokk tartalmát, majd egyszerűen újraszámolhatja az összes következő blokk kivonatait (és a korábbi kivonatokat). Még ha vacakol is vele, akkor is jogos lánchoz jut.
Ezen aggodalmak kezelésére a blokkláncok a „munka bizonyításaként” ismert technikát alkalmazzák. Be kell mutatnia, hogy jelentős mennyiségű számítási erőforrást használt fel egy blokk létrehozásához ezzel a megközelítéssel. Ezt is hívják bányászati.
A munka bizonyítása megköveteli, hogy egy blokk hash-je meghatározott mennyiségű nullával kezdődjön. De honnan tudhatod, hogy a hash megfelel-e ennek a szabálynak?
Egy blokk tartalma határozza meg a hash-ét. Tehát mindig ugyanazt a hash-t kapjuk, feltéve, hogy nem módosítjuk a tartalmat.
Minden blokkhoz megoldásként hozzá kell adni egy nonce értéket. Ez lényegében néhány véletlenszerű adat, amelyet addig frissíthetünk, amíg a blokkunk hash-je elegendő nullával kezdődik. Mivel a hash függvény kimenetét nem módosíthatja, sok különböző kombinációt kell tesztelnie, és remélnie kell a legjobbat.
Mutasd be a bányászatot a blokkláncba
Kezdjük azzal, hogy beillesztünk egy nonce-t a Block osztályba. A nonce az egyetlen érték a blokkon belül, amelyet módosíthatunk a blokk hash-jének befolyásolása érdekében.
Az időbélyeget vagy az adatokat nem áll módunkban megváltoztatni.
Ezután írjunk egy mineBlock() függvényt, amely elvégzi a blokk tényleges bányászását. Ez a függvény paraméterként elküldi a szükséges nehézséget, és addig fut, amíg blokkunk hash-je elegendő nullával nem kezdődik.
Most készítettem egy alapvető while ciklust, amely addig fut, amíg a hash-ünk elegendő nullával kezdődik. A nehézség segítségével meghatározzuk, hány nullára van szükség. 5-ös nehézség esetén a hash-ünknek 5 nullával kell kezdődnie.
Ha a hash-ünk nem tartalmaz elegendő nullát, az nonce-t eggyel emeljük, és újraszámoljuk a hash-t. Ha pedig találunk a nehézségnek megfelelő hash-t, akkor azt naplózzuk a konzolba.
Még egy dolgot kell tennünk. A számítási hash módszerünkben nem igazán vesszük figyelembe a nonce változót, ezért itt van:
Blockchain osztály
Tegyük próbára ezt az új megközelítést a blokklánc osztályunkon, és nézzük meg, hogyan megy.
Kezdésként meghatározom a blokkláncunk nehézségét az Object() függvényben. Itt határozzuk meg, mert később valahol használhatjuk.
Az addBlock függvényt ezután úgy kell módosítani, hogy az bányászza a blokkot, mielőtt hozzáadná a láncunkhoz.
Használd a Blockchaint
Most pedig használjuk az új blokkláncunkat a munkabizonyítási algoritmussal. Adjon hozzá néhány console.log utasítást.
Amikor ezt a kódot végrehajtjuk, megfigyelhetjük, hogy a bányászati folyamat már nem túl gyors.
Eltart egy ideig, amíg az algoritmus három nullával kezdődő hash-ekkel rendelkező blokkokat generál (a nehézségek szerint konfigurálva).
Tehát ezzel véget ért az alapvető blokklánc-beállításunk.
A proof-of-work mechanizmusnak köszönhetően szabályozhatjuk, hogy milyen gyorsan kerüljenek új blokkok a blokkláncunkba.
Ez a blokkláncok legjelentősebb biztonsági funkciója. És most, hogy megértette, hogyan működik, készítse el sajátját!
Hagy egy Válaszol