async def new_peak(self, new_peak: Optional[BlockRecord]) -> List[Tuple[SpendBundle, CostResult, bytes32]]: """ Called when a new peak is available, we try to recreate a mempool for the new tip. """ if new_peak is None: return [] if self.peak == new_peak: return [] if new_peak.height <= self.constants.INITIAL_FREEZE_PERIOD: return [] self.peak = new_peak old_pool = self.mempool self.mempool = Mempool.create(self.mempool_size) for item in old_pool.spends.values(): await self.add_spendbundle(item.spend_bundle, item.cost_result, item.spend_bundle_name, False) potential_txs_copy = self.potential_txs.copy() self.potential_txs = {} txs_added = [] for tx, cached_result, cached_name in potential_txs_copy.values(): cost, status, error = await self.add_spendbundle(tx, cached_result, cached_name) if status == MempoolInclusionStatus.SUCCESS: txs_added.append((tx, cached_result, cached_name)) log.debug( f"Size of mempool: {len(self.mempool.spends)}, minimum fee to get in: {self.mempool.get_min_fee_rate()}" ) return txs_added
def __init__(self, coin_store: CoinStore, consensus_constants: ConsensusConstants): self.constants: ConsensusConstants = consensus_constants self.constants_json = recurse_jsonify(dataclasses.asdict(self.constants)) # Transactions that were unable to enter mempool, used for retry. (they were invalid) self.potential_txs: Dict[bytes32, Tuple[SpendBundle, CostResult, bytes32]] = {} # Keep track of seen spend_bundles self.seen_bundle_hashes: Dict[bytes32, bytes32] = {} self.coin_store = coin_store tx_per_sec = self.constants.TX_PER_SEC sec_per_block = self.constants.SUB_SLOT_TIME_TARGET // self.constants.SLOT_BLOCKS_TARGET block_buffer_count = self.constants.MEMPOOL_BLOCK_BUFFER # MEMPOOL_SIZE = 60000 self.mempool_size = int(tx_per_sec * sec_per_block * block_buffer_count) self.potential_cache_size = 300 self.seen_cache_size = 10000 self.pool = ProcessPoolExecutor(max_workers=1) # The mempool will correspond to a certain peak self.peak: Optional[BlockRecord] = None self.mempool: Mempool = Mempool.create(self.mempool_size)