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>
This commit is contained in:
1 parent
114721c24a
commit
0d56e0bcbf
2 files changed
+115
-1
No files matched your search
@@ -492,6 +492,17 @@ mod origin_nft_mint {
|
||||
/// Transfer canonical de token con sale_price (secondary sale).
|
||||
/// Royalty 5% canonical paid al original creator from sale_price.
|
||||
///
|
||||
/// **Modelo de delegación (David Opción C.1, 2026-07-04, audit ultra):**
|
||||
/// el guard es `caller == owner || approved`, semántica ERC-721 ESTÁNDAR —
|
||||
/// una aprobación ES delegación total ("si no confías, no apruebes"). Que un
|
||||
/// spender aprobado pueda mover el token con `sale_price = 0` NO es un bug:
|
||||
/// es el estándar de oro Web3. La lógica de VENTA con precio pactado + la
|
||||
/// división 91/9 (creador/tesorería) NO vive aquí: vivirá en un contrato de
|
||||
/// **marketplace SEPARADO** (disciplina de costuras de traits, ADR-0057) —
|
||||
/// meterla aquí acoplaría el NFT base al marketplace y romper los NFTs al
|
||||
/// actualizar las reglas de venta. `sale_price` aquí es un pago opcional que
|
||||
/// fluye al vendedor + royalty; el precio-obligatorio es cancha del marketplace.
|
||||
///
|
||||
/// Flow canonical:
|
||||
/// 1. Verify paused == false
|
||||
/// 2. Verify token exists canonical
|
||||
|
||||
Reference in new issue
Block a user