Agar biz oldingi bir necha yil tendentsiyalarini ko'rib chiqsak, biz doimo blokcheyn haqida eshitganmiz, lekin o'ziga xosliklar haqida ko'p emas.
Biz hammamiz bilamizki, Bitcoin, Ethereum, Dogecoin, Matic va boshqalar kabi kriptovalyutalar blokcheyn texnologiyasiga tayanadi. Blockchain 2021 yilda ko'plab sohalarda inqilob qilgan muhim voqealarga rahbarlik qildi va yangi yutuqlarga yo'l ochdi.
Blokcheyn - bu ma'lumotlarni tahrirlash, buzish yoki firibgarlik qilish qiyin yoki imkonsiz tarzda saqlash vositasi. Bu ko'paytiriladigan va blokcheynning butun kompyuter tizimlari tarmog'i bo'ylab tarqaladigan tranzaktsiyalarning raqamli kitobidir.
Bu deyarli barcha kriptovalyutalarni quvvatlaydigan ilg'or ma'lumotlar bazasi texnologiyasi. Blockchain ma'lumotlar bazasining bir xil nusxalarini butun tarmoq bo'ylab tarqatish orqali tizimni buzish yoki aldashni nihoyatda qiyinlashtiradi.
Bitcoin hozirda blokcheyn uchun eng mashhur foydalanish bo'lsa-da, texnologiya juda ko'p turli xil ilovalarga xizmat qilishi mumkin.
So'nggi yillarda kriptovalyutalar va blokcheynlar tobora ommalashib bormoqda va bu tendentsiya davom etishi kutilmoqda.
Ushbu qo‘llanmada JavaScript yordamida oddiy blokcheyn yasaymiz. Bu sizga blokcheyn qanday ishlashi haqida asosiy tushuncha beradi.
Keling, uni MelodyCoin deb ataylik va darhol harakatga kirishamiz!
Blok yaratish
Boshlash uchun biz barcha kodlarimizni joylashtirgan yangi JavaScript faylini yaratamiz.
Keling, uni main.js deb ataymiz va blokcheyn va bloklar qanday ko‘rinishini tavsiflashdan boshlaylik.
Blok sinfini yarating va unga boshlash uchun Object() { [native code] } funksiyasini bering.
Yangi blok yaratishda siz sana va oldingi blokning xeshini ko'rsatishingiz kerak:
Bu erda har bir mulk uchun ta'riflar:
- Vaqt tamg'asi blok qachon yaratilganligini ko'rsatadi. Siz tanlagan har qanday formatdan foydalanishingiz mumkin (bu holda UNIX vaqt tamg'asi).
- Ushbu blokga ulanishni istagan har qanday ma'lumot shakli ma'lumotlar parametriga kiritilishi mumkin. Agar siz kriptovalyuta yaratmoqchi bo'lsangiz, jo'natuvchi/oluvchi va bu yerga ko'chirilgan pul miqdori kabi tranzaksiya ma'lumotlarini saqlashingiz mumkin.
- Oldingi Xash - oldingi blokning xeshini saqlaydigan satr. Bu bizning blokcheynimizning yaxlitligini ta'minlashda muhim ahamiyatga ega bo'lgan bloklar zanjirini yaratadi.
Xeshlarni yaratish
Har bir blok oldingi blokga bog'lanadi (shuning uchun oldingiHash xususiyati). Ya'ni, har bir blok xeshni talab qiladi. Xesh barmoq iziga o'xshaydi. Bu har bir blok uchun alohida.
Blokning xeshini uning barcha tarkibini xesh funktsiyasi orqali o'tkazish orqali hisoblash mumkin.
Shunday qilib, keling, joriy blokning xeshini hisoblaydigan funktsiyani amalga oshirishdan boshlaylik.
Shunday qilib, Block klassi ostida biz accountHash funktsiyasini aniqlaymiz:
Biroq, SHA256 xeshi JavaScript tomonidan qo'llab-quvvatlanmaydi va uni tashqi kutubxonadan olish kerak.
Crypto-js - bu bir nechta xesh algoritmlarini xavfsiz amalga oshirishni o'z ichiga olgan ajoyib paket.
Keyin uni main.js kodimizga import qilishimiz mumkin.
Endi bizda accountHash() funksiyamiz bor, keling, uni Blok funksiyamizda ishlatamiz:
Blok qanday ko'rinishini tasvirlab berganimizdan so'ng, biz Blockchain qanday ko'rinishini aniqlashimiz mumkin. Shunday qilib, keling, yangi sinf yarataylik.
Ushbu stsenariyda blokcheyn mulk zanjiriga ega bo'lgan juda oddiy ob'ektdir. Bu zanjirdagi barcha bloklarni o'z ichiga olgan massiv.
Bloklarni qo'shishdan oldin, avvalo "genez bloki" deb nomlanuvchi narsani yaratishimiz kerak. Bu zanjirning birinchi blokidir va u oldingi blokni ko'rsata olmasligi bilan ajralib turadi (bu birinchi!).
Shunday qilib, genezis blokini yaratish uchun men sinfimizga createGenesisBlock () nomli funktsiyani qo'shaman. Blockchain sinfimizning Object() { [native code] } funksiyasiga qayting.
Endi biz yangi Blockchain nusxasini yaratganimizda, genezis blokini kiritishimiz mumkin:
Blokcheyn usullari
Keling, Blockchain sinfimizga yangi bloklar qo'shish va eng so'nggi blokni olish kabi narsalarni qilish imkonini beradigan usullarni qo'shamiz.
getLatestBlock funksiyasi eng asosiy hisoblanadi. Bu shunchaki zanjir massivining oxirgi a'zosini qaytaradi:
AddBlock texnikasi biroz ko'proq ishtirok etadi.
Zanjirimizga yangi blok qo'shishdan oldin, avvalo, ushbu blokning oldingiHash maydonini mos ravishda o'rnatishimiz kerak.
U bizning zanjirimizga eng so'nggi qo'shilgan blokning xeshiga o'rnatilishi kerak. Shuningdek, biz yangi blokning xeshini hisoblashimiz kerak:
Testing
Keling, bizning MelodyCoin qanday chiqqanini ko'rib chiqaylik.
Buni amalga oshirish uchun blokcheyn misolini yarating. Keling, yana ikkita blok qo'shamiz:
U yerda ikkita yangi blok qurdik. Keling, bizning blokcheynimiz hozir qanday ko'rinishini ko'rib chiqaylik.
MelodyCoin to'rtta bo'sh joy bilan o'rnatiladi va formatlanadi:
Blokcheynning yaxlitligini tekshiring
Blokcheynlar ajoyib, chunki blok qo‘shilgandan so‘ng uni zanjirning qolgan qismini bekor qilmasdan o‘zgartirib bo‘lmaydi.
Biroq, bu amalga oshirish bilan blokcheynimizning yaxlitligini tekshirish uchun men uchun hech qanday usul yo'q.
Keling, blokcheynimizga isChainValid funksiyasini kiritaylik. Agar zanjir qonuniy bo'lsa, u haqiqatga qaytadi; aks holda, u false qaytaradi:
Testning yaxlitligi
Endi biz blokcheynning yaxlitligini sinab ko'rishimiz mumkin. Agar biz buni hozir amalga oshirsak, bizning zanjirimiz haqiqiy ekanligini tasdiqlaydi.
Keling, blokcheynimizni buzishga harakat qilaylik. Keling, 2-blokni o'zgartiramiz va uning mazmunini qayta yozamiz (deylik, biz to'rtta o'rniga 100 tanga o'tkazdik).
Buni amalga oshirganimizda, dasturiy ta'minot bizning zanjirni buzishga bo'lgan harakatimizni tan olishini ko'rishimiz mumkin.
Biroq, bu bilan aralashishning yana bir usuli borligiga ishonishingiz mumkin. Men blokdagi tarkibni o'zgartirdim, lekin xeshni qayta hisoblamadim. Shunday qilib, siz aqlli bo'lishga harakat qilishingiz va o'sha blokning xeshini qayta hisoblashingiz mumkin.
Kichkina blokcheyn o'rnatishimiz uchun hammasi shu edi! Bu bizga yangi bloklar qo'shish va zanjirdagi ma'lumotlarga o'zgartirishlar kiritishni aniqlash imkonini beradi.
Bizning kichik blokcheynimizda ikkita muammo bor, ularni hal qilishimiz kerak:
- Zamonaviy kompyuterlar juda tez va bir necha soniya ichida bizning zanjirimizga minglab bloklarni qo'shishi mumkin. Hech kim bizning blokcheynimizga spam yuborishini xohlamasligimiz aniq.
- Bizning blokcheynimiz hali ham buzishga moyil. Siz blokning mazmunini yangilashingiz va keyin barcha keyingi bloklar uchun xeshlarni (va oldingi xeshlarni) oddiygina qayta hisoblashingiz mumkin. Agar siz u bilan aralashsangiz ham, siz qonuniy zanjirga ega bo'lasiz.
Ushbu tashvishlarni bartaraf etish uchun blokcheynlar "ish isboti" deb nomlanuvchi texnikadan foydalanadi. Ushbu yondashuv yordamida blok yaratish uchun katta miqdordagi hisoblash resurslaridan foydalanganingizni ko'rsatishingiz kerak. Bu ham deyiladi kon sanoati.
Ishni isbotlash uchun blokning xeshi ma'lum miqdordagi noldan boshlanishini talab qiladi. Ammo sizning xeshingiz ushbu qoidaga mos kelishini qanday bilish mumkin?
Blokning mazmuni uning xeshini aniqlaydi. Shunday qilib, biz tarkibni o'zgartirmasak, har doim bir xil xeshni olamiz.
Har bir blokda yechim sifatida unga qo'shilgan bo'lmagan qiymat bo'lishi kerak. Bu asosan tasodifiy ma'lumotlar bo'lib, biz blokimiz xeshi yetarlicha noldan boshlanmaguncha yangilashimiz mumkin. Xesh-funktsiyaning chiqishini o'zgartira olmasligingiz sababli, siz juda ko'p turli xil kombinatsiyalarni sinab ko'rishingiz va eng yaxshisiga umid qilishingiz kerak.
Blockchain bilan konchilikni tanishtiring
Keling, Blok sinfimizga nonce kiritishdan boshlaylik. Nonce - bu blok xeshiga ta'sir qilish uchun o'zgartirishimiz mumkin bo'lgan blokimizdagi yagona qiymat.
Biz vaqt tamg'asi yoki ma'lumotlarni o'zgartira olmaymiz.
Keyinchalik, blokni haqiqiy qazib olishni amalga oshiradigan mineBlock() funksiyasini yozamiz. Ushbu funktsiya parametr sifatida kerakli qiyinchilik bilan yuboriladi va blokimiz xeshi yetarli noldan boshlanmaguncha ishlashni davom ettiradi.
Men oddiy while tsiklini yaratdim, u bizning xeshimiz yetarlicha noldan boshlanmaguncha ishlaydi. Qancha nol kerakligini aniqlash uchun qiyinchilikdan foydalanamiz. 5 qiyinchilik bilan bizning xeshimiz 5 noldan boshlanishi kerak.
Bizning xeshimizda nol yetarli bo‘lmasa, biz nonceni birdan oshiramiz va xeshni qayta hisoblaymiz. Va agar biz qiyinchilikka mos keladigan xeshni topsak, uni konsolga kiritamiz.
Biz qilishimiz kerak bo'lgan yana bir narsa bor. Biz accountHash usulimizda nonce o'zgaruvchini hisobga olmaymiz, shuning uchun bu erda:
Blokcheyn klassi
Keling, ushbu yangi yondashuvni blokcheyn sinfimizda sinab ko'raylik va u qanday ketayotganini ko'rib chiqamiz.
Boshlash uchun biz Object() funksiyasida blokcheyn qiyinligini aniqlayman. Biz uni bu erda aniqlaymiz, chunki biz undan keyinroq foydalanishimiz mumkin.
Keyin addBlock funktsiyasi blokni zanjirimizga qo'shishdan oldin uni minalash uchun o'zgartirilishi kerak.
Blockchain-dan foydalaning
Keling, yangi blokcheynimizni ishni isbotlash algoritmi bilan ishlatamiz. Bu erda bir nechta console.log bayonotlarini qo'shing.
Ushbu kodni amalga oshirganimizda, qazib olish jarayoni endi ayniqsa tez emasligini kuzatishimiz mumkin.
Algoritm uchta noldan boshlanadigan xeshli bloklarni yaratish uchun biroz vaqt talab etiladi (qiyinchilik bo'yicha tuzilgan).
Shunday qilib, bizning asosiy blokcheyn sozlamalarimiz tugadi.
Ishni isbotlash mexanizmi tufayli biz blokcheynimizga yangi bloklar qanchalik tez qo'shilishini tartibga solishimiz mumkin.
Bu blokcheynlardagi eng muhim xavfsizlik xususiyati. Va endi bu qanday ishlashini tushunganingizdan so'ng, o'zingizni yaratishga kirishing!
Leave a Reply