---
title: "Como desenvolver em chains UTXO: Bitcoin, Litecoin, Dogecoin e Bitcoin Cash"
description: "Chains UTXO para desenvolvedores: como Bitcoin, Litecoin, Dogecoin e Bitcoin Cash diferem da EVM, qual infraestrutura você precisa e como a Alchemy a fornece."
---

# Como desenvolver em chains UTXO: Bitcoin, Litecoin, Dogecoin e Bitcoin Cash

<ImageBlock
  src="https://media.alchemy.com/blog/alchemy-bitcoin-support-hero.png"
  alt="Ícones de Bitcoin, Litecoin e Dogecoin em fundo de grade gradiente"
  width={1024}
  height={480}
  priority
/>

Bitcoin não tem saldos de conta. Nunca teve. Litecoin, Dogecoin e Bitcoin Cash também não. Essas quatro chains compartilham um design de 2009 chamado [modelo UTXO](https://www.alchemy.com/docs/bitcoin/utxo), que substitui a máquina de estados "uma linha por endereço" que todo desenvolvedor Ethereum e Solana considera natural. O modelo funciona no nível de protocolo. Ele quebra na camada de aplicação, onde toda consulta básica que seu app precisa fazer ou não existe, ou precisa ser remontada por um indexador externo.

É por isso que times que constroem em chains UTXO passaram anos costurando infraestrutura: um provedor para RPC, outro para leituras indexadas, um terceiro para webhooks, código customizado para as lacunas. Nosso pacote UTXO reúne tudo isso em uma única plataforma nas quatro chains, no mesmo dashboard, com as mesmas API keys e o mesmo sistema de medição que você usa para [EVM](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm) e [Solana](https://www.alchemy.com/solana).

## O que é diferente nas chains UTXO?

UTXO significa "unspent transaction output" (saída de transação não gasta). Toda transação Bitcoin consome uma ou mais saídas como entradas e cria novas saídas. O "saldo" de uma carteira não é armazenado em nenhum lugar na chain. Ele é calculado somando todas as saídas que a carteira controla e que ainda não foram gastas. O [guia do desenvolvedor Bitcoin](https://developer.bitcoin.org/devguide/transactions.html) é explícito: "quando sua carteira Bitcoin informa que você tem um saldo de 10.000 satoshis, na verdade significa que você tem 10.000 satoshis esperando em uma ou mais UTXOs."

Um exemplo concreto. Alice controla três UTXOs: 0,4 BTC, 0,3 BTC e 0,2 BTC. Ela envia 0,5 BTC para Bob. A transação consome integralmente suas saídas de 0,4 e 0,3 BTC, cria uma saída de 0,5 BTC para Bob, retorna ~0,1999 BTC como troco para um novo endereço controlado por Alice, e deixa ~0,0001 BTC como taxa de mineração. A UTXO de 0,2 BTC permanece intocada. UTXOs são atômicas. Não é possível gastar uma parcialmente.

O contraste com chains baseadas em conta é nítido:

<EmbeddedTable
  table={{
    columns: [
      { key: "feature", width: 180, title: "Feature", dataType: "object" },
      {
        key: "accountBased",
        width: 280,
        title: "Account-based (Ethereum)",
        dataType: "object",
      },
      { key: "utxo", width: 300, title: "UTXO (Bitcoin)", dataType: "object" },
    ],
    data: [
      {
        feature: { title: "State", tooltip: "", icon: "" },
        accountBased: {
          title: "One balance per address",
          tooltip: "",
          icon: "",
        },
        utxo: {
          title: "A set of unspent outputs, each with a locking script",
          tooltip: "",
          icon: "",
        },
        id: 0,
      },
      {
        feature: { title: '"Balance" query', tooltip: "", icon: "" },
        accountBased: {
          title: "Direct read from state trie",
          tooltip: "",
          icon: "",
        },
        utxo: {
          title: "Sum of unspent outputs the wallet controls",
          tooltip: "",
          icon: "",
        },
        id: 1,
      },
      {
        feature: { title: "Atomicity", tooltip: "", icon: "" },
        accountBased: {
          title: "A single tx mutates two balances",
          tooltip: "",
          icon: "",
        },
        utxo: {
          title: "A single tx consumes N inputs and creates M outputs",
          tooltip: "",
          icon: "",
        },
        id: 2,
      },
      {
        feature: { title: "Privacy default", tooltip: "", icon: "" },
        accountBased: { title: "Same address for life", tooltip: "", icon: "" },
        utxo: {
          title: "New address per transaction is the convention",
          tooltip: "",
          icon: "",
        },
        id: 3,
      },
      {
        feature: { title: "Parallel validation", tooltip: "", icon: "" },
        accountBased: {
          title: "Hard (every tx touches shared state)",
          tooltip: "",
          icon: "",
        },
        utxo: {
          title: "Easy (independent outputs don't conflict)",
          tooltip: "",
          icon: "",
        },
        id: 4,
      },
      {
        feature: { title: "Replay protection", tooltip: "", icon: "" },
        accountBased: {
          title: "Nonces per account",
          tooltip: "",
          icon: "",
        },
        utxo: {
          title: "Each output can only be referenced once",
          tooltip: "",
          icon: "",
        },
        id: 5,
      },
    ],
  }}
/>

[Litecoin](https://www.alchemy.com/rpc/litecoin), [Dogecoin](https://www.alchemy.com/rpc/dogecoin) e [Bitcoin Cash](https://www.alchemy.com/rpc/bitcoin-cash) herdam todos esse modelo. Eles forkaram o código-base do Bitcoin, ajustaram tempos de bloco e alguns parâmetros, e lançaram. O mesmo modelo mental e a mesma classe de infraestrutura atendem às quatro chains.

## Por que isso importa para os devs?

As diferenças não são filosóficas. Elas aparecem em pontos concretos onde a maioria dos times subestima o trabalho envolvido.

### Você não consegue pedir a um node o saldo de um endereço

O Bitcoin Core armazena blocos e transações. Ele não mantém um índice de endereço para transação. Os desenvolvedores do Core têm [resistido explicitamente](https://bitcoincore.reviews/14053) a adicionar um, porque, como colocou um mantenedor, "índices de endereço são inerentemente inescaláveis, já que crescem linearmente com o tamanho da blockchain." A posição deles é que a indexação de endereços pertence a serviços externos. Então todo app Bitcoin que precisa exibir um saldo, listar as transações de um usuário ou monitorar pagamentos recebidos depende de um indexador: um serviço que observa a chain e mantém um banco de dados consultável de endereços, transações e UTXOs. A única questão é quem opera esse indexador. A maioria dos times usa [um provedor de node blockchain hospedado](https://www.alchemy.com/overviews/blockchain-node-providers) em vez de montar sua própria infraestrutura.

### Carteiras não têm um endereço, têm milhares

Reutilizar um endereço vincula todas as entradas e saídas sob uma única identidade. Por isso a convenção é um endereço por recebimento, derivado de uma única seed por meio de chaves determinísticas hierárquicas (HD) definidas na [BIP 32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki). Uma exchange que mantém uma única xpub corporativa (uma chave pública estendida capaz de derivar uma árvore de endereços de recebimento a partir de uma única raiz, sem expor as chaves privadas que gastam esses fundos) pode mostrar a cada cliente um endereço de depósito recém-derivado. Uma carteira auto-custodiada pode recalcular todas as UTXOs que controla a partir de uma seed de 12 palavras. A pegadinha: um indexador precisa derivar endereços sequencialmente e monitorar todos eles, com o [gap limit de 20 endereços da BIP 44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) determinando quando parar. Pule 20 endereços e o indexador acha que terminou, o que é uma causa real de tickets do tipo "para onde foi meu dinheiro".

### Taxas são pagas por tamanho, não por valor

A unidade é satoshis por byte virtual. Uma carteira que consolida 100 UTXOs pequenas em uma única saída paga uma taxa proporcional a essas 100 entradas, independentemente do valor movimentado. A estimativa depende do mempool e varia minuto a minuto. Transações travadas são aceleradas com [replace-by-fee (BIP 125)](https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki) ou [child-pays-for-parent](https://bitcoinops.org/en/topics/cpfp/). Nada disso é conceitualmente difícil. Tudo isso é código de produção real que você teria de escrever de qualquer jeito.

### A finalidade é probabilística

Um bloco Bitcoin pode ser reorganizado para fora da chain por um bloco concorrente. Quando isso acontece, toda transação nos blocos descartados volta para o mempool. Saídas que estavam "gastas" voltam a ser não gastas. Seu indexador precisa desfazer isso de forma limpa, senão entrega ao seu app o saldo errado. Apps se protegem com limiares de confirmação: 1 confirmação para pagamentos de baixo valor, 6 como padrão histórico, 30+ para depósitos grandes em exchanges. Litecoin e Dogecoin têm tempos de bloco mais curtos (2,5 minutos para LTC, 1 minuto para DOGE), então o mesmo número de confirmações compra menos segurança em tempo real.

### Os formatos de endereço continuam mudando

O Bitcoin já lançou três atualizações de formato de endereço sem aposentar as anteriores: P2SH em 2012, SegWit em 2017 e Taproot em 2021. Quatro famílias coexistem na rede hoje: legacy P2PKH (`1...`), SegWit aninhado P2SH (`3...`), SegWit nativo P2WPKH (`bc1q...`) e Taproot P2TR (`bc1p...`). Uma transação P2WPKH com 1 entrada e 2 saídas tem aproximadamente [141 bytes virtuais](https://learnmeabitcoin.com/technical/transaction/size/) contra ~226 vB para a transação P2PKH equivalente, então a escolha do formato tem consequências diretas nas taxas. Carteiras e exploradores em produção precisam suportar os quatro.

Todo time que constrói sobre Bitcoin gasta boa parte do primeiro trimestre nesta lista. A maior parte disso não tem nada a ver com o produto que estão desenvolvendo.

## Como a Alchemy dá suporte a chains UTXO?

Damos suporte a [Bitcoin](https://www.alchemy.com/rpc/bitcoin), [Litecoin](https://www.alchemy.com/rpc/litecoin), [Dogecoin](https://www.alchemy.com/rpc/dogecoin) e [Bitcoin Cash](https://www.alchemy.com/rpc/bitcoin-cash) na mesma plataforma que Ethereum, Solana e o [restante do diretório de chains](https://www.alchemy.com/rpc). Mesmas API keys. Mesmo dashboard. Mesmo modelo de medição. Mesmos webhooks. Todo recurso disponível em todos os planos.

O que já está disponível no lançamento:

- **Passthrough raw JSON-RPC** para full nodes rodando com `-txindex=1`, para todo método padrão do Bitcoin Core (`getblock`, `getrawtransaction`, `estimatesmartfee`, `sendrawtransaction` e os demais).
- **APIs REST indexadas** para saldos de endereço, consultas de UTXO, histórico de transações paginado, detalhes de transação enriquecidos e status de gasto. As consultas que o Bitcoin Core não consegue responder nativamente, respondidas em milissegundos.
- **Rastreamento de xpub e descriptor** nas quatro chains. Output descriptors especificam como derivar endereços a partir de uma chave; nós tratamos a derivação nas árvores BIP 44, 49, 84 e 86 e o gap limit padrão de 20 endereços. Consultas de saldo, UTXO e histórico rodam sobre todo o conjunto de endereços derivado, não apenas sobre o primeiro endereço enviado.
- **Assinaturas WebSocket** para transações confirmadas, atividade de endereço, novos blocos e notificações de reorg, com limiares de confirmação configuráveis por stream.
- **Operações de transação** além do broadcast puro: estimativa de taxa em níveis rápido, médio e lento (com base no mempool), construção de transação não assinada, compilação, verificação e broadcast.
- **Wrappers de compatibilidade** para métodos no estilo Blockbook `bb_*` (o formato da QuickNode) e no estilo Blockdaemon `bd_*`, para que integrações existentes migrem apenas com mudanças na chamada HTTP.

No código, isso se traduz assim. Raw JSON-RPC para qualquer coisa que um node suporte:

<CodeSnippet
  language="bash"
  code={`curl -X POST https://bitcoin-mainnet.g.alchemy.com/v2/YOUR_API_KEY \\
  -H "Content-Type: application/json" \\
  -d '{
    "jsonrpc": "1.0",
    "id": "1",
    "method": "estimatesmartfee",
    "params": [6]
  }'`}
/>

REST para as consultas que o Bitcoin Core não consegue responder nativamente:

<CodeSnippet
  language="bash"
  code={`# Address balance, tx history, and UTXOs
curl https://bitcoin-mainnet.g.alchemy.com/v2/YOUR_API_KEY/addresses/bc1q.../balance

# Watch an entire xpub or descriptor (no gap-limit logic to maintain)

curl https://bitcoin-mainnet.g.alchemy.com/v2/YOUR_API_KEY/accounts/zpub.../utxos`}
/>

Conexões persistentes para atualizações ao vivo:

<CodeSnippet
  language="javascript"
  code={`const ws = new WebSocket("wss://bitcoin-mainnet.g.alchemy.com/v2/YOUR_API_KEY");
ws.send(JSON.stringify({
  method: "subscribeAddressActivity",
  params: { address: "bc1q...", confirmations: 6 },
}));`}
/>

A referência completa, incluindo todo endpoint e a lista de métodos dos wrappers de migração, está em nosso [quickstart da API Bitcoin](https://www.alchemy.com/docs/reference/bitcoin-api-quickstart) e na [referência JSON-RPC do Bitcoin](https://www.alchemy.com/docs/bitcoin/bitcoin-api-overview). Para uma leitura mais aprofundada sobre como o estado UTXO difere do estado de conta, nossa [documentação sobre o modelo UTXO vs. conta](https://www.alchemy.com/docs/utxo-vs-account-models) cobre a mecânica no nível de protocolo.

## Como isso é diferente do que já existe?

Se você já constrói sobre Bitcoin hoje, provavelmente usa um de três provedores, cada um com lacunas:

<EmbeddedTable
  table={{
    columns: [
      {
        key: "capability",
        width: 260,
        title: "Capability",
        dataType: "object",
      },
      { key: "alchemy", width: 190, title: "Alchemy", dataType: "object" },
      { key: "quicknode", width: 230, title: "QuickNode", dataType: "object" },
      {
        key: "blockdaemon",
        width: 210,
        title: "Blockdaemon",
        dataType: "object",
      },
      {
        key: "blockcypher",
        width: 210,
        title: "Blockcypher",
        dataType: "object",
      },
    ],
    data: [
      {
        capability: {
          title: "BTC indexed reads (balance, UTXO, tx history)",
          tooltip: "",
          icon: "",
        },
        alchemy: { title: "Yes", tooltip: "", icon: "" },
        quicknode: { title: "Yes", tooltip: "", icon: "" },
        blockdaemon: { title: "Yes", tooltip: "", icon: "" },
        blockcypher: { title: "Yes", tooltip: "", icon: "" },
        id: 0,
      },
      {
        capability: { title: "LTC + BCH indexed reads", tooltip: "", icon: "" },
        alchemy: { title: "Yes", tooltip: "", icon: "" },
        quicknode: { title: "Yes", tooltip: "", icon: "" },
        blockdaemon: { title: "Partial", tooltip: "", icon: "" },
        blockcypher: { title: "Yes", tooltip: "", icon: "" },
        id: 1,
      },
      {
        capability: { title: "DOGE indexed reads", tooltip: "", icon: "" },
        alchemy: { title: "Yes", tooltip: "", icon: "" },
        quicknode: { title: "Blockbook add-on (paid)", tooltip: "", icon: "" },
        blockdaemon: { title: "Partial", tooltip: "", icon: "" },
        blockcypher: { title: "Yes", tooltip: "", icon: "" },
        id: 2,
      },
      {
        capability: {
          title: "xpub / descriptor tracking",
          tooltip: "",
          icon: "",
        },
        alchemy: { title: "All four chains", tooltip: "", icon: "" },
        quicknode: {
          title: "BTC, LTC, BCH (DOGE via paid add-on)",
          tooltip: "",
          icon: "",
        },
        blockdaemon: { title: "Not documented", tooltip: "", icon: "" },
        blockcypher: {
          title: "HD Wallets (BTC, LTC, DOGE)",
          tooltip: "",
          icon: "",
        },
        id: 3,
      },
      {
        capability: { title: "WebSocket subscriptions", tooltip: "", icon: "" },
        alchemy: { title: "Yes", tooltip: "", icon: "" },
        quicknode: { title: "Yes", tooltip: "", icon: "" },
        blockdaemon: { title: "Limited", tooltip: "", icon: "" },
        blockcypher: { title: "Yes", tooltip: "", icon: "" },
        id: 4,
      },
      {
        capability: {
          title:
            "Transaction operations (construct, compile, verify, broadcast)",
          tooltip: "",
          icon: "",
        },
        alchemy: { title: "BTC, LTC, BCH", tooltip: "", icon: "" },
        quicknode: {
          title: "Broadcast + decode (raw RPC)",
          tooltip: "",
          icon: "",
        },
        blockdaemon: {
          title: "Full lifecycle (Wallet Transact)",
          tooltip: "",
          icon: "",
        },
        blockcypher: { title: "Yes", tooltip: "", icon: "" },
        id: 5,
      },
      {
        capability: {
          title:
            "Migration-compat wrappers (<code>bb_*</code>, <code>bd_*</code>)",
          tooltip: "",
          icon: "",
        },
        alchemy: { title: "Yes", tooltip: "", icon: "" },
        quicknode: { title: "N/A", tooltip: "", icon: "" },
        blockdaemon: { title: "N/A", tooltip: "", icon: "" },
        blockcypher: { title: "N/A", tooltip: "", icon: "" },
        id: 6,
      },
      {
        capability: {
          title: "Unified dashboard with EVM and Solana",
          tooltip: "",
          icon: "",
        },
        alchemy: { title: "Yes", tooltip: "", icon: "" },
        quicknode: { title: "No", tooltip: "", icon: "" },
        blockdaemon: { title: "No", tooltip: "", icon: "" },
        blockcypher: { title: "No", tooltip: "", icon: "" },
        id: 7,
      },
    ],
  }}
/>

Três coisas mudam para quem constrói.

### Um fornecedor, uma integração, uma fatura

Se você já usa Alchemy para [Ethereum](https://www.alchemy.com/ethereum), [Base](https://www.alchemy.com/base), [Polygon](https://www.alchemy.com/polygon) ou [Solana](https://www.alchemy.com/solana), adicionar Bitcoin não é um projeto de procurement. É uma chain que você liga. Mesmas API keys, mesma medição, mesmo modelo de entrega de webhooks, mesmo dashboard. As configurações multi-fornecedor que foram padrão em chains UTXO por anos se reduzem a uma única integração.

### As quatro chains, um único conjunto de recursos

Todo provedor existente cobre alguma combinação dessas chains e recursos, mas a cobertura é desigual. A QuickNode oferece leituras indexadas Blockbook e rastreamento de xpub em BTC, LTC e BCH; o Blockbook para Dogecoin é um add-on pago separado. A Blockcypher oferece HD Wallets em BTC, LTC e DOGE via `wallets/hd`. A Wallet Transact API da Blockdaemon cobre construção de transação nas quatro chains. Os times acabam combinando cada caso de uso ao provedor que suporta a funcionalidade e a chain específicas de que precisam, e depois costurando o resto em código customizado. Nós entregamos rastreamento de xpub, leituras indexadas, operações de transação e assinaturas WebSocket em Bitcoin, Litecoin, Dogecoin e Bitcoin Cash em um único pacote, sem add-ons por chain nem divisão de recursos.

### Migrações são mudanças de chamada HTTP, não rearquiteturas

Wrappers de compatibilidade para métodos no estilo Blockbook `bb_*` (o formato da QuickNode) e métodos no estilo Blockdaemon `bd_*` significam que suas integrações existentes mantêm o formato da requisição. Você muda o host. Não reescreve o ponto de chamada. Para times na superfície REST legada da Blockcypher, o formato da requisição muda sim (usamos REST GET com um formato diferente), mas o modelo de dados subjacente é o mesmo. Disponibilizamos um [guia consolidado de migração UTXO](https://www.alchemy.com/docs/bitcoin/utxo-migration-guide) no lançamento, com seções para Blockcypher, QuickNode Blockbook e Blockdaemon.

O benefício para o dev, em uma linha: menos infraestrutura para juntar, menos provedores para gerenciar e um caminho mais rápido de "precisamos de suporte a Bitcoin" até colocar isso em produção.

## Construa sobre Bitcoin com a Alchemy

Bitcoin, Litecoin, Dogecoin e Bitcoin Cash estão disponíveis na Alchemy ao lado de Ethereum, Solana e mais de 100 outras chains. Desenvolvedores PAYG adicionam chains pelo dashboard no primeiro dia. Sem contratos, sem lista de espera, sem compromisso mínimo. Clientes Enterprise recebem as chains UTXO dentro da alocação de compute units já existente. Leia [o anúncio de lançamento do suporte a Bitcoin](https://www.alchemy.com/blog/alchemy-now-supports-bitcoin) para o detalhamento completo dos recursos.

Crie um endpoint no [dashboard da Alchemy](https://dashboard.alchemy.com/) e comece a consultar, ou [fale com o time de vendas](https://www.alchemy.com/contact-sales) para suporte à integração enterprise e preços personalizados.
