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
bet2/4
Sana18.06.2023
Hajmi58.44 Kb.
#1591506
1   2   3   4
Bog'liq
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: Agar zanjir o'zgartirilgan bo'lsa, rost, agar o'zgartirilmasa, noto'g'ri.
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: blokcheyn
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:
1   2   3   4




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