diff --git a/Cargo.lock b/Cargo.lock index dc4878a560922..7f209a4d2d027 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -728,7 +728,6 @@ dependencies = [ "structopt", "substrate-build-script-utils", "xp-io", - "xpallet-gateway-bitcoin", "xpallet-protocol", ] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 242cf774acc5c..8ab156c440f19 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -31,7 +31,7 @@ sc-chain-spec = "2.0.0" sc-cli = { version = "0.8.0", optional = true } sc-service = { version = "0.8.0", optional = true } -frame-benchmarking-cli = "2.0.0" +frame-benchmarking-cli = { version = "2.0.0", optional = true } # Substrate primitives sp-core = "2.0.0" @@ -46,14 +46,12 @@ sp-authority-discovery = "2.0.0" # Substrate pallets pallet-im-online = "2.0.0" +chainx-executor = { path = "../executor" } chainx-primitives = { path = "../primitives" } +chainx-rpc = { path = "../rpc" } chainx-runtime = { path = "../runtime" } xp-io = { path = "../primitives/io" } -chainx-rpc = { path = "../rpc" } -chainx-executor = { path = "../executor" } - xpallet-protocol = { path = "../xpallets/protocol" } -xpallet-gateway-bitcoin = { path = "../xpallets/gateway/bitcoin" } [build-dependencies] substrate-build-script-utils = "2.0.0" @@ -63,6 +61,7 @@ default = ["cli"] cli = [ "sc-cli", "sc-service", + "frame-benchmarking-cli", "chainx-executor/wasmi-errno", ] wasmtime = [ diff --git a/cli/src/chain_spec.rs b/cli/src/chain_spec.rs index 3430ec9ef2037..5a1baccbc5f1a 100644 --- a/cli/src/chain_spec.rs +++ b/cli/src/chain_spec.rs @@ -33,8 +33,7 @@ use chainx_runtime::{ XSystemConfig, }; -use crate::genesis::trustees::TrusteeParams; -use crate::res::BitcoinParams; +use crate::genesis::bitcoin::{BtcGenesisParams, BtcTrusteeParams}; // Note this is the URL for the telemetry server //const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; @@ -135,7 +134,7 @@ pub fn development_config() -> Result { let endowed_balance = 50 * DOLLARS; let constructor = move || { - testnet_genesis( + build_genesis( wasm_binary, vec![authority_keys_from_seed("Alice")], get_account_id_from_seed::("Alice"), @@ -147,8 +146,10 @@ pub fn development_config() -> Result { ("Alice//stash", endowed_balance), ("Bob//stash", endowed_balance), ], - crate::res::testnet_btc_genesis_header, - crate::genesis::trustees::local_testnet_trustees(), + crate::genesis::bitcoin::btc_genesis_params(include_str!( + "res/btc_genesis_params_testnet.json" + )), + crate::genesis::bitcoin::local_testnet_trustees(), ) }; Ok(ChainSpec::from_genesis( @@ -170,7 +171,7 @@ pub fn benchmarks_config() -> Result { let endowed_balance = 50 * DOLLARS; let constructor = move || { - testnet_genesis( + build_genesis( wasm_binary, vec![authority_keys_from_seed("Alice")], get_account_id_from_seed::("Alice"), @@ -182,8 +183,10 @@ pub fn benchmarks_config() -> Result { ("Alice//stash", endowed_balance), ("Bob//stash", endowed_balance), ], - crate::res::mainnet_btc_genesis_header, - crate::genesis::trustees::benchmarks_trustees(), + crate::genesis::bitcoin::btc_genesis_params(include_str!( + "res/btc_genesis_params_mainnet.json" + )), + crate::genesis::bitcoin::benchmarks_trustees(), ) }; Ok(ChainSpec::from_genesis( @@ -205,7 +208,7 @@ pub fn local_testnet_config() -> Result { let endowed_balance = 50 * DOLLARS; let constructor = move || { - testnet_genesis( + build_genesis( wasm_binary, vec![ authority_keys_from_seed("Alice"), @@ -228,8 +231,10 @@ pub fn local_testnet_config() -> Result { ("Eve//stash", endowed_balance), ("Ferdie//stash", endowed_balance), ], - crate::res::testnet_btc_genesis_header, - crate::genesis::trustees::local_testnet_trustees(), + crate::genesis::bitcoin::btc_genesis_params(include_str!( + "res/btc_genesis_params_testnet.json" + )), + crate::genesis::bitcoin::local_testnet_trustees(), ) }; Ok(ChainSpec::from_genesis( @@ -361,15 +366,17 @@ pub fn staging_testnet_config() -> Result { endowed.insert(pcx_id, endowed_info); let constructor = move || { - testnet_genesis( + build_genesis( wasm_binary, initial_authorities.clone(), root_key.clone(), root_key.clone(), // use root key as vesting_account assets.clone(), endowed.clone(), - crate::res::testnet_btc_genesis_header, - crate::genesis::trustees::staging_testnet_trustees(), + crate::genesis::bitcoin::btc_genesis_params(include_str!( + "res/btc_genesis_params_testnet.json" + )), + crate::genesis::bitcoin::staging_testnet_trustees(), ) }; Ok(ChainSpec::from_genesis( @@ -504,15 +511,17 @@ pub fn testnet_config() -> Result { endowed.insert(pcx_id, endowed_info); let constructor = move || { - testnet_genesis( + build_genesis( &wasm_binary[..], initial_authorities.clone(), root_key.clone(), root_key.clone(), // use root key as vesting_account assets.clone(), endowed.clone(), - crate::res::testnet_btc_genesis_header, - crate::genesis::trustees::staging_testnet_trustees(), + crate::genesis::bitcoin::btc_genesis_params(include_str!( + "res/btc_genesis_params_testnet.json" + )), + crate::genesis::bitcoin::staging_testnet_trustees(), ) }; Ok(ChainSpec::from_genesis( @@ -606,19 +615,16 @@ fn init_assets( (init_assets, assets_restrictions) } -fn testnet_genesis( +fn build_genesis( wasm_binary: &[u8], initial_authorities: Vec, root_key: AccountId, vesting_account: AccountId, assets: Vec, endowed: BTreeMap>, - bitcoin_info: F, - trustees: Vec<(Chain, TrusteeInfoConfig, Vec)>, -) -> GenesisConfig -where - F: FnOnce() -> BitcoinParams, -{ + bitcoin: BtcGenesisParams, + trustees: Vec<(Chain, TrusteeInfoConfig, Vec)>, +) -> GenesisConfig { const ENDOWMENT: Balance = 10_000_000 * DOLLARS; const STASH: Balance = 100 * DOLLARS; const STAKING_LOCKED: Balance = 1_000 * DOLLARS; @@ -666,7 +672,7 @@ where let validators = initial_authorities .clone() .into_iter() - .map(|((val, referral_id), _, _, _, _, _)| (val, referral_id, STAKING_LOCKED)) + .map(|((validator, referral), _, _, _, _, _)| (validator, referral, STAKING_LOCKED)) .collect::>(); let btc_genesis_trustees = trustees .iter() @@ -735,32 +741,24 @@ where endowed: assets_endowed, }), xpallet_gateway_common: Some(XGatewayCommonConfig { trustees }), - xpallet_gateway_bitcoin: { - let BitcoinParams { - genesis_info, - genesis_hash, - network, - confirmed_count, - } = bitcoin_info(); // crate::res::mainnet_btc_genesis_header(); - Some(XGatewayBitcoinConfig { - genesis_trustees: btc_genesis_trustees, - genesis_info, - genesis_hash, - network_id: network, - params_info: BtcParams::new( - 486604799, // max_bits - 2 * 60 * 60, // block_max_future - 2 * 7 * 24 * 60 * 60, // target_timespan_seconds - 10 * 60, // target_spacing_seconds - 4, // retargeting_factor - ), - verifier: BtcTxVerifier::Recover, - confirmation_number: confirmed_count, - reserved_block: 2100, - btc_withdrawal_fee: 500000, - max_withdrawal_count: 100, - }) - }, + xpallet_gateway_bitcoin: Some(XGatewayBitcoinConfig { + genesis_trustees: btc_genesis_trustees, + network_id: bitcoin.network, + confirmation_number: bitcoin.confirmation_number, + genesis_hash: bitcoin.hash(), + genesis_info: (bitcoin.header(), bitcoin.height), + params_info: BtcParams::new( + 486604799, // max_bits + 2 * 60 * 60, // block_max_future + 2 * 7 * 24 * 60 * 60, // target_timespan_seconds + 10 * 60, // target_spacing_seconds + 4, // retargeting_factor + ), // retargeting_factor + reserved_block: 2100, + btc_withdrawal_fee: 500000, + max_withdrawal_count: 100, + verifier: BtcTxVerifier::Recover, + }), xpallet_mining_staking: Some(XStakingConfig { validators, validator_count: 50, diff --git a/cli/src/genesis/trustees.rs b/cli/src/genesis/bitcoin.rs similarity index 61% rename from cli/src/genesis/trustees.rs rename to cli/src/genesis/bitcoin.rs index dd14b0edda971..0262a52e5d710 100644 --- a/cli/src/genesis/trustees.rs +++ b/cli/src/genesis/bitcoin.rs @@ -3,14 +3,64 @@ use std::convert::TryFrom; use hex_literal::hex; +use serde::Deserialize; + use sp_core::sr25519; -use crate::chain_spec::get_account_id_from_seed; use chainx_primitives::AccountId; -use chainx_runtime::{trustees, Chain, TrusteeInfoConfig}; +use chainx_runtime::{ + h256_rev, trustees, BtcCompact, BtcHash, BtcHeader, BtcNetwork, Chain, TrusteeInfoConfig, +}; + +use crate::chain_spec::get_account_id_from_seed; + +#[derive(Debug, Deserialize)] +pub struct BtcGenesisParams { + pub network: BtcNetwork, + pub confirmation_number: u32, + pub height: u32, + hash: String, + version: u32, + previous_header_hash: String, + merkle_root_hash: String, + time: u32, + bits: BtcCompact, + nonce: u32, +} + +impl BtcGenesisParams { + /// Return the block hash. + /// + /// Indicating user-visible serializations of this hash should be backward. + pub fn hash(&self) -> BtcHash { + h256_rev(&self.hash) + } + + /// Return the block header. + /// + /// Indicating user-visible serializations of `previous_header_hash` and `merkle_root_hash` + /// should be backward. + pub fn header(&self) -> BtcHeader { + BtcHeader { + version: self.version, + previous_header_hash: h256_rev(&self.previous_header_hash), + merkle_root_hash: h256_rev(&self.merkle_root_hash), + time: self.time, + bits: self.bits, + nonce: self.nonce, + } + } +} + +pub fn btc_genesis_params(res: &str) -> BtcGenesisParams { + let params: BtcGenesisParams = serde_json::from_str(res).expect("JSON was not well-formatted"); + assert_eq!(params.header().hash(), params.hash()); + params +} // (account_id, about, hot_key, cold_key) -pub type TrusteeParams = (AccountId, Vec, Vec, Vec); +pub type BtcTrusteeParams = (AccountId, Vec, Vec, Vec); + macro_rules! btc_trustee_key { ($btc_pubkey:expr) => {{ trustees::bitcoin::BtcTrusteeType::try_from( @@ -20,21 +70,27 @@ macro_rules! btc_trustee_key { .into() }}; } -fn btc_trustee_gen(seed: &str, hot_pubkey: &str, cold_pubkey: &str) -> TrusteeParams { + +fn btc_trustee_gen(seed: &str, hot_pubkey: &str, cold_pubkey: &str) -> BtcTrusteeParams { ( - get_account_id_from_seed::(seed), - seed.as_bytes().to_vec(), // About - btc_trustee_key!(hot_pubkey), // Hot key - btc_trustee_key!(cold_pubkey), // Cold key + get_account_id_from_seed::(seed), // Account Id + seed.as_bytes().to_vec(), // Seed Bytes. + btc_trustee_key!(hot_pubkey), // Hot Key + btc_trustee_key!(cold_pubkey), // Cold Key ) } -pub fn local_testnet_trustees() -> Vec<(Chain, TrusteeInfoConfig, Vec)> { +pub fn local_testnet_trustees() -> Vec<(Chain, TrusteeInfoConfig, Vec)> { + let btc_config = TrusteeInfoConfig { + min_trustee_count: 3, + max_trustee_count: 15, + }; + let btc_trustees = vec![ btc_trustee_gen( "Alice", - "0376b9649206c74cc3dad6332c3a86d925a251bf9a55e6381f5d67b29a47559634", // hot key - "0300849497d4f88ebc3e1bc2583677c5abdbd3b63640b3c5c50cd4628a33a2a2ca", // colde key + "0376b9649206c74cc3dad6332c3a86d925a251bf9a55e6381f5d67b29a47559634", + "0300849497d4f88ebc3e1bc2583677c5abdbd3b63640b3c5c50cd4628a33a2a2ca", ), btc_trustee_gen( "Bob", @@ -48,74 +104,69 @@ pub fn local_testnet_trustees() -> Vec<(Chain, TrusteeInfoConfig, Vec Vec<(Chain, TrusteeInfoConfig, Vec)> { - let btc_trustees = vec![ - // 1 - btc_trustee_gen( - "Alice", - "02df92e88c4380778c9c48268460a124a8f4e7da883f80477deaa644ced486efc6", - "0386b58f51da9b37e59c40262153173bdb59d7e4e45b73994b99eec4d964ee7e88", - ), - // 2 - btc_trustee_gen( - "Bob", - "0244d81efeb4171b1a8a433b87dd202117f94e44c909c49e42e77b69b5a6ce7d0d", - "02e4631e46255571122d6e11cda75d5d601d5eb2585e65e4e87fe9f68c7838a278", - ), - // 3 - btc_trustee_gen( - "Charlie", - "03a36339f413da869df12b1ab0def91749413a0dee87f0bfa85ba7196e6cdad102", // hot key - "0263d46c760d3e04883d4b433c9ce2bc32130acd9faad0192a2b375dbba9f865c3", // colde key - ), - ]; - +pub fn staging_testnet_trustees() -> Vec<(Chain, TrusteeInfoConfig, Vec)> { let btc_config = TrusteeInfoConfig { min_trustee_count: 3, max_trustee_count: 15, }; - vec![(Chain::Bitcoin, btc_config, btc_trustees)] -} - -pub fn staging_testnet_trustees() -> Vec<(Chain, TrusteeInfoConfig, Vec)> { let btc_trustees = vec![ ( // 5Ca46gRUa2oS6GukzKph8qFfn4WdhP5yhuRaTuzaXsKjfGgM hex!["16624186f2ea93a21f34e00ae622959e40d841231b26e625be93f75137b2a10d"].into(), - b"Validator1".to_vec(), // About - btc_trustee_key!("0376b9649206c74cc3dad6332c3a86d925a251bf9a55e6381f5d67b29a47559634"), // Hot key - btc_trustee_key!("0300849497d4f88ebc3e1bc2583677c5abdbd3b63640b3c5c50cd4628a33a2a2ca"), // Cold key + b"Validator1".to_vec(), + btc_trustee_key!("0376b9649206c74cc3dad6332c3a86d925a251bf9a55e6381f5d67b29a47559634"), + btc_trustee_key!("0300849497d4f88ebc3e1bc2583677c5abdbd3b63640b3c5c50cd4628a33a2a2ca"), ), ( // 5DV17DNeRCidmacaP1MdhD8YV8A94PmVyr4eRcKq8tG6Q17C hex!["3ec431c8b3ae28095ad652f5531a770ef21e59779d4a3a46e0217baa4c614624"].into(), - b"Validator2".to_vec(), // About - btc_trustee_key!("0285eed6fa121c3a82ba6d0c37fa37e72bb06740761bfe9f294d2fa95fe237d5ba"), // Hot key - btc_trustee_key!("032122032ae9656f9a133405ffe02101469a8d62002270a33ceccf0e40dda54d08"), // Cold key + b"Validator2".to_vec(), + btc_trustee_key!("0285eed6fa121c3a82ba6d0c37fa37e72bb06740761bfe9f294d2fa95fe237d5ba"), + btc_trustee_key!("032122032ae9656f9a133405ffe02101469a8d62002270a33ceccf0e40dda54d08"), ), ( // 5ERY5k4cDMhhE7B8PRA26fCs1VbHNZJAhHoiuZhzP18cxq8T hex!["685bb75b531394c4d522003784cc62fa15fcab8fe16c19c3f4a1eeae308afa4f"].into(), - b"Validator3".to_vec(), // About - btc_trustee_key!("036e1b175cc285b62a8b86e4ea94f32d627b36d60673b37eb3dd07d7b8c9ae6ddb"), // Hot key - btc_trustee_key!("02b3cc747f572d33f12870fa6866aebbfd2b992ba606b8dc89b676b3697590ad63"), // Cold key + b"Validator3".to_vec(), + btc_trustee_key!("036e1b175cc285b62a8b86e4ea94f32d627b36d60673b37eb3dd07d7b8c9ae6ddb"), + btc_trustee_key!("02b3cc747f572d33f12870fa6866aebbfd2b992ba606b8dc89b676b3697590ad63"), ), ]; + vec![(Chain::Bitcoin, btc_config, btc_trustees)] +} + +#[cfg(feature = "runtime-benchmarks")] +pub fn benchmarks_trustees() -> Vec<(Chain, TrusteeInfoConfig, Vec)> { let btc_config = TrusteeInfoConfig { min_trustee_count: 3, max_trustee_count: 15, }; + let btc_trustees = vec![ + // 1 + btc_trustee_gen( + "Alice", + "02df92e88c4380778c9c48268460a124a8f4e7da883f80477deaa644ced486efc6", + "0386b58f51da9b37e59c40262153173bdb59d7e4e45b73994b99eec4d964ee7e88", + ), + // 2 + btc_trustee_gen( + "Bob", + "0244d81efeb4171b1a8a433b87dd202117f94e44c909c49e42e77b69b5a6ce7d0d", + "02e4631e46255571122d6e11cda75d5d601d5eb2585e65e4e87fe9f68c7838a278", + ), + // 3 + btc_trustee_gen( + "Charlie", + "03a36339f413da869df12b1ab0def91749413a0dee87f0bfa85ba7196e6cdad102", + "0263d46c760d3e04883d4b433c9ce2bc32130acd9faad0192a2b375dbba9f865c3", + ), + ]; + vec![(Chain::Bitcoin, btc_config, btc_trustees)] } diff --git a/cli/src/genesis/mod.rs b/cli/src/genesis/mod.rs index ea908cee45128..b645e77fa337e 100644 --- a/cli/src/genesis/mod.rs +++ b/cli/src/genesis/mod.rs @@ -1,3 +1,3 @@ // Copyright 2019-2020 ChainX Project Authors. Licensed under GPL-3.0. -pub mod trustees; +pub mod bitcoin; diff --git a/cli/src/lib.rs b/cli/src/lib.rs index d11f39e138e25..2f3dfde065243 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -6,14 +6,13 @@ #![warn(unused_extern_crates)] mod chain_spec; -#[macro_use] -mod service; mod cli; mod command; mod config; mod genesis; mod logger; -mod res; +mod service; -pub use command::*; pub use sc_cli::Result; + +pub use self::command::*; diff --git a/cli/src/res.rs b/cli/src/res.rs deleted file mode 100644 index 5b2a9d22ffc41..0000000000000 --- a/cli/src/res.rs +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2019-2020 ChainX Project Authors. Licensed under GPL-3.0. - -use chainx_runtime::{h256_rev, BtcCompact, BtcHeader, BtcNetwork}; - -#[derive(Debug, serde::Deserialize)] -struct BitcoinGenesisHeader { - version: u32, - previous_header_hash: String, - merkle_root_hash: String, - time: u32, - bits: u32, - nonce: u32, - height: u32, - hash: String, - network_id: String, -} - -fn as_btc_network(network_id: &str) -> BtcNetwork { - match network_id { - "Mainnet" => BtcNetwork::Mainnet, - "Testnet" => BtcNetwork::Testnet, - _ => unreachable!("network_id is either Mainnet or Testnet"), - } -} - -pub struct BitcoinParams { - pub genesis_info: (BtcHeader, u32), - pub genesis_hash: xpallet_gateway_bitcoin::H256, - pub network: BtcNetwork, - pub confirmed_count: u32, -} - -fn build_bitcoin_params(raw: BitcoinGenesisHeader, confirmed_count: u32) -> BitcoinParams { - let as_h256 = |s: &str| h256_rev(s); - BitcoinParams { - genesis_info: ( - BtcHeader { - version: raw.version, - previous_header_hash: as_h256(&raw.previous_header_hash), - merkle_root_hash: as_h256(&raw.merkle_root_hash), - time: raw.time, - bits: BtcCompact::new(raw.bits), - nonce: raw.nonce, - }, - raw.height, - ), - genesis_hash: as_h256(&raw.hash), - network: as_btc_network(&raw.network_id), - confirmed_count, - } -} - -// testnet -pub fn testnet_btc_genesis_header() -> BitcoinParams { - let raw: BitcoinGenesisHeader = - serde_json::from_str(include_str!("./res/btc_genesis_header_testnet.json")) - .expect("JSON was not well-formatted"); - build_bitcoin_params(raw, 6u32) -} - -// mainnet -pub fn mainnet_btc_genesis_header() -> BitcoinParams { - let raw: BitcoinGenesisHeader = - serde_json::from_str(include_str!("./res/btc_genesis_header_mainnet.json")) - .expect("JSON was not well-formatted"); - build_bitcoin_params(raw, 4u32) -} diff --git a/cli/src/res/btc_genesis_header_mainnet.json b/cli/src/res/btc_genesis_params_mainnet.json similarity index 82% rename from cli/src/res/btc_genesis_header_mainnet.json rename to cli/src/res/btc_genesis_params_mainnet.json index 79e7d4f101987..bdf55645465b7 100644 --- a/cli/src/res/btc_genesis_header_mainnet.json +++ b/cli/src/res/btc_genesis_params_mainnet.json @@ -1,11 +1,12 @@ { + "network": "Mainnet", + "confirmation_number": 6, + "height": 576576, + "hash": "0000000000000000001721f58deb88b0710295a02551f0dde1e2e231a15f1882", "version": 536870912, "previous_header_hash": "0000000000000000000a4adf6c5192128535d4dcb56cfb5753755f8d392b26bf", "merkle_root_hash": "1d21e60acb0b12e5cfd3f775edb647f982a2d666f9886b2f61ea5e72577b0f5e", "time": 1558168296, "bits": 388627269, - "nonce": 1439505020, - "height": 576576, - "hash": "0000000000000000001721f58deb88b0710295a02551f0dde1e2e231a15f1882", - "network_id": "Mainnet" + "nonce": 1439505020 } \ No newline at end of file diff --git a/cli/src/res/btc_genesis_header_testnet.json b/cli/src/res/btc_genesis_params_testnet.json similarity index 82% rename from cli/src/res/btc_genesis_header_testnet.json rename to cli/src/res/btc_genesis_params_testnet.json index 83796bbe497fd..6907743ccade8 100644 --- a/cli/src/res/btc_genesis_header_testnet.json +++ b/cli/src/res/btc_genesis_params_testnet.json @@ -1,11 +1,12 @@ { + "network": "Testnet", + "confirmation_number": 4, + "height": 1835330, + "hash": "00000000000000effac8ab05a100acb44499eca05d7146d94e41b6c6b61cd8ba", "version": 536870912, "previous_header_hash": "00000000000000397ec13c203d7e60f0000858182cd8ac35b162d55dd23ab292", "merkle_root_hash": "450e30dbaf564d9f9c6c33cca3abd9d4915ecde31aba56f8194d06ff85958f5d", "time": 1600670096, "bits": 436272884, - "nonce": 1729006046, - "height": 1835330, - "hash": "00000000000000effac8ab05a100acb44499eca05d7146d94e41b6c6b61cd8ba", - "network_id": "Testnet" + "nonce": 1729006046 } \ No newline at end of file diff --git a/runtime/src/impls.rs b/runtime/src/impls.rs index 39b5f8bdeaf1f..658bee01f8a34 100644 --- a/runtime/src/impls.rs +++ b/runtime/src/impls.rs @@ -10,8 +10,11 @@ use frame_support::{ }; use pallet_transaction_payment::{Multiplier, TargetedFeeAdjustment}; -use crate::{Authorship, Balances, NegativeImbalance, Runtime}; -use chainx_primitives::Balance; +use chainx_primitives::{AccountId, Balance}; + +use crate::{Authorship, Balances, Runtime}; + +type NegativeImbalance = >::NegativeImbalance; pub struct Author; impl OnUnbalanced for Author { @@ -72,5 +75,6 @@ parameter_types! { pub AdjustmentVariable: Multiplier = Multiplier::saturating_from_rational(1, 100_000); pub MinimumMultiplier: Multiplier = Multiplier::saturating_from_rational(1, 1_000_000_000u128); } + pub type SlowAdjustingFeeUpdate = TargetedFeeAdjustment; diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 4a732e621bc62..f5e0787eb4903 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -11,7 +11,6 @@ include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); use codec::Encode; - use static_assertions::const_assert; use sp_api::impl_runtime_apis; @@ -51,9 +50,6 @@ use xpallet_mining_asset::{MinerLedger, MiningAssetInfo}; use xpallet_mining_staking::{NominatorInfo, NominatorLedger, ValidatorInfo}; use xpallet_support::traits::MultisigAddressFor; -#[cfg(any(feature = "std", test))] -pub use sp_runtime::BuildStorage; - // A few exports that help ease life for downstream crates. pub use frame_support::{ construct_runtime, debug, parameter_types, @@ -83,7 +79,8 @@ pub use xpallet_assets::{ #[cfg(feature = "std")] pub use xpallet_gateway_bitcoin::h256_rev; pub use xpallet_gateway_bitcoin::{ - BtcHeader, BtcNetwork, BtcParams, BtcTxVerifier, Compact as BtcCompact, H256 as BtcHash, + hash_rev, BtcHeader, BtcNetwork, BtcParams, BtcTxVerifier, Compact as BtcCompact, + H256 as BtcHash, }; pub use xpallet_gateway_common::{ trustees, @@ -92,24 +89,15 @@ pub use xpallet_gateway_common::{ pub use xpallet_gateway_records::Withdrawal; pub use xpallet_protocol::*; -/// Implementations of some helper traits passed into runtime modules as associated types. -pub mod impls; -use impls::{CurrencyToVoteHandler, DealWithFees, SlowAdjustingFeeUpdate}; - /// Constant values used within the runtime. pub mod constants; -pub use constants::{currency::*, fee::WeightToFee, time::*}; +/// Implementations of some helper traits passed into runtime modules as associated types. +pub mod impls; /// Weights for pallets used in the runtime. mod weights; -impl_opaque_keys! { - pub struct SessionKeys { - pub babe: Babe, - pub grandpa: Grandpa, - pub im_online: ImOnline, - pub authority_discovery: AuthorityDiscovery, - } -} +use self::constants::{currency::*, fee::WeightToFee, time::*}; +use self::impls::{CurrencyToVoteHandler, DealWithFees, SlowAdjustingFeeUpdate}; /// This runtime version. pub const VERSION: RuntimeVersion = RuntimeVersion { @@ -353,6 +341,15 @@ parameter_types! { pub const DisabledValidatorsThreshold: Perbill = Perbill::from_percent(17); } +impl_opaque_keys! { + pub struct SessionKeys { + pub babe: Babe, + pub grandpa: Grandpa, + pub im_online: ImOnline, + pub authority_discovery: AuthorityDiscovery, + } +} + /// Substrate has the controller/stash concept, the according `Convert` implementation /// is used to find the stash of the given controller account. /// There is no such concepts in the context of ChainX, the stash account is also the controller account. @@ -398,9 +395,7 @@ impl pallet_balances::Trait for Runtime { parameter_types! { pub const TransactionByteFee: Balance = 10 * MILLICENTS; // 100 => 0.000001 pcx - } -type NegativeImbalance = >::NegativeImbalance; impl pallet_transaction_payment::Trait for Runtime { type Currency = Balances; diff --git a/scripts/genesis/README.md b/scripts/genesis/README.md index 43f3849588658..6e4a918c5b549 100644 --- a/scripts/genesis/README.md +++ b/scripts/genesis/README.md @@ -1,23 +1,23 @@ # Scripts for genesis generation -## `btc_genesis_header_gen.py` +## `btc_genesis_params_gen.py` -Generate specific Bitcoin block header given the Bitcoin block height. +Generate specific Bitcoin block header params given the Bitcoin block height. Currently this script uses the API of https://blockstream.info/. ### Usage ```bash -$ ./btc_genesis_header_gen.py -h +$ ./btc_genesis_params_gen.py -h ``` Example: ```bash -# Generate block header from Bitcoin mainnet at height 576576. -$ ./btc_genesis_header_gen.py 576576 +# Generate block params from Bitcoin mainnet at height 576576. +$ ./btc_genesis_params_gen.py 576576 -# Generate block header from Bitcoin testnet at height 576576. -$ ./btc_genesis_header_gen.py 576576 --network Testnet +# Generate block params from Bitcoin testnet at height 576576. +$ ./btc_genesis_params_gen.py 576576 --network Testnet ``` diff --git a/scripts/genesis/btc_genesis_header_gen.py b/scripts/genesis/btc_genesis_params_gen.py similarity index 90% rename from scripts/genesis/btc_genesis_header_gen.py rename to scripts/genesis/btc_genesis_params_gen.py index e84f38e341b2a..dab0793db0ff7 100755 --- a/scripts/genesis/btc_genesis_header_gen.py +++ b/scripts/genesis/btc_genesis_params_gen.py @@ -49,8 +49,10 @@ def main(): if args.network != 'Mainnet': network = 'Testnet' + confirmation_number = 4 else: network = 'Mainnet' + confirmation_number = 6 print('Generating ' + args.network + ' Bitcoin Block Header for #' + args.height + ':\n') @@ -61,15 +63,16 @@ def main(): full_header = json.loads(get_block(network, blk_hash)) generated = { + "network": network, + "confirmation_number": confirmation_number, + 'height': int(args.height), + 'hash': blk_hash, 'version': full_header['version'], 'previous_header_hash': full_header['previousblockhash'], 'merkle_root_hash': full_header['merkle_root'], 'time': full_header['timestamp'], 'bits': full_header['bits'], - 'nonce': full_header['nonce'], - 'height': int(args.height), - 'hash': blk_hash, - "network_id": network + 'nonce': full_header['nonce'] } print('Generated Block header info:\n') print(json.dumps(generated, indent=4)) @@ -81,8 +84,7 @@ def main(): chainx_dir = os.path.dirname(scripts_dir) os.chdir(chainx_dir) - output_fname = 'cli/src/res/btc_genesis_header_' + args.network.lower( - ) + '.json' + output_fname = 'cli/src/res/btc_genesis_params_' + args.network.lower() + '.json' with open(output_fname, 'w') as outfile: json.dump(generated, outfile, indent=4, sort_keys=False) diff --git a/xpallets/gateway/bitcoin/src/lib.rs b/xpallets/gateway/bitcoin/src/lib.rs index 48967d0170512..6d77925a60cb7 100644 --- a/xpallets/gateway/bitcoin/src/lib.rs +++ b/xpallets/gateway/bitcoin/src/lib.rs @@ -43,7 +43,7 @@ pub use light_bitcoin::primitives::h256_rev; pub use light_bitcoin::{ chain::BlockHeader as BtcHeader, keys::Network as BtcNetwork, - primitives::{Compact, H256, H264}, + primitives::{hash_rev, Compact, H256, H264}, }; use light_bitcoin::{ chain::Transaction, @@ -235,15 +235,15 @@ decl_storage! { config(genesis_hash): H256; config(genesis_trustees): Vec; build(|config| { - let genesis_header = config.genesis_info.0; - let genesis_hash = genesis_header.hash(); + let genesis_hash = config.genesis_hash; + let (genesis_header, genesis_height) = config.genesis_info; let genesis_index = BtcHeaderIndex { hash: genesis_hash, - height: config.genesis_info.1 + height: genesis_height, }; let header_info = BtcHeaderInfo { header: genesis_header, - height: config.genesis_info.1 + height: genesis_height, }; // would ignore check for bitcoin testnet #[cfg(not(test))] { @@ -254,14 +254,9 @@ decl_storage! { } } - if genesis_hash != config.genesis_hash { - panic!("the genesis block not much the genesis_hash!|genesis_block's hash:{:?}|config genesis_hash:{:?}", genesis_hash, config.genesis_hash); - } - Headers::insert(&genesis_hash, header_info); BlockHashFor::insert(&genesis_index.height, vec![genesis_hash]); MainChain::insert(&genesis_hash, true); - BestIndex::put(genesis_index); // init trustee (not this action should ha) diff --git a/xpallets/gateway/common/src/trustees/mod.rs b/xpallets/gateway/common/src/trustees/mod.rs index 6e0cc0969fc3a..b6c377f8ae782 100644 --- a/xpallets/gateway/common/src/trustees/mod.rs +++ b/xpallets/gateway/common/src/trustees/mod.rs @@ -2,12 +2,13 @@ pub mod bitcoin; +use sp_std::{convert::TryFrom, marker::PhantomData, prelude::*}; + use codec::{Decode, Encode, Error as CodecError}; #[cfg(feature = "std")] use serde::{Deserialize, Serialize}; -// Substrate -use frame_support::dispatch::DispatchError; -use sp_std::{convert::TryFrom, marker::PhantomData, prelude::*}; + +use frame_support::{dispatch::DispatchError, traits::Contains}; use xpallet_assets::Chain; use xpallet_support::{error, traits::MultiSig, warn}; @@ -15,7 +16,6 @@ use xpallet_support::{error, traits::MultiSig, warn}; use crate::traits::{BytesLike, ChainProvider, TrusteeSession}; use crate::types::{TrusteeIntentionProps, TrusteeSessionInfo}; use crate::{Error, Module, Trait}; -use frame_support::traits::Contains; pub struct TrusteeSessionManager( PhantomData,