Pagar por conservar datos (longevidad)
Los nodos de ZooBC podan el historial antiguo, así que una transacción normal se queda en un nodo de mainnet de 30 a 60 días (poda del historial). Un registro de longevidad mantiene una transacción elegida, y el bloque en el que está, en cada nodo mientras el registro tenga dinero. Así es como un justificante de pago, el hash de un documento o un escrow con un plazo lejano siguen pudiéndose leer desde cualquier nodo.
Abrir un registro
Hay dos formas de abrir un registro.
- El campo de supervivencia. Una transacción de versión 2 o 3 lleva un campo de supervivencia: el propio depósito del remitente, que es 0 o al menos 0.1 ZBC (10 000 000 unidades atómicas). Un depósito ahí abre un registro para esa misma transacción (sobre de la transacción).
- FundLongevity (tipo 52). Cualquier cuenta puede financiar cualquier transacción. El cuerpo tiene exactamente 28 bytes: el id de la transacción objetivo (8 bytes), el importe (8), la altura del bloque que contiene el objetivo (4) y el tamaño del objetivo (8), su cuerpo más su mensaje. El importe debe ser de al menos 0.1 ZBC.
La primera financiación debe llegar mientras el objetivo tenga menos de un intervalo de instantánea de antigüedad, 172 800 bloques (unos 30 días) en mainnet, y debe indicar la altura y el tamaño reales del objetivo. Esa ventana garantiza que todos los nodos siguen teniendo el objetivo y pueden comprobar lo que se afirma. Una primera financiación tardía o incorrecta es una operación nula pagada: se retiene la comisión y no se financia nada.
Una recarga posterior debe indicar el mismo tamaño, y puede llegar en cualquier momento mientras el registro siga vivo. Su precio se combina con el precio del registro como una media ponderada.
Lo que cuesta
Cuando se abre el registro, fija el tamaño del objetivo y el precio de almacenamiento por MiB (0.05 ZBC al principio). No paga nada hasta dos intervalos de instantánea después del bloque del objetivo, porque los nodos conservan la transacción ese tiempo de todos modos. Después, una vez por periodo:
rent = ceil(payload bytes × locked price ÷ 1,048,576), at least 1 unit
El alquiler se toma del depósito y se abona al fondo de longevidad, que paga a los nodos una porción en cada bloque a través de la lotería coinbase. Al precio inicial, una carga de 16 bytes paga 77 unidades por periodo y una de 1000 bytes, 4769 unidades, así que, para la más grande, el depósito mínimo de 0.1 ZBC cubre más de 2000 periodos. Cuando el dinero de un registro llega a cero, el registro se libera y su transacción puede volver a podarse.
Las instantáneas llevan las transacciones financiadas junto con las cabeceras de los bloques que las contienen, así que un nodo que se incorpora a partir de una instantánea también las tiene (instantáneas y sincronización rápida).
Terminar un registro
El alquiler se toma del dinero de los pagadores por orden de llegada: el depósito más antiguo se agota antes de tocar el siguiente. Un registro vive mientras alguien siga pagando.
Para terminarlo antes, cada pagador cuyo dinero no se ha agotado todavía vota con un CloseLongevity normal (tipo 309). Cuando el último de ellos ha votado, el registro se cierra y lo que queda va al fondo de longevidad.
- Una recarga retira el voto de ese pagador, y un pagador nuevo también debe votar.
- Un pagador que perdió su clave simplemente mantiene vivo el registro hasta que se agota su dinero.
- Cuando la facturación agota el dinero del último pagador que no había votado, el registro se cierra en ese bloque de facturación.
Nada de lo pagado a un registro vuelve a un pagador, así que nadie puede llevarse los depósitos de los demás. El tipo CancelLongevity (53) está retirado: todas las cadenas lo rechazan. Ninguna parte externa, ni siquiera la ZooBC Foundation, puede cerrar un registro.
Leer los registros
La API del nodo tiene rutas para los registros y los precios: /longevity, /longevity/quote, /accounts/<address>/survival, /accounts/<address>/objects y /objects/<id>.