From f3de48b1b8854930e5c9da6733fb9d629096c462 Mon Sep 17 00:00:00 2001 From: DavidHerran Date: Sat, 4 Jul 2026 15:00:22 -0500 Subject: [PATCH] =?UTF-8?q?test(genesis):=20ata=20el=20pool=20og/ecosy=20(?= =?UTF-8?q?400M)=20a=20la=20cuenta=20que=20libera=20la=20emisi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Invariante de cableado del techo duro (audit ultra 2026-07-04): la cuenta que el génesis fondea con ECOSYSTEM_ALLOCATION DEBE ser exactamente la que pallet-origin-emission transfiere (EmissionEcosystemPalletId → og/ecosy). Si divergieran, el pool de la emisión estaría vacío y los validadores nunca cobrarían. El test ata génesis ←→ runtime Config. Workspace 280 verde. Co-Authored-By: Claude Fable 5 --- .../src/genesis_config_presets.rs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/crates/origin-chain-runtime/src/genesis_config_presets.rs b/crates/origin-chain-runtime/src/genesis_config_presets.rs index 3a5cf4a..85b1156 100644 --- a/crates/origin-chain-runtime/src/genesis_config_presets.rs +++ b/crates/origin-chain-runtime/src/genesis_config_presets.rs @@ -547,4 +547,28 @@ mod tests { assert_eq!(vault_allocation + SUDO_OPERATIONAL_FLOAT, FOUNDATION_ALLOCATION); assert!(vault_allocation > SUDO_OPERATIONAL_FLOAT, "el grueso va al vault"); } + + #[test] + fn mainnet_pool_ecosystem_400m_es_la_cuenta_de_la_que_libera_la_emision() { + // TECHO DURO — invariante de cableado CRÍTICO (audit ultra 2026-07-04): la + // cuenta que el génesis fondea con los 400M DEBE ser EXACTAMENTE la que + // `pallet-origin-emission` transfiere (og/ecosy). Si divergieran, el pool + // de la emisión estaría vacío y los validadores NUNCA cobrarían (o, peor, + // la emisión no tendría fuente y el techo duro sería vacuo). Este test + // ata las dos puntas: génesis ←→ runtime emission Config. + let emission_source: ChainAccountId = + EmissionEcosystemPalletId::get().into_account_truncating(); + let cfg = mainnet_genesis_config_genesis(); + let funded = cfg + .balances + .balances + .iter() + .find(|(acc, _)| *acc == emission_source) + .map(|(_, bal)| *bal) + .expect("la cuenta de la que libera la emisión DEBE estar fondeada en génesis"); + assert_eq!( + funded, ECOSYSTEM_ALLOCATION, + "el pool og/ecosy debe tener exactamente los 400M que la emisión libera" + ); + } }