Skip to content

Commit 698b2dd

Browse files
authored
CHIA-3704 Optimize peak post processing by using transaction IDs instead of NewPeakItem elements (#19985)
Optimize peak post processing by using transaction IDs instead of NewPeakItem elements.
1 parent 326b108 commit 698b2dd

File tree

3 files changed

+15
-22
lines changed

3 files changed

+15
-22
lines changed

chia/_tests/core/mempool/test_mempool_manager.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
QUOTE_BYTES,
4242
QUOTE_EXECUTION_COST,
4343
MempoolManager,
44-
NewPeakItem,
4544
TimelockConditions,
4645
can_replace,
4746
check_removals,
@@ -3288,7 +3287,7 @@ async def test_new_peak_txs_added(condition_and_error: tuple[ConditionOpcode, Er
32883287
assert mempool_manager.peak is not None
32893288
condition_height = mempool_manager.peak.height + 1
32903289
condition, expected_error = condition_and_error
3291-
sb, sb_name, result = await generate_and_add_spendbundle(mempool_manager, [[condition, condition_height]])
3290+
_, sb_name, result = await generate_and_add_spendbundle(mempool_manager, [[condition, condition_height]])
32923291
_, status, error = result
32933292
assert status == MempoolInclusionStatus.PENDING
32943293
assert error == expected_error
@@ -3299,14 +3298,13 @@ async def test_new_peak_txs_added(condition_and_error: tuple[ConditionOpcode, Er
32993298
create_test_block_record(height=uint32(condition_height)), spent_coins
33003299
)
33013300
# We're not there yet (needs to be higher, not equal)
3301+
assert new_peak_info.spend_bundle_ids == []
33023302
assert mempool_manager.get_mempool_item(sb_name, include_pending=False) is None
3303-
assert new_peak_info.items == []
33043303
else:
33053304
spent_coins = None
33063305
new_peak_info = await mempool_manager.new_peak(
33073306
create_test_block_record(height=uint32(condition_height + 1)), spent_coins
33083307
)
33093308
# The item gets retried successfully now
3310-
mi = mempool_manager.get_mempool_item(sb_name, include_pending=False)
3311-
assert mi is not None
3312-
assert new_peak_info.items == [NewPeakItem(sb_name, sb, mi.conds)]
3309+
assert new_peak_info.spend_bundle_ids == [sb_name]
3310+
assert mempool_manager.get_mempool_item(sb_name, include_pending=False) is not None

chia/full_node/full_node.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
from chia.full_node.hint_management import get_hints_and_subscription_coin_ids
5959
from chia.full_node.hint_store import HintStore
6060
from chia.full_node.mempool import MempoolRemoveInfo
61-
from chia.full_node.mempool_manager import MempoolManager, NewPeakItem
61+
from chia.full_node.mempool_manager import MempoolManager
6262
from chia.full_node.subscriptions import PeerSubscriptions, peers_for_spend_bundle
6363
from chia.full_node.sync_store import Peak, SyncStore
6464
from chia.full_node.tx_processing_queue import TransactionQueue, TransactionQueueEntry
@@ -99,7 +99,8 @@
9999
# This is the result of calling peak_post_processing, which is then fed into peak_post_processing_2
100100
@dataclasses.dataclass
101101
class PeakPostProcessingResult:
102-
mempool_peak_result: list[NewPeakItem] # The new items from calling MempoolManager.new_peak
102+
# The added transactions IDs from calling MempoolManager.new_peak
103+
mempool_peak_added_tx_ids: list[bytes32]
103104
mempool_removals: list[MempoolRemoveInfo] # The removed mempool items from calling MempoolManager.new_peak
104105
fns_peak_result: FullNodeStorePeakResult # The result of calling FullNodeStore.new_peak
105106
hints: list[tuple[bytes32, bytes]] # The hints added to the DB
@@ -321,7 +322,8 @@ async def manage(self) -> AsyncIterator[None]:
321322
)
322323
async with self.blockchain.priority_mutex.acquire(priority=BlockchainMutexPriority.high):
323324
pending_tx = await self.mempool_manager.new_peak(self.blockchain.get_tx_peak(), None)
324-
assert len(pending_tx.items) == 0 # no pending transactions when starting up
325+
# No pending transactions when starting up
326+
assert len(pending_tx.spend_bundle_ids) == 0
325327

326328
full_peak: Optional[FullBlock] = await self.blockchain.get_full_peak()
327329
assert full_peak is not None
@@ -1939,7 +1941,7 @@ async def peak_post_processing(
19391941
mempool_new_peak_result = await self.mempool_manager.new_peak(self.blockchain.get_tx_peak(), spent_coins)
19401942

19411943
return PeakPostProcessingResult(
1942-
mempool_new_peak_result.items,
1944+
mempool_new_peak_result.spend_bundle_ids,
19431945
mempool_new_peak_result.removals,
19441946
fns_peak_result,
19451947
hints_to_add,
@@ -1961,9 +1963,9 @@ async def peak_post_processing_2(
19611963
record = state_change_summary.peak
19621964
for signage_point in ppp_result.signage_points:
19631965
await self.signage_point_post_processing(*signage_point)
1964-
for new_peak_item in ppp_result.mempool_peak_result:
1965-
self.log.debug(f"Added transaction to mempool: {new_peak_item.transaction_id}")
1966-
mempool_item = self.mempool_manager.get_mempool_item(new_peak_item.transaction_id)
1966+
for transaction_id in ppp_result.mempool_peak_added_tx_ids:
1967+
self.log.debug(f"Added transaction to mempool: {transaction_id}")
1968+
mempool_item = self.mempool_manager.get_mempool_item(transaction_id)
19671969
assert mempool_item is not None
19681970
await self.broadcast_added_tx(mempool_item)
19691971

chia/full_node/mempool_manager.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -133,17 +133,10 @@ class SpendBundleAddInfo:
133133

134134
@dataclass
135135
class NewPeakInfo:
136-
items: list[NewPeakItem]
136+
spend_bundle_ids: list[bytes32]
137137
removals: list[MempoolRemoveInfo]
138138

139139

140-
@dataclass
141-
class NewPeakItem:
142-
transaction_id: bytes32
143-
spend_bundle: SpendBundle
144-
conds: SpendBundleConditions
145-
146-
147140
# For block overhead cost calculation
148141
QUOTE_BYTES = 2
149142
QUOTE_EXECUTION_COST = 20
@@ -992,7 +985,7 @@ async def local_get_coin_records(names: Collection[bytes32]) -> list[CoinRecord]
992985
lineage_cache.get_unspent_lineage_info,
993986
)
994987
if info.status == MempoolInclusionStatus.SUCCESS:
995-
txs_added.append(NewPeakItem(item.spend_bundle_name, item.spend_bundle, item.conds))
988+
txs_added.append(item.spend_bundle_name)
996989
mempool_item_removals.extend(info.removals)
997990
log.info(
998991
f"Size of mempool: {self.mempool.size()} spends, "

0 commit comments

Comments
 (0)