add eth_balance and eth_accounts

This commit is contained in:
Georgios Konstantopoulos 2020-05-24 20:26:41 +03:00
parent 3ed8b58ceb
commit f8ca81ab22
No known key found for this signature in database
GPG Key ID: FA607837CD26EDBC
2 changed files with 27 additions and 1 deletions

View File

@ -8,7 +8,8 @@ use std::convert::TryFrom;
async fn main() -> Result<(), failure::Error> {
// connect to the network
let provider = HttpProvider::try_from("http://localhost:8545")?;
let from = "784C1bA9846aB4CE78E9CFa27884E29dd31d593A".parse()?;
let accounts = provider.get_accounts().await?;
let from = accounts[0];
// craft the tx
let tx = TransactionRequest {
@ -21,6 +22,8 @@ async fn main() -> Result<(), failure::Error> {
nonce: None,
};
let balance_before = provider.get_balance(from, None).await?;
// broadcast it via the eth_sendTransaction API
let tx_hash = provider.send_transaction(tx).await?;
@ -38,5 +41,11 @@ async fn main() -> Result<(), failure::Error> {
assert!(nonce2 < nonce1);
let balance_after = provider.get_balance(from, None).await?;
assert!(balance_after < balance_before);
println!("Balance before {}", balance_before);
println!("Balance after {}", balance_after);
Ok(())
}

View File

@ -46,6 +46,11 @@ impl<P: JsonRpcClient> Provider<P> {
}
}
/// Gets the accounts on the node
pub async fn get_accounts(&self) -> Result<Vec<Address>, P::Error> {
self.0.request("eth_accounts", None::<()>).await
}
/// Gets the latest block number via the `eth_BlockNumber` API
pub async fn get_block_number(&self) -> Result<U256, P::Error> {
self.0.request("eth_blockNumber", None::<()>).await
@ -71,6 +76,8 @@ impl<P: JsonRpcClient> Provider<P> {
self.0.request("eth_sendRawTransaction", Some(rlp)).await
}
// Account state
pub async fn get_transaction_count(
&self,
from: Address,
@ -82,4 +89,14 @@ impl<P: JsonRpcClient> Provider<P> {
.request("eth_getTransactionCount", Some(&[from, block]))
.await
}
pub async fn get_balance(
&self,
from: Address,
block: Option<BlockNumber>,
) -> Result<U256, P::Error> {
let from = utils::serialize(&from);
let block = utils::serialize(&block.unwrap_or(BlockNumber::Latest));
self.0.request("eth_getBalance", Some(&[from, block])).await
}
}