2020-09-22 14:53:52 +02:00
|
|
|
// Copyright 2015-2020 Parity Technologies (UK) Ltd.
|
|
|
|
// This file is part of OpenEthereum.
|
2016-02-05 13:40:41 +01:00
|
|
|
|
2020-09-22 14:53:52 +02:00
|
|
|
// OpenEthereum is free software: you can redistribute it and/or modify
|
2016-02-05 13:40:41 +01:00
|
|
|
// 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.
|
|
|
|
|
2020-09-22 14:53:52 +02:00
|
|
|
// OpenEthereum is distributed in the hope that it will be useful,
|
2016-02-05 13:40:41 +01:00
|
|
|
// 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
|
2020-09-22 14:53:52 +02:00
|
|
|
// along with OpenEthereum. If not, see <http://www.gnu.org/licenses/>.
|
2016-02-05 13:40:41 +01:00
|
|
|
|
2016-01-09 17:15:55 +01:00
|
|
|
//! Ethereum protocol module.
|
|
|
|
//!
|
|
|
|
//! Contains all Ethereum network specific stuff, such as denominations and
|
|
|
|
//! consensus specifications.
|
|
|
|
|
2016-02-03 13:20:32 +01:00
|
|
|
/// Export the denominations module.
|
2016-01-09 17:15:55 +01:00
|
|
|
pub mod denominations;
|
2016-02-03 13:20:32 +01:00
|
|
|
/// Export the ethash module.
|
2016-01-09 17:15:55 +01:00
|
|
|
pub mod ethash;
|
|
|
|
|
2016-02-13 13:15:46 +01:00
|
|
|
pub use self::{denominations::*, ethash::Ethash};
|
2016-01-09 17:15:55 +01:00
|
|
|
|
2016-01-09 18:20:31 +01:00
|
|
|
use super::spec::*;
|
2017-09-26 14:19:08 +02:00
|
|
|
use machine::EthereumMachine;
|
2016-01-09 18:20:31 +01:00
|
|
|
|
2018-08-20 14:05:01 +02:00
|
|
|
/// Load chain spec from `SpecParams` and JSON.
|
|
|
|
pub fn load<'a, T: Into<Option<SpecParams<'a>>>>(params: T, b: &[u8]) -> Spec {
|
2017-09-25 19:45:33 +02:00
|
|
|
match params.into() {
|
|
|
|
Some(params) => Spec::load(params, b),
|
2017-07-10 12:57:40 +02:00
|
|
|
None => Spec::load(&::std::env::temp_dir(), b),
|
|
|
|
}
|
|
|
|
.expect("chain spec is invalid")
|
2016-09-05 17:41:34 +02:00
|
|
|
}
|
|
|
|
|
2017-09-26 14:19:08 +02:00
|
|
|
fn load_machine(b: &[u8]) -> EthereumMachine {
|
|
|
|
Spec::load_machine(b).expect("chain spec is invalid")
|
|
|
|
}
|
|
|
|
|
2018-08-30 21:32:47 +02:00
|
|
|
/// Create a new Foundation mainnet chain spec.
|
2017-09-25 19:45:33 +02:00
|
|
|
pub fn new_foundation<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/foundation.json"),
|
2017-09-25 19:45:33 +02:00
|
|
|
)
|
|
|
|
}
|
2016-01-09 18:20:31 +01:00
|
|
|
|
2018-08-30 21:32:47 +02:00
|
|
|
/// Create a new POA Network mainnet chain spec.
|
|
|
|
pub fn new_poanet<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/poacore.json"),
|
2018-08-30 21:32:47 +02:00
|
|
|
)
|
2018-01-05 13:49:07 +01:00
|
|
|
}
|
|
|
|
|
2019-09-12 18:43:53 +02:00
|
|
|
/// Create a new xDai chain spec.
|
|
|
|
pub fn new_xdai<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/xdai.json"),
|
2019-09-12 18:43:53 +02:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2019-08-12 18:55:11 +02:00
|
|
|
/// Create a new Volta mainnet chain spec.
|
|
|
|
pub fn new_volta<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/volta.json"),
|
2019-08-12 18:55:11 +02:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Create a new EWC mainnet chain spec.
|
|
|
|
pub fn new_ewc<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
2021-01-13 18:06:55 +01:00
|
|
|
load(
|
|
|
|
params.into(),
|
|
|
|
include_bytes!("../../res/chainspec/ewc.json"),
|
|
|
|
)
|
2018-06-14 11:03:22 +02:00
|
|
|
}
|
|
|
|
|
2017-10-08 18:17:59 +02:00
|
|
|
/// Create a new Musicoin mainnet chain spec.
|
|
|
|
pub fn new_musicoin<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
2018-10-03 13:44:43 +02:00
|
|
|
// The musicoin chain spec uses a block reward contract which can be found at
|
|
|
|
// https://gist.github.com/andresilva/6f2afaf9486732a0797f4bdeae018ee9
|
2017-10-08 18:17:59 +02:00
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/musicoin.json"),
|
2017-10-08 18:17:59 +02:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2017-12-06 13:46:24 +01:00
|
|
|
/// Create a new Ellaism mainnet chain spec.
|
|
|
|
pub fn new_ellaism<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/ellaism.json"),
|
2017-12-06 13:46:24 +01:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2018-11-01 11:06:53 +01:00
|
|
|
/// Create a new MIX mainnet chain spec.
|
|
|
|
pub fn new_mix<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
2021-01-13 18:06:55 +01:00
|
|
|
load(
|
|
|
|
params.into(),
|
|
|
|
include_bytes!("../../res/chainspec/mix.json"),
|
|
|
|
)
|
2018-11-01 11:06:53 +01:00
|
|
|
}
|
|
|
|
|
2019-03-26 23:31:52 +01:00
|
|
|
/// Create a new Callisto chain spec
|
|
|
|
pub fn new_callisto<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/callisto.json"),
|
2019-03-26 23:31:52 +01:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2018-08-30 21:32:47 +02:00
|
|
|
/// Create a new Morden testnet chain spec.
|
|
|
|
pub fn new_morden<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/morden.json"),
|
2018-08-30 21:32:47 +02:00
|
|
|
)
|
2017-09-25 19:45:33 +02:00
|
|
|
}
|
2017-07-10 12:57:40 +02:00
|
|
|
|
2018-08-30 21:32:47 +02:00
|
|
|
/// Create a new Ropsten testnet chain spec.
|
2017-09-25 19:45:33 +02:00
|
|
|
pub fn new_ropsten<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/ropsten.json"),
|
2017-09-25 19:45:33 +02:00
|
|
|
)
|
|
|
|
}
|
2017-07-10 12:57:40 +02:00
|
|
|
|
2018-08-30 21:32:47 +02:00
|
|
|
/// Create a new Kovan testnet chain spec.
|
|
|
|
pub fn new_kovan<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/kovan.json"),
|
2018-08-30 21:32:47 +02:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2019-03-26 23:31:52 +01:00
|
|
|
/// Create a new Rinkeby testnet chain spec.
|
|
|
|
pub fn new_rinkeby<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/rinkeby.json"),
|
2019-03-26 23:31:52 +01:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Create a new Görli testnet chain spec.
|
|
|
|
pub fn new_goerli<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/goerli.json"),
|
2019-03-26 23:31:52 +01:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2018-08-30 21:32:47 +02:00
|
|
|
/// Create a new POA Sokol testnet chain spec.
|
|
|
|
pub fn new_sokol<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/poasokol.json"),
|
2018-08-30 21:32:47 +02:00
|
|
|
)
|
2017-09-25 19:45:33 +02:00
|
|
|
}
|
2021-02-01 16:40:00 +01:00
|
|
|
/// Create a new YOLO spec
|
|
|
|
pub fn new_yolo3<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|
|
|
load(
|
|
|
|
params.into(),
|
|
|
|
include_bytes!("../../res/chainspec/yolo3.json"),
|
|
|
|
)
|
|
|
|
}
|
2017-07-10 12:57:40 +02:00
|
|
|
|
|
|
|
// For tests
|
2017-03-02 20:24:27 +01:00
|
|
|
|
2017-03-06 21:37:38 +01:00
|
|
|
/// Create a new Foundation Frontier-era chain spec as though it never changes to Homestead.
|
2017-07-10 12:57:40 +02:00
|
|
|
pub fn new_frontier_test() -> Spec {
|
|
|
|
load(
|
|
|
|
None,
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/test/frontier_test.json"),
|
2017-07-10 12:57:40 +02:00
|
|
|
)
|
|
|
|
}
|
2016-01-09 18:20:31 +01:00
|
|
|
|
2018-06-05 19:49:11 +02:00
|
|
|
/// Create a new Ropsten chain spec.
|
|
|
|
pub fn new_ropsten_test() -> Spec {
|
2021-01-13 18:03:12 +01:00
|
|
|
load(None, include_bytes!("../../res/chainspec/ropsten.json"))
|
2018-06-05 19:49:11 +02:00
|
|
|
}
|
|
|
|
|
2017-03-06 21:37:38 +01:00
|
|
|
/// Create a new Foundation Homestead-era chain spec as though it never changed from Frontier.
|
2017-07-10 12:57:40 +02:00
|
|
|
pub fn new_homestead_test() -> Spec {
|
|
|
|
load(
|
|
|
|
None,
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/test/homestead_test.json"),
|
2017-07-10 12:57:40 +02:00
|
|
|
)
|
|
|
|
}
|
2016-01-16 21:08:04 +01:00
|
|
|
|
2017-03-06 21:37:38 +01:00
|
|
|
/// Create a new Foundation Homestead-EIP150-era chain spec as though it never changed from Homestead/Frontier.
|
2017-07-10 12:57:40 +02:00
|
|
|
pub fn new_eip150_test() -> Spec {
|
2021-01-13 18:06:55 +01:00
|
|
|
load(
|
|
|
|
None,
|
|
|
|
include_bytes!("../../res/chainspec/test/eip150_test.json"),
|
|
|
|
)
|
2017-07-10 12:57:40 +02:00
|
|
|
}
|
2016-10-15 14:39:15 +02:00
|
|
|
|
2017-03-06 21:37:38 +01:00
|
|
|
/// Create a new Foundation Homestead-EIP161-era chain spec as though it never changed from Homestead/Frontier.
|
2017-07-10 12:57:40 +02:00
|
|
|
pub fn new_eip161_test() -> Spec {
|
2021-01-13 18:06:55 +01:00
|
|
|
load(
|
|
|
|
None,
|
|
|
|
include_bytes!("../../res/chainspec/test/eip161_test.json"),
|
|
|
|
)
|
2017-07-10 12:57:40 +02:00
|
|
|
}
|
2016-11-03 22:22:25 +01:00
|
|
|
|
2017-03-06 21:37:38 +01:00
|
|
|
/// Create a new Foundation Frontier/Homestead/DAO chain spec with transition points at #5 and #8.
|
2017-07-10 12:57:40 +02:00
|
|
|
pub fn new_transition_test() -> Spec {
|
|
|
|
load(
|
|
|
|
None,
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/test/transition_test.json"),
|
2017-07-10 12:57:40 +02:00
|
|
|
)
|
|
|
|
}
|
2016-07-16 13:02:56 +02:00
|
|
|
|
2017-03-06 21:37:38 +01:00
|
|
|
/// Create a new Foundation Mainnet chain spec without genesis accounts.
|
2017-07-10 12:57:40 +02:00
|
|
|
pub fn new_mainnet_like() -> Spec {
|
|
|
|
load(
|
|
|
|
None,
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/test/frontier_like_test.json"),
|
2017-07-10 12:57:40 +02:00
|
|
|
)
|
|
|
|
}
|
2016-01-09 18:20:31 +01:00
|
|
|
|
2017-09-15 21:07:54 +02:00
|
|
|
/// Create a new Foundation Byzantium era spec.
|
|
|
|
pub fn new_byzantium_test() -> Spec {
|
|
|
|
load(
|
|
|
|
None,
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/test/byzantium_test.json"),
|
2017-09-15 21:07:54 +02:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Create a new Foundation Constantinople era spec.
|
|
|
|
pub fn new_constantinople_test() -> Spec {
|
|
|
|
load(
|
|
|
|
None,
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/test/constantinople_test.json"),
|
2017-09-15 21:07:54 +02:00
|
|
|
)
|
|
|
|
}
|
2016-01-09 18:20:31 +01:00
|
|
|
|
2019-02-11 17:13:36 +01:00
|
|
|
/// Create a new Foundation St. Peter's (Contantinople Fix) era spec.
|
|
|
|
pub fn new_constantinople_fix_test() -> Spec {
|
|
|
|
load(
|
|
|
|
None,
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/test/st_peters_test.json"),
|
2019-02-11 17:13:36 +01:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2019-09-26 11:03:39 +02:00
|
|
|
/// Create a new Foundation Istanbul era spec.
|
|
|
|
pub fn new_istanbul_test() -> Spec {
|
|
|
|
load(
|
|
|
|
None,
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/test/istanbul_test.json"),
|
2019-09-26 11:03:39 +02:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2020-09-10 08:04:14 +02:00
|
|
|
/// Create a new BizantiumToConstaninopleFixAt5 era spec.
|
|
|
|
pub fn new_byzantium_to_constantinoplefixat5_test() -> Spec {
|
|
|
|
load(
|
|
|
|
None,
|
2021-01-13 18:03:12 +01:00
|
|
|
include_bytes!("../../res/chainspec/test/byzantium_to_constantinoplefixat5_test.json"),
|
2020-09-10 08:04:14 +02:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Create a new Foundation Berlin era spec.
|
|
|
|
pub fn new_berlin_test() -> Spec {
|
2021-01-13 18:06:55 +01:00
|
|
|
load(
|
|
|
|
None,
|
|
|
|
include_bytes!("../../res/chainspec/test/berlin_test.json"),
|
|
|
|
)
|
2020-09-10 08:04:14 +02:00
|
|
|
}
|
|
|
|
|
2017-10-08 18:17:59 +02:00
|
|
|
/// Create a new Musicoin-MCIP3-era spec.
|
|
|
|
pub fn new_mcip3_test() -> Spec {
|
2021-01-13 18:06:55 +01:00
|
|
|
load(
|
|
|
|
None,
|
|
|
|
include_bytes!("../../res/chainspec/test/mcip3_test.json"),
|
|
|
|
)
|
2017-10-08 18:17:59 +02:00
|
|
|
}
|
|
|
|
|
2017-09-26 14:19:08 +02:00
|
|
|
// For tests
|
|
|
|
|
|
|
|
/// Create a new Foundation Frontier-era chain spec as though it never changes to Homestead.
|
|
|
|
pub fn new_frontier_test_machine() -> EthereumMachine {
|
2021-01-13 18:06:55 +01:00
|
|
|
load_machine(include_bytes!(
|
|
|
|
"../../res/chainspec/test/frontier_test.json"
|
|
|
|
))
|
2017-09-26 14:19:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Create a new Foundation Homestead-era chain spec as though it never changed from Frontier.
|
|
|
|
pub fn new_homestead_test_machine() -> EthereumMachine {
|
2021-01-13 18:06:55 +01:00
|
|
|
load_machine(include_bytes!(
|
|
|
|
"../../res/chainspec/test/homestead_test.json"
|
|
|
|
))
|
2017-09-26 14:19:08 +02:00
|
|
|
}
|
|
|
|
|
2018-09-11 20:08:23 +02:00
|
|
|
/// Create a new Foundation Homestead-EIP210-era chain spec as though it never changed from Homestead/Frontier.
|
|
|
|
pub fn new_eip210_test_machine() -> EthereumMachine {
|
2021-01-13 18:03:12 +01:00
|
|
|
load_machine(include_bytes!("../../res/chainspec/test/eip210_test.json"))
|
2018-09-11 20:08:23 +02:00
|
|
|
}
|
|
|
|
|
2017-09-26 14:19:08 +02:00
|
|
|
/// Create a new Foundation Byzantium era spec.
|
|
|
|
pub fn new_byzantium_test_machine() -> EthereumMachine {
|
2021-01-13 18:06:55 +01:00
|
|
|
load_machine(include_bytes!(
|
|
|
|
"../../res/chainspec/test/byzantium_test.json"
|
|
|
|
))
|
2017-09-26 14:19:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Create a new Foundation Constantinople era spec.
|
|
|
|
pub fn new_constantinople_test_machine() -> EthereumMachine {
|
|
|
|
load_machine(include_bytes!(
|
2021-01-13 18:03:12 +01:00
|
|
|
"../../res/chainspec/test/constantinople_test.json"
|
2017-09-26 14:19:08 +02:00
|
|
|
))
|
|
|
|
}
|
|
|
|
|
2019-02-11 17:13:36 +01:00
|
|
|
/// Create a new Foundation St. Peter's (Contantinople Fix) era spec.
|
|
|
|
pub fn new_constantinople_fix_test_machine() -> EthereumMachine {
|
2021-01-13 18:06:55 +01:00
|
|
|
load_machine(include_bytes!(
|
|
|
|
"../../res/chainspec/test/st_peters_test.json"
|
|
|
|
))
|
2019-02-11 17:13:36 +01:00
|
|
|
}
|
|
|
|
|
2019-09-26 11:03:39 +02:00
|
|
|
/// Create a new Foundation Istanbul era spec.
|
|
|
|
pub fn new_istanbul_test_machine() -> EthereumMachine {
|
2021-01-13 18:06:55 +01:00
|
|
|
load_machine(include_bytes!(
|
|
|
|
"../../res/chainspec/test/istanbul_test.json"
|
|
|
|
))
|
2019-09-26 11:03:39 +02:00
|
|
|
}
|
|
|
|
|
2017-10-08 18:17:59 +02:00
|
|
|
/// Create a new Musicoin-MCIP3-era spec.
|
|
|
|
pub fn new_mcip3_test_machine() -> EthereumMachine {
|
2021-01-13 18:03:12 +01:00
|
|
|
load_machine(include_bytes!("../../res/chainspec/test/mcip3_test.json"))
|
2017-10-08 18:17:59 +02:00
|
|
|
}
|
|
|
|
|
2018-02-19 12:27:42 +01:00
|
|
|
/// Create new Kovan spec with wasm activated at certain block
|
|
|
|
pub fn new_kovan_wasm_test_machine() -> EthereumMachine {
|
2021-01-13 18:06:55 +01:00
|
|
|
load_machine(include_bytes!(
|
|
|
|
"../../res/chainspec/test/kovan_wasm_test.json"
|
|
|
|
))
|
2018-02-19 12:27:42 +01:00
|
|
|
}
|
|
|
|
|
2016-01-09 18:20:31 +01:00
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
use super::*;
|
2018-01-10 13:35:18 +01:00
|
|
|
use ethereum_types::U256;
|
2016-01-09 18:20:31 +01:00
|
|
|
use state::*;
|
2018-04-09 16:14:33 +02:00
|
|
|
use test_helpers::get_temp_state_db;
|
2019-01-04 14:05:46 +01:00
|
|
|
use types::{view, views::BlockView};
|
2020-08-05 06:08:03 +02:00
|
|
|
|
2016-01-09 18:20:31 +01:00
|
|
|
#[test]
|
|
|
|
fn ensure_db_good() {
|
2017-07-10 12:57:40 +02:00
|
|
|
let spec = new_morden(&::std::env::temp_dir());
|
2016-04-09 19:20:35 +02:00
|
|
|
let engine = &spec.engine;
|
|
|
|
let genesis_header = spec.genesis_header();
|
2017-04-06 19:26:17 +02:00
|
|
|
let db = spec
|
|
|
|
.ensure_db_good(get_temp_state_db(), &Default::default())
|
|
|
|
.unwrap();
|
2017-06-28 09:10:57 +02:00
|
|
|
let s = State::from_existing(
|
|
|
|
db,
|
|
|
|
genesis_header.state_root().clone(),
|
|
|
|
engine.account_start_nonce(0),
|
|
|
|
Default::default(),
|
2020-08-05 06:08:03 +02:00
|
|
|
)
|
2017-06-28 09:10:57 +02:00
|
|
|
.unwrap();
|
2017-02-26 13:10:50 +01:00
|
|
|
assert_eq!(
|
|
|
|
s.balance(&"0000000000000000000000000000000000000001".into())
|
|
|
|
.unwrap(),
|
|
|
|
1u64.into()
|
|
|
|
);
|
|
|
|
assert_eq!(
|
|
|
|
s.balance(&"0000000000000000000000000000000000000002".into())
|
|
|
|
.unwrap(),
|
|
|
|
1u64.into()
|
|
|
|
);
|
|
|
|
assert_eq!(
|
|
|
|
s.balance(&"0000000000000000000000000000000000000003".into())
|
|
|
|
.unwrap(),
|
|
|
|
1u64.into()
|
|
|
|
);
|
|
|
|
assert_eq!(
|
|
|
|
s.balance(&"0000000000000000000000000000000000000004".into())
|
|
|
|
.unwrap(),
|
|
|
|
1u64.into()
|
|
|
|
);
|
|
|
|
assert_eq!(
|
|
|
|
s.balance(&"102e61f5d8f9bc71d0ad4a084df4e65e05ce0e1c".into())
|
|
|
|
.unwrap(),
|
|
|
|
U256::from(1u64) << 200
|
|
|
|
);
|
|
|
|
assert_eq!(
|
|
|
|
s.balance(&"0000000000000000000000000000000000000000".into())
|
|
|
|
.unwrap(),
|
|
|
|
0u64.into()
|
2020-08-05 06:08:03 +02:00
|
|
|
);
|
2016-01-09 18:20:31 +01:00
|
|
|
}
|
2020-08-05 06:08:03 +02:00
|
|
|
|
2016-01-09 18:20:31 +01:00
|
|
|
#[test]
|
|
|
|
fn morden() {
|
2017-07-10 12:57:40 +02:00
|
|
|
let morden = new_morden(&::std::env::temp_dir());
|
2020-08-05 06:08:03 +02:00
|
|
|
|
2016-08-08 11:18:48 +02:00
|
|
|
assert_eq!(
|
|
|
|
morden.state_root(),
|
|
|
|
"f3f4696bbf3b3b07775128eb7a3763279a394e382130f27c21e70233e04946a9".into()
|
|
|
|
);
|
2016-01-09 18:20:31 +01:00
|
|
|
let genesis = morden.genesis_block();
|
2018-04-16 15:52:12 +02:00
|
|
|
assert_eq!(
|
|
|
|
view!(BlockView, &genesis).header_view().hash(),
|
|
|
|
"0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9ce303".into()
|
|
|
|
);
|
2020-08-05 06:08:03 +02:00
|
|
|
|
2016-04-09 19:20:35 +02:00
|
|
|
let _ = morden.engine;
|
2016-01-09 18:20:31 +01:00
|
|
|
}
|
2020-08-05 06:08:03 +02:00
|
|
|
|
2016-01-09 18:20:31 +01:00
|
|
|
#[test]
|
|
|
|
fn frontier() {
|
2017-07-10 12:57:40 +02:00
|
|
|
let frontier = new_foundation(&::std::env::temp_dir());
|
2020-08-05 06:08:03 +02:00
|
|
|
|
2016-08-08 11:18:48 +02:00
|
|
|
assert_eq!(
|
|
|
|
frontier.state_root(),
|
|
|
|
"d7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544".into()
|
|
|
|
);
|
2016-01-09 18:20:31 +01:00
|
|
|
let genesis = frontier.genesis_block();
|
2018-04-16 15:52:12 +02:00
|
|
|
assert_eq!(
|
|
|
|
view!(BlockView, &genesis).header_view().hash(),
|
|
|
|
"d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3".into()
|
|
|
|
);
|
2020-08-05 06:08:03 +02:00
|
|
|
|
2016-04-09 19:20:35 +02:00
|
|
|
let _ = frontier.engine;
|
2016-01-09 18:20:31 +01:00
|
|
|
}
|
2016-01-11 11:51:31 +01:00
|
|
|
}
|