Source code for nqs_sdk.bindings.tx_generators.random_tx_generator

from abc import ABC, abstractmethod
from typing import List, Optional, Tuple

from nqs_sdk import Metrics, RefSharedState, SimulationClock, TxRequest
from nqs_sdk.bindings.tx_generators.abstract_transaction import Transaction
from nqs_sdk.interfaces.tx_generator import TxGenerator


[docs] class RandomTxGenerator(TxGenerator, ABC):
[docs] def __init__(self) -> None: self.run_cache: bool = False
[docs] def id(self) -> str: return self.protocol_id
@property @abstractmethod def protocol_id(self) -> str: pass
[docs] @abstractmethod def get_transactions(self, start_block: int, end_block: int) -> list[Transaction]: pass
[docs] @abstractmethod def get_next_block(self, current_block: int) -> Optional[int]: pass
[docs] def next( self, clock: SimulationClock, state: RefSharedState, metrics: Metrics ) -> Tuple[List[TxRequest], Optional[int]]: current_block = clock.current_block() txns = [] for tx in self.get_transactions(start_block=current_block, end_block=current_block): # use fixed address for performance reasons txns.append( tx.to_tx_request( protocol=self.protocol_id, source="Masao", sender="0xD1CECA5E0907304f45Af5cAf3B0cbeC84CF9c92f", order=2.0, # order is 0.0 for arbitrage, 1.0 for agents and 2.0 for random ) ) return txns, None
def __str__(self) -> str: return f"{self.protocol_id}_random_tx_generator"