-
Notifications
You must be signed in to change notification settings - Fork 0
/
poc.py
67 lines (56 loc) · 3.17 KB
/
poc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""
Dans cet exemple, j'ai créé une classe PoA qui contient une liste d'autorités. Les autorités sont des personnes ou
des entités de confiance qui sont autorisées à valider les transactions et à créer de nouveaux blocs sur la blockchain.
Les autorités sont les nœuds qui peuvent diffuser la valeur et les validateurs sont les nœuds qui peuvent voter sur
la valeur. Cela nous permet de restreindre la capacité de diffuser et de voter à certains nœuds pré-approuvés,
comme c'est généralement le cas dans un algorithme PoA. De plus, nous avons ajouté une gestion des erreurs de base
pour garantir que seuls les autorités autorisées et les validateurs peuvent diffuser et voter, respectivement. La
méthode de diffusion envoie la valeur à toutes les autorités et la méthode de vote est utilisée pour mettre à jour
les valeurs reçues par une autorité. La méthode majority_agreement est utilisée pour s'assurer que la valeur convenue
par la majorité des autorités est utilisée, elle est calculée en comptant le nombre d'occurrences de chaque valeur.
Enfin, la méthode decide est utilisée pour renvoyer la valeur finale convenue par les autorités.
Veuillez noter qu'il s'agit d'un simple algorithme PoA pour démontrer son fonctionnement et qu'il n'est pas adapté à
une utilisation dans le monde réel, car il n'ajoute aucune mesure de sécurité ou protection supplémentaire. Il s'agit
également d'une version simplifiée pour la démonstration, dans le monde réel, l'algorithme PoA est plus complexe et
doit inclure des mécanismes de sécurité supplémentaires, tels que les signatures numériques, pour se protéger contre
les autorités byzantines et d'autres problèmes de réseau tels que la perte de messages, la réorganisation
et les retards.
"""
class PoA:
def __init__(self, _authorities, _validators):
self.values = None
self.authorities = _authorities
self.validators = _validators
self.agreed_value = None
def broadcast(self, authority, value):
if authority in self.authorities:
self.values = {node: value for node in self.validators}
else:
raise ValueError("Only authorized authorities can broadcast values.")
def vote(self, validator, value):
if validator in self.validators:
self.values[validator] = value
else:
raise ValueError("Only authorized validators can vote.")
def majority_agreement(self):
"""Check if a value has been agreed upon by a majority of validators"""
value_count = {}
for value in self.values.values():
if value not in value_count:
value_count[value] = 0
value_count[value] += 1
for value, count in value_count.items():
if count > len(self.validators) / 2:
self.agreed_value = value
return True
return False
def decide(self):
return self.agreed_value
# Example usage:
authorities = ["A", "B"]
validators = ["C", "D", "E"]
poa = PoA(authorities, validators)
poa.broadcast("A", "example value")
poa.vote("E", "wrong value")
poa.majority_agreement()
print(poa.decide()) # prints "example value"