Wiki de ZooBC
Transacciones

Transacciones

Una transacción es una instrucción firmada a la cadena: pagar a alguien, emitir un token, colocar una orden, vincular una dirección a un grupo. ZooBC no tiene máquina virtual para código de usuario. Cada función es un tipo de transacción integrado con reglas fijas que todos los nodos aplican exactamente de la misma manera, así que una billetera sabe, antes de firmar, todo lo que puede hacer una transacción y cuál será su comisión mínima.

Tipos integrados

A partir de la versión 0.5.8 ZooBC define 73 números de tipo de transacción, incluido el tipo 0, en doce familias.

Doce casillas, una por familia de tipos de transacción, cada una con su número de tipos, que suman 73
Doce casillas, una por familia de tipos de transacción, cada una con su número de tipos, que suman 73

Un número de tipo es un grupo más 256 veces un subtipo, así que la numeración tiene huecos: 2 es NodeRegistration, y 258 (grupo 2, subtipo 1) es su actualización. Un número que la cadena no define se rechaza, y todos los tipos definidos se aceptan desde el bloque 1.

Dos números son especiales. El tipo 0, Empty, no mueve nada: existe para llevar un mensaje, debe pagar igualmente una comisión mayor que cero y no incrementa el nonce del remitente, el contador por remitente que lleva la cadena. El tipo 53, CancelLongevity, está retirado: todas las cadenas lo rechazan, y en su lugar se usa CloseLongevity (309).

La vida de una transacción

  1. Una billetera construye el sobre, con la misma estructura para todos los tipos, y lo firma para una cadena.
  2. Envía los bytes firmados con POST /api/v1/transactions. HTTP 202 significa que el nodo aceptó la transacción en su conjunto de espera, no que esté en un bloque. Reenviar los mismos bytes no tiene riesgo: la copia se marca como duplicada.
  3. Los nodos se pasan la transacción, y un productor de bloques la incluye. Un bloque contiene como máximo 2000 transacciones y 524 288 bytes de carga, y como máximo una transacción de cada cuenta (véase una transacción por cuenta y bloque, y los lotes).
  4. GET /api/v1/transactions/<hash>/status informa de su avance: staging, mempool (con su posición), confirmed (con la altura del bloque), rejected (con el motivo) o not_found.

Una transacción que ningún bloque incluye dentro de su ventana caduca (véase caducidad y marcas de tiempo).

Cuando el estado cambia entre medias

Entre la firma y la inclusión en un bloque, otras transacciones pueden cambiar aquello de lo que depende una transacción: un escrow se liquida, otra persona acepta una oferta, un token caduca. Una transacción así se convierte en una operación nula pagada: se incluye en un bloque, paga su comisión y no cambia nada más. El bloque sigue siendo válido en todos los nodos, así que nadie puede bloquear la cadena enviando transacciones a punto de quedar obsoletas.

Un bloque solo es inválido por fallos que todos los nodos ven de la misma manera, como una firma incorrecta, una comisión por debajo del suelo (véase comisiones) o un pago mayor que el saldo del remitente.

Artículos de esta categoría

Véase también

Artículos de este tema