Files
Kyle AltendorfandGitHub e446d6b726 use chia_rs directly for sized ints (#19303)
* use chia_rs directly for sized ints

* Update data_layer_rpc_api.py
2025-02-24 14:33:09 -08:00

94 lines
2.8 KiB
Python

from __future__ import annotations
from dataclasses import dataclass
from datetime import datetime
from chia_rs.sized_ints import uint32, uint64
from chia.types.clvm_cost import CLVMCost
from chia.types.fee_rate import FeeRate
from chia.types.mojos import Mojos
@dataclass(frozen=True)
class MempoolItemInfo:
"""
The information the fee estimator is passed for each mempool item that's
added, removed from the mempool and included in blocks
"""
cost: int
fee: int
height_added_to_mempool: uint32
@property
def fee_per_cost(self) -> float:
return self.fee / self.cost
@dataclass(frozen=True)
class MempoolInfo:
"""
Information from the Mempool needed to estimate fees.
This information is constant during the lifetime of the FullNode process
Attributes:
max_size_in_cost (uint64): This is the maximum capacity of the mempool, measured in XCH per CLVM Cost
minimum_fee_per_cost_to_replace (uint64): Smallest FPC that might be accepted to replace another SpendBundle
max_block_clvm_cost (uint64): Max allowed cost of a farmed block
"""
max_size_in_cost: CLVMCost # Mempool max allowed CLVM cost total
minimum_fee_per_cost_to_replace: FeeRate
max_block_clvm_cost: CLVMCost # Max CLVMCost allowed in the Mempool
@dataclass(frozen=True)
class FeeMempoolInfo:
"""
Information from Mempool and MempoolItems needed to estimate fees.
Updated when `MemPoolItem`s are added or removed from the Mempool.
This information is more dynamic in nature than the info in `MempoolInfo`
Attributes:
mempool_info (MempoolInfo): A `MempoolInfo`, defined above. Parameters of our mempool.
current_mempool_cost (uint64):This is the current capacity of the mempool, measured in XCH per CLVM Cost
current_mempool_fees (int): Sum of fees for all spends waiting in the Mempool
time (datetime): Local time this sample was taken
Note that we use the node's local time, not "Blockchain time" for the timestamp above
"""
mempool_info: MempoolInfo
current_mempool_cost: CLVMCost # Current sum of CLVM cost of all SpendBundles in mempool (mempool "size")
current_mempool_fees: int # Sum of fees for all spends waiting in the Mempool
time: datetime # Local time this sample was taken
EmptyMempoolInfo = MempoolInfo(
CLVMCost(uint64(0)), FeeRate.create(Mojos(uint64(0)), CLVMCost(uint64(1))), CLVMCost(uint64(0))
)
EmptyFeeMempoolInfo = FeeMempoolInfo(
EmptyMempoolInfo,
CLVMCost(uint64(0)),
0,
datetime.min,
)
@dataclass(frozen=True)
class FeeMempoolItem:
height_added: uint32
fee_per_cost: FeeRate
@dataclass(frozen=True)
class FeeBlockInfo: # See BlockRecord
"""
Information from Blockchain needed to estimate fees.
"""
block_height: uint32
included_items: list[MempoolItemInfo]