Tutorial de blockchain · en español · desde cero

Aprende cómo funciona Bitcoin construyéndolo.

xavicoin es una blockchain tipo Bitcoin escrita en Go, pequeña y comentada para que se pueda leer entera. Este tutorial la recorre pieza a pieza: hashes, firmas, transacciones, minería, red y consenso. Sin dar nada por sabido.

  • ~5.400 líneas de Go
  • 3 dependencias externas
  • 0 monedas con valor real
bloque 0 · génesis
anterior
0000…0000
hash
0000002b9eb662…
bloque 1
anterior
0000002b9eb662…
hash
00000017c4e9a1…
bloque 2
anterior
00000017c4e9a1…
hash
0000003fa82b07…
Cada bloque guarda el hash del anterior. Cambia un dato antiguo y se rompen todos los que vienen después.

Demo · se ejecuta en tu navegador

Mina un bloque. Ahora. Aquí.

Un bloque solo vale si su hash empieza por suficientes ceros. No hay fórmula para conseguirlo: se cambia un número (el nonce), se calcula el hash, y si no cumple se prueba con el siguiente. Eso, repetido millones de veces, es minar.

Hash del bloque (doble SHA-256)

Activa JavaScript para usar la demo.

Intentos
0
Tiempo
Velocidad
Esperado

  • Efecto avalancha. Cambia una sola letra de las transacciones: el hash entero cambia y el bloque deja de ser válido. Por eso no se puede retocar la historia.
  • Caro de encontrar, gratis de comprobar. A ti te ha costado miles de intentos. A quien reciba tu bloque le basta con calcular un hash para saber que el trabajo está hecho.
  • Cada cero multiplica por 16. Sube la dificultad un punto y tardarás 16 veces más. Bitcoin exige hoy unos 19 ceros: ni todos los ordenadores del mundo juntos minarían un bloque así en este navegador.

Itinerario

Diez capítulos, en el orden en que las piezas se necesitan.

Cada capítulo explica una idea con palabras normales, enseña el código Go de xavicoin que la implementa y propone algo que ejecutar para verla funcionar.

  1. 01

    El problema: dinero sin banco

    Un fichero se puede copiar. ¿Cómo se evita gastar dos veces la misma moneda sin que nadie mande?

    README.mdLeer →
  2. 02

    Hashes: la huella digital

    La pieza de la que sale todo lo demás: deterministas, impredecibles e imposibles de invertir.

    internal/crypto/hash.goLeer →
  3. 03

    Claves, firmas y direcciones

    Por qué una wallet no guarda monedas sino claves, y cómo se demuestra que un pago es tuyo.

    internal/crypto/keys.goLeer →
  4. 04

    Transacciones: billetes, no saldos

    El modelo UTXO: monedas sueltas que se gastan enteras, el cambio y las comisiones.

    internal/chain/validate.goLeer →
  5. 05

    Bloques y cadena

    Una cabecera de 80 bytes que apunta a la anterior: toca un dato antiguo y se rompe todo lo posterior.

    internal/core/block.goLeer →
  6. 06

    Minería y dificultad

    Una lotería carísima de ganar y gratis de comprobar, que se regula sola para dar un bloque cada 10 s.

    internal/miner/miner.goLeer →
  7. 07

    De dónde salen las monedas

    La coinbase, el halving y por qué el total emitido es finito. La política monetaria en una línea de código.

    internal/core/params.goLeer →
  8. 08

    La red y la mempool

    Nodos que no se fían de nadie, rumores que recorren la red en segundos y la sala de espera de los pagos.

    internal/p2p/Leer →
  9. 09

    Forks, reorgs y seguridad

    Qué pasa cuando hay dos versiones de la historia, por qué se esperan confirmaciones y qué puede hacer un 51 %.

    internal/chain/chain.goLeer →
  10. 10

    Árbol de Merkle y wallets ligeras

    Demostrar que un pago está en un bloque con un puñado de hashes, sin descargar el bloque.

    internal/core/merkle.goLeer →

Cómo encaja todo

Un pago, de la firma a la confirmación.

Ningún paso necesita a nadie de confianza: cada nodo comprueba todo por sí mismo y rechaza lo inválido, lo envíe quien lo envíe.

  1. Wallet

    Ana firma

    Su wallet elige monedas suyas sin gastar, crea las salidas (12,5 para Luis, el cambio para ella) y firma con su clave privada.

  2. Nodo

    Un nodo la valida

    Comprueba que las monedas existen y siguen sin gastar, que la firma es de su dueña y que no sale más de lo que entra. Si pasa, entra en su mempool.

  3. Red

    Corre como un rumor

    El nodo la anuncia a sus vecinos, que la validan por su cuenta y la reenvían. En segundos la conoce toda la red.

  4. Mineros

    Entra en un bloque candidato

    Cada minero mete en su próximo bloque las transacciones que más comisión pagan por byte.

  5. Minero

    Alguien gana la lotería

    Tras millones de intentos, un minero encuentra un nonce que deja el hash de la cabecera por debajo del objetivo, y publica el bloque.

  6. Todos

    Todos lo comprueban

    Cada nodo revalida el bloque entero: prueba de trabajo, firmas, dobles gastos y que el minero no cobre de más. El pago tiene 1 confirmación.

  7. Tiempo

    Se entierra

    Cada bloque que se mina encima añade una confirmación. Revertir el pago exigiría rehacer todo ese trabajo más rápido que el resto de la red.

Pruébalo

Una red de verdad en tu portátil, en dos minutos.

El código está en github.com/xavibj/xavicoin, con licencia MIT. xavicoin no es una simulación: son nodos reales que minan, se conectan por TCP, propagan transacciones y se reorganizan cuando hay un fork. La red devnet está ajustada para que lo que en Bitcoin tarda semanas se vea en minutos.

Bloque objetivo
10 s
Ajuste de dificultad
cada 20 bloques
Subsidio
50, mitad cada 2.100 bloques
Emisión total
≈ 210.000 monedas
# Descarga el código y compila el nodo y la wallet (solo hace falta Go)
$ git clone https://github.com/xavibj/xavicoin.git && cd xavicoin
go build -o bin/ ./cmd/...

# Crea una clave; su dirección empieza por X
$ bin/cli newaddress
XSjptVYavqg4kgs34es3EAHiXGcYh46N8v

# Arranca un nodo que mina hacia esa dirección
$ bin/noded -mine XSjptVYavq…

# Las monedas minadas maduran a los 10 bloques
$ bin/cli balance
total: 1650.00000000  (+450.00000000 inmaduras)

# Paga 12,5 monedas; devuelve el ID de la transacción
$ bin/cli send XC8ebzPe9Q… 12.5
b6be90a1705bd2e9c560674626b8f8fa4e239d6d83…

# Pide la prueba de Merkle y la verifica en tu lado
$ bin/cli proof b6be90a1…
prueba verificada: 2 hashes bastan para demostrar
que la transacción está en el bloque 46

Qué es y qué no es

El mismo motor, con menos piezas.

Bitcoin carga con quince años de compatibilidad hacia atrás. xavicoin conserva las ideas y los algoritmos, y quita todo lo que estorba para entenderlos.

Igual que Bitcoin

  • Prueba de trabajo con doble SHA-256 y cabecera de 80 bytes idéntica
  • Modelo UTXO y firmas ECDSA sobre la curva secp256k1
  • Direcciones Base58Check con código de control
  • Árbol de Merkle, halving, madurez de coinbase y comisiones
  • Ajuste de dificultad, con el mismo formato compacto “bits”
  • Red P2P con inv/getdata, y la regla de la cadena con más trabajo

Simplificado a propósito

  • El ID de una transacción no incluye las firmas. Evita de raíz la “maleabilidad” que Bitcoin tardó años en arreglar con SegWit.
  • Sin lenguaje Script. Toda salida es un pago al hash de una clave pública. Menos flexible, mucho más fácil de leer.
  • El ajuste de dificultad mide el periodo completo. Bitcoin mide un bloque de menos por un error de 2009 que ya no se puede corregir.
  • Formatos y protocolo propios. Misma lógica con menos casos especiales. A cambio, no habla con la red Bitcoin.

Aviso de escala. Estas reglas protegen a Bitcoin porque su potencia de minado es gigantesca. En una red pequeña cualquiera con un portátil supera el 51 %, así que xavicoin sirve para aprender, no para guardar valor.