Merge pull request #310 from ethcore/json_tests_split
unused functions cleanup
This commit is contained in:
commit
b7edc95bc4
@ -10,12 +10,10 @@ authors = ["Ethcore <admin@ethcore.io>"]
|
|||||||
log = "0.3"
|
log = "0.3"
|
||||||
env_logger = "0.3"
|
env_logger = "0.3"
|
||||||
rustc-serialize = "0.3"
|
rustc-serialize = "0.3"
|
||||||
flate2 = "0.2"
|
|
||||||
rocksdb = "0.3"
|
rocksdb = "0.3"
|
||||||
heapsize = "0.2.0"
|
heapsize = "0.2.0"
|
||||||
rust-crypto = "0.2.34"
|
rust-crypto = "0.2.34"
|
||||||
time = "0.1"
|
time = "0.1"
|
||||||
#interpolate_idents = { git = "https://github.com/SkylerLipthay/interpolate_idents" }
|
|
||||||
ethcore-util = { path = "../util" }
|
ethcore-util = { path = "../util" }
|
||||||
evmjit = { path = "../evmjit", optional = true }
|
evmjit = { path = "../evmjit", optional = true }
|
||||||
ethash = { path = "../ethash" }
|
ethash = { path = "../ethash" }
|
||||||
|
@ -21,6 +21,7 @@ pub struct Account {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Account {
|
impl Account {
|
||||||
|
#[cfg(test)]
|
||||||
/// General constructor.
|
/// General constructor.
|
||||||
pub fn new(balance: U256, nonce: U256, storage: HashMap<H256, H256>, code: Bytes) -> Account {
|
pub fn new(balance: U256, nonce: U256, storage: HashMap<H256, H256>, code: Bytes) -> Account {
|
||||||
Account {
|
Account {
|
||||||
@ -83,15 +84,8 @@ impl Account {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Reset this account to the status of a not-yet-initialised contract.
|
|
||||||
/// NOTE: Account should have `init_code()` called on it later.
|
|
||||||
pub fn reset_code(&mut self) {
|
|
||||||
self.code_hash = None;
|
|
||||||
self.code_cache = vec![];
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Set this account's code to the given code.
|
/// Set this account's code to the given code.
|
||||||
/// NOTE: Account should have been created with `new_contract()` or have `reset_code()` called on it.
|
/// NOTE: Account should have been created with `new_contract()`
|
||||||
pub fn init_code(&mut self, code: Bytes) {
|
pub fn init_code(&mut self, code: Bytes) {
|
||||||
assert!(self.code_hash.is_none());
|
assert!(self.code_hash.is_none());
|
||||||
self.code_cache = code;
|
self.code_cache = code;
|
||||||
|
@ -24,13 +24,6 @@ pub struct EnvInfo {
|
|||||||
pub gas_used: U256,
|
pub gas_used: U256,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl EnvInfo {
|
|
||||||
/// Create empty env_info initialized with zeros
|
|
||||||
pub fn new() -> EnvInfo {
|
|
||||||
EnvInfo::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for EnvInfo {
|
impl Default for EnvInfo {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
EnvInfo {
|
EnvInfo {
|
||||||
@ -97,4 +90,4 @@ r#"
|
|||||||
|
|
||||||
assert_eq!(default_env_info.difficulty, x!(0));
|
assert_eq!(default_env_info.difficulty, x!(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -399,7 +399,7 @@ mod tests {
|
|||||||
let mut state_result = get_temp_state();
|
let mut state_result = get_temp_state();
|
||||||
let mut state = state_result.reference_mut();
|
let mut state = state_result.reference_mut();
|
||||||
state.add_balance(&sender, &U256::from(0x100u64));
|
state.add_balance(&sender, &U256::from(0x100u64));
|
||||||
let info = EnvInfo::new();
|
let info = EnvInfo::default();
|
||||||
let engine = TestEngine::new(0, factory);
|
let engine = TestEngine::new(0, factory);
|
||||||
let mut substate = Substate::new();
|
let mut substate = Substate::new();
|
||||||
|
|
||||||
@ -458,7 +458,7 @@ mod tests {
|
|||||||
let mut state_result = get_temp_state();
|
let mut state_result = get_temp_state();
|
||||||
let mut state = state_result.reference_mut();
|
let mut state = state_result.reference_mut();
|
||||||
state.add_balance(&sender, &U256::from(100));
|
state.add_balance(&sender, &U256::from(100));
|
||||||
let info = EnvInfo::new();
|
let info = EnvInfo::default();
|
||||||
let engine = TestEngine::new(0, factory);
|
let engine = TestEngine::new(0, factory);
|
||||||
let mut substate = Substate::new();
|
let mut substate = Substate::new();
|
||||||
|
|
||||||
@ -512,7 +512,7 @@ mod tests {
|
|||||||
let mut state_result = get_temp_state();
|
let mut state_result = get_temp_state();
|
||||||
let mut state = state_result.reference_mut();
|
let mut state = state_result.reference_mut();
|
||||||
state.add_balance(&sender, &U256::from(100));
|
state.add_balance(&sender, &U256::from(100));
|
||||||
let info = EnvInfo::new();
|
let info = EnvInfo::default();
|
||||||
let engine = TestEngine::new(0, factory);
|
let engine = TestEngine::new(0, factory);
|
||||||
let mut substate = Substate::new();
|
let mut substate = Substate::new();
|
||||||
|
|
||||||
@ -564,7 +564,7 @@ mod tests {
|
|||||||
let mut state_result = get_temp_state();
|
let mut state_result = get_temp_state();
|
||||||
let mut state = state_result.reference_mut();
|
let mut state = state_result.reference_mut();
|
||||||
state.add_balance(&sender, &U256::from(100));
|
state.add_balance(&sender, &U256::from(100));
|
||||||
let info = EnvInfo::new();
|
let info = EnvInfo::default();
|
||||||
let engine = TestEngine::new(1024, factory);
|
let engine = TestEngine::new(1024, factory);
|
||||||
let mut substate = Substate::new();
|
let mut substate = Substate::new();
|
||||||
|
|
||||||
@ -624,7 +624,7 @@ mod tests {
|
|||||||
state.init_code(&address_b, code_b.clone());
|
state.init_code(&address_b, code_b.clone());
|
||||||
state.add_balance(&sender, &U256::from(100_000));
|
state.add_balance(&sender, &U256::from(100_000));
|
||||||
|
|
||||||
let info = EnvInfo::new();
|
let info = EnvInfo::default();
|
||||||
let engine = TestEngine::new(0, factory);
|
let engine = TestEngine::new(0, factory);
|
||||||
let mut substate = Substate::new();
|
let mut substate = Substate::new();
|
||||||
|
|
||||||
@ -668,7 +668,7 @@ mod tests {
|
|||||||
let mut state_result = get_temp_state();
|
let mut state_result = get_temp_state();
|
||||||
let mut state = state_result.reference_mut();
|
let mut state = state_result.reference_mut();
|
||||||
state.init_code(&address, code.clone());
|
state.init_code(&address, code.clone());
|
||||||
let info = EnvInfo::new();
|
let info = EnvInfo::default();
|
||||||
let engine = TestEngine::new(0, factory);
|
let engine = TestEngine::new(0, factory);
|
||||||
let mut substate = Substate::new();
|
let mut substate = Substate::new();
|
||||||
|
|
||||||
@ -694,7 +694,7 @@ mod tests {
|
|||||||
let mut state_result = get_temp_state();
|
let mut state_result = get_temp_state();
|
||||||
let mut state = state_result.reference_mut();
|
let mut state = state_result.reference_mut();
|
||||||
state.add_balance(&sender, &U256::from(18));
|
state.add_balance(&sender, &U256::from(18));
|
||||||
let mut info = EnvInfo::new();
|
let mut info = EnvInfo::default();
|
||||||
info.gas_limit = U256::from(100_000);
|
info.gas_limit = U256::from(100_000);
|
||||||
let engine = TestEngine::new(0, factory);
|
let engine = TestEngine::new(0, factory);
|
||||||
|
|
||||||
@ -721,7 +721,7 @@ mod tests {
|
|||||||
|
|
||||||
let mut state_result = get_temp_state();
|
let mut state_result = get_temp_state();
|
||||||
let mut state = state_result.reference_mut();
|
let mut state = state_result.reference_mut();
|
||||||
let mut info = EnvInfo::new();
|
let mut info = EnvInfo::default();
|
||||||
info.gas_limit = U256::from(100_000);
|
info.gas_limit = U256::from(100_000);
|
||||||
let engine = TestEngine::new(0, factory);
|
let engine = TestEngine::new(0, factory);
|
||||||
|
|
||||||
@ -746,7 +746,7 @@ mod tests {
|
|||||||
let mut state_result = get_temp_state();
|
let mut state_result = get_temp_state();
|
||||||
let mut state = state_result.reference_mut();
|
let mut state = state_result.reference_mut();
|
||||||
state.add_balance(&sender, &U256::from(17));
|
state.add_balance(&sender, &U256::from(17));
|
||||||
let mut info = EnvInfo::new();
|
let mut info = EnvInfo::default();
|
||||||
info.gas_limit = U256::from(100_000);
|
info.gas_limit = U256::from(100_000);
|
||||||
let engine = TestEngine::new(0, factory);
|
let engine = TestEngine::new(0, factory);
|
||||||
|
|
||||||
@ -772,7 +772,7 @@ mod tests {
|
|||||||
let mut state_result = get_temp_state();
|
let mut state_result = get_temp_state();
|
||||||
let mut state = state_result.reference_mut();
|
let mut state = state_result.reference_mut();
|
||||||
state.add_balance(&sender, &U256::from(17));
|
state.add_balance(&sender, &U256::from(17));
|
||||||
let mut info = EnvInfo::new();
|
let mut info = EnvInfo::default();
|
||||||
info.gas_used = U256::from(20_000);
|
info.gas_used = U256::from(20_000);
|
||||||
info.gas_limit = U256::from(100_000);
|
info.gas_limit = U256::from(100_000);
|
||||||
let engine = TestEngine::new(0, factory);
|
let engine = TestEngine::new(0, factory);
|
||||||
@ -799,7 +799,7 @@ mod tests {
|
|||||||
let mut state_result = get_temp_state();
|
let mut state_result = get_temp_state();
|
||||||
let mut state = state_result.reference_mut();
|
let mut state = state_result.reference_mut();
|
||||||
state.add_balance(&sender, &U256::from(100_017));
|
state.add_balance(&sender, &U256::from(100_017));
|
||||||
let mut info = EnvInfo::new();
|
let mut info = EnvInfo::default();
|
||||||
info.gas_limit = U256::from(100_000);
|
info.gas_limit = U256::from(100_000);
|
||||||
let engine = TestEngine::new(0, factory);
|
let engine = TestEngine::new(0, factory);
|
||||||
|
|
||||||
@ -833,7 +833,7 @@ mod tests {
|
|||||||
let mut state_result = get_temp_state();
|
let mut state_result = get_temp_state();
|
||||||
let mut state = state_result.reference_mut();
|
let mut state = state_result.reference_mut();
|
||||||
state.add_balance(&sender, &U256::from_str("152d02c7e14af6800000").unwrap());
|
state.add_balance(&sender, &U256::from_str("152d02c7e14af6800000").unwrap());
|
||||||
let info = EnvInfo::new();
|
let info = EnvInfo::default();
|
||||||
let engine = TestEngine::new(0, factory);
|
let engine = TestEngine::new(0, factory);
|
||||||
let mut substate = Substate::new();
|
let mut substate = Substate::new();
|
||||||
|
|
||||||
|
@ -13,39 +13,39 @@ pub type BlockNumber = u64;
|
|||||||
/// which is non-specific.
|
/// which is non-specific.
|
||||||
///
|
///
|
||||||
/// Doesn't do all that much on its own.
|
/// Doesn't do all that much on its own.
|
||||||
#[derive(Default, Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct Header {
|
pub struct Header {
|
||||||
// TODO: make all private.
|
// TODO: make all private.
|
||||||
/// TODO [Gav Wood] Please document me
|
/// Parent hash.
|
||||||
pub parent_hash: H256,
|
pub parent_hash: H256,
|
||||||
/// TODO [arkpar] Please document me
|
/// Block timestamp.
|
||||||
pub timestamp: u64,
|
pub timestamp: u64,
|
||||||
/// TODO [debris] Please document me
|
/// Block number.
|
||||||
pub number: BlockNumber,
|
pub number: BlockNumber,
|
||||||
/// TODO [Gav Wood] Please document me
|
/// Block author.
|
||||||
pub author: Address,
|
pub author: Address,
|
||||||
|
|
||||||
/// TODO [debris] Please document me
|
/// Transactions root.
|
||||||
pub transactions_root: H256,
|
pub transactions_root: H256,
|
||||||
/// TODO [debris] Please document me
|
/// Block uncles hash.
|
||||||
pub uncles_hash: H256,
|
pub uncles_hash: H256,
|
||||||
/// TODO [Gav Wood] Please document me
|
/// Block extra data.
|
||||||
pub extra_data: Bytes,
|
pub extra_data: Bytes,
|
||||||
|
|
||||||
/// TODO [debris] Please document me
|
/// State root.
|
||||||
pub state_root: H256,
|
pub state_root: H256,
|
||||||
/// TODO [debris] Please document me
|
/// Block receipts root.
|
||||||
pub receipts_root: H256,
|
pub receipts_root: H256,
|
||||||
/// TODO [debris] Please document me
|
/// Block bloom.
|
||||||
pub log_bloom: LogBloom,
|
pub log_bloom: LogBloom,
|
||||||
/// TODO [debris] Please document me
|
/// Gas used for contracts execution.
|
||||||
pub gas_used: U256,
|
pub gas_used: U256,
|
||||||
/// TODO [Gav Wood] Please document me
|
/// Block gas limit.
|
||||||
pub gas_limit: U256,
|
pub gas_limit: U256,
|
||||||
|
|
||||||
/// TODO [debris] Please document me
|
/// Block difficulty.
|
||||||
pub difficulty: U256,
|
pub difficulty: U256,
|
||||||
/// TODO [arkpar] Please document me
|
/// Block seal.
|
||||||
pub seal: Vec<Bytes>,
|
pub seal: Vec<Bytes>,
|
||||||
|
|
||||||
/// TODO [arkpar] Please document me
|
/// TODO [arkpar] Please document me
|
||||||
@ -54,9 +54,8 @@ pub struct Header {
|
|||||||
pub bare_hash: RefCell<Option<H256>>,
|
pub bare_hash: RefCell<Option<H256>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Header {
|
impl Default for Header {
|
||||||
/// Create a new, default-valued, header.
|
fn default() -> Self {
|
||||||
pub fn new() -> Header {
|
|
||||||
Header {
|
Header {
|
||||||
parent_hash: ZERO_H256.clone(),
|
parent_hash: ZERO_H256.clone(),
|
||||||
timestamp: 0,
|
timestamp: 0,
|
||||||
@ -79,6 +78,13 @@ impl Header {
|
|||||||
bare_hash: RefCell::new(None),
|
bare_hash: RefCell::new(None),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Header {
|
||||||
|
/// Create a new, default-valued, header.
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self::default()
|
||||||
|
}
|
||||||
|
|
||||||
/// TODO [Gav Wood] Please document me
|
/// TODO [Gav Wood] Please document me
|
||||||
pub fn number(&self) -> BlockNumber { self.number }
|
pub fn number(&self) -> BlockNumber { self.number }
|
||||||
|
@ -3,7 +3,7 @@ use client::{BlockChainClient,Client};
|
|||||||
use pod_state::*;
|
use pod_state::*;
|
||||||
use block::Block;
|
use block::Block;
|
||||||
use ethereum;
|
use ethereum;
|
||||||
use super::helpers::*;
|
use tests::helpers::*;
|
||||||
|
|
||||||
pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec<String> {
|
pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec<String> {
|
||||||
init_log();
|
init_log();
|
@ -1,6 +1,6 @@
|
|||||||
use client::{BlockChainClient,Client};
|
use client::{BlockChainClient,Client};
|
||||||
use super::test_common::*;
|
use super::test_common::*;
|
||||||
use super::helpers::*;
|
use tests::helpers::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn created() {
|
fn created() {
|
||||||
@ -75,4 +75,4 @@ fn can_collect_garbage() {
|
|||||||
let client = client_result.reference();
|
let client = client_result.reference();
|
||||||
client.tick();
|
client.tick();
|
||||||
assert!(client.cache_info().blocks < 100 * 1024);
|
assert!(client.cache_info().blocks < 100 * 1024);
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
use super::test_common::*;
|
use super::test_common::*;
|
||||||
use super::helpers::*;
|
|
||||||
use super::chain::json_chain_test;
|
use super::chain::json_chain_test;
|
||||||
|
use tests::helpers::*;
|
||||||
|
|
||||||
fn do_json_test(json_data: &[u8]) -> Vec<String> {
|
fn do_json_test(json_data: &[u8]) -> Vec<String> {
|
||||||
json_chain_test(json_data, ChainEra::Homestead)
|
json_chain_test(json_data, ChainEra::Homestead)
|
@ -1,5 +1,5 @@
|
|||||||
use super::test_common::*;
|
use super::test_common::*;
|
||||||
use super::helpers::*;
|
use tests::helpers::*;
|
||||||
use super::state::json_chain_test;
|
use super::state::json_chain_test;
|
||||||
|
|
||||||
fn do_json_test(json_data: &[u8]) -> Vec<String> {
|
fn do_json_test(json_data: &[u8]) -> Vec<String> {
|
10
ethcore/src/json_tests/mod.rs
Normal file
10
ethcore/src/json_tests/mod.rs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#[macro_use]
|
||||||
|
mod test_common;
|
||||||
|
|
||||||
|
mod transaction;
|
||||||
|
mod executive;
|
||||||
|
mod state;
|
||||||
|
mod client;
|
||||||
|
mod chain;
|
||||||
|
mod homestead_state;
|
||||||
|
mod homestead_chain;
|
@ -1,5 +1,5 @@
|
|||||||
use super::test_common::*;
|
use super::test_common::*;
|
||||||
use super::helpers::*;
|
use tests::helpers::*;
|
||||||
use pod_state::*;
|
use pod_state::*;
|
||||||
use state_diff::*;
|
use state_diff::*;
|
||||||
use ethereum;
|
use ethereum;
|
@ -12,7 +12,6 @@ macro_rules! declare_test {
|
|||||||
#[ignore]
|
#[ignore]
|
||||||
#[test]
|
#[test]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
#[cfg(feature="json-tests")]
|
|
||||||
fn $id() {
|
fn $id() {
|
||||||
test!($name);
|
test!($name);
|
||||||
}
|
}
|
||||||
@ -21,7 +20,6 @@ macro_rules! declare_test {
|
|||||||
#[cfg(feature = "test-heavy")]
|
#[cfg(feature = "test-heavy")]
|
||||||
#[test]
|
#[test]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
#[cfg(feature="json-tests")]
|
|
||||||
fn $id() {
|
fn $id() {
|
||||||
test!($name);
|
test!($name);
|
||||||
}
|
}
|
||||||
@ -29,7 +27,6 @@ macro_rules! declare_test {
|
|||||||
($id: ident, $name: expr) => {
|
($id: ident, $name: expr) => {
|
||||||
#[test]
|
#[test]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
#[cfg(feature="json-tests")]
|
|
||||||
fn $id() {
|
fn $id() {
|
||||||
test!($name);
|
test!($name);
|
||||||
}
|
}
|
@ -63,7 +63,6 @@
|
|||||||
#[macro_use] extern crate ethcore_util as util;
|
#[macro_use] extern crate ethcore_util as util;
|
||||||
#[macro_use] extern crate lazy_static;
|
#[macro_use] extern crate lazy_static;
|
||||||
extern crate rustc_serialize;
|
extern crate rustc_serialize;
|
||||||
extern crate flate2;
|
|
||||||
extern crate rocksdb;
|
extern crate rocksdb;
|
||||||
extern crate heapsize;
|
extern crate heapsize;
|
||||||
extern crate crypto;
|
extern crate crypto;
|
||||||
@ -108,4 +107,8 @@ mod executive;
|
|||||||
mod externalities;
|
mod externalities;
|
||||||
mod verification;
|
mod verification;
|
||||||
|
|
||||||
#[cfg(test)] mod tests;
|
#[cfg(test)]
|
||||||
|
mod tests;
|
||||||
|
#[cfg(test)]
|
||||||
|
#[cfg(feature="json-tests")]
|
||||||
|
mod json_tests;
|
||||||
|
@ -16,6 +16,7 @@ pub struct PodAccount {
|
|||||||
|
|
||||||
impl PodAccount {
|
impl PodAccount {
|
||||||
/// Construct new object.
|
/// Construct new object.
|
||||||
|
#[cfg(test)]
|
||||||
pub fn new(balance: U256, nonce: U256, code: Bytes, storage: BTreeMap<H256, H256>) -> PodAccount {
|
pub fn new(balance: U256, nonce: U256, code: Bytes, storage: BTreeMap<H256, H256>) -> PodAccount {
|
||||||
PodAccount { balance: balance, nonce: nonce, code: code, storage: storage }
|
PodAccount { balance: balance, nonce: nonce, code: code, storage: storage }
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ impl PodState {
|
|||||||
pub fn new() -> PodState { Default::default() }
|
pub fn new() -> PodState { Default::default() }
|
||||||
|
|
||||||
/// Contruct a new object from the `m`.
|
/// Contruct a new object from the `m`.
|
||||||
|
#[cfg(test)]
|
||||||
pub fn from(m: BTreeMap<Address, PodAccount>) -> PodState { PodState(m) }
|
pub fn from(m: BTreeMap<Address, PodAccount>) -> PodState { PodState(m) }
|
||||||
|
|
||||||
/// Get the underlying map.
|
/// Get the underlying map.
|
||||||
@ -21,6 +22,7 @@ impl PodState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Drain object to get the underlying map.
|
/// Drain object to get the underlying map.
|
||||||
|
#[cfg(test)]
|
||||||
pub fn drain(self) -> BTreeMap<Address, PodAccount> { self.0 }
|
pub fn drain(self) -> BTreeMap<Address, PodAccount> { self.0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,23 +1,10 @@
|
|||||||
//! Parameters for a block chain.
|
//! Parameters for a block chain.
|
||||||
|
|
||||||
use common::*;
|
use common::*;
|
||||||
use flate2::read::GzDecoder;
|
|
||||||
use engine::*;
|
use engine::*;
|
||||||
use pod_state::*;
|
use pod_state::*;
|
||||||
use null_engine::*;
|
use null_engine::*;
|
||||||
|
|
||||||
/// Converts file from base64 gzipped bytes to json
|
|
||||||
fn gzip64res_to_json(source: &[u8]) -> Json {
|
|
||||||
// there is probably no need to store genesis in based64 gzip,
|
|
||||||
// but that's what go does, and it was easy to load it this way
|
|
||||||
let data = source.from_base64().expect("Genesis block is malformed!");
|
|
||||||
let data_ref: &[u8] = &data;
|
|
||||||
let mut decoder = GzDecoder::new(data_ref).expect("Gzip is invalid");
|
|
||||||
let mut s: String = "".to_owned();
|
|
||||||
decoder.read_to_string(&mut s).expect("Gzip is invalid");
|
|
||||||
Json::from_str(&s).expect("Json is invalid")
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Convert JSON value to equivalent RLP representation.
|
/// Convert JSON value to equivalent RLP representation.
|
||||||
// TODO: handle container types.
|
// TODO: handle container types.
|
||||||
fn json_to_rlp(json: &Json) -> Bytes {
|
fn json_to_rlp(json: &Json) -> Bytes {
|
||||||
|
@ -2,7 +2,7 @@ use common::*;
|
|||||||
use engine::Engine;
|
use engine::Engine;
|
||||||
use executive::Executive;
|
use executive::Executive;
|
||||||
use pod_account::*;
|
use pod_account::*;
|
||||||
use pod_state::*;
|
use pod_state::PodState;
|
||||||
//use state_diff::*; // TODO: uncomment once to_pod() works correctly.
|
//use state_diff::*; // TODO: uncomment once to_pod() works correctly.
|
||||||
|
|
||||||
/// TODO [Gav Wood] Please document me
|
/// TODO [Gav Wood] Please document me
|
||||||
@ -20,6 +20,7 @@ pub struct State {
|
|||||||
|
|
||||||
impl State {
|
impl State {
|
||||||
/// Creates new state with empty state root
|
/// Creates new state with empty state root
|
||||||
|
#[cfg(test)]
|
||||||
pub fn new(mut db: JournalDB, account_start_nonce: U256) -> State {
|
pub fn new(mut db: JournalDB, account_start_nonce: U256) -> State {
|
||||||
let mut root = H256::new();
|
let mut root = H256::new();
|
||||||
{
|
{
|
||||||
@ -60,11 +61,6 @@ impl State {
|
|||||||
&self.root
|
&self.root
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Expose the underlying database; good to use for calling `state.db().commit()`.
|
|
||||||
pub fn db(&mut self) -> &mut JournalDB {
|
|
||||||
&mut self.db
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Create a new contract at address `contract`. If there is already an account at the address
|
/// Create a new contract at address `contract`. If there is already an account at the address
|
||||||
/// it will have its code reset, ready for `init_code()`.
|
/// it will have its code reset, ready for `init_code()`.
|
||||||
pub fn new_contract(&mut self, contract: &Address, balance: U256) {
|
pub fn new_contract(&mut self, contract: &Address, balance: U256) {
|
||||||
@ -143,7 +139,6 @@ impl State {
|
|||||||
// let old = self.to_pod();
|
// let old = self.to_pod();
|
||||||
|
|
||||||
let e = try!(Executive::new(self, env_info, engine).transact(t));
|
let e = try!(Executive::new(self, env_info, engine).transact(t));
|
||||||
//println!("Executed: {:?}", e);
|
|
||||||
|
|
||||||
// TODO uncomment once to_pod() works correctly.
|
// TODO uncomment once to_pod() works correctly.
|
||||||
// trace!("Applied transaction. Diff:\n{}\n", StateDiff::diff_pod(&old, &self.to_pod()));
|
// trace!("Applied transaction. Diff:\n{}\n", StateDiff::diff_pod(&old, &self.to_pod()));
|
||||||
@ -153,16 +148,11 @@ impl State {
|
|||||||
Ok(receipt)
|
Ok(receipt)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// TODO [debris] Please document me
|
/// Reverts uncommited changed.
|
||||||
pub fn revert(&mut self, backup: State) {
|
pub fn revert(&mut self, backup: State) {
|
||||||
self.cache = backup.cache;
|
self.cache = backup.cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert into a JSON representation.
|
|
||||||
pub fn as_json(&self) -> String {
|
|
||||||
unimplemented!();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Commit accounts to SecTrieDBMut. This is similar to cpp-ethereum's dev::eth::commit.
|
/// Commit accounts to SecTrieDBMut. This is similar to cpp-ethereum's dev::eth::commit.
|
||||||
/// `accounts` is mutable because we may need to commit the code or storage and record that.
|
/// `accounts` is mutable because we may need to commit the code or storage and record that.
|
||||||
#[allow(match_ref_pats)]
|
#[allow(match_ref_pats)]
|
||||||
@ -196,6 +186,7 @@ impl State {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Populate the state from `accounts`.
|
/// Populate the state from `accounts`.
|
||||||
|
#[cfg(test)]
|
||||||
pub fn populate_from(&mut self, accounts: PodState) {
|
pub fn populate_from(&mut self, accounts: PodState) {
|
||||||
for (add, acc) in accounts.drain().into_iter() {
|
for (add, acc) in accounts.drain().into_iter() {
|
||||||
self.cache.borrow_mut().insert(add, Some(Account::from_pod(acc)));
|
self.cache.borrow_mut().insert(add, Some(Account::from_pod(acc)));
|
||||||
@ -213,6 +204,7 @@ impl State {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
/// Populate a PodAccount map from this state.
|
/// Populate a PodAccount map from this state.
|
||||||
pub fn to_pod(&self) -> PodState {
|
pub fn to_pod(&self) -> PodState {
|
||||||
// TODO: handle database rather than just the cache.
|
// TODO: handle database rather than just the cache.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use client::{BlockChainClient,Client};
|
use client::{BlockChainClient,Client};
|
||||||
use std::env;
|
use std::env;
|
||||||
use super::test_common::*;
|
use common::*;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use spec::*;
|
use spec::*;
|
||||||
use std::fs::{remove_dir_all};
|
use std::fs::{remove_dir_all};
|
||||||
|
@ -1,11 +1 @@
|
|||||||
#[macro_use]
|
|
||||||
mod test_common;
|
|
||||||
|
|
||||||
mod transaction;
|
|
||||||
mod executive;
|
|
||||||
mod state;
|
|
||||||
mod client;
|
|
||||||
mod chain;
|
|
||||||
pub mod helpers;
|
pub mod helpers;
|
||||||
mod homestead_state;
|
|
||||||
mod homestead_chain;
|
|
@ -6,11 +6,11 @@ use error::*;
|
|||||||
use evm::Schedule;
|
use evm::Schedule;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
/// TODO [Gav Wood] Please document me
|
/// Transaction action type.
|
||||||
pub enum Action {
|
pub enum Action {
|
||||||
/// TODO [Gav Wood] Please document me
|
/// Create creates new contract.
|
||||||
Create,
|
Create,
|
||||||
/// TODO [debris] Please document me
|
/// Calls contract at given address.
|
||||||
Call(Address),
|
Call(Address),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,6 +49,7 @@ pub struct Transaction {
|
|||||||
|
|
||||||
impl Transaction {
|
impl Transaction {
|
||||||
/// TODO [Gav Wood] Please document me
|
/// TODO [Gav Wood] Please document me
|
||||||
|
#[cfg(test)]
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Transaction {
|
Transaction {
|
||||||
nonce: x!(0),
|
nonce: x!(0),
|
||||||
@ -64,7 +65,9 @@ impl Transaction {
|
|||||||
sender: RefCell::new(None),
|
sender: RefCell::new(None),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a new message-call transaction.
|
/// Create a new message-call transaction.
|
||||||
|
#[cfg(test)]
|
||||||
pub fn new_call(to: Address, value: U256, data: Bytes, gas: U256, gas_price: U256, nonce: U256) -> Transaction {
|
pub fn new_call(to: Address, value: U256, data: Bytes, gas: U256, gas_price: U256, nonce: U256) -> Transaction {
|
||||||
Transaction {
|
Transaction {
|
||||||
nonce: nonce,
|
nonce: nonce,
|
||||||
@ -82,6 +85,7 @@ impl Transaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Create a new contract-creation transaction.
|
/// Create a new contract-creation transaction.
|
||||||
|
#[cfg(test)]
|
||||||
pub fn new_create(value: U256, data: Bytes, gas: U256, gas_price: U256, nonce: U256) -> Transaction {
|
pub fn new_create(value: U256, data: Bytes, gas: U256, gas_price: U256, nonce: U256) -> Transaction {
|
||||||
Transaction {
|
Transaction {
|
||||||
nonce: nonce,
|
nonce: nonce,
|
||||||
@ -168,11 +172,6 @@ impl Transaction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Note that some fields have changed. Resets the memoised hash.
|
|
||||||
pub fn note_dirty(&self) {
|
|
||||||
*self.hash.borrow_mut() = None;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// 0 is `v` is 27, 1 if 28, and 4 otherwise.
|
/// 0 is `v` is 27, 1 if 28, and 4 otherwise.
|
||||||
pub fn standard_v(&self) -> u8 { match self.v { 27 => 0, 28 => 1, _ => 4 } }
|
pub fn standard_v(&self) -> u8 { match self.v { 27 => 0, 28 => 1, _ => 4 } }
|
||||||
|
|
||||||
@ -205,6 +204,7 @@ impl Transaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Signs the transaction as coming from `sender`.
|
/// Signs the transaction as coming from `sender`.
|
||||||
|
#[cfg(test)]
|
||||||
pub fn signed(self, secret: &Secret) -> Transaction { let mut r = self; r.sign(secret); r }
|
pub fn signed(self, secret: &Secret) -> Transaction { let mut r = self; r.sign(secret); r }
|
||||||
|
|
||||||
/// Get the transaction cost in gas for the given params.
|
/// Get the transaction cost in gas for the given params.
|
||||||
|
Loading…
Reference in New Issue
Block a user