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
- anterior
- 0000…0000
- hash
- 0000002b9eb662…
- anterior
- 0000002b9eb662…
- hash
- 00000017c4e9a1…
- anterior
- 00000017c4e9a1…
- hash
- 0000003fa82b07…
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.
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.
- 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 → - 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 → - 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 → - 04
Transacciones: billetes, no saldos
El modelo UTXO: monedas sueltas que se gastan enteras, el cambio y las comisiones.
internal/chain/validate.goLeer → - 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 → - 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 → - 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 → - 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 → - 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
Á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.
- 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.
- 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.
- 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.
- Mineros
Entra en un bloque candidato
Cada minero mete en su próximo bloque las transacciones que más comisión pagan por byte.
- 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.
- 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.
- 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.