mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 21:41:12 +00:00
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:
@@ -61,39 +61,11 @@ mod informant;
|
||||
use std::io;
|
||||
use std::net::SocketAddr;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::Arc;
|
||||
|
||||
use futures::sync::mpsc;
|
||||
use futures::{Sink, Future, Stream};
|
||||
use tokio_core::reactor;
|
||||
use parking_lot::Mutex;
|
||||
use service::ChainSpec;
|
||||
use primitives::block::Extrinsic;
|
||||
|
||||
struct RpcTransactionPool {
|
||||
inner: Arc<Mutex<txpool::TransactionPool>>,
|
||||
network: Arc<network::Service>,
|
||||
}
|
||||
|
||||
impl substrate_rpc::author::AuthorApi for RpcTransactionPool {
|
||||
fn submit_extrinsic(&self, xt: Extrinsic) -> substrate_rpc::author::error::Result<()> {
|
||||
use primitives::hexdisplay::HexDisplay;
|
||||
use polkadot_runtime::UncheckedExtrinsic;
|
||||
use codec::Slicable;
|
||||
|
||||
info!("Extrinsic submitted: {}", HexDisplay::from(&xt.0));
|
||||
let decoded = xt.using_encoded(|ref mut s| UncheckedExtrinsic::decode(s))
|
||||
.ok_or(substrate_rpc::author::error::ErrorKind::InvalidFormat)?;
|
||||
|
||||
info!("Correctly formatted: {:?}", decoded);
|
||||
|
||||
self.inner.lock().import(decoded)
|
||||
.map_err(|_| substrate_rpc::author::error::ErrorKind::PoolError)?;
|
||||
|
||||
self.network.trigger_repropagate();
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
struct Configuration(service::Configuration);
|
||||
|
||||
@@ -238,11 +210,12 @@ fn run_until_exit<B, E>(mut core: reactor::Core, service: service::Service<B, E>
|
||||
|
||||
let handler = || {
|
||||
let chain = rpc::apis::chain::Chain::new(service.client(), core.remote());
|
||||
let pool = RpcTransactionPool {
|
||||
inner: service.transaction_pool(),
|
||||
network: service.network(),
|
||||
};
|
||||
rpc::rpc_handler(service.client(), chain, pool, Configuration(config.clone()))
|
||||
rpc::rpc_handler(
|
||||
service.client(),
|
||||
chain,
|
||||
service.transaction_pool(),
|
||||
Configuration(config.clone()),
|
||||
)
|
||||
};
|
||||
(
|
||||
start_server(http_address, |address| rpc::start_http(address, handler())),
|
||||
|
||||
Reference in New Issue
Block a user