Compare commits

..

19 Commits

Author SHA1 Message Date
f529f224dd
for arm cpu
Signed-off-by: neptune <neptune3526@proton.me>
2024-10-24 12:53:38 -04:00
6a60c5a472
updated chain-spec
Signed-off-by: Uncle Stretch <uncle.stretch@ghostchain.io>
2024-10-16 21:33:54 +03:00
af3895a5f0
give user write access to the folder with node
Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
2024-10-16 13:59:35 +03:00
5af5647987
NODE_PATH renamed to BASE_PATH, plus additional sed for the template.service
Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
2024-10-16 13:58:14 +03:00
6343fb573a
updated version of casper-runtime in Cargo.lock
Signed-off-by: Uncle Stretch <uncle.stretch@ghostchain.io>
2024-10-16 13:34:12 +03:00
e184819d16
increment version for casper runtime
Signed-off-by: Uncle Stretch <uncle.stretch@ghostchain.io>
2024-10-13 20:47:45 +03:00
9c5ab07cf9
small fix for the ghost executable version
Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
2024-10-13 20:46:29 +03:00
f8168e525f
extra genesis preset for the casper runtime
Signed-off-by: Uncle Stretch <uncle.stretch@ghostchain.io>
2024-10-13 20:39:35 +03:00
aaf842f57b
minimal requirements lowered to two stakerers at minimum
Signed-off-by: Uncle Stretch <uncle.stretch@ghostchain.io>
2024-10-13 20:37:29 +03:00
f9b87d0d08
ghost-node version incremented
Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
2024-10-13 19:17:29 +03:00
ee66e7a20c
additional check for keys in genesis added, purely experimented feature
Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
2024-10-13 19:14:43 +03:00
bd70db94e5
genesis file for casper three way testnet
Signed-off-by: Uncle Stretch <uncle.stretch@ghostchain.io>
2024-10-13 19:13:27 +03:00
c1a8cb16b2
'endowed_accounts' and 'initial_authorities' updated based on ghosties file
Signed-off-by: Uncle Stretch <uncle.stretch@ghostchain.io>
2024-10-13 19:11:54 +03:00
e6e55febaf
0x prefixes removed
Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
2024-10-13 19:09:46 +03:00
96163ee4d9
fix for generation of 'endowed_accounts'
Signed-off-by: Uncle Stinky <uncle.stinky@ghostchain.io>
2024-10-13 17:46:38 +03:00
88fb940bce
account removed, outdated
Signed-off-by: Uncle Stretch <uncle.stretch@ghostchain.io>
2024-10-13 15:30:08 +03:00
f212707594
ghost_7's keys added
Signed-off-by: Uncle Stretch <uncle.stretch@ghostchain.io>
2024-10-13 15:27:56 +03:00
ae0649a708
neptune's keys added
Signed-off-by: Uncle Stretch <uncle.stretch@ghostchain.io>
2024-10-13 15:17:07 +03:00
a1423bc9e7
stash keys added for ghost_7|cosmos
Signed-off-by: ghost_7 <ghostie_7777@proton.me>
2024-10-12 12:45:01 -04:00
12 changed files with 485 additions and 116 deletions

17
Cargo.lock generated
View File

@ -1186,7 +1186,7 @@ dependencies = [
[[package]] [[package]]
name = "casper-runtime" name = "casper-runtime"
version = "3.5.17" version = "3.5.18"
dependencies = [ dependencies = [
"casper-runtime-constants", "casper-runtime-constants",
"frame-benchmarking", "frame-benchmarking",
@ -1203,6 +1203,7 @@ dependencies = [
"ghost-networks", "ghost-networks",
"ghost-runtime-common", "ghost-runtime-common",
"ghost-slow-clap", "ghost-slow-clap",
"hex-literal",
"log", "log",
"pallet-alliance", "pallet-alliance",
"pallet-authority-discovery", "pallet-authority-discovery",
@ -3528,7 +3529,7 @@ dependencies = [
[[package]] [[package]]
name = "ghost-cli" name = "ghost-cli"
version = "0.7.178" version = "0.7.179"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"clap 4.5.4", "clap 4.5.4",
@ -3584,7 +3585,7 @@ dependencies = [
[[package]] [[package]]
name = "ghost-machine-primitives" name = "ghost-machine-primitives"
version = "0.7.178" version = "0.7.179"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
"sc-sysinfo", "sc-sysinfo",
@ -3593,7 +3594,7 @@ dependencies = [
[[package]] [[package]]
name = "ghost-metrics" name = "ghost-metrics"
version = "0.7.178" version = "0.7.179"
dependencies = [ dependencies = [
"assert_cmd", "assert_cmd",
"bs58 0.5.1", "bs58 0.5.1",
@ -3648,7 +3649,7 @@ dependencies = [
[[package]] [[package]]
name = "ghost-networks" name = "ghost-networks"
version = "0.7.178" version = "0.7.179"
dependencies = [ dependencies = [
"frame-benchmarking", "frame-benchmarking",
"frame-support", "frame-support",
@ -3665,7 +3666,7 @@ dependencies = [
[[package]] [[package]]
name = "ghost-node" name = "ghost-node"
version = "0.7.178" version = "0.7.179"
dependencies = [ dependencies = [
"assert_cmd", "assert_cmd",
"color-eyre", "color-eyre",
@ -3696,7 +3697,7 @@ dependencies = [
[[package]] [[package]]
name = "ghost-rpc" name = "ghost-rpc"
version = "0.7.178" version = "0.7.179"
dependencies = [ dependencies = [
"ghost-core-primitives", "ghost-core-primitives",
"jsonrpsee", "jsonrpsee",
@ -3748,7 +3749,7 @@ dependencies = [
[[package]] [[package]]
name = "ghost-service" name = "ghost-service"
version = "0.7.178" version = "0.7.179"
dependencies = [ dependencies = [
"assert_matches", "assert_matches",
"async-trait", "async-trait",

View File

@ -17,7 +17,7 @@ homepage.workspace = true
[workspace.package] [workspace.package]
license = "GPL-3.0-only" license = "GPL-3.0-only"
authors = ["571nky", "57r37ch", "f4750"] authors = ["571nky", "57r37ch", "f4750"]
version = "0.7.178" version = "0.7.179"
edition = "2021" edition = "2021"
homepage = "https://ghostchain.io" homepage = "https://ghostchain.io"
repository = "https://git.ghostchain.io/ghostchain/ghost-node" repository = "https://git.ghostchain.io/ghostchain/ghost-node"

View File

@ -1,6 +1,6 @@
[package] [package]
name = "ghost-cli" name = "ghost-cli"
description = "Ghost Client Node" description = "Implementation of a Ghost Client Node in Rust"
version.workspace = true version.workspace = true
edition.workspace = true edition.workspace = true
authors.workspace = true authors.workspace = true

View File

@ -29,7 +29,7 @@ impl SubstrateCli for Cli {
} }
fn impl_version() -> String { fn impl_version() -> String {
env!("CARGO_PKG_DESCRIPTION").into() env!("SUBSTRATE_CLI_IMPL_VERSION").into()
} }
fn description() -> String { fn description() -> String {

View File

@ -1,6 +1,6 @@
[package] [package]
name = "casper-runtime" name = "casper-runtime"
version = "3.5.17" version = "3.5.18"
build = "build.rs" build = "build.rs"
description = "Runtime of the Casper Network" description = "Runtime of the Casper Network"
edition.workspace = true edition.workspace = true
@ -17,6 +17,7 @@ codec = { features = ["derive", "max-encoded-len"], workspace = true }
scale-info = { features = ["derive"], workspace = true } scale-info = { features = ["derive"], workspace = true }
log = { workspace = true } log = { workspace = true }
serde_json = { workspace = true } serde_json = { workspace = true }
hex-literal = { workspace = true, default-features = true }
frame-support = { workspace = true } frame-support = { workspace = true }
frame-system = { workspace = true } frame-system = { workspace = true }

View File

@ -1,4 +1,6 @@
use codec::Encode; use codec::Encode;
use pallet_staking::Forcing;
use sp_staking::StakerStatus;
use crate::{opaque::SessionKeys, BABE_GENESIS_EPOCH_CONFIG}; use crate::{opaque::SessionKeys, BABE_GENESIS_EPOCH_CONFIG};
use primitives::{AccountId, AccountPublic}; use primitives::{AccountId, AccountPublic};
@ -14,7 +16,7 @@ use sp_std::alloc::format;
use sp_std::vec::Vec; use sp_std::vec::Vec;
use sp_std::prelude::*; use sp_std::prelude::*;
use sp_core::{sr25519, Pair, Public}; use sp_core::{sr25519, Pair, Public};
use sp_runtime::traits::IdentifyAccount; use sp_runtime::{Perbill, traits::IdentifyAccount};
#[derive(Encode, Clone)] #[derive(Encode, Clone)]
struct PreparedNetworkData { struct PreparedNetworkData {
@ -62,7 +64,7 @@ fn get_authority_keys_from_seed(
) )
} }
fn testnet_accounts() -> Vec<AccountId> { fn casper_testnet_accounts() -> Vec<AccountId> {
Vec::from([ Vec::from([
get_account_id_from_seed::<sr25519::Public>("Alice"), get_account_id_from_seed::<sr25519::Public>("Alice"),
get_account_id_from_seed::<sr25519::Public>("Bob"), get_account_id_from_seed::<sr25519::Public>("Bob"),
@ -79,7 +81,7 @@ fn testnet_accounts() -> Vec<AccountId> {
]) ])
} }
fn testnet_evm_accounts() -> Vec<(AccountId, u128, u8)> { fn casper_testnet_evm_accounts() -> Vec<(AccountId, u128, u8)> {
vec![ vec![
// 01c928771aea942a1e7ac06adf2b73dfbc9a25d9eaa516e3673116af7f345198 // 01c928771aea942a1e7ac06adf2b73dfbc9a25d9eaa516e3673116af7f345198
(get_account_id_from_seed::<sr25519::Public>("1A69d2D5568D1878023EeB121a73d33B9116A760"), 1337 * CSPR, 1), (get_account_id_from_seed::<sr25519::Public>("1A69d2D5568D1878023EeB121a73d33B9116A760"), 1337 * CSPR, 1),
@ -92,7 +94,7 @@ fn testnet_evm_accounts() -> Vec<(AccountId, u128, u8)> {
] ]
} }
fn testnet_evm_networks() -> Vec<(u32, Vec<u8>)> { fn casper_testnet_evm_networks() -> Vec<(u32, Vec<u8>)> {
vec![ vec![
(1, PreparedNetworkData { (1, PreparedNetworkData {
chain_name: "ethereum-mainnet".into(), chain_name: "ethereum-mainnet".into(),
@ -128,7 +130,7 @@ fn casper_session_keys(
SessionKeys { babe, grandpa, authority_discovery, slow_clap } SessionKeys { babe, grandpa, authority_discovery, slow_clap }
} }
fn casper_testnet_genesis( fn testnet_config_genesis(
initial_authorities: Vec<( initial_authorities: Vec<(
AccountId, AccountId,
AccountId, AccountId,
@ -142,15 +144,16 @@ fn casper_testnet_genesis(
evm_networks: Option<Vec<(u32, Vec<u8>)>>, evm_networks: Option<Vec<(u32, Vec<u8>)>>,
) -> serde_json::Value { ) -> serde_json::Value {
let endowed_accounts: Vec<AccountId> = let endowed_accounts: Vec<AccountId> =
endowed_accounts.unwrap_or_else(testnet_accounts); endowed_accounts.unwrap_or_else(casper_testnet_accounts);
let ghost_accounts: Vec<(AccountId, u128, u8)> = let ghost_accounts: Vec<(AccountId, u128, u8)> =
ghost_accounts.unwrap_or_else(testnet_evm_accounts); ghost_accounts.unwrap_or_else(casper_testnet_evm_accounts);
let evm_networks: Vec<(u32, Vec<u8>)> = let evm_networks: Vec<(u32, Vec<u8>)> =
evm_networks.unwrap_or_else(testnet_evm_networks); evm_networks.unwrap_or_else(casper_testnet_evm_networks);
const ENDOWMENT: u128 = 1_000 * CSPR; const ENDOWMENT: u128 = 1_000 * CSPR;
const STASH: u128 = 500 * CSPR;
serde_json::json!({ serde_json::json!({
"balances": { "balances": {
@ -179,6 +182,155 @@ fn casper_testnet_genesis(
}) })
.collect::<Vec<_>>(), .collect::<Vec<_>>(),
}, },
"staking": {
"validatorCount": initial_authorities.len() as u32,
"minimumValidatorCount": 1,
"invulnerables": initial_authorities
.iter()
.map(|x| x.0.clone())
.collect::<Vec<_>>(),
"forceEra": Forcing::NotForcing,
"slashRewardFraction": Perbill::from_percent(10),
"stakers": initial_authorities
.iter()
.map(|x| (x.0.clone(), x.0.clone(), STASH, StakerStatus::<AccountId>::Validator))
.collect::<Vec<_>>(),
},
"babe": {
"epochConfig": Some(BABE_GENESIS_EPOCH_CONFIG),
},
"ghostNetworks": {
"networks": evm_networks,
},
"ghostClaims": {
"total": ghost_accounts
.iter()
.fold(0, |acc, k| acc + k.1),
"membersAndRanks": ghost_accounts
.iter()
.map(|k| (k.0.clone(), k.2.clone()))
.collect::<Vec<_>>(),
},
})
}
// staging
fn casper_staging_config_genesis() -> serde_json::Value {
use hex_literal::hex;
use sp_core::crypto::UncheckedInto;
// Following keys are used in genesis config for testing (casper) chains.
// DO NOT use them in production chains such as ghost.
let endowed_accounts = vec![
// sfErNwRgZ6ypB7wY8M2smXMZjxqUkc2TgUcNvC1JNQJFXS8bw
hex!["328d3b7c3046ef7700937d99fb2e98ce2591682c2b5dcf3f562e4da157650237"].into(),
// sfEwRjyvEQcpRQ1qbCZum27nEkTggKEt7DtqxwyYQULt9UuUN
hex!["3666e4e19f87bb8680495f31864ce1f1c69d4178002cc01911aef2cc7313f203"].into(),
// sfHcJxw5cgkvukZZyxcNUMCdbm9e7773orByLrGgAREka81TK
hex!["ac871e8bab00dd56ba3a1c0bd289357203dcaf10010b0b04ad7472870cd22a3c"].into(),
];
let initial_authorities: Vec<(
AccountId,
AccountId,
BabeId,
GrandpaId,
AuthorityDiscoveryId,
SlowClapId,
)> = vec![
(
// sfFXZmnDVnkQ781J2gbqUpi7K5KgMWMdM4eeii74xxGgKYnNN
hex!["507045c82be367f95408466cd054ca39bfa52697a3ef22809af14cf9de304f02"].into(),
// sfFXZmnDVnkQ781J2gbqUpi7K5KgMWMdM4eeii74xxGgKYnNN
hex!["507045c82be367f95408466cd054ca39bfa52697a3ef22809af14cf9de304f02"].into(),
// sfJeojACBa7WiH6tBwikBKAMU2oKmseEBD1GYUYATvfWuLcPa
hex!["daaaaab6a6e574099e24ae9bb75b543610edef9d374fa85a378edb573b47615f"].unchecked_into(),
// sfFdtzNxJdeEkgHxvk144rJKxf7wcYvgX5tqfgZRutW9YvAKE
hex!["55446f9a7aa99ced06b317c80ce90d56b84e56526775683af2525969e8da0b64"].unchecked_into(),
// sfE8gsMYAjAJHk5gyYZN7AW6pfmJ7V9H7xxWto24nmhzCUXaQ
hex!["12c14850562021eb99f58f90ab624fb6cfaf3ac9228a92f8b60115fe6a6af15a"].unchecked_into(),
// sfE3GKSrKZzrZpdapJ2VGRpPor45T4D4i8QBZNumSNGqGv7PX
hex!["0e9e698c7b2bf5ce3861cb4bc4ddf9e200237c282025b093ada850d764d12a35"].unchecked_into(),
),
(
// sfHLqWNC4hMKHhwvPWmWcxZsDPhCTQKgh1Ap7pm3qML5GBTBa
hex!["a0ba0196e6ee7e6b5b0553035c5cb5c04e9725001b5732839d0529cbc00c9600"].into(),
// sfHLqWNC4hMKHhwvPWmWcxZsDPhCTQKgh1Ap7pm3qML5GBTBa
hex!["a0ba0196e6ee7e6b5b0553035c5cb5c04e9725001b5732839d0529cbc00c9600"].into(),
// sfGA6tPPF8dAc8QpMCMjxitG3j8sXPhkdpm5bwz4UsXAApUiw
hex!["6c4dd88b43e2011cf9a6a73d53446336ac9e04cdd4ca23587df63187ac455e49"].unchecked_into(),
// sfGxQZXFUQH1AXv82rpjiJHFs7YsdEuVGdyvKiS2Tajpvw6Se
hex!["8f9ea20bf4a807a8e710f7559dece86e94672b5b361de157bdaa5c1f37849f8d"].unchecked_into(),
// sfGz2enFUR22cQ5ey61MdtPqbCeEWZA1wsCFFSLGaK7vKnv8C
hex!["90db5ed339a559ed157995a48d781f44c7df972dfba4bc855e4b59fa46438e17"].unchecked_into(),
// sfEtwe5BoroNjkdLsvnjnMemUKiw8MS1X4YW8bepbbGvhS4LZ
hex!["3481cdcbcf37a4669c29a78cf9ceb39383a10ef0a18b36b92d149fdd0c24ae00"].unchecked_into(),
),
(
// sfGq75CrCrkcfqNzyyidu3D4jW3AoJSzL5tKKuv1UbS16ezzy
hex!["8a0d0b66e827bf20e79f9a499317e73925ce4f422371067edfab690e43857f13"].into(),
// sfGq75CrCrkcfqNzyyidu3D4jW3AoJSzL5tKKuv1UbS16ezzy
hex!["8a0d0b66e827bf20e79f9a499317e73925ce4f422371067edfab690e43857f13"].into(),
// sfJo2ogBpssRAU9ZPTvuXFZEdmJw9pKsPydLjXe8DypRScjzT
hex!["e0f0a776ecc9fa5e1f22e2fa001fe3fba5aea52b9444bc894b45589d42132475"].unchecked_into(),
// sfHq3EVT1sqY7o5ki3zA6LEdRDfdFc29YaZN3w2Thhz6JD5ZF
hex!["b63c5a0cf342b9b04931bc8ed74d7d0165ab99ab5f8a4514797d4b299a4501fe"].unchecked_into(),
// sfEj3wrDy9EDLCAodyEdQEYxJpNnM8Etaj3RJ5bCBRzdaDced
hex!["2cf69452e9f2a8457119139408884941ed50f590c0fc0f2b044c4d82c69e4245"].unchecked_into(),
// sfE32RmBp1xX4KRTphVGLUJBxLGPN3Dzg9BwCJktxMf3iEwck
hex!["0e6fa6934f9e99fa84874f2ed9318825a0d5443a0ced984acfbd24ece72ba55e"].unchecked_into(),
),
];
let ghost_accounts: Vec<(AccountId, u128, u8)> = casper_testnet_evm_accounts();
let evm_networks = casper_testnet_evm_networks();
const ENDOWMENT: u128 = 5_000 * CSPR;
const STASH: u128 = 500 * CSPR;
serde_json::json!({
"balances": {
"balances": endowed_accounts
.iter()
.map(|k: &AccountId| (k.clone(), ENDOWMENT))
.chain(initial_authorities.iter().map(|x| (x.0.clone(), STASH)))
.collect::<Vec<_>>(),
},
"session": {
"keys": initial_authorities
.iter()
.map(|x| {
(
x.0.clone(),
x.0.clone(),
casper_session_keys(
x.2.clone(),
x.3.clone(),
x.4.clone(),
x.5.clone(),
),
)
})
.collect::<Vec<_>>(),
},
"staking": {
"validatorCount": 50,
"minimumValidatorCount": 4,
"stakers": initial_authorities
.iter()
.map(|x| {
(
x.0.clone(),
x.0.clone(),
STASH,
StakerStatus::<AccountId>::Validator,
)
})
.collect::<Vec<_>>(),
"invulnerables": initial_authorities.iter().map(|x| x.0.clone()).collect::<Vec<_>>(),
"forceEra": Forcing::ForceNone,
"slashRewardFraction": Perbill::from_percent(10)
},
"babe": { "babe": {
"epochConfig": Some(BABE_GENESIS_EPOCH_CONFIG), "epochConfig": Some(BABE_GENESIS_EPOCH_CONFIG),
}, },
@ -199,7 +351,7 @@ fn casper_testnet_genesis(
// development // development
fn casper_development_config_genesis() -> serde_json::Value { fn casper_development_config_genesis() -> serde_json::Value {
casper_testnet_genesis( testnet_config_genesis(
vec![get_authority_keys_from_seed("Alice")], vec![get_authority_keys_from_seed("Alice")],
None, None, None, None, None, None,
) )
@ -207,7 +359,7 @@ fn casper_development_config_genesis() -> serde_json::Value {
// local // local
fn casper_local_config_genesis() -> serde_json::Value { fn casper_local_config_genesis() -> serde_json::Value {
casper_testnet_genesis( testnet_config_genesis(
vec![ vec![
get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Alice"),
get_authority_keys_from_seed("Bob"), get_authority_keys_from_seed("Bob"),
@ -220,6 +372,7 @@ fn casper_local_config_genesis() -> serde_json::Value {
pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<u8>> { pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<u8>> {
let patch = match id.try_into() { let patch = match id.try_into() {
Ok("development") => casper_development_config_genesis(), Ok("development") => casper_development_config_genesis(),
Ok("staging") => casper_staging_config_genesis(),
Ok("local_testnet") => casper_local_config_genesis(), Ok("local_testnet") => casper_local_config_genesis(),
_ => return None, _ => return None,
}; };
@ -233,5 +386,6 @@ pub fn preset_names() -> Vec<sp_genesis_builder::PresetId> {
Vec::from([ Vec::from([
sp_genesis_builder::PresetId::from("local_testnet"), sp_genesis_builder::PresetId::from("local_testnet"),
sp_genesis_builder::PresetId::from("development"), sp_genesis_builder::PresetId::from("development"),
sp_genesis_builder::PresetId::from("staging"),
]) ])
} }

View File

@ -6,6 +6,7 @@ Documentation=https://git.ghostchain.io/ghostchain/ghost-node
[Service] [Service]
EnvironmentFile=-/etc/default/ghost EnvironmentFile=-/etc/default/ghost
ExecStart=/usr/bin/ghost $GHOST_CLI_ARGS ExecStart=/usr/bin/ghost $GHOST_CLI_ARGS
ReadWritePaths=/var/lib/ghost
User=ghost User=ghost
Restart=always Restart=always
RestartSec=30 RestartSec=30

View File

@ -12,14 +12,14 @@ for num in $(seq 2 $num_ghosties); do
account_id=$(grep -m $num "wallet" $project_folder/service/ghosties | tail -n 1 | awk '{ print $6 }') account_id=$(grep -m $num "wallet" $project_folder/service/ghosties | tail -n 1 | awk '{ print $6 }')
public_key=$(ghost key inspect $account_id --public | grep "SS58 Address" | awk '{ print $3 }') public_key=$(ghost key inspect $account_id --public | grep "SS58 Address" | awk '{ print $3 }')
echo -e "\t// $public_key" echo -e "\t// $public_key"
echo -e "\thex![\"${account_id:2}\"].into();" echo -e "\thex![\"${account_id:2}\"].into(),"
done done
echo "];" echo "];"
echo -e "\n" echo -e "\n"
print_session_key() { print_session_key() {
echo -e "\t\t// $1" echo -e "\t\t// $1"
echo -e "\t\thex![\"$2\"].$3()," echo -e "\t\thex![\"${2:2}\"].$3(),"
} }
echo "let initial_authorities: Vec<(" echo "let initial_authorities: Vec<("

View File

@ -9,7 +9,7 @@ SKIP_BUILD=false
SET_ENVIRONMENT=false SET_ENVIRONMENT=false
EXECUTABLE_PATH="/usr/bin/" EXECUTABLE_PATH="/usr/bin/"
SPECIFICATION_PATH="/etc/ghost/" SPECIFICATION_PATH="/etc/ghost/"
NODE_PATH="/var/lib/ghost" BASE_PATH="/var/lib/ghost"
SPECIFICATION_NAME="casper" SPECIFICATION_NAME="casper"
TARGET="release" TARGET="release"
@ -46,12 +46,27 @@ sanity_check() {
echo "[+] inspected account id for $3: $account_id" echo "[+] inspected account id for $3: $account_id"
num_keys=$(grep $account_id "$PROJECT_FOLDER/service/ghosties" | wc -l) num_keys=$(grep $account_id "$PROJECT_FOLDER/service/ghosties" | wc -l)
num_types=$(grep $account_id "$PROJECT_FOLDER/service/ghosties" | grep $3 | wc -l) num_types=$(grep $account_id "$PROJECT_FOLDER/service/ghosties" | grep $3 | wc -l)
if [ ! $num_keys = 1 ] || [ ! $num_types = 1 ]; then if [ $num_keys = 1 ] && [ $num_types = 1 ]; then
echo "[+] local $3 key found in 'ghosties' with correct key type"
else
echo "[-] inspected account id not found on 'ghosties' file or wrong key type" echo "[-] inspected account id not found on 'ghosties' file or wrong key type"
exit 1 exit 1
fi fi
} }
genesis_check() {
secret_seed=$(ghost key inspect --scheme="$1" "$2" | grep "Secret seed" | awk '{ print $3 }')
account_id=$(ghost key inspect --scheme="$1" "$2" | grep "Account ID" | awk '{ print $3 }')
num_keys=$(grep ${account_id:2} "$PROJECT_FOLDER/service/chain-specs/casper.json" | wc -l)
if [ ! $num_keys = 0 ]; then
echo "[+] found in genesis block"
else
echo "[-] not yet in genesis block"
fi
echo
}
extract_seed() { extract_seed() {
name_with_spaces=$(echo $1 | tr '-' ' ') name_with_spaces=$(echo $1 | tr '-' ' ')
read -p "[?] path to the file with $name_with_spaces: (default: /etc/ghost/$1) " seed_path read -p "[?] path to the file with $name_with_spaces: (default: /etc/ghost/$1) " seed_path
@ -71,11 +86,12 @@ help() {
echo -e "-m, --make-global\n\tStore compiled ghost executable and chain specification globally." echo -e "-m, --make-global\n\tStore compiled ghost executable and chain specification globally."
echo -e "-a, --set-arguments\n\tPrepare CLI arguments for running ghost node." echo -e "-a, --set-arguments\n\tPrepare CLI arguments for running ghost node."
echo -e "-k, --check-keys\n\tCheck if your keys are already included in 'ghosties' file." echo -e "-k, --check-keys\n\tCheck if your keys are already included in 'ghosties' file."
echo -e "-r, --insert-keys\n\tInsert session keys to the keystore via JSON RPC." echo -e "-y, --insert-keys\n\tInsert session keys to the keystore via JSON RPC."
echo -e "-r, --release\n\tCompile node with '--release' flag." echo -e "-r, --release\n\tCompile node with '--release' flag."
echo -e "-p, --profile\n\tCompile node with '--profile [PROFILE]' flag." echo -e "-p, --profile\n\tCompile node with '--profile [PROFILE]' flag."
echo -e "-f, --features\n\tCompilation features '--features=\"FEATURE1,FEATURE2\"'" echo -e "-f, --features\n\tCompilation features '--features=\"FEATURE1,FEATURE2\"'"
echo -e "-e, --executable-path\n\tPath to executable ('/usr/lib/' is default)." echo -e "-e, --executable-path\n\tPath to the executable ('/usr/lib/' is default)."
echo -e "-s, --base-path\n\tPath to the folder with chain database ('/var/lib/ghost' is default)."
echo -e "-c, --specification-path\n\tPath to specification ('/etc/ghost' is default)." echo -e "-c, --specification-path\n\tPath to specification ('/etc/ghost' is default)."
echo -e "-n, --specification-name\n\tSpecification name to be used ('casper' is default)." echo -e "-n, --specification-name\n\tSpecification name to be used ('casper' is default)."
echo -e "-h, --help\n\tPrints help information." echo -e "-h, --help\n\tPrints help information."
@ -134,7 +150,12 @@ while [ $# -gt 0 ]; do
if [[ "$1" != *=* ]]; then shift; fi if [[ "$1" != *=* ]]; then shift; fi
SPECIFICATION_PATH=$(echo ${1#*=}/ | tr -s /) SPECIFICATION_PATH=$(echo ${1#*=}/ | tr -s /)
;; ;;
--specification-name*|-n*) if [[ "$1" != *=* ]]; then shift; fi --base-path*|-?)
if [[ "$1" != *=* ]]; then shift; fi
BASE_PATH=$(echo ${1#*=}/ | tr -s /)
;;
--specification-name*|-n*)
if [[ "$1" != *=* ]]; then shift; fi
SPECIFICATION_NAME="${1#*=}" SPECIFICATION_NAME="${1#*=}"
;; ;;
--help|-h) --help|-h)
@ -244,6 +265,7 @@ fi
if [[ $MAKE_GLOBAL = true ]]; then if [[ $MAKE_GLOBAL = true ]]; then
cd $PROJECT_FOLDER cd $PROJECT_FOLDER
echo "[+] trying to copy executable to '$EXECUTABLE_PATH'"
sudo cp target/$TARGET/ghost $EXECUTABLE_PATH sudo cp target/$TARGET/ghost $EXECUTABLE_PATH
cp service/chain-specs/$SPECIFICATION_NAME.json $SPECIFICATION_PATH cp service/chain-specs/$SPECIFICATION_NAME.json $SPECIFICATION_PATH
@ -267,21 +289,24 @@ if [ $UNIT_FILE = true ]; then
echo "[!] user ghost not found" echo "[!] user ghost not found"
if prompt "[?] do you want to create ghost user? (NOT RECOMMENDED: current $(whoami))"; then if prompt "[?] do you want to create ghost user? (NOT RECOMMENDED: current $(whoami))"; then
sudo useradd --system --create-home $user_name sudo useradd --system --create-home $user_name
if [ ! -d $NODE_PATH ]; then if [ ! -d $BASE_PATH ]; then
echo "[+] create folder for the node at '$NODE_PATH'" echo "[+] create folder for the node at '$BASE_PATH'"
sudo mkdir $NODE_PATH sudo mkdir $BASE_PATH
fi fi
else else
user_name=$(whoami) user_name=$(whoami)
fi fi
sudo chown $user_name $NODE_PATH echo "[+] make $user_name owner of $BASE_PATH"
echo "[+] write permission to '$NODE_PATH'" sudo chown -R "$user_name:" $BASE_PATH
fi fi
cp packaging/template.service /tmp/$unit_name cp packaging/template.service /tmp/$unit_name
sed -i -e "s/User=ghost/User=$user_name/g" /tmp/$unit_name sed -i -e "s/User=ghost/User=$user_name/g" /tmp/$unit_name
sed -i -e "s#/ReadWritePaths=/var/lib/ghost#/ReadWritePaths=$BASE_PATH#g" /tmp/$unit_name
echo "[+] prepare unit file for the $unit_name"
sudo cp packaging/template.service /etc/systemd/system/$unit_name sudo cp packaging/template.service /etc/systemd/system/$unit_name
echo "[+] reloading systemd because of updated unit file"
sudo systemctl daemon-reload sudo systemctl daemon-reload
if prompt "[?] do you want to start the $unit_name?"; then if prompt "[?] do you want to start the $unit_name?"; then
@ -332,7 +357,7 @@ if [[ $ARGUMENTS = true ]]; then
fi fi
# default for now # default for now
CLI_ARGS+=("--base-path=$NODE_PATH") CLI_ARGS+=("--base-path=$BASE_PATH")
CLI_ARGS+=("--state-pruning=archive") CLI_ARGS+=("--state-pruning=archive")
CLI_ARGS+=("--blocks-pruning=archive") CLI_ARGS+=("--blocks-pruning=archive")
CLI_ARGS+=("--rpc-methods=auto") CLI_ARGS+=("--rpc-methods=auto")
@ -341,7 +366,7 @@ if [[ $ARGUMENTS = true ]]; then
CLI_ARGS+=("--no-mdns") CLI_ARGS+=("--no-mdns")
CLI_ARGS+=("--no-hardware-benchmarks") CLI_ARGS+=("--no-hardware-benchmarks")
echo "GHOST_CLI_ARGS=\"$(IFS=' '; echo "${CLI_ARGS[*]}")\"" > /tmp/ghost echo "[+] trying to save GHOST_CLI_ARGS=\"$(IFS=' '; echo "${CLI_ARGS[*]}")\"" > /tmp/ghost
sudo cp /tmp/ghost /etc/default/ghost sudo cp /tmp/ghost /etc/default/ghost
rm /tmp/ghost rm /tmp/ghost
echo "[+] new CLI arguments stored in '/etc/default/ghost'" echo "[+] new CLI arguments stored in '/etc/default/ghost'"
@ -351,13 +376,11 @@ fi
if [ $CHECK_KEYS = true ]; then if [ $CHECK_KEYS = true ]; then
seed=$(extract_seed "wallet-key") seed=$(extract_seed "wallet-key")
sanity_check "sr25519" $seed "wallet" sanity_check "sr25519" $seed "wallet"
echo "[+] local wallet key found in 'ghosties' with correct key type" genesis_check "sr25519" $seed "wallet"
echo
seed=$(extract_seed "stash-key") seed=$(extract_seed "stash-key")
sanity_check "sr25519" $seed "stash" sanity_check "sr25519" $seed "stash"
echo "[+] local stash key from found in 'ghosties' with correct key type" genesis_check "sr25519" $seed "stash"
echo
seed=$(extract_seed "session-key") seed=$(extract_seed "session-key")
if [ $INSERT_KEYS = true ]; then if [ $INSERT_KEYS = true ]; then
@ -373,8 +396,7 @@ if [ $CHECK_KEYS = true ]; then
fi fi
sanity_check $scheme "$seed//$type" $type sanity_check $scheme "$seed//$type" $type
echo "[+] inspected account id found in 'ghosties' file with correct key type" genesis_check $scheme "$seed//$type" $type
if [ $INSERT_KEYS = true ]; then if [ $INSERT_KEYS = true ]; then
echo "[+] trying to make an 'author_insertKey' RPC call to $rpc_endpoint..." echo "[+] trying to make an 'author_insertKey' RPC call to $rpc_endpoint..."
curl --location $rpc_endpoint \ curl --location $rpc_endpoint \

File diff suppressed because one or more lines are too long

View File

@ -18,21 +18,11 @@ Public key (hex) for babe : 0xdaaaaab6a6e574099e24ae9bb75b543610edef9d374fa85a3
Public key (hex) for slow : 0x0e9e698c7b2bf5ce3861cb4bc4ddf9e200237c282025b093ada850d764d12a35 Public key (hex) for slow : 0x0e9e698c7b2bf5ce3861cb4bc4ddf9e200237c282025b093ada850d764d12a35
Public key (hex) for gran : 0x55446f9a7aa99ced06b317c80ce90d56b84e56526775683af2525969e8da0b64 Public key (hex) for gran : 0x55446f9a7aa99ced06b317c80ce90d56b84e56526775683af2525969e8da0b64
### Cosmos ###
Local identity : 12D3KooWN1hdioQuovznNgw4nNfBqrp2qxJHvr6FdXH5KC55C2c1
Public key (hex) wallet : 0xfa9809611a6930c246fcd138475f1d9b5aa7b12e1573cfea5b40f7ddb24a7c74
===============================================================================================
Public key (hex) for stash :
Public key (hex) for audi : 0xe8646430cc92137f8fb722ade64329e76698096185dff4170cae827b5e8bb86b
Public key (hex) for babe : 0xbc576d9ac94f37c7a3f530ee69774d52cefe2da3e829c430acbff4fb0068ee23
Public key (hex) for slow : 0x6a7d400964de8e7ddbd38c06b8927b0a988372a264b0669bf06819af25f83214
Public key (hex) for gran : 0x14fd4c3e746866cdc42099e33a5c2aea463dd561407c7bc7460eeb869fea5511
### ghost_7 ### ### ghost_7 ###
Local identity : 12D3KooWNZYbA3Ty1h8BqfMjzKVeJ83UTJxKUXj9zqnSirJZ51KR Local identity : 12D3KooWNZYbA3Ty1h8BqfMjzKVeJ83UTJxKUXj9zqnSirJZ51KR
Public key (hex) wallet : 0x3666e4e19f87bb8680495f31864ce1f1c69d4178002cc01911aef2cc7313f203 Public key (hex) wallet : 0x3666e4e19f87bb8680495f31864ce1f1c69d4178002cc01911aef2cc7313f203
=============================================================================================== ===============================================================================================
Public key (hex) for stash : Public key (hex) for stash : 0xa0ba0196e6ee7e6b5b0553035c5cb5c04e9725001b5732839d0529cbc00c9600
Public key (hex) for audi : 0x90db5ed339a559ed157995a48d781f44c7df972dfba4bc855e4b59fa46438e17 Public key (hex) for audi : 0x90db5ed339a559ed157995a48d781f44c7df972dfba4bc855e4b59fa46438e17
Public key (hex) for babe : 0x6c4dd88b43e2011cf9a6a73d53446336ac9e04cdd4ca23587df63187ac455e49 Public key (hex) for babe : 0x6c4dd88b43e2011cf9a6a73d53446336ac9e04cdd4ca23587df63187ac455e49
Public key (hex) for slow : 0x3481cdcbcf37a4669c29a78cf9ceb39383a10ef0a18b36b92d149fdd0c24ae00 Public key (hex) for slow : 0x3481cdcbcf37a4669c29a78cf9ceb39383a10ef0a18b36b92d149fdd0c24ae00
@ -47,3 +37,13 @@ Public key (hex) for audi : 0x2cf69452e9f2a8457119139408884941ed50f590c0fc0f2b0
Public key (hex) for babe : 0xe0f0a776ecc9fa5e1f22e2fa001fe3fba5aea52b9444bc894b45589d42132475 Public key (hex) for babe : 0xe0f0a776ecc9fa5e1f22e2fa001fe3fba5aea52b9444bc894b45589d42132475
Public key (hex) for slow : 0x0e6fa6934f9e99fa84874f2ed9318825a0d5443a0ced984acfbd24ece72ba55e Public key (hex) for slow : 0x0e6fa6934f9e99fa84874f2ed9318825a0d5443a0ced984acfbd24ece72ba55e
Public key (hex) for gran : 0xb63c5a0cf342b9b04931bc8ed74d7d0165ab99ab5f8a4514797d4b299a4501fe Public key (hex) for gran : 0xb63c5a0cf342b9b04931bc8ed74d7d0165ab99ab5f8a4514797d4b299a4501fe
### Neptune 2 ###
Local identity : 12D3KooWPQXpz8UM9uBsB7pcv12pLCLbYdk8W3SHrZBgiju2fbAs
Public key (hex) wallet : 0x425ccd7bda4f5c76788ba23bc0381d7a2e496179c93301208c57501c80a4232a
===============================================================================================
Public key (hex) stash : 0x6c0283f4c688f0e75ad546c790bbd5961c1a6931543aa589f368f8272c44b758
Public key (hex) audi : 0x00946618c353e4c6546b87f9ca1089b846b0ea4658ee8e6d9d1200c24cb5ee27
Public key (hex) babe : 0x74fa7381a7a74b316afb6793a00387eed9d95d46a69866cbb316b5d9c918af0e
Public key (hex) slow : 0x520e74f8c5853ec8577932327ad3247656db25b74c79ad09adb431b271002401
Public key (hex) gran : 0x236d2fa03f4ed8cb65de7e514d7540159b328f1c170dd402b094ad7fbf547218

View File

@ -288,17 +288,17 @@ fn casper_staging_config_genesis() -> serde_json::Value {
use hex_literal::hex; use hex_literal::hex;
use sp_core::crypto::UncheckedInto; use sp_core::crypto::UncheckedInto;
// Following keys are used in genesis config for development chains. // Following keys are used in genesis config for testing (casper) chains.
// DO NOT use them in production chains as the secret seed is public. // DO NOT use them in production chains such as ghost.
//
// SECRET_SEED="fall cargo frown step audit cover various urge urge six pattern leisure"
// ghostkey inspect -n casper "$SECRET_SEED"
let endowed_accounts = vec![ let endowed_accounts = vec![
// sfFmPT1hi3iySSwEdLpNRMJWo5pvFAKpfgjhDYAgL2i2qyEWx // sfErNwRgZ6ypB7wY8M2smXMZjxqUkc2TgUcNvC1JNQJFXS8bw
hex!["5afaf4bba29ed7557a0112d9664c6c3d4acd96440f1b43f3bddeffdc2b3bc800"].into(), hex!["328d3b7c3046ef7700937d99fb2e98ce2591682c2b5dcf3f562e4da157650237"].into(),
// sfEwRjyvEQcpRQ1qbCZum27nEkTggKEt7DtqxwyYQULt9UuUN
hex!["3666e4e19f87bb8680495f31864ce1f1c69d4178002cc01911aef2cc7313f203"].into(),
// sfHcJxw5cgkvukZZyxcNUMCdbm9e7773orByLrGgAREka81TK
hex!["ac871e8bab00dd56ba3a1c0bd289357203dcaf10010b0b04ad7472870cd22a3c"].into(),
]; ];
// SECRET=$SECRET_SEED ./scripts/prepare-test-net.sh 4
let initial_authorities: Vec<( let initial_authorities: Vec<(
AccountId, AccountId,
AccountId, AccountId,
@ -308,60 +308,46 @@ fn casper_staging_config_genesis() -> serde_json::Value {
SlowClapId, SlowClapId,
)> = vec![ )> = vec![
( (
//sfEdnhKt7YcjUP8iuvxNqTqUu7YpbARBeqFjAPRMH6yFuuPco // sfFXZmnDVnkQ781J2gbqUpi7K5KgMWMdM4eeii74xxGgKYnNN
hex!["28f303d3b1f821edda19bf6c97ee886edd85d7dc80e2500ab5f4888a19e40a50"].into(), hex!["507045c82be367f95408466cd054ca39bfa52697a3ef22809af14cf9de304f02"].into(),
//sfJxZKUmPStRqKF1sq5dpdgeCSCx5zRVa53c4q6d8SgfUUf7W // sfFXZmnDVnkQ781J2gbqUpi7K5KgMWMdM4eeii74xxGgKYnNN
hex!["e83494e12531b122043315d780c4b5b1153c52b7a94c42b5d61cd91b1f188e31"].into(), hex!["507045c82be367f95408466cd054ca39bfa52697a3ef22809af14cf9de304f02"].into(),
//sfFJMwRUaHrHPFL48SqQbvr39HFYvhgX4YKRmrN61i5vqmxnJ // sfJeojACBa7WiH6tBwikBKAMU2oKmseEBD1GYUYATvfWuLcPa
hex!["465e3f1220c774ba014defd7273c3a6e57336eb87c2bea9f04419c2eb6ee895c"].unchecked_into(), hex!["daaaaab6a6e574099e24ae9bb75b543610edef9d374fa85a378edb573b47615f"].unchecked_into(),
//sfEpnU74Gr7bRfTBR7pEKZdxx6SRXmw55atd9x4uJSWRJMGby // sfFdtzNxJdeEkgHxvk144rJKxf7wcYvgX5tqfgZRutW9YvAKE
hex!["3155f271b9ca868a2eb980e35f17ee13525cb59e90848c1b0cc2ff306956c916"].unchecked_into(), hex!["55446f9a7aa99ced06b317c80ce90d56b84e56526775683af2525969e8da0b64"].unchecked_into(),
//sfEM1Bj59N9gnscE7t6fqBF1xvR4wvhmrxfviCQYDfrTY9dvJ // sfE8gsMYAjAJHk5gyYZN7AW6pfmJ7V9H7xxWto24nmhzCUXaQ
hex!["1c25e311eade248d63ff2103d3a0bd8909ad618e5878b423c99bd043b47fd535"].unchecked_into(), hex!["12c14850562021eb99f58f90ab624fb6cfaf3ac9228a92f8b60115fe6a6af15a"].unchecked_into(),
//sfFyrauZLXLR44mBB58i73ZTnsgSHBjbgGxtXwoDTH751LaHE // sfE3GKSrKZzrZpdapJ2VGRpPor45T4D4i8QBZNumSNGqGv7PX
hex!["647d3fc5c00e3dd975838a92a72e06edc6d060c2e79e23672425da61812a8011"].unchecked_into(), hex!["0e9e698c7b2bf5ce3861cb4bc4ddf9e200237c282025b093ada850d764d12a35"].unchecked_into(),
), ),
( (
//sfJEs3nDW3aemaCWeSjeuFtiGR3Zx5nD3uMAPvLoRkATdUicY // sfHLqWNC4hMKHhwvPWmWcxZsDPhCTQKgh1Ap7pm3qML5GBTBa
hex!["c867f4f1417b0aa0c1cf9805866ea3e75d810a47a1ee8d302477768d95306542"].into(), hex!["a0ba0196e6ee7e6b5b0553035c5cb5c04e9725001b5732839d0529cbc00c9600"].into(),
//sfHf6BwnPaRkMqLivmsTrHGWPQ1DsPM5pVzaeodUvpUGDEuhT // sfHLqWNC4hMKHhwvPWmWcxZsDPhCTQKgh1Ap7pm3qML5GBTBa
hex!["aea5d94e3837022ddd3b006d77d38b70b87ebaa5423b358b871a3e05d9157e77"].into(), hex!["a0ba0196e6ee7e6b5b0553035c5cb5c04e9725001b5732839d0529cbc00c9600"].into(),
//sfDzomQME6PRxB5LTEJsLYz7wxJUNNAnMop88Uj4E3wWVyu9x // sfGA6tPPF8dAc8QpMCMjxitG3j8sXPhkdpm5bwz4UsXAApUiw
hex!["0cbe89b4ea4fd1d618f9d0db15522f2ca335893abb806a638c3e9bc43f022c78"].unchecked_into(), hex!["6c4dd88b43e2011cf9a6a73d53446336ac9e04cdd4ca23587df63187ac455e49"].unchecked_into(),
//sfK6CJTmSa5cGk51KFibhvbm1di6EPBnefGeCzXcprUQVokeV // sfGxQZXFUQH1AXv82rpjiJHFs7YsdEuVGdyvKiS2Tajpvw6Se
hex!["ee07cb1fd2fbc6b079ec3abb6c4866a35a3f1a25aef0bd5e50d8c188a98148c9"].unchecked_into(), hex!["8f9ea20bf4a807a8e710f7559dece86e94672b5b361de157bdaa5c1f37849f8d"].unchecked_into(),
//sfK9Kq2pXUW5JZBMYSFRwKCWZoMEzqkq8wRVTtpo6zxdDENqG // sfGz2enFUR22cQ5ey61MdtPqbCeEWZA1wsCFFSLGaK7vKnv8C
hex!["f06ade37706f898adce54b09f7e973e718b20fbec06eebf34e6d23046aa51d63"].unchecked_into(), hex!["90db5ed339a559ed157995a48d781f44c7df972dfba4bc855e4b59fa46438e17"].unchecked_into(),
//sfEBQtB12x7xi5RPGXJiLWugdwAdDBsYePwssMLFBtr43dZiC // sfEtwe5BoroNjkdLsvnjnMemUKiw8MS1X4YW8bepbbGvhS4LZ
hex!["14d534940143dc260894c7ebfd013a0d5c65c2cd85ae89decb32d663a2628e66"].unchecked_into(), hex!["3481cdcbcf37a4669c29a78cf9ceb39383a10ef0a18b36b92d149fdd0c24ae00"].unchecked_into(),
), ),
( (
//sfF4sfGLNyVtYMYZbte6A6kcncFi4hG65vPpbftQZxcBVbavS // sfGq75CrCrkcfqNzyyidu3D4jW3AoJSzL5tKKuv1UbS16ezzy
hex!["3c14dca7697cd193184708b00abf3c148c2d78eae6d8c102b84683ec6936123b"].into(), hex!["8a0d0b66e827bf20e79f9a499317e73925ce4f422371067edfab690e43857f13"].into(),
//sfJUHCESTjHwXKmHbzhApCDRgzUTcP5kcUUCATeBaTUwtyx8X // sfGq75CrCrkcfqNzyyidu3D4jW3AoJSzL5tKKuv1UbS16ezzy
hex!["d2a36dc75ef7933c2934b0855e2568a85c11347a48f0a1bfbcf1fc3757db1a07"].into(), hex!["8a0d0b66e827bf20e79f9a499317e73925ce4f422371067edfab690e43857f13"].into(),
//sfGS5ypMSqG3VSWyhKghZzCxSUdp4JC3Qaw3eu2oe8iaSy1TM // sfJo2ogBpssRAU9ZPTvuXFZEdmJw9pKsPydLjXe8DypRScjzT
hex!["787eb8a2780f422382474cfa7e44493fffd86824963a0da22d0f0c82f9d39860"].unchecked_into(), hex!["e0f0a776ecc9fa5e1f22e2fa001fe3fba5aea52b9444bc894b45589d42132475"].unchecked_into(),
//sfFH1EKd6KCqCJ9HPPW5oBr5gigsEKBkHtFT4GoBqu5iUdYzZ // sfHq3EVT1sqY7o5ki3zA6LEdRDfdFc29YaZN3w2Thhz6JD5ZF
hex!["45554a1b748fed1f2f51f06970c8cd764edbdefd82d697993ddfe7f97290918c"].unchecked_into(), hex!["b63c5a0cf342b9b04931bc8ed74d7d0165ab99ab5f8a4514797d4b299a4501fe"].unchecked_into(),
//sfG28QRqEgkAgvpjZc3N86xDTebiwKiSvKYfg1NdwW2GNDbP6 // sfEj3wrDy9EDLCAodyEdQEYxJpNnM8Etaj3RJ5bCBRzdaDced
hex!["6638fe19b4331656dacf3be9d6a81506fa71db1fbe4bd9db0ab8c9cc0e364f1b"].unchecked_into(), hex!["2cf69452e9f2a8457119139408884941ed50f590c0fc0f2b044c4d82c69e4245"].unchecked_into(),
//sfFUfGqByAJGfe3e4vxiDJv5A1v1dp2piSNGpR8Kz5U9dFvMp // sfE32RmBp1xX4KRTphVGLUJBxLGPN3Dzg9BwCJktxMf3iEwck
hex!["4e390dd2dad59ff8709e0cb714bfccdbadde8b4e91d5931cb98ba6e6eb48a93b"].unchecked_into(), hex!["0e6fa6934f9e99fa84874f2ed9318825a0d5443a0ced984acfbd24ece72ba55e"].unchecked_into(),
),
(
//sfG7zdnf5t6JHbi9tBfkKesz13x7B9mSiYwDJfnDQ1LQwXwAi
hex!["6ab24f598a38e1d91004487faedadc8c338a7cb2a07e29899eccc7d106a2195e"].into(),
//sfDu1voz5vmiKXeiCHutmCp96C6LqLogsWE4rkaUZeZyhdt1B
hex!["085401d14ff3c620c76347a9e9a7e020fd3575d081c8352728db56ea6cc52677"].into(),
//sfH9hH4P98SohVs3Aj4cBoDXZvgYbF8dPXi3NfyEng5eMry9G
hex!["983a9aa148f94a54f313aca8537fb00f3c3353f70fafa8c14d4de22b44366f3c"].unchecked_into(),
//sfJQChmUKaDDQgzsAyZvuRNQZxV4CQ2qmxzmZk27tdWczKtRa
hex!["cf875474e8dfe94f4e9e0e2a4743e02c18cebf87b2c763710c9630f3fc94c9c4"].unchecked_into(),
//sfEMDH3w5xvZCwhXaMKYV7hsSL36evqHhqianntoiNDEtewLT
hex!["1c4e97776053b47b5b48035bab5f5f4afb3e6e13b15d1964195502cf40124c2a"].unchecked_into(),
//sfEPb5wWLKAHZH8k8KXpBtfnbBQPBBTkyv2ZQ1YP3GRKKpP1w
hex!["1e1e7f0781828178bd1237d9a8c2e057bbb15f2f46d1fc5fb316ebd9f5d1ad04"].unchecked_into(),
), ),
]; ];
@ -398,7 +384,7 @@ fn casper_staging_config_genesis() -> serde_json::Value {
}, },
"staking": { "staking": {
"validatorCount": 50, "validatorCount": 50,
"minimumValidatorCount": 4, "minimumValidatorCount": 2,
"stakers": initial_authorities "stakers": initial_authorities
.iter() .iter()
.map(|x| { .map(|x| {