Runtime canonical ahora expone 11 APIs foundational via impl_runtime_apis! macro necesarias para origin-chain-node binary interactuar via sc-service. ## Decisión canonical empírica: pallet_identity DEFERRED a Phase 2.7 pallet-identity 41.0.0 (stable2512) usa ReservableCurrency trait deprecated en stable2512 (replaced por fungible::Mutate). Compat work es scope Phase 2.7 cuando custom pallet_agent_identity introduce AGI DIDs (Inmutable #41). Wallet creation FREE perpetua per Inmutable #37 YA materializado via pallet_balances — account existe con 1 MILLI_OGC EXISTENTIAL_DEPOSIT. Identity metadata (name + email + GitHub + avatar) viene Phase 2.7. ## 11 APIs canonical implementadas - sp_api::Core (version + execute_block + initialize_block) - sp_api::Metadata (runtime metadata canonical) - sp_block_builder::BlockBuilder (apply_extrinsic + finalize_block + inherents) - sp_transaction_pool::TaggedTransactionQueue (validate_transaction) - sp_offchain::OffchainWorkerApi (offchain_worker) - sp_session::SessionKeys (generate + decode_into_raw_public_keys) - sp_consensus_aura::AuraApi (slot_duration + authorities) - sp_consensus_grandpa::GrandpaApi (grandpa_authorities + current_set_id + equivocation stubs Phase 1 PoA returning None) - frame_system_rpc_runtime_api::AccountNonceApi (account_nonce) - pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi (query_info + query_fee_details + query_weight_to_fee + query_length_to_fee) - sp_genesis_builder::GenesisBuilder (build_state + get_preset + preset_names) ## Foundation types nuevos canonical - pub const VERSION: RuntimeVersion canonical (consumed por sp_api::Core::version) - spec_name "origin-chain" + impl_name "origin-chain-charon" - apis RUNTIME_API_VERSIONS auto-generado por macro - state_version 1 (stable2509+ canonical) - pub type Executive = frame_executive::Executive<...> wrapper canonical ## Compile fix iteración EquivocationProof type signature: cambió de <Hash, Header> a <Hash, BlockNumber> canonical per trait signature stable2512. Doc clarifies Phase 1 PoA equivocation returns None — Phase 2 NPoS introduce real per CHN-3 slashing. ## Build + tests - cargo check 0.75s warm cache (impl_runtime_apis incremental) - cargo build --release 9.23s warm cache clean - ~57 tests passing ## Filosofía canonical Doc impl_runtime_apis cita David canon 2026-05-14 "la libertad infinita acota solo donde empieza la del otro" — APIs son la frontera canonical entre runtime sovereignty + node sovereignty. Forkless upgrades materializados. ## Phase 1 progress 1.1 ✅ + 1.2 ✅ + 1.3 ✅ + 1.4 ✅ + 1.5 ✅ + 1.6 ✅ (esta). Next: 1.7 genesis chain_spec.rs BM V2 allocation (40/25/15/15/5) + origin-chain-node real Substrate service multi-session work. Origin Chain runtime canonical actual: 7 pallets + 11 Runtime APIs + Executive + RuntimeVersion + opaque SessionKeys = foundation completa para node binary. Refs: CHARON_ROADMAP_V1 Phase 1.6, Decisión empírica pallet_identity defer, SBS-4 ratified, arkhe-origin-chain commit pending tag v0.0.8 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
713 lines
34 KiB
Markdown
713 lines
34 KiB
Markdown
# 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.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>,
|
||
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<SessionPeriod, SessionOffset>;
|
||
type NextSessionRotation = pallet_session::PeriodicSessions<SessionPeriod, SessionOffset>;
|
||
type SessionManager = (); // Phase 1 PoA preserves genesis
|
||
type SessionHandler = <opaque::SessionKeys as OpaqueKeys>::KeyTypeIdProviders;
|
||
type Keys = opaque::SessionKeys; // aura sr25519 + grandpa Ed25519
|
||
type DisablingStrategy = (); // Phase 2 NPoS introduce real
|
||
type WeightInfo = pallet_session::weights::SubstrateWeight<Runtime>;
|
||
```
|
||
|
||
### Custom canonical converter
|
||
|
||
`AccountIdIsValidatorId` struct nueva canonical (identity mapping AccountId →
|
||
ValidatorId Phase 1 PoA trivial). Phase 2 NPoS reemplazará canonical con
|
||
`pallet_staking::StashOf<Self>` 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<false>; // deterministic Pi 5
|
||
type SlotDuration = pallet_aura::MinimumPeriodTimesTwo<Runtime>; // 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<Header, UncheckedExtrinsic>` canonical
|
||
- `Address = MultiAddress<ChainAccountId, ()>` canonical
|
||
- `UncheckedExtrinsic = generic::UncheckedExtrinsic<Address, RuntimeCall, CanonicalSignature, TxExtension>` 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<BlockNumber, Hashing>`
|
||
|
||
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."*
|