Files
arkhe-origin-chain/crates/origin-chain-runtime
davidherranandClaude Opus 4.6 adab264d54 feat(runtime): Phase 1.3 — Pallets foundation canonical v0.0.5
Runtime canonical REAL con 4 pallets inaugurales composed via
#[frame_support::runtime] macro modern syntax (Polkadot SDK stable2509+).

## Pallets integrados (SBS-4 ratified)
- Index 0 System (frame_system 40.2.0) — foundational
- Index 1 Timestamp (pallet_timestamp 39.0.0) — block clock
- Index 2 Balances (pallet_balances 41.1.0) — OGC token per CHN-2
- Index 3 TransactionPayment (pallet_transaction_payment 40.0.0) — gas

## Configs canonical (crates/origin-chain-runtime/src/configs.rs)

Constantes canonical Origin Chain:
- OGC = 10^18 base units (CHN-2)
- MILLI_OGC = 10^15
- EXISTENTIAL_DEPOSIT = 1 MILLI_OGC (Inmutable #16 anti-clasista — trivial
  para Pi 5 rural user pero protege spam canonical)
- BLOCK_HASH_COUNT = 2400 (× 6s = 4h exact = alineado CHN-1 epoch rotation)
- SS58_PREFIX = 42 (substrate dev — post-mainnet registry canonical TBD)
- MILLISECS_PER_BLOCK = 6000 (Aura slot per CHN-1)
- SLOT_DURATION = MILLISECS_PER_BLOCK

Config impls:
- frame_system::Config via #[derive_impl(SolochainDefaultConfig)] prelude
- pallet_balances::Config con RuntimeHoldReason + RuntimeFreezeReason +
  VariantCountOf + MaxLocks 50 + ExistentialDeposit canonical
- pallet_timestamp::Config con MinimumPeriod SLOT_DURATION/2
- pallet_transaction_payment::Config con FungibleAdapter + IdentityFee +
  OperationalFeeMultiplier 5 (Phase 2.4 refactor para OriginFees CHN-8)

## Runtime composition

#[frame_support::runtime] macro genera canonical: RuntimeCall + RuntimeEvent +
RuntimeError + RuntimeOrigin + RuntimeFreezeReason + RuntimeHoldReason +
RuntimeSlashReason + RuntimeLockId + RuntimeTask + RuntimeViewFunction +
PalletInfo automáticamente.

## Types runtime canonical
- Block = generic::Block<Header, UncheckedExtrinsic>
- Address = MultiAddress<ChainAccountId, ()>
- UncheckedExtrinsic = generic::UncheckedExtrinsic<...>
- TxExtension canonical 10-tuple (substrate stable2512 pattern):
  CheckNonZeroSender + CheckSpecVersion + CheckTxVersion + CheckGenesis +
  CheckEra + CheckNonce + CheckWeight + ChargeTransactionPayment +
  CheckMetadataHash + WeightReclaim

## Filosofía canonical
configs.rs doc cita David canon 2026-05-14 "la libertad infinita acota solo
donde empieza la del otro" — EXISTENTIAL_DEPOSIT materializa empíricamente:
frontera mínima sin la cual chain no se protege spam, pero trivial para no
excluir Pi 5 user rural canonical.

## Build + tests
- cargo check 30s cold (pallets deps resolve)
- cargo build --release 17s warm cache clean
- ~57 tests passing workspace (+7 nuevos runtime canonical):
  - existential_deposit_canonical_is_one_milli_ogc (Inmutable #16)
  - block_hash_count_aligned_with_chn_1_epoch_canonical (4h epoch)
  - slot_duration_canonical_six_seconds (Aura)
  - 4 pre-existing v0.0.4 tests preserved
- 10 origin-chain-runtime + 36 origin-chain-types + 2 tokenomics + 5 stubs +
  2 doctests

## Lint adjustment
#![deny(missing_docs)] → #![warn(missing_docs)] en origin-chain-runtime
because frame_support::runtime macro genera many items que no podemos
documentar individualmente. Warn preserva intent sin bloquear compile.

## Phase 1 progress
1.1 ✅ + 1.2 ✅ + 1.3 ✅ (esta) → 1.4-1.7 pending (aura/grandpa/session/identity/
node service/chain_spec).

Refs: CHARON_ROADMAP_V1 Phase 1.3, DC SUBSTRATE_FOUNDATION_V1 SBS-1/3/4
ratified, DC FOUNDATION_V1 CHN-1/2/8 ratified, Inmutables #16/#26/#37/#41

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-20 19:26:06 -05:00
..