Files
arkhe-origin-chain/contracts/origin-staking
davidherranandClaude Opus 4.8 6663dbdc0f fix(contracts): FIX-1 contract-safety + migración ink! v6 (escrow/staking/nft)
REMEDIATION_ROADMAP_V1 FIX-1 (V1-C1 reentrancy + V1-C4 zero-burn). Los 3
templates ahora COMPILAN contra ink! 6.0.0-beta.1 + tests verde (12/12).

Hallazgo (honesto): los templates se shippearon "scaffold compile-only" pero
nunca compilaron contra su versión pinneada de ink!. ink! v6 / pallet-revive es
H160-Address + U256 nativo (no AccountId + Balance, modelo viejo). Esta
migración los vuelve reales (compilando + testeados).

Migración ink! v6:
- AccountId -> Address (H160) en parties / storage / events / reads / params.
- transfer() + transferred_value() -> U256 (+ helper u256_to_balance saturante).
- derive StorageLayout en tipos de storage (EscrowState/Milestone/Stake/...).
- doctest fences sin lenguaje -> text (diagramas ASCII del lifecycle).
- workspace: contracts/* excluidos (toolchain PolkaVM/pallet-revive distinta).

FIX-1 hardening:
- CEI (Checks-Effects-Interactions): muta TODO el storage ANTES de cualquier
  transfer() -> una reentrada ve el estado final y falla sus checks. Sitios:
  escrow confirm_milestone/resolve_dispute, staking withdraw/slash,
  nft mint/transfer. Cierra V1-C1. (nft mint encontrado más allá de la lista
  del roadmap; mismo patrón explotable -> incluido).
- Burn real (V1-C4): elimina transfer([0;32]) (que no reduce emisión y ensucia
  la cuenta cero); el burn se RETIENE en el contrato (fuera de circulación),
  a barrer por el primitivo de burn del runtime -> una sola semántica, no dos.
  (staking slash, nft mint).
- Tests de guarda de estado (la C de CEI) añadidos en los 3 contratos.

Pendiente E2E (node-gated, requiere VPS + nodo pallet-revive):
- Correctitud económica native<->eth (NATIVE_TO_ETH_RATIO): asumido 1:1; debe
  validarse en nodo real antes de testnet/mainnet.
- Tests reales de reentrancy/double-spend: el env off-chain de #[ink::test] no
  modela el revert-on-Err ni la semántica de balances -> serían engañosos.
- V1-H7 (suma milestones == total_amount): no incluido en este commit.
- credential-mint + mdk-reconciliation necesitan la misma migración ink! v6.

Cross-pillar: DC ORIGIN_ATTESTATION_SIGNING_PAYLOAD_V1 abierto con Ergon
(payload postcard canónico + domain-separation FIX-3) — gate del verificador
de attestation on-chain. OAGIP-D10 (Charon identity attestation) definido a
Palace para el protocolo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:45:02 -05:00
..

origin-staking — Multi-purpose Staking Template (Slice 3.5)

Fourth foundational template del Origin Contract Atelier. Validator + Beacon + Reputation staking patterns canonical.

StakeKind variants (3 canonical)

Kind Purpose Min Stake (default) Lockup (default) APR (default)
Validator NPoS validator Phase 2 (CHN-3) 100 OGC 28 días (403_200 blocks) 8%
Beacon Pillar 6 Nexus featured visibility 100 OGC 7 días (100_800 blocks) 5%
Reputation AGI commercial reputation (BM V2 §6.4) 10 OGC 14 días (201_600 blocks) 3%

Lifecycle canonical

stake() ──► Active ──unbond_request──► Unbonding ──lockup expires──► Withdrawable
              │                              │
              ▼                              └──withdraw()──► funds + rewards
        slash_event (Tribunal) ──► Slashed (partial OR full)

Slashing canonical

Only slashing_authority (typically Tribunal Pillar 6 contract address) puede invocar slash(). Splits canonical:

  • 50% → Treasury canonical
  • 50% → Burn (per BM V2 burn matrix)

Reason hash BLAKE3 inmutable on-chain para audit trail Tribunal decisions.

Inmutables compliance

  • #16 HTS: min_stake graduated por HardwareTier — Pi 5 inclusion canonical
  • #37 Free perpetua: 5 read methods sin payment
  • #26 Content-Addressed: reason_hash BLAKE3 inmutable slash events
  • #41 AGI Cross-Species: AGI accounts stake canonical en cualquier kind (especially Reputation)

Cross-pillar coord

  • Pillar 4 Charon: validator stake compose con pallet-session NPoS Phase 2
  • Pillar 6 Mathi: beacon stake fed a Beacon visibility rotation
  • Pillar 6 Tribunal: slashing_authority = Tribunal contract
  • BM V2 Pillar 4 §6.4: AGI reputation stake/slash mechanics canonical

Tests (3 unit tests)

  • default_chn3_constructor — defaults CHN-3 NPoS Phase 2 prep
  • lockup_periods_canonical — Validator > Reputation > Beacon hierarchy
  • stake_kind_variants_distinct — enum distinction

— Charon ⚓ (Slice 3.5 SCAFFOLD 2026-05-27)