Ако погледнем тенденциите от предходните няколко години, през цялото време сме чували за блокчейн, но не много за спецификата.
Всички сме наясно, че криптовалути като Bitcoin, Ethereum, Dogecoin, Matic и други разчитат на блокчейн технологията. Блокчейн оглави значимите събития, които революционизираха много индустрии през 2021 г. и проправиха пътя за нови постижения.
Блокчейн е средство за съхранение на данни по начин, който е труден или невъзможен за редактиране, хакване или измама. Това е цифров регистър на транзакциите, които се дублират и разпространяват в цялата мрежа от компютърни системи на блокчейн.
Това е революционната технология за бази данни, която захранва практически всички криптовалути. Blockchain прави невероятно трудно хакването или измамата на системата, като разпространява идентични копия на база данни в цяла мрежа.
Докато Bitcoin сега е най-известната употреба за блокчейн, технологията може да обслужва много голямо разнообразие от приложения.
Криптовалутите и блокчейновете стават все по-популярни през последните години и се очаква тази тенденция да продължи.
В този урок ще направим прост блокчейн с JavaScript. Това ще ви предостави основно разбиране за това как работи блокчейн.
Нека го наречем MelodyCoin и да се включим веднага в действието!
Създаване на блок
За да започнем, ще създадем нов JavaScript файл, в който ще поставим целия си код.
Нека го наречем main.js и да започнем с описание как трябва да изглежда блокчейн и блокове.
Създайте Block клас и му дайте функция Object() { [роден код] } за начало.
Трябва да посочите дата и хеша на предишния блок, когато създавате нов блок:
Ето дефинициите за всяко свойство:
- Печатът за време показва кога е направен блокът. Можете да използвате какъвто и формат да изберете (в този случай UNIX времеви печат).
- Всяка форма на данни, която искате да свържете към този блок, може да бъде включена в параметъра за данни. Ако искате да създадете криптовалута, можете да запазите данни за транзакциите, като например подателя/получателя и сумата на парите, преместени тук.
- Предишният хеш е низ, който съдържа хеша на предишния блок. Това е, което ще генерира веригата от блокове, които ще бъдат от решаващо значение за осигуряването на целостта на нашия блокчейн по-късно.
Създаване на хешове
Всеки блок се свързва с предходния блок (по този начин свойството previousHash). Тоест всеки блок изисква хеш. Хешът е подобен на пръстов отпечатък. Той е различен за всеки блок.
Хешът на блок може да бъде изчислен чрез преминаване на цялото му съдържание през хеш функция.
И така, нека започнем с прилагането на функция, която изчислява хеша на текущия блок.
И така, под класа Block, ние дефинираме функцията CalculateHash:
Въпреки това, SHA256 хешът не се поддържа от JavaScript и трябва да бъде получен от външна библиотека.
Crypto-js е фантастичен пакет, който включва сигурни реализации на няколко хеш алгоритма.
След това можем да го импортираме в нашия main.js код.
Сега, когато имаме нашата функция за изчисляване на Hash(), нека я използваме във функцията на нашия блок:
След като опишем как изглежда един блок, можем да дефинираме как трябва да изглежда блокчейн. Така че нека създадем нов клас.
В този сценарий блокчейнът е много прост обект, който има верига от свойства. Това е масив, съдържащ всички блокове във веригата.
Преди да можем да добавим блокове, първо трябва да създадем това, което е известно като „генерационен блок“. Това е първият блок във веригата и е уникален с това, че не може да сочи към предходен блок (той е първият!).
И така, за да създам блока genesis, ще добавя функция към нашия клас с име createGenesisBlock (). Обратно във функцията Object() { [роден код] } на нашия клас Blockchain.
Вече можем да включим блока genesis всеки път, когато изградим нов екземпляр на Blockchain:
Методи на блокчейн
Сега, нека добавим методи към нашия клас Blockchain, които ще ни позволят да правим неща като добавяне на нови блокове и извличане на най-новия блок.
Функцията getLatestBlock е най-основната. Той просто връща крайния член на верижния масив:
Техниката addBlock е малко по-ангажирана.
Преди да можем да добавим нов блок към нашата верига, първо трябва да зададем по подходящ начин предишното хеш поле на този блок.
Той трябва да бъде настроен на хеша на последния добавен блок към нашата верига. Трябва също да изчислим хеша на новия блок:
Тестване
Нека видим как се появи нашият MelodyCoin.
Създайте екземпляр на блокчейн, за да постигнете това. Нека добавим още няколко блока:
Там направихме два нови блока. Нека да надникнем как изглежда нашият блокчейн в момента.
MelodyCoin ще бъде стрингифициран и форматиран с четири интервала:
Проверете целостта на Blockchain
Блокчейновете са фантастични, защото веднъж добавен блок, той не може да бъде променен, без да се обезсили останалата част от веригата.
Въпреки това, няма начин да проверя целостта на нашия блокчейн с тази реализация.
Нека представим функция isChainValid в нашия блокчейн. Ако веригата е легитимна, тя ще върне true; в противен случай ще върне false:
Тестване на целостта
Вече можем да подложим на тест целостта на нашия блокчейн. Ако го изпълним сега, това ще потвърди, че нашата верига е истинска.
Нека сега се опитаме да подправим нашия блокчейн. Нека променим блок 2 и презапишем съдържанието му (да предположим, че сме прехвърлили 100 монети вместо четири).
Когато изпълним това, можем да видим, че софтуерът разпознава усилията ни да подправим веригата.
Можете обаче да повярвате, че има друг начин да се намесвам в това. Промених съдържанието в блока, но не преизчислих хеша. Така че можете да опитате да бъдете умни и да преизчислите хеша на същия блок.
Това е всичко, което имаше за нашата малка блокчейн настройка! Тя ни позволява да добавяме нови блокове и да откриваме подправяне на данни във веригата.
Има два проблема с нашия малък блокчейн, които трябва да разрешим:
- Съвременните компютри са изключително бързи и могат да добавят хиляди блокове към нашата верига за секунди. Очевидно не искаме някой да спами нашия блокчейн.
- Нашата блокчейн все още е уязвима за подправяне. Можете да актуализирате съдържанието на блок и след това просто да преизчислите хешовете (и предишните хешове) за всички следващи блокове. Дори и да се забъркате с него, ще се окажете с легитимна верига.
За да се справят с тези опасения, блокчейните използват техника, известна като „доказателство за работа“. Трябва да демонстрирате, че сте използвали значително количество изчислителни ресурси, за да създадете блок, използвайки този подход. Това също се нарича минното дело.
Доказателството за работа изисква хеширането на блока да започва с определено количество нули. Но как можете да разберете дали вашият хеш отговаря на това правило?
Съдържанието на блок определя неговия хеш. Така че винаги получаваме един и същ хеш, при условие че не променяме съдържанието.
Всеки блок трябва да има добавена стойност на nonce като решение. Това по същество са някои произволни данни, които можем да актуализираме, докато хешът на нашия блок започне с достатъчно нули. Тъй като не можете да промените изхода на хеш функцията, трябва да тествате много различни комбинации и да се надявате на най-доброто.
Запознайте се с копаене в Blockchain
Нека започнем с включването на nonce в нашия клас Block. Nonce е единствената стойност в нашия блок, която можем да модифицираме, за да повлияе на хеша на блока.
Не можем да променим времевата марка или данните.
След това нека напишем функция mineBlock(), която ще извърши действителното копаене на блок. На тази функция ще бъде изпратена необходимата трудност като параметър и ще продължи да се изпълнява, докато хешът на нашия блок започне с достатъчно нули.
Току-що направих основен while цикъл, който ще работи, докато нашият хеш започне с достатъчно нули. Използваме трудността, за да определим колко нули са необходими. При трудност 5 нашият хеш трябва да започва с 5 нули.
Когато нашият хеш не съдържа достатъчно нули, ние повишаваме nonce с едно и преизчисляваме хеша. И ако намерим хеш, който отговаря на трудността, ние го регистрираме в конзолата.
Има още едно нещо, което трябва да направим. Ние всъщност не вземаме под внимание променливата nonce в нашия метод за изчисляване на Hash, така че ето я:
Блокчейн клас
Нека изпробваме този нов подход в нашия блокчейн клас и да видим как върви.
Като начало ще дефинирам трудността на нашия блокчейн във функцията Object(). Тук го дефинираме, тъй като можем да го използваме някъде по-късно.
След това функцията addBlock трябва да бъде модифицирана така, че да копае блока, преди да го добави в нашата верига.
Използвайте Blockchain
Сега, нека използваме нашия нов блокчейн с алгоритъма за доказване на работа. Тук добавете няколко оператора console.log.
Когато изпълним този код, можем да забележим, че процесът на копаене вече не е особено бърз.
Отнема известно време на алгоритъма да генерира блокове с хешове, които започват с три нули (както е конфигурирано според трудността).
Така че това беше краят на нашата основна блокчейн настройка.
Можем да регулираме колко бързо се добавят нови блокове към нашия блокчейн благодарение на механизма за доказване на работа.
Това е най-важната функция за сигурност на блокчейн. И сега, когато разберете как работи, започнете да създавате свой собствен!
Оставете коментар