示例#1
0
    def _make_reservoir(self, handpicked_addresses):
        try:
            reservoir = self.alice.get_stakers_reservoir(
                duration=self.duration_periods, without=handpicked_addresses)
        except StakingEscrowAgent.NotEnoughStakers:
            # TODO: do that in `get_stakers_reservoir()`?
            reservoir = StakersReservoir({})

        return MergedReservoir(handpicked_addresses, reservoir)
示例#2
0
    def _make_reservoir(self, handpicked_addresses):
        addresses = {
            ursula.checksum_address: 1
            for ursula in self.alice.known_nodes
            if ursula.checksum_address not in handpicked_addresses
        }

        return MergedReservoir(handpicked_addresses,
                               StakersReservoir(addresses))
示例#3
0
def make_federated_staker_reservoir(known_nodes: FleetSensor,
                                    exclude_addresses: Optional[Iterable[ChecksumAddress]] = None,
                                    include_addresses: Optional[Iterable[ChecksumAddress]] = None):
    """
    Get a sampler object containing the federated stakers.
    """
    # needs to not include both exclude and include addresses
    # so that they aren't included in reservoir, include_address will be re-added to reservoir afterwards
    include_addresses = include_addresses or ()
    exclusion_set = set(include_addresses) | set(exclude_addresses or ())
    addresses = {}
    for ursula in known_nodes:
        if ursula.checksum_address in exclusion_set:
            continue
        addresses[ursula.checksum_address] = 1

    # add include addresses
    return MergedReservoir(include_addresses, StakersReservoir(addresses))
示例#4
0
def make_decentralized_staker_reservoir(staking_agent: StakingEscrowAgent,
                                        duration_periods: int,
                                        exclude_addresses: Optional[Iterable[ChecksumAddress]] = None,
                                        include_addresses: Optional[Iterable[ChecksumAddress]] = None,
                                        pagination_size: int = None):
    """
    Get a sampler object containing the currently registered stakers.
    """

    # needs to not include both exclude and include addresses
    # so that they aren't included in reservoir, include_address will be re-added to reservoir afterwards
    include_addresses = include_addresses or ()
    without_set = set(include_addresses) | set(exclude_addresses or ())
    try:
        reservoir = staking_agent.get_stakers_reservoir(duration=duration_periods,
                                                        without=without_set,
                                                        pagination_size=pagination_size)
    except StakingEscrowAgent.NotEnoughStakers:
        # TODO: do that in `get_stakers_reservoir()`?
        reservoir = StakersReservoir({})

    # add include addresses
    return MergedReservoir(include_addresses, reservoir)