Skip to content
← Volver al mercado

Cómo funciona el mercado

Explicación centrada en la gobernanza. Cada afirmación de confianza de abajo es reducible a un trozo concreto de código on-chain o de código abierto.

Ciclo de vida de la compra

Cinco estados. Sin transiciones ocultas.

  1. 1. Bloqueo pendiente

    Elegiste una plantilla. El servidor construyó una transacción de bloqueo sin firmar. Todavía no hay nada on-chain.

  2. 2. Bloqueado

    Tu wallet firmó y envió la tx de bloqueo. Tus ADA están ahora en la dirección del script. El servidor no tiene control sobre ellos.

  3. 3. Instanciado

    Creaste un espacio a partir de la plantilla. Siembra los documentos, diagramas y nodos GTT declarados en el manifiesto.

  4. 4. Validado

    A medida que llevas las capacidades GTT a `active`, la plataforma registra el progreso. Cuando todos los slugs requeridos están en verde, puedes disparar la liberación.

  5. 5. Liberado — o reembolsado

    Liberación: tú + la plataforma co-firmáis, el vendedor cobra, la plataforma toma su comisión. Reembolso: tras el plazo, firmas tú solo y recuperas cada lovelace.

El contrato inteligente

El código fuente completo del validador se entrega en el repo en `contracts/validators/escrow.ak`. Es pequeño y deliberadamente legible. Datos clave:

  • Dos redeemers: `Release` y `Refund`. Nada más gasta el script.
  • El Datum fija comprador, vendedor, plataforma, precio, hash de la plantilla, id de compra, plazo y bps de comisión — todo establecido en el momento del bloqueo.
  • El cálculo de comisión es entero (`precio * bps / 10000`). Sin redondeo en coma flotante y sin matemática off-chain que el código on-chain no pueda verificar.
  • El script ignora todo lo que no sea `Spend`. Sin hooks de gobernanza, sin migraciones, sin claves admin.

Reglas de liberación

Ambas condiciones deben cumplirse on-chain para que una tx de liberación gaste la UTxO de bloqueo:

  • Comprador Y plataforma deben firmar (`extra_signatories` contiene ambos hashes de clave).
  • Los importes de salida cumplen la división de comisión: el vendedor recibe ≥ `precio − comisión`, la plataforma recibe ≥ `comisión`.

La regla de firma de la plataforma (off-chain)

El validador permite a la plataforma co-firmar, pero la plataforma misma impone cuatro salvaguardas antes de producir una firma. Viven en `src/lib/cardano/escrow/platform-signer.ts` y son visibles en el repo:

  1. El estado de la compra es `locked` — nada más, ni `released` ni `refunded`.
  2. `acceptance.acceptanceReachedAt` está fijado — cada slug GTT requerido ha llegado a `active`.
  3. La tx paga al wallet del vendedor declarado por el comprador y al wallet de la plataforma — sin desvíos a terceros.
  4. El `template_hash` del datum coincide con el hash de manifiesto registrado de la compra — sin deriva de hash entre el bloqueo y la liberación.

Reglas de reembolso

El camino de reembolso es unilateral — solo comprador. La plataforma no puede bloquearlo, retrasarlo ni intermediarlo.

  • La tx es firmada solo por el comprador.
  • El límite inferior del rango de validez es igual o posterior a `validation_deadline` (aplicado on-chain).
  • El importe bloqueado completo vuelve a la dirección del comprador.
Si esta plataforma desaparece mañana, cada compra bloqueada podrá seguir siendo recuperada por su comprador tras el plazo. Eso es una propiedad del validador, no de la plataforma.

Anonimización de plantillas

Las plantillas son exportaciones con allow-list de un espacio — cada colección se filtra contra un allow-schema específico por colección, y un verificador de patrones bloquea fugas de PII antes de publicar. Sin allow-list, sin publicación.

  • Los allow-schemas viven en `src/lib/server/template-export/schemas.ts` — uno por colección, escritos a mano, sin defaults comunes.
  • El verificador de patrones escanea cada manifiesto emitido en busca de correos, direcciones de wallet, ids de base de datos, JWTs, UUIDs, teléfonos y firmas de API keys.
  • Los ids de usuario se reasignan determinísticamente a placeholders por rol (`role:responsible_1`) dentro del manifiesto. El mapa de placeholders en sí nunca se exporta.
  • La identidad del creador es opt-in. Por defecto es totalmente anónima.

Divulgaciones de la plataforma

Comisión de plataforma

La plataforma toma un porcentaje fijo del precio de venta, establecido por instancia mediante `MARKETPLACE_PLATFORM_FEE_BPS`. La tasa va incrustada en el Datum on-chain en el momento del bloqueo — ves exactamente lo que pagas antes de firmar.

La plataforma como co-firmante

La plataforma mantiene una clave Ed25519 cuyo hash de clave pública está incrustado en cada Datum de bloqueo. Esa clave se guarda en un almacén de secretos gestionado por el operador. Solo puede co-firmar una liberación — no puede reembolsar, retirar ni modificar el Datum.

Por qué la plataforma no puede manipular el sistema

La liberación requiere la firma del comprador. La plataforma no puede pagarse a sí misma sin tu consentimiento. El reembolso requiere el plazo. La plataforma no puede retrasar tu reembolso más allá de eso. No son políticas — son invariantes on-chain.