From 7e9ce8f51c0b4b77933c9d67f9764f3b32a6940e Mon Sep 17 00:00:00 2001 From: debris Date: Mon, 14 Dec 2015 12:09:32 +0100 Subject: [PATCH] rlp array && added missing rustc crate --- Cargo.toml | 1 + src/account.rs | 4 ++++ src/blockheader.rs | 40 ++++++++++++++++++++-------------------- src/lib.rs | 1 + src/transaction.rs | 23 ++++++++++++----------- 5 files changed, 38 insertions(+), 31 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b0cae8dce..55e9ca79c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ log = "0.3" env_logger = "0.3" ethcore-util = "0.1.0" evmjit = { path = "rust-evmjit", optional = true } +rustc-serialize = "0.3" [features] jit = ["evmjit"] diff --git a/src/account.rs b/src/account.rs index 400273fab..966b596d4 100644 --- a/src/account.rs +++ b/src/account.rs @@ -169,6 +169,8 @@ fn playpen() { #[test] fn new_account() { + use rustc_serialize::hex::ToHex; + let a = Account::new(U256::from(69u8), U256::from(0u8), HashMap::new(), Bytes::new()); assert_eq!(a.rlp().to_hex(), "f8448045a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"); assert_eq!(a.balance(), &U256::from(69u8)); @@ -179,6 +181,8 @@ fn new_account() { #[test] fn create_account() { + use rustc_serialize::hex::ToHex; + let a = Account::new(U256::from(69u8), U256::from(0u8), HashMap::new(), Bytes::new()); assert_eq!(a.rlp().to_hex(), "f8448045a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"); } diff --git a/src/blockheader.rs b/src/blockheader.rs index 6abbbdff7..6ef7764d5 100644 --- a/src/blockheader.rs +++ b/src/blockheader.rs @@ -56,26 +56,26 @@ impl Header { impl Decodable for Header { fn decode(decoder: &D) -> Result where D: Decoder { - decoder.read_list(| d | { - let blockheader = Header { - parent_hash: try!(Decodable::decode(&d[0])), - uncles_hash: try!(Decodable::decode(&d[1])), - author: try!(Decodable::decode(&d[2])), - state_root: try!(Decodable::decode(&d[3])), - transactions_root: try!(Decodable::decode(&d[4])), - receipts_root: try!(Decodable::decode(&d[5])), - log_bloom: try!(Decodable::decode(&d[6])), - difficulty: try!(Decodable::decode(&d[7])), - number: try!(Decodable::decode(&d[8])), - gas_limit: try!(Decodable::decode(&d[9])), - gas_used: try!(Decodable::decode(&d[10])), - timestamp: try!(Decodable::decode(&d[11])), - extra_data: try!(Decodable::decode(&d[12])), - seal: vec![], - }; - // TODO: fill blockheader.seal with (raw) list items index 12..) - Ok(blockheader) - }) + let d = try!(decoder.as_list()); + + let blockheader = Header { + parent_hash: try!(Decodable::decode(&d[0])), + uncles_hash: try!(Decodable::decode(&d[1])), + author: try!(Decodable::decode(&d[2])), + state_root: try!(Decodable::decode(&d[3])), + transactions_root: try!(Decodable::decode(&d[4])), + receipts_root: try!(Decodable::decode(&d[5])), + log_bloom: try!(Decodable::decode(&d[6])), + difficulty: try!(Decodable::decode(&d[7])), + number: try!(Decodable::decode(&d[8])), + gas_limit: try!(Decodable::decode(&d[9])), + gas_used: try!(Decodable::decode(&d[10])), + timestamp: try!(Decodable::decode(&d[11])), + extra_data: try!(Decodable::decode(&d[12])), + seal: vec![], + }; + // TODO: fill blockheader.seal with (raw) list items index 12..) + Ok(blockheader) } } diff --git a/src/lib.rs b/src/lib.rs index 8a562cec2..d7f354423 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -72,6 +72,7 @@ #[macro_use] extern crate log; extern crate env_logger; +extern crate rustc_serialize; #[cfg(feature = "jit" )] extern crate evmjit; extern crate ethcore_util as util; diff --git a/src/transaction.rs b/src/transaction.rs index fc2159c8a..4fbd9588b 100644 --- a/src/transaction.rs +++ b/src/transaction.rs @@ -37,17 +37,18 @@ impl Encodable for Transaction { impl Decodable for Transaction { fn decode(decoder: &D) -> Result where D: Decoder { - decoder.read_list(| d | { - let transaction = Transaction { - nonce: try!(Decodable::decode(&d[0])), - gas_price: try!(Decodable::decode(&d[1])), - gas: try!(Decodable::decode(&d[2])), - receive_address: try!(Decodable::decode(&d[3])), - value: try!(Decodable::decode(&d[4])), - data: try!(Decodable::decode(&d[5])), - }; - Ok(transaction) - }) + let d = try!(decoder.as_list()); + + let transaction = Transaction { + nonce: try!(Decodable::decode(&d[0])), + gas_price: try!(Decodable::decode(&d[1])), + gas: try!(Decodable::decode(&d[2])), + receive_address: try!(Decodable::decode(&d[3])), + value: try!(Decodable::decode(&d[4])), + data: try!(Decodable::decode(&d[5])), + }; + + Ok(transaction) } }