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
|
2-amaliy blokchain
- Bu sahifa navigatsiya:
- 1.9. Asosiy PoWni amalga oshirish
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: 33 :param proof: 34 :return: 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling