diff --git a/crates/origin-chain-emission/src/lib.rs b/crates/origin-chain-emission/src/lib.rs index 0ebc2bd..286a192 100644 --- a/crates/origin-chain-emission/src/lib.rs +++ b/crates/origin-chain-emission/src/lib.rs @@ -16,7 +16,8 @@ //! aserción de compilación fija la oferta en 1.000M OGC; mintear violaría esa //! constitución matemática. Por eso las "recompensas" son en realidad una //! **liberación programada y finita**: el pool de 400M se agota matemáticamente -//! en ~10-15 años (10 OGC/bloque × ~5.256M bloques/año ≈ 52.6M/año), y a partir +//! en ~7.6 años (10 OGC/bloque × ~5.256M bloques/año ≈ 52.6M/año; `BlockReward` +//! es el dial que ajusta el horizonte), y a partir //! de ahí los validadores se sostienen puramente del reciclaje de la economía //! circular (fees, marketplace). El total issuance JAMÁS crece — el BM V2 se //! cumple a rajatabla. Cuando el pool no cubre el reward completo, se libera lo @@ -35,7 +36,8 @@ //! stake). El reward por bloque aquí es el substrate sobre el que Stage 2 hereda. //! //! **[`EmissionPaused`](pallet::EmissionPaused)** es la palanca de governance -//! (Root) que detiene este mint per-block. Sirve hoy como freno de inflación de +//! (Root) que detiene esta liberación per-block. Sirve hoy como freno de +//! emergencia de //! emergencia y, en la activación de NPoS (Stage 2b, FIX-6), es el kill-switch //! anti-doble-emisión: cuando `pallet_staking::EraPayout` empiece a pagar por-era //! (un spec upgrade que swap-ea `SessionManager` a Staking + historical + añade @@ -82,7 +84,7 @@ pub mod pallet { type FindAuthor: FindAuthor; /// Recompensa por bloque en base units OGC (calibra el ritmo de - /// liberación; el pool finito lo agota en ~10-15 años). + /// liberación; el pool finito lo agota en ~7.6 años). #[pallet::constant] type BlockReward: Get; @@ -209,7 +211,7 @@ pub mod pallet { let pool = Self::ecosystem_account(); // TECHO DURO 1B: liberamos del pool FINITO, jamás minteamos. // Expendable = el pool puede vaciarse hasta 0 (es su destino en - // ~10-15 años). Liberamos hasta lo que quede disponible. + // ~7.6 años). Liberamos hasta lo que quede disponible. let available = T::Currency::reducible_balance( &pool, Preservation::Expendable, @@ -548,7 +550,7 @@ mod tests { fn kill_switch_pausa_detiene_el_mint() { new_test_ext().execute_with(|| { assert_ok!(Emission::set_emission_paused(RuntimeOrigin::root(), true)); - // Pausada: on_initialize NO mintea nada. + // Pausada: on_initialize NO libera nada. >::on_initialize(1); assert_eq!(Emission::total_emitted(), 0, "pausada: cero emisión"); assert_eq!(>::balance(&author()), 0); diff --git a/crates/origin-chain-runtime/src/genesis_config_presets.rs b/crates/origin-chain-runtime/src/genesis_config_presets.rs index 0a39da0..3a5cf4a 100644 --- a/crates/origin-chain-runtime/src/genesis_config_presets.rs +++ b/crates/origin-chain-runtime/src/genesis_config_presets.rs @@ -12,8 +12,9 @@ //! //! **Mainnet preset materializa empíricamente la BM V2**: //! -//! - **40% Ecosystem (400M OGC)** → distribución canonical 10-15 años via block rewards -//! (Pi 5 validators + VPS seeds). Pre-mint TODO al Ecosystem account canonical. +//! - **40% Ecosystem (400M OGC)** → LIBERACIÓN finita ~7.6 años via block rewards +//! (transfer del pool og/ecosy, techo duro 1B; David 2026-07-03). Pre-asignado +//! TODO a la cuenta PalletId del Ecosystem (og/ecosy), sin llave humana. //! - **25% Foundation Treasury (250M OGC)** → DAO governed canonical (CHN-4). //! - **15% Public Sale (150M OGC)** → bootstrap capital + liquidity inicial. //! - **15% Founding Team (150M OGC)** → 4-year vesting cliff 12mo (vesting locks Phase 2+). diff --git a/crates/origin-chain-runtime/src/lib.rs b/crates/origin-chain-runtime/src/lib.rs index e4ca5d2..48345cd 100644 --- a/crates/origin-chain-runtime/src/lib.rs +++ b/crates/origin-chain-runtime/src/lib.rs @@ -405,9 +405,10 @@ mod runtime { #[runtime::pallet_index(12)] pub type Sudo = pallet_sudo::Pallet; - /// Emission pallet (FIX-6 Stage 1 per audit V2-CA2). En cada bloque mintea un - /// block reward y lo reparte: autor Aura (validador) + treasury (og/gvtry) + - /// subsidy pool (og/subsy, proof-of-equity #16). Cierra "los validadores + /// Emission pallet (FIX-6 Stage 1 per audit V2-CA2). En cada bloque LIBERA un + /// block reward del pool Ecosystem finito (og/ecosy, techo duro 1B) y lo + /// reparte: autor Aura (validador) + treasury (og/gvtry) + subsidy pool + /// (og/subsy, proof-of-equity #16). Cierra "los validadores /// ganan 0 OGC". sub_mult ortogonal (David 2026-06-10): el subsidy financia /// el subsidio de hardware sin importar la suscripción. #[runtime::pallet_index(13)] diff --git a/crates/origin-chain-types/src/tiers.rs b/crates/origin-chain-types/src/tiers.rs index 265eb72..c4411b3 100644 --- a/crates/origin-chain-types/src/tiers.rs +++ b/crates/origin-chain-types/src/tiers.rs @@ -7,7 +7,12 @@ //! AOI deps). //! //! Whenever Mathi publishes a new tier in `arkhe-core`, this enum MUST be updated -//! in lockstep (regression test in `origin-coin-tokenomics` will fail until then). +//! in lockstep. Honesty (audit 2026-07-04): there is NO automated cross-crate +//! guard — by design the chain does not depend on `arkhe-core` (avoids render/AOI +//! deps), so nothing can compile-compare the two ladders. The sync is a MANUAL +//! discipline. The `#[test]`s in this module pin the *current* ladder (rank, +//! ordinal, SCALE discriminants, #16 multipliers), so accidental local edits are +//! caught; drift from a new `arkhe-core` tier is not — keep them in lockstep by hand. /// Canonical hardware tier ladder — Mathi sovereign (mirror). ///