Skip to content

Commit 6fc3b8b

Browse files
committed
refactor: wallet on_new_tx
1 parent 2199ef8 commit 6fc3b8b

File tree

17 files changed

+46
-20
lines changed

17 files changed

+46
-20
lines changed

hathor/pubsub.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636

3737
class HathorEvents(Enum):
3838
"""
39+
NETWORK_NEW_TX_PROCESSING:
40+
Triggered when a new tx/block is received and will begin processing, just before consensus
41+
Publishes a tx/block object
42+
3943
NETWORK_NEW_TX_ACCEPTED:
4044
Triggered when a new tx/block is accepted in the network
4145
Publishes a tx/block object
@@ -118,6 +122,8 @@ class HathorEvents(Enum):
118122

119123
NETWORK_PEER_DISCONNECTED = 'network:peer_disconnected'
120124

125+
NETWORK_NEW_TX_PROCESSING = 'network:new_tx_processing'
126+
121127
NETWORK_NEW_TX_ACCEPTED = 'network:new_tx_accepted'
122128

123129
CONSENSUS_TX_UPDATE = 'consensus:tx_update'

hathor/vertex_handler/vertex_handler.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
from hathor.feature_activation.feature_service import FeatureService
2929
from hathor.feature_activation.utils import is_fee_active, is_nano_active
3030
from hathor.profiler import get_cpu_profiler
31-
from hathor.pubsub import HathorEvents, PubSubManager
31+
from hathor.pubsub import EventArguments, HathorEvents, PubSubManager
3232
from hathor.reactor import ReactorProtocol
3333
from hathor.transaction import BaseTransaction, Block, Transaction
3434
from hathor.transaction.storage import TransactionStorage
@@ -52,7 +52,6 @@ class VertexHandler:
5252
'_feature_service',
5353
'_pubsub',
5454
'_execution_manager',
55-
'_wallet',
5655
'_log_vertex_bytes',
5756
)
5857

@@ -79,9 +78,21 @@ def __init__(
7978
self._feature_service = feature_service
8079
self._pubsub = pubsub
8180
self._execution_manager = execution_manager
82-
self._wallet = wallet
8381
self._log_vertex_bytes = log_vertex_bytes
8482

83+
self._register_wallet(wallet)
84+
85+
def _register_wallet(self, wallet: BaseWallet | None) -> None:
86+
"""Register a wallet on pubsub."""
87+
if wallet is None:
88+
return
89+
90+
def handler(event: HathorEvents, args: EventArguments) -> None:
91+
assert event == HathorEvents.NETWORK_NEW_TX_PROCESSING
92+
wallet.on_new_tx(args.tx)
93+
94+
self._pubsub.subscribe(HathorEvents.NETWORK_NEW_TX_PROCESSING, handler)
95+
8596
@cpu.profiler('on_new_block')
8697
@inlineCallbacks
8798
def on_new_block(self, block: Block, *, deps: list[Transaction]) -> Generator[Any, Any, bool]:
@@ -239,6 +250,7 @@ def _unsafe_save_and_run_consensus(self, vertex: BaseTransaction) -> None:
239250
self._tx_storage.save_transaction(vertex)
240251
with non_critical_code(self._log):
241252
self._tx_storage.indexes.add_to_non_critical_indexes(vertex)
253+
self._pubsub.publish(HathorEvents.NETWORK_NEW_TX_PROCESSING, tx=vertex)
242254
self._consensus.unsafe_update(vertex)
243255

244256
def _post_consensus(
@@ -268,10 +280,6 @@ def _post_consensus(
268280
# Publish to pubsub manager the new tx accepted, now that it's full validated
269281
self._pubsub.publish(HathorEvents.NETWORK_NEW_TX_ACCEPTED, tx=vertex)
270282

271-
if self._wallet:
272-
# TODO Remove it and use pubsub instead.
273-
self._wallet.on_new_tx(vertex)
274-
275283
self._log_new_object(vertex, 'new {}', quiet=quiet)
276284

277285
def _log_new_object(self, tx: BaseTransaction, message_fmt: str, *, quiet: bool) -> None:

hathor_cli/events_simulator/scenario.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ def simulate_invalid_mempool_transaction(simulator: 'Simulator', manager: 'Hatho
177177
assert manager.wallet is not None
178178
address = manager.wallet.get_unused_address(mark_as_used=False)
179179

180-
blocks = add_new_blocks(manager, settings.REWARD_SPEND_MIN_BLOCKS + 1)
180+
blocks = add_new_blocks(manager, settings.REWARD_SPEND_MIN_BLOCKS + 1, advance_clock=1)
181181
simulator.run(60)
182182

183183
balance_per_address = manager.wallet.get_balance_per_address(settings.HATHOR_TOKEN_UID)

hathor_tests/consensus/test_soft_voided.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ def _run_test(
8484
assert manager2.wallet is not None
8585
address = manager2.wallet.get_unused_address(mark_as_used=False)
8686
value = 1
87+
simulator.run_to_completion()
8788
txC = gen_new_tx(manager2, address, value)
8889
txC.parents[0] = txA.hash
8990
txC.timestamp = max(txC.timestamp, txA.timestamp + 1)

hathor_tests/p2p/test_double_spending.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def _add_new_transactions(self, manager: HathorManager, num_txs: int) -> list[Tr
2424
for _ in range(num_txs):
2525
address = not_none(self.get_address(0))
2626
value = self.rng.choice([5, 10, 15, 20])
27-
tx = add_new_tx(manager, address, value)
27+
tx = add_new_tx(manager, address, value, advance_clock=1)
2828
txs.append(tx)
2929
return txs
3030

hathor_tests/resources/transaction/test_block_at_height.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ def test_include_full(self):
2020

2121
confirmed_tx_list = []
2222
for _ in range(15):
23-
confirmed_tx_list.append(add_new_tx(self.manager, address, 1))
23+
confirmed_tx_list.append(add_new_tx(self.manager, address, 1, advance_clock=1))
2424

2525
block = add_new_block(self.manager, advance_clock=1)
2626
height = block.get_height()
2727

2828
# non-confirmed transactions
2929
for _ in range(15):
30-
add_new_tx(self.manager, address, 1)
30+
add_new_tx(self.manager, address, 1, advance_clock=1)
3131

3232
response = yield self.web.get("block_at_height", {
3333
b'height': str(height).encode('ascii'),
@@ -48,14 +48,14 @@ def test_include_txids(self):
4848

4949
confirmed_tx_list = []
5050
for _ in range(15):
51-
confirmed_tx_list.append(add_new_tx(self.manager, address, 1))
51+
confirmed_tx_list.append(add_new_tx(self.manager, address, 1, advance_clock=1))
5252

5353
block = add_new_block(self.manager, advance_clock=1)
5454
height = block.get_height()
5555

5656
# non-confirmed transactions
5757
for _ in range(15):
58-
add_new_tx(self.manager, address, 1)
58+
add_new_tx(self.manager, address, 1, advance_clock=1)
5959

6060
response = yield self.web.get("block_at_height", {
6161
b'height': str(height).encode('ascii'),

hathor_tests/resources/transaction/test_transaction_confirmation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def test_get_data(self):
2727
# Adding blocks to have funds
2828
add_new_blocks(self.manager, 2, advance_clock=1)
2929
add_blocks_unlock_reward(self.manager)
30-
tx = add_new_transactions(self.manager, 5)[0]
30+
tx = add_new_transactions(self.manager, 5, advance_clock=1)[0]
3131
add_new_blocks(self.manager, 2, advance_clock=1)
3232
add_blocks_unlock_reward(self.manager)
3333
response_success2 = yield self.web.get(

hathor_tests/resources/transaction/test_tx.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,9 @@ def test_get_many(self):
292292
# Add some blocks and txs and get them in timestamp order
293293
blocks = add_new_blocks(self.manager, 4, advance_clock=1)
294294
_blocks = add_blocks_unlock_reward(self.manager)
295-
txs = sorted(add_new_transactions(self.manager, 25), key=lambda x: (x.timestamp, x.hash))
295+
txs = sorted(
296+
add_new_transactions(self.manager, 25, advance_clock=1), key=lambda x: (x.timestamp, x.hash)
297+
)
296298

297299
blocks.extend(_blocks)
298300
blocks = sorted(blocks, key=lambda x: (x.timestamp, x.hash))
@@ -484,7 +486,7 @@ def test_negative_timestamp(self):
484486
# Add some blocks and txs and get them in timestamp order
485487
blocks = add_new_blocks(self.manager, 4, advance_clock=1)
486488
add_blocks_unlock_reward(self.manager)
487-
add_new_transactions(self.manager, 25)
489+
add_new_transactions(self.manager, 25, advance_clock=1)
488490

489491
response = yield self.web.get(
490492
"transaction", {

hathor_tests/resources/wallet/test_balance.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ def test_get(self):
3030
cpu_mining_service=CpuMiningService()
3131
)
3232
yield self.web_mining.post("mining", {'block_bytes': base64.b64encode(block_bytes).decode('utf-8')})
33+
self.clock.advance(1)
3334

3435
# Get new balance after block
3536
response2 = yield self.web.get("wallet/balance")

hathor_tests/resources/wallet/test_history.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def test_get(self):
2525
cpu_mining_service=CpuMiningService()
2626
)
2727
yield self.web_mining.post("mining", {'block_bytes': base64.b64encode(block_bytes).decode('utf-8')})
28+
self.clock.advance(1)
2829

2930
# Getting wallet history
3031
response = yield self.web.get("wallet/history", {b'page': 1, b'count': 10})

0 commit comments

Comments
 (0)