Өткен бірнеше жылдағы трендтерге қарасақ, біз блокчейн туралы үнемі естідік, бірақ ерекшеліктер туралы көп емес.
Bitcoin, Ethereum, Dogecoin, Matic және басқалар сияқты криптовалюталар блокчейн технологиясына сүйенетінін бәріміз білеміз. Блокчейн 2021 жылы көптеген салаларда төңкеріс жасап, жаңа жетістіктерге жол ашқан маңызды оқиғаларға жетекшілік етті.
Блокчейн - бұл деректерді өңдеу, бұзу немесе алдау қиын немесе мүмкін емес етіп сақтау құралы. Бұл көшірілетін және блокчейннің бүкіл компьютерлік жүйелер желісіне таралатын транзакциялардың цифрлық кітабы.
Бұл дерлік барлық криптовалюталарға қуат беретін жаңа деректер базасы технологиясы. Блокчейн бүкіл желі бойынша дерекқордың бірдей көшірмелерін тарату арқылы жүйені бұзуды немесе алдауды керемет қиындатады.
Биткоин қазір блокчейннің ең танымал түрі болғанымен, технология көптеген қосымшаларға қызмет ете алады.
Соңғы жылдары криптовалюталар мен блокчейндер танымал болды және бұл үрдіс жалғасады деп күтілуде.
Біз осы оқулықта JavaScript көмегімен қарапайым блокчейн жасаймыз. Ол сізге блокчейннің қалай жұмыс істейтіні туралы негізгі түсінік береді.
Оны MelodyCoin деп атап, әрекетке кірісейік!
Блок құру
Бастау үшін біз барлық кодымызды орналастыратын жаңа JavaScript файлын жасаймыз.
Оны main.js деп атаймыз және блокчейн мен блоктардың қалай көрінетінін сипаттаудан бастайық.
Block сыныбын жасаңыз және оған бастау үшін Object() { [жергілікті код] } функциясын беріңіз.
Жаңа блокты жасау кезінде күнді және алдыңғы блоктың хэшін беру керек:
Мұнда әрбір қасиет үшін анықтамалар берілген:
- Уақыт белгісі блоктың қашан жасалғанын көрсетеді. Сіз таңдаған кез келген пішімді пайдалана аласыз (бұл жағдайда UNIX уақыт белгісі).
- Осы блокқа қосқыңыз келетін деректердің кез келген пішіні деректер параметріне қосылуы мүмкін. Егер сіз криптовалюта жасағыңыз келсе, жіберуші/алушы және осында жылжытылған ақша сомасы сияқты транзакция деректерін сақтай аласыз.
- FrontHash - алдыңғы блоктың хэшін ұстайтын жол. Бұл кейінірек біздің блокчейннің тұтастығын қамтамасыз етуде маңызды болатын блоктар тізбегін жасайтын нәрсе.
Хэштер жасау
Әрбір блок алдыңғы блокқа сілтеме жасайды (осылайша, previousHash сипаты). Яғни, әрбір блок хэшті қажет етеді. Хэш саусақ ізіне ұқсас. Ол әр блок үшін ерекшеленеді.
Блоктың хэшін оның барлық мазмұнын хэш функциясы арқылы өткізу арқылы есептеуге болады.
Сонымен, ағымдағы блоктың хэшін есептейтін функцияны іске асырудан бастайық.
Сонымен, Block сыныбында біз accountHash функциясын анықтаймыз:
Дегенмен, SHA256 хэшіне JavaScript қолдау көрсетпейді және оны сыртқы кітапханадан алу керек.
Crypto-js - бұл бірнеше хэш-алгоритмдердің қауіпсіз іске асырылуын қамтитын фантастикалық пакет.
Содан кейін біз оны main.js кодымызға импорттай аламыз.
Енді бізде accountHash() функциямыз бар, оны Блоктың функциясында қолданайық:
Блоктың қалай көрінетінін сипаттағаннан кейін біз блокчейннің қандай болуы керектігін анықтай аламыз. Ендеше жаңа класс құрайық.
Бұл сценарийде блокчейн меншік тізбегі бар өте қарапайым нысан болып табылады. Бұл тізбектегі барлық блоктарды ұстайтын массив.
Блоктарды қоспас бұрын, алдымен «генезистік блок» деп аталатын нәрсені жасауымыз керек. Бұл тізбектегі бірінші блок және ол алдыңғы блокты көрсете алмайтындығымен ерекше (бұл бірінші!).
Сонымен, генезис блогын құру үшін мен классымызға createGenesisBlock () деп аталатын функцияны қосамын. Біздің Blockchain сыныбының Object() { [жергілікті код] } функциясына қайта оралыңыз.
Енді біз жаңа Blockchain данасын құрастырған кезде генезис блогын қоса аламыз:
Блокчейн әдістері
Енді жаңа блоктарды қосу және ең соңғы блокты алу сияқты әрекеттерді орындауға мүмкіндік беретін Blockchain сыныбына әдістерді қосайық.
getLatestBlock функциясы ең қарапайым болып табылады. Ол жай ғана тізбек массивінің соңғы мүшесін қайтарады:
addBlock техникасы азырақ тартылған.
Тізбекке жаңа блокты қоспас бұрын, алдымен сол блоктың алдыңғыХаш өрісін дұрыс орнатуымыз керек.
Ол біздің тізбекке ең соңғы қосылған блоктың хэшіне орнатылуы керек. Біз сондай-ақ жаңа блоктың хэшін есептеуіміз керек:
тестілеу
Біздің MelodyCoin қалай шыққанын көрейік.
Мұны орындау үшін блокчейн данасын жасаңыз. Тағы бірнеше блок қосайық:
Біз онда екі жаңа блок жасадық. Біздің блокчейннің қазіргі уақытта қандай болатынын қарастырайық.
MelodyCoin төрт бос орынмен тізбектеліп, пішімделеді:
Блокчейннің тұтастығын тексеріңіз
Блокчейндер керемет, өйткені блок қосылғаннан кейін оны тізбектің қалған бөлігін жарамсыз етпей өзгерту мүмкін емес.
Дегенмен, мен үшін блокчейннің тұтастығын осы іске асыру арқылы тексерудің ешқандай әдісі жоқ.
Біздің блокчейнге isChainValid функциясын енгізейік. Егер тізбек заңды болса, ол шындықты қайтарады; әйтпесе, ол false мәнін қайтарады:
Тұтастықты тексеру
Енді біз блокчейннің тұтастығын сынақтан өткізе аламыз. Егер біз оны қазір орындасақ, бұл біздің тізбектің шынайы екенін растайды.
Енді біздің блокчейнді өзгертуге тырысайық. 2-блокты өзгертіп, оның мазмұнын қайта жазайық (төрт емес, 100 тиын аудардық делік).
Біз мұны орындаған кезде бағдарламалық жасақтама біздің тізбекті бұзуға күш салғанымызды танитынын көреміз.
Дегенмен, менің бұған араласудың басқа әдісі бар екеніне сене аласыз. Мен блоктағы мазмұнды өзгерттім, бірақ хэшті қайта есептемедім. Сондықтан сіз ақылды болуға тырысып, сол блоктың хэшін қайта есептей аласыз.
Біздің кішкентай блокчейн орнатуымыз үшін барлығы осы болды! Ол бізге жаңа блоктарды қосуға және тізбектегі деректермен бұрмалануды анықтауға мүмкіндік береді.
Біздің шағын блокчейнімізде біз шешуіміз керек екі мәселе бар:
- Заманауи компьютерлер өте жылдам және секундтар ішінде біздің тізбекке мыңдаған блоктарды қоса алады. Біз ешкімнің біздің блокчейнге спам жібергенін қаламаймыз.
- Біздің блокчейн әлі де бұзуға осал. Сіз блоктың мазмұнын жаңарта аласыз, содан кейін барлық келесі блоктар үшін хэштерді (және алдыңғы хэштерді) жай ғана қайта есептей аласыз. Сіз онымен аралассаңыз да, сіз заңды тізбекке ие боласыз.
Осы алаңдаушылықтарды шешу үшін блокчейндер «жұмыс дәлелі» деп аталатын әдісті пайдаланады. Осы тәсілді пайдаланып блок жасау үшін есептеу ресурстарының айтарлықтай көлемін пайдаланғаныңызды көрсетуіңіз керек. Бұл да деп аталады тау-кен ісі.
Жұмысты дәлелдеу блок хэшінің нөлдердің белгілі бір мөлшерінен басталуын талап етеді. Бірақ сіздің хэш осы ережеге сәйкес келетінін қалай білуге болады?
Блоктың мазмұны оның хэшін анықтайды. Сондықтан мазмұнды өзгертпесек, біз әрқашан бірдей хэшті аламыз.
Әрбір блокқа шешім ретінде қосылатын бір реттік мән болуы керек. Бұл біздің блоктың хэші жеткілікті нөлдерден басталғанша жаңартуға болатын кейбір кездейсоқ деректер. Хэш функциясының шығысын өзгерте алмайтындықтан, көптеген әртүрлі комбинацияларды сынап, жақсылыққа үміттену керек.
Blockchain-ге тау-кен ісін енгізіңіз
Блок сыныбымызға nonce қосудан бастайық. Nonce - бұл блок хэшіне әсер ету үшін өзгерте алатын блоктағы жалғыз мән.
Уақыт белгісін немесе деректерді өзгерте алмаймыз.
Әрі қарай, блокты нақты өндіруді жүзеге асыратын mineBlock() функциясын жазайық. Бұл функция параметр ретінде қажетті қиындықты жібереді және біздің блоктың хэші жеткілікті нөлдермен басталғанша орындалуын жалғастырады.
Мен жай ғана хэш жеткілікті нөлдерден басталғанша жұмыс істейтін негізгі while циклін жасадым. Біз қанша нөл қажет екенін анықтау үшін қиындықты пайдаланамыз. 5 қиындығы бар біздің хэш 5 нөлден басталуы керек.
Біздің хэште нөлдер жеткіліксіз болған кезде, біз бір ретті көбейтіп, хэшті қайта есептейміз. Ал егер қиындыққа сәйкес келетін хэшті тапсақ, оны консольге енгіземіз.
Бізге тағы бір нәрсе істеу керек. Біз есептелетін Hash әдісімізде nonnce айнымалы мәнді шынымен есепке алмаймыз, сондықтан мынау:
Блокчейн класы
Осы жаңа тәсілді блокчейн сыныбымызда сынап көрейік және оның қалай өтетінін көрейік.
Бастау үшін мен блокчейннің қиындығын Object() функциясында анықтаймын. Біз оны осында анықтаймыз, өйткені біз оны кейінірек бір жерде пайдалана аламыз.
Содан кейін addBlock функциясы блокты біздің тізбегімізге қоспас бұрын өңдейтіндей етіп өзгертілуі керек.
Blockchain пайдаланыңыз
Енді жаңа блокчейнді жұмысты дәлелдеу алгоритмімен бірге қолданайық. Мұнда бірнеше console.log мәлімдемесін қосыңыз.
Бұл кодты орындаған кезде біз тау-кен өндіру процесі бұдан былай ерекше жылдам емес екенін байқай аламыз.
Алгоритмге үш нөлден басталатын хэштері бар блоктарды жасау үшін біраз уақыт қажет (қиындық бойынша конфигурацияланған).
Осылайша біздің негізгі блокчейн орнатуымыз аяқталды.
Жұмысты дәлелдеу механизмінің арқасында біз блокчейнге жаңа блоктардың қаншалықты жылдам қосылатынын реттей аламыз.
Бұл блокчейндегі ең маңызды қауіпсіздік мүмкіндігі. Енді оның қалай жұмыс істейтінін түсінгеннен кейін, өзіңізді құруға кірісіңіз!
пікір қалдыру