Files
arkhe-origin-chain/crates/origin-chain-runtime/src/opaque.rs
T
davidherranandClaude Opus 4.7 199636ac05 feat(slice-2e): v0.0.36 Slice 2e FULLY RESUELTO — Real WASM_BINARY 1.8 MB shipped (5 layers resolved end-to-end)
Slice 2e WASM structural blocker FULLY RESUELTO end-to-end. Real
origin_chain_runtime.wasm (1,795,946 bytes ~1.8 MB) shipped post-brew LLVM
install + 5 layers de blockers resolved. PHASE 3 + PHASE 4 Testnet Q3 2026
UNBLOCKED.

5-layer resolution:
- Layer 1 alloc/exchange_malloc → WASM_BUILD_STD=0
- Layer 2a getrandom 0.2 wasm → custom feature
- Layer 2b getrandom 0.3 backends → wasm_js feature
- Layer 3 secp256k1-sys clang wasm32 → brew LLVM + CC env vars
- Layer 4 sp-io std leak → default-features=false en path deps
- Layer 5 Vec no_std impl_opaque_keys → alloc::vec::Vec import

Changes:
- Cargo.toml workspace: path deps default-features=false + getrandom_02 + getrandom_03
- runtime/Cargo.toml: substrate-wasm-builder feature-gated + getrandom deps
- runtime/src/opaque.rs: extern crate alloc + use Vec import

Verification:
- WASM_BUILD_STD=0 + brew LLVM env vars + cargo build --features wasm-build → 3.36s clean
- origin_chain_runtime.wasm 1.8 MB shipped
- cargo test --workspace — 202 tests verde 0 failures NO regression

🎉 Slice 2e FULLY RESUELTO. La nave Origin Chain zarpando hacia Phase 3 + 4.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 18:28:38 -05:00

39 lines
1.6 KiB
Rust

//! # Opaque types canonical — pre-genesis identification para node binary
//!
//! `opaque` types canonical son aquellos que el **node** consume sin necesidad
//! de saber detalles del runtime composition. Pattern canonical Substrate: el
//! node binary identifica session keys + block headers sin importar qué pallets
//! exact se composen runtime-side.
//!
//! Esto permite **forkless runtime upgrades canonical**: el node ejecuta WASM
//! runtime mientras los opaque types canonical permanecen wire-compatible.
//!
//! ## Filosofía canonical
//!
//! David canon 2026-05-14 *"la libertad infinita acota solo donde empieza la
//! del otro"* — el opaque types son la frontera canonical entre node sovereignty
//! (puede correr cualquier runtime WASM compatible) + runtime sovereignty (puede
//! evolucionar pallets sin breakar node binaries).
use sp_runtime::impl_opaque_keys;
// Slice 2e Layer 5 fix: import Vec for no_std impl_opaque_keys macro expansion.
extern crate alloc;
use alloc::vec::Vec;
impl_opaque_keys! {
/// Canonical session keys para Origin Chain validators canonical.
///
/// Cada validator canonical posee:
/// - **`aura`**: `AuraId` (sr25519) para slot signing canonical block production
/// - **`grandpa`**: `GrandpaId` (Ed25519) para finality voting canonical
///
/// Estos keys canonical se rotan periódicamente per Phase 1.5 `pallet_session`
/// canonical (4-hour epochs per CHN-1). Pre-Phase 1.5 = static keys canonical
/// definidos en genesis chain_spec.
pub struct SessionKeys {
pub aura: crate::Aura,
pub grandpa: crate::Grandpa,
}
}