Guia para construir una blockchain. Parte 11

Proceso de mineria

Ahora llegamos a la minería de una criptomoneda, que es uno de los pilares centrales de cualquier implementación de criptomonedas. La minería realiza tres tareas esenciales:

  1. Valida las transacciones que ocurren en la red de criptomonedas.
  2. Agrega bloques a la cadena de bloques
  3. Crea nuevas unidades monetarias

Todas estas actividades ocurren de manera distribuida fuera del control de cualquier nodo particular en la red de criptomonedas. Los bloques se agregan a la cadena de bloques mediante consenso distribuido. En este post, examinaremos cómo se lleva a cabo la minería en una moneda similar a Bitcoin. y cómo el algoritmo de consenso distribuido agrega bloques a la cadena de bloques.

Es necesario hacer una advertencia. En este post, a veces veras la frase «la blockchain usada». En realidad, no existe una única cadena de bloques autorizada. Algunos nodos pueden contener cadenas de bloques que difieren de las de otros nodos. La blockchain es una estructura distribuida. Nos referimos a las blockchains en poder de varios nodos de red como cadenas de bloques locales. La cadena de bloques es una abstracción agregada de todas las blockchains locales. El algoritmo de consenso distribuido asegura que todas las cadenas de bloques divergentes convergerán en una sola cadena de bloques autorizada

el proceso de minado

¿Por qué una entidad se dedicaría a la minería? Después de todo, la minería es un proceso costoso que consume muchos ciclos de CPU y, por lo tanto, electricidad. Este incentivo proviene de las tarifas de transacción y la recompensa minera que recibe un minero por extraer con éxito un bloque. Esta remuneración es sustancial. Cualquier entidad que tenga una cadena de bloques local puede participar en la extracción de una criptomoneda. Veamos cómo funciona la minería.
Considere una persona que inicia una transacción que transferirá algunas unidades de criptomoneda. Una vez consumada la transacción, el emisor de la criptomoneda transmite la transacción en la red peer-to-peer de criptomonedas. Los mineros (nodos de minería), que tienen una cadena de bloques local, están escuchando transacciones que
se propagan a través de esta red. La tarea ante un minero es construir un nuevo bloque prospectivo que se pueda agregar a la cadena de bloques. El minero agrega transacciones a un bloque candidato al minado. Piense en un minero que recibe una transacción. El minero verifica que la transacción es válida. Si no es válida, el minero descarta la transacción. De lo contrario, el minero transmite esta transacción entrante a otros nodos de minería que este minero tiene en su lista de peers. Luego, el minero examina el tiempo de bloqueo de la transacción recibida. Si la transacción se procesa en algún momento futuro, el minero lo coloca en un caché local de transacciones que se procesarán en el futuro. Esta caché se llama Memcache. Si el minero decide incluir esta transacción en particular en el bloque candidato que él pretende minar, lo añade al bloque. De lo contrario, el minero agrega la transacción a la Memcache. El minero accede a Memcache y a las transacciones entrantes para agregar transacciones a su bloque candidato. Sujeto a la restricción sobre el tamaño máximo de un bloque, queda completamente a discreción de un minero en cuanto a qué transacciones y cuántas transacciones va a incluir en un bloque candidato. Cada transacción puede tener una tarifa de transacción adjunta. Queda a discreción del emisor especificar la tarifa de transacción, si corresponde. El minero obviamente quiere maximizar la cantidad de tarifas de transacción que recibirá si mina con éxito el bloque candidato. Una vez que el minero ha decidido que hay suficientes transacciones en el bloque candidato, agrega una transacción especial al bloque. Esta transacción se llama transaccion coinbase. Es la primera transacción en la lista de transacciones del bloque candidato. La transacción de coinbase contiene la cantidad de nueva criptomoneda que se creará si el minero logra extraer el bloque. Este valor se llama recompensa minera. El minero tiene derecho a la recompensa minera. Por lo tanto, la recompensa minera y el total de las tarifas por las transacciones incluidas en el bloque son lo que recibirá el minero si mina con éxito el bloque.
En Bitcoin y Blancoin, la cantidad de recompensa minera está determinada por un
algoritmo que depende del número de bloques que ya se han extraído.
Periódicamente, la recompensa minera se reduce a la mitad a medida que aumenta el tamaño de la cadena de bloques. La recompensa minera se acerca a cero de forma asintótica. Tenga en cuenta que dado que una recompensa minera es nueva
moneda, no tiene un elemento vin correspondiente.

El algoritmo de minería de Bitcoin implica que un máximo de 21 millones de bitcoins pueden ser producidos. Esto sugiere que Bitcoin es asintóticamente deflacionario; es valioso, es decir, el poder adquisitivo debe aumentar con el tiempo. Otras criptomonedas pueden implementar diferentes algoritmos de creación de moneda. Por ejemplo, la recompensa minera puede ser constante o variar de acuerdo con el volumen de transacciones por unidad de tiempo. La criptomoneda Tron tiene la dudosa distinción de permitir la creación de un número ilimitado de unidades monetarias mediante consenso de un comité. Blancoin seguirá el algoritmo de Bitcoin.

Después de agregar la transacción de coinbase al bloque candidato, el minero construye
el encabezado del bloque de este bloque. Recuerde que un bloque de blancoin tiene la siguiente estructura de diccionario. El sub-diccionario con la exclusión de la lista tx se llama encabezado de bloque (header):

{
"prevblockhash": <string>
"version": <string>
"timestamp": <integer>
"difficulty_bits": <integer>
"nonce": <integer>
"merkle_root": <string>
"height": <integer>
"tx": <list>
}

El minero calcula el hash SHA-256 del encabezado del bloque más reciente en su
blockchain y empareja este valor con la clave prevblockhash del bloque candidato. Lo siguiente es calcular la raíz merkle de las transacciones en el bloque y también insertar este valor en el encabezado del bloque. Del mismo modo, el minero pone el tiempo actual Unix, los bits de dificultad, valor nonce inicial y número de versión en el encabezado del bloque. Recuerde que el bloque de génesis tiene altura 0, el bloque siguiente tiene altura 1, y así sucesivamente.
Una vez que el minero ha especificado el encabezado del bloque, está listo para extraer el bloque candidato.

minando un bloque

Ahora que el minero tiene un bloque candidato listo para minar, podemos iniciar el proceso. El bloque de header de un bloque candidato tiene un número llamado nonce; esto es, un entero no negativo inicializado a cero. El nonce inicia el proceso de minería y es incrementado a medida que avanza el proceso.
El minero calcula el hash hexadecimal SHA-256 del encabezado del bloque, que incluye el nonce. Esta cadena hexadecimal se convierte en un número (muy grande) y se comparada con el número de dificultad actual especificado para la red. Si el valor calculado es menor que el número de dificultad, se dice que el bloque está minado. Si el hash SHA-256 es mayor o igual que el número de dificultad, entonces el nonce se incrementa y el hash SHA-256 se vuelve a calcular y se compara nuevamente con el número de dificultad. Este proceso continúa hasta que se obtiene un valor hash menor que el número de dificultad.

En Bitcoin, el nonce es un entero de 32 bits, y con frecuencia sucede que el valor calculado no caerá por debajo del número de dificultad mientras se ejecuta el cálculo a través de todo el rango de 2 ** 32 – 1 nonces. Si esto ocurre, el nonce es nuevamente inicializado en 0 y se coloca en el campo de ID de transacción del primer elemento de lista de vin de la transacción de coinbase. Esto no es una preocupación para nuestra implementación de Python ya que python puede realizar operaciones aritméticas en números arbitrariamente grandes.

Minando un bloque

Mientras el minero extrae su bloque candidato, otros mineros también extraen bloques.
Los bloques que los otros mineros están extrayendo no necesitan contener las mismas transacciones que el bloque candidato de nuestro minero. De hecho, algunos mineros pueden tener blockchains locales que difieren de las cadenas de bloques de otros mineros.
Si un minero logra extraer un bloque candidato, agregará el nuevo bloque a su blockchain y luego transmita el bloque extraído en la red de criptomonedas. Esto es una invitación para que otros nodos incluyan este bloque en sus cadenas de bloques locales.
Los nodos que reciben el bloque recién extraído ejecutarán una serie de pruebas para validar el bloque. Estas pruebas son:

  1. Se ha utilizado el número de dificultad correcto.
  2. El bloque tiene un hash calculado que es menor que el numero de dificultad para el nonce en el encabezado del bloque.
  3. La altura del bloque del nuevo bloque es válida.
  4. La raíz merkle de las transacciones de bloque coincide con la raíz merkle
    en el encabezado del bloque.
  5. Ninguna transacción en el bloque está bloqueada.
  6. Las transacciones en el bloque son válidas.
  7. Si una transacción transfiere un valor coinbase, entonces se requiere un número mínimo de bloques a la cadena de bloques desde el bloque que contenía esta transacción de coinbase.
  8. Hay una coincidencia de prevblockhash como se explica a continuación.

Si el bloque extraído pasa este conjunto de pruebas de validación, el nodo puede agregar este bloque a su blockchain.

validacion de altura de bloque

El nodo que recibe el nuevo bloque verifica el valor de altura en el bloque:

  1. Si la altura es negativa o cero, se rechaza el bloque.
  2. Si el valor de la altura es menor que la altura de la cadena de bloques del nodo,
    el bloque es rechazado.
  3. Si la altura del bloque es igual a la altura de la cadena de bloques del nodo más 2,
    el bloque se coloca en una lista de huérfanos.
  4. Si la altura del bloque es mayor que la altura de la cadena de bloques del nodo
    más 2, el bloque se coloca en una lista de huérfanos. La cadena de bloques del nodo
    puede estar desactualizado. El nodo solicita otros nodos para la última bloque (s), para que pueda actualizar su cadena de bloques, si es necesario.

validacion del bloque previo

Un nodo que ha recibido y validado un nuevo bloque ahora puede agregar el nuevo bloque. El siguiente algoritmo enumera los pasos para agregar el bloque a una cadena de bloques.

definiciones

Dejamos que previousblockhash sea el valor de la clave prevblockhash en el bloque minado.
Dejamos que block_name [latest] sea el último bloque en una cadena de bloques que se denomina «block_name».
Dejamos que block_name [latest-1] sea el segundo bloque más reciente en una cadena de bloques que se denomina «Block_name».
Sea hash (block_name [x]) el hash SHA-256 del encabezado del bloque llamado block_name, donde x es el latest o el latest-1.
Si el nodo tiene una cadena de bloques, asígnele el nombre primary_blockchain.

Si el nodo tiene dos cadenas de bloques, nombre una cadena de bloques primaria y la otra
la cadena de bloques secundaria. (primary_blockchain, secondary_blockchain).

algoritmo

  1. Si el nodo tiene una cadena de bloques y
    previousblockhash == hash (primary_blockchain [latest])
    entonces agregue el bloque extraído a la cadena de bloques primaria.
  1. De lo contrario, si el nodo tiene una cadena de bloques y
    previousblockhash == hash (primary_blockchain [latest -1]
    entonces
    (a) Cree una nueva cadena de bloques llamada secondary_blockchain eliminando el último elemento de primary_blockchain
    (b) Agregue el bloque minado a la secondary_blockchain
  2. Si el nodo tiene dos blockchains, entonces
    if previousblockhash == primary_blockchain [latest]
    luego agregue el bloque extraído a la cadena de bloques primaria
    de lo contrario, si previousblockhash == secondary_blockchain [latest]
    etonces agregue el bloque minado a la cadena de bloques secundaria
  3. Si nada de lo anterior es posible, entonces el nodo coloca
    el bloque y se agrega a una lista de bloques huérfanos

Tenga en cuenta que en el segundo caso, el nodo tiene dos cadenas de bloques que compiten por convertirse en la cadena de bloques dominante.
Si un nodo que recibe un bloque recién extraído es un minero, verificará si las transacciones en el bloque extraído también están en el bloque que ha estado extrayendo. Si este es el caso, el minero descartará el bloque que ha estado extrayendo y devolverá las transacciones de este bloque al mempool. Si este no es el caso, puede seguir minando a su bloque candidato. A continuación, el minero actualiza su memcache eliminando cualquier transacción en el mempool que también están en el bloque minado que se ha recibido.
Finalmente, el nodo transmite el nuevo bloque que ha recibido en la red para que otros nodos puedan verificar el bloque y agregarlo a sus cadenas de bloques locales.

prueba de trabajo (proof of work)

La extracción de un bloque es una tarea computacionalmente intensiva. Cuando se extrae un bloque, la inclusión del nonce y el número de dificultad en el bloque permite a otros mineros verificar que el minero de hecho ha minado el bloque. Esta verificación se llama prueba de trabajo. Un bloque que no supere esta prueba de trabajo no será utilizada por otros mineros para ampliar su cadena de bloque.

dificultad

El número de dificultad no es un número fijo. Cambia dinámicamente con el tiempo. Por ejemplo, en Bitcoin la restricción es que se debe extraer un bloque aproximadamente cada diez minutos. El propósito del número de dificultad es asegurar que en promedio un bloque se extrae en este período de tiempo. En el ecosistema Bitcoin, el número de dificultad se ajusta cada dos semanas para garantizar que los bloques se extraigan aproximadamente cada diez minutos. Blancoin sigue este modelo. En Blancoin, después de que se haya extraído un número fijo de bloques, los nodos mineros verifican la frecuencia con la que se extraen los bloques. Si la tasa es demasiado alta, el número de dificultad se ajusta hacia arriba, y si los bloques también se están produciendo lentamente, el número de dificultad disminuye. Cada nodo ajusta su número de dificultad. Cuando un nodo minero recibe un bloque minado, lo comprueba para determinar que la dificultad es la correcta
En Blancoin, se debe extraer un nuevo bloque, en promedio, cada diez minutos. El número de dificultad se calibra mediante el siguiente algoritmo cada 1000 bloques:

time_initial = timestamp of the block that is 1000 blocks earlier
time_now = timestamp of latest block
elapsed_seconds = time_now - time_old
blocks_expected_to_be_mined = elapsed_seconds / 600
actual blocks mined = 1000
discrepancy = 1000 - blocks_expected_to_be_mined
new difficulty no = old_difficulty_number - old_difficulty_number * \ (20/100)*(discrepancy/(1000 + blocks_expected_to_be_mined))

La fracción 20/1000 limita el nuevo número de dificultad a variar en no más de 20% de su valor anterior.

potencia de computacion de hash

La minería de un bloque implica calcular el hash SHA-256 del valor actual del header del bloque. Dado el hardware que un minero tiene a su disposición, este minero puede realizar un número fijo de hashes por segundo. La potencia de hash total de la red es el número total de hashes que todos los mineros de la red pueden calcular en un segundo dadas sus configuraciones de hardware. En consecuencia, la probabilidad de un minero mine un bloque es de:

probBlock = (miner's hash power) / (total hash power of the network)

La cantidad promedio de tiempo que le tomará a un minero extraer un bloque (minerAvgTime) se calcula de la siguiente manera:

let blockTime = average amount of time to mine a block in the network
then:
minerAvgTime = blockTime / probBlock

Para la red Bitcoin, el tiempo promedio para extraer un bloque es de 600 segundos, por lo que:

minerAvgTime = 600/probBlock

algoritmo de consenso distribuido

Ahora estamos listos para hablar cómo los nodos en una red llegan a un consenso en relacion con ponerse de acuerdode la cadena de bloques a dominar en la red.
Cada nodo completo en una red de criptomonedas mantiene su propia cadena de bloques.
Además, dicho nodo no sabe qué aspecto tienen las cadenas de bloques de otros nodos completos. Posiblemente, estas cadenas de bloques locales pueden diferir entre sí. El algoritmo de consenso decide cómo se agregarán bloques a estas cadenas de bloques locales cuando diferentes nodos en la red de criptomonedas tienen cadenas de bloques que difieren de uno al otro. Este algoritmo implementa un consenso distribuido que converge en todos los nodos a la misma cadena de bloques sin necesidad de que ningún nodo confíe en ningún otro nodo. Este algoritmo de consenso distribuido constituye la innovación más importante en la implementación de Bitcoin por Satoshi Nakamoto.

Para ser precisos, el algoritmo de consenso distribuido que estamos discutiendo se llama algoritmo de consenso distribuido de prueba de trabajo para distinguirlo del algoritmo de prueba de participación de consenso distribuido.

Antes de comenzar nuestro examen de este algoritmo de consenso distribuido, tenga en cuenta que no hay reloj ni cronometrador en el sistema y tampoco hay concepto de orden
de transacciones sobre la base del tiempo o de otra manera. Un nodo procesa bloques tal como son recibidos, y estos bloques no necesitan llegar en el orden en que fueron producidos. Un nodo puede no recibir un bloque por varias razones. La minería es un esfuerzo costoso y requiere el gasto de ciclos de CPU (electricidad) para resolver un problema matemático difícil. Un minero solo está dispuesto a asumir el costo de la minería si puede compensarse con una recompensa minera adecuada y tarifas de transacción. Es este incentivo para obtener ganancias lo que impulsa a los mineros a converger en la misma visión de la blockchain. Como veremos, este incentivo obliga a los nodos a ser honestos y seguir las reglas disctadas por el algoritmo de consenso blockchain.
Considere una red de criptomonedas donde todos los nodos inicialmente tienen la misma vista de la cadena de bloques.
En la Figura de abajo, cada círculo representa un nodo en la red de criptomonedas. Los rectángulo en cada nodo representa la cabeza de la cadena de bloques local del nodo. Puesto que todas estas formas son iguales, interpretamos que esto significa que cada uno de los nodos tiene la misma cadena de bloques.

Nodos en una red de criptomonedas

Ahora, el nodo X extrae con éxito un bloque y lo agrega a la cabeza de su blockchain local. X luego transmite el bloque, y sus vecinos inmediatos agregan el nuevo bloque a la cabeza de sus respectivas blockchains locales. Los nodos que se han agregado el nuevo bloque de sus cadenas de bloques se indica mediante un círculo con una estrella en el interior. Algunos de los nodos de la red no han recibido el nuevo bloque o por alguna razón no han
lo adjuntaron a sus cadenas de bloques locales. La forma de estos nodos permanece sin cambios.

El nodo X mina un bloque

En este momento, hay dos vistas de la cadena de bloques, ya que algunos nodos no han agregado el nuevo bloque a sus cadenas de bloques. Estos nodos tienen efectivamente una cadena con un bloque menos. Ahora, muy poco tiempo después de que X extrajera su bloque, el nodo Y extrae un bloque y después de agregarlo a su blockchain, transmite el nuevo bloque en la red. Varios nodos reciben este bloque y agregan el bloque a sus cadenas de bloques. Figura de abajo. Los nodos que han agregado el bloque minado de Y a sus cadenas de bloques se representan como los nodos con un rectángulo en ángulo dentro de un círculo.

El nodo Y mina un bloque

Ahora el bloque extraído por Y llega al nodo C. El nodo C nota que no puede agregar este bloque a la cabeza de su versión de blockchain ya que el valor hash del bloque anterior no coincide. El nodo C también observa que este bloque podría agregarse si el header del bloque anterior de la cadena de bloques fuera de hecho el header la cadena de bloques actual. Entonces el nodo C crea una cadena de bloques secundaria eliminando el nodo a la cabeza de la cadena de bloques y agregando el nuevo bloque a esta cadena de bloques secundaria. En esta etapa, el nodo C tiene una cadena de bloques primaria y una cadena de bloques secundaria, y las cabezas de estas cadenas de bloques son diferentes.
Todos los nodos con una estrella siguen la misma lógica y crean blockchain primaria y secundaria a medida que el bloque del nodo Y los alcanza. De manera similar, cuando el bloque extraído por X llega a los nodos con los rectángulos en ángulo, estos nodos aceptan el bloque entrante pero tienen que crear cadenas primaria y secundaria
Ahora ambos bloques extraídos por X e Y llegan al nodo con un rectángulo, y también
crea una cadena de bloques primaria y secundaria. A continuación, el nodo d extrae con éxito un bloque y lo transmite en la red. En este tiempo, ningún otro nodo de minería en la red puede minar un nodo lo suficientemente rápido, por lo que el bloque extraído por el nodo d llega a todos los nodos de la red (Figura de abajo). Algunos de estos nodos pueden agregar el bloque a sus cadenas de bloques primarias (estos son los nodos que recibieron el bloque minado por Y primero). Estos nodos agregan el bloque a su blockchain principal.

Se borra la cadena de bloques más corta, siempre que sean dos bloques o más bloques
más corto que el blockchain más largo.

El nodo D mina un bloque

De manera similar, los nodos que recibieron el bloque del nodo X primero pueden agregar el nuevo bloque a sus cadenas de bloques secundarias. Estos nodos agregan el bloque a su blockchain secundaria y eliminan su blockchain primaria y designan la blockchain secundaria como blockchain principal. Observe una vez más que la cadena de bloques más corta es eliminada.
En esta etapa, todos los nodos de la red han convergido a la misma vista de la blockchain. El proceso anterior describe el algoritmo de consenso distribuido que fue implementado primero por Satoshi Nakamoto para Bitcoin. La razón por la que todos los mineros siquen con la cadena de bloques más larga es porque si no lo hacen, la mayoría de los mineros agregarán bloques a la cadena de bloques más larga y los mineros disidentes descubrirán que aunque pueden extraer bloques, no podrán persuadir a otros mineros para que agreguen estos bloques. a la cadena de bloques más corta y, por lo tanto, no podrán recolectar recompensas mineras ni tarifas de transacción.
Debido a que la cadena de bloques más larga tiene la mayor potencia de hash gastada en ella, los nodos consideran que esta cadena de bloques es la correcta y trabajarán para extenderla. Como acabamos de ver, cuando las dos cadenas de bloques son bifurcadas, una de ellas prevalecerá y el sistema vuelve a converger. Por ello, una de estas cadenas de bloques se elimina. Y ¿Qué pasa con las transacciones en la cadena de bloques eliminada? Supongamos que la blockchain principal se elimina porque la blockchain secundaria está un bloque por delante de él. Ya que la cadena de bloques secundaria se creó a partir de la cadena de bloques primaria con la exclusión de el último bloque en la cadena de bloques primaria, solo tenemos que considerar las transacciones en este bloque en particular. Simplemente colocamos aquellas transacciones en este bloque que tampoco están en
el último bloque de la cadena de bloques secundaria, de nuevo en el mempool.

nodos maliciosos

Podemos señalar tres aspectos de los nodos maliciosos. Un nodo malintencionado no puede crear una transacción que roba la criptomoneda de alguien porque necesita la clave privada de este individuo para firmar digitalmente la transacción maliciosa. En segundo lugar, un nodo de minería malintencionado puede decidir no procesar una transacción. Pero esto es una acción inútil ya que otros nodos de minería que reciben la transacción la incluirán en sus bloques candidatos y la procesarán.
Por último, una serie de nodos maliciosos que actúan en conjunto no pueden imponer sus
blockchain como el blockchain dominante en la red a menos que controlen al menos el 51% de la potencia de calculo hash total. La razón de esto es que si estos nodos tienen al menos el 51% del poder hash total, entonces la probabilidad de que se produzcan el siguiente bloque por ellos y agregar su versión de la cadena de bloques es al menos el 51%. Por lo tanto, ya que controlan la mayor parte del poder de hash, podrán extender su versión del blockchain e imponerlo como blockchain principal en la red.

confirmacion de las transacciones

Cuando se extrae un bloque y se agrega a la cadena de bloques, decimos que las transacciones en el bloque tiene una confirmación. Cuando se agrega otro bloque, las transacciones, se dice que el bloque anterior tiene dos confirmaciones. A medida que el número de bloques que se agregan a la blockchain sigue aumentando, tambien aumentan las confirmaciones. En Bitcoin, las transacciones que reciben seis confirmaciones se consideran irreversibles debido a la prohibición del costo de la potencia de hash que se requeriría para que la red deshaga una transacción en una blockchain con seis bloques de profundidad. Un nodo malicioso tendría que controlar a la mayoría del poder computacional de hash de la red para deshacer estos bloques y construir una alternativa más larga a la blockchain actual.

el problema del doble gasto (Double-spend problem)

Considere el siguiente escenario. Alice tiene una moneda de blancoin y se la transmite a Smith. Alice propaga la transacción en la red y un minero comienza a extraer un bloque que contiene esta transacción. Ahora Alice va a otro lado y gasta el mismo blancoin otra vez. Dado que ningún minero ha extraído aún un bloque que contenga la primera transacción de Alice, la segunda transacción también se propaga en la red, y algunos mineros la agregan a su bloque candidato y comience a extraer estes bloque. Este es el problema del doble gasto. Alice aparentemente ha gastado su blancoin dos veces. El primer minero extrae con éxito su bloque y transmite el bloque en la red. Este bloque contiene la primera transacción de Alice. Poco tiempo después, un segundo minero también extrae con éxito un bloque y lo propaga en la red. Este bloque contiene la segunda transacción de Alice.
Considere un nodo que recibe uno de estos bloques. Este nodo extenderá su blockchain con el bloque recibido y actualice su base de datos Chainstate. Si un corto tiempo después recibe el segundo bloque, rechazará este bloque porque una consulta en la base de datos de Chainstate mostrará que Alice no tiene el valor requerido para realizar la transacción. Debido al estado de la Chainstate, un nodo solo tendrá uno de los dos bloques que contienen una transacción de Alice. Esto es cierto incluso si un nodo se ha bifurcado para
una cadena de bloques primaria y secundaria.
Este ejemplo muestra por qué son importantes las confirmaciones de transacciones. Para poco valor de las transacciones, dos confirmaciones son suficientes (20 minutos en la red bitcoin en promedio). Para transacciones de gran valor, se deben obtener al menos seis confirmaciones (aproximadamente una hora en la red bitcoin)

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s