Objeto de este documento: explicar la versión 1.1 del algoritmo de consenso de Chia

Público objetivo: una audiencia técnica familiarizada con blockchain pero no con Pruebas de espacio (PoS), Pruebas de tiempo / Funciones de retardo verificables (VDF) y Chia.

Si es nuevo en Bitcoin / blockchain, lea este libro de texto primero: Explicación del consenso de Bitcoin y la red Chia Tecnologías de criptomonedas.

Por favor preguntar preguntas sobre keybase para que podamos mejorar este documento.

Motivación

El El algoritmo de Chia Consensus tiene como objetivo crear una alternativa descentralizada, segura y respetuosa con el medio ambiente a la prueba de trabajo y la prueba de participación.

Prueba de trabajo (POW) Las criptomonedas queman enormes cantidades de electricidad. Además, tienden a centralizarse debido a la concentración de la fabricación de hardware y la propiedad y concentración de productos baratos. energía, lo que hace que PoW sea inaccesible para los usuarios comunes y susceptible a varios ataques.

La prueba de participación tiene muchas formas, cada una con sus pros y sus contras. Algunas debilidades comunes son: control concentrado de fondos por medio de intercambios; concentración de delegación; dependencia de los puestos de control y la subjetividad (un requisito para estar en línea periódicamente); inaccesibilidad para los usuarios habituales; reducción del riesgo; supuestos de sincronización del reloj, supuestos de redesy otros supuestos de seguridad.

Introducción

Los algoritmos de consenso descentralizados requieren la resistencia de Sybil con un recurso que es criptográficamente verificable y escaso (no infinito). En los sistemas blockchain anteriores, los escasos recursos eran la potencia de cálculo y la participación. La prueba de espacio es una alternativa que se acerca mucho más al ideal original de Bitcoin de “una cpu por voto” al utilizar la capacidad de almacenamiento como recurso escaso. Por exampel, alguien que almacena 500GiB tiene 5 "votos", alguien que almacena 100GiB tiene 1 "voto"”, Donde un votose refiere a la posibilidad de ganar y validar un bloque, no un voto real en cadena. Usando solo sSin embargo, la capacidad de almacenamiento no es segura. Uno mas pieza de rompecabezas criptográfico se utiliza para asegurar este sistema: es decir, una función de retardo verificable, que es una criptográfico prueba de que el tiempo real ha pasado. Se puede crear un sistema justo combinando pruebas de espacio y tiempo. En tal sistema, los usuarios almacenan aleatoriamentebuscando datos en sus discos duros durante períodos de tiempo y su oportunidad de ganar Chia es proporcional a su espacio asignado. Además, dicho sistema se escala a miles de millones de participantes de manera similar a la lotería de prueba de trabajo. No se requieren fondos, hardware especial, registro o permiso para unirse, solo un disco duro. Y el sistema es completamente transparente y determinista: cualquiera puede verificar de manera eficiente y objetiva qué cadena es la canónica.

Pruebas de espacio

Una prueba de protocolo espacial es aquella en la que:

  1. un Verificador puede enviar un desafío a un Probador, y
  2. el Prover puede demostrarle al verificador que el Prover está reservando una cantidad específica de espacio de almacenamiento en ese momento preciso.

El protocolo de prueba del espacio tiene tres componentes: trazado, prueba / cultivo y verificación. Detalles aquí.

Figura 1: Primero, el probador “traza” o asigna una porción del espacio en disco (1). Luego, el prover “cultiva” respondiendo a los desafíos con pruebas de espacio (2,3,4). El verificador verifica que la prueba sea válida para ese desafío.

Trazando es el proceso por el cual un probador, al que nos referimos como agricultor, inicializa una cierta cantidad de espacio. Un agricultor puede ser cualquier persona que tenga al menos 100 GiB disponibles para reservar en su computadora portátil, o una empresa preparada para asignar un gran volumen de espacio de almacenamiento no utilizado. No hay límite superior. El trazado toma el orden de horas o días y se realiza solo una vez. El espacio inicializado está ocupado por un file llamado trama. Los tamaños de las parcelas están determinados por un parámetro k, donde espacio = 780 * k * poder(2, a  10), con un mínimo de k de 32 (101.4 GiB). Como de Chia 1.0, se puede crear un gráfico k32 alrededor seis horas con una máquina rápida de productos básicos, y 24 horas con una máquina lenta que usa un núcleo de CPU y algunos GB de memoria. Hay oportunidades para grandes aceleraciones. La construcción de PosSpace se basa en Beyond Demonios, hombre [8 Descargar], pero está anidado 6 veces y contiene otras heurísticas para que sea práctico.

El resultado es una trama file eso puede ser, por ejemploamparchivo, 100 GiB. los file contiene siete tablas con datos de apariencia aleatoria. Cada tabla tiene 2 ^ k entradas. Cada entrada en la tabla i contiene dos punteros a la tabla i-1 (la tabla anterior). Finalmente, cada entrada de la tabla 1 contiene un par de números enteros entre 0 y 2 ^ k, llamados "valores x". Una prueba de espacio es una colección de 64 valores de x que tienen cierta relación matemática.

En el diagrama anterior, una vez que el Prover ha inicializado 100 GiB, están listos para recibir un desafío y crear una prueba. Una propiedad atractiva de este esquema es que no es interactivo: Sin registro o se requiere conexión en línea para crear una parcela. Nada llega a la cadena de bloques hasta que se gana una recompensa, similar a PoW.

Agricultura es el proceso mediante el cual un agricultor recibe una secuencia de desafíos para demostrar que ha reservado legítimamente una cantidad definida de almacenamiento. En respuesta a cada desafío, el agricultor verifica sus parcelas, genera una prueba y envía cualquier victorioso pruebas a la red para su verificación.

Cada iteración de este proceso es una búsqueda de tabla. A buscar toma un desafío de 256 bits como entrada y genera una prueba. El agricultor responde a un desafío leyendo un par de valores en Tabla 7. Estos apuntan a dos entradas en la tabla 6, etc. Finalmente, el agricultor obtiene el árbol completo de valores x. Esto requiere una lectura para la tabla 7, dos para la tabla 6, cuatro para la tabla 5, etc. El proceso completo tomaría aproximadamente 640 ms, asumiendo un disco duro lento con un tiempo de búsqueda de 10 ms. La cantidad de datos leídos es pequeña y es independiente del tamaño de la parcela.

Dado que la mayoría de las pruebas generadas por este proceso no son lo suficientemente buenas (como se explica más adelante) para enviarlas a la red para su verificación, podemos optimizar este proceso solo revisando una rama del árbol, lo que da como resultado dos valores de x, según el desafío. Luego, codificamos los valores x generados de esta manera en una cadena de 256 bits para determinar si la prueba es buena. El hash de estos valores x nos da la cadena de calidad, un valor aleatorio de 256 bits. Esto se combina con la dificultad y el tamaño de la parcela para generar el required_iteraciones. Si el required_iteraciones es menor que un cierto número (podemos entrar en la cadena de bloques), luego buscamos todo el PoSpace. Buscar una rama requiere solo alrededor de 7 búsquedas y lecturas de disco o alrededor de 70 ms en un disco duro lento.

Figura 2: Estructura de una parcela file. Los 64 valores x rojos representan la prueba, los 2 valores x verdes representan la calidad. 

Una optimización adicional es descalificar una cierta proporción (por ej.ample 511/512) parcelas de elegibilidad para cada desafío. Esto se conoce como el filtro de trama. Por ejemploample, requiriendo que el hash del desafío y el plot_id comience con 9 ceros. Esto perjudica a todos por igual (excepto a los atacantes que modifican el mapa) y, por lo tanto, es justo. Esto hace que la agricultura casi no requiera recursos y muy pocas lecturas de disco cada pocos minutos.  Los usuarios de chía han estado cultivando con éxito múltiples PiB de almacenamiento en una sola Raspberry Pi. Suponemos que los agricultores siempre usan HDD porque son baratos y no hay razón para usar SSD ya que la velocidad no es relevante para la agricultura. Sin embargo, se pueden usar SSD / RAM para un trazado más rápido.

La clave de la trama es una clave privada que se almacena en la trama. file. La identificación de la trama se genera mediante el hash de la clave pública de la trama y la piscina de clave pública. La creación de un bloque con una prueba de espacio requiere firmar tanto con la clave del gráfico como con la clave del grupo. Por lo tanto, la piscina no se puede cambiar después de crear el gráfico. En la práctica, la clave de la parcela es una clave pública agregada 2/2 BLS entre una clave local almacenada en la parcela y una clave almacenada por el software del agricultor. Para mayor seguridad y eficiencia, un agricultor puede ejecutar un servidor centralizado utilizando este esquema de clave y firma. El servidor puede estar conectado a muchas máquinas recolectoras que almacenan parcelas. La agricultura requiere la clave del agricultor y la clave local, pero no requiere la clave del grupo, ya que la firma del grupo se puede almacenar en caché y reutilizar para muchos bloques.

Verificando: Una vez que el agricultor ha creado con éxito una prueba de espacio, la prueba se puede verificar realizando algunos hash y haciendo comparaciones entre los valores de x en la prueba. Recuerde que la prueba es una lista de 64 valores de x, donde cada valor de x tiene una longitud de k bits. Para un k32, esto es de 256 bytes y, por lo tanto, es muy compacto. La verificación es muy rápida, pero no lo suficientemente rápida como para verificar su solidez en ethereum (algo que permitiría transferencias sin confianza entre cadenas), ya que requiere operaciones blake3 y chacha8.

Pruebas de tiempo

Una prueba de tiempo o una Verificable DElay Función, es una prueba de que una función secuencial se ejecutó un cierto número de veces.


Verifiable: esto significa que después de realizar el cálculo (que lleva tiempo), el probador puede crear una prueba muy pequeña en muy poco tiempo, y el El verificador puede verificar esta prueba sin tener que rehacer todo el cálculo.

Demora: esto significa que el probador en realidad dedicó una cantidad real de tiempo (aunque no sabemos exactamente cuánto) para calcular la función.

Función: esto significa que es determinista: calcular un VDF en una entrada x siempre da el mismo resultado y.

La palabra clave aquí es "secuencial", como hash de un número muchas veces: hash (hash (hash (a))), etc. Esto significa que el probador no puede simplemente comprar más máquinas para ir más rápido, a diferencia de Bitcoin / prueba de trabajo. Por lo tanto, podemos asumir que calcular un VDF requiere tiempo real (reloj de pared). La construcción que usamos es la cuadratura repetida. El probador debe cuadrar un desafío x T veces. Esto requiere tiempo ϴ (T). El probador también debe crear una prueba de que esto se realizó correctamente.

Figura 3: Verificador (cadena de bloques) envía un desafío a un probador (señor del tiempo) y el probador calcula la salida y la prueba. 

Aunque los siguientes detalles no son muy importantes para comprender el algoritmo de consenso, la elección de qué VDF usar es relevante, porque si un atacante logra obtener una máquina mucho más rápida, algunos ataques son posibles.

El VDF usado por Chia se repite cuadrando en un grupo de clases de orden desconocido. Hay dos formas principales de generar un grupo grande que tiene un orden desconocido. La primera es usar un módulo RSA y usar los números enteros mod N como un grupo. Se desconoce el orden del grupo si puede generar su módulo con muchas partes participantes utilizando un Comité de Política Monetaria ceremonia. Un enfoque más sencillo es utilizar grupos de clases con un discriminante principal grande, que son grupos de orden desconocido. Esto no requiere ninguna configuración compleja o confiable, por lo que elegimos esta opción para Chia. Para crear uno de estos grupos, solo se necesita un número primo aleatorio grande. El inconveniente es que el código de grupo de clases se prueba menos en la vida real y las optimizaciones son menos conocidas que en los grupos RSA. Usamos el mismo elemento inicial para el cuadrado (a = 2, b = 1 elemento de grupo de clases), y en su lugar usamos el desafío para generar un nuevo número primo aleatorio para cada VDF, que se usa como discriminante. El discriminante tiene un tamaño de 1024 bits, lo que significa que los tamaños de prueba son de alrededor de 1024 bits. Usamos el Esquema de Wesolowski [Descargar] dividir en n (1 <= n <= 64) fases para que la creación de las pruebas sea muy rápida. Dado que las pruebas de n-wesolowski pueden ser grandes, las reemplazamos por pruebas de 1-wesolowski tan pronto como estén disponibles, ya que son más pequeñas, pero requieren más tiempo para hacerlas. Las pruebas en sí mismas no están comprometidas en cadena, por lo que son reemplazables.

Infusión

Como resumen, los VDF toman una entrada, llamada desafío, y producen una salida junto con una prueba que certifica que la función se evaluó correctamente.

La infusión de un valor en un VDF significa que ese valor se combina con una salida de un VDF, para generar un nuevo valor, que se utiliza como entrada / desafío para el siguiente VDF. Por lo tanto, estamos encadenando VDF pero comprometiéndonos con un nuevo valor (bloque) intermedio. Esto se usa para que tengamos una progresión lineal de bloques, alternando pruebas de espacio con pruebas de tiempo.

Algoritmo de consenso

Firmas BLS

Siempre que se haga referencia a firmas en este documento, se asume que se utiliza una firma BLS determinista, siguiendo la especificación IETF con el esquema aumentado. Los agricultores controlan y almacenan las claves privadas que realizan estas firmas digitales, y se utiliza una clave privada única para cada parcela.

Roles de los nodos

Agricultores

Agricultores son nodos que participan en el algoritmo de consenso almacenando gráficos y verificándolos en busca de pruebas de espacio. Se comunican con un nodo completo (generalmente en la misma máquina). Los agricultores también se comunican con una o más cosechadoras, que es un servicio que reside en la máquina donde se almacenan las parcelas y busca pruebas de espacio en nombre del proceso del agricultor.

Señor del Tiempo

Los Timelords son nodos que participan en el algoritmo de consenso creando pruebas de tiempo e infundiendo bloques en sus VDF.

Nodos completos

Los nodos completos pueden ser señores del tiempo o agricultores, o simplemente pueden realizar los roles de un nodo completo. Esto implica transmitir pruebas de espacio y tiempo, crear bloques, mantener un mempool de transacciones pendientes, almacenar la cadena de bloques histórica y cargar bloques a otros nodos completos, así como billeteras (clientes ligeros).

Desafíos

El algoritmo de consenso de Chia se basa en ejecutar VDF durante períodos de tiempo denominados subintervalos, que se ajustan periódicamente para sumar unos 10 minutos. Periódicamente se lanzan desafíos, lo que inicia una especie de mini lotería en la que los agricultores revisan sus parcelas en busca de pruebas de espacio. Cuando los agricultores encuentran una prueba de espacio que califica, la transmiten a la red. La dificultad cambia para apuntar a 32 pruebas ganadoras para toda la red en cada subtragamonedas. Estas pruebas se infunden en el VDF en diferentes momentos dentro de la sub-ranura. Los agricultores siguen la cadena más pesada, que es la cadena con mayor dificultad acumulativa (generalmente la cadena con más bloques).

Figura 4: Tres sub-ranuras. El eje x representa el tiempo. Las líneas punteadas representan la ejecución de VDF, avanzando en el tiempo de izquierda a derecha. Las flechas representan dependencias hash (un objeto que apunta a otro objeto incluye el hash del segundo objeto). 

En la figura 4, podemos ver tres puntos de desafío, c1, c2 y c3. En los puntos c1, c2 y c3, los señores de tiempo crean desafíos (hashes de 256 bits) que se proporcionan como entrada a los VDF. Los Timelords toman estos hashes y comienzan a calcular un VDF en este desafío, para el número especificado de iteraciones. En este example, cada ranura es 100,000,000 iteraciones. Cuando finaliza el VDF, el señor del tiempo publica el nuevo desafío y la prueba del VDF. Se produce una infusión de información de fin de intervalo al final de cada subintervalo.

Sub-ranura: un segmento de un número fijo de iteraciones de VDF, sujeto al ajuste de la dificultad del trabajo, siempre ajustándose a una cantidad fija de tiempo objetivo (es decir, 10 minutos).

Iteraciones de subtragamonedas: una constante que se ajusta periódicamente y que determina cuántas iteraciones de VDF debe tener cada subintervalo.

Desafío: cadena de salida sha256 que se utiliza como prueba de los desafíos espaciales para las parcelas de los agricultores, así como para la cadena de desafíos VDF. Esto también se conoce como desafiar hash.

Como puede ver en la Figura 4, hay tres VDF que se ejecutan al mismo tiempo, cada uno con un propósito diferente. Se explican en las siguientes secciones.

Puntos de señalización y puntos de infusión

Cada sub-ranura en las cadenas de desafío y recompensa se divide en 64 VDF, más pequeños, y entre cada uno de estos VDF pequeños hay un punto llamado punto de señalización. Los Timelords publican la salida VDF y la prueba cuando llegan a cada punto de señalización. Tenga en cuenta que tanto la cadena de desafío como las cadenas de recompensa tienen puntos de señalización (pero no la cadena de desafío infundida). El número de iteraciones entre cada punto de señalización es iteraciones de intervalo sp, que es igual a iteraciones de subintervalo / 64.

 

El desafío al comienzo de la sub-ranura también es un punto de señalización válido. A medida que se alcanza cada uno de los 64 puntos de señalización, se transmiten a través de la red mediante timelords y nodos. Los agricultores reciben estos puntos de señalización y calculan un filtro de parcela basado en el punto de señalización, su identificación de parcela y el desafío de la sub-ranura. Si los bits del filtro de la trama comienzan con 9 ceros, esa trama pasa el filtro para ese punto de señalización y puede continuar. Esto descalifica alrededor de 511/512 de toda la trama. files en la red, para ese punto de señalización.

El La prueba de desafío espacial se calcula como el hash de los bits del filtro de la trama:

Con este desafío, los agricultores obtienen hilos de calidad para cada parcela que pasó el filtro del disco. Recuerde que este proceso es casi instantáneo y que el punto de señalización es un hash derivado de parte de la prueba de espacio (pero toda la prueba de espacio aún no se ha recuperado).

El agricultor calcula el iteraciones requeridas por cada prueba de espacio. Si las iteraciones requeridas <iteraciones de intervalo sp, la prueba de espacio es elegible para su inclusión en la cadena de bloques, por lo que el agricultor obtiene la prueba de espacio completa del disco (lo que lleva más tiempo que solo obtener la calidad), crea un subbloque sin terminar y lo transmite a la red. Tenga en cuenta que la gran mayoría de las iteraciones requeridas serán demasiado altas, ya que en promedio 32 calificarán para toda la red para cada subranura. Este es un proceso aleatorio, por lo que es posible que califiquen una gran cantidad de pruebas, pero es muy poco probable. La iteraciones de puntos de señalización es el número de iteraciones desde el inicio de la subintervalo hasta el punto de señalización.

El iteraciones de infusión es el número de iteraciones desde el inicio del subintervalo en el que el bloque con la calidad anterior se puede incluir en la cadena de bloques. Esto se calcula como:

Por tanto, las iteraciones de infusión estarán entre 3 y 4 puntos de señalización después el punto de señalización. Los agricultores deben enviar sus pruebas y bloques antes de llegar al punto de infusión. El módulo está ahí para permitir desbordamientos en la siguiente sub-ranura, si el punto de señalización está cerca del final de la sub-ranura. Esto se amplía más adelante.

En el punto de infusión, el bloque del granjero se combina con la salida del VDF del punto de infusión para crear una nueva entrada para el VDF a partir de ese punto, es decir, infundimos el bloque del granjero en el VDF.. El bloque solo es completamente válido después de que se hayan alcanzado las iteraciones de infusión y se haya adjuntado la prueba de VDF al bloque.

Para que el bloque b1 sea válido / terminado, se deben incluir dos pruebas VDF: una de r1 al punto de señalización y otra de r1 a b1. (en realidad es más, ya que hay tres cadenas de VDF, que se explican más adelante). En la Figura 5, el agricultor crea en el momento del punto de señalización (llamémoslo B1 '). Sin embargo, B1 'aún no está terminado, ya que necesita el punto de infusión VDF. Una vez que se liberan las iteraciones de infusión VDF, se agrega a B1 'para formar el bloque terminado en B1.

Cifra 5señores del tiempo Cree pruebas tanto para el punto de señalización como para el punto de infusión. Pero ellos solo infundir (cambiar el grupo de clases VDF) para este último. El cuadrado simboliza las infusiones, donde se inicia un nuevo VDF. Sp_iterval_iterrs = 3.125M. ACTUALIZAR A 64 SP

Consideremos el example en la figura 5. Las iteraciones de subintervalo son 200M, y las iteraciones del intervalo sp son 3.125M. Digamos que un agricultor tiene un total de 1000 parcelas.

Para cada uno de los 64 puntos de señalización, a medida que se lanzan a la red cada 9 segundos, o cada 3.125 millones de iteraciones, el agricultor calcula el filtro de parcela y ve cuántas parcelas pasan. Para cada una de las parcelas que pasan el filtro para cada punto de señalización, el agricultor calcula las iteraciones requeridas. En este exampes decir, el agricultor solo obtiene required_iterations <3.125M una vez en toda la sub-ranura (digamos que es 2.2879M). En la Figura 5, esto está en el punto 14 de señalización. Las iteraciones de infusión se calculan como:

Después de darse cuenta de que han ganado (en el punto 14 de infusión), el agricultor busca la prueba completa del espacio, hace un bloqueo, que incluye opcionalmente las transacciones, y lo transmite a la red. Tienen unos segundos (hasta las iteraciones de infusión), para llegar a los señores del tiempo, quienes infundirán el bloque, creando los VDF del punto de infusión. Con estos VDF, el bloque se puede terminar y agregar a la cadena de bloques.

Iteraciones de intervalo sp: Definido como piso (iteraciones de subtragamonedas / 64).

Puntos de señalización: 64 puntos intermedios en el tiempo dentro de un sub-intervalo en las cadenas de desafío y recompensa, para los cuales se lanzan periódicamente VDF. En cada punto de señalización, se crea una salida VDF y se transmite a través de la red. El primer punto de señalización en la sub-ranura es el desafío en sí. Cada bloque tiene un punto de señalización de modo que la prueba de espacio en el bloque debe ser elegible para ese punto de señalización.

Iteraciones requeridas: Un número calculado usando la cadena de calidad, que se usa para elegir pruebas de espacio que son elegibles para hacer bloques. La gran mayoría de las pruebas de espacio habrán requerido iteraciones que son demasiado altas y, por lo tanto, no serán elegibles para su inclusión en la cadena. Este número se utiliza para calcular el punto de infusión.

Punto de infusión: el punto en el tiempo en iteraciones de infusión desde el punto de desafío, para una prueba de espacio con un cierto desafío y iteraciones de infusión. En este punto, el bloque del granjero se infunde en la cadena de recompensas VDF. El punto de infusión de un bloque está siempre entre 3 y 4 puntos de señalización después del punto de señalización de ese bloque. Calculado como iteraciones de puntos de señalización + 3 * iteraciones de intervalo sp + iteraciones requeridas.

La demora entre el punto de señalización y el punto de infusión tiene muchos beneficios, incluida la defensa contra la agricultura huérfana y egoísta, la disminución de horquillas y la ausencia de pausas VDF. Este retraso de alrededor de 30 segundos se da para que los agricultores tengan tiempo suficiente para firmar sin retrasar la ranura VDF. Los agricultores que se portan bien firman solo un punto de señalización con cada prueba de espacio, lo que significa que los atacantes no pueden reorganizar fácilmente la cadena.

Múltiples bloques

Figura 7: varios bloques. Sp1 = puntos de señalización 1

Como puede ver en la figura 7, se pueden infundir múltiples bloques en la misma sub-ranura. El sistema de Chia apunta a 32 bloques por subtragamonedas, y esto se ajusta mediante el algoritmo de dificultad de trabajo. Los VDF van desde el punto de infusión anterior al punto de señalización actual y desde el punto de infusión anterior al punto de infusión actual. Tenga en cuenta que las pruebas de VDF necesarias para cada bloque pueden superponerse. Por exampel, B2 contiene una prueba de VDF de B1 a sp2, y de B1 a B2B3 contiene una prueba de B1 a sp3, y desde B2 a B3B2 no depende en absoluto de B3, pero B3 depende de B2, ya que su VDF es de B2's punto de infusión. Nuevamente, los bloques se crean en los puntos de señalización, pero les falta el punto de infusión VDF; una vez que se agrega este VDF, el bloque está terminado y forma parte de la cadena de bloques. No hay firmas en el punto de infusión; lo único que se agrega en el punto de infusión son los VDF.

Tres cadenas VDF

Si solo usáramos un VDF (para la cadena de recompensas), la inclusión o exclusión de bloques permitiría controlar el desafío para la siguiente ranura. Esto significa que un atacante podría probar muchas combinaciones diferentes y elegir el desafío que más le convenga. Este tipo de ataques se denominan ataques de molienda y son una de las principales dificultades para cambiar de Prueba de trabajo a Prueba de espacio o PoStake. Se proporcionan más detalles en la sección "Ataques y contramedidas".

Para mitigar esto, los desafíos se basarán solo en el primer bloque que se infundirá en una ranura.

Figura 8: tres cadenas VDF. Un atacante puede manipular los resultados de la cadena de recompensas, pero esto no tiene ningún efecto en c2 y, por lo tanto, no tiene ningún efecto en la lotería PoSpace. cc = cadena de desafío, rc = cadena de recompensa, sp = punto de señalización. B = bloque.

Están sucediendo muchas cosas en este diagrama. En primer lugar, como puede ver, hay 4 bloques: B1, B2, B3, B4, son bloques creados por los agricultores, que contienen todos los datos a los que apuntan. Suponemos que se han creado más de 5 bloques en esa sub-ranura, pero no los dibujamos todos debido a limitaciones de espacio.

Además, tanto la cadena de desafíos como la cadena de recompensas crean 64 puntos de señalización. Los bloques deben incluir los VDF de los puntos de señalización para ambas cadenas. Los bloques también deben incluir los VDF del punto de infusión para las tres cadenas.

Como puede ver, la cadena de desafío ejecuta el VDF desde el inicio de la sub-ranura hasta el final sin nada infundido (los círculos son pruebas de VDF pero no interrumpen el VDF). La cadena de recompensas infunde cada bloque que se incluye. La cadena en el medio se llama cadena de desafío infundida, y comienza en el primer bloque infundido para cada desafío y continúa hasta el final de la ranura.

ranura es la lista de subintervalos que contienen al menos 16 bloques de cadena de recompensa según el desafío del primer subintervalo o subintervalos posteriores. Por example, podemos tener solo 10 bloques en una sub-ranura, y luego 3 y luego 7, lo que significa que esas tres sub-ranuras forman una ranura. Por lo general, cada subranura también es una ranura, ya que en promedio se incluyen muchos más de 16 bloques. los déficit es el número de bloques que aún se necesitan para finalizar la ranura: esto se describe más adelante con más detalle.

Al final de la ranura, la cadena de desafíos se combina con la cadena de desafíos infundidos para generar el nuevo desafío c2, que se utiliza para iniciar la cadena de desafíos para la siguiente sub-ranura.

El único bloque que afecta a la cadena de desafío es el primer bloque, que aquí es B1, y solo una parte determinista de B1, CC B1, que solo depende de los datos de la cadena de desafíos. Un atacante que quiere moler no puede cambiar el desafío reteniendo B2B3, o cualquier otro bloque aparte del primero.

Suponiendo que el atacante tiene el bloqueo más rápido (B1), tienen tres opciones: retenerlo, retrasarlo o liberarlo. Para saber si el nuevo desafío los beneficiará, deberán ejecutar el VDF hasta c2. En ese momento, ya no tienen la oportunidad de ser incluidos en la cadena de recompensas, ya que los agricultores honestos firman solo un bloque por prueba de espacio. Retención B1 no proporciona mucho beneficio al atacante, ya que debe liberarlo antes sp2 con el fin de poner a los agricultores en su cadena. Los agricultores elegirán la cadena más pesada, que es la que tiene más (más pesado) bloques de cadena de recompensa.

¿Por qué nos comprometemos con cualquier bloqueo en la cadena de desafíos? Bueno, si no lo hiciéramos, un atacante podría mirar hacia adelante con un VDF más rápido, ya que no necesitarían la ayuda de participantes honestos para calcular la cadena de desafíos en el futuro. La cadena de desafíos sería totalmente determinista. Esto permitiría algunos avancestage volviendo a trazar. Además, la cadena de desafíos se puede utilizar para probar probabilísticamente el peso de la cadena de recompensas a los clientes ligeros, sin compartir todos los bloques de la cadena de recompensas (dado que la cadena de desafíos depende del "mejor" bloque en la ranura, puede calcular la cantidad de recompensas bloques de cadena).

Cadena de desafío: La cadena VDF basada en cada desafío para cada sub-ranura, que no infunde nada en el medio de cada sub-ranura. Los desafíos también se utilizan para las pruebas de espacio. Los puntos de señalización de esta cadena se utilizan para el filtro SP.

Cadena de recompensas: La cadena VDF que contiene infusiones de todos los bloques. Esta cadena tira de la cadena de desafío y, opcionalmente, la cadena de desafío infundida al final de cada sub-ranura.

Cadena de desafío infundida: Una cadena VDF que comienza en el primer bloque infundido en una ranura (que no se basa en el desafío de la ranura anterior, esto se llama bloque de desafío) y termina al final de la ranura.

Slot: la lista de subintervalos que contienen al menos 16 bloques de cadena de recompensa según el desafío del primer subintervalo o subintervalos posteriores. Al final de la ranura, la cadena de desafío infundida se detiene, la cadena de desafío tira del resultado de la cadena de desafío infundida y el déficit se restablece a 16.

Bloquear: un bloque es una colección de datos infundidos en la cadena de recompensas que contiene: una prueba de espacio para un hash de desafío con menos iteraciones que las iteraciones de ranura, sp e ip VDF para ambas cadenas, ip VDF opcional para la cadena de desafío infundida y un recompensa dirección. Algunos bloques también son bloques de transacciones. Hay un máximo de 128 bloques por ranura.

Bloque de transacciones: Un bloque que es elegible para crear transacciones., junto con una lista asociada de transacciones.

Bloque de desafío: El primer bloque que se infundirá en cada ranura, que no se basa en el desafío de una ranura anterior. El bloque de desafío siempre tiene un déficit de 15 y siempre comienza la cadena de desafíos infundidos.

Pdébil: El pico de la cadena de bloques visto por un nodo es el bloque con mayor peso. El peso es la suma de la dificultad de un bloque y todos sus antepasados, que es similar a la altura, pero una cadena más corta puede tener un peso mayor debido a la dificultad de los ajustes.

Para que un bloque se considere válido, debe proporcionar VDF para la cadena de desafío y la cadena de recompensa y, opcionalmente, para la cadena de desafío infundida si está presente. Forzar la inclusión de todos los VDF significa que se garantiza que las tres cadenas avanzarán al mismo ritmo.

Bloques de desbordamiento

Para que un agricultor cree un bloque, sus required_iterations deben ser menores que 3.125M, o las iteraciones de sub-ranura / 64, como se describe arriba. Esto significa que las iteraciones de infusión pueden ser mayores que las iteraciones de subintervalo y, por lo tanto, la infusión debe ocurrir en el siguiente subintervalo.

Bloque de desbordamiento: un bloque cuyo punto de infusión está en una sub-ranura diferente a su punto de señalización.

Desafío de ranura actual: Con respecto a un determinado bloque B, los desafíos de la ranura actual de B incluyen todos los desafíos que comienzan en el primer desafío en la ranura y terminan al final de la ranura (no incluido). Esto es relevante porque a veces una ranura abarca múltiples sub-ranuras y, por lo tanto, múltiples desafíos.

Figura 9B4 en este diagrama hay un bloque de desbordamiento, ya que la infusión está en la siguiente ranura. B4 no se basa en un desafío de ranura actual y, por lo tanto, no disminuye el déficit ni crea un bloque de desafío. TODO: los diagramas deben ser 16, no 5.

Los bloques de desbordamiento no pueden existir en el primer subintervalo de la época (ya que cambian las iteraciones del subintervalo).

Además, los bloques de desbordamiento no cambian el déficit a menos que se basen en un desafío de ranura actual, ya que los bloques de desbordamiento son respuestas al desafío de la subintervalo anterior. Los bloques de desbordamiento no son bloques de desafío a menos que se basen en un desafío de ranura actual. Tenga en cuenta que es raro que los bloques de desbordamiento disminuyan el déficit, ya que el déficit casi siempre se reducirá a cero y se iniciará una nueva ranura en cada subranura.

Requisito mínimo de bloque

Se debe infundir un mínimo de 16 bloques de desafío de espacio actual en la cadena de recompensas para que se termine un espacio.

El déficit es un número entre 0 y 16 que está presente al comienzo de un subintervalo. Esto se define como la cantidad de bloques de la cadena de recompensas que necesitamos infundir para terminar una ranura. Se restablece a 16 cada vez que comenzamos una ranura (por lo que debe haber al menos 16 bloques en total por infusión de cadena de desafío). El déficit disminuye para cada infusión de cadena de recompensas que se basa en un desafío de ranura actual.

El bloque con déficit 15 es un bloque de desafío.

El caso normal es donde el déficit comienza en 16 y baja a cero dentro de la sub-ranura, y se reinicia a 16 cuando terminamos la ranura y comenzamos una nueva. En el caso de que no logremos reducirlo a 0 dentro del final del espacio, la cadena de desafío y la cadena de desafío infundida (si está presente) continúan, y el déficit no se restablece a 16. Bloques (incluidos los bloques de desbordamiento ahora) , sigue restando del déficit hasta que lleguemos a 0. Cuando terminamos un sub-espacio con un déficit cero, la cadena de desafíos infundidos se incluye en la cadena de desafíos y el déficit se restablece a 16.

Este requisito se agrega para prevenir ataques de largo alcance y se describe en detalle en la sección Contramedidas a continuación. La gran mayoría de las sub-ranuras tendrán> = 5 bloques, por lo tanto, no afecta mucho al funcionamiento normal.

Figura 10: c2 es el final de la sub-ranura pero no el final de la ranura. c2 NO apunta a ic2, ya que la ranura no termina en esta sub-ranura. El déficit es 2 en lugar de restablecerse a 5, y la cadena de desafíos infundidos continúa.

Peso

El peso de un bloque es la suma de la dificultad de este bloque, más todos los bloques anteriores que son antepasados ​​de este bloque. Los nodos completos honestos deben elegir el pico de la cadena de bloques de modo que el pico sea el bloque con el peso más pesado que conozcan. Este es un requisito crucial y es idéntico a la regla de cadena más pesada de Bitcoin. Debido a esta regla, un atacante con menos del 50% del espacio y sin VDF avanzatagTendremos problemas para ganar más de lo que les corresponde, ya que deben tener suerte y crear más bloques de cadena de recompensa que la cadena honesta. Además, los agricultores solo cultivan en los desafíos que corresponden a la cadena más pesada.

Tanto la velocidad del VDF como la cantidad total de espacio son importantes para el peso, y los cambios en estos pueden desencadenar ajustes de dificultad. Si la cantidad de espacio aumenta, se crearán más de 32 bloques por ranura, por lo que se debe aumentar la dificultad. Si la velocidad del VDF de la red aumenta, se crean más de 32 bloques cada 10 minutos y, por lo tanto, la dificultad (y las iteraciones de subtragamonedas) debe incrementarse.  

Sin embargo, un agricultor con acceso exclusivo a un VDF un poco más rápido no puede obtener fácilmente más recompensas que un agricultor con el VDF de velocidad normal. Si un atacante intenta dejar huérfano a uno de los bloques de la cadena, tener un VDF más rápido no ayudará, ya que la cadena del atacante tendrá menos bloques (y por lo tanto un peso menor). Los agricultores deben firmar el bloque sobre el que están construyendo, y solo construirán sobre la cadena de mayor peso.

Sin embargo, la velocidad VDF entra en juego cuando el atacante desea lanzar un ataque del 51%. En este caso, un granjero atacante puede usar el VDF para crear una cadena completamente alternativa sin bloques honestos y superar a la cadena honesta.

Follaje

En los diagramas anteriores, no hay lugar para que los agricultores especifiquen sus recompensas, ya que todos los bloques son canónicos. Los agricultores no tienen voz en cómo se construye su bloque, ya que deben usar la prueba de espacio exacta, los VDF y las firmas que se especifican. Para incluir recompensas agrícolas, así como transacciones en el sistema, debemos introducir un componente adicional de bloques llamado follaje. Hasta ahora hemos estado discutiendo el componente "troncal".

Trompa: El componente de bloques y la cadena de bloques que incluye VDF, pruebas de espacio, firmas de PoS, desafíos y bloques de troncales anteriores, y es completamente canónico. El tronco nunca se refiere a la cadena de follaje.

Follaje: El componente de bloques y la cadena de bloques que incluye la especificación de dónde deben ir las recompensas, qué transacciones deben incluirse y cuál es el bloque de follaje anterior. Esto depende del agricultor para decidir y se puede triturar, por lo que nunca se puede utilizar como entrada para los desafíos.

Reorganizar: Una reorganización (o reorganización) es cuando un nodo view del pico cambia, de modo que el viejo view contiene un bloque que no está incluido en el nuevo view (algún bloque se invierte). Son posibles tanto los reordenamientos del tronco como del follaje, pero deberían ser raros en la práctica.

En la figura 11 a continuación, podemos ver que el follaje se agrega a los bloques para producir una cadena adicional. Este follaje incluye un hash del follaje anterior, un hash de bloque de recompensa y una firma. Estos indicadores de follaje están separados de la cadena del tronco y no son canónicos. Es decir, los agricultores podrían teóricamente crear una reorganización de follaje donde se reemplaza el follaje, pero se usa exactamente el mismo tronco (pruebas de espacio y tiempo). Para evitar esto, los agricultores honestos solo crean un bloque de follaje por bloque. Tan pronto como un granjero honesto ha agregado un bloque de follaje, el follaje se vuelve imposible de reorganizar más allá de esa altura. con el mismo PoSpace, ya que ese agricultor no volverá a firmar con el mismo PoSpace.

Además, bloques como B3 que vienen en paralelo con otro bloque de follaje (B2) no tienen que firmar el bloque de follaje anterior, ya que no necesariamente tienen tiempo suficiente para verlo. Por "venir en paralelo", queremos decir que el punto de señalización del segundo bloque ocurre antes del punto de infusión del primer bloque. Las flechas rojas en el diagrama representan un puntero de follaje que está firmado por la clave de trazado para la prueba de espacio en ese bloque. Las flechas grises representan un puntero de almohadilla que no está firmado por la clave de trazado (por lo tanto, la flecha gris en B3 puede ser reemplazado si B2 cambios o se retiene). Esto evita ataques donde B2 modifica su bloqueo y fuerzas B3 reorganizar.

Los bloques que tienen punteros rojos también son elegibles para crear transacciones y, por lo tanto, se denominan bloques de transacciones. Un bloque es un bloque de transacciones Si y sólo si es el primer bloque cuyo punto de señalización ocurre después de la infusión del bloque de transacción anteriorsp3 viene antes B2, (un bloque de transacciones y el bloque anterior de B3), entonces B3 no puede ser un bloque de transacciones. Las flechas rojas brindan seguridad al enterrar bloques de follaje, pero las flechas grises no. El propósito de las flechas grises es mantener una lista vinculada en el follaje y reducir la complejidad en las implementaciones. Sin embargo, los bloques con gris las flechas que apuntan a ellos quedan enterradas en el siguiente bloque.

Figura 11: Bloques y bloques de follaje. Los bloques tienen transacciones y tienen punteros rojos (punteros al último bloque). Tenga en cuenta que el inicio de la sub-ranura también es un punto de señalización.

El hash de bloque es un hash de todo el follaje y el bloque del tronco. Los reorgs funcionan en bloques hash. Incluso si vemos una cadena con las mismas pruebas de espacio y tiempo, siempre que los follajes sean diferentes, los bloques son diferentes. Tenga en cuenta que ambos agricultores (B2 y B3) podría tener la oportunidad de crear el bloque, por lo que ambos deben proporcionar el puntero firmado y las transacciones. Sin embargo, cualquier bloque de transacciones también se puede incluir como un bloque normal, y dado que B2 y B3 están en paralelo, solo uno de ellos puede realizar un bloque de transacción.

Si bien todos los bloques aún eligen los hash de rompecabezas de dónde van sus recompensas, esas transacciones no se incluyen en la cadena de bloques hasta el siguiente bloque de transacciones.

Para la red principal de chia, habrá 32 bloques cada 600 segundos, para un tiempo de bloque promedio de 18.75 segundos. Habrá 64 puntos de señalización, por lo que el tiempo mínimo entre bloques es 3 * 600/64 = 28.125 segundos. Esto sitúa el tiempo medio de bloqueo de transacciones en 46.875 segundos.

Épocas y ajuste de dificultad

Sub-época: La sub-época N comienza cuando la sub-época  termina (a excepción de la sub-época 0), y termina al final de la primera ranura donde  Los bloques se han incluido desde la génesis. 

Época: La época N comienza cuando finaliza la época N-1 (excepto la época 0), y termina al final de la primera ranura donde  Los bloques se han incluido desde la génesis.

Dificultad: Una constante que escala el número de iteraciones para una prueba de espacio dada. Las iteraciones se calculan como dificultad / calidad.

Cada 4608 bloques, se activa el ajuste de dificultad. Esto modifica dos parámetros: el parámetro slot_iterations y el parámetro de dificultad.

El parámetro sub_slot_iterations se restablece, por lo que una ranura de 300 segundos requiere cerca de slot_iterations muchas iteraciones. El reinicio se realiza utilizando los valores de la última época para aproximar las iteraciones por segundo ración, concretamente.

Para una época, deje que la época * denote el período ligeramente desplazado donde época * comienza con el último bloque que se infundió antes de que comience la época, y termina con el último bloque que se infundió en una época. Los valores t1, i1 y w1 denotan el tiempo másamp, iteraciones desde la generación y peso desde la generación al comienzo de la época *, (t2, i2, w2) son los valores al final de la época *.

Es decir, el delta en iteraciones totales desde el inicio hasta el final de la época, dividido por el delta en tiempoamps, i2, es el total de iteraciones del punto de infusión del último bloque de la época. i1 es el total de iteraciones del punto de infusión del último bloque en la época anterior. Iteraciones de subintervalo es el número total de iteraciones por subintervalo.

Tenga en cuenta que no tomamos las iteraciones y el tiempo exactamente al final de una época, sino en el último punto de infusión de un bloque en una época, la razón es simplemente que solo tenemos el tiempoamps disponible cuando se infunden bloques.

   

Esto se puede reorganizar para usar solo una división de piso:

The sub-slot iterations are adjusted such that each slot lasts around 600 seconds. The difficulty is adjusted such that every challenge gets 32 blocks on average with less iterations than the slot_iterations. It is important to note that the VDF iterations per slot is not material to the weight. That is, if there were two identical worlds where VDF speeds were equal and space was equal, but the sub-slot iterations parameter was 2 times higher in one world, then the blockchain with the higher sub-slot iterations would get twice as many blocks included per slot, but each slot would take twice as long, so the weight per second added to the chain is the same in both cases. Another way to look at it is that increasing sub-slot iterations increases the number of blocks per slot, but it also makes slots last longer, and thus has no effect on weight / second.

Sub-épocas

Como se describió anteriormente, la cadena de desafíos está completamente separada y no se refiere a nada en la cadena de recompensas. Si estas cadenas permanecieran separadas para siempre, un atacante con un VDF más rápido podría mirar hacia el futuro lejano y predecir desafíos. El atacante puede crear un bloque por ranura, con espacio limitado, creando así una cadena de desafíos completa. Esto les permitiría crear parcelas y crear instantáneamente pruebas de espacio para estas parcelas que ganarán en el futuro, y luego eliminar las parcelas (un ataque de replanteo de largo alcance). De esta manera, pueden completar su cadena de recompensas y aumentar su peso.

 

La solución a esto es periódicamente (cada 384 bloques, que es un promedio de 2 horas) infundir el extremo de la cadena de recompensas de la ranura en la cadena de desafío. Esto significa que el atacante solo puede realizar el ataque de replanteo durante unas pocas horas en el futuro. Trazar en sí mismo lleva algunas horas, pero incluso si el atacante pudiera volver a trazar instantáneamente, el costo de un ataque de rediseño superará los beneficios. Infundimos no la producción actual de la cadena de recompensas, sino la producción de la cadena de recompensas del final de la sub-época anterior (hace 2 horas).

El costo de crear una parcela incluye la electricidad para calcular todas las tablas, la RAM necesaria para crear esta parcela y los costos fijos de infraestructura (espacio, energía, refrigeración, etc.). Suponiendo el peor de los casos de un VDF súper rápido y un trazado ASIC instantáneo, los beneficios serían equivalentes a los beneficios de almacenar ese trazado en un disco duro durante unas horas. Está claro que este ataque no merece la pena y que almacenar las parcelas es mucho más económico (análisis a continuación).

Lo anterior explica por qué el intervalo de sub-época debe mantenerse relativamente bajo. Pero, ¿por qué no podemos reducirlo aún más a menos de 2 horas para desincentivar aún más los ataques de replicación? La razón es que cada vez que se infunden datos no canónicos en la cadena de desafíos, se presenta una oportunidad de pulir. Esto significa que un atacante posiblemente puede optar por incluir o excluir bloques para manipular cuál será el desafío dentro de 2 horas. Si este tiempo es demasiado corto, pueden ganar un pequeño espacio de avance.tage haciendo esto con más frecuencia.

El segundo propósito de las sub-épocas es actuar como puntos de control en un protocolo similar a flyclient que se explica a continuación, para aumentar la eficiencia de los clientes ligeros.

Verificación de cliente ligera

El soporte ligero al cliente es otro beneficio de la prueba de espacio en comparación con la prueba de participación, ya que todas las pruebas pueden verificarse objetivamente de forma criptográfica y requieren controlar un recurso real en un momento determinado.

Para clientes ligeros que desean sincronizarse rápidamente con la cadena (por ejemplo,ample carteras móviles), un nodo completo puede crear una prueba de tamaño pequeño que puede convencer al cliente ligero de que el peso de una cadena está cerca de algún valor. A esto se le llama prueba de peso. Ingenuamente, el cliente ligero puede descargar cada bloque y todas las pruebas requeridas y verificarlas, pero con una cantidad tan grande de bloques, esto requeriría mucho ancho de banda y CPU.

Un método más eficiente se basa en un protocolo similar a Flyclient [4]. El nodo (probador) envía todos los resúmenes de sub épocas desde el punto de bifurcación, que incluyen restablecimientos de dificultad, al cliente ligero. Solo hay uno cada 384 bloques, por lo que solo puede llegar a unos pocos MB de datos. El nodo también determinísticamente samples varias sub-épocas basadas en el desafío del último bloque. Las sub-épocas tienen la posibilidad de ser elegidas proporcionalmente a la dificultad durante esa sub-época. Para la sub-época elegida, el cliente ligero descarga uno de los bloques de la cadena de desafío (que son aproximadamente 1/32 de todos los bloques) y calcula las iteraciones de infusión promedio de todos los bloques de desafío en esa sub-época. Basado en este tiempo, el cliente ligero puede extrapolar cuántos bloques contiene la cadena de recompensas. Por example, si todos los bloques de desafío ocurren con iteraciones muy pequeñas (cerca del comienzo de la ranura), es probable que haya muchos bloques en esa ranura. Por el contrario, si las iteraciones están cerca de la mitad de la ranura, es probable que solo haya un bloque por ranura. Esto permite al cliente ligero descargar solo 1/32 de los bloques en cada ranura, pero aún así obtener una buena estimación del peso total.

Además, las últimas sub-épocas deben descargarse en su totalidad para el cliente ligero. Esto agrega una pequeña cantidad de datos, pero evita que los atacantes creen pequeñas bifurcaciones al final de la cadena. La principal diferencia entre este protocolo y flyclient es que los bloques no están comprometidos con el uso de una cordillera merkle, sino que el cliente ligero descarga la lista completa de hashes de sub-época de genesis, garantizando que las sub-épocas consultadas se incluyan en la cadena. . Otra diferencia es que se descargan secciones enteras, en lugar de bloques individuales.

Es necesario realizar más análisis sobre cuántas sub-épocas deben descargarse y cuáles son los límites de lo que implica la prueba de peso.

pooling

La agrupación en Chia está diseñada para ser extremadamente simple y más descentralizada que la agrupación en Bitcoin / ethereum. En Chia, la clave pública de la piscina está incrustada en las parcelas, para evitar que el agricultor robe las recompensas de la piscina al participar en más de una piscina. El agricultor descarga la dirección de la piscina, junto con su firma. Un agricultor envía periódicamente parciales para pruebas de espacio que tienen menos de T iteraciones, donde T es elegido por el grupo.

Cuando el granjero gana un bloque, envía la firma del granjero y la firma del grupo. Las tarifas de transacción, junto con ⅛ de la recompensa en bloque van al agricultor, mientras que ⅞ de las recompensas en bloque van al grupo. La razón para dar parte de la recompensa al agricultor es desincentivar los ataques en los que un grupo ataca a otro "agrupando" por ellos, pero sin presentar las pruebas ganadoras. Este es un ataque que puede hacer que el otro grupo cierre.

Esto es más simple porque el grupo no necesita hacer nada más que publicar su firma una vez en un websitio, recolectando parciales y realizando pagos periódicamente. Es más descentralizado porque los bloques son hechos por los agricultores, por lo que los grandes grupos centralizados tienen poco control sobre la red y eso aumenta la resistencia a la censura de transacciones.

Un segundo protocolo de agrupación más complicado le permitirá especificar un contrato inteligente singleton en el que almacenar la dirección de la agrupación. Las parcelas incluirían el hash del rompecabezas del contrato inteligente, lo que permitiría a los agricultores cambiar de grupo en cualquier momento, con un retraso. El inconveniente de este protocolo de agrupación es que se requiere una transacción en cadena para comenzar a cultivar y, por lo tanto, no es estrictamente mejor que el primer protocolo de agrupación.

Algoritmo Timelord

Un señor del tiempo realiza un seguimiento del pico actual que incluye un bloque infundido a una determinada altura, y puntos de señalización desde el pico en adelante. Un señor del tiempo puede recibir nuevos bloques para infundir, nuevos picos (bloques que ya están infundidos) o nuevos puntos de señalización.

¿Cómo decide un señor del tiempo en qué desafíos crear pruebas de tiempo, dado un número limitado de procesadores disponibles? Si bien es probable que los ASIC se desarrollen en el futuro, en este momento las implementaciones de VDF de grupo de clases más rápidas se encuentran en hardware de propósito general, ya que parece que el VDF de grupo de clases es FPGA duro. Además, incluso después del desarrollo de los ASIC, es importante que cualquier usuario con una CPU pueda ser un señor del tiempo, para proporcionar alternativas en caso de que los señores del tiempo de ASIC caigan o se vuelvan maliciosos, etc.

En general, los señores del tiempo trabajan en la cadena más pesada. Crean pruebas de tiempo en los puntos de señalización y las transmiten a la red a medida que las alcanzan. También infunden bloques tan a menudo como pueden. Cuando el señor del tiempo recibe un bloque infundido que tiene un peso mayor que el pico actual, lo cambia inmediatamente.

Señores del tiempo también ejecute las tres cadenas VDF en paralelo. Por lo tanto, se necesitan al menos 3 núcleos de CPU rápidos para hacer avanzar la cadena de bloques a un ritmo eficiente. Se necesitarán núcleos de CPU adicionales para crear pruebas a un ritmo eficiente, pero no es necesario que sean tan rápidos.

Si el señor del tiempo recibe un desafío con menos peso que su pico actual, lo ignora.

Si el señor del tiempo recibe un punto de desafío más adelante en la cadena actual, lo más seguro es ignorarlo. La razón es que al cambiar a un punto más en el futuro, el señor del tiempo podría saltarse la infusión de bloques y, por lo tanto, dejar huérfanos a los bloques válidos.

Si el señor del tiempo recibe un bloqueo para infusión que se retrasa (ya hemos alcanzado el punto de desafío en el que debería haberse infundido el bloque), ignoramos esto, ya que cambiarlo permitiría a los atacantes retener los bloques. [TODO expandir]. Por lo tanto, la operación principal del señor del tiempo consiste en mantener un caché de futuros bloques para infundir, transmitir puntos de desafío cuando se alcanzan e infundir bloques cuando llegamos a sus puntos de desafío.

Si el señor del tiempo recibe un desafío con el mismo peso que el pico actual, elige el bloque sin terminar que vio primero (es decir, el bloque que aún no ha sido infundido), en lugar de elegir el bloque infundido (pico) que vio. primero. Esto también desincentiva la retención de bloques.

Ataques y contramedidas relevantes

51% (46%) ataque:

Un ataque del 51% implica la creación de una cadena alternativa que eventualmente alcanza un peso mayor que la cadena honesta y obliga a los usuarios a reorganizarse. El ataque clásico de largo alcance que también está presente en los sistemas de prueba de trabajo es el ataque del 51%. En el ataque del 51%, el atacante con el 51% del espacio de red crea una cadena alternativa y finalmente se pone al día. Hay dos diferencias principales entre el consenso de Chia y la prueba de trabajo: la primera es que el atacante puede extender y cultivar en muchas cadenas simultáneamente. La segunda es que si el atacante tiene el VDF más rápido, puede obtener un avance de espacio adicional.tage / impulso.

Extendiendo muchas cadenas

Si un atacante está creando su propia cadena privada, puede elegir qué bloque se infunde en la cadena de desafío y, por lo tanto, puede probar muchas infusiones diferentes para obtener la mejor cadena posible. Debido al promedio de 32 bloques con el mismo desafío, el atacante solo puede probar alrededor de 32 combinaciones diferentes (qué bloque incluir en la cadena de desafío), y la ramificación exponencial de probar cada uno de estos daría un pequeño impulso en el espacio para el atacante (al tener 5 PiB, pueden fingir tener 6 o 7, etc.). Esto se debe a que las cadenas alternativas que se están probando son inferiores y es menos probable que superen a la más larga. Esto se ha analizado en [1].

La cantidad real de espacio necesario para realizar este ataque (para que el atacante obtenga una cadena más pesada que el resto de la red combinada) es del 46.3%, debido a la capacidad de un atacante de "probar" diferentes combinaciones de bloques, por ejemplo.ample omitiendo o no omitiendo el primer bloque. Si hubiera un nuevo desafío de prueba de espacio para cada bloque, el atacante puede multiplicar su espacio por un factor de e = 2.718, donde solo se requiere el 27% para superar la red. Al establecer el número de bloques en 32, aumenta el espacio requerido por el atacante al 46%.

The reason for not increasing this further than 32 is the following: if we increased the number of blocks per 10 minute slot to something like 200, then the ability for someone with a slightly faster VDF to orphan others would increase. This is because the time between blocks would get very small. With 32 blocks, the time between blocks is around 15-25 seconds, and a much faster VDF is required to orphan.

Furthermore, the Stanford paper [Tse et. al, 1] shows that increasing the number of blocks per challenge increases security at a very slow rate, so increasing this number slightly does not provide much benefit.

Si el atacante manipulara la dificultad, puede cambiarla para obtener menos bloques de recompensa por ranura. Entonces pueden incluir o excluir cada bloque, y extender exponencialmente todas las cadenas simultáneamente, y podrían multiplicar su espacio por un factor pequeño [1]. No está claro si este ataque gana mucho, ya que el atacante debe cambiar la dificultad, lo que requiere sacrificar algo de peso. Sin embargo, para evitar este ataque, existe el requisito de que se deben crear al menos 16 bloques de cadena de recompensa para que se incluya un bloque de desafío. Esto eleva el espacio de atacante requerido en el peor de los casos del 27% al 42%.

VDF más rápido y 46% del espacio

El ataque del 46% empeora si el VDF del atacante es más rápido. Supongamos que el VDF del atacante es 2 veces más rápido. Entonces, su cadena podrá crear desafíos y bloques al doble de la velocidad del resto de la red, lo que significa que pueden crear una cadena "más pesada" con la misma cantidad de espacio.

Este espacio requerido cae del 46% a aproximadamente el 30% del espacio total de la red. 0.46 / 0.54 = 2x / (1-x). x = 0.30. Si el atacante no tiene acceso al VDF más rápido, no podrá obtener un avance de espacio.tage.

Espacio de chía / espacio de disco duro global

Existe la preocupación de que si el sistema Chia no tiene una cantidad significativa de espacio en comparación con el espacio libre disponible de los fabricantes de discos duros o las grandes empresas, será vulnerable a ataques del 51%. Por lo tanto, cuanto más espacio ocupa el sistema Chia, más segura es la red. Un escenario plausible es que aparece mucho espacio, lo que hace que las recompensas por TB sean bastante bajas y no lo suficientemente significativas como para justificar la compra de unidades o la eliminación de datos comerciales. Además, la creación de un gráfico requiere una cantidad fija de tiempo y dinero por adelantado (de los cálculos actuales en beta17, alrededor de 1kWh por un k32, o alrededor de 10 centavos, que es $ 1 por terabyte).

Ataque del 100%

Si se activó el ajuste de dificultad cada X ranuras VDF, a diferencia de cada X bloques, esto permitiría un ataque del 100%, donde todos los agricultores se confabulan para disminuir o aumentar constantemente la dificultad. En funcionamiento normal, hay 32 bloques por ranura. Bajo un ataque del 100%, la dificultad se manipula de tal manera que la dificultad baja en 2, por lo que hay 64 bloques por ranura y luego aumenta en 4, por lo que hay 16 bloques por ranura, alternando para siempre. Esto permitiría a los agricultores ganar en promedio 64 + 16/2 = 36 recompensas en bloque por espacio. Esta es la razón por la que se hace un ajuste de dificultad en función del número de bloques.

Ataque de replanteo de corto alcance

Trazar usualmente toma varias horas (8 horas para un k32 en beta 14 con un núcleo), pero es muy paralelizable, por lo que los atacantes pueden encontrar formas de crear parcelas después de que se lanza un desafío, y luego borrar la trama, de hecho, pueden finca sin almacenar el espacio de forma continua. Esto probablemente requerirá hardware especializado costoso con memoria rápida, ya que el gráfico debe crearse a tiempo para la infusión (menos de 30 segundos).

Si asumimos el peor de los casos en el que un agricultor puede crear una parcela instantáneamente, la pregunta es: ¿cuál es el costo y cuál es el beneficio del ataque? El costo es el costo de electricidad, memoria, hardware e infraestructura de crear esa parcela. El costo de crear 1TB es actualmente del orden de $ 1 en costos de electricidad. El beneficio sería el mismo beneficio que almacenar ese gráfico durante 80 minutos (el intervalo del punto de señalización multiplicado por la constante del filtro del gráfico). Esto se debe a que el atacante puede elegir una trama que pase el filtro de trama. Suponiendo un valor de $ 5 por año por terabyte, el valor de una parcela de 1TB durante 80 minutos es $ 0.00094. Por lo tanto, con el software y hardware de trazado actuales, es significativamente más barato almacenar los gráficos en lugar de volver a crearlos.

La constante del filtro de parcela es muy útil para reducir la cantidad de búsquedas de disco que deben realizar los agricultores. Con un filtro de parcela de 512, en lugar de 7 lecturas de disco por parcela cada 9 segundos, los agricultores solo necesitan realizar aproximadamente 7 lecturas por cada 80 minutos. La constante del filtro de trazado proporciona al atacante un multiplicador del beneficio de redistribución, por lo que no debe establecerse demasiado alto. Con una constante de filtro de gráficos de 512, 1/512 gráficos son válidos para cada desafío. El atacante solo puede crear parcelas que pasen el filtro, por lo que no necesita crear las otras 511/512. Establecerlo en 512 proporciona un multiplicador de 512x, etc.

VDF más rápido (pero no ataque del 51%)

Con el VDF más rápido del sistema, un atacante puede realizar un ataque del 51% de manera más efectiva: es decir, expandir su espacio, cuando cultiva en una cadena privada. Si el atacante no alcanza un total del 51% del espacio (con el VDF impulsando y extendiendo muchas cadenas como arriba), la utilidad del VDF más rápido disminuye sustancialmente. Esto se debe a que la inclusión y exclusión de bloques no depende de qué tan rápido pueda realizar el VDF, sino que depende de si es menor que las iteraciones de la sub-ranura. Además, un atacante necesita el espacio del resto de la red para avanzar y, por lo tanto, debe liberar los desafíos a la red.

En ciertos casos en los que los bloques se acercan mucho, tener un VDF más rápido puede permitir que un atacante deje huérfanos a ciertos bloques, aunque esto no aumenta las recompensas a corto plazo y tiene el riesgo de socavar la red a largo plazo. TODO: expandir: bram

Agricultura egoísta

La agricultura egoísta es un ataque en el que el atacante cultiva bloques en privado y solo los libera cuando corren el riesgo de ser superados por la cadena honesta. En Nakamoto PoW, esto proporciona ganancias significativas, porque en cualquier punto en el que el minero está por delante del resto de la red, el resto de la red está desperdiciando su poder de hash en una cadena que no ganará. En el consenso de Chia esto es diferente, debido a la demora de 30 a 40 segundos y al hecho de que dejar huérfanos a los bloques de otros agricultores no aumenta las recompensas. (??)TODO: expandir: bram

Ataque de tronco de soborno de granjero

Un ataque interesante explorado por [10] es el ataque de soborno que avanzatage de la previsibilidad de los “líderes” electos en cada espacio. Los autores analizan una prueba de la cadena de participación y argumentan que cuando los participantes saben que van a ganar de antemano, existe un posible ataque de soborno. Si los participantes sabían de antemano qué parcelas ganarían, cada usuario puede notificar a un atacante que está dispuesto a participar en el ataque, y si alcanzan un cierto umbral, pueden reorganizar completamente la cadena (o dejar huérfanos a los que no participan, censurar transacciones, etc.). Este ataque NO requiere la mayor parte del espacio de la red para participar; sólo los ganadores en ese corto período de tiempo. Además, es indetectable, ya que el atacante puede hacer una cadena de apariencia normal.

Este problema no está presente en esta revisión del algoritmo de consenso de Chia. Este problema se resuelve reduciendo la previsibilidad: cada agricultor no sabe con certeza si su prueba de espacio es totalmente elegible hasta el punto de señalización. Por lo tanto, un atacante debe sobornar a una gran mayoría del espacio para llevar a cabo este ataque.

Granjero soborno ataque de reorganización de follaje

Dado que los bloques están firmados por claves de PoSpace, un agricultor teóricamente puede firmar varios bloques con el mismo PoSpace, a la misma altura. El ataque requiere que una parte malintencionada soborne a los agricultores con una cierta cantidad de fondos para que proporcionen la firma de una cadena alternativa. Si el atacante puede convencer a todos los agricultores de N bloques para que firmen, pueden revertir o reordenar cualquier transacción en esos N bloques. Potencialmente, se podrían utilizar pruebas de fraude, pero no se eligieron ya que permiten otros ataques y complican el comportamiento.

En cambio, la solución es simplemente esperar más. Después de 32 bloques (aproximadamente 10 minutos), la suposición de que al menos un agricultor está siguiendo el protocolo y no firma dos veces es razonable. Si el 54% no es colusión (la suposición de un 46% de resistencia al ataque), la probabilidad de una reversión después de 32 bloques es. Además, este ataque es detectable, por lo que no es fácil de realizar.

Cada usuario puede elegir su propio umbral por el cual acepta una transacción / bloqueo como final. Por example, en los casos en que el espacio total de la red cae repentinamente, los usuarios pueden ser más cuidadosos y no considerar las transacciones definitivas, en caso de que exista otra bifurcación existente, debido a una división de la red, por ejemplo.ampel.

Bloques de transacciones huérfanos por tarifas de transacción

Transacción bLos bloqueos son diferentes de los bloques sin transacción, ya que contienen tarifas de transacción. Estos pueden superar las recompensas de bloque. En el momento de redactar este artículo (noviembre de 2020), en el pico de desfase estamos viendo recompensas de 2 bloques eth con 8 tarifas eth por bloque. En Chia esto será más extremo, ya que no todos los bloques contienen transacciones. Esto conduce a ataques en los que el agricultor en segundo lugar ignora el primer lugar en un intento de ganar el bloque de transacciones. Si el segundo bloque viene menos de 2 segundos después del primero, no especifican el bloque anterior y, por lo tanto, el segundo lugar no puede ser huérfano del primero. El 1er puesto podría dejar a ambos huérfanos, pero nadie seguiría esta cadena ya que es más corta.

Sin embargo, si no hay bloques dentro de los 30 segundos del primer bloque, el segundo podría dejar huérfano al primero, pero tendrían que convencer al siguiente bloque de que se cultive en su cadena alternativa. Un ataque más fácil sería si el atacante controlara tanto el segundo como el tercero, en cuyo caso podría ignorar el primero y aún así ser más largo.. Estos ataques de huérfanos no permiten al atacante robar recompensas, sino que permiten al atacante reducir ligeramente la dificultad. Dado que son muy situacionales y requieren mucho espacio, intentar este ataque probablemente dañará la red más que la ganancia potencial para el atacante.

Tasa de huérfanos

En el consenso de Chia, dos bloques en competencia casi al mismo tiempo se pueden incluir en la cadena de bloques en paralelo, sin conocerse entre sí. (Aunque a lo sumo uno puede ser un bloque). Dado que todos los bloques de transacciones también son bloques, ambos se incluyen en la cadena, lo que da como resultado una cadena con mayor peso. Esto significa que la tasa de huérfanos en Chia será esencialmente cero, asumiendo una baja latencia de red. Si la latencia de la red excede el retardo de infusión (30-40 segundos), entonces la huérfana de un bloque está casi garantizada, por lo que es más una función escalonada. Esto contrasta con Nakamoto-PoW en el que la tasa de huérfanos es alta si hay un retraso en la red y disminuye suavemente a medida que mejora la condición de la red, pero nunca llega a cero.

Análisis

Seguridad

La seguridad es similar a la de otros algoritmos de consenso de Nakamoto como Bitcoin. No hay una finalidad garantizada, pero cuantas más confirmaciones tenga una transacción, más segura será. Una transacción necesita un cierto número de confirmaciones para que un receptor asuma que no se puede reordenar, por debajo del <46% (* vdf advancetage) suposición coludida. Dado que, en teoría, los agricultores pueden firmar varios bloques a la misma altura, se deben usar más confirmaciones en Chia que en Bitcoin. Sin embargo, con una tasa de 32 bloques por 10 min, 6 confirmaciones en Bitcoin equivalen a 192 en Chia, lo cual es más que suficiente para ser considerado seguro. Siempre que uno de esos 192 agricultores se comporte bien (no doble firma), esa transacción no se revertirá.

Vale la pena señalar que no se requiere un 54% de espacio de cultivo honesto, pero un 54% sin colusión. Los agricultores que buscan ganancias obtienen muy poco al desviarse del protocolo.

Existe la suposición adicional de que al menos un timelord rápido debe estar conectado a la parte no coludida de la red, y que el timelord del atacante no es significativamente más rápido.

Vivacidad

La vivacidad del sistema de consenso de Chia es una de sus mayores fortalezas. Al igual que Bitcoin, el sistema de Chia continúa avanzando incluso cuando la mayor parte del espacio se desconecta. Sin embargo, a diferencia de bitcoin, el sistema no se ralentiza significativamente cuando esto sucede, ya que no todos los bloques son bloques de transacciones.. Por lo tanto, el rendimiento de las transacciones no disminuye demasiado si muchos participantes se desconectan. Continuará incluso si solo hay 1 agricultor en línea, aunque habrá muchas ranuras vacías, ya que un bloque de transacción solo se puede crear si está por debajo del umbral de iteraciones de sub-ranura.

Por supuesto, en el caso de una división de la red a largo plazo, los efectos son que se debe elegir una cadena, por lo que puede haber grandes regiones en este caso. Aún así, la red elige la cadena más pesada, similar a PoW.

Comparación con BFT algoritmos de consenso

La prueba de espacio también podría usarse como un mecanismo resistente a Sybil para arrancar un BSistema de consenso zantino (acuerdo k). Filemoneda, y muchos sistemas de prueba de participación utilizan aspectos del consenso bizantino.

Los pros y los contras de utilizar el consenso de Chia Nakamoto frente al consenso bizantino, que varían de un algoritmo a otro:

  • + Mucho más simple
  • + Sin requisito de registro
  • + Sin requisito de escalabilidad (escala a millones de agricultores)
  • + Más resistente a la censura. Siempre que una pequeña parte del espacio agrícola no censure, eventualmente puede ingresar a la cadena de bloques.
  • + Sin requisitos de vida, potencialmente menos supuestos de red
  • + Totalmente objetivo (un nodo puede comparar la cadena 1 y la cadena 2, y saber inmediatamente cuál es más pesada). No se necesitan puestos de control con ⅔ consenso.
  • + Mejor soporte al cliente ligero [11]
  •  Sin finalidad, solo probabilística.
  •  Es necesario esperar más para las confirmaciones de transacciones (relacionadas con la falta de finalidad).
  •  Tiempos de bloqueo y rendimiento de transacciones menos consistentes

Comparación con Nakamoto PoW

  • + Diferentes recursos. PoSpace es resistente a ASIC y, por lo tanto, cualquiera puede participar en la agricultura. Ojalá más descentralizado.
  • + Agricultura de fusión fácil. Otras criptomonedas pueden usar el mismo formato y todos pueden compartir el espacio. Probablemente el de arriba será el único seguro, ya que los agricultores pueden atacar a los más pequeños.
  • + Energía mínima utilizada, ya que solo unos pocos nodos ejecutan VDF y estos no están en paralelo. Costo marginal muy bajo A la mía.
  • + Tiempos de bloque de transacciones más consistentes (uno por ~ 1 min).
  • + Menos susceptible a los ataques mineros egoístas.
  • + Tarifas y horquillas huérfanas más pequeñas, ya que los bloques se pueden incluir en paralelo.
  • + Sigue avanzando al mismo ritmo cuando el espacio disminuye, ya que solo 1/16 bloques incluyen transacciones. El consenso de PoW nakamoto se ralentiza.
  •  Inconveniente de más atacantes potenciales (grandes empresas). El hardware es de uso general y, por lo tanto, los atacantes podrían alternar entre la agricultura, el ataque y el uso para el almacenamiento de datos.
  •  Acelerar VDF podría dar un avance espacialtage para alguien que ataca la red.
  •  Más complejidad debido a subranuras y VDF, potencialmente más suposiciones criptográficas

Comparación con la prueba de participación

Este algoritmo de consenso también se puede utilizar como prueba de participación, donde los agricultores espaciales son reemplazados por apostadores que poseen monedas en el sistema. El beneficio sería la capacidad de cortar (eliminar la participación de las personas), y los agricultores tendrían "la piel en el juego", pero existen algunas preocupaciones si se utiliza la prueba de participación. (+ significa beneficio por usar el espacio frente a la participación).

  • + Un atacante puede transferir su participación a otra persona, pero bifurque la cadena justo antes de que se transfiera su participación. En esta cadena alternativa, el atacante todavía tiene toda su apuesta y, por lo tanto, puede avanzar en la cadena. El problema de "nada en juego" es diferente en PoStake que en PoSpace, ya que la creación de un PoSpace requiere un recurso físico (espacio en el disco duro), mientras que la creación de un PoS solo requiere una clave.
  • + Un atacante puede garantizar su parte de todo el pastel apostando sus recompensas (los ricos se vuelven más ricos), ya que el número total de monedas es limitado.
  • + Allá Pueden ser situaciones en las que el atacante puede trabajar de muchas formas diferentes para transferir la participación. Quizás esto pueda mitigarse requiriendo un largo período antes de que la participación se active.
  • + Es necesario registrarse, no puede participar en la prueba de participación hasta que se registre. Esto reduce la privacidad y la escalabilidad (cuántas personas pueden participar).
  • + Barrera de entrada más alta: los depósitos de seguridad y los recortes dificultan la participación de los pequeños usuarios. La tala puede ser un gran riesgo para los participantes de la red. Los custodios centralizados conducen a un conjunto de participantes menos distribuido.
  • Alguno Suposiciones [11] deben realizar sincronizaciones ligeras con el cliente en la prueba de participación.
  •  Skin en el juego: con PoStomar, el consenso puede reducir el interés de las personas y también requiere cierta inversión en el sistema (exposición al precio). En Prueba de espacio, los discos duros se pueden usar para otros fines y no hay capacidad para "cortar" el hardware de las personas.

Referencias

  1. Vivek Bagaria, Amir Dembo, Sreeram Kannan, Sewoong Oh, David Tse, Pramod Viswanath, Xuechao Wang, Ofer Zeitouni, Proof of Stake Protocolos de cadena más larga, seguridad frente a previsibilidad [Descargar]
  2. Aggelos Kiayias, Alexander Russell, Bernardo David, Roman Oliynykov, Ouroboros: un Protocolo de cadena de bloques de prueba de participación comprobadamente seguro [Descargar]
  3. Bram Cohen y Krzysztof Pietrzak, La cadena de bloques de Chia Network
  4. Benedikt Bunz, Lucianna Kiffer, Loi Luu y Mahdi Zamani, 2019-226 [PDF]
  5. Krzysztof Pietrzak, Funciones de retardo verificables eficientes [Descargar]
  6. Benjamín Wesolowski, Funciones de retardo verificables simples [Descargar]
  7. Stefan Dziembowski, Sebastian Faust, Vladimir Kolmogorov y Krzysztof Pietrzak, Pruebas de espacio [Descargar]
  8. Hamza Abusalah, Joel Alwen, Bram Cohen, Danylo Khilko, Krzysztof Pietrzak y Leonid Reyzin, 2017-893 [Descargar]
  9. Red de chía, Prueba de chía de construcción espacial
  10. Soubhik Deb, Sreeram Kannan, David Tse, Disponibilidad e imprevisibilidad de la prueba de trabajo de PoSAT, sin el trabajo [Descargar]
  11. Alejandro Skidánov, Clientes ligeros en sistemas de prueba de participación

–  –

Referencias

Deja un comentario

Su dirección de correo electrónico no será publicada. Los campos obligatorios están marcados *