mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 19:09:54 +00:00
feat(net): add helper functions to TransactionsHandle implementation (#4668)
This commit is contained in:
@ -64,8 +64,7 @@ pub struct TransactionsHandle {
|
|||||||
manager_tx: mpsc::UnboundedSender<TransactionsCommand>,
|
manager_tx: mpsc::UnboundedSender<TransactionsCommand>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// === impl TransactionsHandle ===
|
/// Implementation of the `TransactionsHandle` API.
|
||||||
|
|
||||||
impl TransactionsHandle {
|
impl TransactionsHandle {
|
||||||
fn send(&self, cmd: TransactionsCommand) {
|
fn send(&self, cmd: TransactionsCommand) {
|
||||||
let _ = self.manager_tx.send(cmd);
|
let _ = self.manager_tx.send(cmd);
|
||||||
@ -75,6 +74,31 @@ impl TransactionsHandle {
|
|||||||
pub fn propagate(&self, hash: TxHash) {
|
pub fn propagate(&self, hash: TxHash) {
|
||||||
self.send(TransactionsCommand::PropagateHash(hash))
|
self.send(TransactionsCommand::PropagateHash(hash))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Manually propagate the transaction that belongs to the hash to a specific peer.
|
||||||
|
pub fn propagate_hash_to(&self, hash: TxHash, peer: PeerId) {
|
||||||
|
self.send(TransactionsCommand::PropagateHashTo(hash, peer))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Request the active peer IDs from the [`TransactionsManager`].
|
||||||
|
pub fn get_active_peers(&self) {
|
||||||
|
self.send(TransactionsCommand::GetActivePeers)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Manually propagate full transactions to a specific peer.
|
||||||
|
pub fn propagate_transactions_to(&self, transactions: Vec<TxHash>, peer: PeerId) {
|
||||||
|
self.send(TransactionsCommand::PropagateTransactionsTo(transactions, peer))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Request the transaction hashes known by specific peers.
|
||||||
|
pub fn get_transaction_hashes(&self, peers: Vec<PeerId>) {
|
||||||
|
self.send(TransactionsCommand::GetTransactionHashes(peers))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Request the transaction hashes known by a specific peer.
|
||||||
|
pub fn get_peer_transaction_hashes(&self, peer: PeerId) {
|
||||||
|
self.send(TransactionsCommand::GetPeerTransactionHashes(peer))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Manages transactions on top of the p2p network.
|
/// Manages transactions on top of the p2p network.
|
||||||
@ -404,6 +428,11 @@ where
|
|||||||
fn on_command(&mut self, cmd: TransactionsCommand) {
|
fn on_command(&mut self, cmd: TransactionsCommand) {
|
||||||
match cmd {
|
match cmd {
|
||||||
TransactionsCommand::PropagateHash(hash) => self.on_new_transactions(vec![hash]),
|
TransactionsCommand::PropagateHash(hash) => self.on_new_transactions(vec![hash]),
|
||||||
|
TransactionsCommand::PropagateHashTo(_hash, _peer) => todo!(),
|
||||||
|
TransactionsCommand::GetActivePeers => todo!(),
|
||||||
|
TransactionsCommand::PropagateTransactionsTo(_txs, _peer) => todo!(),
|
||||||
|
TransactionsCommand::GetTransactionHashes(_peers) => todo!(),
|
||||||
|
TransactionsCommand::GetPeerTransactionHashes(_peer) => todo!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -829,7 +858,18 @@ struct Peer {
|
|||||||
|
|
||||||
/// Commands to send to the [`TransactionsManager`]
|
/// Commands to send to the [`TransactionsManager`]
|
||||||
enum TransactionsCommand {
|
enum TransactionsCommand {
|
||||||
|
/// Propagate a transaction hash to the network.
|
||||||
PropagateHash(H256),
|
PropagateHash(H256),
|
||||||
|
/// Propagate a transaction hash to a specific peer.
|
||||||
|
PropagateHashTo(H256, PeerId),
|
||||||
|
/// Request the list of active peer IDs from the [`TransactionsManager`].
|
||||||
|
GetActivePeers,
|
||||||
|
/// Propagate a collection of full transactions to a specific peer.
|
||||||
|
PropagateTransactionsTo(Vec<TxHash>, PeerId),
|
||||||
|
/// Request transaction hashes known by specific peers from the [`TransactionsManager`].
|
||||||
|
GetTransactionHashes(Vec<PeerId>),
|
||||||
|
/// Request transaction hashes known by a specific peer from the [`TransactionsManager`].
|
||||||
|
GetPeerTransactionHashes(PeerId),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// All events related to transactions emitted by the network.
|
/// All events related to transactions emitted by the network.
|
||||||
|
|||||||
Reference in New Issue
Block a user