La Tecnología detrás de Bitcoin - $BTC

dhormigo

Blockchain
Administrador
Hodler
Veterano
Desde
14 Jul 2017
Mensajes
13,189
Puntuación
17,808
Bueno, he encontrado oro en forma de lectura sobre la tecnología de varias criptomonedas en otro idioma y lo traduciré para que no suene a chino. No me quiero apropiar de ningún contenido y por eso lo menciono de primeras. Se que muchos estamos por la tecnología, nótese la ironía y no por el dinero. Siempre es interesante conocer cómo funciona la cosa desde dentro, ser curioso es una de las grandes virtudes.

Parte 1: BTC
Parte 2: ETH


BTC: Bitcoin

Todavía en la cima, el patrón oro, el que lo empezó todo, Bitcoin. Pero, ¿cómo funciona realmente? Más exactamente, ¿qué es realmente una criptomoneda? En realidad, una criptomoneda es la cadena de bloques subyacente (o una estructura de datos similar en el caso de algunas criptomonedas como NANO) que almacena bloques hechos de transacciones y posiblemente otros datos. Se pueden derivar muchas otras piezas de información al procesar la cadena de bloques, pero voy a ver principalmente lo que realmente está directamente en la cadena de bloques en el caso de cada criptomoneda.

Contenidos de la cadena de bloques

Pasaré por alto los detalles básicos de cómo funciona una cadena de bloques aquí y solo repasaré los detalles específicos de cada cadena. Si necesita una introducción a los conceptos básicos, le recomiendo el video de 3-blue-1-brown.

Los bloques de Bitcoin consisten fundamentalmente en un encabezado de bloque, seguido de una lista de transacciones, de las cuales el orden no es importante para nada más que futuras referencias.

Los bloques originalmente tenían un tamaño fijo, sin embargo, con la implementación del testigo segregado, cambiaron a un tamaño ligeramente variable según la cantidad del bloque que son datos testigo frente a la cantidad que son otros datos de transacciones. El tamaño de bloque promedio contemporáneo es de aproximadamente 1,5 MB (con bloques que a menudo se llenan cerca de su capacidad).

Mecanismo de Consenso

Un repaso rápido: cada cadena de bloques debe tener algún mecanismo para determinar qué bloques forman la verdadera cadena y qué bloques deben descartarse. Esto se conoce como el mecanismo de "consenso".

Bitcoin utiliza un mecanismo de consenso de prueba de trabajo, donde los mineros forman un bloque a partir de un conjunto de transacciones y tienen que resolver un rompecabezas matemático difícil para que su bloque sea válido. Específicamente, los mineros tienen que elegir un número arbitrario ("nonce") en el encabezado del bloque que SHA-256(SHA-256(block header)) contenga una cierta cantidad de ceros iniciales. Gracias a la elección del hash SHA-256 criptográficamente seguro, no hay otra forma de hacerlo que no sea adivinando y probando una gran cantidad de nonces potenciales.

El número de ceros a la izquierda requeridos (la "dificultad") se ajusta una vez cada 2016 bloques en función del tiempo entre esos bloques anteriores, de modo que, en promedio, un minero tiene éxito en "minar" un nuevo bloque (elegir transacciones y encontrar un nonce válido para él) una vez cada 10 minutos.

En raras ocasiones, varios mineros encontrarán bloques en momentos similares. Esto se resuelve cuando los nodos eligen la cadena más larga que conocen como la cadena verdadera. Siempre que >51% de los nodos actúen racionalmente, la red tendrá un incentivo financiero para llegar a un consenso sobre una única cadena más larga dentro de unos pocos bloques como máximo. De lo contrario, los mineros correrían el riesgo de minar en cadenas que terminan siendo desechadas, desperdiciando así su esfuerzo.

Transacciones BTC y el modelo UTXO

El contenido principal de los bloques de Bitcoin es la lista de transacciones. Cada transacción especifica:

  • Una lista de entradas: un UTXO + un script de entrada para cada
  • Una lista de salidas: script de salida + una cantidad de BTC para enviar por cada
Espera... script de entrada y salida ...? ¿No especificas las direcciones de entrada y salida ? ¿Pensé que Ethereum es el contrato inteligente? No del todo, Bitcoin en realidad también tiene una capacidad de secuencias de comandos limitada... aunque no genera contratos inteligentes completos, y con un gran asterisco, llegaremos a eso más adelante.

Entonces, lo primero que debe entender es que Bitcoin en realidad no tiene " cuentas ", por así decirlo. Bitcoin tiene "salidas de transacciones no gastadas", o UTXO que fueron las salidas de transacciones anteriores pero que aún no han sido la entrada de una transacción posterior. El script de salida asociado con cada UTXO especifica cómo se debe "desbloquear" para gastarlo en una transacción futura. El "saldo" en su billetera Bitcoin es realmente solo una suma total que obtiene el software de su billetera al sumar todos los valores en todos los UTXO que su billetera sabe cómo desbloquear .

Cuando gasta BTC de su billetera, su billetera en realidad tiene cierta libertad para elegir qué conjunto de UXTO agregar como entradas para financiar su transacción con la cantidad de BTC que especificó. ¡Algunas billeteras incluso pueden hacer un mejor trabajo que otras!

Específicamente, cuando desee gastar un UTXO como parte de su transacción, debe proporcionar un "script de entrada" que se utiliza para desbloquear la transacción. Los scripts de entrada y salida se agregan juntos, y el script resultante debe devolver verdadero cuando se ejecuta para que la transacción sea válida.

Nota: El "script" de entrada aquí está entre comillas extrafuertes aquí, porque el "script" de entrada generalmente consiste simplemente en su clave pública y la firma de la transacción... no hay comandos reales no triviales.

Nota: Digo firma y clave pública aquí: otro hecho menos conocido es que las direcciones de Bitcoin no son en realidad claves públicas , son hashes más cortos de su clave pública. El script de salida más utilizado (llamado "P2PKH") utiliza una cadena estándar de operaciones para reducir la clave pública a un hash con el que comparar. Esto se usa en lugar de la clave pública completa por conveniencia porque es más corto de mostrar, pero podría crear un UTXO que se compare con la clave pública completa si se desea. Puede hacer esto siempre que la dirección de destino haya enviado transacciones, ya que puede encontrar su clave pública completa en la cadena de bloques junto con la firma de esas transacciones.

Implicaciones del modelo UTXO

Este modelo UTXO tiene un par de implicaciones muy interesantes que, sorprendentemente, pocas personas en el ecosistema criptográfico conocen:

  • Considera una dirección de donación de Bitcoin, que publique en su sitio web (suponiendo que haya una era en la que las tarifas de transacción lo hagan sensato ). Imagine que miles de personas donan 0,1 BTC cada una a esta dirección de donación. Ahora suponga que va a comprar un artículo por 10 BTC usando esa dirección... se sorprenderá un poco cuando vea la tarifa de transacción. De hecho, si las tarifas son lo suficientemente altas, es posible que no pueda gastar el BTC en esta dirección en absoluto .¡a pesar de que el "saldo" total es mucho más alto que la tarifa de transacción mínima típica! ¿Por qué? Porque cuando forma una transacción, debe especificar cada uno de los UTXO de entrada individualmente, y dado que esta es una dirección de donación, su transacción puede incluir cientos de UTXO separados. Dado que la tarifa de transacción requerida para que su transacción se incluya en un bloque está correlacionada con el tamaño de su transacción, ¡eso significa una tarifa de transacción enorme!
  • Técnicamente, puede realizar una transacción con UTXO que tengan scripts de salida que no requieran ninguna firma. Su secuencia de comandos de salida podría ser simplemente return true en cuyo caso cualquiera podría gastar el UTXO. La secuencia de comandos de salida podría incluso ser un rompecabezas matemático que el gastador debe resolver. El "técnicamente" aquí es de donde obtenemos el asterisco de antes: en la época contemporánea, los nodos de Bitcoin en realidad no aceptan scripts de salida arbitrarios en las transacciones, solo hay un conjunto fijo de scripts de salida "estándar" (como P2PKH) que generalmente son aceptado. Sin embargo , eso es por nodos ... los mineros sonse le permite extraer transacciones con cualquier script y serán transacciones válidas en la cadena de bloques, por lo que si puede encontrar un grupo de minería dispuesto, técnicamente podría crear tales UTXO.
  • Hay otro tipo de transacción llamada "Pago al hash de secuencia de comandos" (P2SH), que es una inversión de control. Una salida de transacción P2SH simplemente incluye el hash de un script en la UTXO, y el gastador debe incluir el script que coincide con ese hash además de las firmas y otras entradas. Esto tiene un efecto interesante: cuando envía BTC a una "dirección" P2SH... el público en realidad no sabe qué clave pública puede gastar esas monedas hasta que envía una transacción gastándolas (debe revelar el script para gastarlas). ). Eso significa que hay monedas en la cadena de bloques en este momento de las que en realidad no sabemos la "dirección de propiedad" efectiva. No todas las cadenas de bloques tienen esta propiedad.

Incentivos de red​

Cada cadena de bloques debe tener algún incentivo para que los mineros y/u otros nodos de la red la aseguren. En el caso de Bitcoin, los mineros reciben una recompensa de bloque fijo por cada bloque que extraen. Cuando construyen el bloque, especifican una transacción "coinbase" como parte de ese bloque, otorgándoles esa recompensa de bloque.

La recompensa del bloque comenzó en 50 BTC por bloque en el inicio de Bitcoin, y periódicamente se reduce a la mitad siguiendo un cronograma predeterminado basado en la cantidad de bloques que se han extraído. Hasta ahora, la recompensa del bloque se ha reducido a la mitad tres veces y se ubica en 6.25 BTC. Eventualmente, la recompensa disminuirá a cero después de suficientes reducciones a la mitad.

Además de la recompensa minera, los mineros pueden cobrar todas las tarifas de transacción pagadas por las transacciones en el bloque. Esto da un incentivo para que los mineros incluyan transacciones en lugar de extraer bloques vacíos.

Aparte de lo interesante: con BTC y muchas otras criptomonedas basadas en PoW, es técnicamente posible que los mineros racionales terminen extrayendo un bloque sin transacciones si extraen un bloque en el intervalo muy corto en el que han recibido el encabezado del bloque anterior pero no el transacciones de bloques anteriores. En ese intervalo, no saben qué transacciones no se pueden incluir porque ya se incluyeron en el último bloque, pero pueden formar el encabezado del siguiente bloque porque solo depende del encabezado del bloque anterior. Si encuentran el nonce válido excepcionalmente rápido, terminarán sin incluir ninguna transacción.

Escalabilidad​

Para cada criptomoneda voy a hacer una estimación de la escalabilidad en cadena. Es decir, ¿cuántas transacciones puede procesar la red por segundo ignorando cualquier posible solución de capa 2 y qué tipo de requisitos de hardware hay en los nodos para hacer esto?

Las transacciones máximas que caben en un bloque de Bitcoin son ~2700. Con un tiempo de bloque de 10 minutos, esto produce ~4,5 transacciones por segundo.

Las dos cosas que debe almacenar un nodo completo de Bitcoin (uno que verifica y reenvía transacciones y bloquea en lugar de simplemente escucharlas) para que funcione de manera efectiva son:

  • La cadena de bloques completa almacenada en el disco (encabezados de bloque + transacciones). Actualmente asciende a ~400 GB y está creciendo a un ritmo de ~80 GB/año.
  • La base de datos UTXO almacenada al menos parcialmente en RAM. Esto no es lo mismo que el historial de transacciones completo, porque las salidas solo se pueden gastar una vez, por lo que las salidas que se gastaron anteriormente no son relevantes para verificar nuevos bloques/transacciones. La base de datos de UTXO es actualmente de ~4,5 GB y su tamaño crece ~0,5 GB al año.
El ancho de banda de la red también es una consideración interesante. Cada bloque es ~1.5MB y obtenemos un nuevo bloque una vez cada 10 minutos. En promedio, esto genera un requisito de ancho de banda de una conexión de 20 Kbit/s. Sin embargo, debemos considerar que todas las transacciones solicitadas se envían a los nodos, y el bloque... que contiene las transacciones incluidas , también se envía a los nodos. Entonces, necesitamos duplicar aproximadamente ese requisito de ancho de banda a 40 Kbit/s. También tenga en cuenta que este es solo el ancho de banda teórico mínimo requerido para mantenerse al día con la red . Incluyendo ráfagas de actividad y sincronización inicial, necesitará un ancho de banda mayor que en la práctica.

Resumen de estadísticas de BTC Blockchain​

  • En el momento de la génesis, no existía BTC
  • Los bloques tienen un tamaño medio de 1,5 MB
  • Los bloques se agregan una vez cada 10 minutos
  • La recompensa del bloque inicial fue de 50 BTC
  • Esa recompensa se reduce a la mitad eventualmente .
  • Esto arroja un suministro total eventual de 21 millones de BTC.
  • Rendimiento en cadena: ~4.5 transacciones/s
  • Las transacciones siguen uno de los pocos scripts estándar
  • Almacenamiento activo del nodo: ~4,5 GB aumentando en 0,5 GB/año
  • Almacenamiento de archivo de nodo: ~400 GB aumentando en 80 GB / año
  • Requisito de red de nodo: 40 Kbit/s mínimo
 

Bambino

Megahash
Hodler
Veterano
Desde
7 May 2020
Mensajes
1,326
Puntuación
3,353

Crea una cuenta o accede para comentar

Debes estar registrado para poder comentar

Crear cuenta

Crea una cuenta en Foro Coin

Iniciar sesión

¿Ya tienes una cuenta? Inicia sesión

Arriba