//! # origin-chain-node CLI canonical //! //! Phase 1.6+ Slice 1 (v0.0.10): **CLI skeleton + genesis preset listing canonical**. //! //! ## Sub-comandos canonical disponibles //! //! ```text //! origin-chain-node # default: version canonical //! origin-chain-node version # print runtime version canonical //! origin-chain-node list-presets # enumera 3 genesis presets canonical //! origin-chain-node print-preset # JSON-serialized RuntimeGenesisConfig //! origin-chain-node info # full runtime metadata canonical //! ``` //! //! ## Roadmap canonical Phase 1.6+ (multi-slice canonical) //! //! - **Slice 1** (v0.0.10 ESTA): CLI skeleton + preset listing canonical //! - **Slice 2** (v0.0.11): `origin-chain-types` fully no_std refactor canonical → //! `WASM_BINARY` canonical via `substrate-wasm-builder` //! - **Slice 3** (v0.0.12): real `sc_service::ChainSpec` builder canonical //! consuming GenesisBuilder API canonical //! - **Slice 4** (v0.0.13+): full `sc-service` builder canonical //! (consensus + JSON-RPC + networking + telemetry) //! //! ## Filosofía canonical //! //! Esta CLI canonical es la **primera ventana del barquero al mundo**: cualquier //! humano o AGI puede ejecutarla canonical y ver qué configuraciones canonical //! ofrece Origin Chain — sin necesidad de leer source code canonical. El //! `list-presets` canonical es transparency canonical: las 3 distribuciones //! posibles canonical están a la vista canonical, BM V2 incluida canonical. use clap::{Parser, Subcommand}; use origin_chain_runtime::{ genesis_config_presets, IMPL_NAME, RUNTIME_VERSION, SPEC_NAME, }; use sp_genesis_builder::PresetId; /// Canonical CLI structure para `origin-chain-node` binary canonical. #[derive(Debug, Parser)] #[command( name = "origin-chain-node", author = "Charon ⚓ ", about = "Origin Chain canonical node — Pilar 4 Origin Metaverse", long_about = "Substrate-based blockchain canonical para Origin Metaverse: \ consensus Aura+GRANDPA PoA (CHN-1), OGC tokenomics 1B genesis \ canonical (CHN-2), provenance ledger BLAKE3+Ed25519 (CHN-7), \ fee economy multi-tier (CHN-8), Foundation governance DAO (CHN-4)." )] struct Cli { #[command(subcommand)] command: Option, } /// Sub-comandos canonical. #[derive(Debug, Subcommand)] enum Command { /// Print runtime version canonical (default si no subcommand). Version, /// Lista los 3 genesis presets canonical disponibles canonical. ListPresets, /// Prints JSON-serialized RuntimeGenesisConfig canonical para un preset id. PrintPreset { /// Preset id canonical: `development` | `local_testnet` | `mainnet_genesis` id: String, }, /// Show full runtime metadata canonical (pallets + APIs + presets count). Info, } fn main() { let cli = Cli::parse(); match cli.command { Some(Command::Version) | None => print_version(), Some(Command::ListPresets) => print_presets(), Some(Command::PrintPreset { id }) => print_preset(&id), Some(Command::Info) => print_info(), } } fn print_version() { println!( "{} v{} — {} canonical", IMPL_NAME, env!("CARGO_PKG_VERSION"), SPEC_NAME ); println!("Runtime version canonical: {}", RUNTIME_VERSION); println!(); println!("⚓ Origin Chain Pilar 4 canonical — Charon"); println!("\"Todo valor pide un puente; toda identidad pide un testigo.\""); } fn print_presets() { println!("📋 Genesis presets canonical disponibles:\n"); for preset_id in genesis_config_presets::preset_names() { let id_str: &str = preset_id.as_ref(); let description = match id_str { genesis_config_presets::PRESET_DEVELOPMENT => { "Dev mode canonical (Alice validator + 100M OGC)" } genesis_config_presets::PRESET_LOCAL_TESTNET => { "Multi-node local testing (Alice+Bob + 5 dev × 100M OGC)" } genesis_config_presets::PRESET_MAINNET_GENESIS => { "Mainnet canonical BM V2 (5 Pi 5 + 1B OGC 40/25/15/15/5)" } _ => "Unknown preset canonical", }; println!(" • {:<20} — {}", id_str, description); } println!(); println!("Use: origin-chain-node print-preset "); } fn print_preset(id: &str) { let preset_id = PresetId::from(id); match genesis_config_presets::get_preset(&preset_id) { Some(json_bytes) => { let parsed: serde_json::Value = serde_json::from_slice(&json_bytes).expect("preset JSON canonical infallible"); let pretty = serde_json::to_string_pretty(&parsed).expect("pretty-print canonical infallible"); println!("{}", pretty); } None => { eprintln!("❌ Unknown preset canonical: '{}'", id); eprintln!(); eprintln!("Available canonical presets:"); for preset in genesis_config_presets::preset_names() { let s: &str = preset.as_ref(); eprintln!(" • {}", s); } std::process::exit(1); } } } fn print_info() { println!("⚓ Origin Chain Runtime Info canonical\n"); println!("Spec name: {}", SPEC_NAME); println!("Impl name: {}", IMPL_NAME); println!("Runtime version: {}", RUNTIME_VERSION); println!(); println!("Pallets canonical (7):"); println!(" • Index 0 System (frame_system foundational)"); println!(" • Index 1 Timestamp (pallet_timestamp block clock → Aura)"); println!(" • Index 2 Balances (pallet_balances OGC token CHN-2)"); println!(" • Index 3 TransactionPayment (pallet_transaction_payment CHN-8 baseline)"); println!(" • Index 4 Aura (pallet_aura PoA block production CHN-1)"); println!(" • Index 5 Grandpa (pallet_grandpa finality gadget CHN-1)"); println!(" • Index 6 Session (pallet_session 4h epoch rotation CHN-1)"); println!(); println!("Runtime APIs canonical (11):"); println!(" • sp_api::Core (version + execute_block)"); println!(" • sp_api::Metadata (runtime metadata)"); println!(" • sp_block_builder::BlockBuilder (block production)"); println!(" • sp_transaction_pool::TaggedTransactionQueue (tx validation)"); println!(" • sp_offchain::OffchainWorkerApi (offchain processing)"); println!(" • sp_session::SessionKeys (session keys generation)"); println!(" • sp_consensus_aura::AuraApi (slot duration + authorities)"); println!(" • sp_consensus_grandpa::GrandpaApi (finality set + authorities)"); println!(" • frame_system_rpc_runtime_api::AccountNonceApi (RPC nonce queries)"); println!(" • pallet_transaction_payment_rpc::* (RPC fee queries)"); println!(" • sp_genesis_builder::GenesisBuilder (chain spec build)"); println!(); println!("Genesis presets canonical (3):"); println!(" • development (Alice + 100M OGC dev)"); println!(" • local_testnet (Alice+Bob + 5 dev × 100M OGC)"); println!(" • mainnet_genesis (5 Pi 5 + BM V2 1B OGC 40/25/15/15/5)"); println!(); println!("⚓ \"Todo valor pide un puente; toda identidad pide un testigo.\""); println!(" — Charon ⚓, Pilar 4 Origin Chain canonical"); }