Эгерде биз мурунку бир нече жылдын тенденцияларын карасак, биз блокчейн жөнүндө ар дайым укканбыз, бирок өзгөчөлүктөр жөнүндө көп эмес.
Bitcoin, Ethereum, Dogecoin, Matic жана башкалар сыяктуу криптовалюталар блокчейн технологиясына таянарын баарыбыз билебиз. Блокчейн 2021-жылы көптөгөн тармактарды төңкөрүш кылган маанилүү окуяларды алып келди жана жаңы жетишкендиктерге жол ачты.
Блокчейн - бул маалыматтарды оңдоо, бузуп же алдамчылык кылуу кыйын же мүмкүн болбогон жол менен сактоонун каражаты. Бул транзакциялардын санариптик китеби, алар кайталанган жана блокчейндин компьютер тутумдарынын бүт тармагына жайылат.
Бул дээрлик бардык криптовалюталарды иштеткен эң жаңы маалымат базасы технологиясы. Блокчейн бүт тармакка маалымат базасынын окшош көчүрмөлөрүн жайылтуу менен системаны бузуп же алдоону абдан кыйындатат.
Биткойн азыр blockchain үчүн эң көрүнүктүү колдонуу болуп саналат, ал эми технология абдан кеңири түрдүү тиркемелерди тейлей алат.
Акыркы жылдарда криптовалюталар жана блокчейндер барган сайын популярдуу болуп, бул тенденция улана бермекчи.
Бул окуу куралында биз JavaScript менен жөнөкөй блокчейн жасайбыз. Ал сизге блокчейн кандайча иштээри жөнүндө негизги түшүнүктү берет.
Келгиле, аны MelodyCoin деп атайлы жана аракетке киришели!
Блок түзүү
Баштоо үчүн биз жаңы JavaScript файлын түзөбүз, ага бардык кодубузду жайгаштырабыз.
Келгиле, аны main.js деп атайлы жана блокчейн менен блоктордун кандай көрүнүшү керек экендигин сүрөттөөдөн баштайлы.
Блок классын түзүңүз жана ага баштоо үчүн Object() { [native code] } функциясын бериңиз.
Жаңы блокту түзүүдө датаны жана мурунку блоктун хэштерин беришиңиз керек:
Бул жерде ар бир мүлк үчүн аныктамалар болуп саналат:
- Убакыт белгиси блоктун качан жасалганын көрсөтөт. Сиз каалаган форматты колдоно аласыз (бул учурда UNIX убакыт белгиси).
- Бул блокко туташууну каалаган маалыматтардын каалаган формасы маалымат параметрине киргизилиши мүмкүн. Эгер сиз криптовалюта түзүүнү кааласаңыз, анда жөнөтүүчү/алуучу жана бул жерге которулган акчанын суммасы сыяктуу транзакция маалыматтарын сактай аласыз.
- FrontHash - бул мурунку блоктун хэштерин камтыган сап. Бул кийинчерээк блокчейнибиздин бүтүндүгүн камсыз кылууда маанилүү болгон блоктордун чынжырын жаратат.
Хэштерди түзүү
Ар бир блок мурунку блокко шилтеме берет (ошондуктан мурункуHash касиети). Башкача айтканда, ар бир блок хэшти талап кылат. Хэш манжа изине окшош. Бул ар бир блок үчүн өзүнчө.
Блоктун хэшти анын бардык мазмунун хэш-функция аркылуу өткөрүү менен эсептесе болот.
Ошентип, келгиле, учурдагы блоктун хэштерин эсептеген функцияны ишке ашыруу менен баштайлы.
Ошентип, Block классынын астында биз accountHash функциясын аныктайбыз:
Бирок, SHA256 хэш JavaScript тарабынан колдоого алынбайт жана тышкы китепканадан алынышы керек.
Crypto-js - бул бир нече хэш алгоритмдердин коопсуз ишке ашырылышын камтыган фантастикалык пакет.
Андан кийин биз аны main.js кодубузга импорттой алабыз.
Эми бизде accountHash() функциябыз бар, келгиле, аны Блоктун функциясында колдонолу:
Блок кандай экенин сүрөттөп бергенден кийин, биз Blockchain кандай болушу керектигин аныктай алабыз. Келгиле, жаңы класс түзөлү.
Бул сценарийде блокчейн - бул мүлк чынжырына ээ болгон өтө жөнөкөй объект. Бул чынжырдагы бардык блокторду камтыган массив.
Блокторду кошуудан мурун, биз адегенде "генезис блогу" деп аталган нерсени түзүшүбүз керек. Бул чынжырдагы биринчи блок жана ал мурунку блокту көрсөтө албагандыгы менен өзгөчө (ал биринчи!).
Ошентип, генезис блогун куруу үчүн мен классыбызга createGenesisBlock () деген функцияны кошом. Биздин Blockchain классыбыздын Object() { [түпкү код] } функциясына кайтыңыз.
Эми биз жаңы Blockchain инстанциясын курганда генезис блогун кошо алабыз:
Блокчейн методдору
Эми, келгиле, биздин Blockchain классыбызга жаңы блокторду кошуу жана эң акыркы блокту алуу сыяктуу нерселерди жасоого мүмкүндүк берүүчү ыкмаларды кошолу.
getLatestBlock функциясы эң жөнөкөй. Ал жөн гана чынжыр массивинин акыркы мүчөсүн кайтарат:
addBlock техникасы бир аз көбүрөөк тартылган.
Биздин чынжырга жаңы блок кошуудан мурун, биз адегенде ал блоктун мурункуHash талаасын туура орнотушубуз керек.
Ал чынжырыбызга эң акыркы кошулган блоктун хэшине коюлушу керек. Ошондой эле жаңы блоктун хэштерин эсептешибиз керек:
тестирлөө
Келгиле, биздин MelodyCoin кантип чыкканын карап көрөлү.
Муну ишке ашыруу үчүн blockchain инстанциясын түзүңүз. Дагы бир нече блокторду кошолу:
Биз ал жерде эки жаңы блок жасадык. Келгиле, биздин blockchain азыркы учурда кандай экенин карап көрөлү.
MelodyCoin сапталат жана төрт боштук менен форматталат:
Блокчейндин бүтүндүгүн текшериңиз
Блокчейндер фантастикалык, анткени блок кошулгандан кийин, чынжырдын калган бөлүгүн жараксыз кылбастан, аны өзгөртүүгө болбойт.
Бирок, мен үчүн бул ишке ашыруу менен биздин блокчейндин бүтүндүгүн текшерүүнүн эч кандай ыкмасы жок.
Блокчейнибизге isChainValid функциясын киргизели. чынжыр мыйзамдуу болсо, ал чындыкка кайтып келет; антпесе, ал false кайтарып берет:
Testing Integrity
Эми биз блокчейнибиздин бүтүндүгүн сынай алабыз. Эгер биз аны азыр ишке ашырсак, чынжырыбыздын чыныгы экенин тастыктайт.
Келгиле, азыр биздин блокчейнди бузууга аракет кылалы. Келгиле, 2-блокту өзгөртүп, анын мазмунун кайра жазалы (төрттүн ордуна 100 тыйын котордук дейли).
Муну ишке ашырганыбызда, программа чынжырды бузуу аракетибизди тааный турганын көрө алабыз.
Бирок, мен үчүн бул менен кийлигишүүнүн дагы бир ыкмасы бар деп ишене аласыз. Мен блоктун мазмунун өзгөрттүм, бирок хэшти кайра эсептеген жокмун. Ошентип, сиз акылдуу болууга жана ошол эле блоктун хэштерин кайра эсептөөгө аракет кылсаңыз болот.
Биздин кичинекей блокчейн орнотуубузда ушунусу гана болду! Бул бизге жаңы блокторду кошууга жана чынжыр ичиндеги маалыматтарды бузууну аныктоого мүмкүндүк берет.
Биздин кичинекей блокчейн менен биз чечишибиз керек болгон эки маселе бар:
- Заманбап компьютерлер өтө ылдам жана секунданын ичинде чынжырыбызга миңдеген блокторду кошо алат. Биз эч кимдин биздин блокчейнге спам жөнөтүшүн каалабайбыз.
- Биздин блокчейн дагы эле бурмалоого алсыз. Сиз блоктун мазмунун жаңыртып, андан кийин бардык кийинки блоктор үчүн хэштерди (жана мурунку хэштерди) кайра эсептей аласыз. Эгер сиз аны менен аралаштырсаңыз да, сиз мыйзамдуу чынжырга ээ болосуз.
Бул көйгөйлөрдү чечүү үчүн блокчейндер "иштин далили" деп аталган ыкманы колдонушат. Сиз бул ыкманы колдонуу менен блокту түзүү үчүн эсептөө ресурстарынын олуттуу көлөмүн колдонгонуңузду көрсөтүшүңүз керек. Бул да деп аталат тоо-кен казып алуу.
Иштин далили блоктун хэши нөлдөрдүн белгилүү бир өлчөмү менен башталышын талап кылат. Бирок сиздин хэш бул эрежеге туура келерин кантип биле аласыз?
Блоктун мазмуну анын хэштерин аныктайт. Ошентип, биз мазмунду өзгөртпөсөк, ар дайым бирдей хэшти алабыз.
Ар бир блоктун чечими катары ага кошулбаган мааниси болушу керек. Бул биздин блоктун хэши жетиштүү нөлдөр менен башталганга чейин жаңырта турган кээ бир кокус маалыматтар. Хеш-функциянын чыгышын өзгөртө албагандыктан, көптөгөн ар кандай комбинацияларды сынап, эң жакшысына үмүттөнүшүңүз керек.
Майнингди Blockchain менен тааныштырыңыз
Блок классыбызга nonce кошуу менен баштайлы. Nonce - бул блоктун хэшине таасир этиш үчүн өзгөртө турган биздин блоктун ичиндеги жалгыз маани.
Биз убакыт белгисин же дайындарды өзгөртө албайбыз.
Андан кийин, келгиле, mineBlock() функциясын жазалы, ал блоктун чыныгы казылышын жасайт. Бул функция керектүү кыйынчылыкты параметр катары жөнөтөт жана биздин блоктун хэши жетиштүү нөлдөр менен башталганга чейин аткарыла берет.
Мен жөн гана биздин хэш жетиштүү нөлдөр менен башталганга чейин иштей турган негизги while циклин жасадым. Биз канча нөл керек экенин аныктоо үчүн кыйынчылыкты колдонобуз. 5 кыйынчылыгы менен биздин хэш 5 нөл менен башталышы керек.
Биздин хэште нөлдөрдүн саны жетишсиз болгондо, биз nonceти бирден көтөрүп, хэшти кайра эсептейбиз. Ал эми кыйынчылыкка туура келген хэшти тапсак, аны консолго киргизебиз.
Биз дагы бир нерсе кылышыбыз керек. Биздин accountHash методубузда биз чындыгында nonce өзгөрмөсүн эске албайбыз, ошондуктан бул жерде:
Блокчейн классы
Келгиле, бул жаңы ыкманы биздин блокчейн классыбызда сынап көрөлү жана анын кандай болорун карап көрөлү.
Баштоо үчүн, мен биздин блокчейндин кыйынчылыгын Object() функциясында аныктайм. Биз аны бул жерде аныктайбыз, анткени биз аны кийинчерээк колдоно алабыз.
Андан кийин addBlock функциясы блокту чынжырыбызга кошуудан мурун аны миналагандай өзгөртүлүшү керек.
Blockchain колдонуңуз
Эми, келгиле, жаңы блокчейнибизди ишти далилдөө алгоритми менен колдонолу. Бул жерде бир нече console.log билдирүүлөрүн кошуңуз.
Биз бул кодду ишке ашырууда, биз тоо-кен жараяны мындан ары өзгөчө тез экенин байкоого болот.
Алгоритмдин үч нөл менен башталган хэштери бар блокторду түзүү үчүн бир аз убакыт талап кылынат (кыйынчылык боюнча конфигурациялангандай).
Ошентип, биздин негизги блокчейн орнотуубуз аяктады.
Иштин далили механизминин аркасында биз блокчейнибизге жаңы блоктордун канчалык тез кошуларын жөнгө сала алабыз.
Бул блокчейндеги эң маанилүү коопсуздук өзгөчөлүгү. Эми анын кантип иштээрин түшүнгөнүңүздөн кийин, өзүңүздүн жеке өзүңүздү түзө бериңиз!
Таштап Жооп