soil_network/transactions/
config.rs1use futures::prelude::*;
10use soil_network::common::ExHashT;
11use soil_network::MAX_RESPONSE_SIZE;
12use std::{collections::HashMap, future::Future, pin::Pin, sync::Arc, time};
13use subsoil::runtime::traits::Block as BlockT;
14
15pub(crate) const PROPAGATE_TIMEOUT: time::Duration = time::Duration::from_millis(2900);
17
18pub(crate) const MAX_KNOWN_TRANSACTIONS: usize = 10240; pub(crate) const MAX_TRANSACTIONS_SIZE: u64 = MAX_RESPONSE_SIZE;
25
26pub(crate) const MAX_PENDING_TRANSACTIONS: usize = 8192;
28
29#[derive(Clone, Copy, Debug)]
31pub enum TransactionImport {
32 KnownGood,
34 NewGood,
36 Bad,
38 None,
40}
41
42pub type TransactionImportFuture = Pin<Box<dyn Future<Output = TransactionImport> + Send>>;
44
45pub trait TransactionPool<H: ExHashT, B: BlockT>: Send + Sync {
47 fn transactions(&self) -> Vec<(H, Arc<B::Extrinsic>)>;
49 fn hash_of(&self, transaction: &B::Extrinsic) -> H;
51 fn import(&self, transaction: B::Extrinsic) -> TransactionImportFuture;
55 fn on_broadcasted(&self, propagations: HashMap<H, Vec<String>>);
57 fn transaction(&self, hash: &H) -> Option<Arc<B::Extrinsic>>;
59}
60
61pub struct EmptyTransactionPool;
68
69impl<H: ExHashT + Default, B: BlockT> TransactionPool<H, B> for EmptyTransactionPool {
70 fn transactions(&self) -> Vec<(H, Arc<B::Extrinsic>)> {
71 Vec::new()
72 }
73
74 fn hash_of(&self, _transaction: &B::Extrinsic) -> H {
75 Default::default()
76 }
77
78 fn import(&self, _transaction: B::Extrinsic) -> TransactionImportFuture {
79 Box::pin(future::ready(TransactionImport::KnownGood))
80 }
81
82 fn on_broadcasted(&self, _: HashMap<H, Vec<String>>) {}
83
84 fn transaction(&self, _h: &H) -> Option<Arc<B::Extrinsic>> {
85 None
86 }
87}