Агар мо ба тамоюлҳои солҳои қаблӣ назар кунем, мо ҳама вақт дар бораи blockchain шунидаем, аммо на дар бораи мушаххасот.
Мо ҳама медонем, ки cryptocurrencies ба монанди Bitcoin, Ethereum, Dogecoin, Matic ва дигарон ба технологияи blockchain такя мекунанд. Blockchain рӯйдодҳои муҳимеро пеш бурд, ки дар соли 2021 дар соҳаҳои сершумор инқилоб карданд ва роҳро барои дастовардҳои нав кушод.
Blockchain як воситаи нигоҳдории додаҳоест, ки таҳрир, ҳакерӣ ё қаллобӣ душвор ё ғайриимкон аст. Ин як китоби рақамии транзаксияҳо мебошад, ки такрор карда мешаванд ва дар тамоми шабакаи системаҳои компютерии blockchain паҳн мешаванд.
Ин технологияи асосноки пойгоҳи додаҳост, ки амалан ҳамаи криптовалютҳоро қудрат медиҳад. Blockchain тавассути паҳн кардани нусхаҳои якхелаи пойгоҳи додаҳо дар тамоми шабака ҳакерӣ ё фиреб додани системаро бениҳоят мушкил мекунад.
Дар ҳоле ки Bitcoin ҳоло маъмултарин истифода барои blockchain аст, технология метавонад ба барномаҳои хеле васеъ хидмат расонад.
Криптовалютҳо ва блокчейнҳо дар солҳои охир бештар маъмул гаштанд ва интизор меравад, ки ин тамоюл идома ёбад.
Мо дар ин дарс як blockchain оддӣ бо JavaScript месозем. Он ба шумо фаҳмиши асосӣ дар бораи чӣ гуна кор кардани blockchain медиҳад.
Биёед онро MelodyCoin номида, фавран ба амал шурӯъ кунем!
Эҷоди блок
Барои оғоз, мо як файли нави JavaScript эҷод мекунем, ки дар он ҳамаи кодҳои худро ҷойгир мекунем.
Биёед онро main.js меномем ва бо тавсифи он, ки блокчейн ва блокҳо чӣ гуна бояд назар кунанд, оғоз кунем.
Синфи Block эҷод кунед ва ба он функсияи Object() { [коди модарӣ] } -ро диҳед, то аз он оғоз кунед.
Ҳангоми сохтани блоки нав шумо бояд сана ва хэши блоки қаблиро диҳед:
Инҳоянд таърифҳо барои ҳар як амвол:
- Тамғаи вақт нишон медиҳад, ки кай блок сохта шудааст. Шумо метавонед ҳар формати интихобкардаатонро истифода баред (дар ин ҳолат тамғаи вақт UNIX).
- Ҳама гуна шакли маълумоте, ки шумо мехоҳед ба ин блок пайваст шавед, метавонад ба параметри додаҳо дохил карда шавад. Агар шумо хоҳед, ки cryptocurrency эҷод кунед, шумо метавонед маълумоти муомилотро, ба монанди ирсолкунанда/қабулкунанда ва маблағи пули ин ҷо интиқолшударо нигоҳ доред.
- FrontHash сатрест, ки хэши блоки қаблиро нигоҳ медорад. Ин аст он чизе, ки занҷири блокҳоро тавлид мекунад, ки баъдтар дар таъмини якпорчагии блокчейни мо муҳим хоҳад буд.
Эҷоди хэшҳо
Ҳар як блок ба блоки қаблӣ пайваст мешавад (ҳамин тавр моликияти қаблииHash). Яъне, ҳар як блок ҳашро талаб мекунад. Ҳаш ба изи ангушт монанд аст. Он барои ҳар як блок фарқ мекунад.
Хеши блокро тавассути гузаронидани тамоми мундариҷаи он тавассути функсияи hash ҳисоб кардан мумкин аст.
Пас, биёед бо иҷрои функсияе оғоз кунем, ки хэши блоки ҷорӣро ҳисоб мекунад.
Ҳамин тавр, дар зери синфи Block, мо функсияи accountHash -ро муайян мекунем:
Аммо, hash SHA256 аз ҷониби JavaScript дастгирӣ намешавад ва бояд аз китобхонаи беруна дастрас карда шавад.
Crypto-js як бастаи афсонавӣ аст, ки татбиқи бехатари якчанд алгоритмҳои хэшро дар бар мегирад.
Пас мо метавонем онро ба коди main.js-и худ ворид кунем.
Акнун, ки мо функсияи accountHash()-и худро дорем, биёед онро дар функсияи Блоки худ истифода барем:
Пас аз тавсифи чӣ гуна будани Блок, мо метавонем муайян кунем, ки Blockchain чӣ гуна бошад. Пас биёед як синфи нав эҷод кунем.
Дар ин сенария, blockchain як объекти хеле соддаест, ки занҷири амвол дорад. Ин массивест, ки ҳамаи блокҳоро дар занҷир нигоҳ медорад.
Пеш аз он ки мо блокҳоро илова кунем, мо бояд аввал чизеро эҷод кунем, ки ҳамчун "блоки генезис" маълум аст. Ин аввалин блок дар занҷир аст ва он беназир аст, ки он наметавонад ба блоки қаблӣ ишора кунад (ин аввалин аст!).
Ҳамин тавр, барои сохтани блоки генезис, ман ба синфи худ як функсияро бо номи createGenesisBlock () илова мекунам. Бозгашт ба функсияи Object() { [рамзи модарӣ] } синфи Blockchain мо.
Ҳоло мо метавонем блоки генезисро ҳар вақте, ки як намунаи нави Blockchain бунёд кунем, дохил кунем:
Усулҳои Blockchain
Акнун, биёед усулҳои синфи Blockchain-ро илова кунем, ки ба мо имкон медиҳанд корҳоеро иҷро кунем, ба монанди илова кардани блокҳои нав ва гирифтани блоки охирин.
Функсияи getLatestBlock соддатарин аст. Он танҳо узви ниҳоии массиви занҷирро бармегардонад:
Техникаи addBlock каме бештар ҷалб карда мешавад.
Пеш аз он ки мо блоки навро ба занҷири худ илова кунем, мо бояд аввал майдони қаблии Hash-и ин блокро дуруст танзим кунем.
Он бояд ба хэши блоки охирин иловашуда ба занҷири мо муқаррар карда шавад. Мо инчунин бояд хэши блоки навро ҳисоб кунем:
Озмоиши
Биёед бубинем, ки MelodyCoin-и мо чӣ гуна баромад.
Барои иҷрои ин як мисоли blockchain эҷод кунед. Биёед боз якчанд блок илова кунем:
Мо дар он чо ду блоки нав сохтем. Биёед бубинем, ки blockchain мо ҳоло чӣ гуна аст.
MelodyCoin бо чор фосила сатр ва формат карда мешавад:
Беайбии Blockchain-ро тафтиш кунед
Блокчейнҳо афсонавӣ мебошанд, зеро вақте ки блок илова карда мешавад, онро бе эътибори боқимондаи занҷир тағир додан мумкин нест.
Аммо, барои ман ягон усули тафтиш кардани якпорчагии блокчейни мо бо ин татбиқ вуҷуд надорад.
Биёед функсияи isChainValid-ро ба blockchain мо ҷорӣ кунем. Агар занҷир қонунӣ бошад, он ҳақиқӣ бармегардад; дар акси ҳол, он бардурӯғ бармегардад:
Санҷиши якпорчагӣ
Ҳоло мо метавонем якпорчагии blockchain-и худро ба озмоиш гузорем. Агар мо онро ҳоло иҷро кунем, он тасдиқ мекунад, ки занҷири мо ҳақиқӣ аст.
Биёед ҳоло кӯшиш кунем, ки блокчейни худро вайрон кунем. Биёед блоки 2-ро тағир диҳем ва мундариҷаи онро аз нав нависед (фарз мекунем, ки мо ба ҷои чор танга 100 танга интиқол додаем).
Вақте ки мо инро иҷро мекунем, мо мебинем, ки нармафзор кӯшиши моро барои вайрон кардани занҷир эътироф мекунад.
Бо вуҷуди ин, шумо метавонед бовар кунед, ки роҳи дигаре барои дахолат кардан бо ин вуҷуд дорад. Ман мундариҷаи блокро тағир додам, аммо хэшро аз нав ҳисоб накардам. Ҳамин тавр, шумо метавонед кӯшиш кунед, ки оқилона бошед ва хэши ҳамон блокро аз нав ҳисоб кунед.
Ин ҳама чизест, ки барои танзими блокчейнҳои ночизи мо буд! Он ба мо имкон медиҳад, ки блокҳои нав илова кунем ва тағир додани маълумотро дар дохили занҷир ошкор кунем.
Дар blockchain хурди мо ду масъала вуҷуд дорад, ки мо бояд онҳоро ҳал кунем:
- Компютерҳои муосир хеле зуданд ва метавонанд дар тӯли сонияҳо ба занҷири мо ҳазорҳо блок илова кунанд. Мо бешубҳа намехоҳем, ки касе блокчейни моро спам кунад.
- Блокчейни мо то ҳол ба таҳқир осебпазир аст. Шумо метавонед мундариҷаи блокро навсозӣ кунед ва пас танҳо хэшҳоро (ва хэшҳои қаблиро) барои ҳамаи блокҳои зерин аз нав ҳисоб кунед. Ҳатто агар шумо бо он бесарусомонӣ кунед, шумо бо занҷири қонунӣ хотима хоҳед ёфт.
Барои ҳалли ин нигарониҳо, blockchainҳо усулеро истифода мебаранд, ки бо номи "далели кор" маъруф аст. Шумо бояд нишон диҳед, ки шумо миқдори зиёди захираҳои ҳисоббарориро барои сохтани блок бо истифода аз ин равиш истифода кардаед. Инро низ меноманд истихроҷи.
Исботи кор талаб мекунад, ки хэши блок бо миқдори муайяни сифрҳо оғоз шавад. Аммо чӣ гуна шумо метавонед донед, ки ҳеши шумо ба ин қоида мувофиқат мекунад?
Мундариҷаи блок хэши онро муайян мекунад. Ҳамин тавр, мо ҳамеша ҳамон хэшро мегирем, ба шарте ки мундариҷаро тағир надиҳем.
Ҳар як блок бояд ҳамчун як ҳалли он арзиши ғайриманқул дошта бошад. Ин аслан баъзе маълумоти тасодуфӣ аст, ки мо метавонем то он даме, ки хэши блоки мо бо сифрҳои кофӣ оғоз нашавад, навсозӣ кунем. Азбаски шумо наметавонед натиҷаи функсияи hash-ро тағир диҳед, шумо бояд бисёр комбинатсияҳои гуногунро санҷед ва ба беҳтарин умед гузоред.
Miningро ба Blockchain муаррифӣ кунед
Биёед бо дохил кардани як нонс ба синфи Блоки мо оғоз кунем. Nonce арзиши ягона дар дохили блоки мост, ки мо метавонем онро барои таъсир ба хэши блок тағир диҳем.
Мо наметавонем тамғаи вақт ё маълумотро тағир диҳем.
Минбаъд, биёед функсияи mineBlock()-ро нависем, ки истихроҷи воқеии блокро иҷро мекунад. Ин функсия мушкилии лозимиро ҳамчун параметр фиристода мешавад ва то он даме, ки хэши блоки мо бо сифрҳои кофӣ оғоз нашавад, иҷроишро идома медиҳад.
Ман танҳо як ҳалқаи асосии while сохтам, ки то он даме, ки хэши мо бо сифрҳои кофӣ оғоз нашавад, кор мекард. Мо душвориро барои муайян кардани чанд сифр истифода мебарем. Бо душвории 5, хэши мо бояд бо 5 сифр оғоз шавад.
Вақте ки хэши мо сифрҳои кофӣ надорад, мо ноансро як ба як боло мебарем ва хэшро аз нав ҳисоб мекунем. Ва агар мо ҳашеро пайдо кунем, ки ба душворӣ мувофиқат кунад, мо онро ба консол ворид мекунем.
Боз як чизи дигаре ҳаст, ки мо бояд кунем. Мо аслан тағирёбандаи ғайрифаъолро дар усули ҳисобкунии худ ба инобат намегирем, бинобар ин ин аст:
Синфи blockchain
Биёед ин равиши навро дар синфи blockchain худ озмоиш кунем ва бубинем, ки он чӣ гуна мегузарад.
Барои оғоз, ман душвории блокчейни моро дар функсияи Object() муайян мекунам. Мо онро дар ин ҷо муайян мекунем, зеро мо метавонем онро дар ҷое баъдтар истифода барем.
Функсияи addBlock бояд тавре тағир дода шавад, ки пеш аз илова кардани он ба занҷири мо блокро мина кунад.
Blockchain-ро истифода баред
Акнун биёед блокчейни нави худро бо алгоритми исботи кор истифода кунем. Дар ин ҷо, якчанд изҳороти console.log илова кунед.
Вақте ки мо ин кодро иҷро мекунем, мо мушоҳида карда метавонем, ки раванди истихроҷи маъдан дигар босуръат нест.
Барои тавлиди блокҳо бо хэшҳо, ки бо се сифр оғоз мешаванд (тавре ки аз рӯи душворӣ танзим карда мешавад) алгоритми муайян вақт лозим аст.
Ҳамин тавр, ин анҷоми танзими асосии blockchain мо буд.
Мо метавонем танзим кунем, ки ба туфайли механизми исботи кор то чӣ андоза блокҳои нав ба blockchain мо илова карда мешаванд.
Ин муҳимтарин хусусияти амниятӣ дар blockchain аст. Ва акнун, ки шумо фаҳмед, ки он чӣ гуна кор мекунад, ба эҷоди худ шурӯъ кунед!
Дин ва мазҳаб