Jhonatan Pinheiro
Cargando página...
Jhonatan Pinheiro
Cargando página...
Jhonatan Pinheiro
Cargando página...
Cómo funciona blockchain por dentro, qué entrega la tokenización de activos reales (y qué no) y cómo Bitcoin obtuvo NFTs y tokens fungibles con Ordinals y Runes.
Existe mucho contenido sobre blockchain que es o bien hype de inversión, o bien un artículo académico impenetrable. Este intenta ser la tercera cosa: documentación técnica para quien programa y quiere entender qué hacen de verdad estas tecnologías, dónde resuelven un problema real y dónde son la herramienta equivocada.
Tres asuntos, en orden de abstracción:
Esto no es una recomendación de inversión. Es documentación técnica. Nada de lo que hay aquí sugiere comprar, vender o mantener ningún activo — y la parte final trata justamente de los riesgos.
Una blockchain es una base de datos append-only, replicada y sin dueño, en la que el orden de los registros lo acuerdan participantes que no confían entre sí.
Técnicamente, tres piezas:
# La cadena de hashes, en la práctica (Bitcoin Core)
bitcoin-cli getblockhash 840000
bitcoin-cli getblock 0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5 1
# el campo "previousblockhash" enlaza este bloque con el anteriorEl árbol de Merkle es lo que permite demostrar que una transacción está en un bloque sin descargar el bloque entero — la base de cualquier cliente ligero:
bitcoin-cli gettxoutproof '["<txid>"]' # prueba de inclusión
bitcoin-cli verifytxoutproof "<prueba>" # verificaciónLo que hace distinta a una blockchain de una base de datos replicada: en una base de datos, manda el administrador. En una blockchain pública, no manda nadie — la regla es el código que ejecutan todos los nodos, y cambiar esa regla exige convencer a la red entera.
Los mineros compiten por encontrar un nonce que haga que el hash del bloque quede por debajo de un objetivo. Encontrarlo es caro (energía), verificarlo es instantáneo. La cadena válida es la que ha acumulado más trabajo.
bitcoin-cli getblockchaininfo | jq '{blocks, difficulty, chainwork}'
bitcoin-cli getmininginfo | jq '{networkhashps, difficulty}'El gasto de energía no es un efecto colateral: es el mecanismo mismo. Reescribir la historia exige rehacer el trabajo de todos los bloques posteriores, más rápido que la red entera. El coste es la seguridad.
Los validadores depositan capital como garantía. Quien valida un bloque inválido pierde parte del depósito (slashing). El coste deja de ser energía y pasa a ser capital bloqueado.
| Proof of Work | Proof of Stake | |
|---|---|---|
| Coste de un ataque | Hardware + energía | Capital en stake |
| Energía | Alta por diseño | Baja |
| Finalidad | Probabilística (confirmaciones) | Determinista (en épocas) |
| Entrada de nuevos validadores | Comprar hardware | Comprar y bloquear el activo |
| Crítica principal | Consumo energético | Tendencia a la concentración de capital |
Finalidad es el concepto que más confunde a quien viene de las bases de datos: en Bitcoin, una transacción nunca es 100% irreversible — solo se vuelve exponencialmente improbable de revertir con cada bloque. Por eso los exchanges esperan confirmaciones.
Resuelve bien:
No resuelve:
La pregunta que separa un proyecto serio del teatro tecnológico: ¿hay más de una parte, sin confianza mutua, que necesite ponerse de acuerdo sobre el mismo estado? Si la respuesta es no, un Postgres con log de auditoría lo resuelve mejor, más barato y más rápido.
# Lightning: canal de pago fuera de la cadena, liquidación en la L1
lncli openchannel --node_key=<pubkey> --local_amt=1000000
lncli listchannels | jq '.channels[] | {remote_pubkey, capacity, local_balance}'
lncli closechannel --funding_txid=<txid> --output_index=0La regla práctica: cuanto más lejos de la L1, más barato y más rápido — y más confianza extra tienes que asumir.
// ERC-20: lo esencial de la interfaz fungible
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address conta) external view returns (uint256);
function transfer(address para, uint256 valor) external returns (bool);
function approve(address gastador, uint256 valor) external returns (bool);
function transferFrom(address de, address para, uint256 valor) external returns (bool);
}Para los RWA existe una tercera familia, la de los tokens permisionados, en la que la transferencia solo ocurre si ambas partes están habilitadas:
// ERC-3643 (T-REX): transferencia sujeta a verificación de identidad
function transfer(address para, uint256 valor) public override returns (bool) {
require(identityRegistry.isVerified(para), "destinatario nao verificado");
require(compliance.canTransfer(msg.sender, para, valor), "regra de compliance");
return super.transfer(para, valor);
}Esa es la diferencia central entre la cripto "libre" y un activo regulado: el token de un activo financiero necesita saber quién está al otro lado.
Un RWA (Real World Asset) es la representación, en blockchain, de un activo que existe fuera de ella: un bono público, una participación de un fondo, un derecho de cobro, un inmueble, crédito privado, una materia prima.
Aquí está lo que la mayoría de los textos promocionales omite:
| Categoría | Qué se tokeniza | Por qué funciona |
|---|---|---|
| Deuda pública | Treasuries de EE. UU., tesoro nacional | Activo estandarizado, líquido y de bajo riesgo de crédito |
| Fondos | Participaciones de fondos monetarios | Liquidación y distribución más baratas |
| Crédito privado | Derechos de cobro, préstamos | Fraccionamiento y acceso para el inversor pequeño |
| Inmuebles | Fracción de un inmueble o de una SPV | Ticket menor; la liquidez sigue siendo el reto |
| Materias primas | Oro, energía, créditos de carbono | Trazabilidad del origen |
Los casos que salieron bien comparten un patrón claro: funcionan mejor cuanto más estandarizado, líquido y regulado sea el activo original. La deuda pública tokenizada prosperó; la fracción de inmueble sigue siendo difícil — no por una limitación técnica, sino porque el problema nunca fue tecnológico.
Desde el punto de vista de quien lo construye, un proyecto serio siempre tiene estas capas:
[ Activo en el mundo real ] inmueble, bono, derecho de cobro
│
[ Estructura jurídica ] SPV, fondo, contrato de cesión — quién responde legalmente
│
[ Custodia ] quién guarda el activo y responde por él
│
[ Oráculo / atestación ] precio, prueba de reservas, estado del activo
│
[ Token ] contrato permisionado (ERC-3643, ERC-1400)
│
[ Compliance ] KYC/AML, allowlist, límites por jurisdicción
│
[ Distribución ] plataforma, monedero, mercado secundarioEl código es la menor parte del problema. Un contrato de token permisionado tiene unos cientos de líneas; la estructura jurídica y la custodia llevan meses.
Sin esto, el token es una promesa no verificable:
// Consulta a un feed de prueba de reservas antes de permitir la emisión
interface AggregatorV3Interface {
function latestRoundData() external view returns (
uint80 roundId, int256 answer, uint256 startedAt,
uint256 updatedAt, uint80 answeredInRound
);
}
function emitir(uint256 quantidade) external onlyEmissor {
(, int256 reserva, , uint256 atualizadoEm, ) = feedReserva.latestRoundData();
require(block.timestamp - atualizadoEm < 1 days, "dado de reserva desatualizado");
require(totalSupply() + quantidade <= uint256(reserva), "emissao acima do lastro");
_mint(msg.sender, quantidade);
}Fíjate en el require del plazo: un oráculo parado es tan peligroso como un oráculo equivocado, y olvidar esa comprobación es uno de los hallazgos más comunes en una auditoría.
La última pregunta es decisiva: casi todo token de RWA regulado tiene una función de congelación — la ley lo exige. Eso no es un fallo, es un requisito. Pero necesitas saber que existe, y quién tiene la clave.
Para entender Ordinals y Runes hay que entender tres cosas de Bitcoin.
Bitcoin no tiene cuentas con saldo. Tiene UTXOs (Unspent Transaction Outputs): trozos de moneda, cada uno con un valor y una condición de gasto. Una transacción consume UTXOs enteros y crea otros nuevos.
bitcoin-cli listunspent
# [{ "txid": "...", "vout": 0, "amount": 0.015, "scriptPubKey": "..." }]
# Cada UTXO se gasta entero; el cambio vuelve como un UTXO nuevo
bitcoin-cli gettxout "<txid>" 0Es exactamente eso lo que permite rastrear satoshis individuales: como cada UTXO tiene un origen identificable, se puede seguir el rastro de cualquier fracción.
Cada salida lleva un script que define la condición de gasto. No es Turing-completo a propósito: sin bucles, sin estado global, sin llamadas a contratos.
# OP_RETURN: salida deliberadamente no gastable, usada para grabar datos
bitcoin-cli createrawtransaction \
'[{"txid":"<txid>","vout":0}]' \
'[{"data":"48656c6c6f"}]'Dos actualizaciones prepararon el terreno, sin que ese fuera el objetivo:
Junta las dos: se volvió viable meter un archivo dentro de una transacción de Bitcoin, pagando una comisión con descuento. Nadie diseñó esto pensando en imágenes — fue una consecuencia emergente. Esa distinción está en el centro de toda la polémica que vino después.
Ordinals es un protocolo creado por Casey Rodarmor y lanzado en enero de 2023. Tiene dos partes independientes, y confundirlas es el error más común.
Cada satoshi recibe un número de serie, asignado según el orden en que fue minado, y se rastrea en las transacciones con la regla first-in-first-out: los primeros satoshis que entran son los primeros que salen.
# Numeración y localización de un satoshi concreto
ord list <outpoint> # qué sats hay en este UTXO
ord find 1234567890 # en qué UTXO está el sat número N
ord traits 1234567890 # rareza: uncommon, rare, epic, legendaryFíjate: esto es convención, no consenso. La red Bitcoin no sabe qué es un ordinal. Quien lo sabe es el indexador que ejecuta esa regla sobre la cadena. Dos indexadores con implementaciones distintas llegarían a resultados distintos — la regla solo vale porque todos acuerdan usar la misma.
Una inscripción adjunta contenido (imagen, texto, HTML, audio) a un satoshi concreto, grabando los bytes en el witness de una transacción Taproot, dentro de un sobre que Bitcoin ignora:
OP_FALSE
OP_IF
OP_PUSH "ord" # marcador del protocolo
OP_PUSH 1 # campo: content-type
OP_PUSH "image/png"
OP_PUSH 0 # campo: cuerpo
OP_PUSH <bytes del archivo>
OP_ENDIFEl OP_FALSE OP_IF hace que el bloque entero no se ejecute nunca — para el consenso, es un dato inerte. Para el indexador, es la inscripción.
El proceso tiene dos transacciones, y entenderlo evita un error caro:
# 1) COMMIT: crea una salida Taproot comprometida con el script de la inscripción
# 2) REVEAL: gasta esa salida revelando el script — aquí es donde el dato entra en la cadena
ord wallet inscribe --fee-rate 15 --file arte.png
# devuelve: commit txid, reveal txid y el id de la inscripción (<txid>i<índice>)
ord wallet inscriptions
ord wallet send --fee-rate 12 <direccion> <id-de-la-inscripcion>Una inscripción vive en un satoshi. Si tu monedero trata ese satoshi como cambio corriente, puede gastarlo pagando la comisión de red — y tu inscripción desaparece dentro de un minero.
# Protege el UTXO de la inscripción de un gasto accidental
bitcoin-cli lockunspent false '[{"txid":"<txid>","vout":0}]'
bitcoin-cli listlockunspent
# Nunca uses un monedero corriente para inscripciones: usa uno que entienda el control de sats
ord wallet balance # separa cardinal (gastable) de ordinal (protegido)Usa un monedero con soporte para Ordinals y mantén los fondos separados. Un monedero corriente no sabe qué es un sat inscrito.
Las inscripciones compiten por el espacio de bloque con las transacciones financieras. En los momentos punta, eso elevó las comisiones de forma perceptible y llenó el mempool — lo que generó (y sigue generando) una discusión legítima en la comunidad sobre el uso "adecuado" del espacio de bloque.
bitcoin-cli getmempoolinfo | jq '{size, bytes, mempoolminfee}'
bitcoin-cli estimatesmartfee 6Antes de Runes, la forma de crear un token fungible en Bitcoin era el BRC-20: inscripciones con un JSON que decía "he creado", "he acuñado", "he transferido". Funciona, pero con dos problemas serios: cada operación es una inscripción (basura en el witness) y el saldo depende por completo de que un indexador externo interprete texto.
Runes, también de Casey Rodarmor, se lanzó en el bloque 840.000 — el halving de abril de 2024 — para resolverlo de forma nativa al modelo UTXO.
El protocolo graba un runestone en una salida OP_RETURN (dato en el cuerpo de la transacción, no en el witness), y los saldos viven en los propios UTXOs.
OP_RETURN
OP_13 # marcador del protocolo Runes
<payload> # campos codificados: etching, mint, edicts, pointerTres operaciones componen todo el ciclo de vida:
# Etching: crear una rune con términos de emisión abiertos
ord wallet batch --fee-rate 20 --batch etching.yaml
# etching.yaml
# mode: separate-outputs
# etching:
# rune: MINHA•PRIMEIRA•RUNE
# divisibility: 2
# premine: 1000
# symbol: ¤
# supply: 21000
# terms:
# amount: 100
# cap: 200
ord wallet mint --fee-rate 15 --rune MINHA•PRIMEIRA•RUNE
ord wallet send --fee-rate 15 <direccion> 500:MINHA•PRIMEIRA•RUNE
ord wallet balance # muestra sats y runes por UTXO•) que no forma parte de la identidad. Los nombres cortos se reservaron a propósito: solo van quedando disponibles con el tiempo, para evitar que todo se tomara en los primeros bloques.amount), cuántos mints existen (cap) y en qué ventana de bloques se permiten.| BRC-20 | Runes | |
|---|---|---|
| Dónde graba | Una inscripción en el witness | OP_RETURN en el cuerpo |
| Modelo de saldo | Estado off-chain por indexador | UTXO nativo |
| Basura en la cadena | Alta (3 inscripciones por ciclo) | Baja (un OP_RETURN) |
| Transferencia | Inscribir y transferir | Un edict en la propia transacción |
| Complejidad del indexador | Alta (parsing de JSON) | Menor (formato binario definido) |
Ambos, no obstante, comparten la misma característica fundamental: el consenso de Bitcoin no valida ninguno de los dos. Un nodo Bitcoin ve solo transacciones corrientes. Toda la semántica de token vive en los indexadores.
| Protocolo | Dónde vive | ¿Lo valida el consenso? | Privacidad | Perfil |
|---|---|---|---|---|
| Ordinals | Witness (L1) | No | Pública | Activos únicos, arte, artefactos digitales |
| BRC-20 | Inscripciones (L1) | No | Pública | Token fungible — hoy legado |
| Runes | OP_RETURN (L1) | No | Pública | Token fungible eficiente |
| RGB | Off-chain, anclado a la L1 | No | Alta (dato fuera de la cadena) | Activos con privacidad y contratos |
| Liquid | Sidechain federada | Sí, en la sidechain | Confidencial | Emisión institucional, activos regulados |
| Taproot Assets | Off-chain + Lightning | No | Media | Stablecoins con liquidación instantánea |
Para RWA sobre Bitcoin, los candidatos serios son Liquid y Taproot Assets — no Runes. Un activo regulado necesita emisión controlada, confidencialidad y capacidad de congelación, y nada de eso existe en un protocolo basado en un OP_RETURN público.
Una documentación honesta incluye la contra.
Sobre Ordinals y Runes:
Sobre los RWAs:
La crítica más dura, y la más útil: la abrumadora mayoría de los proyectos que se llaman blockchain no necesita blockchain. Si hay una empresa central que emite, custodia, resuelve disputas y puede revertir una operación, has construido una base de datos cara y lenta con mejor marketing. Eso no invalida la tecnología — invalida el uso equivocado de ella.
El camino que más enseña, en orden:
# 1. Levanta un nodo. Aquí es donde cae la ficha: pasas a verificar en lugar de creer.
bitcoind -daemon -txindex=1
bitcoin-cli getblockchaininfo
# 2. Trabaja en testnet/signet — dinero de prueba, errores sin coste
bitcoind -signet -daemon
bitcoin-cli -signet getnewaddress
# 3. Levanta un indexador Ordinals/Runes y observa la cadena
ord --signet server --http-port 8080
# 4. Inscribe y crea una rune en signet antes de hacer nada en mainnet
ord --signet wallet inscribe --fee-rate 1 --file teste.txtPara el lado de los contratos y los RWA:
# Entorno local de EVM, sin gastar nada
npm install --save-dev hardhat
npx hardhat node # cadena local
npx hardhat test # pruebas del contrato
# Estándares que conviene estudiar antes de escribir desde cero:
# ERC-20, ERC-721 (base) · ERC-3643 y ERC-1400 (activos regulados)
# OpenZeppelin (implementaciones auditadas) · Chainlink (oráculos y prueba de reservas)Y las tres reglas que evitan pérdidas mientras aprendes:
Blockchain es una herramienta con un coste altísimo — de rendimiento, de energía o de capital — que compra una propiedad concreta: un acuerdo verificable entre partes sin confianza mutua. Cuando necesitas eso, no hay sustituto. Cuando no lo necesitas, cualquier base de datos es mejor en todos los aspectos.
Los RWAs son la prueba más honesta de esa propuesta, porque exponen exactamente dónde acaba la tecnología y empieza el derecho. Ordinals y Runes son la demostración más interesante de otro fenómeno: cómo una red deliberadamente limitada acabó usándose de un modo que nadie previó, a partir de funciones creadas con otra finalidad.
Entender los dos casos enseña más sobre sistemas distribuidos que cualquier white paper — incluso sobre cuándo no usarlos.