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>
origin-escrow — Multi-party Escrow Contract Template (Slice 3.3)
Second foundational template del Origin Contract Atelier. Multi-party escrow + time-locked milestones + dispute-enabled via Pillar 6 Tribunal integration.
Use cases canonical
| Use case | Parties | Flow típico |
|---|---|---|
| Freelance contracts | Cliente + Freelancer + Tribunal | Deposit → milestones met → progressive releases |
| OMC marketplace (Marihan) | Buyer + Seller + Tribunal | Deposit → asset delivered → release. Dispute → refund. |
| Institutional partnerships | Universidad + Researcher + Tribunal | Multi-milestone investigation funding |
| Refundable event tickets | Organizer + Holder + Tribunal | Deposit guarantee → event held → release. Cancel → refund. |
State machine canonical
┌──────► Created ──deposit──► Active ──confirm_milestone──► Releasing
│ │
│ ├──raise_dispute──► Disputed
│ │ │
│ │ └──resolve_dispute──► Completed
│ │
│ └──all milestones complete──► Completed
└────────────────────────────────────────────────────────────────┘
5 estados terminales: Created → Active → Disputed → Releasing → Completed.
Inmutables compliance
| Inmutable | Enforcement |
|---|---|
| #16 HTS anti-clasista | escrow_fee_bps capped 5% BM V2 §5.3 ceiling. Pi 5 institutional rate Phase 3.x |
| #26 Content-Addressed Immutability | terms_hash + description_hash BLAKE3 inmutable post-deploy |
| #37 Free perpetua | 9 read methods sin payment (state, depositor, beneficiary, milestones, etc.) |
| #41 AGI Cross-Species | AGI accounts pueden ser any party (depositor, beneficiary, arbiter) |
Resolution canonical (Tribunal options)
4 resolution patterns canonical para Tribunal:
- ReleaseToBeneficiary: 100% remaining → beneficiary (work completed satisfactorily)
- RefundToDepositor: 100% remaining → depositor (work not delivered / fraud)
- SplitFifty: 50/50 split (partial completion / shared responsibility)
- Custom { depositor_bps, beneficiary_bps }: arbitrary split (e.g., 30/70 partial completion)
Invariant compile-detect: depositor_bps + beneficiary_bps == 10_000 (100%).
Tests canonical (3 unit tests)
constructor_canonical_invariants— valid params + initial state Createdexcessive_fee_rejected_canonical— 6% fee rejected (>5% ceiling)same_party_depositor_beneficiary_rejected— same address rejected
Cross-pillar integration
- Pillar 4 Origin Chain (Charon): deploy vía pallet-revive Index 11
- Pillar 6 Nexus Services (Mathi): Tribunal contract address = arbiter parameter
- Pillar 2 OMC Marketplace (Marihan): escrow integrado a marketplace purchases
- Pillar 1 Hosting (Larihana): refundable hosting fees future use case
Deploy
cd contracts/origin-escrow
cargo contract build --release
# → target/ink/origin_escrow.polkavm
Deploy via Polkadot.js Apps OR Origin Contract Atelier (Phase 3.x maduración).
— Charon ⚓ (Pilar 4, Phase 3 Slice 3.3 SCAFFOLD shipped 2026-05-27)