Separating eth_signing
This commit is contained in:
parent
ffa113511b
commit
f794018e95
@ -34,9 +34,9 @@ use ethcore::transaction::{Transaction as EthTransaction, SignedTransaction, Act
|
|||||||
use ethcore::log_entry::LogEntry;
|
use ethcore::log_entry::LogEntry;
|
||||||
use ethcore::filter::Filter as EthcoreFilter;
|
use ethcore::filter::Filter as EthcoreFilter;
|
||||||
use self::ethash::SeedHashCompute;
|
use self::ethash::SeedHashCompute;
|
||||||
use v1::traits::{Eth, EthSigning};
|
use v1::traits::Eth;
|
||||||
use v1::types::{Block, BlockTransactions, BlockNumber, Bytes, SyncStatus, SyncInfo, Transaction, TransactionRequest, CallRequest, OptionalValue, Index, Filter, Log, Receipt};
|
use v1::types::{Block, BlockTransactions, BlockNumber, Bytes, SyncStatus, SyncInfo, Transaction, CallRequest, OptionalValue, Index, Filter, Log, Receipt};
|
||||||
use v1::impls::{dispatch_transaction, sign_and_dispatch};
|
use v1::impls::dispatch_transaction;
|
||||||
use util::keys::store::AccountProvider;
|
use util::keys::store::AccountProvider;
|
||||||
use serde;
|
use serde;
|
||||||
|
|
||||||
@ -530,49 +530,3 @@ impl<C, S, A, M, EM> Eth for EthClient<C, S, A, M, EM> where
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Implementation of functions that require signing when no trusted signer is used.
|
|
||||||
pub struct EthSigningUnsafeClient<C, A, M> where
|
|
||||||
C: BlockChainClient,
|
|
||||||
A: AccountProvider,
|
|
||||||
M: MinerService {
|
|
||||||
client: Weak<C>,
|
|
||||||
accounts: Weak<A>,
|
|
||||||
miner: Weak<M>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<C, A, M> EthSigningUnsafeClient<C, A, M> where
|
|
||||||
C: BlockChainClient,
|
|
||||||
A: AccountProvider,
|
|
||||||
M: MinerService {
|
|
||||||
|
|
||||||
/// Creates new EthClient.
|
|
||||||
pub fn new(client: &Arc<C>, accounts: &Arc<A>, miner: &Arc<M>)
|
|
||||||
-> Self {
|
|
||||||
EthSigningUnsafeClient {
|
|
||||||
client: Arc::downgrade(client),
|
|
||||||
miner: Arc::downgrade(miner),
|
|
||||||
accounts: Arc::downgrade(accounts),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<C, A, M> EthSigning for EthSigningUnsafeClient<C, A, M> where
|
|
||||||
C: BlockChainClient + 'static,
|
|
||||||
A: AccountProvider + 'static,
|
|
||||||
M: MinerService + 'static {
|
|
||||||
|
|
||||||
fn send_transaction(&self, params: Params) -> Result<Value, Error> {
|
|
||||||
from_params::<(TransactionRequest, )>(params)
|
|
||||||
.and_then(|(request, )| {
|
|
||||||
let accounts = take_weak!(self.accounts);
|
|
||||||
match accounts.account_secret(&request.from) {
|
|
||||||
Ok(secret) => sign_and_dispatch(&self.client, &self.miner, request, secret),
|
|
||||||
Err(_) => to_value(&H256::zero())
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -21,7 +21,7 @@ use std::sync::{Arc, Weak, Mutex};
|
|||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use jsonrpc_core::*;
|
use jsonrpc_core::*;
|
||||||
use util::numbers::*;
|
use util::numbers::*;
|
||||||
use ethminer::{MinerService};
|
use ethminer::MinerService;
|
||||||
use ethcore::filter::Filter as EthcoreFilter;
|
use ethcore::filter::Filter as EthcoreFilter;
|
||||||
use ethcore::client::{BlockChainClient, BlockID};
|
use ethcore::client::{BlockChainClient, BlockID};
|
||||||
use v1::traits::EthFilter;
|
use v1::traits::EthFilter;
|
||||||
|
71
rpc/src/v1/impls/eth_signing.rs
Normal file
71
rpc/src/v1/impls/eth_signing.rs
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
// Copyright 2015, 2016 Ethcore (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
//! Eth Signing RPC implementation.
|
||||||
|
|
||||||
|
use std::sync::{Arc, Weak};
|
||||||
|
use jsonrpc_core::*;
|
||||||
|
use ethminer::MinerService;
|
||||||
|
use ethcore::client::BlockChainClient;
|
||||||
|
use util::numbers::*;
|
||||||
|
use util::keys::store::AccountProvider;
|
||||||
|
use v1::traits::EthSigning;
|
||||||
|
use v1::types::TransactionRequest;
|
||||||
|
use v1::impls::sign_and_dispatch;
|
||||||
|
|
||||||
|
/// Implementation of functions that require signing when no trusted signer is used.
|
||||||
|
pub struct EthSigningUnsafeClient<C, A, M> where
|
||||||
|
C: BlockChainClient,
|
||||||
|
A: AccountProvider,
|
||||||
|
M: MinerService {
|
||||||
|
client: Weak<C>,
|
||||||
|
accounts: Weak<A>,
|
||||||
|
miner: Weak<M>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<C, A, M> EthSigningUnsafeClient<C, A, M> where
|
||||||
|
C: BlockChainClient,
|
||||||
|
A: AccountProvider,
|
||||||
|
M: MinerService {
|
||||||
|
|
||||||
|
/// Creates new EthClient.
|
||||||
|
pub fn new(client: &Arc<C>, accounts: &Arc<A>, miner: &Arc<M>)
|
||||||
|
-> Self {
|
||||||
|
EthSigningUnsafeClient {
|
||||||
|
client: Arc::downgrade(client),
|
||||||
|
miner: Arc::downgrade(miner),
|
||||||
|
accounts: Arc::downgrade(accounts),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<C, A, M> EthSigning for EthSigningUnsafeClient<C, A, M> where
|
||||||
|
C: BlockChainClient + 'static,
|
||||||
|
A: AccountProvider + 'static,
|
||||||
|
M: MinerService + 'static {
|
||||||
|
|
||||||
|
fn send_transaction(&self, params: Params) -> Result<Value, Error> {
|
||||||
|
from_params::<(TransactionRequest, )>(params)
|
||||||
|
.and_then(|(request, )| {
|
||||||
|
let accounts = take_weak!(self.accounts);
|
||||||
|
match accounts.account_secret(&request.from) {
|
||||||
|
Ok(secret) => sign_and_dispatch(&self.client, &self.miner, request, secret),
|
||||||
|
Err(_) => to_value(&H256::zero())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -28,6 +28,7 @@ macro_rules! take_weak {
|
|||||||
mod web3;
|
mod web3;
|
||||||
mod eth;
|
mod eth;
|
||||||
mod eth_filter;
|
mod eth_filter;
|
||||||
|
mod eth_signing;
|
||||||
mod net;
|
mod net;
|
||||||
mod personal;
|
mod personal;
|
||||||
mod ethcore;
|
mod ethcore;
|
||||||
@ -35,8 +36,9 @@ mod traces;
|
|||||||
mod rpc;
|
mod rpc;
|
||||||
|
|
||||||
pub use self::web3::Web3Client;
|
pub use self::web3::Web3Client;
|
||||||
pub use self::eth::{EthClient, EthSigningUnsafeClient};
|
pub use self::eth::EthClient;
|
||||||
pub use self::eth_filter::EthFilterClient;
|
pub use self::eth_filter::EthFilterClient;
|
||||||
|
pub use self::eth_signing::EthSigningUnsafeClient;
|
||||||
pub use self::net::NetClient;
|
pub use self::net::NetClient;
|
||||||
pub use self::personal::PersonalClient;
|
pub use self::personal::PersonalClient;
|
||||||
pub use self::ethcore::EthcoreClient;
|
pub use self::ethcore::EthcoreClient;
|
||||||
|
Loading…
Reference in New Issue
Block a user