Call method to process transactions added to mempool in Fee Estimator (#14290)

This commit is contained in:
Adam Kelly 2023-01-06 12:18:52 -08:00 committed by GitHub
parent 5fd468df15
commit b71eaa0a8e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 0 deletions

View File

@ -26,6 +26,7 @@ class BitcoinFeeEstimator(FeeEstimatorInterface):
self.fee_rate_estimator: SmartFeeEstimator = smart_fee_estimator
self.tracker: FeeTracker = fee_tracker
self.last_mempool_info: FeeMempoolInfo = EmptyFeeMempoolInfo
self.block_height: uint32 = uint32(0)
def new_block_height(self, block_height: uint32) -> None:
self.block_height = block_height
@ -36,6 +37,7 @@ class BitcoinFeeEstimator(FeeEstimatorInterface):
def add_mempool_item(self, mempool_info: FeeMempoolInfo, mempool_item: MempoolItem) -> None:
self.last_mempool_info = mempool_info
self.tracker.add_tx(mempool_item)
def remove_mempool_item(self, mempool_info: FeeMempoolInfo, mempool_item: MempoolItem) -> None:
self.last_mempool_info = mempool_info

View File

@ -519,6 +519,18 @@ class FeeTracker:
self.med_horizon.tx_confirmed(blocks_to_confirm, item)
self.long_horizon.tx_confirmed(blocks_to_confirm, item)
def add_tx(self, item: MempoolItem) -> None:
if item.height_added_to_mempool < self.latest_seen_height:
self.log.info(f"Processing Item from pending pool: cost={item.cost} fee={item.fee}")
fee_rate = item.fee_per_cost * 1000
bucket_index: int = get_bucket_index(self.sorted_buckets, fee_rate)
self.short_horizon.new_mempool_tx(self.latest_seen_height, bucket_index)
self.med_horizon.new_mempool_tx(self.latest_seen_height, bucket_index)
self.long_horizon.new_mempool_tx(self.latest_seen_height, bucket_index)
def remove_tx(self, item: MempoolItem) -> None:
bucket_index = get_bucket_index(self.sorted_buckets, item.fee_per_cost * 1000)
self.short_horizon.remove_tx(self.latest_seen_height, item, bucket_index)

View File

@ -16,6 +16,7 @@ from chia.full_node.fee_estimation import (
MempoolInfo,
)
from chia.full_node.fee_estimator_interface import FeeEstimatorInterface
from chia.full_node.fee_tracker import FeeTracker
from chia.full_node.mempool import Mempool, MempoolRemoveReason
from chia.simulator.block_tools import test_constants
from chia.simulator.wallet_tools import WalletTool
@ -235,3 +236,25 @@ async def test_mm_calls_new_block_height() -> None:
block2 = create_test_block_record(height=uint32(2))
await mempool_manager.new_peak(block2, None)
assert new_block_height_called
def test_add_tx_called() -> None:
max_block_cost = uint64(1000 * 1000)
fee_estimator = create_bitcoin_fee_estimator(max_block_cost)
mempool = Mempool(test_mempool_info, fee_estimator)
item = make_mempoolitem()
add_tx_called = False
def add_tx_called_fun(self: FeeTracker, mitem: MempoolItem) -> None:
nonlocal add_tx_called
add_tx_called = True
# Replace with test method
mempool.fee_estimator.tracker.add_tx = types.MethodType( # type: ignore[attr-defined]
add_tx_called_fun, mempool.fee_estimator.tracker # type: ignore[attr-defined]
)
mempool.add_to_pool(item)
assert add_tx_called