Har bir blokda indeks, vaqt tamg'asi (unix vaqti), tranzaktsiyalar ro'yxati, isbot va
oldingi blokning xeshlari mavjud.
Mana bitta blok qanday ko'rinishiga misol:
Shu nuqtada, zanjirning g'oyasi aniq bo'lishi kerak -
har bir yangi blok oldingi
blokning xeshini o'z ichiga oladi.
Bu juda muhim,
chunki bu blokcheynga
o'zgarmasligini beradi: agar tajovuzkor zanjirdagi oldingi blokni buzsa, keyingi barcha
bloklarda noto'g'ri xeshlar mavjud.
1.6. Blokka tranzaktsiyalar qo'shish
Usul blokga tranzaktsiyalarni qo'shish uchun javobgar bo'ladi
new_transaction():
2-rasm. new_transaction() usuli
new_transaction() tranzaktsiyani ro'yxatga qo'shgandan so'ng,
u tranzaktsiya
qo'shiladigan blok indeksini qaytaradi, ya'ni keyingi almashtiriladigan (yaratilgan) blok.
Kelajakda bu tranzaktsiyani yuborayotgan foydalanuvchi uchun foydali bo'ladi.
1.7. Yangi bloklarni yaratish
Blokcheyn namunasi yaratilgandan so'ng, unga genezis
blokini kiritish kerak -
o'tmishdoshlari bo'lmagan birinchi blok. Bundan tashqari, ushbu genezis blokiga "dalil"
qo'shish kerak bo'ladi, bu konchilik (yoki bajarilgan ishni tasdiqlash) natijasidir. Biz
keyinroq qazib olishni ko'rib chiqamiz.
Konstruktorda
genezis
blokini
yaratishdan
tashqari,
biz
new_block(),
new_transaction() va hash() usullarini ham yozamiz:
Blokcheyn prototipi skeleti bilan deyarli bajarildi.
Endi yangi bloklar qanday
yaratilganligini bilib olaylik.
1.8. Tugallangan ishni tasdiqlash algoritmi
Proof of Work (PoW) algoritmi - bu blokcheynda yangi bloklar qanday yaratilishi
yoki "qazib olinishi". PoW ning maqsadi muammoni hal qiladigan raqamni topishdir.
Raqam shunday bo'lishi kerakki, uni topish qiyin, lekin tarmoqdagi har kim tomonidan
tekshirish oson (hisob-kitoblar haqida gapirganda). Bu algoritmning asosiy vazifasi.
Yaxshiroq fikr olish uchun oddiy misolni ko'rib chiqaylik.
X sonining boshqa songa ko'paytirilgan xeshi nol bilan tugashi kerak.
Shunday
qilib, hash(x * y) = ac23dc...0.
Soddalashtirilgan misol uchun,
aytaylik, x = 5. Bu
Pythonda qanday ishlaydi:
1 from hashlib import sha256
2
3 x = 5
4 y = 0 # Biz hali ham
y ning nimaga teng ekanligini bilmaymiz
5 while sha256(f'{x*y}'.encode()).hexdigest()[-1] != "0":
6 y += 1
7
8 print(f'The solution is y = {y}')
Bu erda yechim quyidagicha: y = 21. Olingan xesh nol bilan tugashi uchun:
hash(5 * 21) = 1253e9373e...5e3600155e860
Dostları ilə paylaş: