New chains (#4720)
* Add Kovan chain. * Fix up --testnet. * Fix tests. * Fix test. * fix test * Fix test.
This commit is contained in:
parent
591eb76a93
commit
2862b3c21a
58
ethcore/res/ethereum/kovan.json
Normal file
58
ethcore/res/ethereum/kovan.json
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"name": "Kovan",
|
||||||
|
"dataDir": "kovan",
|
||||||
|
"engine": {
|
||||||
|
"authorityRound": {
|
||||||
|
"params": {
|
||||||
|
"gasLimitBoundDivisor": "0x400",
|
||||||
|
"stepDuration": "4",
|
||||||
|
"blockReward": "0x4563918244F40000",
|
||||||
|
"validators" : {
|
||||||
|
"list": [
|
||||||
|
"0x00D6Cc1BA9cf89BD2e58009741f4F7325BAdc0ED",
|
||||||
|
"0x00427feae2419c15b89d1c21af10d1b6650a4d3d",
|
||||||
|
"0x4Ed9B08e6354C70fE6F8CB0411b0d3246b424d6c",
|
||||||
|
"0x0020ee4Be0e2027d76603cB751eE069519bA81A1",
|
||||||
|
|
||||||
|
"0x0010f94b296a852aaac52ea6c5ac72e03afd032d",
|
||||||
|
|
||||||
|
"0x007733a1FE69CF3f2CF989F81C7b4cAc1693387A",
|
||||||
|
"0x00E6d2b931F55a3f1701c7389d592a7778897879",
|
||||||
|
"0x00e4a10650e5a6D6001C38ff8E64F97016a1645c",
|
||||||
|
|
||||||
|
"0x00a0a24b9f0e5ec7aa4c7389b8302fd0123194de"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"params": {
|
||||||
|
"maximumExtraDataSize": "0x20",
|
||||||
|
"minGasLimit": "0x1388",
|
||||||
|
"networkID" : "0x2A"
|
||||||
|
},
|
||||||
|
"genesis": {
|
||||||
|
"seal": {
|
||||||
|
"authorityRound": {
|
||||||
|
"step": "0x0",
|
||||||
|
"signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"difficulty": "0x20000",
|
||||||
|
"gasLimit": "0x5B8D80"
|
||||||
|
},
|
||||||
|
"accounts": {
|
||||||
|
"0x0000000000000000000000000000000000000001": { "balance": "1", "builtin": { "name": "ecrecover", "pricing": { "linear": { "base": 3000, "word": 0 } } } },
|
||||||
|
"0x0000000000000000000000000000000000000002": { "balance": "1", "builtin": { "name": "sha256", "pricing": { "linear": { "base": 60, "word": 12 } } } },
|
||||||
|
"0x0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } },
|
||||||
|
"0x0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } },
|
||||||
|
"0x00521965e7bd230323c423d96c657db5b79d099f": { "balance": "1606938044258990275541962092341162602522202993782792835301376" }
|
||||||
|
},
|
||||||
|
"nodes": [
|
||||||
|
"enode://c005dd308256c60fab247813d8bf6d6e81f9cd354287837eb1c2fcf294adaa913a3208e88900ef5c55a8cba7042c301d80503edec2ad3f92a72e241ee6743854@192.241.230.87:30303",
|
||||||
|
"enode://48caeceb2724f2f71406990aa81efe87f8c53f26441d891473da2ae50cc138f238addc0e46b5aee240db55de8c711daac53d7b32a3f13e30edb86a3ca7c2700b@138.68.143.220:30303",
|
||||||
|
"enode://85705212fd28ebdd56669fb55e958feb9d81f74fe76c82f867564b6c2995e69f596df0f588eba16f1a43b69ce06485d68231a0c83fed8469b41eba0e390c126f@139.59.146.42:30303",
|
||||||
|
"enode://2aa81bd0a761cd4f02c934dcf3f81c5b65953e51ab5ba03ceb1f125eb06418a1cdffb1c9d01871aa7bd456f3fce35e745608189ad1164f72b2161634b0c3f6ea@188.166.240.190:30303",
|
||||||
|
"enode://c5900cdd6d20795d58372f42dfbab9d664c27bb97e9c27972741942736e919122f9bac28e74cbc58e4ff195475ea90d9880b71a37af5b5a8cb41d843f765cff8@174.138.79.48:30303"
|
||||||
|
]
|
||||||
|
}
|
@ -48,9 +48,12 @@ pub fn new_frontier() -> Spec { load(include_bytes!("../../res/ethereum/frontier
|
|||||||
/// Create a new Frontier mainnet chain spec without the DAO hardfork.
|
/// Create a new Frontier mainnet chain spec without the DAO hardfork.
|
||||||
pub fn new_classic() -> Spec { load(include_bytes!("../../res/ethereum/classic.json")) }
|
pub fn new_classic() -> Spec { load(include_bytes!("../../res/ethereum/classic.json")) }
|
||||||
|
|
||||||
/// Create a new Frontier mainnet chain spec without the DAO hardfork.
|
/// Create a new Expanse mainnet chain spec.
|
||||||
pub fn new_expanse() -> Spec { load(include_bytes!("../../res/ethereum/expanse.json")) }
|
pub fn new_expanse() -> Spec { load(include_bytes!("../../res/ethereum/expanse.json")) }
|
||||||
|
|
||||||
|
/// Create a new Kovan testnet chain spec.
|
||||||
|
pub fn new_kovan() -> Spec { load(include_bytes!("../../res/ethereum/kovan.json")) }
|
||||||
|
|
||||||
/// Create a new Frontier chain spec as though it never changes to Homestead.
|
/// Create a new Frontier chain spec as though it never changes to Homestead.
|
||||||
pub fn new_frontier_test() -> Spec { load(include_bytes!("../../res/ethereum/frontier_test.json")) }
|
pub fn new_frontier_test() -> Spec { load(include_bytes!("../../res/ethereum/frontier_test.json")) }
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ Operating Options:
|
|||||||
--chain CHAIN Specify the blockchain type. CHAIN may be either a
|
--chain CHAIN Specify the blockchain type. CHAIN may be either a
|
||||||
JSON chain specification file or olympic, frontier,
|
JSON chain specification file or olympic, frontier,
|
||||||
homestead, mainnet, morden, ropsten, classic, expanse,
|
homestead, mainnet, morden, ropsten, classic, expanse,
|
||||||
testnet or dev (default: {flag_chain}).
|
testnet, kovan or dev (default: {flag_chain}).
|
||||||
-d --base-path PATH Specify the base data storage path.
|
-d --base-path PATH Specify the base data storage path.
|
||||||
(default: {flag_base_path}).
|
(default: {flag_base_path}).
|
||||||
--db-path PATH Specify the database directory path
|
--db-path PATH Specify the database directory path
|
||||||
@ -372,8 +372,7 @@ Legacy Options:
|
|||||||
to be the same as Geth's. Overrides the --ipc-path
|
to be the same as Geth's. Overrides the --ipc-path
|
||||||
and --ipcpath options. Alters RPCs to reflect Geth
|
and --ipcpath options. Alters RPCs to reflect Geth
|
||||||
bugs. Includes the personal_ RPC by default.
|
bugs. Includes the personal_ RPC by default.
|
||||||
--testnet Geth-compatible testnet mode. Equivalent to --chain
|
--testnet Testnet mode. Equivalent to --chain testnet.
|
||||||
testnet --keys-path $HOME/parity/testnet-keys.
|
|
||||||
Overrides the --keys-path option.
|
Overrides the --keys-path option.
|
||||||
--import-geth-keys Attempt to import keys from Geth client.
|
--import-geth-keys Attempt to import keys from Geth client.
|
||||||
--datadir PATH Equivalent to --base-path PATH.
|
--datadir PATH Equivalent to --base-path PATH.
|
||||||
|
@ -438,7 +438,7 @@ impl Configuration {
|
|||||||
|
|
||||||
fn chain(&self) -> String {
|
fn chain(&self) -> String {
|
||||||
if self.args.flag_testnet {
|
if self.args.flag_testnet {
|
||||||
"ropsten".to_owned()
|
"testnet".to_owned()
|
||||||
} else {
|
} else {
|
||||||
self.args.flag_chain.clone()
|
self.args.flag_chain.clone()
|
||||||
}
|
}
|
||||||
@ -829,7 +829,7 @@ impl Configuration {
|
|||||||
let ui_path = replace_home(&data_path, &self.args.flag_ui_path);
|
let ui_path = replace_home(&data_path, &self.args.flag_ui_path);
|
||||||
|
|
||||||
if self.args.flag_geth && !cfg!(windows) {
|
if self.args.flag_geth && !cfg!(windows) {
|
||||||
let geth_root = if self.args.flag_testnet { path::ethereum::test() } else { path::ethereum::default() };
|
let geth_root = if self.chain() == "testnet".to_owned() { path::ethereum::test() } else { path::ethereum::default() };
|
||||||
::std::fs::create_dir_all(geth_root.as_path()).unwrap_or_else(
|
::std::fs::create_dir_all(geth_root.as_path()).unwrap_or_else(
|
||||||
|e| warn!("Failed to create '{}' for geth mode: {}", &geth_root.to_str().unwrap(), e));
|
|e| warn!("Failed to create '{}' for geth mode: {}", &geth_root.to_str().unwrap(), e));
|
||||||
}
|
}
|
||||||
@ -1231,7 +1231,7 @@ mod tests {
|
|||||||
// then
|
// then
|
||||||
assert_eq!(conf.network_settings(), NetworkSettings {
|
assert_eq!(conf.network_settings(), NetworkSettings {
|
||||||
name: "testname".to_owned(),
|
name: "testname".to_owned(),
|
||||||
chain: "ropsten".to_owned(),
|
chain: "testnet".to_owned(),
|
||||||
network_port: 30303,
|
network_port: 30303,
|
||||||
rpc_enabled: true,
|
rpc_enabled: true,
|
||||||
rpc_interface: "local".to_owned(),
|
rpc_interface: "local".to_owned(),
|
||||||
|
@ -29,6 +29,7 @@ pub enum SpecType {
|
|||||||
Mainnet,
|
Mainnet,
|
||||||
Morden,
|
Morden,
|
||||||
Ropsten,
|
Ropsten,
|
||||||
|
Kovan,
|
||||||
Olympic,
|
Olympic,
|
||||||
Classic,
|
Classic,
|
||||||
Expanse,
|
Expanse,
|
||||||
@ -50,7 +51,8 @@ impl str::FromStr for SpecType {
|
|||||||
"frontier" | "homestead" | "mainnet" => SpecType::Mainnet,
|
"frontier" | "homestead" | "mainnet" => SpecType::Mainnet,
|
||||||
"frontier-dogmatic" | "homestead-dogmatic" | "classic" => SpecType::Classic,
|
"frontier-dogmatic" | "homestead-dogmatic" | "classic" => SpecType::Classic,
|
||||||
"morden" | "classic-testnet" => SpecType::Morden,
|
"morden" | "classic-testnet" => SpecType::Morden,
|
||||||
"ropsten" | "testnet" => SpecType::Ropsten,
|
"ropsten" => SpecType::Ropsten,
|
||||||
|
"kovan" | "testnet" => SpecType::Kovan,
|
||||||
"olympic" => SpecType::Olympic,
|
"olympic" => SpecType::Olympic,
|
||||||
"expanse" => SpecType::Expanse,
|
"expanse" => SpecType::Expanse,
|
||||||
"dev" => SpecType::Dev,
|
"dev" => SpecType::Dev,
|
||||||
@ -69,6 +71,7 @@ impl fmt::Display for SpecType {
|
|||||||
SpecType::Olympic => "olympic",
|
SpecType::Olympic => "olympic",
|
||||||
SpecType::Classic => "classic",
|
SpecType::Classic => "classic",
|
||||||
SpecType::Expanse => "expanse",
|
SpecType::Expanse => "expanse",
|
||||||
|
SpecType::Kovan => "kovan",
|
||||||
SpecType::Dev => "dev",
|
SpecType::Dev => "dev",
|
||||||
SpecType::Custom(ref custom) => custom,
|
SpecType::Custom(ref custom) => custom,
|
||||||
})
|
})
|
||||||
@ -84,6 +87,7 @@ impl SpecType {
|
|||||||
SpecType::Olympic => Ok(ethereum::new_olympic()),
|
SpecType::Olympic => Ok(ethereum::new_olympic()),
|
||||||
SpecType::Classic => Ok(ethereum::new_classic()),
|
SpecType::Classic => Ok(ethereum::new_classic()),
|
||||||
SpecType::Expanse => Ok(ethereum::new_expanse()),
|
SpecType::Expanse => Ok(ethereum::new_expanse()),
|
||||||
|
SpecType::Kovan => Ok(ethereum::new_kovan()),
|
||||||
SpecType::Dev => Ok(Spec::new_instant()),
|
SpecType::Dev => Ok(Spec::new_instant()),
|
||||||
SpecType::Custom(ref filename) => {
|
SpecType::Custom(ref filename) => {
|
||||||
let file = fs::File::open(filename).map_err(|_| "Could not load specification file.")?;
|
let file = fs::File::open(filename).map_err(|_| "Could not load specification file.")?;
|
||||||
@ -320,7 +324,8 @@ mod tests {
|
|||||||
assert_eq!(SpecType::Mainnet, "frontier".parse().unwrap());
|
assert_eq!(SpecType::Mainnet, "frontier".parse().unwrap());
|
||||||
assert_eq!(SpecType::Mainnet, "homestead".parse().unwrap());
|
assert_eq!(SpecType::Mainnet, "homestead".parse().unwrap());
|
||||||
assert_eq!(SpecType::Mainnet, "mainnet".parse().unwrap());
|
assert_eq!(SpecType::Mainnet, "mainnet".parse().unwrap());
|
||||||
assert_eq!(SpecType::Ropsten, "testnet".parse().unwrap());
|
assert_eq!(SpecType::Kovan, "testnet".parse().unwrap());
|
||||||
|
assert_eq!(SpecType::Kovan, "kovan".parse().unwrap());
|
||||||
assert_eq!(SpecType::Morden, "morden".parse().unwrap());
|
assert_eq!(SpecType::Morden, "morden".parse().unwrap());
|
||||||
assert_eq!(SpecType::Ropsten, "ropsten".parse().unwrap());
|
assert_eq!(SpecType::Ropsten, "ropsten".parse().unwrap());
|
||||||
assert_eq!(SpecType::Olympic, "olympic".parse().unwrap());
|
assert_eq!(SpecType::Olympic, "olympic".parse().unwrap());
|
||||||
@ -341,6 +346,7 @@ mod tests {
|
|||||||
assert_eq!(format!("{}", SpecType::Olympic), "olympic");
|
assert_eq!(format!("{}", SpecType::Olympic), "olympic");
|
||||||
assert_eq!(format!("{}", SpecType::Classic), "classic");
|
assert_eq!(format!("{}", SpecType::Classic), "classic");
|
||||||
assert_eq!(format!("{}", SpecType::Expanse), "expanse");
|
assert_eq!(format!("{}", SpecType::Expanse), "expanse");
|
||||||
|
assert_eq!(format!("{}", SpecType::Kovan), "kovan");
|
||||||
assert_eq!(format!("{}", SpecType::Dev), "dev");
|
assert_eq!(format!("{}", SpecType::Dev), "dev");
|
||||||
assert_eq!(format!("{}", SpecType::Custom("foo/bar".into())), "foo/bar");
|
assert_eq!(format!("{}", SpecType::Custom("foo/bar".into())), "foo/bar");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user