Commit Graph
3 Commits
Author SHA1 Message Date
davidherranandClaude Fable 5 0d56e0bcbf feat(ink): escrow auto-release (C.2) + NFT modelo delegación documentado (C.1)
Decisiones C de David (2026-07-04):

ESCROW — Opción 2 (auto-release por tiempo, el tiempo como juez determinista):
El audit encontró [HIGH] que si alguien depositaba pero nunca marcaba un
milestone, los fondos quedaban ATRAPADOS (solo salían por disputa+árbitro), y los
campos auto_release_blocks/last_release_block eran código MUERTO. Fix: nueva
`claim_auto_release` (permisionless) que, tras `auto_release_blocks` sin actividad
ni disputa, libera el remanente al beneficiario (menos fee) y cierra el escrow.
`deposit()` arranca el reloj. CRÍTICO para la economía M2M: una AGI que contrata a
otra no queda en limbo porque alguien olvidó un hito. El depositor disconforme
levanta disputa ANTES del vencimiento. +test E2E (ink v6). Campos ya no muertos.

NFT — Opción 1 (delegación ERC-721 estándar, modularidad ADR-0057): el audit
marcó que un spender aprobado puede mover el token con pago cero. NO es bug — es
el estándar Web3 ("si no confías, no apruebes"). La venta con precio pactado +
split 91/9 vive en un contrato de MARKETPLACE SEPARADO (acoplar rompería los NFTs
al actualizar reglas de venta). Documentado el modelo en `transfer`. Sin cambio de
código. Contratos: escrow 6 tests, nft 4 tests verde.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 21:30:13 -05:00
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
davidherran f4f46767fe feat(contracts): v0.0.42 — Slice 3.2 origin-nft-mint template SCAFFOLD (BM V2 91/9) 🎉
Ship Slice 3.2 v0.0.42 — first contract template foundational del Origin Contract
Atelier propuesto (Capacidad #10 OCC David 2026-05-27). origin-nft-mint contract
template ink! v6 implementing BM V2 ratificado 2026-05-18 split 91% creator / 9%
Treasury + transfer royalty 5% + Treasury burn 20% canonical.

Cambios:
- contracts/ nueva sub-workspace separate del runtime (toolchain divergence:
  ink! v6 needs wasm32-unknown-unknown + cargo-contract v6 + size-optimized
  release profile, vs runtime workspace wasm32v1-none + production speed).
- contracts/README.md doc overall sub-workspace + templates roadmap + Contract
  Atelier integration explained.
- contracts/origin-nft-mint/Cargo.toml: ink! 6.0.0-beta.1 + scale codec aligned
  con runtime workspace pin canonical + size-optimized release profile.
- contracts/origin-nft-mint/lib.rs: full ink! v6 contract source 600+ LOC:
  * Storage canonical: owner + treasury + 8 config parameters + 6 mappings
  * 5 events canonical (Minted, Transferred, Approved, PauseToggled, +)
  * 12 error variants canonical (InsufficientPayment, MaxSupplyReached, etc.)
  * 2 constructors (new + default_bm_v2 con BM V2 ratified defaults)
  * 13 messages canonical: 9 reads (free per Inmutable #37) + 4 writes
    (mint payable + transfer payable + approve + emergency_pause/unpause)
  * 3 unit tests canonical: default_bm_v2 invariants + invalid_share_split
    rejected + excessive_royalty rejected
- contracts/origin-nft-mint/README.md: deploy instructions + Inmutables
  compliance table + parameters config UI exposure docs + cross-pillar
  integration diagram (Pillar 2 OMC + 4 Chain + 6 Nexus + 7 Creator + Atelier).

Inmutables compliance compile-detect (5 enforced canonical):
- #16 HTS anti-clasista: mint_fee_base modulated por HardwareTier Phase 3.x
- #25 Seeds Hosting Non-Gatekept: NFT ownership NO gates base world access
- #26 Content-Addressed Immutability: BLAKE3 asset_hash required (zero rejected)
- #37 Free perpetua: reads gratis sin payment (9 read methods sin payable)
- #41 AGI Cross-Species: AccountId32 sin distinction Human/AGI canonical

Cross-pillar wire canonical Phase 3.x maduración:
- Pillar 2 OMC Marihan: marketplace 91/9 split enforcement compile-detect
- Pillar 4 Origin Chain Charon: deploy vía pallet-revive Index 11
- Pillar 6 Nexus Mathi: Beacon stake + ONS naming opcional
- Pillar 7 Creator Larihana: hosting payments wire post NFT mint

Verificación:
- cargo check --workspace runtime clean (213 tests verde no regression contracts/
  sub-workspace separate)
- contracts/origin-nft-mint compilation pending cargo-contract v6 install
  authorization (precedent Slice 2e brew LLVM pattern). Source 100% ready.

Charon Atelier propuesta filed conversational con David 2026-05-27 — Capacidad
#10 OCC visual policy designer + Charon copilot + templates library. Roadmap
Q2-Q3 2027 MVP + Q4 2027 governance queue + Q1 2028 full Atelier + Q2-Q3 2028
public version originmetaverse.com/contracts community creators.

Próximo Ship Slice 3.3 v0.0.43: origin-escrow contract template canonical
(multi-party + time-locked + dispute-enabled via Pillar 6 Tribunal integration).

⚓ Path A continúa zarpando — Slice 3.2 SCAFFOLD shipped + Contract Atelier
propuesta David visión arquitectónica canonical. La nave smart contracts armada.

🤖 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 09:00:33 -05:00