test(genesis): ata el pool og/ecosy (400M) a la cuenta que libera la emisión

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 <noreply@anthropic.com>
This commit is contained in:
davidherranandClaude Fable 5 committed 2026-07-04 15:00:22 -05:00
1 parent 4ee178fbd5
commit f3de48b1b8
1 file changed
+24
@@ -547,4 +547,28 @@ mod tests {
assert_eq!(vault_allocation + SUDO_OPERATIONAL_FLOAT, FOUNDATION_ALLOCATION); assert_eq!(vault_allocation + SUDO_OPERATIONAL_FLOAT, FOUNDATION_ALLOCATION);
assert!(vault_allocation > SUDO_OPERATIONAL_FLOAT, "el grueso va al vault"); 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"
);
}
} }