mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat(txpool): Make TransactionPool trait object safe (#4156)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@ -135,7 +135,9 @@ where
|
||||
{
|
||||
Ok((new_header, post_state)) => {
|
||||
// clear all transactions from pool
|
||||
pool.remove_transactions(transactions.iter().map(|tx| tx.hash()));
|
||||
pool.remove_transactions(
|
||||
transactions.iter().map(|tx| tx.hash()).collect(),
|
||||
);
|
||||
|
||||
let state = ForkchoiceState {
|
||||
head_block_hash: new_header.hash,
|
||||
|
||||
@ -204,7 +204,7 @@ where
|
||||
/// complete transaction object if it is unknown to them. The dissemination of complete
|
||||
/// transactions to a fraction of peers usually ensures that all nodes receive the transaction
|
||||
/// and won't need to request it.
|
||||
fn on_new_transactions(&mut self, hashes: impl IntoIterator<Item = TxHash>) {
|
||||
fn on_new_transactions(&mut self, hashes: Vec<TxHash>) {
|
||||
// Nothing to propagate while initially syncing
|
||||
if self.network.is_initially_syncing() {
|
||||
return
|
||||
@ -372,9 +372,7 @@ where
|
||||
/// Handles a command received from a detached [`TransactionsHandle`]
|
||||
fn on_command(&mut self, cmd: TransactionsCommand) {
|
||||
match cmd {
|
||||
TransactionsCommand::PropagateHash(hash) => {
|
||||
self.on_new_transactions(std::iter::once(hash))
|
||||
}
|
||||
TransactionsCommand::PropagateHash(hash) => self.on_new_transactions(vec![hash]),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -401,7 +401,7 @@ where
|
||||
|
||||
fn remove_transactions(
|
||||
&self,
|
||||
hashes: impl IntoIterator<Item = TxHash>,
|
||||
hashes: Vec<TxHash>,
|
||||
) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>> {
|
||||
self.pool.remove_transactions(hashes)
|
||||
}
|
||||
@ -414,10 +414,7 @@ where
|
||||
self.inner().get(tx_hash)
|
||||
}
|
||||
|
||||
fn get_all(
|
||||
&self,
|
||||
txs: impl IntoIterator<Item = TxHash>,
|
||||
) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>> {
|
||||
fn get_all(&self, txs: Vec<TxHash>) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>> {
|
||||
self.inner().get_all(txs)
|
||||
}
|
||||
|
||||
|
||||
@ -135,7 +135,7 @@ impl TransactionPool for NoopTransactionPool {
|
||||
|
||||
fn remove_transactions(
|
||||
&self,
|
||||
_hashes: impl IntoIterator<Item = TxHash>,
|
||||
_hashes: Vec<TxHash>,
|
||||
) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>> {
|
||||
vec![]
|
||||
}
|
||||
@ -146,10 +146,7 @@ impl TransactionPool for NoopTransactionPool {
|
||||
None
|
||||
}
|
||||
|
||||
fn get_all(
|
||||
&self,
|
||||
_txs: impl IntoIterator<Item = TxHash>,
|
||||
) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>> {
|
||||
fn get_all(&self, _txs: Vec<TxHash>) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>> {
|
||||
vec![]
|
||||
}
|
||||
|
||||
|
||||
@ -513,7 +513,7 @@ where
|
||||
/// Removes and returns all matching transactions from the pool.
|
||||
pub(crate) fn remove_transactions(
|
||||
&self,
|
||||
hashes: impl IntoIterator<Item = TxHash>,
|
||||
hashes: Vec<TxHash>,
|
||||
) -> Vec<Arc<ValidPoolTransaction<T::Transaction>>> {
|
||||
let removed = self.pool.write().remove_transactions(hashes);
|
||||
|
||||
@ -552,7 +552,7 @@ where
|
||||
/// If no transaction exists, it is skipped.
|
||||
pub(crate) fn get_all(
|
||||
&self,
|
||||
txs: impl IntoIterator<Item = TxHash>,
|
||||
txs: Vec<TxHash>,
|
||||
) -> Vec<Arc<ValidPoolTransaction<T::Transaction>>> {
|
||||
self.pool.read().get_all(txs).collect()
|
||||
}
|
||||
|
||||
@ -247,10 +247,10 @@ impl<T: TransactionOrdering> TxPool<T> {
|
||||
}
|
||||
|
||||
/// Returns transactions for the multiple given hashes, if they exist.
|
||||
pub(crate) fn get_all<'a>(
|
||||
&'a self,
|
||||
txs: impl IntoIterator<Item = TxHash> + 'a,
|
||||
) -> impl Iterator<Item = Arc<ValidPoolTransaction<T::Transaction>>> + 'a {
|
||||
pub(crate) fn get_all(
|
||||
&self,
|
||||
txs: Vec<TxHash>,
|
||||
) -> impl Iterator<Item = Arc<ValidPoolTransaction<T::Transaction>>> + '_ {
|
||||
txs.into_iter().filter_map(|tx| self.get(&tx))
|
||||
}
|
||||
|
||||
@ -409,7 +409,7 @@ impl<T: TransactionOrdering> TxPool<T> {
|
||||
/// Maintenance task to apply a series of updates.
|
||||
///
|
||||
/// This will move/discard the given transaction according to the `PoolUpdate`
|
||||
fn process_updates(&mut self, updates: impl IntoIterator<Item = PoolUpdate>) -> UpdateOutcome {
|
||||
fn process_updates(&mut self, updates: Vec<PoolUpdate>) -> UpdateOutcome {
|
||||
let mut outcome = UpdateOutcome::default();
|
||||
for update in updates {
|
||||
let PoolUpdate { id, hash, current, destination } = update;
|
||||
@ -445,7 +445,7 @@ impl<T: TransactionOrdering> TxPool<T> {
|
||||
/// any additional updates.
|
||||
pub(crate) fn remove_transactions(
|
||||
&mut self,
|
||||
hashes: impl IntoIterator<Item = TxHash>,
|
||||
hashes: Vec<TxHash>,
|
||||
) -> Vec<Arc<ValidPoolTransaction<T::Transaction>>> {
|
||||
hashes.into_iter().filter_map(|hash| self.remove_transaction_by_hash(&hash)).collect()
|
||||
}
|
||||
|
||||
@ -227,7 +227,7 @@ pub trait TransactionPool: Send + Sync + Clone {
|
||||
/// Consumer: Block production
|
||||
fn remove_transactions(
|
||||
&self,
|
||||
hashes: impl IntoIterator<Item = TxHash>,
|
||||
hashes: Vec<TxHash>,
|
||||
) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>>;
|
||||
|
||||
/// Retains only those hashes that are unknown to the pool.
|
||||
@ -250,10 +250,7 @@ pub trait TransactionPool: Send + Sync + Clone {
|
||||
/// This adheres to the expected behavior of [`GetPooledTransactions`](https://github.com/ethereum/devp2p/blob/master/caps/eth.md#getpooledtransactions-0x09):
|
||||
/// The transactions must be in same order as in the request, but it is OK to skip transactions
|
||||
/// which are not available.
|
||||
fn get_all(
|
||||
&self,
|
||||
txs: impl IntoIterator<Item = TxHash>,
|
||||
) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>>;
|
||||
fn get_all(&self, txs: Vec<TxHash>) -> Vec<Arc<ValidPoolTransaction<Self::Transaction>>>;
|
||||
|
||||
/// Notify the pool about transactions that are propagated to peers.
|
||||
///
|
||||
|
||||
Reference in New Issue
Block a user