¿Cómo se selecciona un minero en la Prueba de participación?

Estoy tratando de entender POS. Entiendo que POS usa moneda mantenida de manera análoga al poder hash mantenido en el sistema POW. Cuanto mayor sea la participación que tengamos, mayores serán nuestras posibilidades de minar el bloque. En varias fuentes leí que un minero se elige de manera determinista.

¿Puede alguien explicar cómo se lleva a cabo la selección de mineros? Y como todos están de acuerdo con el mismo minero, tiene que haber algún algoritmo involucrado.

Aquí se menciona bastante: https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ pero parece que no puedo encontrar la respuesta a mi consulta.

Respuestas (3)

El algoritmo de acuñación para apostar es diferente para varias monedas; por ejemplo, es diferente en BlackCoin de Cardano.

Hay varios enfoques para el staking, pero la mayoría de ellos son susceptibles a "ataques de molienda" y casi ninguno de ellos ha demostrado ser seguro contra todos los ataques (solo se argumenta que es seguro de manera intuitiva al mostrar que ciertos ataques específicos no funcionan).

Para dar una respuesta concreta a su pregunta, describiré un caso específico de un protocolo de prueba de participación que ha demostrado ser seguro: el protocolo Ouroboros Praos .

En el protocolo Praos, puedes imaginar que cada satoshi corresponde a un par de claves pública/privada. El protocolo de Praos para hacer staking funciona de la siguiente manera: si eres un staker honesto, miras la fecha y la hora actuales y las redondeas al segundo más cercano (la unidad de tiempo a la que lo redondeas es configurable en general y corresponde a los "slots" síncronos " del protocolo). Digamos, por ejemplo, que obtienes d = "2018-07-01 00:19:24". Tomas esa fecha y hora como entrada, y la firmas con tu clave privada correspondiente a tu satoshi, obteniendo una firma s. Luego compara esa firma con el objetivo de dificultad Tpara ver sis <= T, similar a cómo bitcoin compara hashes de bloque contra la dificultad. Si es así, entonces ha sido "líder elegido" y se le permite generar un bloque. Primero genera los contenidos del bloque xque consisten en las transacciones en su mempool, así como un puntero al bloque anterior. Luego firma xcon su clave pública y produce otra firma s'. Luego transmite a la red su firma sque ilustra que ha sido elegido; la fecha y hora actual dpara la confirmación de la elección; las transacciones confirmadas xque también incluyen la referencia al bloque anterior; y su firma sobre el contenido del bloque s'. La tupla (s, d, x, s')es el bloque.

Ahora, otros validadores pueden verificar que usted es el líder elegido por derecho. Comprueban que ses una firma para d, que s'es una firma para x, que xcontiene transacciones válidas y apunta a la punta de una cadena de bloques anterior (con una marca de tiempo más antigua y transacciones no conflictivas). Finalmente deben verificar que cumples con el objetivo: sdebe estar por debajo de T.

Este es un protocolo bastante simple, pero, quizás sorprendentemente, puede demostrarse que es seguro. Esto es lo que lo hace elegante. También es bastante similar a cómo Bitcoin genera bloques. Si está intrigado acerca de por qué este protocolo es seguro, lo animo a leer el documento.

Algunos detalles:

  • Es posible que los malos actores generen múltiples contenidos de bloque para la misma fecha y hora en que han sido elegidos líderes. Esto no causa ningún problema porque las partes honestas solo generarán bloques que se comprometan con un bloque más antiguo, rompiendo así los lazos.
  • Es posible que dos partes honestas generen un bloqueo al mismo tiempo. Esto no es un problema y también puede ocurrir en bitcoin. Dichos lazos se resolverán, siempre que los parámetros del protocolo se modifiquen para no permitir que se produzcan bloques muy a menudo entre las ranuras (los parámetros exactos se especifican en el documento)
  • Dije anteriormente que ses una "firma" en el tiempo actual d, pero un punto técnico es que no es una firma, sino lo que llamamos una función aleatoria verificable VRF . Esto es como una firma, excepto que tiene la seguridad de que la salida se comporta como una salida aleatoria (como un hash perfecto que se comporta como un "oráculo aleatorio").
(en realidad, está tratando de generar bloques con la mayor anticipación a la hora actual que otros nodos le permitan)

No me permite publicar un comentario, así que lo publicaré como respuesta a la respuesta de dioyziz. No veo cómo esto es seguro porque las claves privadas son libres de hacer. Entonces, la persona con la mayor cantidad de claves privadas y que ejecuta la mayor cantidad de nodos tiene una ventaja, ya que puede generar la mayor cantidad de hashes para esa marca de tiempo en particular. Lo que esencialmente lo convierte nuevamente en una carrera de prueba de trabajo. Quién puede generar una clave privada que, combinada con esta marca de tiempo en particular, cumpla con la condición de dificultad.

Cada entrada de replanteo posible se utiliza para generar un resultado en función de sus propiedades y, en comparación con la dificultad, se crea y propaga un bloque exitoso.

Estos cálculos son coherentes y verificables en la red, por lo que es una cuestión de propagación y verificación si se acepta.