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 muito conteúdo sobre blockchain que é ou hype de investimento, ou artigo acadêmico impenetrável. Este aqui tenta ser a terceira coisa: documentação técnica para quem programa e quer entender o que essas tecnologias fazem de verdade, onde elas resolvem um problema real e onde são a ferramenta errada.
Três assuntos, em ordem de abstração:
Isto não é recomendação de investimento. É documentação técnica. Nada aqui sugere comprar, vender ou manter qualquer ativo — e a parte final é justamente sobre os riscos.
Uma blockchain é um banco de dados append-only, replicado, sem dono, em que a ordem dos registros é acordada por participantes que não confiam uns nos outros.
Tecnicamente, três peças:
# A cadeia de hashes, na prática (Bitcoin Core)
bitcoin-cli getblockhash 840000
bitcoin-cli getblock 0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5 1
# o campo "previousblockhash" liga este bloco ao anteriorA árvore de Merkle é o que permite provar que uma transação está em um bloco sem baixar o bloco inteiro — a base de qualquer cliente leve:
bitcoin-cli gettxoutproof '["<txid>"]' # prova de inclusão
bitcoin-cli verifytxoutproof "<prova>" # verificaçãoO que faz uma blockchain ser diferente de um banco replicado: em um banco, quem manda é o administrador. Em uma blockchain pública, ninguém manda — a regra é o código executado por todos os nós, e mudar essa regra exige convencer a rede inteira.
Mineradores competem para achar um nonce que faça o hash do bloco ficar abaixo de um alvo. Achar é caro (energia), verificar é instantâneo. A cadeia válida é a que acumulou mais trabalho.
bitcoin-cli getblockchaininfo | jq '{blocks, difficulty, chainwork}'
bitcoin-cli getmininginfo | jq '{networkhashps, difficulty}'O gasto de energia não é um efeito colateral: é o próprio mecanismo. Reescrever a história exige refazer o trabalho de todos os blocos posteriores, mais rápido que a rede inteira. O custo é a segurança.
Validadores depositam capital como garantia. Quem valida bloco inválido perde parte do depósito (slashing). O custo deixa de ser energia e passa a ser capital travado.
| Proof of Work | Proof of Stake | |
|---|---|---|
| Custo de ataque | Hardware + energia | Capital em stake |
| Energia | Alta por projeto | Baixa |
| Finalidade | Probabilística (confirmações) | Determinística (em épocas) |
| Entrada de novos validadores | Comprar hardware | Comprar e travar o ativo |
| Crítica principal | Consumo energético | Tendência à concentração de capital |
Finalidade é o conceito que mais confunde quem vem de banco de dados: no Bitcoin, uma transação nunca é 100% irreversível — ela só fica exponencialmente improvável de reverter a cada bloco. É por isso que exchanges esperam confirmações.
Resolve bem:
Não resolve:
A pergunta que separa projeto sério de teatro tecnológico: existe mais de uma parte, sem confiança mútua, que precisa concordar sobre o mesmo estado? Se a resposta é não, um Postgres com log de auditoria resolve melhor, mais barato e mais rápido.
# Lightning: canal de pagamento fora da cadeia, liquidação na 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=0A regra prática: quanto mais longe da L1, mais barato e mais rápido — e mais confiança extra você precisa assumir.
// ERC-20: o essencial da interface fungível
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 RWA existe uma terceira família, a dos tokens permissionados, em que a transferência só acontece se ambas as partes estiverem habilitadas:
// ERC-3643 (T-REX): transferência sujeita a verificação de identidade
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);
}Essa é a diferença central entre cripto "livre" e ativo regulado: o token de um ativo financeiro precisa saber quem está do outro lado.
RWA (Real World Asset) é a representação, em blockchain, de um ativo que existe fora dela: título público, cota de fundo, recebível, imóvel, crédito privado, commodity.
Aqui mora o que a maioria dos textos promocionais omite:
| Categoria | O que é tokenizado | Por que funciona |
|---|---|---|
| Títulos públicos | Treasuries dos EUA, tesouro nacional | Ativo padronizado, líquido e de baixo risco de crédito |
| Fundos | Cotas de fundos monetários | Liquidação e distribuição mais baratas |
| Crédito privado | Recebíveis, empréstimos | Fracionamento e acesso a investidor menor |
| Imóveis | Fração de imóvel ou de SPE | Ticket menor; liquidez ainda é o desafio |
| Commodities | Ouro, energia, crédito de carbono | Rastreabilidade da origem |
Os casos que deram certo têm um padrão claro: funcionam melhor quanto mais padronizado, líquido e regulado for o ativo original. Títulos públicos tokenizados prosperaram; fração de imóvel continua difícil — não por limitação técnica, mas porque o problema nunca foi tecnológico.
Do ponto de vista de quem constrói, um projeto sério tem sempre estas camadas:
[ Ativo no mundo real ] imóvel, título, recebível
│
[ Estrutura jurídica ] SPE, fundo, contrato de cessão — quem responde legalmente
│
[ Custódia ] quem guarda o ativo e responde por ele
│
[ Oráculo / atestação ] preço, prova de reserva, status do ativo
│
[ Token ] contrato permissionado (ERC-3643, ERC-1400)
│
[ Compliance ] KYC/AML, allowlist, limites por jurisdição
│
[ Distribuição ] plataforma, carteira, mercado secundárioO código é a menor parte do problema. Um contrato de token permissionado tem algumas centenas de linhas; a estrutura jurídica e a custódia levam meses.
Sem isso, o token é uma promessa não verificável:
// Consulta a um feed de prova de reserva antes de permitir emissão
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);
}Repare no require do prazo: oráculo parado é tão perigoso quanto oráculo errado, e esquecer essa verificação é uma das falhas mais comuns em auditoria.
A última pergunta é decisiva: quase todo token de RWA regulado tem função de congelamento — a lei exige. Isso não é falha, é requisito. Mas você precisa saber que existe, e quem tem a chave.
Para entender Ordinals e Runes é preciso entender três coisas do Bitcoin.
O Bitcoin não tem contas com saldo. Ele tem UTXOs (Unspent Transaction Outputs): pedaços de moeda, cada um com um valor e uma condição de gasto. Uma transação consome UTXOs inteiros e cria novos.
bitcoin-cli listunspent
# [{ "txid": "...", "vout": 0, "amount": 0.015, "scriptPubKey": "..." }]
# Cada UTXO é gasto por inteiro; o troco volta como um novo UTXO
bitcoin-cli gettxout "<txid>" 0É exatamente isso que permite rastrear satoshis individuais: como cada UTXO tem origem identificável, dá para seguir a trilha de qualquer fração.
Cada saída carrega um script que define a condição de gasto. Não é Turing-completo de propósito: sem laços, sem estado global, sem chamada de contrato.
# OP_RETURN: saída deliberadamente não gastável, usada para gravar dados
bitcoin-cli createrawtransaction \
'[{"txid":"<txid>","vout":0}]' \
'[{"data":"48656c6c6f"}]'Duas atualizações prepararam o terreno, sem que fosse esse o objetivo:
Junte as duas: virou viável colocar um arquivo dentro de uma transação de Bitcoin, pagando taxa com desconto. Ninguém projetou isso pensando em imagens — foi uma consequência emergente. Essa distinção está no centro de toda a polêmica que veio depois.
Ordinals é um protocolo criado por Casey Rodarmor e lançado em janeiro de 2023. Ele tem duas partes independentes, e confundi-las é o erro mais comum.
Cada satoshi ganha um número de série, atribuído pela ordem em que foi minerado, e é rastreado nas transações pela regra first-in-first-out: os primeiros satoshis que entram são os primeiros que saem.
# Numeração e localização de um satoshi específico
ord list <outpoint> # quais sats estão neste UTXO
ord find 1234567890 # em que UTXO está o sat de número N
ord traits 1234567890 # raridade: uncommon, rare, epic, legendaryRepare: isso é convenção, não consenso. A rede Bitcoin não sabe o que é um ordinal. Quem sabe é o indexador que roda essa regra sobre a cadeia. Dois indexadores com implementações diferentes chegariam a resultados diferentes — a regra só vale porque todos concordam em usar a mesma.
Uma inscrição anexa conteúdo (imagem, texto, HTML, áudio) a um satoshi específico, gravando os bytes no witness de uma transação Taproot, dentro de um envelope que o Bitcoin ignora:
OP_FALSE
OP_IF
OP_PUSH "ord" # marcador do protocolo
OP_PUSH 1 # campo: content-type
OP_PUSH "image/png"
OP_PUSH 0 # campo: corpo
OP_PUSH <bytes do arquivo>
OP_ENDIFO OP_FALSE OP_IF faz o bloco inteiro nunca ser executado — para o consenso, é dado inerte. Para o indexador, é a inscrição.
O processo tem duas transações, e entender isso evita erro caro:
# 1) COMMIT: cria uma saída Taproot comprometida com o script da inscrição
# 2) REVEAL: gasta essa saída revelando o script — é aqui que o dado entra na cadeia
ord wallet inscribe --fee-rate 15 --file arte.png
# retorna: commit txid, reveal txid e o id da inscrição (<txid>i<índice>)
ord wallet inscriptions
ord wallet send --fee-rate 12 <endereco> <id-da-inscricao>Uma inscrição vive em um satoshi. Se a sua carteira tratar esse satoshi como troco comum, ela pode gastá-lo pagando taxa de rede — e sua inscrição some para dentro de um minerador.
# Proteja o UTXO da inscrição contra gasto acidental
bitcoin-cli lockunspent false '[{"txid":"<txid>","vout":0}]'
bitcoin-cli listlockunspent
# Nunca use carteira comum para inscrições: use uma que entenda controle de sats
ord wallet balance # separa cardinal (gastável) de ordinal (protegido)Use uma carteira com suporte a Ordinals e mantenha os fundos separados. Carteira comum não sabe o que é sat inscrito.
Inscrições disputam espaço em bloco com transações financeiras. Em momentos de pico, isso elevou taxas de forma perceptível e encheu o mempool — o que gerou (e ainda gera) uma discussão legítima na comunidade sobre uso "adequado" do espaço de bloco.
bitcoin-cli getmempoolinfo | jq '{size, bytes, mempoolminfee}'
bitcoin-cli estimatesmartfee 6Antes das Runes, a forma de criar token fungível no Bitcoin era o BRC-20: inscrições com um JSON dizendo "criei", "mintei", "transferi". Funciona, mas com dois problemas sérios: cada operação é uma inscrição (lixo em witness) e o saldo depende inteiramente de um indexador externo interpretar texto.
Runes, também de Casey Rodarmor, foi lançado no bloco 840.000 — o halving de abril de 2024 — para resolver isso de forma nativa ao modelo UTXO.
O protocolo grava um runestone em uma saída OP_RETURN (dado no corpo da transação, não no witness), e os saldos vivem nos próprios UTXOs.
OP_RETURN
OP_13 # marcador do protocolo Runes
<payload> # campos codificados: etching, mint, edicts, pointerTrês operações compõem todo o ciclo de vida:
# Etching: criar uma rune com termos de emissão abertos
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 <endereco> 500:MINHA•PRIMEIRA•RUNE
ord wallet balance # mostra sats e runes por UTXO•) que não faz parte da identidade. Nomes curtos foram propositalmente reservados: eles só se tornam disponíveis ao longo do tempo, para evitar que tudo fosse tomado nos primeiros blocos.amount), quantos mints existem (cap) e em que janela de blocos eles são permitidos.| BRC-20 | Runes | |
|---|---|---|
| Onde grava | Inscrição no witness | OP_RETURN no corpo |
| Modelo de saldo | Estado off-chain por indexador | UTXO nativo |
| Lixo na cadeia | Alto (3 inscrições por ciclo) | Baixo (um OP_RETURN) |
| Transferência | Inscrever e transferir | Um edict na própria transação |
| Complexidade do indexador | Alta (parsing de JSON) | Menor (formato binário definido) |
Ambos, porém, dividem a mesma característica fundamental: o consenso do Bitcoin não valida nenhum dos dois. Um nó Bitcoin vê apenas transações comuns. Toda a semântica de token vive nos indexadores.
| Protocolo | Onde vive | Consenso valida? | Privacidade | Perfil |
|---|---|---|---|---|
| Ordinals | Witness (L1) | Não | Pública | Ativos únicos, arte, artefatos digitais |
| BRC-20 | Inscrições (L1) | Não | Pública | Token fungível — hoje legado |
| Runes | OP_RETURN (L1) | Não | Pública | Token fungível eficiente |
| RGB | Off-chain, ancorado na L1 | Não | Alta (dado fora da cadeia) | Ativos com privacidade e contratos |
| Liquid | Sidechain federada | Sim, na sidechain | Confidencial | Emissão institucional, ativos regulados |
| Taproot Assets | Off-chain + Lightning | Não | Média | Stablecoins com liquidação instantânea |
Para RWA sobre Bitcoin, os candidatos sérios são Liquid e Taproot Assets — não Runes. Ativo regulado precisa de emissão controlada, confidencialidade e capacidade de congelamento, e nada disso existe em um protocolo baseado em OP_RETURN público.
Documentação honesta inclui o contra.
Sobre Ordinals e Runes:
Sobre RWAs:
A crítica mais dura, e a mais útil: a esmagadora maioria dos projetos que se dizem blockchain não precisa de blockchain. Se existe uma empresa central que emite, custodia, resolve disputa e pode reverter operação, você construiu um banco de dados caro e lento com marketing melhor. Isso não invalida a tecnologia — invalida o uso errado dela.
O caminho que mais ensina, em ordem:
# 1. Rode um nó. É aqui que a ficha cai: você passa a verificar em vez de acreditar.
bitcoind -daemon -txindex=1
bitcoin-cli getblockchaininfo
# 2. Trabalhe em testnet/signet — dinheiro de teste, erro sem custo
bitcoind -signet -daemon
bitcoin-cli -signet getnewaddress
# 3. Suba um indexador Ordinals/Runes e observe a cadeia
ord --signet server --http-port 8080
# 4. Inscreva e crie uma rune em signet antes de qualquer coisa em mainnet
ord --signet wallet inscribe --fee-rate 1 --file teste.txtPara o lado de contratos e RWA:
# Ambiente local de EVM, sem gastar nada
npm install --save-dev hardhat
npx hardhat node # cadeia local
npx hardhat test # testes do contrato
# Padrões que valem estudar antes de escrever do zero:
# ERC-20, ERC-721 (base) · ERC-3643 e ERC-1400 (ativos regulados)
# OpenZeppelin (implementações auditadas) · Chainlink (oráculos e prova de reserva)E as três regras que evitam prejuízo enquanto você aprende:
Blockchain é uma ferramenta com um custo altíssimo — de performance, de energia ou de capital — que compra uma propriedade específica: acordo verificável entre partes sem confiança mútua. Quando você precisa disso, não há substituto. Quando não precisa, qualquer banco de dados é melhor em todos os aspectos.
RWAs são o teste mais honesto dessa proposta, porque expõem exatamente onde a tecnologia acaba e o direito começa. Ordinals e Runes são a demonstração mais interessante de outro fenômeno: como uma rede propositalmente limitada acabou usada de um jeito que ninguém previu, a partir de recursos criados para outra finalidade.
Entender os dois casos ensina mais sobre sistemas distribuídos do que qualquer white paper — inclusive sobre quando não usá-los.