
Los desarrolladores de la bifurcación de Litecoin Cash presentaron una preimpresión del documento técnico '
The Hive: Minería basada en agentes en Litecoin Cash ', en el que describieron su propuesta para proteger la cadena de bloques de criptomonedas basada en el algoritmo de prueba de trabajo de un "ataque del 51%". Su solución combina la minería con dispositivos ASIC antiguos (SHA-256) y la minería virtual democrática con "abejas que trabajan" (HiveMine). En el caso de la implementación adecuada de blockchain, LCC resolverá uno de los mayores problemas de los proyectos modernos de blockchain (desde Bitcoin hasta Ethereum): la amenaza de un ataque cuando más de la mitad de la potencia total de la red se concentra en manos del atacante.
51% de problema de ataque
Aquellos que monitorean el mercado de criptomonedas no podían dejar de notar el reciente brote
de ataques del 51% en proyectos de PoW relativamente pequeños (prueba de trabajo - "prueba de trabajo realizado"), cuando los atacantes reescribieron transacciones y transfirieron fondos lo más rápido posible a través de intercambios. "Relativo" en este caso significa que una pequeña fracción de dispositivos que soportan la seguridad criptográfica de una gran cadena de bloques (Bitcoin o Ethereum, por ejemplo) será suficiente para romper el consenso de una pequeña cadena de bloques que funciona en el mismo algoritmo de hashing (Bitcoin Cash o Bitcoin Gold, respectivamente) .
En el caso de las criptomonedas que toman el algoritmo SHA-256 (LCC o BCH) como base para el cifrado, el riesgo se agrava por el hecho de que la criptomoneda más grande y segura del mundo funciona con el mismo algoritmo: Bitcoin (BTC).
En este artículo, nos centraremos en el modelo matemático de protección contra ataques del 51% y destacaremos superficialmente los principales términos y conceptos relacionados utilizados en la criptografía de blockchains.
Introducción a la alta minería
En el esquema de seguridad clásico de la cadena de bloques PoW, los mineros compiten calculando una gran cantidad de hashes de bloque potenciales para encontrar uno que cumpla las condiciones de complejidad especificadas por el consenso de la red. Si la complejidad es cero y la red acepta cualquier hash como válido, la prueba de trabajo no funcionará y cualquier nodo de la red puede extraer fácilmente bloques.
A primera vista, esto no es malo: la minería se volverá democrática y de bajo costo en términos de energía. Pero en la práctica, todos extraerán bloques baratos y los empujarán a la red, lo que significa que habrá muchos candidatos para la continuación de la cadena de bloques. Como los mineros ya no entenderán en qué bloque construir la continuación de la cadena de bloques, aparecerán muchas cadenas huérfanas. Habrá caos, que fue observado por las monedas de PoW con un algoritmo inadecuado para ajustar la complejidad de la minería.
Si la complejidad es cero y la producción del bloque no incurrirá en ningún costo, nadie podrá determinar qué cadenas candidatas valen más, lo que significa que no habrá prioridad. Los mineros también podrán trabajar en varias cadenas sin perder nada.
Este experimento mental simplemente demuestra que el propósito principal del algoritmo de prueba de trabajo, prueba de participación o prueba de cualquier cosa en general es proporcionar a la red una forma determinista de determinar el derecho a extraer, acuñar o forjar un bloque, con el que otros participantes estarán de acuerdo . Además, otra condición importante para todos los buscadores de bloques es no trabajar en múltiples cadenas simultáneamente con impunidad. En el sistema de prueba de participación, este enfoque se castiga con la privación parcial o total de una participación.
La alta minería es una forma alternativa de lucha de bloques cuando el derecho a producir un bloque está asegurado por un agente que trabaja en nombre del usuario. Estos agentes, "abejas que trabajan", están en la cadena de bloques. Están completamente descentralizados y se crean cuando un usuario realiza una transacción especial para crear un agente.
Después de la creación, las abejas que trabajan comienzan a actuar como dispositivos virtuales para la minería (rig), y sus dueños se convierten en "apicultores". Cuando las abejas obreras obtienen el bloque con éxito, se paga al apicultor la remuneración por el bloque (incluidas las comisiones incluidas en el bloque). Las abejas que trabajan requieren muy poca energía y no necesitan equipos especializados para la producción de bloques. Además, su vida útil es limitada y la creación de una abeja es una acción especulativa con un cierto precio; Esto evita los intentos de trabajar en múltiples cadenas al mismo tiempo. El éxito de una abeja individual depende únicamente de la población de abejas que viven en toda la red. Algunas abejas nunca encontrarán un bloque, mientras que otras serán desproporcionadamente afortunadas (similar a la minería en solitario).
Fig. 1: se agrega una abeja de trabajo a la cadena de bloques a través de una transacción de creación de abejas (BCT) y bloques de minas durante su vida útilCreación de agentes (abejas trabajadoras)
Para crear una abeja funcional, el usuario envía la transacción a una dirección especial "muerta", por ejemplo:
CReateLitecoinCashWorkerBeeXYs19YQ
. Tenga en cuenta que todos usan la misma dirección para crear la abeja. Esta dirección se analiza como existente y correcta, pero nadie tiene una clave privada; La utilidad vanitygen determina que la búsqueda de una clave privada usando núcleos de 24 * 2 GHz tomará alrededor de 1.7 * 10 ^ 31 años (con un 50 por ciento de posibilidades de éxito).
Una transacción que crea una abeja debe tener al menos dos salidas. El primero define una tarifa fija para crear una abeja, que se envía a una dirección inaccesible. Aunque el precio de crear una abeja se determinará dinámicamente, se supone que será un porcentaje de la recompensa del bloque. Este cálculo incluye el costo mínimo, por lo que para el momento en que se extraen todas las monedas, tiene sentido usar una alta extracción para recibir tarifas de transacción.
La segunda conclusión tiene un costo cero, pero especifica la dirección base, que recibirá cualquier recompensa por el bloqueo encontrado por la abeja en el futuro. Puede llamarlo "la dirección futura del apicultor". Si lo desea, el propio usuario puede aclararlo; de forma predeterminada, se generará una nueva dirección cada vez en su billetera.
Un ejemplo:
"vout": [ { // Bee creation fee "addr": "CReateLitecoinCashWorkerBeeXYs19YQ" "value": 1.0000000 }, { // Address to receive block rewards for any blocks this bee mines "addr": "CTrdm8YDfjmFJwFnKbvNZ9NYznhMqrNgFR" "value": 0.0000000 }, { // Change address for change from creation fee "addr": "Cd6CRuWCu6p4NLR6XG7BKyC8hzvEoYuKbn" "value": 123.5274346 } ]
Las abejas maduran y se vuelven capaces de producir bloques después de que aparecen 576 bloques en la cadena de bloques desde el momento en que se crearon las abejas. Este es el número esperado de nuevos bloques agregados a la cadena de bloques Litecoin Cash en 24 horas. Después de que las abejas maduran, hay 4032 bloques (aproximadamente 1 semana) y buscan bloques, luego mueren.
La abeja se crea en una billetera QT. Algo así se ve así:
Fig. 2: Diseño de la billetera LCC con abejas trabajandoBees at Work: Block Search
Por ejemplo, digamos que blockchain height = 1000, y la red debe determinar qué abeja está asignada para encontrar el bloque 1001. El apicultor de Alice ahora tiene 4 abejas (creadas entre 576 y 4608 bloques).
Cuando aparece el bloque 1000, la billetera de Alice calcula dos valores.
El primero es un valor determinista que es impredecible pero fácilmente verificable. Esto es fácil de hacer agregando hashes de bloque a diferentes profundidades (codificadas) entre, por ejemplo, 0 y 500000 bloques, asegurando que nuestro valor aleatorio esté bien enraizado en la cadena de bloques:
string deterministicRandString = blocks[blockHeight].hash + blocks[blockHeight-13].hash + blocks[blockHeight-173].hash + blocks[blockHeight-1363].hash + blocks[blockHeight-27363].hash + blocks[blockHeight-496393].hash;
Luego, su billetera calcula el hash objetivo de la abeja,
beeTargetHash
. Este valor está determinado por el promedio móvil exponencial con un rango dinámico muy alto, que establece
beeTargetHash
para que se determine la frecuencia de los bloques obtenidos durante el proceso de extracción para cualquier población dada de abejas. En el lado positivo, cuantos más bloques PoW se han extraído desde el último bloque de mina alta, mayor (más simple)
beeTargetHash
. El algoritmo se define de la siguiente manera; Los valores de
maxTarget
,
emaWindowsSize
y
emaDesiredSpacing
se determinarán durante la simulación.
beeHashTarget = previousBeeHashTarget (default to highest (easiest) target maxTarget) numPowBlocks = number of pow blocks since the previous hive mined block; emaInterval = emaWindowSize / emaDesiredSpacing; beeHashTarget *= (interval - 1) * emaDesiredSpacing + numPowBlocks + numPowBlocks; beeHashTarget /= (interval + 1) * emaDesiredSpacing;
Cualquier nodo de la red puede calcular tanto
deterministicRandString
como
beeHashTarget
.
La billetera de Alice ahora pasa a cada una de sus abejas vivas a través de una cadena aleatoria determinista, combinando las transacciones BCT de las abejas y haciéndolas hash para obtener un nuevo hash: el beeHash de una abeja individual. Por lo tanto, cada abeja genera un hash por bloque. Este hash es similar al mejor hash generado por una plataforma minera PoW durante el mismo período de tiempo.
hash beeHash = sha256(deterministicRandString + bee.creationTransaction.ID)
Debido a que la billetera de Alice rastrea las abejas, cada una de las cuales calcula
beeHash
, mantiene un registro de los mejores (más bajos) hashes descubiertos. Si, como resultado, el mejor hash descubierto por la billetera de Alice satisface la condición
beeHash < beeTargetHash
, Alice obtiene el derecho de agregar un bloque.
Supongamos que Alice tiene una abeja viva, cuyo hash es más bajo que el objetivo, y el identificador de transacción BCT de una abeja exitosa es el siguiente:
0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841.
Sabiendo que la billetera de Alice tiene derecho a firmar un bloque, la red produce un bloque con una transacción especial con dos salidas:
"vout": [ { // Zero-value output identifies the bee and proves it's really minting for Alice "value": 0, "n": 0, "scriptPubKey": { "asm": "OP_RETURN OP_BEE 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841 IH3Emz49KJeRbw0q4R48pD6GWPQtvHCxLeQOxxH+yv14Tn5KzUFIXBe9Td8EHudejzebMYt/XpusENzNkGM/a4I=" } }, { // Block reward (subsidy + fees) - must pay to bee's correct coinbase address "value": 250.0001125, "n": 1, "scriptPubKey": { "addresses": [ "CTrdm8YDfjmFJwFnKbvNZ9NYznhMqrNgFR" ] } }
vout[0]
es una salida de valor cero que no se puede gastar. Se usa tanto para identificar la abeja que consiguió el bloqueo, como para demostrar que lo consiguió para Alice.
vout[1]
es el resultado que le paga a Alice una recompensa en bloque.
Confirmación de bloqueo
La billetera de Bob, al recibir el bloqueo de Alice, ahora debe asegurarse de que satisfaga el consenso. Primero, se asegura de que la transacción incluye dos entradas, la primera de las cuales es cero, y que el script comienza con
OP_RETURN OP_BEE
. Luego recupera la identificación de la transacción de abeja de Alice:
0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841.
Digresión: dado que la transacción de crear una abeja se transfiere a una dirección inaccesible, la salida de transacciones no gastadas (UTXO) permanece en ella. En consecuencia, la billetera de Bob no necesita habilitar la opción de línea de comando txindex
(que indexa completamente todas las transacciones debido a la verificación retrasada y al mayor uso del disco) para verificar fácilmente las salidas BCT de Alice. Debido al uso de UTXO, la billetera QT no necesita ninguna base de datos o modificaciones para admitir una alta minería. La pestaña de abejas también se integra dinámicamente.
Al validar el bloque de alta mina, la billetera de Bob implementa el equivalente de RPC (llamada a procedimiento remoto):
gettxout 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841 0
Esto le da la primera salida BTC,
vout [0]
, y asegura que 1) la profundidad de la transacción se encuentre en el rango de vida útil de la abeja; 2) se pagó una comisión por la creación de una abeja; 3) se envió a la dirección correcta del callejón sin salida.
Si se aprueba la verificación, la billetera de Bob producirá:
gettxout 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841 1
Obteniendo así la segunda salida de BCT,
vout [1]
, confirmando que 1) el valor es cero; 2) la dirección es la misma que la dirección para recibir la transferencia de monedas en el bloque (en el ejemplo
CTrdm8YDfjmFJwFnKbvNZ9NYznhMqrNgFR
).
La siguiente verificación verifica la firma del mensaje de la última parte de
vout [0]
. El mensaje debe contener el número de bloque actual, firmado por la dirección para recibir la transferencia de monedas, por lo tanto, la billetera de Bob produce:
verifymessage CTrdm8YDfjmFJwFnKbvNZ9NYznhMqrNgFR "IH3Emz49KJeRbw0q4R48pD6GWPQtvHCxLeQOxxH+yv14Tn5KzUFIXBe9Td8EHudejzebMYt/XpusENzNkGM/a 4I=" "1001"
Finalmente, Bob calcula
deterministicRandString
y
beeHashTarget
para el bloque actual, luego calcula el
beeHash
de Alice y lo
beeHashTarget
con
beeHashTarget
. Si se pasan todas las verificaciones, el bloque se considera válido y verificado. El proceso de validación de bloques es rápido y no requiere verificación costosa de bloques históricos.
Emparejamiento Hi-Mining y PoW Mining
Se supone que la alta minería no es el único método para garantizar la seguridad de la red. Los desarrolladores de Litecoin Cash no solo quieren salvar a la comunidad minera, sino también no interferir con ella de ninguna manera. La minería alta debe combinarse con la minería PoW en una cadena de bloques.
Actualmente, el funcionamiento del circuito se calcula de la siguiente manera:

Es decir, el funcionamiento del circuito se acumula en función de la complejidad en cada bloque del circuito. Los desarrolladores proponen cambiar esta definición de la siguiente manera:

Por lo tanto, cada bloque colmena-mina será recompensado dependiendo de la cantidad de trabajo concluido en el bloque PoW anterior, y la constante
k
se determina experimentalmente.
Conclusión: la alta minería como defensa contra el ataque 51%
Según la desarrolladora jefe de Litecoin Cash, Jane 'Tanner' Craig, la idea de HiveMine no es solo proporcionar una protección confiable contra el ataque del 51%, sino también democratizar y descentralizar la minería. A diferencia de las cadenas de bloques de PoS, cuando "los ricos se vuelven más ricos", acumulando su parte, HiveMine todavía requiere el costo de crear una abeja que no valga la pena. La minería basada en agentes satisface las tres tareas principales del equipo: complicar significativamente el ataque del 51%, democratizar la minería y la libertad para los mineros que usan el algoritmo SHA-256, que garantiza una alta seguridad de la misma red de Bitcoin. Para un ataque exitoso, un atacante necesitará hacerse cargo del 51% del poder de la red, así como del 51% de la población de abejas en la red, y dado el proceso de creación de abejas, esto se hará evidente de inmediato.
Según Craig, después de probar e implementar el modelo HiveMine en la red Litecoin Cash, que no cuenta con la misma tasa de hash SHA-256 que el mismo Bitcoin Cash, sin embargo, será más rápido y más confiable que las redes Bitcoin Cash o Bitcoin .
Referencias
1. '
The Hive: Minería basada en agentes en Litecoin Cash ', Iain CRAIG, Sebastian CLARKE, Michał WYSZYŃSKI y Federico DE GONZÁLEZ-SOLER. (2018)