Created
September 12, 2019 22:21
-
-
Save illlefr4u/c18e348ef44354051cb8a74814da7ffc to your computer and use it in GitHub Desktop.
chain_spec for smart-contract module
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| use primitives::{ed25519, sr25519, Pair}; | |
| use contract_chain_runtime::{ | |
| AccountId, ContractConfig, GenesisConfig, ConsensusConfig, TimestampConfig, BalancesConfig, | |
| SudoConfig, IndicesConfig, | |
| }; | |
| use substrate_service; | |
| use ed25519::Public as AuthorityId; | |
| // Note this is the URL for the telemetry server | |
| //const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; | |
| /// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type. | |
| pub type ChainSpec = substrate_service::ChainSpec<GenesisConfig>; | |
| /// The chain specification option. This is expected to come in from the CLI and | |
| /// is little more than one of a number of alternatives which can easily be converted | |
| /// from a string (`--chain=...`) into a `ChainSpec`. | |
| #[derive(Clone, Debug)] | |
| pub enum Alternative { | |
| /// Whatever the current runtime is, with just Alice as an auth. | |
| Development, | |
| /// Whatever the current runtime is, with simple Alice/Bob auths. | |
| LocalTestnet, | |
| } | |
| fn authority_key(s: &str) -> AuthorityId { | |
| ed25519::Pair::from_string(&format!("//{}", s), None) | |
| .expect("static values are valid; qed") | |
| .public() | |
| } | |
| fn account_key(s: &str) -> AccountId { | |
| sr25519::Pair::from_string(&format!("//{}", s), None) | |
| .expect("static values are valid; qed") | |
| .public() | |
| } | |
| impl Alternative { | |
| /// Get an actual chain config from one of the alternatives. | |
| pub(crate) fn load(self) -> Result<ChainSpec, String> { | |
| Ok(match self { | |
| Alternative::Development => ChainSpec::from_genesis( | |
| "Development", | |
| "dev", | |
| || testnet_genesis(vec![ | |
| authority_key("Alice") | |
| ], vec![ | |
| account_key("Alice") | |
| ], | |
| account_key("Alice") | |
| ), | |
| vec![], | |
| None, | |
| None, | |
| None, | |
| None | |
| ), | |
| Alternative::LocalTestnet => ChainSpec::from_genesis( | |
| "Local Testnet", | |
| "local_testnet", | |
| || testnet_genesis(vec![ | |
| authority_key("Alice"), | |
| authority_key("Bob"), | |
| ], vec![ | |
| account_key("Alice"), | |
| account_key("Bob"), | |
| account_key("Charlie"), | |
| account_key("Dave"), | |
| account_key("Eve"), | |
| account_key("Ferdie"), | |
| ], | |
| account_key("Alice"), | |
| ), | |
| vec![], | |
| None, | |
| None, | |
| None, | |
| None | |
| ), | |
| }) | |
| } | |
| pub(crate) fn from(s: &str) -> Option<Self> { | |
| match s { | |
| "dev" => Some(Alternative::Development), | |
| "" | "local" => Some(Alternative::LocalTestnet), | |
| _ => None, | |
| } | |
| } | |
| } | |
| fn testnet_genesis(initial_authorities: Vec<AuthorityId>, endowed_accounts: Vec<AccountId>, root_key: AccountId) -> GenesisConfig { | |
| GenesisConfig { | |
| consensus: Some(ConsensusConfig { | |
| code: include_bytes!("../runtime/wasm/target/wasm32-unknown-unknown/release/contract_chain_runtime_wasm.compact.wasm").to_vec(), | |
| authorities: initial_authorities.clone(), | |
| }), | |
| system: None, | |
| timestamp: Some(TimestampConfig { | |
| minimum_period: 5, // 10 second block time. | |
| }), | |
| indices: Some(IndicesConfig { | |
| ids: endowed_accounts.clone(), | |
| }), | |
| balances: Some(BalancesConfig { | |
| transaction_base_fee: 1, | |
| transaction_byte_fee: 0, | |
| existential_deposit: 500, | |
| transfer_fee: 0, | |
| creation_fee: 0, | |
| balances: endowed_accounts.iter().cloned().map(|k|(k, 1 << 60)).collect(), | |
| vesting: vec![], | |
| }), | |
| sudo: Some(SudoConfig { | |
| key: root_key, | |
| }), | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment