1
1
import random
2
- from typing import List
3
-
4
2
5
3
class Validator :
6
- """
7
- Represents a validator in a Proof of Stake system.
8
-
9
- Attributes:
10
- name (str): The name of the validator.
11
- stake (int): The amount of stake (coins) the validator holds.
12
- """
13
-
14
- def __init__ (self , name : str , stake : int ):
4
+ def __init__ (self , name : str , stake : int ) -> None :
15
5
"""
16
6
Initializes a new validator with a given name and stake.
17
7
@@ -22,15 +12,14 @@ def __init__(self, name: str, stake: int):
22
12
self .name = name
23
13
self .stake = stake
24
14
25
-
26
- def choose_validator (validators : List [Validator ]) -> Validator :
15
+ def choose_validator (validators : list [Validator ]) -> Validator :
27
16
"""
28
17
Selects a validator to create the next block based on the weight of their stake.
29
18
30
19
The higher the stake, the greater the chance to be selected.
31
20
32
21
Args:
33
- validators (List [Validator]): A list of Validator objects.
22
+ validators (list [Validator]): A list of Validator objects.
34
23
35
24
Returns:
36
25
Validator: The selected validator based on weighted random selection.
@@ -43,7 +32,6 @@ def choose_validator(validators: List[Validator]) -> Validator:
43
32
"""
44
33
total_stake = sum (v .stake for v in validators )
45
34
weighted_validators = [(v , v .stake / total_stake ) for v in validators ]
46
- selected = random .choices (
47
- [v [0 ] for v in weighted_validators ], weights = [v [1 ] for v in weighted_validators ]
48
- )
35
+ selected = random .choices ([v [0 ] for v in weighted_validators ],
36
+ weights = [v [1 ] for v in weighted_validators ])
49
37
return selected [0 ]
0 commit comments