Wiki de ZooBC
Transacciones

Disparadores y atestaciones

Un disparador es un pago condicional que retiene la cadena: ZBC bloqueados ahora y liberados a un destinatario más tarde, cuando se cumple una condición. La condición es una altura de bloque o un evento del mundo exterior, como el resultado de un partido, que los nodos registrados confirman mediante atestaciones. Los disparadores permiten bloqueos temporales, regalos diferidos y pagos según resultados del mundo real sin ningún código de contrato.

Crear un disparador

Una transacción CreateTrigger (tipo 15) indica un destinatario, un importe y una condición. Los disparadores solo llevan ZBC. Hay dos tipos de condición:

  • un disparador por altura nombra una altura de bloque, que debe estar en el futuro. Llega un bloque cada 15 segundos, así que una altura funciona como una fecha: un día después son 5760 bloques;
  • un disparador por evento nombra un id de evento, y se activa cuando los nodos registrados resuelven ese evento; queda pendiente hasta entonces o hasta que se cancela. También lleva una altura de activación, que no se usa.

El importe sale de inmediato del saldo del creador y queda bloqueado. Hasta que el disparador se activa, el creador puede recuperar el dinero con CancelTrigger (tipo 16). Un disparador paga una sola vez: no ejecuta ningún script y no se repite.

Tres salidas de una caja de ZBC bloqueados: se alcanza la altura de bloque H, dos tercios del registro coinciden en un valor, y CancelTrigger antes de que se active, que devuelve el dinero al creador
Tres salidas de una caja de ZBC bloqueados: se alcanza la altura de bloque H, dos tercios del registro coinciden en un valor, y CancelTrigger antes de que se active, que devuelve el dinero al creador

Atestaciones: cómo se resuelven los eventos

Una blockchain no puede leer el mundo exterior por sí sola: si cada nodo consultara una página web, podrían ver respuestas distintas y discrepar. ZooBC usa en su lugar atestaciones.

  • Un nodo registrado envía un AttestEvent (tipo 17) que lleva un id de evento y un valor, cada uno de como máximo 4096 bytes.
  • Cada nodo tiene un voto por evento: una atestación más reciente sustituye a la anterior. Solo cuentan las atestaciones de nodos registrados.
  • Al final de cada bloque, la cadena cuenta las atestaciones de cada evento sin resolver. Cuando dos tercios del registro activo atestiguan exactamente el mismo valor (8 de 11 plazas, por ejemplo), ese valor pasa a ser el resultado del evento, de forma definitiva.
  • En ese mismo bloque, todos los disparadores pendientes que nombran el evento pagan a su destinatario.
Once nodos, ocho de ellos con la misma tarjeta de valor; el recuento supera los dos tercios, el disparador se abre y paga a su destinatario, y el resultado queda registrado de forma definitiva
Once nodos, ocho de ellos con la misma tarjeta de valor; el recuento supera los dos tercios, el disparador se abre y paga a su destinatario, y el resultado queda registrado de forma definitiva

Una atestación es un deber sin comisión: declara una comisión de exactamente 0 y sale de la cuenta propia del nodo (véase comisiones). Ninguna decisión de todo el registro se resuelve mientras el registro esté por debajo de su mínimo de max(3, min_registry_size) plazas y propietarios distintos, que son 7 en mainnet (véase reglas de los dos tercios).

Ids de evento reservados

Las mismas atestaciones transportan otras decisiones de la red, bajo prefijos reservados del id de evento. Cada una se resuelve en su propio paso, no en el paso de los disparadores:

PrefijoSe usa para
ZBRDEP1:los depósitos del puente (véase puente y las monedas envueltas)
ZBWDR1:los retiros del puente
ZBCGOV1:la gobernanza
ZBCREL1:los votos sobre versiones (véase versiones y actualizaciones)

Con otras funciones

  • El pago de un disparador es un abono entrante, así que pasa por la política de reparto del destinatario (véase políticas de reparto y de transacciones).
  • La política de transacciones de un destinatario solo se comprueba frente al propio CreateTrigger; la liberación sigue llegando a un destinatario que más tarde se excluya de los pagos.
  • En una política de transacciones, AttestEvent pertenece a la categoría Bridge.

Para pagos que se repiten, véase transferencias programadas; para dinero que se libera minuto a minuto, véase pagos líquidos (flujos).

Véase también