docs(consistency): comentarios stale post-RV7 + guard ficticio de tiers (audit ultra LOW)

Audit ultra 2026-07-04 (dimensión consistency-crosscheck):
- Reconciliada la contradicción del horizonte de agotamiento del pool: docs decían
  ~10-15 años (marco viejo de tasa variable) Y ~7.6 años (la matemática real de
  10 OGC/bloque). Todo a ~7.6 años + nota de que BlockReward es el dial.
- Fijados comentarios "mintea"/"inflación" que contradecían el techo duro RV7
  (la emisión LIBERA del pool, no acuña): runtime lib.rs:408, emission doc, genesis.
- tiers.rs: el comentario prometía un "regression test en origin-coin-tokenomics"
  que NO existe (ese crate es stub) — corregido a la verdad: la sincronía con
  arkhe-core es disciplina MANUAL (la cadena no depende de arkhe-core por diseño);
  los #[test] locales pinnean la escalera actual pero no cazan drift cross-crate.

Workspace 279 tests verde. Solo comentarios — cero cambio de comportamiento.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
davidherranandClaude Fable 5 committed 2026-07-04 14:58:29 -05:00
1 parent db4c8a37d3
commit 4ee178fbd5
4 files changed
+20 -11

No files matched your search

+7 -5
View File
@@ -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<Self::AccountId>;
/// 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<u128>;
@@ -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.
<Emission as Hooks<u64>>::on_initialize(1);
assert_eq!(Emission::total_emitted(), 0, "pausada: cero emisión");
assert_eq!(<Balances as Inspect<_>>::balance(&author()), 0);
@@ -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+).
+4 -3
View File
@@ -405,9 +405,10 @@ mod runtime {
#[runtime::pallet_index(12)]
pub type Sudo = pallet_sudo::Pallet<Runtime>;
/// 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)]
+6 -1
View File
@@ -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).
///