Laboratoriya ishi no tizimda bir nechta tugun kerak bo'lsa, Consensus algoritmidan foydalaning Vazifa
Konsensus algoritmini amalga oshirish
Download 58.44 Kb. Pdf ko'rish
|
5-lab 2 blokchain
4.2 Konsensus algoritmini amalga oshirish
tarmoqning bo'yinturug'i de-fakto bitta. Ushbu algoritmdan foydalanib, biz erishamiz chop etish ("\n----------\n") 41 42 43 58 59 javob = requests.get(f'http://{tugun}/chain') if block['previous_hash'] != self.hash(last_block): """ 9 10 11 12 joriy_indeks = 1 31 """ qo'shnilar = self.tugunlar 22 blok = zanjir[joriy_indeks] Blokka kiritilgan xesh to'g'ri yoki yo'qligini tekshiramiz # Ishni tasdiqlash to'g'ri yoki yo'qligini tekshiramiz 38 39 """ 53 # Biz faqat biznikidan uzunroq zanjirlarni qidiramiz 40 chop etish (f'{blok}') :qaytish: False ni qaytaring # Barcha tarmoq tugunlaridan barcha sxemalarni oling va tekshiring uzunlik = answer.json()['uzunlik'] 57 # Uzunlik eng uzun va zanjir to'g'ri yoki yo'qligini tekshiring :return: 14 15 16 17 18 19 20 21 # Blok xeshining to'g'riligini tekshirish 8 def valid_chain (o'z-o'zidan, zanjir): joriy_index += 1 45 46 47 48 49 50 51 52 32 33 34 35 36 37 def solution_conflicts(self): last_block = zanjir[0] 23 24 25 26 27 28 29 30 """ joriy_indeks < len (zanjir): False ni qaytaring 44 agar javob.status_code == 200: 54 55 56 Qaytish Haqiqat agar self.valid_proof bo'lmasa(last_block['proof'], block['proof']): :param zanjiri: chop etish (f'{last_block}') Bu konsensus algoritmi bo'lib, u zanjirni tarmoqdagi eng uzuniga o'zgartirish orqali nizolarni hal qiladi. new_chain = Yo'q max_length = len (self.chain) zanjir = answer.json()['zanjir'] qo'shnilardagi tugun uchun: oxirgi_blok = bloklash o'n uch 41 2 def register_nodes(): new_chain = zanjir 11 12 javob = { 3 ta qiymat = request.get_json() # Agar biz boshqa to'g'ri va uzoqroq zanjirni topsak, zanjirni almashtiramiz 13 'xabar': 'Yangi tugunlar qo'shildi', 14 ta 'jami_tugun': ro'yxat (blockchain.nodes), 15 } 4 5 tugun = values.get('tugunlar') agar new_chain: 22 almashtirildi = blockchain.resolve_conflicts() 6, agar tugunlar Yo'q bo'lsa: self.chain = yangi_zanjir 16 jsonify (javob), 201 17 18 19 20 @app.route('/tugunlar/resolve', usullar=['GET']) Qaytish Haqiqat Tugunlardagi tugun uchun 7 8 9: 60 61 62 63 64 10 blockchain.register_tugun(tugun) 66 67 68 69 agar uzunlik > maksimal_uzunlik va self.valid_chain(zanjir): False ni qaytaring qaytish "Xato: Iltimos, tugunlarning to'g'ri ro'yxatini keltiring", 400 65 maksimal_uzunlik = uzunlik 1 @app.route('/nodes/register', usullar=['POST']) 21 aniq konsensus (): har bir blokni aylanib o'tish va tekshirish orqali amal qiladi gluteal tugunlar, ikkinchisi - nizolarni hal qilish uchun: Agar yaroqli zanjir, uzunligi tekshirish zanjiridan uzunroq bo'lsa, biz uning ham hash, ham dalil. biz uni sinov bilan almashtiramiz. Barcha qo'shni tugunlar orqali o'tadigan solution_conflicts() usuli , Keling, ikkita ishlaydigan API so'nggi nuqtasini ro'yxatdan o'tkazaylik, biri su kiritish uchun Birinchi valid_chain() usuli zanjir mavjudligini tekshirish uchun javobgardir ularning zanjirlarini yuklaydi va oldingi usulda bo'lgani kabi tekshirishni amalga oshiradi. 42 Machine Translated by Google 27 'new_chain': blockchain.chain 28 23 24 almashtirilsa: } javob = { 25 javob = { "zanjir": blockchain.chain 29 boshqa: 'xabar': 'Bizning zanjirimiz obro'li', 26 'xabar': 'Bizning zanjirimiz almashtirildi', } 30 31 32 33 34 35 jsonify(javob), 200 qaytaring Download 58.44 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling