2 – amaliy mashg’ulot Mavzu: BigData va Blokcheyn texnologiyalari. Tranzaksiyalar. Blockcheyn prototipini ishlab chiqish muhiti va tuzilishi


Tugallangan ishni tasdiqlash algoritmi


Download 0.78 Mb.
Pdf ko'rish
bet6/9
Sana18.06.2023
Hajmi0.78 Mb.
#1591555
1   2   3   4   5   6   7   8   9
Bog'liq
2-amaliy blokchain

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 yerda yechim quyidagicha: y = 21. Olingan xesh nol bilan tugashi uchun: 
hash(5 * 21) = 1253e9373e...5e3600155e860 
1.9. Asosiy PoWni amalga oshirish 
Keling, blokcheyn prototipi uchun shunga o'xshash algoritmni amalga oshiramiz. 
Biz yuqorida aytib o'tilgan qoidaga o'xshash qoidani (muammoni) qabul qilamiz: 
p raqamini toping, shundayki, oldingi blokning yechimi bilan xeshlanganda u to'rtta 
bosh nolga ega xeshni hosil qiladi. 
1 import hashlib
2 import json
3
4 from time import time
5 from uuid import uuid4
6
7
8 class Blockchain(object):
9 ...
10
11 def proof_of_work(self, last_proof):
12 """
13 Algoritmni oddiy tekshirish: 
14 - p` raqamini topish, chunki hash(pp`) 4 ta bosh nolni o'z ichiga oladi, bu yerda p – oldingi 
15 - p - oldingi dalil, p` esa yangi 
16
17 :param last_proof: 
18 :return: 
19 """
20
21 proof = 0
22 while self.valid_proof(last_proof, proof) is False:
23 proof += 1
24
25 return proof
26
27 @staticmethod
28 def valid_proof(last_proof, proof):
29 """ 


30 isboti: hash(last_proof, proof) 4 ta bosh noldan iboratmi? 
31 
32 :param last_proof:  Oldingi isbot 
33 :param proof:  Joriy isbot 
34 :return:  To'g'ri bo'lsa rost, bo'lmasa noto'g'ri. 
35 """
36
37 guess = f'{last_proof}{proof}'.encode()
38 guess_hash = hashlib.sha256(guess).hexdigest()
39 return guess_hash[:4] == "0000"
Algoritmning murakkabligini sozlash uchun biz bosh nol sonini o'zgartirishimiz 
mumkin. Bizning holatda, 4 ta etarli. Bitta qo'shimcha nol qo'shilishi, yechim topish 
uchun zarur bo'lgan vaqtni katta farq qiladi (kon). 

Download 0.78 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling