[pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci
This commit is contained in:
pre-commit-ci[bot] 2024-10-10 15:54:30 +00:00
parent 28df0f3c9b
commit d770fa5bf5

View File

@ -1,18 +1,20 @@
import random import random
from typing import List from typing import List
class Validator: class Validator:
""" """
Represents a validator in a Proof of Stake system. Represents a validator in a Proof of Stake system.
Attributes: Attributes:
name (str): The name of the validator. name (str): The name of the validator.
stake (int): The amount of stake (coins) the validator holds. stake (int): The amount of stake (coins) the validator holds.
""" """
def __init__(self, name: str, stake: int): def __init__(self, name: str, stake: int):
""" """
Initializes a new validator with a given name and stake. Initializes a new validator with a given name and stake.
Args: Args:
name (str): The name of the validator. name (str): The name of the validator.
stake (int): The amount of stake the validator has. stake (int): The amount of stake the validator has.
@ -20,18 +22,19 @@ class Validator:
self.name = name self.name = name
self.stake = stake self.stake = stake
def choose_validator(validators: List[Validator]) -> Validator: def choose_validator(validators: List[Validator]) -> Validator:
""" """
Selects a validator to create the next block based on the weight of their stake. Selects a validator to create the next block based on the weight of their stake.
The higher the stake, the greater the chance to be selected. The higher the stake, the greater the chance to be selected.
Args: Args:
validators (List[Validator]): A list of Validator objects. validators (List[Validator]): A list of Validator objects.
Returns: Returns:
Validator: The selected validator based on weighted random selection. Validator: The selected validator based on weighted random selection.
Example: Example:
>>> validators = [Validator("Alice", 50), Validator("Bob", 30), Validator("Charlie", 20)] >>> validators = [Validator("Alice", 50), Validator("Bob", 30), Validator("Charlie", 20)]
>>> chosen = choose_validator(validators) >>> chosen = choose_validator(validators)
@ -40,6 +43,7 @@ def choose_validator(validators: List[Validator]) -> Validator:
""" """
total_stake = sum(v.stake for v in validators) total_stake = sum(v.stake for v in validators)
weighted_validators = [(v, v.stake / total_stake) for v in validators] weighted_validators = [(v, v.stake / total_stake) for v in validators]
selected = random.choices([v[0] for v in weighted_validators], selected = random.choices(
weights=[v[1] for v in weighted_validators]) [v[0] for v in weighted_validators], weights=[v[1] for v in weighted_validators]
)
return selected[0] return selected[0]