feat(npos): FIX-6 Stage 2b Paso A — pallet_staking Config cableado (infra dormida)

Materializa la infra NPoS DORMIDA del DC ORIGIN_CHAIN_NPOS_V1 (decisiones de
fundador ratificadas). pallet_staking 43.0.0 wired como Index 14: los 31
associated types cableados contra el tren stable2509-3 (mapeo quirúrgico
audit-before-claims; compiló en 2 iteraciones).

Piezas (crates/origin-chain-runtime/src/staking.rs, nuevo):
- OriginEraPayout: emisión por-era LINEAL que preserva EXACTAMENTE la tasa de
  FIX-6 Stage 1 (BlockReward 10 OGC/bloque, 70% validadores / 30% rest). NO la
  curva ideal-staking-rate de Polkadot (ignora total_staked/issuance a propósito).
- DealWithEraRemainder (RewardRemainder): reparte el rest 2/3 treasury (og/gvtry)
  + 1/3 subsidy (og/subsy) = 20%/10% del total. CRÍTICO #16: mantiene og/subsy
  alimentado bajo NPoS (sin él, el OriginFeeAdapter de Stage 2a degradaría a
  pool_covered=0 y el usuario pagaría el 100%).
- OnChainExecution<OnChainSeqPhragmen> como (Genesis)ElectionProvider (dormido:
  ForceNone no dispara elección). VoterList=UseNominatorsAndValidatorsMap +
  TargetList=UseValidatorsMap (Scores distintos, evitan bags-list + sus asserts).
- Params ratificados: MaxValidatorSet=150 (NPoS-6) · SessionsPerEra=6 (era 24h) ·
  BondingDuration=7 eras=7d (NPoS-8) · SlashDeferDuration=0 (sin slashes dormido).
- fungible::hold (NPoS-10): Currency/OldCurrency=Balances; el RuntimeHoldReason
  agregado del macro absorbe HoldReason::Staking automáticamente.

Estado: staking PRESENTE pero INERTE — SessionInterface/NextNewSession=() (no
avanza eras), genesis force_era=ForceNone sin stakers (PoA-equivalente, cero
regresión). El emission pallet Index 13 sigue siendo la fuente de emisión. NO
hay doble-emisión (staking no emite mientras no avance eras).

Pendiente (sesión fresca, encienden NPoS de verdad → verificación adversarial):
Paso B genesis poblado (invulnerables+stakers, asserts-trampa) · Paso C
SessionManager=Staking + historical (enciende EraPayout) · Paso D emission
on_initialize off (kill-switch anti-doble-emisión) · Paso E tests E2E.

spec_version 2→3 (nuevo pallet ⇒ metadata; TRANSACTION_VERSION=1 intacto).
21 suites workspace verde. cargo +1.88. WASM VPS-gated (UnknownOpcode 252).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
davidherranandClaude Fable 5 committed 2026-06-12 09:37:01 -05:00
1 parent 440135293e
commit 1f0122beda
5 files changed
+313 -9

No files matched your search

+7 -3
View File
@@ -44,9 +44,10 @@ pallet-session.workspace = true
# (Root origin para dispatchables admin — sunset → governance real pre-mainnet)
pallet-sudo.workspace = true
# FIX-6 Stage 2b NPoS (DC ORIGIN_CHAIN_NPOS_V1) — deps en workspace catalog
# (versiones verificadas contra stable2509-3). Se wirean aquí + std cuando se
# cablee el Config de pallet_staking (sesión dedicada, cambio de consenso).
# FIX-6 Stage 2b NPoS (DC ORIGIN_CHAIN_NPOS_V1) — infra dormida.
pallet-staking.workspace = true
frame-election-provider-support.workspace = true
sp-staking.workspace = true
# Charon custom pallets Phase 2.x (per DCs)
# Phase 2.1 v0.0.15: pallet-origin-provenance scaffold canonical wired
@@ -135,6 +136,9 @@ std = [
"pallet-grandpa/std",
"pallet-session/std",
"pallet-sudo/std",
"pallet-staking/std",
"frame-election-provider-support/std",
"sp-staking/std",
"origin-chain-provenance/std",
"origin-chain-fees/std",
"origin-chain-agent-identity/std",