Exposing PersonalSigner API

This commit is contained in:
Tomasz Drwięga 2016-05-28 19:05:23 +02:00
parent 99f9747a3f
commit a7dfa83da1
9 changed files with 30 additions and 17 deletions

View File

@ -79,7 +79,6 @@ use std::fs::File;
use std::str::{FromStr, from_utf8}; use std::str::{FromStr, from_utf8};
use std::thread::sleep; use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use std::collections::HashSet;
use rustc_serialize::hex::FromHex; use rustc_serialize::hex::FromHex;
use ctrlc::CtrlC; use ctrlc::CtrlC;
use util::{H256, ToPretty, NetworkConfiguration, PayloadInfo, Bytes}; use util::{H256, ToPretty, NetworkConfiguration, PayloadInfo, Bytes};
@ -201,7 +200,7 @@ fn execute_client(conf: Configuration, spec: Spec, client_config: ClientConfig)
let deps_for_rpc_apis = Arc::new(rpc_apis::Dependencies { let deps_for_rpc_apis = Arc::new(rpc_apis::Dependencies {
signer_enabled: conf.args.flag_signer, signer_enabled: conf.args.flag_signer,
signer_queue: Arc::new(Mutex::new(HashSet::new())), signer_queue: Arc::new(rpc_apis::ConfirmationsQueue::default()),
client: client.clone(), client: client.clone(),
sync: sync.clone(), sync: sync.clone(),
secret_store: account_service.clone(), secret_store: account_service.clone(),

View File

@ -26,7 +26,17 @@ use util::RotatingLogger;
use util::keys::store::AccountService; use util::keys::store::AccountService;
use util::network_settings::NetworkSettings; use util::network_settings::NetworkSettings;
use ethcore_rpc::{SigningQueue, Extendable}; #[cfg(feature="rpc")]
pub use ethcore_rpc::ConfirmationsQueue;
#[cfg(not(feature="rpc"))]
#[derive(Default)]
pub struct ConfirmationsQueue;
#[cfg(feature="rpc")]
use ethcore_rpc::Extendable;
pub enum Api { pub enum Api {
Web3, Web3,
@ -62,7 +72,7 @@ impl FromStr for Api {
pub struct Dependencies { pub struct Dependencies {
pub signer_enabled: bool, pub signer_enabled: bool,
pub signer_queue: Arc<SigningQueue>, pub signer_queue: Arc<ConfirmationsQueue>,
pub client: Arc<Client>, pub client: Arc<Client>,
pub sync: Arc<EthSync>, pub sync: Arc<EthSync>,
pub secret_store: Arc<AccountService>, pub secret_store: Arc<AccountService>,
@ -125,7 +135,10 @@ pub fn setup_rpc<T: Extendable>(server: T, deps: Arc<Dependencies>, apis: Option
} }
}, },
Api::Personal => { Api::Personal => {
server.add_delegate(PersonalClient::new(&deps.secret_store, &deps.client, &deps.miner).to_delegate()) server.add_delegate(PersonalClient::new(&deps.secret_store, &deps.client, &deps.miner).to_delegate());
if deps.signer_enabled {
server.add_delegate(SignerClient::new(&deps.secret_store, &deps.client, &deps.miner, &deps.signer_queue).to_delegate());
}
}, },
Api::Ethcore => { Api::Ethcore => {
server.add_delegate(EthcoreClient::new(&deps.miner, deps.logger.clone(), deps.settings.clone()).to_delegate()) server.add_delegate(EthcoreClient::new(&deps.miner, deps.logger.clone(), deps.settings.clone()).to_delegate())

View File

@ -39,7 +39,7 @@ use self::jsonrpc_core::{IoHandler, IoDelegate};
pub use jsonrpc_http_server::{Server, RpcServerError}; pub use jsonrpc_http_server::{Server, RpcServerError};
pub mod v1; pub mod v1;
pub use v1::SigningQueue; pub use v1::{SigningQueue, ConfirmationsQueue};
/// An object that can be extended with `IoDelegates` /// An object that can be extended with `IoDelegates`
pub trait Extendable { pub trait Extendable {

View File

@ -31,6 +31,7 @@ pub trait SigningQueue: Send + Sync {
fn requests(&self) -> Vec<TransactionConfirmation>; fn requests(&self) -> Vec<TransactionConfirmation>;
} }
/// Queue for all unconfirmed transactions.
#[derive(Default)] #[derive(Default)]
pub struct ConfirmationsQueue { pub struct ConfirmationsQueue {
id: Mutex<U256>, id: Mutex<U256>,

View File

@ -22,7 +22,7 @@ use ethminer::MinerService;
use ethcore::client::BlockChainClient; use ethcore::client::BlockChainClient;
use util::numbers::*; use util::numbers::*;
use util::keys::store::AccountProvider; use util::keys::store::AccountProvider;
use v1::helpers::SigningQueue; use v1::helpers::{SigningQueue, ConfirmationsQueue};
use v1::traits::EthSigning; use v1::traits::EthSigning;
use v1::types::TransactionRequest; use v1::types::TransactionRequest;
use v1::impls::sign_and_dispatch; use v1::impls::sign_and_dispatch;
@ -30,12 +30,12 @@ use v1::impls::sign_and_dispatch;
/// Implementation of functions that require signing when no trusted signer is used. /// Implementation of functions that require signing when no trusted signer is used.
pub struct EthSigningQueueClient { pub struct EthSigningQueueClient {
queue: Weak<SigningQueue>, queue: Weak<ConfirmationsQueue>,
} }
impl EthSigningQueueClient { impl EthSigningQueueClient {
/// Creates a new signing queue client given shared signing queue. /// Creates a new signing queue client given shared signing queue.
pub fn new(queue: &Arc<SigningQueue>) -> Self { pub fn new(queue: &Arc<ConfirmationsQueue>) -> Self {
EthSigningQueueClient { EthSigningQueueClient {
queue: Arc::downgrade(queue), queue: Arc::downgrade(queue),
} }

View File

@ -21,7 +21,7 @@ use jsonrpc_core::*;
use v1::traits::PersonalSigner; use v1::traits::PersonalSigner;
use v1::types::TransactionModification; use v1::types::TransactionModification;
use v1::impls::sign_and_dispatch; use v1::impls::sign_and_dispatch;
use v1::helpers::SigningQueue; use v1::helpers::{SigningQueue, ConfirmationsQueue};
use util::keys::store::AccountProvider; use util::keys::store::AccountProvider;
use util::numbers::*; use util::numbers::*;
use ethcore::client::BlockChainClient; use ethcore::client::BlockChainClient;
@ -30,7 +30,7 @@ use ethminer::MinerService;
/// Transactions confirmation (personal) rpc implementation. /// Transactions confirmation (personal) rpc implementation.
pub struct SignerClient<A, C, M> pub struct SignerClient<A, C, M>
where A: AccountProvider, C: BlockChainClient, M: MinerService { where A: AccountProvider, C: BlockChainClient, M: MinerService {
queue: Weak<SigningQueue>, queue: Weak<ConfirmationsQueue>,
accounts: Weak<A>, accounts: Weak<A>,
client: Weak<C>, client: Weak<C>,
miner: Weak<M>, miner: Weak<M>,
@ -40,7 +40,7 @@ impl<A: 'static, C: 'static, M: 'static> SignerClient<A, C, M>
where A: AccountProvider, C: BlockChainClient, M: MinerService { where A: AccountProvider, C: BlockChainClient, M: MinerService {
/// Create new instance of signer client. /// Create new instance of signer client.
pub fn new(store: &Arc<A>, client: &Arc<C>, miner: &Arc<M>, queue: &Arc<SigningQueue>) -> Self { pub fn new(store: &Arc<A>, client: &Arc<C>, miner: &Arc<M>, queue: &Arc<ConfirmationsQueue>) -> Self {
SignerClient { SignerClient {
queue: Arc::downgrade(queue), queue: Arc::downgrade(queue),
accounts: Arc::downgrade(store), accounts: Arc::downgrade(store),

View File

@ -27,4 +27,4 @@ pub mod types;
pub use self::traits::{Web3, Eth, EthFilter, EthSigning, Personal, PersonalSigner, Net, Ethcore, Traces, Rpc}; pub use self::traits::{Web3, Eth, EthFilter, EthSigning, Personal, PersonalSigner, Net, Ethcore, Traces, Rpc};
pub use self::impls::*; pub use self::impls::*;
pub use self::helpers::SigningQueue; pub use self::helpers::{SigningQueue, ConfirmationsQueue};

View File

@ -22,13 +22,13 @@ use v1::helpers::{ConfirmationsQueue, SigningQueue};
use util::keys::TestAccount; use util::keys::TestAccount;
struct EthSigningTester { struct EthSigningTester {
pub queue: Arc<SigningQueue>, pub queue: Arc<ConfirmationsQueue>,
pub io: IoHandler, pub io: IoHandler,
} }
impl Default for EthSigningTester { impl Default for EthSigningTester {
fn default() -> Self { fn default() -> Self {
let queue: Arc<SigningQueue> = Arc::new(ConfirmationsQueue::default()); let queue = Arc::new(ConfirmationsQueue::default());
let io = IoHandler::new(); let io = IoHandler::new();
io.add_delegate(EthSigningQueueClient::new(&queue).to_delegate()); io.add_delegate(EthSigningQueueClient::new(&queue).to_delegate());

View File

@ -29,7 +29,7 @@ use v1::types::TransactionRequest;
struct PersonalSignerTester { struct PersonalSignerTester {
queue: Arc<SigningQueue>, queue: Arc<ConfirmationsQueue>,
accounts: Arc<TestAccountProvider>, accounts: Arc<TestAccountProvider>,
io: IoHandler, io: IoHandler,
miner: Arc<TestMinerService>, miner: Arc<TestMinerService>,
@ -54,7 +54,7 @@ fn miner_service() -> Arc<TestMinerService> {
} }
fn signer_tester() -> PersonalSignerTester { fn signer_tester() -> PersonalSignerTester {
let queue: Arc<SigningQueue> = Arc::new(ConfirmationsQueue::default()); let queue = Arc::new(ConfirmationsQueue::default());
let accounts = accounts_provider(); let accounts = accounts_provider();
let client = blockchain_client(); let client = blockchain_client();
let miner = miner_service(); let miner = miner_service();