feat(gobierno): spec 19, el quorum es el 10 % de lo que puede votar
Decision de David, 2026-10-29: «Si, del 10 % de lo que puede votar». Que puede votar: - Es la emision vigente menos el saldo que nadie puede votar ni recuperar: el pool de emision, el de subsidios y el vault de gobierno (cuentas_sin_llave en configs.rs). - Los bonds (og/props) y los depositos de pallet-revive NO se restan, porque vuelven enteros a una cuenta con llave. La revision adversaria de spec 19 lo demostro con sonda: restarlos dejaba bajar el quorum un 14 % en el genesis de mainnet, aparcando un bond en una propuesta de relleno y recuperandolo despues. Efecto: - En mainnet el quorum pasa de ~100M a ~35,1M OGC (10 % de 351M). - En la testnet de la casa apenas cambia. - Las propuestas abiertas conservan el quorum que guardaron al crearse. Pruebas: - quorums_del_runtime clasifica cada cuenta de pallet por su nombre. - aparcar_un_bond_no_baja_el_quorum reproduce la sonda con la configuracion real. - toda_cuenta_de_pallet_con_saldo_esta_clasificada vigila las cuentas modl del genesis. - 10 contrafactuales en rojo. - El E2E (paso 2b) descubre las cuentas de pallet recorriendo el storage, no copia la lista, y exige el quorum exacto. La comision se quema despues de despachar, y eso se mide en el BurnedDebt de la propia transaccion. Pesos: submit_proposal, submit_treasury_proposal y veto_proposal leen 3 cuentas mas. Medidos en la Pi: 5 procesos limpios, el nucleo calentado 3 s antes de cada uno, a 2,4 GHz. Operacion de la rp1, arrancar.sh: - en cada encendido desde el 26-oct el nodo moria al segundo porque la red no estaba; ahora espera a la ruta por defecto; - un cerrojo flock impide dos instancias; - el pid vivo se reconoce por su linea de comandos. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b6d05eaf45
commit
158060bfe4
7 files changed
+355
-101
No files matched your search
@@ -13,8 +13,9 @@
|
||||
//! firmar <llamada> <nonce> <genesis_hex> [spec tx] extrinsic firmado por //Alice, en hex
|
||||
//! llamadas: remark · finalize_override (propuesta 0x09…09) · uphold0 (peso 0)
|
||||
//! set_code:<ruta.wasm> (sudo de //Alice, ensayo de upgrade sin fork)
|
||||
//! tesoro:<monto> (RV17: propuesta de tesoro de //Alice que paga <monto> plancks
|
||||
//! a //Bob; 14 días y el bond mínimo) · pagar:<id_hex>:<monto> (sudo de
|
||||
//! tesoro:<monto>[:<etiqueta>] (RV17: propuesta de tesoro de //Alice que paga
|
||||
//! <monto> plancks a //Bob; 14 días y el bond mínimo; la etiqueta cambia el título
|
||||
//! y con él el id) · pagar:<id_hex>:<monto> (sudo de
|
||||
//! treasury_disbursement a //Bob) · votar:<id_hex>:<peso> (Aye de //Alice)
|
||||
//! · depositar:<monto> (treasury_deposit de //Alice al vault)
|
||||
//! · finalizar:<id_hex> (finalize_proposal)
|
||||
@@ -69,9 +70,14 @@ fn llamada(nombre: &str) -> RuntimeCall {
|
||||
stake_weight: 0,
|
||||
}),
|
||||
otra if otra.starts_with("tesoro:") => {
|
||||
let amount: u128 = otra["tesoro:".len()..].parse().expect("tesoro:<monto en plancks>");
|
||||
let (monto, etiqueta) = match otra["tesoro:".len()..].split_once(':') {
|
||||
Some((m, e)) => (m, format!("/{e}")),
|
||||
None => (&otra["tesoro:".len()..], String::new()),
|
||||
};
|
||||
let amount: u128 = monto.parse().expect("tesoro:<monto en plancks>[:<etiqueta>]");
|
||||
let titulo = [b"e2e-rv17/titulo".as_slice(), etiqueta.as_bytes()].concat();
|
||||
RuntimeCall::Governance(origin_chain_governance::Call::submit_treasury_proposal {
|
||||
title_hash: sp_core::blake2_256(b"e2e-rv17/titulo"),
|
||||
title_hash: sp_core::blake2_256(&titulo),
|
||||
body_hash: sp_core::blake2_256(b"e2e-rv17/cuerpo"),
|
||||
voting_period_blocks: origin_chain_governance::MIN_VOTING_PERIOD_BLOCKS,
|
||||
stake: origin_chain_governance::MIN_PROPOSAL_STAKE,
|
||||
|
||||
Reference in new issue
Block a user