Keling, eng ingichka blokchainni yarataylik

50 satrdan ozroq Python

Izoh: Ushbu qismning 2-qismini bu erda topish mumkin.

Ba'zilar blockchain - bu muammolarni kutayotgan yechim, deb o‘ylashsa-da, ushbu yangi texnologiya hisob-kitoblarning mo‘jizasi ekaniga shubha yo‘q. Ammo, aniq bir blockchain nima?

Blockchain

bitcoin yoki boshqa cryptocurrency-da amalga oshirilgan bitimlar xronologik va ommaviy yozilgan raqamli daftar.

Umuman olganda, bu ochiq ma'lumotlar bloki deb nomlangan konteynerda saqlanadigan va o'tmishda qo'shilgan ma'lumotlarga ega bo'lgan o'zgarmas zanjirga (shu sababli blockchain) qo'shiladigan ochiq ma'lumotlar bazasi. Bitcoin va boshqa cryptocurrencies holatida ushbu ma'lumotlar bitimlar guruhidir. Albatta, ma'lumotlar har qanday ko'rinishda bo'lishi mumkin, albatta.

Blockchain texnologiyasi Bitcoin va Litecoin kabi markaziy hokimiyat tomonidan chiqarilgan yoki boshqarilmaydigan yangi, to'liq raqamli valyutalarni paydo bo'lishiga olib keldi. Bu bugungi bank tizimlari firibgar yoki muvaffaqiyatsizlikka uchragan deb ishonadiganlarga yangi erkinlik olib keladi. Blockchain shuningdek aqlli kontraktlar kabi qiziqarli tushunchalarni taqdim etgan Ethereum kabi texnologiyalar shaklida tarqatilgan kompyuterlarni inqilob qildi.

Ushbu maqolada men Python 2 kodining 50 tadan kam satrida oddiy blockchain yarataman. Uni SnakeCoin deb atashadi.

Avval bloklarimizning ko'rinishini aniqlashdan boshlaymiz. Blokchainda har bir blok vaqt belgisi va ixtiyoriy ravishda indeks bilan saqlanadi. SnakeCoin-da ikkalasini ham saqlamoqchimiz. Va blockchain butunligini ta'minlashga yordam berish uchun har bir blokda o'z-o'zini tanib oladigan hash bo'ladi. Bitcoin singari, har bir blokning xeshi blokning indekslari, vaqt belgilari, ma'lumotlar va oldingi blokning xeshining kriptografik xeshlari bo'ladi. Oh, va ma'lumotlar siz xohlagan narsaga aylanishi mumkin.

Ajoyib! Bizda blok tuzilishimiz bor, lekin biz blockchain yaratmoqdamiz. Bloklarni haqiqiy zanjirga qo'shishni boshlashimiz kerak. Yuqorida aytib o'tganimdek, har bir blok oldingi blokdan ma'lumotlarni talab qiladi. Ammo aytilgan holda, savol tug'iladi: blockchaindagi birinchi blok qanday qilib u erga boradi? Xo'sh, birinchi blok yoki genezis bloki - bu maxsus blok. Ko'p hollarda, u qo'lda qo'shiladi yoki uni qo'shishga imkon beradigan noyob mantiqqa ega.

Biz osonlashtirishi uchun shunchaki genezis blokini qaytaradigan funktsiyani yaratamiz. Ushbu blok 0 indeksiga ega va u o'zboshimchalik bilan ma'lumot qiymati va "oldingi hash" parametrida o'zboshimchalik qiymatiga ega.

Endi biz genezis blokini yaratishga qodir ekanmiz, blockchain-da muvaffaqiyatli bloklarni yaratadigan funktsiyaga muhtojmiz. Ushbu funktsiya parametr sifatida zanjirdagi oldingi blokni oladi, blok yaratilishi uchun ma'lumot yaratadi va tegishli ma'lumot bilan yangi blokni qaytaradi. Yangi bloklar oldingi bloklardan ma'lumotlarni o'chirib tashlaganlarida, har bir yangi blokchainning yaxlitligi oshadi. Agar biz buni qilmagan bo'lsak, tashqi tomon uchun "o'tmishni o'zgartirish" va zanjirimizni butunlay yangisini almashtirish osonroq bo'lar edi. Ushbu xeshlar zanjiri kriptografik isbot sifatida ishlaydi va blokchainga blok qo'shilgandan so'ng uni almashtirish yoki olib tashlash mumkin emasligini ta'minlashga yordam beradi.

Bu ko'p mehnat. Endi biz blockchainni yaratamiz! Bizning holatda, blockchainning o'zi oddiy Python ro'yxati. Ro'yxatning birinchi elementi genezis blokidir. Va albatta, biz muvaffaqiyatli bo'lgan bloklarni qo'shishimiz kerak. SnakeCoin eng ingichka blockchain bo'lgani uchun, biz faqat 20 ta yangi blokni qo'shamiz. Biz buni loop yordamida amalga oshirishimiz mumkin.

Keling, nima qilganimizni sinab ko'raylik.

Xavotir olmang. 20 gacha boradi.

Biz boramiz! Bizning blockchain ishlaydi. Agar siz konsolda qo'shimcha ma'lumotni ko'rishni istasangiz, siz to'liq manbali faylni tahrirlashingiz va har bir blok vaqt belgisini yoki ma'lumotlarini chop etishingiz mumkin.

Bu SnakeCoin taklif qiladigan barcha narsalar. SnakeCoin shkalasini bugungi ishlab chiqarish bloklari hajmiga moslashtirish uchun biz bir nechta mashinalardagi zanjirdagi o'zgarishlarni kuzatib borish uchun server qatlami va qo'shimcha ravishda qo'shilgan bloklar miqdorini cheklash uchun ishlaydigan algoritm kabi qo'shimcha funktsiyalarni qo'shishimiz kerak. berilgan vaqt davri.

Agar ko'proq texnik ma'lumot olishni istasangiz, Bitcoin-ning asl nusxasini bu erda ko'rishingiz mumkin. Omad tilaymiz va baxtli xakerlik!

Izoh: Ushbu qismning 2-qismini bu erda topish mumkin.

O'qiganingiz uchun katta rahmat!

Twitter, Github, Snapchat, Instagram