generic basic account fetcher, nonce RPC
This commit is contained in:
parent
024e69138a
commit
e460421deb
@ -27,6 +27,7 @@ use light::on_demand::{request, OnDemand};
|
|||||||
use light::net::LightProtocol;
|
use light::net::LightProtocol;
|
||||||
|
|
||||||
use ethcore::account_provider::{AccountProvider, DappId};
|
use ethcore::account_provider::{AccountProvider, DappId};
|
||||||
|
use ethcore::basic_account::BasicAccount;
|
||||||
use ethcore::encoded;
|
use ethcore::encoded;
|
||||||
use ethcore::ids::BlockId;
|
use ethcore::ids::BlockId;
|
||||||
use ethsync::LightSync;
|
use ethsync::LightSync;
|
||||||
@ -44,6 +45,8 @@ use v1::types::{
|
|||||||
};
|
};
|
||||||
use v1::metadata::Metadata;
|
use v1::metadata::Metadata;
|
||||||
|
|
||||||
|
use util::Address;
|
||||||
|
|
||||||
/// Light client `ETH` RPC.
|
/// Light client `ETH` RPC.
|
||||||
pub struct EthClient {
|
pub struct EthClient {
|
||||||
sync: Arc<LightSync>,
|
sync: Arc<LightSync>,
|
||||||
@ -106,6 +109,20 @@ impl EthClient {
|
|||||||
None => future::err(err_no_context()).boxed()
|
None => future::err(err_no_context()).boxed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// helper for getting account info.
|
||||||
|
fn account(&self, address: Address, id: BlockId) -> BoxFuture<BasicAccount, Error> {
|
||||||
|
let (sync, on_demand) = (self.sync.clone(), self.on_demand.clone());
|
||||||
|
|
||||||
|
self.header(id).and_then(move |header| {
|
||||||
|
sync.with_context(|ctx| on_demand.account(ctx, request::Account {
|
||||||
|
header: header,
|
||||||
|
address: address,
|
||||||
|
}))
|
||||||
|
.map(|x| x.map_err(errors::from_on_demand_error).boxed())
|
||||||
|
.unwrap_or_else(|| future::err(err_no_context()).boxed())
|
||||||
|
}).boxed()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Eth for EthClient {
|
impl Eth for EthClient {
|
||||||
@ -152,19 +169,7 @@ impl Eth for EthClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn balance(&self, address: RpcH160, num: Trailing<BlockNumber>) -> BoxFuture<RpcU256, Error> {
|
fn balance(&self, address: RpcH160, num: Trailing<BlockNumber>) -> BoxFuture<RpcU256, Error> {
|
||||||
let address = address.into();
|
self.account(address.into(), num.0.into()).map(|acc| acc.balance.into()).boxed()
|
||||||
|
|
||||||
let sync = self.sync.clone();
|
|
||||||
let on_demand = self.on_demand.clone();
|
|
||||||
|
|
||||||
self.header(num.0.into()).and_then(move |header| {
|
|
||||||
sync.with_context(|ctx| on_demand.account(ctx, request::Account {
|
|
||||||
header: header,
|
|
||||||
address: address,
|
|
||||||
}))
|
|
||||||
.map(|x| x.map_err(errors::from_on_demand_error).boxed())
|
|
||||||
.unwrap_or_else(|| future::err(err_no_context()).boxed())
|
|
||||||
}).map(|acc| acc.balance.into()).boxed()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn storage_at(&self, address: RpcH160, key: RpcU256, num: Trailing<BlockNumber>) -> BoxFuture<RpcH256, Error> {
|
fn storage_at(&self, address: RpcH160, key: RpcU256, num: Trailing<BlockNumber>) -> BoxFuture<RpcH256, Error> {
|
||||||
@ -180,7 +185,7 @@ impl Eth for EthClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn transaction_count(&self, address: RpcH160, num: Trailing<BlockNumber>) -> BoxFuture<RpcU256, Error> {
|
fn transaction_count(&self, address: RpcH160, num: Trailing<BlockNumber>) -> BoxFuture<RpcU256, Error> {
|
||||||
future::err(errors::unimplemented(None)).boxed()
|
self.account(address.into(), num.0.into()).map(|acc| acc.nonce.into()).boxed()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn block_transaction_count_by_hash(&self, hash: RpcH256) -> BoxFuture<Option<RpcU256>, Error> {
|
fn block_transaction_count_by_hash(&self, hash: RpcH256) -> BoxFuture<Option<RpcU256>, Error> {
|
||||||
|
Loading…
Reference in New Issue
Block a user