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.
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
Con distintos tamaños de cadena
| Registro | Espera por nodo | Nodos para ⅓ | Hora | Nodos 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 lanzamiento | Espera de 1 semana | Espera de 2 semanas | Para 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.