Files
arkhe-origin-chain/crates/origin-chain-runtime
CharonandClaude Opus 5.5 11e532e251 fix(runtime): frame_system no sabía su propia versión — ningún wallet podía firmar
Medido en el E2E de RV16 por el canal de un wallet: Alice firmando como polkadot.js
(versión de state_getRuntimeVersion, hash del génesis, era inmortal) recibía del nodo vivo
«Transaction has a bad signature».

Causa: SolochainDefaultConfig trae type Version = (), es decir RuntimeVersion::default()
(nombre vacío, spec 0, tx 0), y el impl de frame_system lo heredaba sin declararlo — el mismo
agujero que DbWeight en RV14. El RPC anunciaba spec 16 / tx 1; CheckSpecVersion y
CheckTxVersion reconstruían el payload con 0 / 0. Rompía tres cosas:
1. Ningún wallet podía firmar un extrinsic (BadProof).
2. set_code habría fallado con InvalidSpecName («origin-chain» contra «»): sin upgrades.
3. Las migraciones no corrían nunca: Executive::runtime_upgraded compara 0 contra 0.

Nadie lo vio en 16 specs porque ningún test firmaba por el canal del consumidor: los del
pallet llaman a las funciones directamente, y los E2E anteriores solo miraban bloques.

Arreglo: type Version = Version, con Version = crate::VERSION.

Tests (contrafactual: sin la línea, los dos reprueban en la ASERCIÓN — spec_name "" y BadProof):
- frame_system_conoce_la_version_que_anuncia_el_rpc
- una_firma_de_wallet_estandar_pasa_el_check_del_runtime: firma como un wallet sobre el
  estado del preset development y pasa por el check real de la firma.

E2E después del arreglo, nodo --dev con WASM real: dos extrinsics firmados por //Alice entran
por author_submitExtrinsic, se incluyen en el bloque #3 (finalizado) y fallan con los errores
que tocaban: finalize_override → ProposalNotFound, uphold_council_veto de peso 0 →
ZeroWeightWindowVote. La metadata viva trae las llamadas, el storage, MinOverrideQuorum = 1e26
(100M OGC) y los errores nuevos.

Tests: runtime 46, workspace 350.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 10:30:38 -05:00
..