minería

Lesson Nº 2 – Minería.

Minería

Introducción

La minería es el proceso en el que los nodos en la red de Bitcoin ensamblan las transacciones de Bitcoin recién emitidas en una estructura de datos llamada bloque . Luego, los nodos compiten para agregar su bloque a la cadena de bloques pública al mutar repetidamente la estructura de datos de encabezado del bloque, generalmente incrementando el campo nonce, y luego dividiéndolo en un intento de encontrar un valor que satisfaga una prueba de trabajo difícil.

Cuando un nodo encuentra un hash de prueba de trabajo válido para un bloque, transmite el bloque a todos los nodos. Otros nodos aceptan este bloque solo si todas las transacciones en él son válidas y aún no se han incluido en un bloque. Otros nodos en la red luego expresan su aceptación del bloque al construir sobre él para crear el siguiente bloque en la cadena.

Cada bloque tiene una marca de tiempo y hace referencia al hash del bloque que lo precede. Los bloques forman una cadena con marca de tiempo de refuerzo hacia atrás: una cadena de tiempo, precursora del término ‘cadena de bloques’.

La cadena de bloques se estructura a sí misma de una manera que es computacional y económicamente poco práctica de modificar por cualquier entidad. Debido a esto, las transacciones incluidas en la cadena de bloques se consideran inmutables. Además de esta calidad, la cadena de bloques establece un orden autorizado de estas transacciones en toda la red al establecer cuáles de las dos transacciones conflictivas se vieron primero, protegiendo así a los usuarios de los intentos de volver a gastar monedas que ya se han gastado en otro lugar. Esta es la innovación clave de la minería y de Bitcoin.

Nodos

Los nodos son entidades que ejecutan software que lleva a cabo las funciones de minería anteriores. Los nodos se comunican usando una red P2P con su propio protocolo, y son los autores del libro mayor de Bitcoin y los ejecutores de las reglas del protocolo .

Curiosamente, el documento técnico de Bitcoin no hace referencia al término ‘minero’ o al concepto de ‘minería’. Estos términos cubren las acciones descritas en la sección 5 del documento técnico de Bitcoin que describe las responsabilidades de los nodos en la red.

Es posible ejecutar el software de cliente de nodo sin realizar el ensamblaje de bloques o la prueba de trabajo. Dicha configuración se puede utilizar como interfaz de la red para otros sistemas, como exploradores de bloques, pasarelas de pago y archivos. Eventualmente, se espera que se desarrolle software de cliente personalizado para cada uno de estos servicios, de modo que ya no dependan del cliente de nodo para operar.

Las computadoras que ejecutan un cliente de nodo pero que no realizan pruebas de trabajo no pueden agregar nuevos bloques a la cadena de bloques. Esto significa que no pueden expresar la aceptación de bloques válidos al trabajar en extenderlos, ni rechazar bloques inválidos al negarse a trabajar en ellos. Estas computadoras existen como entidades pasivas que siguen a los guardianes de la red, los mineros.

Mempool

Antes de que una transacción de Bitcoin pueda comprometerse con la cadena de bloques, debe ser recibida y validada por un minero. Si el minero considera que la transacción es válida, agrega la transacción a uno de varios mecanismos . Los Mempools son almacenes de transacciones temporales y se pueden usar para mantener transacciones agrupadas de diferentes maneras, como las transacciones que se extraerán en el siguiente bloque, las transacciones que se verán o las transacciones que no se pueden extraer debido a un bloqueo de nLocktime / nSequence.

Es importante tener en cuenta que cada minero tiene sus propios mempools y que los mempools varían según los mineros. También es importante tener en cuenta que una transacción individual se puede incluir en diferentes mecanismos al mismo tiempo.

Un minero toma las transacciones que pretende incluir en el siguiente bloque y las agrupa en una estructura de árbol de merkle e incluye la raíz de merkle resultante dentro de un encabezado de bloque candidato. Luego, el minero procesa este encabezado de bloque candidato, intentando encontrar una prueba de trabajo válida.

Hashing

Un hash es una función que convierte una cadena de datos en un valor de longitud fija que representa la cadena original, llamada valor hash. Cada valor hash es único.

El hash es una función unidireccional, lo que significa que no es factible determinar cuáles son los datos de entrada al observar el hash producido a partir de ellos. Por el contrario, es trivial ejecutar los mismos datos de entrada a través de la misma función hash y reproducir el mismo hash. Debido a esto, un valor hash de los datos de entrada puede considerarse como la huella digital de esos datos. En la minería de Bitcoin, los datos de entrada son el encabezado del bloque de 80 bytes.

El algoritmo de hash utilizado en la minería de Bitcoin es SHA-256 . SHA-256 son las siglas de Secure Hash Algorithm – 256 bit. Pasar los mismos datos de encabezado de bloque a través de este algoritmo siempre generará el mismo número de 256 bits. Sin embargo, si los datos del encabezado se modifican incluso por un solo bit, se obtendrá un número de 256 bits completamente diferente y no relacionado.

La minería de Bitcoin pasa los datos del encabezado del bloque a través del algoritmo SHA-256 dos veces (SHA-256d).

Prueba de trabajo

Bitcoin utiliza una función de Prueba de trabajo basada en el trabajo anterior de hashcash .

Un minero no puede crear un nuevo bloque sin encontrar un hash de prueba de trabajo válido para el encabezado del bloque que está troquelando. Para ser válido, el hash SHA-256d (que es solo un número) del encabezado del bloque debe ser menor que otro número, llamado destino . El valor objetivo está definido por el campo Bits en el encabezado del bloque que se está dividiendo en hash.

El objetivo se ajusta de modo que el tiempo promedio que le lleva a toda la red encontrar un hash de prueba de trabajo válido es de diez minutos.

Debido al espacio objetivo SHA-256 extraordinariamente grande, es extremadamente improbable que un hash determinado esté por debajo del objetivo. Como resultado de esto, las entidades de hashing invierten grandes cantidades de capital en hardware de hashing especializado junto con los costos de electricidad asociados con el fin de producir la mayor cantidad posible de estos hashes en un período de tiempo determinado. Por lo tanto, la única forma en que un minero puede agregar un bloque a la cadena de bloques es a través de un compromiso sustancial de gasto operativo: prueba de trabajo.

Incentivo

La primera transacción en cada bloque se llama transacción de Coinbase . La transacción de Coinbase es una transacción especial que paga bitcoins al minero del bloque. El pago de Coinbase se compone del monto del subsidio y la suma de todas las tarifas de transacción pagadas por transacciones dentro del bloque minado.

Competencia

Propagación y validación

Si un minero encuentra una prueba de trabajo válida para el encabezado del bloque que está procesando, lo anuncian inmediatamente enviando el bloque completo a otros mineros. Mientras tanto, comienzan a trabajar para encontrar el siguiente bloque en la cadena.

Los mineros en competencia reciben este bloque e inmediatamente verifican que todas las transacciones dentro del bloque, así como la prueba de trabajo sean válidas. Si el bloque es válido, suspenden la extracción sobre el bloque anterior y comienzan a trabajar en el hash de un nuevo encabezado de bloque, construyendo en el bloque que acaba de encontrar su competidor.

Hay incentivos en juego aquí. Primero, el ‘minero A’ ganador se esfuerza por llevar su bloque ganador a todos los demás mineros lo más rápido posible. Esto reduce la posibilidad de que el ‘minero B’ competidor (que encontró un bloque válido aproximadamente al mismo tiempo) propague su bloqueo a algunos mineros antes de que el ‘minero A’ pueda hacerlo. Esto abre la posibilidad de que el bloque ‘minero A’ pueda quedar huérfano y la recompensa de Coinbase se vuelva inválida e inutilizable por ‘minero A’. El grado de ancho de banda y conectividad con otros mineros puede verse como una ventaja competitiva y, como tal, la red minera tiende a una estructura mundial pequeña y densamente conectada con un alto ancho de banda.

También existe una ventaja competitiva en la validación de transacciones. Al validar un bloque, las entradas de cada transacción deben buscarse en el conjunto UTXO del minero para verificar que no se hayan gastado y que la cantidad en satoshis sea correcta. Además, los scripts de bloqueo y desbloqueo de cada entrada deben ser ejecutados por el minero para evaluar si cada transacción es válida.

Bloques rechazados

En cualquier momento dado, dos o más mineros independientes pueden extraer un bloque al mismo tiempo. En esta situación, los nodos pueden estar en desacuerdo sobre cuál de estos bloques debería ser la punta de la cadena de bloques.

Los mineros siempre siguen la cadena más larga que consideran válida. Finalmente, se encontrará otro bloque que se basa en uno de los consejos de la cadena competidora. Los mineros luego cambian a este consejo siempre que lo consideren válido. Como tal, cualquier escenario de fork finalmente se resuelve en una cadena persistente a través de las acciones de la mayoría del poder hash.

En este escenario, un bloque que no termina formando parte de la cadena más larga es rechazado por la red y se llama un Bloque huérfano . Un bloque huérfano representa un esfuerzo desperdiciado en nombre de un minero y un incentivo para invertir en infraestructura para reducir la frecuencia de estos eventos. Sin embargo, los huérfanos no reducen los ingresos generales del sistema Bitcoin ya que el trabajo desperdiciado no se tiene en cuenta en el ajuste de dificultad, por lo tanto, si un cierto porcentaje del trabajo de hashing se desperdicia debido a los bloques huérfanos, la dificultad se ajustará hacia abajo en un porcentaje similar , manteniendo la misma tasa de producción de bloque válida en general. Además, las transacciones de pago de tarifas en el bloque huérfano seguirán siendo válidas e incluidas en el bloque competidor o sus descendientes.

Los bloques válidos competidores no son la única forma en que los bloques terminan siendo rechazados. Cualquier minero puede negarse a construir en cualquier bloque por cualquier motivo. Tal acción de un minero en particular solo tiene sentido si la mayoría de los mineros llevan a cabo la misma acción. Es a través de este mecanismo que la red minera puede establecer un consenso sobre las variables que son configurables por el minero, como el tamaño máximo de bloque. Esta es la base del Consenso de Nakamoto:

«Votan con su poder de CPU, expresando su aceptación de los bloques válidos al trabajar en extenderlos y rechazando los bloques inválidos al negarse a trabajar en ellos. Cualquier regla e incentivo necesarios se pueden hacer cumplir con este mecanismo de consenso».

El ecosistema minero

Minería asic

Un circuito integrado de aplicación específica, o ASIC, es un microchip diseñado y fabricado para un propósito muy específico. Los ASIC diseñados para la minería de Bitcoin se lanzaron por primera vez en 2013. Por la cantidad de energía que consumen, son mucho más eficientes que los enfoques anteriores de minería, ya que utilizan CPU, GPU o FPGA.

Minería agrupada

La minería agrupada es el uso de un sistema de asignación de plantillas de bloques que proporciona encabezados de bloques actualizados de infraestructura de hashing distribuido contra los cuales realizan pruebas de trabajo. Este sistema de asignación de hash a los nodos es una parte principal del Consenso de Nakamoto, ya que los operadores individuales de poder de hash pueden optar por reasignar su hash a los nodos que producen bloques que cumplen con sus expectativas en términos de rentabilidad maximizada y adherencia al conjunto de reglas de Bitcoin. Los mineros que distribuyen plantillas de bloques que no maximizan las ganancias o que intentan implementar conjuntos de reglas modificados corren el riesgo de que los propietarios de la maquinaria hash dependan de volver a implementarla en un nodo diferente en la red.

Estrato

Stratum es un protocolo de minería de código abierto utilizado por muchos grupos de minería. Stratum facilita la coordinación entre el operador de la piscina minera y las máquinas mineras individuales.

Ver también

Atribución

Este contenido se basa en el contenido de https://en.bitcoin.it/wiki/Mining bajo Creative Commons Attribution 3.0 . Aunque puede haber sido ampliamente revisado y actualizado, reconocemos a los autores originales.

Bitcoin Wiki

El caso de uso minero

Los mineros son una parte importante del ecosistema, por lo que es valioso examinar sus requisitos. Por supuesto, los mineros pueden tener muchas motivaciones para extraer una cadena de bloques en particular, incluida una visión a largo plazo, por ejemplo, pero el análisis a continuación considera los requisitos para un minero interesado en el corto plazo, en la rentabilidad inmediata de extraer la cadena de bloques de Bitcoin SV .

La principal prioridad de los mineros es garantizar que los bloques que extraen sean aceptados por la mayoría de los otros mineros y que los otros mineros extraigan sobre estos bloques.

Distribución de bloques

La característica más crítica es la distribución en bloque. Si el minero ha descubierto un nuevo bloque, debe distribuir ese bloque lo más rápido posible para que otros mineros construyan encima de ese bloque, cementando el bloque en la cadena de bloques y asegurando que la recompensa y las tarifas del bloque sean válidas.

Si el minero ha aceptado un nuevo bloque de otro minero, entonces el minero comenzará a minar encima de ese bloque. En este caso, el minero también está muy motivado en distribuir este nuevo bloque a otros mineros para que el bloque no quede huérfano y se desperdicie el esfuerzo minero.

La velocidad es esencial para la distribución de bloques. Cada fracción de tiempo que toma distribuir el bloque a otros mineros y para que esos mineros comiencen a minar en la parte superior del bloque, crea la posibilidad de encontrar un bloque en competencia. Cuanto más se tarde en distribuir el bloque, mayor es el riesgo de un bloque competidor.

Tenga en cuenta que el minero está principalmente interesado en distribuir el bloque a otros mineros. Distribuir el bloque a otros participantes de la red es sustancialmente menos prioritario. Puede ser ligeramente interesante porque esos otros participantes de la red pueden distribuir el bloque a un minero, pero sería más preferible una conexión directa con el otro minero.

Por supuesto, otros participantes de la red también necesitarán el bloque para satisfacer sus diversas necesidades comerciales, pero esto no es crítico desde el punto de vista del minero.

Tenga en cuenta que en general solo distribuir el último bloque es una prioridad para los mineros. Proporcionar bloques más antiguos no es de interés, consulte a continuación para obtener más detalles. Sin embargo, en algunas circunstancias puede ser necesario priorizar la distribución de algo más que la punta, como cuando se extraen múltiples bloques en sucesión muy rápidamente.

Recepción de bloque

Los mineros están muy motivados para recibir rápidamente nuevos bloques de otros mineros. Si se descubre un nuevo bloque válido en la red, el minero está muy motivado para cambiar a minería encima de ese bloque lo más rápido posible, suponiendo que este bloque sea aceptado por el resto de la red.

Si el minero encuentra un bloque cuando ya ha descubierto un nuevo bloque en la red pero no ha terminado de recuperar o validar ese bloque, entonces el minero ha encontrado un bloque de la competencia. Dado que el minero ya ha detectado el otro bloque, es muy probable que el minero ya esté en desventaja con su bloque competidor y probablemente pierda la competencia.

Adquisición de transacciones

El minero está motivado para adquirir tantas transacciones como sea posible para incluir esas transacciones en el bloque que está extrayendo.

Distribución de transacciones

La motivación principal para que los mineros distribuyan transacciones es mejorar la velocidad a la que se propagaría su bloque, si se encontrara el bloque. Una fuerte motivación secundaria es apoyar a la cadena de bloques en su conjunto evitando gastos dobles sin confusiones o alertando a la red sobre la existencia de intentos de doble gasto.

Otras características

Proporcionar descargas de bloques más antiguos no es de interés para los mineros. En esta etapa del desarrollo de la cadena de bloques de Bitcoin, los mineros pueden admitir esta función para admitir generalmente la cadena de bloques, pero no es una función requerida. A medida que el ecosistema evoluciona, podemos esperar proveedores especializados de archivado en bloque.

https://wiki.bitcoinsv.io/index.php/The_Miner_Use_Case

Bitcoin Wiki

Ataques a Bitcoin

Hay muchos métodos teorizados para atacar Bitcoin, sin embargo, todos deben ejecutarse a un costo significativo para el atacante. Al momento de escribir este artículo, aún no se ha definido un ataque en la red de Bitcoin que conlleva un beneficio económico para el atacante desde dentro de Bitcoin.

A continuación se detallan los métodos de ataque que se han discutido en el pasado.

Ataques basados ​​en transacciones

Los ataques basados ​​en transacciones involucran a atacantes que crean o envían transacciones que causan nodos que no están suficientemente protegidos para sufrir una degradación del rendimiento o incluso una falla. Existen varios tipos de ataques basados ​​en transacciones.

Ataque de validación de script

Un ataque de validación de secuencia de comandos implica la creación y el envío de una transacción a la red que incluye una secuencia de comandos que provoca un uso severo de la memoria dentro del motor de evaluación de secuencias de comandos con el objetivo de hacer que el motor se averíe. Un ejemplo de tal script es:

OP_DUP OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DUP OP_CAT OP_DROP <pubkey> OP_CHECKSIG OP_RETURN

Este script tiene solo 99 bytes de longitud. Toma la firma proporcionada (aproximadamente 72 bytes), la duplica dos veces, luego concatena los dos elementos duplicados para crear un elemento de datos de 144 bytes. Luego duplica el elemento de datos de datos de 144 bytes y lo duplica y concatena el resultado. La duplicación y la concatenación se repiten 32 veces en un intento de crear un elemento de datos de hasta 309 GB de tamaño en la pila, que luego cae antes de validar la firma. Si se proporcionó la firma correcta y la mayoría de los nodos en la red central eran capaces de manejar un elemento de datos de 307 GB, esta transacción podría teóricamente ser aceptada y explotada.

Mitigación

Antes de la actualización de Genesis, el motor de evaluación de scripts estaba protegido por la prueba ‘isStandard’ que solo permite validar las transacciones que se ajustan a algunas plantillas muy específicas. Después de la génesis, los mineros han tenido que implementar rutinas de administración de memoria que rechazan las transacciones una vez que comienzan a consumir grandes cantidades de memoria. En el futuro, se espera que la mayoría de las transacciones aún se ajusten a un número relativamente pequeño de plantillas, y que las transacciones que son poco comunes o únicas puedan pasar a través de una capa adicional de simulación o prueba antes de ser validadas.

Transaction Volume Attack

Este ataque es similar a un ataque de denegación de servicio distribuido mediante el cual se usa un par o muchos pares en la red para crear volúmenes extremadamente grandes de transacciones para propagación a través de la red. Se pudo ver un ejemplo bien intencionado de este tipo de ataque durante las pruebas de estrés de Bitcoin realizadas a lo largo de 2018 usando la escopeta Satoshi: un bot de gran volumen de transacciones, que resultó en la degradación del servicio en la mayoría de las billeteras y servicios y dentro de la red misma. Las pruebas no tuvieron éxito al evitar que la función de minería de red funcione de manera normal, sin embargo, dificultaron a los usuarios realizar transacciones o utilizar servicios.

Mitigación

Este ataque se mitiga en gran medida a escala con tarifas de transacción. El costo de crear y enviar millones de transacciones, y la capacidad de la red central para recibir, sellar y archivar los millones de registros de transacciones resulta en que la red absorba el ataque.

Ataque de agotamiento de memoria

Este ataque se basa en que los mineros usan la configuración en el software cliente de su nodo, lo que hace que mantenga y retenga transacciones que no planea extraer en el caso de que sean extraídos por otros nodos y necesiten ser validados rápidamente. El atacante debe tener un conocimiento íntimo de la configuración del minero que requeriría algún tipo de publicación de información o ingeniería social engañosa. El ataque implica enviar miles de transacciones directamente al nodo que está siendo atacado para causar problemas de desbordamiento de memoria. El ataque también puede evitar que las transacciones de cierto tipo que no son parte del ataque se propaguen por la red al hacer que los nodos comiencen a bloquear el envío masivo de esas transacciones.

Mitigación

El ataque puede ser mitigado en gran medida por los mineros que tienen una comprensión íntima de la configuración que están utilizando y cómo determinan qué hace el software del cliente del nodo con las transacciones que no planea extraer. Los clientes de nodo también tienen límites de agrupación de memoria que pueden evitar que se produzcan desbordamientos en muchos casos.

Ataques basados ​​en bloque

Estos son ataques perpetrados por mineros maliciosos que buscan dominar o subvertir a los mineros honestos en la red.

51% de ataque

Un ataque del 51% es un ataque teórico en el que un minero acumula más del 51% de la potencia hash en la red. El ataque se discute primero en la sección detallada en la sección 6 del documento técnico de Bitcoin que discute los incentivos.

El incentivo puede ayudar a alentar a los nodos a ser honestos. Si un atacante codicioso es capaz de reunir más potencia de CPU que todos los nodos honestos, tendría que elegir entre usarlo para defraudar a las personas robando sus pagos o usarlo para generar nuevas monedas. Debería encontrar más rentable jugar según las reglas, reglas que lo favorecen con más monedas nuevas que todos los demás combinados, que socavar el sistema y la validez de su propia riqueza.

El ataque se analiza con más detalle en la sección 11, donde se analiza el rendimiento del nodo atacante para mostrar que, incluso con un hashrate abrumador, sigue siendo excepcionalmente costoso para un atacante mantener y extender una cadena de bloques no válida, lo que disipa en gran medida la validez del ataque.

No se han registrado casos de un ataque del 51% en la historia de Bitcoin, sin embargo, otras redes de criptomonedas de menor capacidad han sido atacadas y devaluadas mediante el uso de estas tácticas.

Ataque de bloque pequeño

El ataque de bloque pequeño representa uno de los ataques más exitosos y peligrosos contra Bitcoin y estuvo en fase de ejecución en The Bitcoin Network desde alrededor de 2013 hasta que los desarrolladores de BCH duplicaron el libro mayor con el apoyo de los mineros que abandonaron el protocolo original y el libro mayor a los mineros que usaban el Cliente de minería de BitcoinSV en noviembre de 2018. El resultado final deseado del Small Block Attack se puede ver actualmente en la red BTC, donde los usuarios se enfrentan a un rendimiento desconocido en un día determinado, tarifas altas y falta de funcionalidad debido a la necesidad de mantener las transacciones lo más pequeño y simple posible, con la posibilidad de que ocurra un evento de muerte en cadena en algún momento debido a la falta de accesibilidad para los usuarios.

El ataque de bloque pequeño comenzó después de que Satoshi Nakamoto limitó el tamaño de bloque de Bitcoin a 1 MB como medida antispam en 2010. Este cambio siempre fue temporal, sin embargo, los atacantes lo aprovecharon como un medio para imponer muchos más límites arbitrarios en Bitcoin, eventualmente retroceder desde cualquier plan para eliminar el límite. A lo largo de los años, muchas capas de reglas restrictivas se integraron en el cliente de Bitcoin y se aplicaron como reglas de consenso en la red. La actualización de Genesis en febrero de 2020 eliminó casi todos estos límites y los colocó con límites específicos de nodo configurables para mineros, lo que permite que los incentivos económicos de la red definan los límites de la utilidad del protocolo en cualquier momento dado.

Los ingenieros de ataque comenzaron una narrativa que vilipendiaría los llamados ‘Hard Forks’ que requieren que todos los nodos de minería en la red se actualicen simultáneamente, y propagaron la idea de que los nodos en la red de Bitcoin nunca deberían tener que actualizarse como se requeriría para el Tapa de tamaño de bloque que se eliminará.

La narrativa se utilizó con gran efecto para impulsar la oposición pública a propuestas de escalado aún más pequeñas y lentas que las que se están implementando actualmente en BitcoinSV , y se convirtió en un vector para la introducción de los llamados ‘Soft Forks’, que son cambios que explotan el protocolo para crear cambios en la forma en que se evalúan las transacciones y bloques de Bitcoin que aún son técnicamente válidos, pero que cambian la forma en que funciona Bitcoin. Los ejemplos de tales cambios incluyen Testigo segregado y Pagar a Script Hash .

Minería egoísta

La minería egoísta fue un ataque propuesto donde un minero con solo el 31% del hashrate de la red podría competir con el resto de la red y ganar más del 31% de los bloques.

El ataque se basó en que el minero egoísta actuó en secreto y extrajo bloques consecutivos para liberarlo en los momentos posteriores a que un minero honesto encuentra un bloque competidor en el primer bloque del minero egoísta. Esto supuestamente provocaría que el bloque del minero honesto quedara huérfano y mejorara la rentabilidad del nodo del atacante.

La teoría detrás del ataque usó una interpretación defectuosa de la propagación de bloques a través de la red y descartó el hecho de que los mineros son una Red del Mundo Pequeño que está extremadamente densamente conectada, lo que hace que sea excepcionalmente fácil para otros mineros en la red descubrir al minero egoísta y evitarlo. sus bloques deshonestos

https://wiki.bitcoinsv.io/index.php/Attacks_on_Bitcoin

Bitcoin Wiki

Coinbase

Coinbase es el nombre especial dado a la primera transacción en cada bloque. También se les puede llamar ‘Transacciones de generación’.

El minero ganador crea esta transacción especial como parte del proceso de creación de plantillas en bloque.

Una transacción de coinbase sigue el mismo formato que una transacción normal, excepto:

  • Tiene exactamente un txin
  • El hash anterior de este txin es 0000 … 0000.
  • El índice anterior de este txin es 0xFFFFFFFF
  • El script anterior de txin es una matriz de bytes arbitraria que históricamente ha sido utilizada por los mineros para señalar la identidad y pasar mensajes de los nodos ganadores de bloques al resto de la red.
  • La suma de los valores de txout no puede exceder el total del subsidio minero actual más las tarifas mineras pagadas por todas las demás transacciones incluidas en el bloque

Una parte de la base de monedas también se usa como un ‘nonce adicional’ durante el proceso de descubrimiento de bloques debido a que un solo minero ASIC puede probar más combinaciones de las permitidas en las 2 ^ 32 combinaciones posibles que pueden cambiar el nonce en el encabezado del bloque crear. El campo nonce adicional se incrementa y la raíz de merkle se actualiza para generar otros 2 ^ 32 posibles hashes de bloque para probar.

El minero ganador puede pagar el valor de la base de monedas a múltiples salidas según sea necesario, y también es libre de incluir salidas de valor cero OP_FALSE OP_RETURN en la transacción.

BIP 0034 ] ordenó que el valor de la altura del bloque se especifique en el primer elemento de la transacción de la base de monedas. Este valor requiere 4 bytes para almacenar.

Antes de [ BIP 0034 ] el tamaño del script coinbase era de entre 2 y 100 bytes. Dado que el número más pequeño de bytes necesarios para almacenar la Altura del bloque actual es 1 byte para la longitud y 3 bytes para el valor, se requieren un mínimo de 4 bytes para almacenar la altura del bloque. Por lo tanto, publique [ BIP 0034 ] el tamaño del script de coinbase ahora tiene entre 4 y 100 bytes de longitud.

Nota : La altura máxima del bloque que se puede representar en 3 bytes es (2 ^ (3 x 8 bits)) -1) == 16,777,215. Al momento de escribir, la altura del bloque es de 614,372, por lo tanto, se pueden representar> 16 millones de bloques más con la estructura actual.

La altura del bloque Genesis_block es cero .

La próxima innovación, MinerID utilizará la transacción de Coinbase para presentar información a la red, como identidad de nodo, datos de precios de transacción y más. Estos datos utilizarán formatos estándar de modo que las billeteras de los usuarios puedan leer y analizar la información, dándoles un conocimiento actualizado de qué nodos son competitivos en la red y más.

https://wiki.bitcoinsv.io/index.php/Coinbase

Bitcoin Wiki

Bloque huérfano

Un «bloque huérfano» es un bloque bien formado con prueba válida de trabajo que ha sido rechazado por los mineros y no forma parte de la cadena de bloques más larga. Como el bloque en cuestión no ha sido aceptado, la recompensa por bloque y las tarifas de transacción ya no se pueden gastar en la cadena de bloques más larga y bien formada. Este fenómeno debe ser tenido en cuenta por los grupos mineros que utilizan cualquier estrategia de pago que no sea «proporcional».

Un bloqueo huérfano a menudo se origina cuando dos mineros producen un bloqueo alrededor del mismo punto en el tiempo. El retraso de tiempo en la propagación y aceptación de un bloque lleva a los nodos de Bitcoin SV a encontrar escenarios en los que necesitan seleccionar cuál de los múltiples bloques aceptar como el más legítimo para incluir en la cadena. Después de que la red selecciona un bloque, el otro bloque se considera un bloque huérfano. Las transacciones en el bloque huérfano que no se incluyeron en el bloque exitoso se vuelven a incluir en el mempool como candidatos de membresía para bloques futuros. En la mayoría de los casos, la gran mayoría de las transacciones se incluirán en ambos, ya que la propagación de transacciones a través de la red es muy eficiente y es probable que ambos mineros hayan visto el mismo conjunto.

En otros casos, se pueden generar bloques huérfanos cuando los nodos maliciosos buscan revertir las transacciones generando bloques alternativos deseados. Esto esperan lograrlo mediante la utilización de grandes cantidades de poder de hash (ver ataque del 51% ). Sin embargo, los ataques destinados a causar el huérfano deliberado de bloques son extremadamente intensivos en recursos y en gran medida inviables. Los bloques que generan generalmente terminan huérfanos.

https://wiki.bitcoinsv.io/index.php/Orphan_Block

Bitcoin Wiki

Prueba de trabajo

Una prueba de trabajo es un dato que es difícil de producir (costoso y / o que consume mucho tiempo) pero que otros pueden verificar fácilmente. La producción de prueba de trabajo generalmente implica una tarea computacional que incluye un proceso aleatorio con baja probabilidad de éxito, por lo que se requiere una gran cantidad de prueba y error en promedio antes de generar una prueba de trabajo válida. En Bitcoin, el esquema de prueba de trabajo se basa en el algoritmo de hash SHA-256 .

Prueba de trabajo en Bitcoin

Bitcoin utiliza un sistema de prueba de trabajo en el proceso de minería . Para que se acepte un bloque , el nodo de transmisión debe demostrar una prueba de trabajo válido que cubra todos los datos del bloque. La dificultad de descubrir resultados de trabajo válidos se ajusta para limitar la tasa de crecimiento promedio de la cadena de bloques a un bloque cada 10 minutos.

Para que un bloque sea válido, se debe descubrir un nonce que dé como resultado el doble hash SHA-256 del encabezado del bloque a un valor menor que el objetivo actual. Esto indica que el nodo que descubrió este bloque es un participante activo en la red. Cada encabezado de bloque contiene el hash del bloque sobre el que se construye, creando así la cadena de bloques que comprende el libro mayor. El cambio de un bloque solo se puede hacer creando un nuevo bloque que contenga el mismo predecesor y requiere la regeneración de todos los bloques posteriores rehaciendo el trabajo que contienen. Esto protege la cadena de bloques de la manipulación.

Resumen

1. La prueba de trabajo es parte del mecanismo de consenso de Bitcoin.

2. El algoritmo de prueba de trabajo de Bitcoin intenta resolver un rompecabezas con una baja probabilidad de éxito por prueba.

3. Un minero usa un encabezado de bloque candidato como entrada, lo comprime para verificar si el valor de hash está por debajo de un objetivo . Si no, el minero cambia el nonce en el encabezado del bloque e intenta nuevamente. Una vez que el valor hash está por debajo del objetivo, el bloque se ha extraído con éxito.

4. Para que la red de Bitcoin acepte un bloque, los mineros deben completar una prueba de trabajo que cubra todos los datos del bloque. La dificultad de este trabajo se ajusta para limitar la velocidad a la que la red puede generar nuevos bloques a uno cada 10 minutos en promedio. Debido a la muy baja probabilidad de una generación exitosa, es imposible predecir qué computadora del trabajador generará el siguiente bloque.

5. La baja probabilidad de encontrar con éxito soluciones válidas de prueba de trabajo reduce la probabilidad de que dos o más mineros generen un bloqueo al mismo tiempo.

Atribución

Este contenido se basa en el contenido de https://en.bitcoin.it/wiki/Proof_of_work bajo Creative Commons Attribution 3.0 . Aunque puede haber sido ampliamente revisado y actualizado, reconocemos a los autores originales.

Bitcoin Wiki

Dificultad

Ver también: Target

¿Qué es la dificultad?

La dificultad es una medida de lo difícil que es encontrar un hash debajo de un objetivo determinado. La dificultad responde a la pregunta: «¿cuántas veces es más difícil extraer un bloque ahora, en comparación con lo difícil que fue extraer el Bloque Génesis ?». Tiene una estrecha relación con el objetivo, pero no es lo mismo. Más bien tiene una relación inversa donde una dificultad más alta implica un valor objetivo más bajo.

La red Bitcoin tiene una dificultad de bloqueo global. Los bloques válidos deben tener un hash debajo de este objetivo. Los grupos de minería también tienen una dificultad de compartir específica del grupo que establece un límite inferior para los recursos compartidos.

¿Con qué frecuencia cambia la dificultad de la red?

Ver objetivo .

¿Cuál es la fórmula para la dificultad?

dificultad = dificultad_1_target / current_target

el objetivo es un número de 256 bits

dificultad_1_objetivo es el objetivo utilizado en el Bloque Génesis y representa una dificultad de 1.

dificultad_1_ objetivo puede ser diferente para varias formas de medir la dificultad. Tradicionalmente, representa un hash donde los 32 bits iniciales son cero y el resto son uno (esto se conoce como «dificultad de grupo» o «pdiff»). El protocolo Bitcoin representa objetivos como un tipo de punto flotante personalizado con precisión limitada; Como resultado, los clientes de Bitcoin a menudo se aproximan a la dificultad en función de esto (esto se conoce como «bdiff»).

¿Cómo se almacena la dificultad en bloques?

Cada bloque almacena una representación empaquetada en su encabezado de bloque (llamado Bits ) para su objetivo hexadecimal real. El objetivo puede derivarse de Bits a través de una fórmula predefinida. Por ejemplo, si el objetivo empaquetado en el bloque es 0x1b0404cb, el objetivo hexadecimal es:

  0x0404cb * 2 ** (8 * (0x1b - 3)) = 0x00000000000404CB000000000000000000000000000000000000000000000000

Tenga en cuenta que el valor 0x0404cb es un valor con signo en este formato. El mayor valor legal para este campo es 0x7fffff. Para obtener un valor mayor, debe desplazarlo hacia abajo un byte completo. También 0x008000 es el valor válido positivo más pequeño.

¿Cómo se calcula la dificultad?¿Cuál es la diferencia entre bdiff y pdiff?

El objetivo más alto posible (dificultad 1) se define como 0x1d00ffff, lo que nos da un objetivo hexadecimal de

  0x00ffff * 2 ** (8 * (0x1d - 3)) = 0x00000000FFFF0000000000000000000000000000000000000000000000000000

Cabe señalar que la minería agrupada a menudo utiliza objetivos no truncados, lo que pone «dificultad de grupo 1» en

  0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Entonces la dificultad en 0x1b0404cb es por lo tanto:

  0x00000000FFFF0000000000000000000000000000000000000000000000000000 /
 0x00000000000404CB000000000000000000000000000000000000000000000000 
 = 16307.420938523983 (bdiff)

Y:

  0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF /
 0x00000000000404CB000000000000000000000000000000000000000000000000 
 = 16307.669773817162 (pdiff)

Aquí hay una forma rápida de calcular la dificultad de Bitcoin. Utiliza una serie de Taylor modificada para el logaritmo (puede ver tutoriales en flipcode y wikipedia) y se basa en registros para transformar el cálculo de dificultad:

<source lang = «cpp»>

  1. incluir <iostream>
  2. incluir <cmath>

inline float fast_log (float val) {

  int * const exp_ptr = reinterpret_cast <int *> (& val);
   int x = * exp_ptr;
   const int log_2 = ((x >> 23) & 255) - 128;
   x & = ~ (255 << 23);
   x + = 127 << 23;
   * exp_ptr = x;
  val = ((-1.0f / 3) * val + 2) * val - 2.0f / 3;
   return ((val + log_2) * 0.69314718f);

}

dificultad de flotación (bits int sin signo) {

  cuerpo doble estático max_body = fast_log (0x00ffff), scaland = fast_log (256);
    return exp (max_body - fast_log (bits & 0x00ffffff) + scaland * (0x1d - ((bits & 0xff000000) >> 24)));

}

int main () {

  std :: cout << dificultad (0x1b0404cb) << std :: endl;
    devuelve 0;

} </source>

Para ver las matemáticas para pasar de los cálculos normales de dificultad (que requieren grandes entradas grandes más grandes que el espacio en cualquier número entero normal) al cálculo anterior, aquí hay algo de python:

<source lang = «python»> importación decimal, matemática l = math.log e = math.e

print 0x00ffff * 2 ** (8 * (0x1d – 3)) / float (0x0404cb * 2 ** (8 * (0x1b – 3))) print l (0x00ffff * 2 ** (8 * (0x1d – 3)) / float (0x0404cb * 2 ** (8 * (0x1b – 3)))) print l (0x00ffff * 2 ** (8 * (0x1d – 3))) – l (0x0404cb * 2 ** (8 * (0x1b – 3))) imprimir l (0x00ffff) + l (2 ** (8 * (0x1d – 3))) – l (0x0404cb) – l (2 ** (8 * (0x1b – 3))) imprimir l ( 0x00ffff) + (8 * (0x1d – 3)) * l (2) – l (0x0404cb) – (8 * (0x1b – 3)) * l (2) imprimir l (0x00ffff / float (0x0404cb)) + (8 * (0x1d – 3)) * l (2) – (8 * (0x1b – 3)) * l (2) imprimir l (0x00ffff / float (0x0404cb)) + (0x1d – 0x1b) * l (2 ** 8 ) </source>

¿Cuál es la dificultad actual?

Dificultad actual

¿Cuál es la máxima dificultad?

No hay objetivo mínimo. La dificultad máxima es más o menos: maximum_target / 1 (ya que 0 daría como resultado infinito), que es un número ridículamente enorme (aproximadamente 2 ^ 224).

La dificultad máxima real es cuando current_target = 0, pero no podríamos calcular la dificultad si eso sucediera. (Afortunadamente nunca lo hará, así que estamos bien).

En el caso de Bitcoin (BSV) y Bitcoin Cash (BCH), la dificultad de la red puede aumentar en un máximo del 100% de la dificultad actual en un solo ajuste.

En la implementación original, aún utilizada por Bitcoin Core (BTC), la dificultad puede aumentar en un máximo del 400% de la dificultad actual en un solo ajuste.

¿Puede disminuir la dificultad de la red?

Sí puede. Ver discusión en blanco .

En el caso de Bitcoin (BSV) y Bitcoin Cash (BCH), la dificultad de la red puede ajustarse hacia abajo hasta en un 50% de la dificultad actual en un solo ajuste.

En la implementación original, aún utilizada por Bitcoin Core (BTC), la dificultad de la red puede ajustarse hacia abajo hasta en un 75% de la dificultad actual en un solo ajuste.

¿Cuál es la dificultad mínima?

La dificultad mínima, cuando el objetivo está en el valor máximo permitido, es 1. Esta es la dificultad del bloque Génesis .

¿Qué tasa de hash de red resulta en una dificultad dada?

La dificultad se ajusta cada 2016 bloques en función del tiempo que llevó encontrar los bloques anteriores de 2016. Al ritmo deseado de un bloque cada 10 minutos, los bloques de 2016 tardarían exactamente dos semanas en encontrarse. Si los bloques anteriores de 2016 tardaron más de dos semanas en encontrarse, la dificultad se reduce. Si tomaron menos de dos semanas, la dificultad aumenta. El cambio en la dificultad es proporcional a la cantidad de tiempo durante o menos de dos semanas que los bloques anteriores de 2016 tardaron en encontrar.

Para encontrar un bloque, el hash debe ser menor que el objetivo. El hash es efectivamente un número aleatorio entre 0 y 2 ** 256-1. El desplazamiento para la dificultad 1 es

  0xffff * 2 ** 208

y para la dificultad D es

  (0xffff * 2 ** 208) / D

Por lo tanto, el número esperado de hashes que necesitamos calcular para encontrar un bloque con dificultad D es

  D * 2 ** 256 / (0xffff * 2 ** 208)

o solo

  D * 2 ** 48 / 0xffff

La dificultad se establece de tal manera que los bloques anteriores de 2016 se hubieran encontrado a razón de uno cada 10 minutos, por lo que estábamos calculando (D * 2 ** 48 / 0xffff) hashes en 600 segundos. Eso significa que la tasa de hash de la red era

  D * 2 ** 48 / 0xffff / 600

sobre los bloques anteriores de 2016. Se puede simplificar aún más a

  D * 2 ** 32/600

sin mucha pérdida de precisión.

En la dificultad 1, eso es alrededor de 7 Mhashes por segundo.

Al momento de escribir, la dificultad es 22012.4941572, lo que significa que durante el conjunto anterior de bloques de 2016 se encontró que la tasa de hash promedio de la red era

  22012.4941572 * 2 ** 32/600 = alrededor de 157 Ghashes por segundo.

enlaces relacionados

Atribución

Este contenido se basa en el contenido de https://en.bitcoin.it/wiki/Dificultad bajo Creative Commons Attribution 3.0 . Aunque puede haber sido ampliamente revisado y actualizado, reconocemos a los autores originales.

Bitcoin Wiki

Algoritmo de hash de bloque

La minería de Bitcoin utiliza una función de prueba de trabajo basada en hash. El algoritmo requiere los siguientes parámetros: una cadena de servicio, un nonce y un contador. En Bitcoin, la cadena de servicio está codificada en la estructura de datos del encabezado del bloque e incluye un campo de versión, el hash del bloque anterior, el hash raíz del árbol Merkle de todas las transacciones en el bloque, la hora actual y el objetivo del prueba de funcionamiento del trabajo.

Los mineros de Bitcoin comúnmente usan dos campos nonce:

  1. El campo Nonce que se incluye en el encabezado del bloque
  2. El campo extraNonce que es parte de la transacción de Coinbase

Cada campo incluye un parámetro de contador que es relativamente pequeño (32 bits). La función hash recorre todos los valores del campo Nonce y luego incrementa (o cambia) el campo extraNonce antes de pasar por todas las permutaciones de Nonce nuevamente. Incrementar el campo extraNonce implica volver a calcular la raíz del árbol de merkle ya que modifica el hash de la transacción de Coinbase.

Encabezado de bloque

Un encabezado de bloque contiene estos campos:

Campo Propósito Actualizado cuando … Tamaño (bytes)
Versión Bloquear número de versión Actualiza el software y especifica una nueva versión 4 4
hashPrevBlock Hash de 256 bits del encabezado del bloque anterior Entra un nuevo bloque 32
hashMerkleRoot Hash de 256 bits basado en todas las transacciones en el bloque Una transacción es aceptada 32
Hora Marca de tiempo de bloque actual como segundos desde 1970-01-01T00: 00 UTC Cada pocos segundos 4 4
Pedacitos Objetivo actual en formato compacto La dificultad se ajusta 4 4
Mientras tanto Número de 32 bits (comienza en 0) Se intenta un hash (incrementos) 4 4

El cuerpo del bloque contiene las transacciones. Estos se cortan solo indirectamente a través de la raíz de Merkle. Debido a que las transacciones no se procesan directamente, la prueba de trabajo necesaria para extraer un bloque con 1 transacción requiere exactamente la misma cantidad de esfuerzo que para un bloque con 10,000 transacciones.

El formato de destino es una codificación de punto flotante que utiliza una mantisa de 3 bytes, el byte principal como exponente (donde solo se usan los 5 bits más bajos) y su base es 256.

No es posible que dos nodos trabajen en la misma raíz de Merkle porque la transacción de Coinbase es única para ese nodo, generando una salida hash diferente. Cada intento de hash realizado tiene la misma posibilidad de ganar que cualquier otro hash calculado en la red.

Endianess

Tenga en cuenta que el hash, que es un número de 256 bits, tiene muchos bytes cero iniciales cuando se almacena o imprime como una constante hexadecimal big-endian, pero tiene cero bytes finales cuando se almacena o imprime en little-endian. Por ejemplo, si se interpreta como una cadena y la dirección de cadena más baja (o inicio de) mantiene el byte significativo más bajo, es little-endian.

La mayoría de los exploradores de bloques muestran los valores hash como números big-endian; La notación para números es habitual (los dígitos iniciales son los dígitos más significativos leídos de izquierda a derecha).

Atribución

Este contenido se basa en el contenido de https://en.bitcoin.it/wiki/Block_hashing_algorithm bajo Creative Commons Attribution 3.0 . Aunque puede haber sido ampliamente revisado y actualizado, reconocemos a los autores originales.

Bitcoin Wiki

Bienvenido a Bitcoin Wiki

Texto original en inglés. (87 páginas, algunas entradas no están finalizadas aún)

 

Aquí nuestro objetivo es proporcionar un conjunto correcto y actualizado de información sobre la red Bitcoin y sus características y funcionalidades.

 

Actualización de Génesis
Algoritmo de firma digital de curva elíptica
Algoritmo de hash de bloque
Algoritmo Sighash heredado
Antecedentes técnicos de las direcciones de Bitcoin
API de comerciante
Arquitectura de red punto a punto
Ataques a Bitcoin
Banderas SIGHASH
Bibliotecas de billetera Bitcoin
Billetera de papel
Billetera determinista
Bitcoin hasta hoy
Bitcoin Test Blockchains
Blockchain
Bloque de Génesis
Bloque de subsidio
Bloque huérfano
Bloquear
Brainwallet
BSVAlias
Cadena de bloque
Cadena de tiempo
Cambio
Canales de pago
CODESEPARATOR OP
Codificación Base58Check
Codificación de números en el script de Bitcoin
Coinbase
Confirmación
Consenso de Nakamoto
Construyendo sobre Bitcoin
Contratos inteligentes
DEVOLUCIÓN OP
Dificultad
Dirección de Bitcoin
Doble gasto
Ejemplos de guiones complejos
El caso de uso minero
El problema de los generales bizantinos
En construcción
Explorador de bloques
Falso retorno
Firmas digitales en Bitcoin
Formato de importación de billetera
Frase semilla
Gráfico casi completo
Historia de Bitcoin
Historia de OP RETURN
ID de minero
Interfaz GetBlockTemplate
La metanet
La red de Bitcoin
Libro blanco de Bitcoin
Llaves privadas
Malleabilidad de transacciones
Marca de tiempo de bloque
Métricas de capacidad
Mientras tanto
Minería
N secuencia
NLocktime
NLocktime y nSequence
Objetivo
OP CHECKSIG
OP PUSHDATA
Opcodes utilizados en el script de Bitcoin
P2SH
Pagina principal
Pagos en Bitcoin
Paymail
Piscinas de transacciones
Protocolo
Protocolo de capa de aplicación
Protocolo de igual a igual
Protocolo de segunda capa
Protocolo Metanet
Prueba de trabajo
Pushdata Opcodes
Red Mandala
Red P2P
Reorganizar
Reutilización de dirección
RIPEMD-160
Rompecabezas R
Satoshi Nakamoto
Satoshis
Scripting avanzado de Bitcoin
Scripts con control de flujo (cláusulas condicionales)
Secp256k1
SHA-256
Small World Network
sol
Subsidio minero
Tarifas de transacción
Transacciones de Bitcoin
Transacciones instantaneas
Transacciones IP
TXID
UTXO
Verificación de pago simplificada
Versión Handshake
Visión de Bitcoin Satoshi
VOUT

Bitcoin Wiki

INFORMACIÓN OFICIAL:

 

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja un comentario

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