El sobre de la transacción
Toda transacción de ZooBC, sea cual sea su tipo, es una única cadena de bytes con la misma estructura, llamada el sobre. Los datos propios del tipo van en un solo campo, el cuerpo; todo lo demás (quién envía, quién recibe, la comisión, la hora, un mensaje opcional) lo comparten los 73 tipos. Conocer el sobre basta para leer, poner precio y comprobar cualquier transacción.
Los campos en orden
| Campo | Tamaño | Notas | |
|---|---|---|---|
| tipo | 4 bytes, little-endian | el número de [[transactions | tipo de transacción]] |
| versión | 1 byte | 1, 2 o 3 | |
| marca de tiempo | 8 bytes | segundos Unix | |
| remitente | una dirección | ||
| destinatario | una dirección | o el marcador vacío de 4 bytes 02 00 00 00 | |
| comisión | 8 bytes | en unidades atómicas | |
| supervivencia | 8 bytes | versiones 2 y 3 | |
| caducidad | 4 bytes | versión 3 | |
| cuerpo | longitud de 4 bytes y luego el cuerpo | como máximo 65 536 bytes | |
| parte de escrow | variable | o el marcador vacío de 4 bytes | |
| mensaje | longitud de 4 bytes y luego el mensaje | opcional | |
| firma | variable | siempre al final |
Una dirección es un número de tipo de 4 bytes seguido de una carga: 36 bytes en total para una cuenta ZBC_ nativa, 24 para una cuenta de Ethereum (véase cuentas y direcciones). Cada cantidad es un número entero de unidades atómicas, y 1 ZBC son 100 000 000 de ellas.
Lo que no está
No hay límite de gas, porque no hay ninguna máquina virtual que medir: cada tipo es una regla fija, y su precio se conoce antes de firmar. No hay campo de id de cadena: en su lugar, la firma cubre el hash del bloque génesis de la cadena (véase firmar una transacción). Y no hay campo de nonce: la cadena guarda el nonce de cada remitente en su propio estado.
Versiones
- La versión 1 no tiene campo de supervivencia.
- La versión 2 añade el campo de supervivencia.
- La versión 3 añade además el campo de caducidad, que fija cuánto tiempo sigue siendo válida la transacción (véase caducidad y marcas de tiempo).
Una transacción de versión 1 que indica un depósito de supervivencia se rechaza, y también una de versión 1 o 2 que indica una caducidad: sus bytes no tienen sitio para ello.
Supervivencia, cuerpo, parte de escrow y mensaje
- La supervivencia es 0 o al menos 10 000 000 unidades atómicas (0.1 ZBC). Abre un registro de longevidad que mantiene la transacción almacenada después de la poda normal, y nunca se reembolsa (véase pagar por conservar datos (longevidad)). Una transacción que lleva en su mensaje una transacción firmada de otra cadena no puede pagarla.
- El cuerpo contiene como máximo 65 536 bytes, organizados según define su tipo.
- La parte de escrow solo pueden llevarla SendZBC y TransferToken; convierte el pago en un escrow.
- El mensaje contiene como máximo 256 bytes cuando va en claro, sin ningún byte cero; como máximo 320 bytes cuando va cifrado (un mensaje cifrado empieza por "ZBE1"); y como máximo 4096 bytes cuando lleva una transacción nativa de otra cadena, de Ethereum, Solana o Bitcoin.
El campo de la comisión
La comisión se declara en unidades atómicas y debe ser al menos el suelo de la transacción: una comisión base por acción de 0.025 ZBC multiplicada por la escala de comisiones que votan los nodos registrados, más un cargo por los bytes del cuerpo y del mensaje que guarda cada nodo registrado. Como el suelo solo depende de la transacción y de los parámetros de la cadena, una billetera puede pedírselo a cualquier nodo antes de firmar, con GET /api/v1/blockchain/estimate-fee.
Una comisión por debajo del suelo se rechaza, y un bloque que lleve una es inválido. Lo que se declare por encima del suelo vuelve al pagador en el mismo bloque, así que pagar de más por error no cuesta nada. El tipo Empty, que no mueve nada, debe pagar igualmente una comisión mayor que cero, mientras que unos pocos deberes que los nodos registrados cumplen para la red, como las pruebas de almacenamiento y las atestaciones de eventos, deben declarar una comisión de exactamente 0. Comisiones explica la fórmula, el reembolso y adónde van las comisiones.