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:
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!(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"
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user