Kodning 200 satrida blokchain

Blokchainning asosiy kontseptsiyasi juda oddiy: doimiy ravishda o'sib borayotgan buyurtmalar ro'yxatini saqlab turadigan taqsimlangan ma'lumotlar bazasi. Shu bilan birga, aralashtirish juda oson, chunki odatda biz blockchainlar haqida gaplashganda, ular bilan yechishga harakat qilayotgan muammolarimiz haqida ham gaplashamiz. Bitcoin va Ethereum kabi mashhur blockchain-ga asoslangan loyihalarda bu holat. "Blokchain" atamasi odatda bitimlar, aqlli shartnomalar yoki cryptocurrencies kabi tushunchalar bilan kuchli bog'liq.

Bu blokchainni tushunishni, albatta, kerak bo'lgandan ko'ra ko'proq qiyin vazifa qilib qo'yadi. Ayniqsa manba-kod oqilona. Bu erda men NaiveChain deb nomlangan Javascriptning 200 satrida amalga oshirgan juda oddiy oddiy blockchaindan o'taman.

Blok tuzilishi

Birinchi mantiqiy qadam - blokning tuzilishini hal qilish. Ishlarni iloji boricha sodda qilish uchun biz faqat eng kerakli narsalarni: indeks, vaqt belgisi, ma'lumotlar, xesh va oldingi xeshlarni o'z ichiga olamiz.

Zanjirning yaxlitligini saqlab qolish uchun oldingi blokning xeshini blokda topish kerak

Blok-xesh

Ma'lumotlarning yaxlitligini saqlash uchun blokni tozalash kerak. Blok tarkibiga SHA-256 olinadi. Shuni ta'kidlash kerakki, ushbu hashning "konchilik" ga hech qanday aloqasi yo'q, chunki "Ishni isbotlash" muammosi mavjud.

Blok yaratish

Blokni yaratish uchun avvalgi blokning xeshini bilishimiz va kerakli tarkibning qolgan qismini (= indeks, xesh, ma'lumotlar va vaqt belgilari) yaratishimiz kerak. Bloklash ma'lumotlari - bu oxirgi foydalanuvchi tomonidan ta'minlanadigan narsa.

Bloklarni saqlash

Blokchainni saqlash uchun xotirada Javascript massividan foydalaniladi. Blok-blokning birinchi bloki har doim qattiq kodlangan "genezis-blok" deb nomlanadi.

Bloklarning yaxlitligini tekshirish

Istalgan vaqtda blok yoki zanjir yaxlitligi nuqtai nazaridan haqiqiyligini tekshirish imkoniyatiga ega bo'lishimiz kerak. Bu, ayniqsa, biz boshqa tugunlardan yangi bloklarni olganimizda va ularni qabul qilish-qilmaslikni hal qilishda to'g'ri.

Eng uzun zanjirni tanlash

Har doim ma'lum bir vaqtda zanjirda faqat bitta aniq bloklar to'plami bo'lishi kerak. Qarama-qarshiliklar yuzaga kelganda (masalan, ikkala tugun ikkalasi ham blok raqami 72 ni yaratadi) biz eng uzun bloklar zanjirini tanlaymiz.

Boshqa tugunlar bilan aloqa qilish

Tugunning ajralmas qismi blokchainni boshqa tugunlar bilan almashish va sinxronlashtirishdir. Tarmoqni sinxronlashtirish uchun quyidagi qoidalar qo'llaniladi.

  • Tugun yangi blokni yaratganda, uni tarmoqqa uzatadi
  • Tugun yangi tengdoshga ulanganda u oxirgi blokni so'raydi
  • Tugma joriy ma'lum blokdan kattaroq indeksga ega bo'lgan blokga duch kelganda, u blokni hozirgi oqim zanjiriga qo'shadi yoki to'liq blockchain uchun so'rovlarga javob beradi.
Ba'zi bir odatiy aloqa stsenariylari tugunlar tavsiflangan protokolga rioya qilganidan keyin paydo bo'ladi

Avtomatik tengdosh kashfiyoti ishlatilmaydi. Tengdoshlarning joylashuvi (= URL) qo'l bilan qo'shilishi kerak.

Tugunni boshqarish

Foydalanuvchi tugunni qandaydir tarzda boshqarishi kerak. Bu HTTP serverini sozlash orqali amalga oshiriladi.

Ko'rinib turibdiki, foydalanuvchi tugun bilan quyidagi yo'llar bilan o'zaro aloqa o'rnatishi mumkin:

  • Barcha bloklarni ro'yxatlang
  • Foydalanuvchi tomonidan berilgan tarkibga ega yangi blok yarating
  • Tengdoshlarni ro'yxatlang yoki qo'shing

Tugunni boshqarishning eng oddiy usuli, masalan. Curl bilan:

# tugunning barcha bloklarini belgilang
curl http: // localhost: 3001 / bloklar

Arxitektura

Shuni ta'kidlash kerakki, tugun aslida ikkita veb-serverni ta'sir qiladi: biri foydalanuvchini (HTTP-server) boshqarish va tugunlar o'rtasidagi tengdosh aloqasi uchun (biri. HTTP serverlari).

NaiveChain-ning asosiy tarkibiy qismlari

Xulosa

NaiveChain ko'rgazma va o'quv maqsadlari uchun yaratilgan. U "kon" algoritmiga ega emasligi sababli (PoS of PoW) undan jamoat tarmog'ida foydalanib bo'lmaydi. Shunga qaramay, u blockchain-ning ishlashi uchun asosiy xususiyatlarni amalga oshiradi.

Qo'shimcha texnik ma'lumotlar uchun Github omborini tekshirishingiz mumkin.

Agar siz blockchainlar haqida ko‘proq bilmoqchi bo‘lsangiz, Naivecoin-ni tekshirishingizni maslahat beraman: cryptocurrency qurish uchun qo'llanma. Ushbu darsda biz, masalan, haqida ko'proq gaplashamiz. qazib olish (dalillarni tasdiqlash), bitimlar va hamyon.