mod http;
mod serialize;
pub use self::http::{ClientMethod, MethodParams, RpcConnector};
use cmd::Error;
use emerald::Address;
use hex::ToHex;
use jsonrpc_core::{Params, Value};
pub fn request_nonce(rpc: &RpcConnector, addr: &Address) -> Result<String, Error> {
let data = vec![
Value::String(addr.to_string()),
Value::String("latest".to_string()),
];
let params = Params::Array(data);
let val = rpc.send_post(&MethodParams(ClientMethod::EthGetTxCount, ¶ms))?;
match val.as_str() {
Some(s) => Ok(s.to_string()),
None => Err(Error::ExecError("Can't parse tx count".to_string())),
}
}
pub fn request_balance(rpc: &RpcConnector, addr: &Address) -> Result<String, Error> {
let data = vec![
Value::String(addr.to_string()),
Value::String("latest".to_string()),
];
let params = Params::Array(data);
rpc.send_post(&MethodParams(ClientMethod::EthGetBalance, ¶ms))
.and_then(|v| match v.as_str() {
Some(str) => Ok(str.to_string()),
None => Err(Error::ExecError(format!("Can't get balance for {}", addr))),
})
}
pub fn request_gas(rpc: &RpcConnector) -> Result<String, Error> {
let data = vec![Value::String("latest".to_string())];
let params = Params::Array(data);
let val = rpc.send_post(&MethodParams(ClientMethod::EthEstimateGas, ¶ms))?;
match val.as_str() {
Some(s) => Ok(s.to_string()),
None => Err(Error::ExecError("Can't estimate required gas".to_string())),
}
}
pub fn request_gas_price(rpc: &RpcConnector) -> Result<String, Error> {
let params = Params::Array(vec![]);
let val = rpc.send_post(&MethodParams(ClientMethod::EthGasPrice, ¶ms))?;
match val.as_str() {
Some(s) => Ok(s.to_string()),
None => Err(Error::ExecError("Can't estimate gas price".to_string())),
}
}
pub fn send_transaction(rpc: &RpcConnector, raw: &[u8]) -> Result<String, Error> {
let data = vec![Value::String(format!("0x{}", &raw.to_hex()))];
let params = Params::Array(data);
rpc.send_post(&MethodParams(ClientMethod::EthSendRawTransaction, ¶ms))
.and_then(|v| match v.as_str() {
Some(str) => Ok(str.to_string()),
None => Err(Error::ExecError("Can't parse tx hash".to_string())),
})
}