Extrinsic pool (#182)

* Use latest version of txpool.

* Initial version of the pool.

* Fix abstraction.

* Implement watchers and notifications.

* Return hash from RPC.

* Remove commented code.

* Remove client dep.

* Fix tests.
This commit is contained in:
Tomasz Drwięga
2018-05-31 22:49:17 +02:00
committed by Gav Wood
parent 44eaa4a180
commit 1dada4f7a0
27 changed files with 770 additions and 315 deletions
+18 -2
View File
@@ -16,7 +16,9 @@
//! Substrate block-author/full-node API.
use primitives::block::Extrinsic;
use std::sync::Arc;
use primitives::block::{Extrinsic, ExtrinsicHash};
use extrinsic_pool::api::{Error, ExtrinsicPool};
pub mod error;
@@ -30,6 +32,20 @@ build_rpc_trait! {
pub trait AuthorApi {
/// Submit extrinsic for inclusion in block.
#[rpc(name = "author_submitExtrinsic")]
fn submit_extrinsic(&self, Extrinsic) -> Result<()>;
fn submit_extrinsic(&self, Extrinsic) -> Result<ExtrinsicHash>;
}
}
impl<T> AuthorApi for Arc<T> where
T: ExtrinsicPool,
{
fn submit_extrinsic(&self, xt: Extrinsic) -> Result<ExtrinsicHash> {
self
.submit(vec![xt])
.map(|mut res| res.pop().expect("One extrinsic passed; one result back; qed"))
.map_err(|e| e.into_pool_error()
.map(Into::into)
.unwrap_or_else(|e| error::ErrorKind::Verification(Box::new(e)).into())
)
}
}