Ако ги погледнеме трендовите од претходните неколку години, цело време сме слушале за блокчејн, но не многу за спецификите.
Сите сме свесни дека криптовалутите како Биткоин, Етереум, Догекоин, Матиќ и други се потпираат на технологијата на блокчејн. Блокчејн ги предводеше значајните настани што револуционизираа бројни индустрии во 2021 година и го отворија патот за нови достигнувања.
Блокчејн е средство за складирање податоци на начин кој е тежок или невозможен за уредување, хакирање или измама. Тоа е дигитална книга на трансакции кои се дуплираат и се шират низ целата мрежа на компјутерски системи на блокчејнот.
Тоа е револуционерна технологија за бази на податоци што ги напојува практично сите криптовалути. Blockchain го прави неверојатно тешко хакирањето или измамувањето на системот со ширење на идентични копии од базата на податоци низ цела мрежа.
Додека Биткоинот сега е најистакната употреба за блокчејн, технологијата може да послужи за многу широк спектар на апликации.
Криптовалутите и блокчејновите се сè попопуларни во последниве години и се очекува овој тренд да продолжи.
Ќе направиме едноставен блокчејн со JavaScript во ова упатство. Тоа ќе ви обезбеди основно разбирање за тоа како функционира блокчејн.
Ајде да го наречеме MelodyCoin и веднаш да влеземе во акцијата!
Креирање блок
За почеток, ќе создадеме нова датотека JavaScript во која ќе го ставиме целиот наш код.
Да го наречеме main.js и да започнеме со опис на тоа како треба да изгледаат блокчејн и блокови.
Направете Блок класа и дајте ѝ функција Object() { [матичен код] } за почеток.
Мора да наведете датум и хаш од претходниот блок кога креирате нов блок:
Еве ги дефинициите за секој имот:
- Временскиот печат покажува кога е направен блокот. Можете да користите кој било формат што ќе го изберете (во овој случај, временски печат на UNIX).
- Секоја форма на податоци што сакате да ја поврзете со овој блок може да се вклучи во параметарот за податоци. Ако сакате да креирате криптовалута, можете да ги чувате податоците за трансакциите, како што се испраќачот/примачот и износот на пари преместени овде.
- Претходниот Хаш е низа што го држи хашот на претходниот блок. Тоа е она што ќе го генерира синџирот на блокови, што ќе биде критично за обезбедување на интегритетот на нашиот блокчејн подоцна.
Креирање хаши
Секој блок се поврзува со претходниот блок (оттука и претходното својство Хаш). Тоа е, секој блок бара хаш. Хаш е сличен на отпечаток од прст. Тоа е различно за секој блок.
Хешот на блокот може да се пресмета со пренесување на целата негова содржина преку хеш функција.
Значи, да започнеме со имплементирање на функција која го пресметува хашот на тековниот блок.
Значи, под класата Block, ја дефинираме функцијата пресметајХас:
Сепак, хашот SHA256 не е поддржан од JavaScript и мора да се добие од надворешна библиотека.
Crypto-js е фантастичен пакет кој вклучува безбедни имплементации на неколку хаш алгоритми.
Потоа можеме да го увеземе во нашиот main.js код.
Сега кога ја имаме нашата функција accountHash(), ајде да ја употребиме во функцијата на нашиот блок:
Откако ќе опишеме како изгледа Блок, можеме да дефинираме како треба да изгледа блокчејн. Значи, ајде да создадеме нова класа.
Во ова сценарио, блокчејнот е многу едноставен објект кој има синџир на имот. Ова е низа што ги држи сите блокови на ланецот.
Пред да можеме да додадеме блокови, прво мораме да го создадеме она што е познато како „блока за генеза“. Ова е првиот блок во синџирот и е единствен по тоа што не може да укаже на претходен блок (тоа е првиот!).
Значи, за да го изградиме блокот генеза, ќе додадам функција во нашата класа со име createGenesisBlock (). Назад во функцијата Object() { [матичен код] } од нашата класа Blockchain.
Сега можеме да го вклучиме блокот генеза секогаш кога ќе изградиме нов пример на Blockchain:
Блокчејн методи
Сега, ајде да додадеме методи во нашата класа Blockchain што ќе ни овозможат да правиме работи како додавање нови блокови и преземање на најновиот блок.
Функцијата getLatestBlock е најосновна. Едноставно го враќа последниот член од низата на синџирот:
Техниката addBlock е малку повеќе вклучена.
Пред да можеме да додадеме нов блок во нашиот синџир, прво мора соодветно да го поставиме претходното поле за Hash на тој блок.
Мора да се постави на хашот на неодамна додадениот блок во нашиот синџир. Исто така, треба да го пресметаме хашот на новиот блок:
Тестирање
Ајде да видиме како излезе нашиот MelodyCoin.
Создадете блокчејн пример за да го постигнете ова. Ајде да додадеме уште неколку блокови:
Направивме два нови блока таму. Ајде да ѕирнеме како во моментов изгледа нашиот блокчејн.
MelodyCoin ќе биде стрингиран и форматиран со четири празни места:
Потврдете го интегритетот на блокчејнот
Блок синџирите се фантастични затоа што штом ќе се додаде блок, тој не може да се измени без да се поништи остатокот од синџирот.
Сепак, не постои метод за мене да го проверам интегритетот на нашиот блокчејн со оваа имплементација.
Ајде да воведеме isChainValid функција на нашиот блокчејн. Ако синџирот е легитимен, ќе се врати вистина; во спротивно, ќе се врати неточно:
Тестирање на интегритет
Сега можеме да го ставиме на тест интегритетот на нашиот блокчејн. Ако го извршиме сега, тоа ќе потврди дека нашиот синџир е оригинален.
Ајде сега да се обидеме да го нарушиме нашиот блокчејн. Ајде да го смениме блокот 2 и да ја презапишеме неговата содржина (да претпоставиме дека сме префрлиле 100 монети наместо четири).
Кога ќе го извршиме ова, можеме да видиме дека софтверот го препознава нашиот напор да го нарушиме ланецот.
Сепак, можете да верувате дека постои друг метод за мене да се мешам со ова. Ја променив содржината во блокот, но не го пресметав повторно хашот. Така, можете да се обидете да бидете паметни и повторно да го пресметате хашот на истиот блок.
Тоа е сè што имаше во нашето мало поставување на блокчејн! Тоа ни овозможува да додаваме нови блокови и да откриеме манипулации со податоците во ланецот.
Постојат два проблема со нашиот мал блокчејн што мора да ги решиме:
- Современите компјутери се исклучително брзи и можат да додадат илјадници блокови во нашиот синџир за неколку секунди. Очигледно не сакаме некој да го спамува нашиот блокчејн.
- Нашиот блокчејн сè уште е ранлив на манипулации. Можете да ја ажурирате содржината на блок и потоа едноставно повторно да ги пресметате хашовите (и претходните хашови) за сите следни блокови. Дури и ако се плеткаш со тоа, ќе завршиш со легитимен синџир.
За да се решат овие проблеми, блокчејновите користат техника позната како „доказ за работа“. Мора да покажете дека сте користеле значителна количина на пресметковни ресурси за да креирате блок користејќи го овој пристап. Ова исто така се нарекува рударство.
Доказот за работа бара хашот на блокот да започне со одредена количина нули. Но, како можете да знаете дали вашиот хаш одговара на ова правило?
Содржината на блокот го одредува неговиот хаш. Така, секогаш го добиваме истиот хаш, под услов да не ја менуваме содржината.
Секој блок треба да има додадена вредност како решение. Ова се во суштина некои случајни податоци што можеме да ги ажурираме додека хашот на нашиот блок не започне со доволно нули. Бидејќи не можете да го промените излезот на хаш функцијата, мора да тестирате многу различни комбинации и да се надевате на најдоброто.
Воведување на рударството во блокчејн
Да почнеме со вклучување на нонце во нашата класа Блок. Nonce е единствената вредност во нашиот блок што можеме да ја измениме за да влијае на хашот на блокот.
Не можеме да го смениме временскиот печат или податоците.
Следно, ајде да напишеме функција mineBlock() која ќе го направи вистинското рударство на блок. Оваа функција ќе ја испрати потребната тешкотија како параметар и ќе продолжи да се извршува додека хашот на нашиот блок не започне со доволно нули.
Само што направив основна додека јамка која ќе работи додека нашиот хаш не започне со доволно нули. Ја користиме тешкотијата за да одредиме колку нули се потребни. Со тешкотија од 5, нашиот хаш мора да започне со 5 нули.
Кога нашиот хаш не содржи доволно нули, го подигаме нонцето за еден и повторно го пресметуваме хашот. И ако најдеме хаш што одговара на тежината, го најавуваме на конзолата.
Има уште една работа што треба да направиме. Ние навистина не ја земаме предвид променливата nonce во нашиот метод пресметанХаш, па еве ја:
Класа на блокчејн
Ајде да го ставиме овој нов пристап на тест во нашата класа за блокчејн и да видиме како ќе оди.
За почеток, ќе ја дефинирам тешкотијата на нашиот блокчејн во функцијата Object(). Ние го дефинираме овде бидејќи можеме да го користиме некаде подоцна.
Функцијата addBlock потоа мора да се измени така што ќе го минира блокот пред да го додаде во нашиот синџир.
Користете го блокчејнот
Сега, ајде да го користиме нашиот нов блокчејн со алгоритмот за доказ за работа. Еве, додадете неколку изјави за console.log.
Кога ќе го извршиме овој код, можеме да забележиме дека процесот на рударство повеќе не е особено брз.
Потребно е извесно време за алгоритмот да генерира блокови со хаш што започнуваат со три нули (како што е конфигурирано според тешкотии).
Така, тоа беше крајот на нашето основно поставување на блокчејн.
Можеме да регулираме колку брзо се додаваат нови блокови во нашиот блокчејн благодарение на механизмот за докажување на работа.
Тоа е најзначајната безбедносна карактеристика на блокчејновите. И сега кога сфативте како функционира, започнете да создавате своја!
Оставете Одговор