newHashList.append(hash2(hashList[-1], hashList[-1]))
return merkle(newHashList)
def hash2(a, b):
# Reverse inputs before and after hashing
# due to big-endian / little-endian nonsense
a1 = a.decode('hex')[::-1]
b1 = b.decode('hex')[::-1]
h = hashlib.sha256(hashlib.sha256(a1 + b1).digest()).digest()
return h[::-1].encode('hex')
Endi Bitcoinda nima uchun kerakligi haqida. Agar siz bitta
tranzaksiyani o'zgartirsangiz
ham, u holda merkle_root ham o'zgaradi.
Shuning uchun bunday
ma'lumotlar tuzilmasi blokdagi
tranzaksiyalarni "qalbakilashtirilmagan" bo'lishini ta'minlashga imkon
beradi. Ya'ni, quyidagi
vaziyat yuzaga kelishi mumkin emas:
Ba'zi maynerlar yangi blokni topib, uni tarmoqqa tarqata boshlaydilar.
Bu vaqtda
tajovuzkor blokni ushlaydi va masalan, ba'zi bir tranzaksiyalarni
blokdan o'chirib tashlaydi va
keyin o'zgartirilgan blokni boshqalarga tarqatadi.
Tekshirish uchun merkle_root-ni o'zingiz hisoblashingiz va blok
sarlavhasida yozilgani
bilan taqqoslashingiz kifoya.
SPV
Bu yerda, birinchidan, bunday qiyinchiliklar(ko’p hisoblashlar, amallar)
mutlaqo foydasiz
deb aytishingiz mumkin. Ya’ni blokidagi barcha tranzaksiyalar
yig'indisining xeshni
hisoblashning o’zi kifoya deyishingiz mumkin:
txns_hash = SHA256
(SHA256 (sum (txns)))),
chunki bu usul ham har qanday qalbikilashtirishdan himoyalay oladi.
Va, ikkinchidan,
tajovuzkorning blokdagi merkle_root-ni o'zgartirishiga nima halaqit
beradi? Ikkinchi savolga
javob: aslida blokda hech narsani o'zgartirish mumkin emas,
chunki
blok darhol yaroqsiz holga
keladi (buni keyingi ma’ruzani(mayningni) o'qiganingizdan so'ng
tushunasiz).
Merkle daraxti esa SPV (Simplified Payment Verification
(soddalashtirilgan to'lovni
tasdiqlash))
–
uzellarni yaratish uchun zarurdir. Bunday uzellar
tranzaksiyalarsiz faqat blok
sarlavhalarini sinxronizatsiya qiladi. Natijada, blok zanjiri xotiradan
kamroq joy egallaydi (misol
uchun 500000 ta blokni olaylik, sarlavha hajmi aniq - 80 bayt):
500.000 * 80 / 1024 / 1024 ≈ 40 Mb
Bunday blokcheyn allaqachon
telefonga, planshetga yoki ba'zi bir IOT-
larga osonlikcha
joylashishi mumkin.
Soddalashtirilgan to'lovni tekshirishning mohiyati quyidagicha: sizda
SPV uzeli bor deb
faraz qilaylik. Menda to’liq blokcheyn bor va men sizni
haqiqatan ham
biron bir tranzaktsiya sodir
bo'lganligiga ishontirishim kerak (rasmda bu K tranzaksiya). Bunday
holda, men
sizga bir nechta
xeshlarni berishim kerak: H_L, H_IJ, H_MNOP, H_ABCDEFGH. Ular
autentifikatsiya
yo'li(authentication path) deb ham ataladi.
Shundan so'ng siz avval H_K = SHA256 (SHA256 (K)), so'ngra H_KL =
SHA256
(SHA256 (H_K + H_L)) va boshqalarni hisoblaysiz. Agar oxirida siz bir xil
Mayning
Mayning (ingliz tilidan
mining
- konchilik) - bu taqsimlanagan
platformani qo’llab
quvvatlash va turli xil kriptovalyutalarda, xususan Bitcoin-da yangi
ishlab
chiqarilgan bitcoinlar
va komissiya to'lovlari shaklida mukofot olish uchun yangi bloklarni
yaratish faoliyati. Amalga
oshirilgan hisob-kitoblar bir xil valyuta birliklarining qayta
sarflanishidan himoya qilish uchun
talab qilinadi, mayning va emissiya o'rtasidagi bog'liqlik
odamlarni(maynerlarni) o’zlarining
hisoblash quvvatlarini sarflashga va kriptovalyuta tarmog’ining
ishlashini ta'minlashga undaydi.
Soddaroq qilib aytilganda, mayning Bitcoin
uchun juda muhim jarayon
bo'lib, yangi
bloklarni yaratish va bir vaqtning o'zida ikkita maqsadni amalga
oshirishdan iborat. Birinchisi,
pulni(bizni holda kriptovalyutani) ishlab chiqarish. Har safar mayner
yangi blok yaratganida, u N
miqdorda kriptovalyutagalarda mukofot olish huquqiga ega, keyin uni
biron bir
joyga sarflaydi va
shu bilan tarmoqqa yangi kriptovalyutani kiritadi.
Ikkinchi undan ham muhimroq maqsad - bu butun tarmoqning
ishlashini ta'minlashdir.
Shubhasiz, avvalgi ma’ruzalarni o'qib, siz allaqachon o'
zingizga
"Tranzaksiya skriptlarini
tekshiradigan odam kim?" degan savollarni bergan bo’lsangiz kerak,
yoki "Agar men allaqachon
ishlatilgan
Do'stlaringiz bilan baham: