* parity-version: mark 2.1.0 track beta * ci: update branch version references * docker: release master to latest * Fix checkpointing when creating contract failed (#9514) * ci: fix json docs generation (#9515) * fix typo in version string (#9516) * Update patricia trie to 0.2.2 crates. Default dependencies on minor version only. * Putting back ethereum tests to the right commit * Enable all Constantinople hard fork changes in constantinople_test.json (#9505) * Enable all Constantinople hard fork changes in constantinople_test.json * Address grumbles * Remove EIP-210 activation * 8m -> 5m * Temporarily add back eip210 transition so we can get test passed * Add eip210_test and remove eip210 transition from const_test * In create memory calculation is the same for create2 because the additional parameter was popped before. (#9522) * deps: bump fs-swap and kvdb-rocksdb * Multithreaded snapshot creation (#9239) * Add Progress to Snapshot Secondary chunks creation * Use half of CPUs to multithread snapshot creation * Use env var to define number of threads * info to debug logs * Add Snapshot threads as CLI option * Randomize chunks per thread * Remove randomness, add debugging * Add warning * Add tracing * Use parity-common fix seek branch * Fix log * Fix tests * Fix tests * PR Grumbles * PR Grumble II * Update Cargo.lock * PR Grumbles * Default snapshot threads to half number of CPUs * Fix default snapshot threads // min 1 * correct before_script for nightly build versions (#9543) - fix gitlab array of strings syntax error - get proper commit id - avoid colon in stings * Remove initial token for WS. (#9545) * version: mark release critical * ci: fix rpc docs generation 2 (#9550) * Improve P2P discovery (#9526) * Add `target` to Rust traces * network-devp2p: Don't remove discovery peer in main sync * network-p2p: Refresh discovery more often * Update Peer discovery protocol * Run discovery more often when not enough nodes connected * Start the first discovery early * Update fast discovery rate * Fix tests * Fix `ping` tests * Fixing remote Node address ; adding PingPong round * Fix tests: update new +1 PingPong round * Increase slow Discovery rate Check in flight FindNode before pings * Add `deprecated` to deprecated_echo_hash * Refactor `discovery_round` branching * net_version caches network_id to avoid redundant aquire of sync read lock (#9544) * net_version caches network_id to avoid redundant aquire of sync read lock, #8746 * use lower_hex display formatting for net_peerCount rpc method * Increase Gas-floor-target and Gas Cap (#9564) + Gas-floor-target increased to 8M by default + Gas-cap increased to 10M by default * Revert to old parity-tokio-ipc. * Downgrade named pipes.
99 lines
4.3 KiB
Rust
99 lines
4.3 KiB
Rust
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
|
|
// This file is part of Parity.
|
|
|
|
// Parity is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// Parity is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
//! Tests of EVM integration with transaction execution.
|
|
|
|
use std::sync::Arc;
|
|
use hash::keccak;
|
|
use vm::{EnvInfo, ActionParams, ActionValue, CallType, ParamsType};
|
|
use evm::{Factory, VMType};
|
|
use executive::Executive;
|
|
use state::Substate;
|
|
use test_helpers::get_temp_state_with_factory;
|
|
use trace::{NoopVMTracer, NoopTracer};
|
|
use transaction::SYSTEM_ADDRESS;
|
|
|
|
use rustc_hex::FromHex;
|
|
|
|
use ethereum_types::{H256, Address};
|
|
|
|
evm_test!{test_blockhash_eip210: test_blockhash_eip210_int}
|
|
fn test_blockhash_eip210(factory: Factory) {
|
|
let get_prev_hash_code = Arc::new("600143034060205260206020f3".from_hex().unwrap()); // this returns previous block hash
|
|
let get_prev_hash_code_hash = keccak(get_prev_hash_code.as_ref());
|
|
// This is same as DEFAULT_BLOCKHASH_CONTRACT except for metropolis transition block check removed.
|
|
let test_blockhash_contract = "73fffffffffffffffffffffffffffffffffffffffe33141561007a57600143036020526000356101006020510755600061010060205107141561005057600035610100610100602051050761010001555b6000620100006020510714156100755760003561010062010000602051050761020001555b61014a565b4360003512151561009057600060405260206040f35b610100600035430312156100b357610100600035075460605260206060f3610149565b62010000600035430312156100d157600061010060003507146100d4565b60005b156100f6576101006101006000350507610100015460805260206080f3610148565b630100000060003543031215610116576000620100006000350714610119565b60005b1561013c57610100620100006000350507610200015460a052602060a0f3610147565b600060c052602060c0f35b5b5b5b5b";
|
|
let blockhash_contract_code = Arc::new(test_blockhash_contract.from_hex().unwrap());
|
|
let blockhash_contract_code_hash = keccak(blockhash_contract_code.as_ref());
|
|
let machine = ::ethereum::new_eip210_test_machine();
|
|
let mut env_info = EnvInfo::default();
|
|
|
|
// populate state with 256 last hashes
|
|
let mut state = get_temp_state_with_factory(factory);
|
|
let contract_address: Address = 0xf0.into();
|
|
state.init_code(&contract_address, (*blockhash_contract_code).clone()).unwrap();
|
|
for i in 1 .. 257 {
|
|
env_info.number = i.into();
|
|
let params = ActionParams {
|
|
code_address: contract_address.clone(),
|
|
address: contract_address,
|
|
sender: SYSTEM_ADDRESS.clone(),
|
|
origin: SYSTEM_ADDRESS.clone(),
|
|
gas: 100000.into(),
|
|
gas_price: 0.into(),
|
|
value: ActionValue::Transfer(0.into()),
|
|
code: Some(blockhash_contract_code.clone()),
|
|
code_hash: Some(blockhash_contract_code_hash),
|
|
data: Some(H256::from(i - 1).to_vec()),
|
|
call_type: CallType::Call,
|
|
params_type: ParamsType::Separate,
|
|
};
|
|
let schedule = machine.schedule(env_info.number);
|
|
let mut ex = Executive::new(&mut state, &env_info, &machine, &schedule);
|
|
let mut substate = Substate::new();
|
|
if let Err(e) = ex.call(params, &mut substate, &mut NoopTracer, &mut NoopVMTracer) {
|
|
panic!("Encountered error on updating last hashes: {}", e);
|
|
}
|
|
}
|
|
|
|
env_info.number = 256;
|
|
let params = ActionParams {
|
|
code_address: Address::new(),
|
|
address: Address::new(),
|
|
sender: Address::new(),
|
|
origin: Address::new(),
|
|
gas: 100000.into(),
|
|
gas_price: 0.into(),
|
|
value: ActionValue::Transfer(0.into()),
|
|
code: Some(get_prev_hash_code),
|
|
code_hash: Some(get_prev_hash_code_hash),
|
|
data: None,
|
|
call_type: CallType::Call,
|
|
params_type: ParamsType::Separate,
|
|
};
|
|
let schedule = machine.schedule(env_info.number);
|
|
let mut ex = Executive::new(&mut state, &env_info, &machine, &schedule);
|
|
let mut substate = Substate::new();
|
|
let res = ex.call(params, &mut substate, &mut NoopTracer, &mut NoopVMTracer);
|
|
let output = match res {
|
|
Ok(res) => H256::from(&res.return_data[..32]),
|
|
Err(e) => {
|
|
panic!("Encountered error on getting last hash: {}", e);
|
|
},
|
|
};
|
|
assert_eq!(output, 255.into());
|
|
}
|