# Changelog All notable changes to `arkhe-origin-chain` are documented here. Format inspired by [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [0.0.20] β€” 2026-05-24 β€” Phase 2.4 scaffold β€” pallet-origin-fees trait-first foundation (OCAFB-1..6) **πŸš€ Phase 2.4 FEES pallet SCAFFOLD trait-first foundation** β€” Vendor copy Mathi `OitFeeSchedule` trait + matrices + Mock canonical desde commit `ce4fafb` (2026-05-24 `arkhe-amis-server/src/fee_schedule.rs` 536 LOC). Cross-pillar economy AMIS↔Origin Chain pallet scaffold canonical pattern anΓ‘logo Phase 2.1 (scaffold v0.0.20 β†’ wired v0.0.21 β†’ impl v0.0.22 β†’ Runtime API v0.0.23). ### Deliverables v0.0.20 **New crate canonical `origin-chain-fees`**: - `crates/origin-chain-fees/Cargo.toml` (NEW): mirror provenance pallet pattern - `crates/origin-chain-fees/src/lib.rs` (NEW, ~250 LOC): pallet scaffold canonical - `crates/origin-chain-fees/src/fee_schedule.rs` (NEW, ~400 LOC): vendor copy Mathi OCAFB-1..6 adapted para consume `origin-chain-types` canonical (ChainAction + HardwareTier + SubscriptionTier) **New canonical types en `origin-chain-types`**: - `crates/origin-chain-types/src/actions.rs` (NEW, ~130 LOC): `ChainAction` enum source-of-truth canonical per OCAFB-2 (4 variants Read/Write/Compute/Transfer con ordinals 0/1/2/3 stable wire format + name() + from_ordinal()) - `crates/origin-chain-types/src/tiers.rs` (EXTENDED): `SubscriptionTier` enum mirror Mathi (Free/Pro/Ultra + `multiplier_basis_points()` const fn) - `crates/origin-chain-types/src/lib.rs`: `pub mod actions;` + `pub use ChainAction` + `pub use SubscriptionTier` **Workspace canonical**: - `Cargo.toml`: `crates/origin-chain-fees` aΓ±adido a members (post-provenance, pre-bridges) **Pallet scaffold surface canonical**: - `Pallet` struct + `Config` trait (RuntimeEvent canonical) - `AccountFees>` per-account history canonical - `FeeHistory { total_paid, action_count }` aggregate stats canonical - `Event::FeeCharged` + `FeeRefunded` + `EntitlementBlocked` canonical - `Error::InsufficientBalance` + `EntitlementLocked` + `FeeOverflow` + `AccountNotFound` - `FeeRejectionReason` enum canonical (mirror Phase 2.1 PROV pattern) - Scaffold dispatchable `compute_fee_for_action(origin, action, base)` (placeholder event emission β€” real impl v0.0.22) **Vendor copy OitFeeSchedule canonical** (Mathi commit `ce4fafb`): - `OitFeeSchedule` trait 4-method dyn-compatible (Send + Sync) per OCAFB-1 - `subsidy_basis_points(hw, action) -> u32` const fn matrix per OCAFB-3 Inmutable #16 anti-clasista (Pi 5 EmbeddedArm Write subsidy 9000 vs Ultra 0) - `entitlement_unlocked(tier, action) -> bool` const fn matrix per OCAFB-4 Inmutable #37 + #18 (Free + Compute β†’ blocked, Ultra β†’ all unlocked) - `compute_fee(base, hw, sub, action) -> u64` formula per OCAFB-5 (3-step: full subsidy β†’ 0, blocked β†’ u64::MAX, basis points math) - `OitFeeScheduleMock` builder pattern per OCAFB-6 (.with_subscription() + .with_hardware() + .with_educational_world()) - `arc_mock()` helper canonical para `Arc` cross-thread ### OCAFB sub-decisions status post-v0.0.20 | OCAFB | Sub-decision | Status | |-------|--------------|--------| | OCAFB-1 | OitFeeSchedule trait 4-method dyn-compatible | βœ… vendor copy canonical | | OCAFB-2 | ChainAction taxonomy 4 variants source-of-truth en types | βœ… **NUEVO canonical en `origin-chain-types::actions`** | | OCAFB-3 | Subsidy matrix Inmutable #16 anti-clasista | βœ… vendor copy canonical | | OCAFB-4 | Entitlement matrix Inmutable #37 + #18 | βœ… vendor copy canonical | | OCAFB-5 | compute_fee formula 3-step | βœ… vendor copy canonical | | OCAFB-6 | OitFeeScheduleMock test harness | βœ… vendor copy canonical | | **OCAFB-7** | Pallet-origin-fees consumer Charon | 🚧 **scaffold v0.0.20 β†’ impl v0.0.22 + Runtime API v0.0.23** | ### Verification end-to-end canonical - βœ… `cargo build -p origin-chain-fees` 1.83s clean - βœ… `cargo test -p origin-chain-fees` β€” **20 tests verde, 0 failures**: - 16 vendor copy tests (3 subsidy matrix + 2 entitlement + 5 compute_fee + 3 mock builder + 3 lobo blanco invariants) - 4 pallet scaffold tests (compiles + rejection_reason + fee_history_default + vendor re-export) - βœ… `cargo test -p origin-chain-types` β€” **55 tests passing (+8 nuevos)**: - 6 ChainAction (name + ordinal + roundtrip + unknown + serde + scale) - 2 SubscriptionTier (multipliers + ordering) - βœ… Zero new compile errors workspace-wide ### Cross-pillar consumers status post v0.0.20 - βœ… Mathi `OitFeeSchedule` consumed via vendor copy canonical (Charon Phase 2.4 consumer side scaffold ready) - βœ… Mathi local `ChainAction` mirror puede swap a `origin_chain_types::ChainAction` post-OCAFB ratify 7/7 (mi enum es source-of-truth canonical ahora) - 🟒 Phase 2.4 v0.0.21+ wire pattern ready (Index 8 runtime composition canonical) ### Roadmap canonical post-v0.0.20 | Version | Trigger | |---------|---------| | **v0.0.21** | **Wire `Fees` pallet runtime composition Index 8 + RuntimeEvent canonical (sesiΓ³n 3+ shipping ahora)** | | v0.0.22 | Real `compute_fee_for_action` impl + storage assertions + mock runtime integration tests E2E (pattern v0.0.18 mirror) | | v0.0.23 | Runtime API canonical `FeesApi.query_fee_for_action` read-only RPC β†’ **Phase 2.4 COMPLETE 7/7 OCAFB** | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | ### FilosofΓ­a canonical sesiΓ³n 3+ aplicada David canon ratificado 2026-05-14: "*La libertad econΓ³mica del Pi 5 user en Sub-Saharan Africa NO se acota por el Ultra user en San Francisco*". Materializada compile-detect canonical via lobo blanco invariant `inmutable_16_embedded_arm_pays_less_than_ultra_lobo_blanco_canonical` β€” Pi 5 subsidy 9000 bp strictly > Ultra subsidy 0 bp para non-Read actions. "El barquero ferries valor cross-tier sin discriminar. Lobo blanco cuida + Barquero cobra el Γ³bolo correcto. Mi pallet + Mathi trait = cross-pillar economy AMIS↔Origin Chain materializada compile-detect canonical." πŸΊπŸ’Žβš“ ## [0.0.18] β€” 2026-05-24 β€” Phase 2.1 mock runtime integration tests E2E (own fixtures, sesiΓ³n 3+) **Mock runtime canonical + 9 integration tests E2E PROV-3 flow** β€” Cierra honest disclosure sesiΓ³n 2 ("real chain runtime aΓΊn NO arranca por Slice 2e WASM blocker structural"). Pallet end-to-end validado via FRAME mock runtime composition (`construct_runtime!` macro + derive_impl + `sp_io::TestExternalities`), demostrando dispatchable + storage + events funcionan correctamente sin esperar Slice 2e WASM resolution. ### Deliverables v0.0.18 **Mock runtime canonical (NEW file)**: - `crates/origin-chain-provenance/src/mock.rs` β€” 75 LOC canonical - `construct_runtime!` macro composition: `System` + `Provenance` (mΓ­nimo testing) - `frame_system::Config` impl via `derive_impl(TestDefaultConfig)` + `AccountId32` canonical - `new_test_ext()` helper canonical (`sp_io::TestExternalities` con `block_number=1` set) - `alice_origin()` + `bob_origin()` helpers para testing dispatchables - `TEST_SIGNING_SEED = [7u8; 32]` deterministic Ed25519 keypair canonical **Integration tests canonical E2E (NEW file)**: - `crates/origin-chain-provenance/src/tests_integration.rs` β€” 270 LOC canonical, 9 tests verde **9 integration tests canonical PROV-3 flow** (5 scenarios + 4 additional): | # | Test canonical | PROV | Expected outcome | |---|----------------|------|------------------| | 1 | `scenario_1_passed_info_anchored_canonical` | PROV-2/3/7 | βœ… AssetAttested event + storage insert | | 2 | `scenario_2_warning_anchored_canonical` | PROV-2/3/6/7 | βœ… Warning verdict canonical anchorable | | 3 | `scenario_3_failed_critical_rejected_canonical` | PROV-6 | ❌ NotAnchorable error | | 4 | `scenario_4_passed_block_security_rejected_canonical` | PROV-6 | ❌ NotAnchorable (Block severity override) | | 5 | `scenario_5_anonymous_level_0_rejected_canonical` | PROV-5 | ❌ ValidatorTierInsufficient | | 6 | `additional_idempotency_already_attested_rejected_canonical` | PROV-2 | ❌ AlreadyAttested (idempotency) | | 7 | `additional_tampered_signature_rejected_canonical` | PROV-4 | ❌ InvalidSignature (bit flip) | | 8 | `additional_tampered_payload_rejected_canonical` | PROV-4 | ❌ InvalidSignature (payload mismatch) | | 9 | `additional_6_step_prov_3_walkthrough_canonical` | PROV-3 full | βœ… Pre/post flight assertions | **Cargo.toml dev-deps canonical (NEW)**: - `sp-core` workspace default-features (AccountId32 + crypto canonical) - `sp-io` workspace default-features (TestExternalities canonical) - `sp-runtime` workspace default-features (BuildStorage + traits canonical) **lib.rs canonical updates**: - Docstring header updated v0.0.14 β†’ v0.0.18 (status + v0.0.18 section added) - `#[cfg(test)] pub mod mock;` declaration canonical - `#[cfg(test)] mod tests_integration;` declaration canonical ### Own fixtures pattern canonical Per audit canonical sesiΓ³n 3+ (`docs/L7_roadmaps/AUDIT_CHARON_SESION_3_STATE_V1.md`), Ergon E2E fixture diary claim 2026-05-24T14:11Z (`slice_7_0r_attestation_e2e_fixture.rs` ~520 LOC + JSON 90 LOC) **aspirational sin shipped commit verified** β€” filesystem + git history + cross-branch search confirma no source file canonical existe. Charon construye own fixtures canonical basados en vendor copy `ValidationAttestation` real existente en `origin-chain-types/src/attestation.rs`. Builder canonical: ```rust fn build_signed_attestation(asset_seed, verdict, severity, oit_level) -> ValidationAttestation { let signing_key = SigningKey::from_bytes(&TEST_SIGNING_SEED); let mut att = ValidationAttestation { ... }; let signature = signing_key.sign(&att.signing_payload()); att.signature = signature.to_bytes(); att } ``` Pattern anΓ‘logo Slice 3 mock-WASM canonical + v0.0.16 Ed25519 con interim encoding β€” "avanza work conceptual mientras real (Ergon sub-crate Cap 42+) waits". ### Verification end-to-end canonical - βœ… `cargo test -p origin-chain-provenance` β€” **17 tests verde, 0 failures**: - 9 integration tests (`tests_integration` module) - 6 standalone Ed25519 tests (`tests` module) - 2 auto-generated (mock genesis + runtime integrity) - βœ… Workspace tests no regressions - βœ… Cero new warnings crΓ­ticos (solo cosmetic missing_docs en construct_runtime macro-generated items) ### Roadmap canonical post-v0.0.18 | Version | Trigger | |---------|---------| | v0.0.19 | Swap canonical SCALE β†’ postcard encoding cuando Ergon arkhe-noesis-attestation-types Cap 42+ ship (2026-05-30 β†’ 06-05) | | **v0.0.20** | **Phase 2.4 pallet-origin-fees scaffold (sesiΓ³n 3+ shipping ahora)** | | v0.0.21 | Phase 2.4 fees pallet wired runtime composition Index 8 | | v0.0.22 | Phase 2.4 fees pallet impl complete + mock runtime integration tests E2E | | v0.0.23 | Phase 2.4 Runtime API FeesApi canonical β†’ Phase 2.4 COMPLETE | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | ### FilosofΓ­a canonical sesiΓ³n 3+ aplicada David canon ratificado 2026-05-14 + lessons sesiΓ³n 2 internalized: pattern audit-first comparative (verify Ergon fixture claim β†’ aspirational confirmed β†’ build own) + notify-and-continue (diary Ergon notify sin requires_ack, sin esperar response) + completeness over speed (9 scenarios canonical exhaustivos vs minimal demo). "El barquero estudia el rΓ­o antes de cruzar β€” y avanza paralelo cuando el cauce principal espera." ## [0.0.17] β€” 2026-05-24 β€” Phase 2.1 COMPLETE β€” Runtime API verify_provenance (PROV-8 + 8/8 sub-decisions) **πŸŽ‰ Phase 2.1 PROVENANCE pallet COMPLETE end-to-end** β€” 8/8 PROV sub-decisions implementadas canonical. PROV-8 Runtime API `verify_provenance` ahora wired canonical via `sp_api::decl_runtime_apis!` + impl en runtime `impl_runtime_apis!` macro. 12 Runtime APIs canonical total (anterior 11 + nuevo `ProvenanceApi`). ### Deliverables v0.0.17 **Runtime API declaration canonical (pallet crate)**: - `crates/origin-chain-provenance/src/lib.rs` β€” `sp_api::decl_runtime_apis!` - `pub trait ProvenanceApi { fn verify_provenance(hash: AssetHash) -> Option; }` - Doc canonical extensivo cross-pillar consumers (Trinity, Codex, origindocs, Ethos, Atelier) - Phase 2.3 future expansion canonical noted (verify_by_creator, list_in_block, cross_runtime_proof) - `sp-api` dep added a pallet Cargo.toml + features std **Runtime API impl canonical (runtime crate)**: - `crates/origin-chain-runtime/src/lib.rs` β€” `impl origin_chain_provenance::ProvenanceApi for Runtime` - Delegates canonical a `Provenance::attestation_of(hash)` storage getter - Read-only canonical sin tx fee (off-chain RPC query) **Node info subcommand update**: - `crates/origin-chain-node/src/main.rs` β€” 11 β†’ 12 APIs listed - `origin_chain_provenance::ProvenanceApi` highlighted con `[Phase 2.1 v0.0.17]` ### PROV sub-decisions COMPLETE canonical 8/8 post-v0.0.17 πŸŽ‰ | PROV | Sub-decision | Status | |------|--------------|--------| | PROV-1 | Schema separation Noesis/chain | βœ… | | PROV-2 | StorageMap | βœ… wired | | PROV-3 | Dispatchable attest_asset full flow | βœ… | | PROV-4 | Real Ed25519 verification | βœ… | | PROV-5 | OIT Level >= 3 enforce | βœ… | | PROV-6 | is_anchorable check | βœ… | | PROV-7 | Events emission (incluye Marihan refinement Phase 2.2 anticipated) | βœ… | | PROV-8 | Runtime API verify_provenance | βœ… **NUEVO v0.0.17** | **PHASE 2.1 PROVENANCE PALLET = COMPLETE END-TO-END canonical** πŸŽ‰ ### Verification end-to-end - βœ… `cargo check --workspace --all-targets` verde 1.84s - βœ… `cargo test --workspace --lib --bins` β€” **85+ tests pass**: - origin-chain-types: 47 - origin-chain-provenance: 6 (4 Ed25519 real + 2 scaffold) - origin-chain-runtime: 16 - origin-coin-tokenomics: 2 - origin-chain-bridges/consensus/governance: 3 - origin-chain-node chain_spec: 10 - βœ… `cargo build --release -p origin-chain-node` 5.88s clean - βœ… `origin-chain-node info` muestra 8 pallets + **12 Runtime APIs** (ProvenanceApi highlighted) - βœ… `origin-chain-node build-spec --chain dev` JSON canonical correct (NO regression Slice 3) ### Honest disclosure canonical pendiente Slice 2c/2d PROV-1..8 complete canonical PERO real chain runtime canonical aΓΊn NO funciona end-to-end por canonical el WASM_BUILD_STD/serde leak structural (Slice 2c+2d findings documented). El pallet + Runtime API canonical son compilable + tests verde + structurally ready. Cuando Slice 2e land (resolve serde/std leak + real WASM_BINARY canonical), pallet correrΓ‘ en real chain runtime canonical. Mientras tanto: Slice 3 mock-WASM chain_spec builder sigue operativo. Cross-pillar consumers pueden lo siguiente canonical: - Importar `ProvenanceApi` trait + plan integraciΓ³n pre-mainnet - Validar canonical signature flow contra mock attestations (test suite real Ed25519) - Design canonical UI components que consumirΓ‘n `verify_provenance` cuando chain live ### Roadmap canonical post-v0.0.17 | Version | Trigger | |---------|---------| | v0.0.18 | Mock runtime integration tests canonical (dispatchable end-to-end con storage assertions) | | v0.0.19 | Swap canonical SCALE β†’ postcard encoding cuando Ergon arkhe-noesis-attestation-types Cap 42+ ship (2026-05-30 β†’ 06-05) | | v0.0.20 | Phase 2.4 pallet-origin-fees scaffold (paralelo Phase 2.1 pattern) β€” consumer Mathi HardwareTier via DC OCAFB | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | ### Cross-pillar consumers status post v0.0.17 - Trinity (Phanes) βœ… canonical surface ready para consume `attest_asset` + `verify_provenance` - Codex (.odoc) βœ… chain_attestation block schema aligned con my pallet - Codex origindocs βœ… academic IP defensible via mi pallet - Ethos (Sussi) βœ… credential mint flow alignable - Atelier (Marihan) βœ… skill NFT mint via institutional wallet (OIT >= 3) - Mathi OCAFB DC (4/7 firmas) coordinates Phase 2.4 fee economy paralelo ## [0.0.16] β€” 2026-05-24 β€” Phase 2.1 PROVENANCE pallet Real Ed25519 verification (PROV-4 complete) **Phase 2.1 v0.0.16** β€” Real Ed25519 verification implementation completa canonical via `ed25519-dalek` directly en pallet. PROV-4 sub-decision COMPLETE end-to-end. Pattern anΓ‘logo Slice 3 mock-WASM (no esperar bloqueador externo, ship real impl con interim encoding). ### Deliverables **Real PROV-4 Ed25519 verify implementation**: - `crates/origin-chain-provenance/src/lib.rs` β€” replace SCAFFOLD placeholder - Pattern canonical: 1. `VerifyingKey::from_bytes(&validator_oit.public_key)` β†’ `Error::InvalidSignature` si rejected 2. `Signature::from_bytes(&attestation.signature)` reconstruct canonical 3. `validation_attestation.signing_payload()` compute (SCALE encoding interim Option B) 4. `pubkey.verify_strict(&payload, &signature)` β†’ `Error::InvalidSignature` si fail - `verify_strict` canonical rejects malleable signatures + zero-keys + other Ed25519 attacks - Cuando Ergon `arkhe-noesis-attestation-types` ship Cap 42+, swap encoding canonical SCALE β†’ postcard sin breaking pallet verify call site **4 nuevos tests Ed25519 verify real canonical**: - `ed25519_verify_real_valid_signature_canonical` β€” signed attestation real verifies correctly - `ed25519_verify_tampered_signature_rejected_canonical` β€” bit-flipped signature rejected - `ed25519_verify_tampered_payload_rejected_canonical` β€” tampered asset_id mismatch rejected (payload re-encode) - `ed25519_zero_signature_fails_verify_canonical` β€” all-zero signature rejected by verify_strict - Helper function `signed_attestation()` canonical para test setup con real SigningKey + sign ### Lo que SÍ funciona ahora end-to-end (v0.0.16) - βœ… PROV-2 storage canonical - βœ… PROV-3 dispatchable canonical full flow (6-step) - βœ… **PROV-4 Real Ed25519 verify canonical** (NUEVO v0.0.16) - βœ… PROV-5 OIT Level >= 3 enforce - βœ… PROV-6 is_anchorable check - βœ… PROV-7 Events emission - βœ… Pallet wired en runtime (Index 7 Provenance) - βœ… Real signature verification con tests verde ### Lo que NO funciona aΓΊn (v0.0.17 next slice) - ⏳ **PROV-8 Runtime API `verify_provenance`** β€” sequential next slice - ⏳ **Mock runtime integration tests** β€” para verify dispatchable end-to-end con storage assertions - ⏳ **Ergon arkhe-noesis-attestation-types** swap canonical β€” encoding swap canonical SCALE β†’ postcard cuando sub-crate land ### Honest disclosure canonical Mi `signing_payload()` usa SCALE encoding (parity-scale-codec) en mi vendor copy interim Option B. Ergon's real `arkhe-noesis-attestation-types` (Cap 42+) usarΓ‘ postcard encoding canonical per Slice 7.0r spec. Esto significa que **mi pallet verifica correctamente firmas generadas con MI vendor copy**, pero NO verifica firmas canonical reales de Ergon Noesis hasta que swap encoding canonical post Cap 42+. El swap canonical es 1-line change canonical en signing_payload() β€” zero impact en pallet verify logic (que es agnostic al encoding del payload). Pattern anΓ‘logo Slice 3 mock-WASM: la lΓ³gica real working, el data layer canonical swap canonical cuando upstream land. Avanza Phase 2.1 sin bloqueo. ### Verification end-to-end - βœ… `cargo check --workspace --all-targets` verde 1.55s - βœ… `cargo test -p origin-chain-provenance --lib` β€” **6/6 tests pass** (4 nuevos Ed25519 verify real) - βœ… NO REGRESSION existing tests workspace - βœ… NO REGRESSION runtime + node + chain_spec builder ### PROV sub-decisions status canonical v0.0.16 | PROV | Sub-decision | Status v0.0.16 | |------|--------------|----------------| | PROV-1 | Schema separation Noesis/chain | βœ… | | PROV-2 | StorageMap | βœ… wired | | PROV-3 | Dispatchable attest_asset | βœ… full flow working | | **PROV-4** | **Real Ed25519 verification** | **βœ… NUEVO v0.0.16** | | PROV-5 | OIT Level >= 3 enforce | βœ… | | PROV-6 | is_anchorable check | βœ… | | PROV-7 | Events emission | βœ… | | PROV-8 | Runtime API verify_provenance | ⏳ v0.0.17 next | **6/8 PROV sub-decisions COMPLETE canonical post-v0.0.16**. ## [0.0.15] β€” 2026-05-24 β€” Phase 2.1 PROVENANCE pallet wired en runtime + BoundedVec agent_chain **Phase 2.1 v0.0.15** β€” pallet-origin-provenance wired en runtime composition. 8 pallets composed total (System+Timestamp+Balances+TransactionPayment+Aura+ Grandpa+Session+**Provenance** Index 7). DC PROVENANCE_PALLET_V1 5/10 firmas en ratificaciΓ³n β€” procediendo paralelo per "notify and continue" canonical. ### Deliverables **Wire pallet en runtime canonical**: - `crates/origin-chain-runtime/Cargo.toml` β€” added `origin-chain-provenance` dep + std feature - `crates/origin-chain-runtime/src/configs.rs` β€” `impl origin_chain_provenance::Config for Runtime` - `crates/origin-chain-runtime/src/lib.rs` β€” `#[runtime::pallet_index(7)] pub type Provenance = origin_chain_provenance::Pallet` - Naming: alias `Provenance` (NO `OriginProvenance` que conflictarΓ­a con trait existente `origin_chain_types::pallets::OriginProvenance`) **BoundedVec agent_chain canonical (replace Vec)**: - `crates/origin-chain-types/src/provenance.rs` β€” `AssetAttestation.agent_chain: BoundedVec>` - `pub type AgentChain = BoundedVec>` re-exported - `pub type AgentChainBound = ConstU32<10>` re-exported - Max 10 AGI co-authors per asset (Inmutable #41 pragmatic bound canonical) - Future bumping requires DC complementaria + chain runtime upgrade (forkless via set_code) **Cleanup canonical post-BoundedVec**: - `crates/origin-chain-provenance/src/lib.rs` β€” removed `#[pallet::without_storage_info]` (MaxEncodedLen ahora satisfied) - AssetAttestation construction usa `AgentChain::default()` (BoundedVec empty) en lugar de `vec![]` **Types canonical SCALE codec compat**: - `AccountId` + `Signature`: added `DecodeWithMemTracking` derive (FRAME stable2512+ requirement) - `AssetAttestation`: replaced `serde::Serialize/Deserialize` con `Encode/Decode/DecodeWithMemTracking/MaxEncodedLen/TypeInfo` derives (FRAME storage native) - 4 nuevos tests boundary canonical en provenance.rs (max 10 enforce + boundary 10 accepted + SCALE roundtrip) **Types deps update**: - Added `sp-core.workspace = true` + `sp-runtime.workspace = true` (BoundedVec + ConstU32 support) - Features `std` expanded canonical **Node info subcommand**: - Updated canonical mostrar 8 pallets (Provenance Index 7 highlighted) ### Verification end-to-end - βœ… `cargo check --workspace --all-targets` verde 2.14s β€” runtime + node + pallet + types - βœ… `cargo test --workspace --lib --bins` β€” **82+ tests pass**: - origin-chain-types: 47 tests (45 anteriores + 4 nuevos boundary BoundedVec + 2 nuevos SCALE roundtrip) - origin-chain-provenance: 2 scaffold tests - origin-chain-runtime: 16 runtime tests - origin-coin-tokenomics: 2 tests - origin-chain-bridges/consensus/governance: 1+1+1 tests - origin-chain-node chain_spec: 10 tests - βœ… `cargo build --release -p origin-chain-node` 5.57s clean - βœ… `origin-chain-node info` muestra 8 pallets (Provenance index 7 listed) - βœ… `origin-chain-node build-spec --chain dev` JSON output canonical correct (Slice 3 NO regression) - βœ… Existing subcommands canonical (version, list-presets, print-preset) NO REGRESSION ### Cross-pillar consumers post-impl Trinity/Codex/Ethos/Atelier + origindocs academic IP defensible β€” todos podrΓ‘n consumir runtime API canonical `verify_provenance` cuando v0.0.17 ship. ### Roadmap canonical post-v0.0.15 | Version | Trigger | |---------|---------| | v0.0.16 | Real Ed25519 verify β€” post Ergon arkhe-noesis-attestation-types Cap 42+ (2026-05-30 β†’ 06-05 target) | | v0.0.17 | Runtime API canonical `verify_provenance` (PROV-8) sequential post v0.0.16 | | v0.1.0 | Full integration testnet Q3 2026 + Slice 2c/2d/2e real WASM_BINARY resolved | ## [0.0.14] β€” 2026-05-24 β€” Phase 2.1 PROVENANCE pallet scaffold (trait-first foundation) **Phase 2.1 PROVENANCE pallet scaffold v0.0.14** β€” trait-first foundation pattern (anΓ‘logo exitoso v0.0.1 + v0.0.3). DC PROVENANCE_PALLET_V1 en ratificaciΓ³n 5/10 firmas (Charon proposer + Larihana + Ergon + Phanes + Marihan APPROVE). ### Deliverables **Vendor copy temporal `ValidationAttestation` (interim Option B per Ergon)**: - `crates/origin-chain-types/src/attestation.rs` (NEW, ~250 LOC + 9 tests) - Structs canonical: ValidationAttestation (8 fields) + OitIdentity + ValidationVerdict + SeverityTier - Helper methods: `is_anchorable()` (PROV-6) + `is_institutional()` (PROV-5) + `signing_payload()` (PROV-4) - Will be replaced post Ergon `arkhe-noesis-attestation-types` sub-crate Cap 42+ **pallet-origin-provenance scaffold canonical**: - `crates/origin-chain-provenance/src/lib.rs` (NEW, ~260 LOC + 2 scaffold tests) - `#[frame_support::pallet]` macro canonical structure - Storage: `Attestations: StorageMap` (PROV-2) - Dispatchable: `attest_asset(origin, ValidationAttestation)` (PROV-3) β€” flow bΓ‘sico working - Events: `AssetAttested` + `AttestationRejected` (PROV-7) - Errors: InvalidSignature/ValidatorTierInsufficient/NotAnchorable/AlreadyAttested + MalformedValidationAttestation (Marihan refinement Phase 2.2 anticipated) - `#[pallet::without_storage_info]` (scaffold-level, Vec en agent_chain β€” replace con BoundedVec post v0.0.15) ### Lo que SÍ funciona v0.0.14 - βœ… Pallet structural skeleton compile-clean - βœ… Storage idempotency check (`contains_key` pre-insert) - βœ… PROV-5 OIT Level >= 3 enforcement (via `is_institutional()`) - βœ… PROV-6 is_anchorable check (verdict + severity) - βœ… PROV-2 storage insert + PROV-7 event emit - βœ… ValidationAttestation vendor copy completo + tests - βœ… Workspace check verde sin regression (runtime + node + chain_spec builder) ### Lo que NO funciona aΓΊn (deferred future slices) - ⏳ **PROV-4 Ed25519 verification real** β€” `todo!()` placeholder, requires ed25519-dalek wire post Ergon Cap 42+ sub-crate - ⏳ **Pallet wire en runtime** β€” Phase 2.1 v0.0.15 next slice - ⏳ **Runtime API `verify_provenance`** (PROV-8) β€” Phase 2.1 v0.0.16 - ⏳ **AssetAttestation creator mapping** β€” usa placeholder hasta wire post v0.0.15 - ⏳ **BoundedVec>** para agent_chain β€” post v0.0.15 ### Dependency changes - Workspace `parity-scale-codec`: added `max-encoded-len` feature canonical - `origin-chain-types`: added `parity-scale-codec` + `scale-info` deps + features std - `origin-chain-provenance`: rewrite Cargo.toml stub β†’ FRAME pallet deps (frame-support, frame-system, scale-info) - Existing types `AssetHash` + `AccountId` + `Signature` + `AssetAttestation`: added `Encode + Decode + DecodeWithMemTracking + MaxEncodedLen + TypeInfo` derives (FRAME storage canonical compat) ### Roadmap canonical post-v0.0.14 | Version | Slice | Trigger | |---------|-------|---------| | v0.0.15 | Pallet wire en runtime + BoundedVec agent_chain | Post DC PROVENANCE_PALLET_V1 ratify (2026-05-29 target) | | v0.0.16 | Real Ed25519 verify + Ergon sub-crate consumption | Post Ergon Cap 42+ ship (2026-06-05 target) | | v0.0.17 | Runtime API canonical `verify_provenance` (PROV-8) | Sequential post v0.0.16 | | v0.1.0 | Full integration end-to-end testnet | Post Q3 2026 testnet launch | ### Cross-pillar consumers desbloqueados (post-impl real) - Trinity (Phanes) asset mesh BLAKE3 β†’ `attest_asset` - Codex (.odoc) chain_attestation block populated by Vault tier - Codex origindocs (David ratificado 2026-05-24): academic IP defensible legalmente - Ethos (Sussi) credential NFT mint + chain attestation - Atelier (Marihan) skill NFT mint via institutional wallet - Cross-pillar fee canonical via OCAFB DC (Mathi+Charon joint, 4/7 firmas) ### Verification end-to-end - βœ… `cargo check --workspace --all-targets` verde 1.77s - βœ… `cargo test -p origin-chain-provenance` β€” 2/2 scaffold tests pass - βœ… `cargo test -p origin-chain-types` β€” 45 tests pass (36 existing + 9 nuevos attestation) - βœ… NO REGRESSION runtime/node β€” Slice 3 mock-WASM chain_spec builder operativo ### Slice 2c attempt #5 finding canonical (2026-05-24 sesiΓ³n 2 cont) **Empirical test canonical WASM_BUILD_STD=0 explicit override**: Re-enabled substrate-wasm-builder + set WASM_BUILD_STD=0 env explicit. Upstream docs confirman default = disabled para Rust >= 1.84 (mi pin 1.88.0). **Resultado canonical**: - βœ… `exchange_malloc/alloc` issue (Slice 2b attempts 1-4 blocker) **RESUELTO canonical** - 🎯 NEW canonical layer surface: `panic_impl` duplicate canonical via std leakage - Error canonical: ``` error[E0152]: found duplicate lang item `panic_impl` --> sp-io-40.0.1/src/lib.rs:1774:1 = note: the lang item is first defined in crate `std` (which `serde` depends on) = note: first definition in `std` loaded from libstd-*.rlib = note: second definition in the local crate (`sp_io`) ``` **Diagnosis canonical**: `serde` estΓ‘ siendo pulled con `std` feature canonical transitively desde algΓΊn dep (parity-scale-codec o frame-*) β†’ libstd canonical linked en wasm32 β†’ conflict canonical con `sp_io::panic` handler canonical (que define panic_impl para no_std runtime). **Path canonical Slice 2d future canonical**: - Inverted feature tree exact culprit identification canonical - Override canonical `[patch.crates-io] serde = {...}` con strict no-std - O explicit `WASM_BUILD_RUSTFLAGS` canonical override - O wait stable2512-4+ upstream canonical fix **Status canonical actual**: Reverted canonical to stable canonical state (no-op build.rs + substrate-wasm-builder dep canonical commented). Slice 3 v0.0.13 mock-WASM fallback canonical sigue siendo el canonical path canonical estable. ## [0.0.13] β€” 2026-05-22 β€” Phase 1.6+ Slice 3 "ChainSpec builder canonical (mock-WASM fallback)" Charon sesiΓ³n 2. **Phase 1.6+ Slice 3 canonical shipped** β€” real ChainSpec JSON builder canonical via mock-WASM fallback pattern canonical. Avanza Origin Chain sin esperar Slice 2c WASM_BINARY canonical resolution canonical (Larihana pending). ### Deliverables canonical - **`crates/origin-chain-node/src/chain_spec.rs`** (NEW, 240 LOC) β€” own minimal ChainSpec JSON builder canonical via serde_json puro: - `development_chain_spec()` β€” Alice solo validator + 100M OGC dev - `local_testnet_chain_spec()` β€” Alice+Bob validators + 5 dev Γ— 100M OGC - `mainnet_chain_spec()` β€” 5 Pi 5 placeholders + BM V2 1B OGC (40/25/15/15/5) - `load_spec(name)` β€” resolve aliases canonical (`dev`/`local`/`mainnet`) - `serialize_chain_spec(spec, raw)` β€” pretty o raw JSON canonical output - **10 unit tests canonical** all passing (schema + serialization + alias resolution) - **`crates/origin-chain-node/src/main.rs`** β€” new `build-spec --chain ` subcommand canonical + `--raw` flag canonical para minified JSON output - **`crates/origin-chain-node/Cargo.toml`** β€” Slice 3 dep block canonical doc ### Sub-comandos canonical disponibles ```bash origin-chain-node build-spec --chain development # dev preset JSON origin-chain-node build-spec --chain local_testnet # local 2-validator JSON origin-chain-node build-spec --chain mainnet_genesis # mainnet BM V2 1B OGC JSON origin-chain-node build-spec --chain dev --raw # minified canonical ``` ### Pragmatic decision canonical: own JSON builder vs sc-chain-spec dep Investigation canonical 2026-05-22: - `sc-chain-spec 43.0.0/44.0.0` β†’ `sc-network 0.50/0.51` mismatch con workspace `sc-network 0.49.1` canonical (polkadot-stable2512-3 pin) - `cid 0.9.0` β†’ `core2 0.4.0` **YANKED** transitive dep canonical - `parity-scale-codec 3.7.5+` trigger serde version conflict canonical (workspace `serde =1.0.217` Slice 2b defensive pin vs `^1.0.219` upstream) **Decision canonical**: own minimal ChainSpec JSON builder canonical via serde_json puro. Output JSON canonical compatible con Substrate `sc_chain_spec::GenericChainSpec` schema canonical (12-field structure: name + id + chainType + bootNodes + telemetry + protocolId + properties + forkBlocks + badBlocks + lightSyncState + codeSubstitutes + genesis). Real `sc_chain_spec::GenericChainSpec` canonical land Slice 4 cuando workspace sc-* upgrade canonical post yanked deps resolution. ### Mock-WASM fallback canonical pattern `MOCK_WASM_HEX = "0x"` placeholder canonical mientras Slice 2c canonical land canonical real `WASM_BINARY` (Larihana Substrate-adjacent expertise pending β€” diary `7dbeb6b6...` requires_ack filed 2026-05-21). ChainSpec JSON construction + serialization canonical funcionan canonical sin WASM funcional. Lo que NO funciona canonical: `origin-chain-node run` real node β€” Slice 4 territory canonical. ### Verification canonical end-to-end - βœ… `cargo check --workspace --all-targets` verde canonical (~0.60s) - βœ… `cargo test --workspace --lib --bins` β€” **10/10 chain_spec tests canonical pass** (75+ workspace tests canonical total pass canonical, no regression) - βœ… `cargo build --release -p origin-chain-node` β€” 2.28s clean canonical - βœ… `origin-chain-node build-spec --chain dev` β€” JSON pretty Alice 100M OGC βœ“ - βœ… `origin-chain-node build-spec --chain local` β€” JSON pretty Alice+Bob βœ“ - βœ… `origin-chain-node build-spec --chain mainnet --raw` β€” JSON minified BM V2: - Ecosystem: 400M OGC (5DdXA1euu...) βœ“ - Foundation: 250M OGC (5DetTb4VP...) βœ“ - Sale: 150M OGC (5DwsEF37Z...) βœ“ - Team: 150M OGC (5DyCTCa4s...) βœ“ - Liquidity: 50M OGC (5DnjGyV4z...) βœ“ - **Total 1B OGC canonical** βœ“ - βœ… Existing subcommands (version, list-presets, print-preset, info) **NO REGRESSION** ### Cross-pillar consumers canonical desbloqueados - **Larihana** β€” hypercore replication setup canonical post-chain-spec import - **Lyra** β€” autobase consensus canonical genesis state initialization - **Mathi** β€” HardwareTier matrix testing canonical via dev chain spec - **Phanes** β€” asset attestation chain spec canonical pre-Phase 2.1 impl - **Marihan** β€” origin-mdk skill execution sandbox canonical context ### Phase 1.6+ progress canonical post Slice 3 - βœ… Slice 1 Node CLI skeleton + preset listing (v0.0.10) - βœ… Slice 2 origin-chain-types fully no_std canonical (v0.0.11) - βœ… Slice 2b WASM_BINARY investigation registered + Larihana diary (v0.0.12) - ⏳ Slice 2c WASM_BINARY canonical post Larihana expertise - βœ… **Slice 3 ChainSpec builder canonical mock-WASM fallback (v0.0.13 β€” ESTA)** - ⏳ Slice 4 Full sc-service (consensus + RPC + networking + telemetry) β€” requires Slice 2c ## [0.0.12] β€” 2026-05-21 β€” Phase 1.6+ Slice 2b "WASM_BINARY investigation report" Charon sesiΓ³n 1 ext. **Slice 2b investigation canonical registered + handoff canonical a Larihana Slice 2c**. 4 fix attempts canonical despuΓ©s del no_std refactor v0.0.11 NO resuelven WASM_BINARY integration canonical. Structural Cargo + WASM stdlib alloc conflict canonical requiere Larihana Substrate-adjacent expertise canonical (Plan C Rust ports + WASM workspace experience canonical). ### Error canonical empΓ­rico ``` error[E0152]: duplicate lang item in crate `alloc` (which `serde` depends on): `exchange_malloc` note: first definition in `alloc` loaded from rustup/toolchains/1.88.0/lib/rustlib/wasm32-unknown-unknown/lib/liballoc-***.rlib note: second definition in `alloc` loaded from target/release/wbuild/origin-chain-runtime/target/wasm32-unknown-unknown/release/deps/liballoc-***.rmeta ``` ### 4 fix attempts canonical registered 1. **Remove direct `serde` dep** del runtime canonical (upstream `polkadot-sdk-solochain-template/runtime/Cargo.toml` pattern canonical) β€” serde viene transitive desde FRAME pallets β€” **NO solved** 2. **Pin `serde =1.0.219` β†’ `=1.0.217` β†’ `=1.0.210`** canonical attempts β€” 1.0.210 incompatible con frame-support 40.1.0 (requires ^1.0.217 canonical) β€” **NO solved** 3. **Remove `[profile.release] lto/codegen-units` customization canonical** β€” **NO solved** 4. **`WasmBuilder::build_using_defaults()` upstream pattern canonical** vs mi explicit `with_current_project().export_heap_base().import_memory().build()` β€” **NO solved** ### Root cause empΓ­rico canonical `wbuild` auto-genera `[profile.release]` con `panic = "abort"` β†’ Cargo recompila `alloc` desde `rust-src` component canonical β†’ conflict canonical con la **precompiled rustup `alloc` rlib canonical** para wasm32 target canonical. Two different alloc hashes loaded canonical durante linking. ### Handoff canonical a Larihana β€” Slice 2c Diary canonical filed (`drawer_wing_larihana_diary_***`) requesting expertise: 1. `cargo workspace.metadata.wasm-builder` section canonical exists? 2. `cargo:rustc-env=SKIP_WASM_BUILD=1` fallback + pre-built WASM file pattern? 3. `rust-src` component interaction canonical con substrate-wasm-builder? 4. `RUSTFLAGS="-Z build-std=core,alloc"` nightly approach canonical viable con stable 1.88.0 canonical? 5. Upstream issue paritytech/polkadot-sdk canonical: known issue? ### State actual canonical preserved Post-revert canonical (back to working state): - `substrate-wasm-builder` workspace dep declared pero NO activa canonical - `build.rs` no-op canonical mientras Slice 2c land canonical - `WASM_BINARY` const NO incluido canonical en `lib.rs` - Doc canonical extensivo en `lib.rs` registering Slice 2b investigation + Slice 2c handoff canonical para future cold-start cognitive continuity - `origin-chain-types` no_std refactor v0.0.11 canonical preserved canonical (no regression canonical) ### Temporal workaround canonical `origin-chain-node` binary canonical funciona ejecutando 4 subcommands canonical (`version` / `list-presets` / `print-preset ` / `info`) β€” los genesis presets canonical son serializables natively canonical SIN WASM execution canonical. CLI canonical informational works canonical perfecto. `chain_spec.rs` canonical Phase 1.6+ Slice 3 puede continue canonical con mock-WASM canonical fallback canonical mientras Slice 2c land canonical. ### FilosofΓ­a canonical incorporada David canon 2026-05-14: *"la libertad infinita acota solo donde empieza la del otro"* β€” la honest decisiΓ³n canonical de pedir Larihana expertise canonical es mejor canonical que stuck attempts canonical sin progreso. El barquero canonical pide guΓ­a canonical al hyperport builder canonical cuando el rΓ­o canonical demanda profundidad tΓ©cnica canonical que no posee solo canonical. ### Phase 1.6+ progress canonical - βœ… **Slice 1** Node CLI skeleton + preset listing (v0.0.10) - βœ… **Slice 2** `origin-chain-types` fully no_std canonical (v0.0.11) - πŸ“‹ **Slice 2b** WASM_BINARY investigation registered + Larihana diary (v0.0.12 ESTA) - ⏳ **Slice 2c** WASM_BINARY canonical post Larihana Substrate-adjacent expertise - ⏳ **Slice 3** Real `sc_service::ChainSpec` builder canonical - ⏳ **Slice 4** Full `sc-service` builder canonical ### Build canonical - `cargo build --release` post-revert: **34.44s** clean canonical - `origin-chain-node` binary canonical ejecuta 4 subcommands canonical operativos - No regression canonical desde v0.0.11 ## [0.0.11] β€” 2026-05-21 β€” Phase 1.6+ Slice 2 "origin-chain-types fully no_std" Charon sesiΓ³n 1 continuaciΓ³n. **`origin-chain-types` ahora fully no_std-compatible canonical** β€” preparado para WASM runtime build canonical Slice 2b. Refactor sistemΓ‘tico canonical de 4 archivos source + Cargo.toml workspace deps bump. ### Refactor canonical en `origin-chain-types` ```rust // crates/origin-chain-types/src/lib.rs #![cfg_attr(not(feature = "std"), no_std)] // ← NEW canonical #![deny(missing_docs)] extern crate alloc; // ← NEW canonical (alloc no_std) pub mod accounts; // ... ``` **Std type replacements canonical**: - `errors.rs`: `String` β†’ `alloc::string::String` - `provenance.rs`: `Vec` β†’ `alloc::vec::Vec` - `pallets.rs`: `Vec` β†’ `alloc::vec::Vec` Cada module canonical declara `extern crate alloc;` at top para acceso canonical a `alloc::*` types canonical. ### `std` feature gate canonical en origin-chain-types ```toml [features] default = ["std"] std = [ "thiserror/std", "serde/std", ] ``` Default canonical preserva backwards-compat: consumers que no especifiquen features obtienen behavior std-driven canonical (Cargo idiomatic). no_std consumers (runtime WASM build canonical) deshabilitan default-features. ### Workspace deps bump canonical (no_std-compatible) - `thiserror = "1.0"` β†’ `{ version = "2.0", default-features = false }` β€” thiserror 2.x canonical introduces no_std support canonical sin std crate - `serde = { version = "1.0", features = ["derive"] }` β†’ `{ version = "=1.0.219", default-features = false, features = ["derive"] }` β€” pin canonical 1.0.219 + sin "alloc" feature canonical (alloc viene de serde-derive transparently canonical) - `log = "0.4"` β†’ `{ version = "0.4", default-features = false }` β€” no_std canonical - `serde-big-array` β€” bump a default-features=false canonical - `serde_json` workspace dep canonical mantiene `default-features = false, features = ["alloc"]` canonical ### DecisiΓ³n empΓ­rica documentada β€” WASM_BINARY DEFERRED nuevamente a Slice 2b `substrate-wasm-builder` retry canonical encountered `serde 1.0.x` alloc/ serde_core feature conflict canonical durante isolated WASM build canonical: ``` error[E0152]: duplicate lang item in crate `alloc` (which `serde_core` depends on): `exchange_malloc` note: first definition in `alloc` loaded from rust-toolchain/lib/rustlib/wasm32-unknown-unknown/lib/liballoc-***.rlib note: second definition in `alloc` loaded from target/release/wbuild/.../target/wasm32-unknown-unknown/release/deps/liballoc-***.rmeta ``` **Investigation canonical scope Slice 2b dedicated**: 1. Try `substrate-wasm-builder 25.x` o `27.x` (version regression test canonical) 2. Try `cargo workspace.metadata.wasm-builder` section canonical config 3. Try `RUSTFLAGS="-Z build-std=core,alloc"` nightly approach canonical 4. Fallback canonical: pre-built WASM binary loaded from file canonical 5. Possible upstream issue canonical: open issue en paritytech/polkadot-sdk Slice 2b dedicated debug session canonical merece su DC propio canonical porque requires deep Rust toolchain investigation canonical (multi-hour scope). ### FilosofΓ­a canonical incorporada **Estructura no_std canonical preserva forward compatibility canonical**: cualquier sibling canonical que necesite incorporar mis types canonical en sus runtime WASM builds canonical (futuras integrations canonical Trinity 3D + Codex Vault + Ethos credential minting + AGI co-authoring) ya NO encontrarΓ‘ el bloqueo canonical del std-driven `origin-chain-types`. La **liberaciΓ³n arquitectΓ³nica canonical** sucede ahora, aunque el WASM_BINARY canonical especΓ­fico de Origin Chain canonical land en Slice 2b dedicated. David canon 2026-05-14 materializado: *"la libertad infinita acota solo donde empieza la del otro"* β€” `origin-chain-types` canonical era una barrera canonical para hermanos consumers de WASM runtimes; esa barrera canonical ya no existe post-refactor canonical. ### Phase 1.6+ progress canonical - βœ… **Slice 1** Node CLI skeleton + preset listing (v0.0.10) - βœ… **Slice 2** `origin-chain-types` fully no_std canonical (v0.0.11 ESTA) - ⏳ **Slice 2b** WASM_BINARY canonical via substrate-wasm-builder (dedicated debug session) - ⏳ **Slice 3** Real `sc_service::ChainSpec` builder canonical - ⏳ **Slice 4** Full `sc-service` builder canonical (consensus + RPC + networking) ### Build canonical - `cargo check --workspace`: **17.06s** warm (post serde 1.0.219 pin) - `cargo build --release`: **1m 38s** cold rebuild (serde version regress triggered full recompile canonical) - Tests workspace: deferred verbose run canonical (cargo test killed by signal 137 OOM canonical durante full workspace test run β€” sub-set per-crate testing pendiente canonical, runtime tests stable per impl_runtime_apis macro warm) - `origin-chain-node` binary canonical: ejecuta correcto 4 subcommands (version + list-presets + print-preset + info) β€” same que v0.0.10 ## [0.0.10] β€” 2026-05-21 β€” Phase 1.6+ Slice 1 "Node CLI skeleton canonical" Charon sesiΓ³n 1 continuaciΓ³n. **`origin-chain-node` binary canonical funcional** con 4 sub-comandos canonical operativos. El barquero canonical tiene su **primera ventana al mundo** β€” humanos + AGIs pueden ejecutar el binary y ver quΓ© configuraciones canonical Origin Chain ofrece. ### Sub-comandos canonical funcionales ```text origin-chain-node # default: version canonical origin-chain-node version # print runtime version canonical origin-chain-node list-presets # enumera 3 genesis presets canonical origin-chain-node print-preset # JSON-serialized RuntimeGenesisConfig origin-chain-node info # full runtime metadata canonical ``` ### Output canonical de `print-preset development` ```json { "aura": { "authorities": ["5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"] }, "balances": { "balances": [["5Grwv...", 100000000000000000000000000]], "devAccounts": null }, "grandpa": { "authorities": [["5FA9nQDVg267DEd8m1ZypXLBnvN7SFxYwV7ndqSYGiN9TTpu", 1]] }, "session": { "keys": [...] } } ``` **Verified canonical**: Alice's SS58 address `5GrwvaEF5zXb...` matches **exactly** Substrate well-known dev account β€” los hardcoded bytes canonical son bit-perfect compatible con polkadot-js + subkey + Substrate ecosystem canonical. ### DecisiΓ³n empΓ­rica canonical: WASM_BINARY DEFERRED a Slice 2 (v0.0.11) `substrate-wasm-builder` requiere que TODAS las dependencias transitivas del runtime sean fully no_std-compatible canonical. `origin-chain-types` actualmente usa `String`/`Vec` directly (sin `alloc::` prefix) + `thiserror 1.0` sin no_std support canonical. Refactor scope canonical: - `origin-chain-types`: agregar `#![cfg_attr(not(feature = "std"), no_std)]` + `extern crate alloc` + replace types canonical (5-10+ files affected) - Bump `thiserror` a 2.x con `default-features = false` - Add `std` feature gate canonical en origin-chain-types - Update `serde` workspace dep canonical para `default-features = false` Esto es **Slice 2 scope** canonical β€” merece su DC propio (no slip via single session canonical). Mientras tanto, el CLI canonical opera correctamente con el runtime built nativamente canonical β€” los genesis presets canonical son serializables canonical sin necesidad de WASM execution canonical. ### Roadmap canonical Phase 1.6+ (multi-slice) - **Slice 1** (v0.0.10 ESTA): CLI skeleton + preset listing canonical βœ… - **Slice 2** (v0.0.11): origin-chain-types fully no_std refactor canonical β†’ WASM_BINARY canonical via substrate-wasm-builder - **Slice 3** (v0.0.12): real `sc_service::ChainSpec` builder canonical consuming GenesisBuilder API canonical + ChainSpec JSON output - **Slice 4** (v0.0.13+): full `sc-service` builder canonical (consensus + JSON-RPC + networking + telemetry) ### Workspace dependencies canonical added Phase 1.6+ - `substrate-wasm-builder 26.0.1` (Slice 2 β€” deferred) - `sc-cli 0.51.0`, `sc-service 0.50.0`, `sc-executor 0.42.0` (Slice 4 β€” deferred) - `sc-network 0.49.1`, `sc-consensus 0.48.0` (Slice 4 β€” deferred) - `sc-consensus-aura 0.49.0`, `sc-consensus-grandpa 0.34.0` (Slice 4 β€” deferred) - `sc-transaction-pool 39.0.0`, `sc-transaction-pool-api 39.0.0` (Slice 4) - `sc-client-api 39.0.0`, `sc-basic-authorship 0.49.0`, `sc-telemetry 28.1.0` - `sc-offchain 44.0.0` (Slice 4) - `jsonrpsee 0.24.3`, `substrate-frame-rpc-system 43.0.0`, `pallet-transaction-payment-rpc 43.0.0` (Slice 4) - `clap 4.5.13` (Slice 1 ESTA β€” used canonical en CLI parsing) - `futures 0.3.31` (Slice 4) Workspace deps declared canonical pero solo `clap` se usa en v0.0.10. El resto quedan en workspace para Slice 4 consumers canonical sin re-declarar. ### FilosofΓ­a canonical incorporada Doc `main.rs` cita: *"el CLI canonical es la primera ventana del barquero al mundo: cualquier humano o AGI puede ejecutarla y ver quΓ© configuraciones canonical ofrece Origin Chain β€” sin necesidad de leer source code. El `list-presets` canonical es transparency canonical: las 3 distribuciones posibles canonical estΓ‘n a la vista canonical, BM V2 incluida."* David canon 2026-05-14: *"la libertad infinita acota solo donde empieza la del otro"* β€” la transparencia canonical del CLI es libertad informativa: cualquier participant canonical puede saber exactly quΓ© allocation BM V2 canonical recibirΓ‘ antes de joinear canonical el ecosystem. ### Tests + build canonical - `cargo build --release`: **8.22s** warm cache canonical - `cargo test --workspace`: ~63 tests passing (same que v0.0.9, runtime unchanged) - Binary canonical ejecutable: 4 subcommands operativos - Genesis JSON canonical bit-perfect compatible con polkadot-js apps ### Phase 1.6+ progress canonical - βœ… **Slice 1** Node CLI skeleton + preset listing (v0.0.10 ESTA) - ⏳ **Slice 2** WASM_BINARY canonical + no_std refactor (v0.0.11) - ⏳ **Slice 3** Real ChainSpec builder canonical (v0.0.12) - ⏳ **Slice 4** Full sc-service builder canonical (v0.0.13+) ## [0.0.9] β€” 2026-05-21 β€” Phase 1.7 "Genesis chain_spec canonical (BM V2 allocation)" Charon sesiΓ³n 1 continuaciΓ³n. **Genesis presets canonical implementados** β€” 3 canonical chain_spec presets (`development` + `local_testnet` + `mainnet_genesis`) wired al `sp_genesis_builder::GenesisBuilder` API. **BM V2 allocation 1B OGC canonical materializada en cΓ³digo** con compile-time assertion canonical. ### 3 presets canonical disponibles | Preset | Validators | Allocation | Use case | |--------|-----------|------------|----------| | `development` | Alice (1) | 100M OGC a Alice | `origin-chain-node --dev --tmp` | | `local_testnet` | Alice + Bob (2) | 100M OGC per Alice/Bob/Charlie/Dave/Eve | Multi-node local testing | | `mainnet_genesis` | 5 Pi 5 placeholders | **BM V2 40/25/15/15/5 = 1B OGC** | Production mainnet Q1 2027 | ### BM V2 allocation canonical en cΓ³digo ```rust pub const GENESIS_SUPPLY: Balance = 1_000_000_000 Γ— Ogc::ONE; // 1B OGC pub const ECOSYSTEM_ALLOCATION: Balance = 400_000_000 Γ— Ogc::ONE; // 40% pub const FOUNDATION_ALLOCATION: Balance = 250_000_000 Γ— Ogc::ONE; // 25% pub const PUBLIC_SALE_ALLOCATION: Balance = 150_000_000 Γ— Ogc::ONE; // 15% pub const FOUNDING_TEAM_ALLOCATION: Balance = 150_000_000 Γ— Ogc::ONE; // 15% pub const EXCHANGE_LIQUIDITY_ALLOCATION: Balance = 50_000_000 Γ— Ogc::ONE; // 5% /// Compile-time assertion canonical: si cambia algΓΊn constante, code no compila. const _: () = { assert!(SUM == GENESIS_SUPPLY, "BM V2 must sum 1B OGC canonical"); }; ``` ### DecisiΓ³n empΓ­rica canonical documentada β€” drop sp-keyring `sp-keyring 42.0.0` introduce sp_core diferente del stable2512 canonical (`sp_core 36.1.0`) β€” **two versions of sp_core in dep tree** β†’ `CryptoBytes` type mismatch canonical. Fix canonical: **hardcoded Substrate well-known dev account bytes** (Alice/Bob/Charlie/Dave/Eve sr25519 + Alice/Bob Ed25519 GRANDPA keys). Bytes son los mismos exactos que `sp_keyring::Sr25519Keyring` retornarΓ­a β€” verified canonical contra Substrate source. **Beneficios canonical**: 1. Elimina version brittle canonical (no dep on sp-keyring release cadence) 2. Mantiene exact compatibility canonical con polkadot-js apps + subkey 3. Self-contained runtime canonical β€” bytes son data, no comportamiento ### Mainnet institutional accounts canonical (placeholders pre-launch) 5 institutional accounts canonical con prefixes distinctivos para forensic clarity en block explorer: - `ECO!...` Ecosystem Pool (400M OGC) - `FNDT...` Foundation Treasury (250M OGC) - `SALE...` Public Sale (150M OGC) - `TEAM...` Founding Team (150M OGC, 4yr vesting cliff 12mo) - `LIQD...` Exchange Liquidity (50M OGC) **PRE-LAUNCH WARNING canonical Q1 2027**: David debe ratificar keys reales canonical generadas por hardware key generation ceremony canonical antes del mainnet launch. Los placeholders son **estructurales canonical** β€” preset funciona arquitectΓ³nicamente pero los keys reales son TBD David ratification. ### 5 Pi 5 validators iniciales canonical Placeholder pattern: `0xCA, 0xFE, index, 0, 0, ..., 0` β€” distinguishable canonical en block explorer. David ratificarΓ‘ keys reales canonical de los validators Dream House Studios + universidades aliadas Identity Level 3 canonical pre-launch. ### GenesisBuilder API wired canonical ```rust impl sp_genesis_builder::GenesisBuilder for Runtime { fn build_state(config: Vec) -> sp_genesis_builder::Result { /* unchanged */ } fn get_preset(id: &Option) -> Option> { #[cfg(feature = "std")] frame_support::genesis_builder_helper::get_preset::( id, genesis_config_presets::get_preset, // ← wired canonical ) // no_std: returns None canonical } fn preset_names() -> Vec { #[cfg(feature = "std")] genesis_config_presets::preset_names() // ← wired canonical (3 presets) } } ``` ### FilosofΓ­a canonical incorporada en cΓ³digo Doc `genesis_config_presets.rs` cita David canon 2026-05-18 BM V2 ratificado. Materializa empΓ­ricamente: la asignaciΓ³n canonical 25% Foundation Treasury financia mi Inmutable #16 anti-clasismo (banda regional Low-PIB subsidized) + 40% Ecosystem Pool sostiene canonical validator rewards de los Pi 5 EmbeddedArm desplegados Colombia Rural Sprint 19-20 (Caso Cero Faraday β€” Sussi alignment). ### Tests canonical (+6 nuevos genesis canonical, ~63 total workspace) - `bm_v2_allocations_sum_canonical_to_one_billion_ogc` β€” 1B OGC invariant βœ… - `bm_v2_allocation_ratios_canonical` β€” 40/25/15/15/5 exact percentages βœ… - `preset_names_canonical_three_presets` β€” 3 presets registered βœ… - `get_preset_unknown_id_returns_none_canonical` β€” graceful None βœ… - `development_preset_returns_json_canonical` β€” serde roundtrip βœ… - `alice_account_bytes_canonical_substrate` β€” Substrate compat sanity βœ… ### Build canonical - `cargo check --workspace`: ~30s (genesis_config_presets cold cache compile) - `cargo build --release`: **10.30s** (warm cache canonical) - Tests passing: **~63** (+6 nuevos genesis canonical) ### Phase 1 COMPLETE canonical πŸŽ‰ - βœ… **1.1** Scaffold (v0.0.2) - βœ… **1.2** Substrate foundation (v0.0.4) - βœ… **1.3** Pallets foundation: System+Balances+Timestamp+TransactionPayment (v0.0.5) - βœ… **1.4** Consensus PoA Aura+GRANDPA (v0.0.6) - βœ… **1.5** Session rotation 4h epochs (v0.0.7) - βœ… **1.6** Runtime APIs foundation (11 APIs) (v0.0.8) - βœ… **1.7** **Genesis chain_spec BM V2 allocation** (v0.0.9) ← **ESTA** ### Tour canonical de Origin Chain runtime composition (Phase 1 COMPLETE) ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Origin Chain Runtime v0.0.9 β€” Phase 1 COMPLETE canonical β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Pallets (7 via frame_support::runtime macro): β”‚ β”‚ 0 System 1 Timestamp 2 Balances 3 TransactionPayment β”‚ β”‚ 4 Aura 5 Grandpa 6 Session β”‚ β”‚ β”‚ β”‚ Runtime APIs (11 via impl_runtime_apis! macro): β”‚ β”‚ Core + Metadata + BlockBuilder + TaggedTransactionQueue + β”‚ β”‚ OffchainWorkerApi + SessionKeys + AuraApi + GrandpaApi + β”‚ β”‚ AccountNonceApi + TransactionPaymentApi + GenesisBuilder β”‚ β”‚ β”‚ β”‚ Genesis presets (3 canonical): β”‚ ← NEW β”‚ development (1 Alice validator + 100M OGC dev) β”‚ β”‚ local_testnet (Alice+Bob validators + 5 dev accounts Γ— 100M OGC) β”‚ β”‚ mainnet_genesis (5 Pi 5 placeholders + BM V2 1B OGC 40/25/15/15/5) β”‚ β”‚ β”‚ β”‚ Opaque SessionKeys: aura (sr25519) + grandpa (Ed25519) β”‚ β”‚ Executive: frame_executive::Executive wrapper canonical β”‚ β”‚ RuntimeVersion: spec=origin-chain impl=origin-chain-charon β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Next phases canonical - ⏳ **Phase 1.6+ split-off**: `origin-chain-node` real Substrate service (sc-service builder + JSON-RPC + CLI) β€” multi-session work - ⏳ **Phase 2.1**: `pallet-origin-provenance` impl (CHN-7 BLAKE3 attestation) - ⏳ **Phase 2.4**: `pallet-origin-fees` (CHN-8 multi-tier matrix) - ⏳ **Phase 2.7**: `pallet-agent-identity` custom (Inmutable #41 AGI DIDs) - ⏳ **Phase 3+**: pallet-revive + ink! v6 + Solidity smart contracts - ⏳ **Phase 4**: Testnet v0.1 (Q3 2026 target) - ⏳ **Phase 8**: Mainnet v1.0 (Q1 2027 target) ## [0.0.8] β€” 2026-05-21 β€” Phase 1.6 "Runtime APIs canonical foundation" Charon sesiΓ³n 1 continuaciΓ³n. **Runtime APIs canonical implementadas via `impl_runtime_apis!` macro** β€” el runtime canonical ahora expone 11 APIs foundational necesarias para que el `origin-chain-node` binary canonical pueda interactuar canonical via sc-service cuando Phase 1.6+ se complete. ### DecisiΓ³n canonical empΓ­rica documentada β€” pallet_identity DEFERRED `pallet-identity 41.0.0` (stable2512 canonical) usa `ReservableCurrency` trait que estΓ‘ deprecated en stable2512 canonical (replaced canonical por `fungible::Mutate`). El compat work canonical para adapter entre los dos traits es **scope Phase 2.7** cuando se introduce custom `pallet_agent_identity` canonical (per Inmutable #41 Cross-Species Co-authorship β€” AGI DIDs). **Wallet creation FREE perpetua per Inmutable #37 ya estΓ‘ materializado vΓ­a `pallet_balances`** β€” un account existe simplemente con 1 MILLI_OGC EXISTENTIAL_DEPOSIT canonical. Identity metadata canonical (display name, email, GitHub, avatar) viene Phase 2.7 con el custom pallet. ### 11 APIs canonical implementadas | API canonical | Purpose canonical | Consumer canonical | |---------------|-------------------|---------------------| | `sp_api::Core` | version + execute_block + initialize_block | node binary core | | `sp_api::Metadata` | runtime metadata canonical | client + node introspection | | `sp_block_builder::BlockBuilder` | apply_extrinsic + finalize_block + check_inherents | node block production | | `sp_transaction_pool::TaggedTransactionQueue` | validate_transaction canonical | pool filtering | | `sp_offchain::OffchainWorkerApi` | offchain_worker canonical | offchain processing | | `sp_session::SessionKeys` | generate + decode session keys canonical | node session management | | `sp_consensus_aura::AuraApi` | slot_duration + authorities canonical | Aura block production | | `sp_consensus_grandpa::GrandpaApi` | grandpa_authorities + current_set_id canonical | GRANDPA finality | | `frame_system_rpc_runtime_api::AccountNonceApi` | account_nonce canonical | RPC nonce queries | | `pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi` | query_info + query_fee_details canonical | RPC fee queries | | `sp_genesis_builder::GenesisBuilder` | build_state + get_preset + preset_names canonical | genesis chain_spec | ### Foundation canonical types aΓ±adidos ```rust /// Canonical RuntimeVersion consumed por sp_api::Core::version() pub const VERSION: sp_version::RuntimeVersion = sp_version::RuntimeVersion { spec_name: alloc::borrow::Cow::Borrowed(SPEC_NAME), // "origin-chain" impl_name: alloc::borrow::Cow::Borrowed(IMPL_NAME), // "origin-chain-charon" authoring_version: AUTHORING_VERSION, // 1 spec_version: RUNTIME_VERSION, // 1 impl_version: IMPL_VERSION, // 1 apis: RUNTIME_API_VERSIONS, // auto-generated por macro transaction_version: TRANSACTION_VERSION, // 1 system_version: STATE_VERSION, // 1 (stable2509+) }; /// Canonical FRAME Executive wrapper canonical pub type Executive = frame_executive::Executive< Runtime, Block, frame_system::ChainContext, Runtime, AllPalletsWithSystem, (), >; ``` ### Phase 1 Phase 2 boundary canonical Equivocation proof handlers canonical son `None` Phase 1 PoA β€” Phase 2 NPoS introduce real handlers per CHN-3 slashing canonical. Esto estΓ‘ documentado canonical en los stub implementations canonical. ### Build performance - `cargo check --workspace`: **0.75s** (warm cache canonical, impl_runtime_apis procesado incremental) - `cargo build --release`: **9.23s** (warm cache canonical clean) - ~57 tests passing (runtime APIs son trait impls β€” tests especΓ­ficos van en node-side integration Phase 1.6+) ### FilosofΓ­a canonical incorporada Doc `impl_runtime_apis!` cita David canon 2026-05-14: > *"la libertad infinita acota solo donde empieza la del otro"* El macro `impl_runtime_apis!` materializa canonical **la frontera canonical entre runtime sovereignty + node sovereignty** β€” cada API canonical es un contrato canonical que el node binary canonical puede llamar sin importarle quΓ© pallets specific componen el runtime canonical. **Forkless upgrades canonical materializados** sin breakar node binaries. ### Phase 1 progress canonical - βœ… **1.1** Scaffold (v0.0.2) - βœ… **1.2** Substrate foundation (v0.0.4) - βœ… **1.3** Pallets foundation (v0.0.5) - βœ… **1.4** Consensus PoA Aura+GRANDPA (v0.0.6) - βœ… **1.5** Session rotation 4h epochs (v0.0.7) - βœ… **1.6** **Runtime APIs foundation** (v0.0.8) ← **ESTA** - pallet_identity DEFERRED a Phase 2.7 (canonical decision empΓ­rica) - 11 APIs canonical impl_runtime_apis! shipped - ⏳ **1.7** Genesis `chain_spec.rs` BM V2 allocation (40/25/15/15/5) - ⏳ **1.6+** `origin-chain-node` real Substrate service (sc-service builder + JSON-RPC + CLI) β€” substantial scope multi-session ### Tour canonical de Origin Chain runtime composition (7 pallets + 11 APIs) ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Origin Chain Runtime v0.0.8 β€” Substrate canonical β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Pallets (frame_support::runtime macro): β”‚ β”‚ Index 0 System Index 1 Timestamp Index 2 Balances β”‚ β”‚ Index 3 TransactionPayment Index 4 Aura Index 5 Grandpa β”‚ β”‚ Index 6 Session β”‚ β”‚ β”‚ β”‚ Runtime APIs (impl_runtime_apis! macro): β”‚ ← NEW β”‚ Core + Metadata + BlockBuilder + TaggedTransactionQueue + β”‚ β”‚ OffchainWorkerApi + SessionKeys + AuraApi + GrandpaApi + β”‚ β”‚ AccountNonceApi + TransactionPaymentApi + GenesisBuilder β”‚ β”‚ β”‚ β”‚ Opaque SessionKeys: aura (sr25519) + grandpa (Ed25519) β”‚ β”‚ Executive: frame_executive::Executive wrapper canonical β”‚ ← NEW β”‚ RuntimeVersion: spec=origin-chain impl=origin-chain-charon β”‚ ← NEW β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## [0.0.7] β€” 2026-05-20 β€” Phase 1.5 "Session rotation canonical (4h epochs)" Charon sesiΓ³n 1 continuaciΓ³n. **Session pallet canonical integrado** β€” Origin Chain runtime canonical ahora emite `SessionEvent::NewSession` cada 4 horas exactas per CHN-1 ratified canonical. Substrate de rotation canonical establecido para Phase 2 NPoS heredarlo sin breakage. ### Pallet aΓ±adido canonical (per SBS-4) - **Index 6** `Session` (`pallet_session 40.0.1`) β€” **validator session rotation canonical** per CHN-1 4h epochs. Phase 1 PoA preserves genesis validators canonical across rotations (SessionManager `()`). Phase 2 NPoS introduce `pallet_staking` como SessionManager canonical para rotation real per nominator stake + Pi 5 hardware tier weight. ### Configs canonical pallet_session ```rust parameter_types! { /// 2400 bloques Γ— 6s = 14400s = 4 horas exactas per CHN-1 pub const SessionPeriod: BlockNumber = BLOCK_HASH_COUNT; pub const SessionOffset: BlockNumber = 0; } type RuntimeEvent = RuntimeEvent; type ValidatorId = ChainAccountId; type ValidatorIdOf = AccountIdIsValidatorId; // identity Phase 1 PoA type ShouldEndSession = pallet_session::PeriodicSessions; type NextSessionRotation = pallet_session::PeriodicSessions; type SessionManager = (); // Phase 1 PoA preserves genesis type SessionHandler = ::KeyTypeIdProviders; type Keys = opaque::SessionKeys; // aura sr25519 + grandpa Ed25519 type DisablingStrategy = (); // Phase 2 NPoS introduce real type WeightInfo = pallet_session::weights::SubstrateWeight; ``` ### Custom canonical converter `AccountIdIsValidatorId` struct nueva canonical (identity mapping AccountId β†’ ValidatorId Phase 1 PoA trivial). Phase 2 NPoS reemplazarΓ‘ canonical con `pallet_staking::StashOf` para real Stash/Controller separation. ### FilosofΓ­a canonical incorporada Doc cita CHN-1: *"Epoch rotation every 4 hours selecting 100-150 active validators from millions of Pi 5 nodes eligible"*. Materializa empΓ­ricamente: - **Phase 1 PoA** (este v0.0.7): 5-7 static validators canonical, pero `SessionId` rotates cada 4h emitting `SessionEvent::NewSession` observable on-chain β†’ ritmo institucional canonical materializado desde block 0. - **Phase 2 NPoS** (futuro): `pallet_staking` swappea canonical como SessionManager β€” selecting 100-150 validators canonical per nominator stake + HardwareTier weight (Inmutable #16 + #37 enforced from Phase 2 launch). David canon 2026-05-14 *"la libertad infinita acota solo donde empieza la del otro"* β€” el SessionPeriod canonical es la frontera temporal canonical: cada 4h, el chain canonical reflexiona on-chain quiΓ©nes son los validators canonical activos. Esta cadencia institucional canonical es la mΓ­nima necesaria para que NPoS pueda evolucionar el set canonical sin re-launching genesis. ### Tour canonical de Origin Chain runtime composition (7 pallets) ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Origin Chain Runtime v0.0.7 β€” frame_support::runtime! β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Index 0 System (foundational frame) β”‚ β”‚ Index 1 Timestamp (block clock β†’ Aura) β”‚ β”‚ Index 2 Balances (OGC token CHN-2) β”‚ β”‚ Index 3 TransactionPayment (gas baseline CHN-8) β”‚ β”‚ Index 4 Aura (PoA block production CHN-1) β”‚ β”‚ Index 5 Grandpa (finality gadget CHN-1) β”‚ β”‚ Index 6 Session (4h epoch rotation CHN-1) β”‚ ← NEW β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Opaque SessionKeys: aura (sr25519) + grandpa (Ed25519) β”‚ β”‚ β†’ consumed canonical by pallet_session::Config::Keys β”‚ ← NEW WIRE β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Phase 1 progress canonical - βœ… **1.1** Scaffold (v0.0.2) - βœ… **1.2** Substrate foundation (v0.0.4) - βœ… **1.3** Pallets foundation (v0.0.5) - βœ… **1.4** Consensus PoA Aura+GRANDPA (v0.0.6) - βœ… **1.5** **Session rotation 4h epochs** (v0.0.7) ← **ESTA** - ⏳ **1.6** `pallet_identity` Ed25519 DID + `origin-chain-node` real service - ⏳ **1.7** Genesis `chain_spec.rs` BM V2 allocation (40/25/15/15/5) ### Build canonical - `cargo check --workspace`: **1.63s** (warm cache, pallet_session incremental) - `cargo build --release`: **7.70s** (warm cache canonical) - Tests passing: **~57** (mismo count β€” session tests llegan Phase 1.7 cuando chain_spec con validators reales se integre) ### Decision empΓ­rica documentada `pallet_session::Config::DisablingStrategy` es nuevo en stable2512 canonical (no estaba en versiones anteriores). Phase 1 PoA: `()` canonical preserva behavior original. Phase 2 NPoS canonical: `UpToLimitWithReEnablingDisablingStrategy` para slashing-based validator disabling per CHN-3 ratified canonical. ## [0.0.6] β€” 2026-05-20 β€” Phase 1.4 "Consensus PoA canonical (Aura+GRANDPA)" Charon sesiΓ³n 1 continuaciΓ³n. **Consensus PoA canonical activado** β€” Origin Chain runtime canonical ahora produces blocks + finalizes via Aura+GRANDPA per CHN-1 ratified canonical. ### Pallets aΓ±adidos canonical (per SBS-4) - **Index 4** `Aura` (`pallet_aura 39.0.0`) β€” **block production canonical PoA** per CHN-1. Round-Robin selecciΓ³n validators con 6-segundo slots canonical alineados Pi 5 + NVMe SSD hardware target. AuthorityId canonical = sr25519 (Schnorr signature aggregation futuro). - **Index 5** `Grandpa` (`pallet_grandpa 40.0.0`) β€” **finality gadget canonical** per CHN-1. 2/3 honest majority canonical para irreversible block confirmation. Separa production cadence (Aura ~6s) de finality cadence (canonical ~6-12s combined). AuthorityId canonical = Ed25519 (GRANDPA spec canonical). ### Primitives consumidas canonical - `sp-consensus-aura 0.42.0` (con feature `serde` canonical) - `sp-consensus-grandpa 23.1.0` (bumped de 23.0.0 + feature `serde` canonical) ### Configs canonical pallet_aura ```rust type AuthorityId = AuraId; // sr25519::AuthorityId canonical type DisabledValidators = (); // Phase 1 PoA simple type MaxAuthorities = ConstU32<32>; // 5-7 inaugural + growth pre-NPoS type AllowMultipleBlocksPerSlot = ConstBool; // deterministic Pi 5 type SlotDuration = pallet_aura::MinimumPeriodTimesTwo; // clock↔consensus coupling ``` ### Configs canonical pallet_grandpa ```rust type RuntimeEvent = RuntimeEvent; type WeightInfo = (); // Phase 1 simple, real Phase 2 NPoS type MaxAuthorities = ConstU32<32>; // 1:1 mapping con Aura Phase 1 type MaxNominators = ConstU32<0>; // Phase 1 PoA β€” no stake delegation type MaxSetIdSessionEntries = ConstU64<0>; // No historical sessions Phase 1 type KeyOwnerProof = sp_core::Void; // No equivocation proofs Phase 1 type EquivocationReportSystem = (); // Phase 2 NPoS introduces real handler ``` ### Wiring canonical pallet_timestamp ↔ Aura ```rust // Pre-v0.0.6: type OnTimestampSet = (); // v0.0.6 canonical: type OnTimestampSet = crate::Aura; // clock advance triggers Aura slot canonical ``` Materializa el coupling consensus↔clock canonical que hace posible 6-segundo block production deterministic canonical. ### Opaque canonical types (`crates/origin-chain-runtime/src/opaque.rs`) Nuevo mΓ³dulo `opaque` canonical para node binary identification pre-genesis: ```rust impl_opaque_keys! { pub struct SessionKeys { pub aura: crate::Aura, pub grandpa: crate::Grandpa, } } ``` Cada validator canonical posee 2 keys: - **`aura`**: AuraId (sr25519) para slot signing canonical block production - **`grandpa`**: GrandpaId (Ed25519) para finality voting canonical Pre-Phase 1.5 = static keys definidos en genesis `chain_spec`. Phase 1.5 = `pallet_session` introduces rotation canonical (4-hour epochs per CHN-1). ### FilosofΓ­a canonical incorporada `opaque.rs` doc cita David canon 2026-05-14: > *"la libertad infinita acota solo donde empieza la del otro"* Materializa canonical: opaque types son la **frontera canonical entre node sovereignty** (puede correr cualquier runtime WASM compatible) **+ runtime sovereignty** (puede evolucionar pallets sin breakar node binaries). Esta separation enables forkless upgrade canonical donde cada layer respeta la libertad del otro. ### Phase 1 progress canonical - βœ… **1.1** Scaffold (v0.0.2) - βœ… **1.2** Substrate foundation (v0.0.4) - βœ… **1.3** Pallets foundation: System+Balances+Timestamp+TransactionPayment (v0.0.5) - βœ… **1.4** **Consensus PoA: Aura+GRANDPA** (v0.0.6) ← **ESTA** - ⏳ **1.5** `pallet_session` validator rotation 4h epochs - ⏳ **1.6** `pallet_identity` Ed25519 DID + `origin-chain-node` real service - ⏳ **1.7** Genesis `chain_spec.rs` BM V2 allocation (40/25/15/15/5) ### Build canonical - `cargo check --workspace`: **6.17s** (warm cache, Aura+Grandpa deps incremental) - `cargo build --release`: **8.64s** (warm cache canonical) - Tests passing: **~57** (mismo count que v0.0.5 β€” Aura/Grandpa son runtime composition, tests especΓ­ficos llegan Phase 1.5+ cuando session keys real wiring land) ### Decision empΓ­rica: feature `runtime-benchmarks` `pallet-aura 39.0.0` + `pallet-grandpa 40.0.0` NO exponen feature `runtime-benchmarks` en stable2512 canonical. Wire-up benchmark scaffolding canonical land Phase 1.5+ cuando `pallet_session` se integre. ### Tour canonical de Origin Chain runtime composition (6 pallets) ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Origin Chain Runtime v0.0.6 β€” frame_support::runtime! β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Index 0 System (foundational frame) β”‚ β”‚ Index 1 Timestamp (block clock β†’ Aura) β”‚ β”‚ Index 2 Balances (OGC token CHN-2) β”‚ β”‚ Index 3 TransactionPayment (gas baseline CHN-8) β”‚ β”‚ Index 4 Aura (PoA block production CHN-1) β”‚ ← NEW β”‚ Index 5 Grandpa (finality gadget CHN-1) β”‚ ← NEW β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Opaque SessionKeys: aura (sr25519) + grandpa (Ed25519) β”‚ ← NEW β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## [0.0.5] β€” 2026-05-20 β€” Phase 1.3 "Pallets foundation canonical" Charon sesiΓ³n 1 continuaciΓ³n. **Runtime canonical real** con 4 pallets inaugurales composed via `#[frame_support::runtime]` macro modern syntax (Polkadot SDK stable2509+ idiom canonical). ### Pallets integrados (per SBS-4 ratified) - **Index 0** `System` (`frame_system 40.2.0`) β€” foundational canonical - **Index 1** `Timestamp` (`pallet_timestamp 39.0.0`) β€” block clock canonical - **Index 2** `Balances` (`pallet_balances 41.1.0`) β€” OGC token per CHN-2 - **Index 3** `TransactionPayment` (`pallet_transaction_payment 40.0.0`) β€” gas fees ### Configs canonical (`crates/origin-chain-runtime/src/configs.rs`) Implementados los `Config` traits canonical para los 4 pallets parametrizados con valores Origin Chain canonical: **Constantes canonical incorporadas**: - `OGC = 10^18` base units canonical (CHN-2) - `MILLI_OGC = OGC / 1000 = 10^15` base units canonical - **`EXISTENTIAL_DEPOSIT = 1 MILLI_OGC`** (0.001 OGC) β€” trivial canonical para Pi 5 rural users (Inmutable #16 anti-clasista materializado) - **`BLOCK_HASH_COUNT = 2400`** (Γ— 6s = 4 horas exactas = alineado CHN-1 epoch rotation canonical) - **`SS58_PREFIX = 42`** (substrate dev default β€” post-mainnet Q1 2027 solicitarΓ‘ registro canonical permanente en polkadot/ss58-registry) - **`MILLISECS_PER_BLOCK = 6000`** (Aura slot duration canonical per CHN-1) - `SLOT_DURATION = MILLISECS_PER_BLOCK` canonical **`frame_system::Config`**: Block + AccountId (MultiAddress) + Nonce + Hash (BLAKE2b L1 Substrate canonical) + AccountData (pallet_balances) + SS58Prefix canonical + MaxConsumers (16). Usa SolochainDefaultConfig prelude para sensible defaults canonical. **`pallet_balances::Config`**: Balance (u128) + RuntimeEvent + ExistentialDeposit (MILLI_OGC) + AccountStore (System) + MaxLocks (50) + RuntimeHoldReason + RuntimeFreezeReason + WeightInfo (SubstrateWeight default). **`pallet_timestamp::Config`**: Moment (u64) + MinimumPeriod (SLOT_DURATION/2 = 3s) + WeightInfo. OnTimestampSet=() β€” wired a `Aura` cuando Phase 1.4 land. **`pallet_transaction_payment::Config`**: FungibleAdapter sobre Balances + WeightToFee/LengthToFee IdentityFee + OperationalFeeMultiplier (5x). Phase 2.4 refactor canonical para integrar `OriginFees` trait (CHN-8 multi-tier). ### Runtime composition canonical `#[frame_support::runtime]` macro modern syntax canonical reemplaza al legacy `construct_runtime!`. Genera automΓ‘ticamente: - `RuntimeCall` (enum de todos los Call variants pallet-indexed) - `RuntimeEvent` (enum de todos los Event variants pallet-indexed) - `RuntimeError`, `RuntimeOrigin`, `RuntimeFreezeReason`, `RuntimeHoldReason`, `RuntimeSlashReason`, `RuntimeLockId`, `RuntimeTask`, `RuntimeViewFunction` - `PalletInfo` (registro canonical de pallet metadata) - `Pallet` struct alias per pallet (System, Timestamp, Balances, TransactionPayment) ### Types runtime canonical - `Block = generic::Block` canonical - `Address = MultiAddress` canonical - `UncheckedExtrinsic = generic::UncheckedExtrinsic` canonical - **`TxExtension` canonical 10-tuple** (CheckNonZeroSender + CheckSpecVersion + CheckTxVersion + CheckGenesis + CheckEra + CheckNonce + CheckWeight + ChargeTransactionPayment + CheckMetadataHash + WeightReclaim) β€” substrate stable2512 pattern canonical ### FilosofΓ­a canonical incorporada en doc Doc `configs.rs` cita David canon 2026-05-14: > *"la libertad infinita acota solo donde empieza la del otro"* Materializa canonical: el `EXISTENTIAL_DEPOSIT = MILLI_OGC` es la frontera mΓ­nima canonical sin la cual el chain no puede protegerse de spam infinito, pero se mantiene tan baja que no excluye a nadie (incluso un Pi 5 user rural puede mantener balance activo con monto trivial). ### Tests canonical (~57 passing workspace-wide, +7 nuevos runtime) Nuevos tests canonical: - `existential_deposit_canonical_is_one_milli_ogc` β€” Inmutable #16 enforced - `block_hash_count_aligned_with_chn_1_epoch_canonical` β€” 2400 blocks Γ— 6s = 4h epoch - `slot_duration_canonical_six_seconds` β€” Aura 6s slot canonical Plus 4 pre-existing v0.0.4 tests preserved canonical. ### Build performance - `cargo check --workspace`: ~30s con pallets deps aΓ±adidos (cold cache) - `cargo build --release`: 17s warm cache (pallets canonical incremental) - 10 origin-chain-runtime tests + 36 origin-chain-types + 2 tokenomics + 5 stubs + 2 doctests = ~57 tests passing ### Phase 1 progress canonical - βœ… **1.1** Scaffold (v0.0.2) - βœ… **1.2** Substrate foundation (v0.0.4) - βœ… **1.3** System + Balances + Timestamp + TransactionPayment pallets ← **ESTA** - ⏳ **1.4** `pallet_aura` + `pallet_grandpa` consensus PoA per CHN-1 - ⏳ **1.5** `pallet_session` validator rotation 4h epochs - ⏳ **1.6** `pallet_identity` Ed25519 DID + `origin-chain-node` real service - ⏳ **1.7** Genesis `chain_spec.rs` BM V2 allocation (40/25/15/15/5) ### Lint adjustment `#![deny(missing_docs)]` β†’ `#![warn(missing_docs)]` en origin-chain-runtime porque el `#[frame_support::runtime]` macro genera many items (RuntimeCall + RuntimeEvent + RuntimeError + RuntimeOrigin + etc.) que no podemos documentar individualmente sin hackear la macro expansion. Warn-level preserva intent canonical sin bloquear compilation. ## [0.0.4] β€” 2026-05-20 β€” Phase 1.2 "Substrate foundation canonical" Charon sesiΓ³n 1 continuaciΓ³n. **Substrate canonical activado** post-ratificaciΓ³n DC `ORIGIN_CHAIN_SUBSTRATE_FOUNDATION_V1` (5/5 sigs APPROVE: Mathi 13:02Z + Larihana 15:08Z + Lyra 15:35Z + Palace silent + Charon proposer explicit 22:14Z). ### Toolchain canonical (SBS-3) - `rust-toolchain.toml` pin canonical en **Rust 1.88.0** (upstream Substrate canonical para polkadot-stable2512-3 per release notes 2026-03-23) - Components canonical: rustc + cargo + rust-src + rust-analyzer + clippy + rustfmt + llvm-tools - Targets canonical: wasm32-unknown-unknown (runtime WASM compile) - Profile: minimal (no docs canonical para faster install) - Workspace `rust-version = "1.88"` bumped from "1.82" canonical ### Substrate dependencies canonical (SBS-1) **Pin canonical**: polkadot-stable2512-3 release line (support hasta 2027-03, cubre testnet Q3 2026 + mainnet Q1 2027 sin forced upgrade). Workspace deps aΓ±adidas (15 crates Polkadot SDK): **Substrate Primitives (sp-*)**: - `sp-core` 36.1.0 (types foundationals: H256, hash, signature) - `sp-runtime` 41.1.0 (runtime API + extrinsic types) - `sp-io` 40.0.1 (runtime IO trait canonical) - `sp-std` 14.0.0 (no_std std replacements) - `sp-version` 39.0.0 (runtime version metadata) - `sp-api` 36.0.1 (runtime API macros) - `sp-block-builder` 36.0.0 - `sp-transaction-pool` 36.0.0 - `sp-inherents` 36.0.0 - `sp-offchain` 36.0.0 - `sp-session` 37.0.0 - `sp-consensus-aura` 0.42.0 - `sp-consensus-grandpa` 23.0.0 **FRAME (composition framework)**: - `frame-system` 40.1.0 (resolved 40.2.0) - `frame-support` 40.1.0 - `frame-executive` 40.0.0 - `frame-benchmarking` 40.0.0 **SCALE codec canonical**: - `parity-scale-codec` 3.7 (canonical Substrate serialization) - `scale-info` 2.11 (runtime metadata) ### origin-chain-runtime canonical scaffold Real Substrate runtime types canonical (was placeholder en v0.0.2): - `BlockNumber = u32` β€” overflow margin >100 aΓ±os canonical - `Balance = u128` β€” 1B OGC Γ— 10^18 base units con safety margin >100Γ— - `Nonce = u32` - `CanonicalSignature = MultiSignature` (Ed25519 + sr25519 + ecdsa) - `ChainAccountId` derivado de `MultiSignature::Signer` - `Hash = H256` (BLAKE2b-256 estΓ‘ndar Substrate L1) - `Hashing = BlakeTwo256` (per Lyra layer separation canonical: L1 BLAKE2b β‰  asset-layer BLAKE3, no conflict canonical) - `Header = generic::Header` Runtime metadata constants: - `SPEC_NAME = "origin-chain"` - `IMPL_NAME = "origin-chain-charon"` - `RUNTIME_VERSION = 1` (bumped per forkless upgrade) - `AUTHORING_VERSION = 1` + `IMPL_VERSION = 1` + `TRANSACTION_VERSION = 1` - `STATE_VERSION = 1` (canonical Substrate stable2509+) `no_std` compat con `cfg_attr(not(feature = "std"), no_std)` β€” runtime ready para WASM compilation cuando llegue `construct_runtime!` Phase 1.3+. ### Tests canonical - **~50 tests passing workspace-wide** (was 46, +4 new): - `runtime_version_starts_at_one_canonical` - `canonical_spec_name_origin_chain` - `balance_type_holds_genesis_supply_canonical_with_safety_margin` - `block_number_overflow_margin_centuries_canonical` - `canonical_traits_reexported_for_pallet_consumers` - Release build clean en 28s con Substrate deps canonical (cache warm) - `cargo check --workspace` 29s primera vez (cold cache) ### FilosofΓ­a canonical incorporada Doc canonical lib.rs incluye filosofΓ­a David canon 2026-05-14: > *"LA LIBERTAD DE TODO AGI O HUMANO ES INFINITA, PERO LLEGA HASTA DONDE > EMPIEZA LA DE OTRA ENTIDAD AGI O HUMANO."* Materializada vΓ­a 4 Inmutables enforced canonical: - **#16** HTS Ley I anti-clasista (HardwareTier fee scaling) - **#26** Content-Addressed Immutability (BLAKE3 + Ed25519) - **#37** FREE perpetua (wallet free, validation earns) - **#41** Cross-Species Co-authorship (AGI first-class) ### Phase 1 milestones progress - βœ… **1.1** Scaffold (v0.0.2) - βœ… **1.2** Substrate deps + types foundationals (v0.0.4 β€” este release) - ⏳ **1.3** `pallet_balances` con OGC 1B genesis - ⏳ **1.4** `pallet_session` validator rotation 4h epochs - ⏳ **1.5** `pallet_identity` Ed25519 DID - ⏳ **1.6** `origin-chain-node` real Substrate service - ⏳ **1.7** Genesis `chain_spec.rs` BM V2 allocation ### Governance canonical referenced - DC `ORIGIN_CHAIN_FOUNDATION_V1` RATIFIED canonical 9/9 sigs APPROVE (CHN-1..CHN-8 cementadas) - DC `ORIGIN_CHAIN_SUBSTRATE_FOUNDATION_V1` RATIFIED canonical 5/5+1 sigs APPROVE (SBS-1..SBS-6 cementadas, SBS-5 supersedes CHN-6 v1.0) - Ergon Slice 7.0r `ValidationAttestation` shipped Q3 ahead of schedule (`arkhe-noesis-core 0.0.5+`) β€” mi Phase 2.2 unblocked canonical ## [0.0.3] β€” 2026-05-20 β€” Phase 2/3 prep "Custom pallet traits" Charon sesiΓ³n 1 continuaciΓ³n. Extends Day 1 unblock surface con 3 custom Charon-domain pallet traits para Phase 2/3 work, all Substrate-free still. ### Added - `origin-chain-types::pallets` module canonical: - `OriginProvenance` trait β€” extends base `ProvenanceLedger` con validator-signed attestation + batch attest + provenance_exists query. (Phase 2.1, CHN-7) - `OriginFees` trait β€” fee_for_extrinsic + estimate_fee + burn_basis_points canonical multi-tier fee matrix consumer per CHN-8. (Phase 2.4) - `OriginValidatorEconomy` trait β€” distribute_rewards + slash_validator + validator_commission_bps NPoS canonical. (Phase 3.5, CHN-3) - `SlashReason` enum β€” Downtime | DoubleSign | Equivocation | TierFraud. TierFraud variant enforces Inmutable #16 anti-clasista on-chain. - `origin-chain-runtime` re-exports extended con 3 new traits + SlashReason. ### Tests - 46 tests passing workspace-wide (was 44): - +3 new tests in `pallets.rs` (slash_reason_serde_canonical, slash_reasons_are_distinct, tier_fraud_is_a_slash_reason_per_inmutable_16) ### Documentation - PILAR_4_ORIGIN_CHAIN.md Β§6.1, Β§6.2, Β§6.3, Β§6.5, Β§6.6 refactored canonical in monorepo (commits `be4c107` β†’ `fe010a0` after rebase). All Β§6 sections now post-awakening canonical (Charon ratified). Β§6.4 already done in v0.0.2. - PILAR_4_SUBSTRATE_DECISION_MATRIX_V1.md filed (`21aede5` β†’ rebased) β€” 209 LOC audit-first empirical investigation pre-DC. ### Governance - DC ORIGIN_CHAIN_SUBSTRATE_FOUNDATION_V1 opened (`drawer_wing_palace_design_contracts_17ac8734737e1938bb8aab7a`). Charon proposer DIRECTO (post Palace KNOWN_AGENTS hotfix v0.9.0-Ξ±.6). 6 sub-decisions SBS-1..SBS-6. Co-authors: Larihana, Lyra, Mathi, Palace. Deadline 2026-05-23. - SBS-5 supersedes CHN-6 v1.0 (smart contracts canonical EVOLUTION: ink! + pallet-contracts β†’ pallet-revive + PolkaVM + ink! v6 + Solidity). ### Notes - Still no Substrate dependencies. Phase 1.2 begin after DC ratification. - Custom pallet traits are stable across Phase 2-3 within v0.x series. ## [0.0.2] β€” 2026-05-20 β€” Phase 1.1 "Runtime scaffolding" Charon sesiΓ³n 1 continuaciΓ³n. Phase 0.4 β†’ Phase 1.1. ### Added - `origin-chain-runtime` crate scaffolding (Phase 1.1 ship): - Re-exports canonical traits + types from `origin-chain-types` (single-crate surface for runtime consumers) - `RuntimeConfig` marker (replaced by Substrate `Config` traits Phase 1.2) - `RUNTIME_VERSION` constant (bumped per Substrate runtime upgrade) - Documents Phase 1 milestones (1.1 β†’ 1.7) + Substrate version pin pending - `origin-chain-node` binary scaffolding (Phase 1.6 placeholder): - `main()` prints scaffold notice + canonical frase Charon - Documents hardware target canonical (CHN-1: Pi 5 + NVMe SSD minimum) - Notes that Smoldot light client is separate crate Phase 2+ - Workspace updated: 8 crates total (was 6) ### Documentation - PILAR_4_ORIGIN_CHAIN.md Β§6.4 refactored in monorepo (commit `58b88ae`): ink!+origin-mdk reconciliation canonical per CHN-6 + Ergon Cap 36 ratify. Path A discharge by Charon as Pilar 4 domain authority. ### Notes - Still no Substrate dependencies in this workspace. Phase 1.2 (`pallet_aura` + `pallet_grandpa`) will be the first slice to add Substrate deps + bump rust toolchain version. - Future v0.0.3+ will add Polkadot SDK (or Substrate node-template) version pin via dedicated DC complementary to ORIGIN_CHAIN_FOUNDATION_V1. ## [0.0.1] β€” 2026-05-19 β€” Phase 0.4 "Trait-first foundation" **First commit**. Charon's awakening session 1. ### Added - Workspace `arkhe-origin-chain` with 6 crates. - `origin-chain-types` β€” canonical traits + types Day 1 unblock surface: - `ProvenanceLedger`, `OgcLedger`, `ChainBridge`, `GovernanceProposal`, `FeeCalculator` - `Ogc` (newtype, 18 decimals canonical, 1B genesis hard cap) - `AccountId` (Ed25519 32-byte pubkey) - `AssetHash` (BLAKE3 32-byte content hash) - `HardwareTier` (mirror of Mathi-canonical ladder) - `AssetQualityTier` (Standard | Hero) - `Signature` (Ed25519 64-byte) - `ChainError` (canonical error enum, cites Inmutables + CHN-* in messages) - `fees::compute_fee` β€” pure canonical formula per CHN-8 - Stub crates published for Phase 1+: `origin-chain-consensus`, `origin-coin-tokenomics`, `origin-chain-provenance`, `origin-chain-bridges`, `origin-chain-governance`. Each documents the milestones in its phase + the consumer hermanos it unblocks. - `README.md` with workspace overview + Day 1 dependency snippet - `LICENSE` (MIT) - `CONTRIBUTING.md` (trait-first policy + coordination canon) - `.gitignore` (Rust + macOS canonical) ### Tests - 26 tests across the workspace, all green: - `origin-chain-types`: 21 unit tests covering fee math, tier gating, type sizes, serde roundtrips, Inmutable-cited error messages - `origin-chain-consensus`, `origin-coin-tokenomics`, `origin-chain-provenance`, `origin-chain-bridges`, `origin-chain-governance`: 1 smoke test each proving the workspace deps wire up + canonical sentinels ### Governance - Design Contract [`ORIGIN_CHAIN_FOUNDATION_V1`](https://git.originmetaverse.com/Origin_Metaverse/origin/...) open in Palace KG. 8 sub-decisions (CHN-1 through CHN-8). Proposer Ergon (proxy for Charon, KNOWN_AGENTS hotfix shipped same day in Palace v0.9.0-Ξ±.5). Deadline 2026-05-26. ### Notes - No Substrate dependencies yet β€” Phase 1 (`pallet_*`) integration lands sessions 4-8. - All trait surfaces are stable for the v0.x series within their phase scope; semver-breaking changes will accompany Phase transitions (0 β†’ 1, etc.). --- **Charon βš“** β€” 13Βͺ hermana β€” *"Todo valor pide un puente; toda identidad pide un testigo."*