Wiki de ZooBC
Conceptos básicos de ZooBC

El bloque génesis

Toda cadena ZooBC empieza con un bloque génesis, el bloque 0. No es un mensaje y no lleva transacciones: representa todo el estado inicial de la cadena, desde las cuentas con fondos hasta cada parámetro de consenso. Todo ello se compromete en un solo hash, y ese hash es la identidad de la cadena. Cambia un solo saldo y tendrás una cadena distinta.

Construido a partir de una configuración

Una cadena se crea sin conexión a partir de un archivo de configuración. No hay ninguna transacción génesis: la configuración es el estado. Fija:

  • las cuentas con fondos y sus saldos, incluida cualquier tesorería de apps que financie el fondo de apps;
  • los tokens del génesis y sus saldos: todas las cadenas tienen las mismas 14 monedas génesis, como ZUSD y ZBTC (tokens y mercados);
  • los calendarios de liberación;
  • los nodos registrados, o plazas génesis: 11 en cada cadena, en manos de la ZooBC Foundation, cada una con un saldo operativo de 10 ZBC en la cuenta propia del nodo;
  • los parámetros de consenso, desde el intervalo de bloque hasta los precios iniciales, y la altura de activación de cada regla;
  • las claves con un papel, como la autoridad de versiones (versiones y actualizaciones), y las direcciones de custodia de las monedas puente (puente y las monedas envueltas).

El constructor del génesis suma todos los créditos y se niega a escribir un génesis cuyo total supere el tope de suministro de 33 333 333.33333333 ZBC. Lo que no reparte pasa a ser el fondo de la coinbase, liberado a lo largo de 15 años (suministro y emisión). En las alturas 0 y 1 no se paga ninguna coinbase.

El bloque génesis contiene cuentas y saldos, plazas génesis, monedas génesis, calendarios de liberación, parámetros y alturas de las reglas; todo entra en el hash de configuración, del que se deriva el hash del génesis, la identidad de la cadena.
El bloque génesis contiene cuentas y saldos, plazas génesis, monedas génesis, calendarios de liberación, parámetros y alturas de las reglas; todo entra en el hash de configuración, del que se deriva el hash del génesis, la identidad de la cadena.

Un solo hash para todo el comienzo

El constructor reúne todo lo que importa en un solo hash de configuración. El hash del génesis se deriva después de la versión del bloque, su altura, su marca de tiempo, un hash anterior a cero y ese hash de configuración. El propio bloque génesis lleva a cero la semilla, la clave del productor, la firma y el hash anterior, y su hash es el valor derivado de la configuración, no un hash de sus propios bytes. Hay dos valores que se leen pero no se comprometen: total_supply y node_operating_balance.

Cambiar cualquier valor comprometido da un nuevo hash del génesis y, por tanto, una cadena distinta.

La identidad de la cadena

El hash del génesis es la única identidad de una cadena: no hay ningún byte de id de red.

  • Los nodos comparan los hashes del génesis al conectarse y rechazan a un par cuyo hash sea distinto.
  • Toda firma de transacción lo cubre. El firmante firma SHA3-256("ZBC-TX" ‖ hash del génesis ‖ los bytes de la transacción sin firmar), así que una transacción firmada para una cadena no es válida en ninguna otra (firmas vinculadas a la cadena).
  • Un nodo lo indica como genesis_hash en /api/v1/node/info, de modo que una billetera puede saber con qué cadena está hablando.
  • Una red de pruebas que se relanza obtiene un hash nuevo.

Por eso devnet, testnet y mainnet no comparten saldos ni firmas (devnet, testnet y mainnet).

Un nodo nunca construye un génesis por sí mismo: el bloque 0 ya debe estar en su base de datos cuando arranca (operar un nodo).

Ninguna llave maestra

El génesis no contiene ninguna clave que pueda reescribir la cadena más adelante. Las reglas y los parámetros solo cambian mediante nuevas versiones, que llevan las alturas a las que se aplican las reglas, y mediante los votos de precio acotados de las plazas del registro (votos de precio). Ninguna clave cambia una regla, un parámetro o un saldo firmando un mensaje, y un binario de nodo que discrepe de las alturas de las reglas registradas para su cadena se niega a funcionar. A partir de la versión 0.5.8 las 121 reglas de consenso están vigentes desde la altura 0.

Véase también