Trabajo en curso

Trabajo en curso: estamos construyendo este sitio antes de la MainNet. Los detalles cambiarán.

Este sitio aún está en construcción

ZooBC se construye a la vista de todos. Lo que ves aquí es actual y honesto, pero no está terminado: léelo como el punto en el que estamos hoy, no como una declaración definitiva.

De aquí a la MainNet habrá cambios: redacción, estructura, imágenes y cifras. Algunas páginas son provisionales.

El ecosistema ZooBC en su conjunto llega por etapas. La billetera, el explorador y los canales de la comunidad se irán activando a medida que se acerque la MainNet, y este sitio crece con ellos.

Si algo te parece incorrecto, roto o engañoso, dínoslo. Tus comentarios ahora valen más para nosotros que un lanzamiento pulido más adelante.

ZOOBC / SEGURIDAD DE LA CADENA

Seguridad de la cadena

Lo que realmente costaría tomar el control de esta cadena. El sorteo es uniforme, la influencia es lineal y lo único que vale la pena atacar es el registro, así que la cola para entrar en él es la defensa.

En cada bloque se sortea un nodo para construirlo. El sorteo es una elección aleatoria uniforme entre todo el registro, derivada de la semilla del bloque anterior. No el nodo más rico. No el nodo con mejor comportamiento. Todos los nodos registrados, por igual, cada vez.

Así que la influencia sobre la cadena es simplemente tu parte del registro, y es lineal. No hay un 51% en el que algo se rompa. Si tienes una décima parte del registro, construyes una décima parte de los bloques; eso es todo lo que obtienes.

Eso convierte al registro en lo único que vale la pena atacar, y a la cola para entrar en él en la defensa. No puedes comprar una plaza. Entras de nodo en nodo, detrás de todos los demás que quieren entrar, y las cifras de abajo muestran lo que eso cuesta.

01 / EL SORTEO

Cómo se elige al constructor del bloque

A partir de la semilla del bloque anterior, cada nodo calcula la misma secuencia infinita de sorteos. La ronda 1 designa un nodo; si no publica dentro de su ventana de 15 segundos, la ronda 2 designa otro, y así sucesivamente. El primero en publicar construye el bloque.

La semilla en sí es sign(node_key, hash(previous seed)), comprobada por cada validador. Las firmas Ed25519 son deterministas, así que para un constructor dado existe exactamente una semilla válida: un constructor no puede probar semillas hasta dar con una que lo favorezca. La única libertad que tiene un atacante es publicar o quedarse callado: un bit, una vez, por cada bloque para el que salga sorteado.

La puntuación de participación no influye en la selección. A menudo se supone que sí, pero no. La puntuación decide una sola cosa: si permaneces o no en el registro. Baja cuando te saltas turnos, y al llegar a cero eres expulsado y se te devuelve tu stake. Una puntuación perfecta no te da más posibilidades de construir el siguiente bloque que las de un nodo que se unió ayer. El stake tampoco influye en la selección; solo te compra tu lugar en la cola para entrar.

02 / LA INFLUENCIA ES LINEAL

Lo que realmente compra una parte del registro

El atacante tieneBloques que construyeTiene un nodo en la ventana de contenidoCensurar una transacción durante 10 bloquesNodos honestos que silenciar para robar un turno

La columna central no es influencia. Solo indica con qué frecuencia al menos uno de los nodos del atacante cae entre los 10 primeros sorteos: un asiento cerca de la cabeza de la cola para ese bloque, nada más. Aun así, solo construye un bloque cuando sale sorteado primero, que es la segunda columna, y eso es exactamente su parte del registro.

La censura es lo que decae, y decae rápido. Para dejar fuera una transacción debes ocupar todos los turnos consecutivos mientras espera. Con un tercio del registro, eso es una probabilidad de 1 entre 59,000 a lo largo de diez bloques, dos minutos y medio. No hay ninguna parte inferior al control total con la que una censura sostenida funcione.

03 / DENEGACIÓN DE SERVICIO

El único ataque real: silenciar el sorteo

Un nodo solo puede incluir transacciones si sale sorteado dentro de las primeras 10 rondas (max_priority_blocksmiths). Si sale más tarde, aún puede construir, pero su bloque debe estar vacío. Esa regla es la que mantiene la cadena en movimiento cuando hay nodos fuera de línea: tienen que faltar todos y cada uno de esos primeros sorteados para que un bloque pierda su contenido.

También es el punto más delicado del diseño. Esos nodos se designan con 15 segundos de antelación, en el momento en que llega el bloque anterior. Un atacante capaz de dejarlos a todos fuera de línea dentro de esa ventana fuerza un bloque vacío, censurando a todos, no simplemente compitiendo. Es un problema de denegación de servicio, no de consenso, y es la razón por la que el número se fija en 10 y no en una cifra menor y más redonda.

Nodos que silenciar

10

designados, por bloque

Aviso previo

15 s

antes de que se abra el turno

Bloque vacío por accidente

 

con el 20% de los nodos fuera de línea

Subir el número casi no cuesta nada: solo supone unos cuantos nodos más construyendo bloques candidatos a la vez, y cada uno que se añade es otra máquina que un atacante debe encontrar y tumbar dentro de los mismos 15 segundos.

04 / UN PRECIO EN AÑOS

El costo de comprar una parte

Fórmula
retardo = clamp(base ÷ tamaño del registro, mín, máx)
Admisiones
de una en una, por orden de stake

La proporción de plazas es una proporción de stake. La cola se ordena por saldo bloqueado, así que «gana el 100% de las plazas» no es suerte: es el supuesto de que nadie puja más que él. Cada cifra aquí es el mejor caso para el atacante.

En cuanto un operador honesto pone más stake por nodo, pasa delante. Si ganas solo la mitad de las admisiones, tu parte del registro tiende a la mitad y se detiene: los nodos honestos que se llevan la otra mitad hacen crecer el registro tan rápido como tú haces crecer tu parte. Un objetivo por encima de tu proporción de plazas no es lento, es inalcanzable, y la tabla de abajo lo muestra como nunca.

Espera actual

 

por nodo admitido

Nodos para ⅓

 

para construir un tercio de los bloques

Tiempo para ⅓

 

de espera continua en la cola

Nodos para ½

 

para construir la mitad de los bloques

Tiempo para ½

 

de espera continua en la cola

ZBC bloqueados

 

mínimo, a 100 ZBC/nodo

05 / CRECIMIENTO

Cómo cambia la espera a medida que crece la cadena

espera por nodo (semanas) años para construir la mitad de los bloques tu tamaño de génesis

Con distintos tamaños de cadena

RegistroEspera por nodoNodos para ⅓HoraNodos para ½Hora

06 / LA ÚNICA DISYUNTIVA

Por qué el registro de génesis es la cifra que importa

Las admisiones son secuenciales, así que el tiempo para duplicar un registro es simplemente registry size × wait per node. Es una identidad, no un ajuste, lo que significa que un registro pequeño no puede tener a la vez una espera corta y una toma de control lenta. Es la única disyuntiva de todo el diseño que ninguna fórmula puede eliminar.

Registro en el lanzamientoEspera de 1 semanaEspera de 2 semanasPara duplicarse en 2 años, la espera debe ser

Así que la palanca es el lanzamiento, no la curva. Si empiezas con una docena de nodos, cada operador honesto espera meses, porque eso es lo que hace falta para que doce nodos sean difíciles de duplicar. Si empiezas con cien, una espera de dos semanas ya da casi cuatro años, y nadie queda fuera. Un registro de génesis más grande vale más que cualquier ajuste del retardo.

07 / CUATRO PROPIEDADES

Por qué esto se sostiene

Las admisiones son secuenciales. El registro admite un nodo cada vez, en toda la red. Querer cien nodos no significa esperar una vez, significa esperar cien veces, una tras otra. Ese solo hecho convierte un ataque financiado en un proyecto de varios años.

La parte que necesitas crece con la cadena. Un nodo entre diez es una décima parte de la influencia. Uno entre mil no es nada. La espera por nodo baja a medida que crece el registro, pero nunca por debajo del mínimo, así que el tiempo total sube de todos modos.

La cola tiene precio. La posición se ordena por saldo bloqueado, así que un atacante no solo espera: tiene que pujar más que cada operador honesto que también quiere entrar, todas y cada una de las veces. Cada plaza que pierde le cuesta la espera y le da un nodo a un operador honesto.

Financia la cadena mientras lo intenta. Cada nodo bloquea ZBC. Un ataque de una década implica una posición grande, ilíquida y totalmente pública en el mismo activo que intenta romper. No hay recortes: si te vas, o te expulsan por desaparecer, el stake se devuelve íntegro. La fianza compra un lugar en la cola, no un rehén.

Y nada se acumula. Cada bloque es un sorteo independiente. Un nodo que ha sido perfecto durante un año no tiene más derecho sobre el siguiente bloque que uno admitido esta mañana, y un atacante que ocupó los últimos diez turnos no tiene más probabilidades de ocupar el undécimo. No hay ninguna posición que acumular, y por eso la única forma duradera de ganar influencia aquí es ser una parte honesta más grande de la red.