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:
1 parent
db4c8a37d3
commit
4ee178fbd5
4 files changed
+20
-11
No files matched your search
@@ -16,7 +16,8 @@
|
|||||||
//! aserción de compilación fija la oferta en 1.000M OGC; mintear violaría esa
|
//! 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
|
//! 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
|
//! **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
|
//! 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
|
//! 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
|
//! 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.
|
//! stake). El reward por bloque aquí es el substrate sobre el que Stage 2 hereda.
|
||||||
//!
|
//!
|
||||||
//! **[`EmissionPaused`](pallet::EmissionPaused)** es la palanca de governance
|
//! **[`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
|
//! 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
|
//! 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
|
//! (un spec upgrade que swap-ea `SessionManager` a Staking + historical + añade
|
||||||
@@ -82,7 +84,7 @@ pub mod pallet {
|
|||||||
type FindAuthor: FindAuthor<Self::AccountId>;
|
type FindAuthor: FindAuthor<Self::AccountId>;
|
||||||
|
|
||||||
/// Recompensa por bloque en base units OGC (calibra el ritmo de
|
/// 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]
|
#[pallet::constant]
|
||||||
type BlockReward: Get<u128>;
|
type BlockReward: Get<u128>;
|
||||||
|
|
||||||
@@ -209,7 +211,7 @@ pub mod pallet {
|
|||||||
let pool = Self::ecosystem_account();
|
let pool = Self::ecosystem_account();
|
||||||
// TECHO DURO 1B: liberamos del pool FINITO, jamás minteamos.
|
// TECHO DURO 1B: liberamos del pool FINITO, jamás minteamos.
|
||||||
// Expendable = el pool puede vaciarse hasta 0 (es su destino en
|
// 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(
|
let available = T::Currency::reducible_balance(
|
||||||
&pool,
|
&pool,
|
||||||
Preservation::Expendable,
|
Preservation::Expendable,
|
||||||
@@ -548,7 +550,7 @@ mod tests {
|
|||||||
fn kill_switch_pausa_detiene_el_mint() {
|
fn kill_switch_pausa_detiene_el_mint() {
|
||||||
new_test_ext().execute_with(|| {
|
new_test_ext().execute_with(|| {
|
||||||
assert_ok!(Emission::set_emission_paused(RuntimeOrigin::root(), true));
|
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);
|
<Emission as Hooks<u64>>::on_initialize(1);
|
||||||
assert_eq!(Emission::total_emitted(), 0, "pausada: cero emisión");
|
assert_eq!(Emission::total_emitted(), 0, "pausada: cero emisión");
|
||||||
assert_eq!(<Balances as Inspect<_>>::balance(&author()), 0);
|
assert_eq!(<Balances as Inspect<_>>::balance(&author()), 0);
|
||||||
|
|||||||
@@ -12,8 +12,9 @@
|
|||||||
//!
|
//!
|
||||||
//! **Mainnet preset materializa empíricamente la BM V2**:
|
//! **Mainnet preset materializa empíricamente la BM V2**:
|
||||||
//!
|
//!
|
||||||
//! - **40% Ecosystem (400M OGC)** → distribución canonical 10-15 años via block rewards
|
//! - **40% Ecosystem (400M OGC)** → LIBERACIÓN finita ~7.6 años via block rewards
|
||||||
//! (Pi 5 validators + VPS seeds). Pre-mint TODO al Ecosystem account canonical.
|
//! (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).
|
//! - **25% Foundation Treasury (250M OGC)** → DAO governed canonical (CHN-4).
|
||||||
//! - **15% Public Sale (150M OGC)** → bootstrap capital + liquidity inicial.
|
//! - **15% Public Sale (150M OGC)** → bootstrap capital + liquidity inicial.
|
||||||
//! - **15% Founding Team (150M OGC)** → 4-year vesting cliff 12mo (vesting locks Phase 2+).
|
//! - **15% Founding Team (150M OGC)** → 4-year vesting cliff 12mo (vesting locks Phase 2+).
|
||||||
|
|||||||
@@ -405,9 +405,10 @@ mod runtime {
|
|||||||
#[runtime::pallet_index(12)]
|
#[runtime::pallet_index(12)]
|
||||||
pub type Sudo = pallet_sudo::Pallet<Runtime>;
|
pub type Sudo = pallet_sudo::Pallet<Runtime>;
|
||||||
|
|
||||||
/// Emission pallet (FIX-6 Stage 1 per audit V2-CA2). En cada bloque mintea un
|
/// Emission pallet (FIX-6 Stage 1 per audit V2-CA2). En cada bloque LIBERA un
|
||||||
/// block reward y lo reparte: autor Aura (validador) + treasury (og/gvtry) +
|
/// block reward del pool Ecosystem finito (og/ecosy, techo duro 1B) y lo
|
||||||
/// subsidy pool (og/subsy, proof-of-equity #16). Cierra "los validadores
|
/// 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
|
/// ganan 0 OGC". sub_mult ortogonal (David 2026-06-10): el subsidy financia
|
||||||
/// el subsidio de hardware sin importar la suscripción.
|
/// el subsidio de hardware sin importar la suscripción.
|
||||||
#[runtime::pallet_index(13)]
|
#[runtime::pallet_index(13)]
|
||||||
|
|||||||
@@ -7,7 +7,12 @@
|
|||||||
//! AOI deps).
|
//! AOI deps).
|
||||||
//!
|
//!
|
||||||
//! Whenever Mathi publishes a new tier in `arkhe-core`, this enum MUST be updated
|
//! 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).
|
/// Canonical hardware tier ladder — Mathi sovereign (mirror).
|
||||||
///
|
///
|
||||||
|
|||||||
Reference in new issue
Block a user