inital commit with eth_blockNumber working
This commit is contained in:
parent
7cb8cbe056
commit
82373ab7a4
@ -20,10 +20,13 @@ time = "0.1"
|
||||
evmjit = { path = "rust-evmjit", optional = true }
|
||||
ethash = { path = "ethash" }
|
||||
num_cpus = "0.2"
|
||||
jsonrpc-core = { version = "1.0", optional = true }
|
||||
jsonrpc-http-server = { version = "1.0", optional = true }
|
||||
|
||||
[features]
|
||||
jit = ["evmjit"]
|
||||
evm_debug = []
|
||||
rpc = ["jsonrpc-core", "jsonrpc-http-server"]
|
||||
|
||||
[[bin]]
|
||||
name = "client"
|
||||
|
53
src/bin/client/ethrpc.rs
Normal file
53
src/bin/client/ethrpc.rs
Normal file
@ -0,0 +1,53 @@
|
||||
extern crate jsonrpc_core;
|
||||
extern crate jsonrpc_http_server;
|
||||
|
||||
use std::sync::{Arc, RwLock};
|
||||
use self::jsonrpc_core::{IoHandler, IoDelegate, Params, Value, Error, ErrorCode};
|
||||
use ethcore::client::*;
|
||||
|
||||
struct Eth {
|
||||
client: Arc<RwLock<Client>>
|
||||
}
|
||||
|
||||
impl Eth {
|
||||
fn new(client: Arc<RwLock<Client>>) -> Self {
|
||||
Eth {
|
||||
client: client
|
||||
}
|
||||
}
|
||||
|
||||
fn block_number(&self, params: Params) -> Result<Value, Error> {
|
||||
match params {
|
||||
Params::None => Ok(Value::U64(self.client.read().unwrap().chain_info().best_block_number)),
|
||||
_ => Err(Error::new(ErrorCode::InvalidParams)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct EthRpc;
|
||||
|
||||
impl EthRpc {
|
||||
fn build_handler(client: Arc<RwLock<Client>>) -> IoHandler {
|
||||
let mut handler = IoHandler::new();
|
||||
let mut eth = IoDelegate::new(Arc::new(Eth::new(client)));
|
||||
eth.add_method("eth_blockNumber", Eth::block_number);
|
||||
handler.add_delegate(eth);
|
||||
handler
|
||||
}
|
||||
}
|
||||
|
||||
pub struct HttpServer {
|
||||
server: jsonrpc_http_server::Server
|
||||
}
|
||||
|
||||
impl HttpServer {
|
||||
pub fn new(client: Arc<RwLock<Client>>, threads: usize) -> HttpServer {
|
||||
HttpServer {
|
||||
server: jsonrpc_http_server::Server::new(EthRpc::build_handler(client), threads)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn start_async(self, addr: &str) {
|
||||
self.server.start_async(addr)
|
||||
}
|
||||
}
|
@ -4,6 +4,9 @@ extern crate rustc_serialize;
|
||||
extern crate log;
|
||||
extern crate env_logger;
|
||||
|
||||
#[cfg(feature = "rpc")]
|
||||
mod ethrpc;
|
||||
|
||||
use std::io::stdin;
|
||||
use std::env;
|
||||
use log::{LogLevelFilter};
|
||||
@ -26,10 +29,22 @@ fn setup_log() {
|
||||
builder.init().unwrap();
|
||||
}
|
||||
|
||||
|
||||
#[cfg(feature = "rpc")]
|
||||
fn setup_rpc_server(client: Arc<RwLock<Client>>) {
|
||||
let server = ethrpc::HttpServer::new(client, 1);
|
||||
server.start_async("127.0.0.1:3030");
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "rpc"))]
|
||||
fn setup_rpc_server(_client: Arc<RwLock<Client>>) {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
setup_log();
|
||||
let spec = ethereum::new_frontier();
|
||||
let mut service = ClientService::start(spec).unwrap();
|
||||
setup_rpc_server(service.client());
|
||||
let io_handler = Box::new(ClientIoHandler { client: service.client(), timer: 0, info: Default::default() });
|
||||
service.io().register_handler(io_handler).expect("Error registering IO handler");
|
||||
loop {
|
||||
|
Loading…
Reference in New Issue
Block a user