7 minutos de leitura
Visão geral
O Bitcoin é o precursor da tecnologia blockchain. Com o Bitcoin, iniciou-se uma nova era de blockchain e descentralização. O Bitcoin permitiu que todos pudessem efetuar as transações ponto a ponto de que hoje desfrutam; este guia irá ensinar-lhe como obter essas transações a partir do mempool do Bitcoin.
Pré-requisitos:
- Terminal/cmd (CLI).
- Nó Bitcoin.
- Paixão pela descentralização.
O que é o Mempool do Bitcoin?
As transações enviadas na rede Bitcoin não são adicionadas diretamente à blockchain. Todas as transações válidas têm de passar por uma área de espera antes de serem aceites num bloco. Esta área de espera é conhecida como mempool. Se o tamanho do mempool for grande, isso indica um tráfego elevado na rede, o que resulta em tempos de confirmação das transações mais longos e em taxas de transação mais elevadas.
Nota: Na prática habitual, «Bitcoin» refere-se ao protocolo/rede, enquanto «bitcoin» ou «BTC» se refere à moeda.
A taxa de transação do Bitcoin é medida pelo número de satoshis pagos por byte da transação. O satoshi é a menor unidade da moeda nativa bitcoin da rede Bitcoin, em que 1 bitcoin = 100 milhões de satoshis. Os mineradores dão prioridade às transações no mempool com taxas de transação elevadas. No entanto, desde a atualização SegWit, algumas coisas mudaram no que diz respeito às transações de Bitcoin. Esta atualização introduziu um novo tipo de transação, conhecida como transação SegWit, com o objetivo de aumentar o número de transações por bloco de Bitcoin. Resolveu duas questões: 1. Aumentou o número de transações de Bitcoin por segundo; 2. Resolveu o problema da maleabilidade das transações.
Antes do SegWit, os blocos ou as transações eram medidos em bytes, e cada bloco estava limitado a 1 MB (megabyte) ou 1 milhão de bytes. Após o SegWit, as transações e os blocos são medidos em unidades de peso; estas unidades de peso são utilizadas para medir os dados do Bitcoin e comparar transações.
O próximo conceito a abordar é o vByte. Um vByte equivale a quatro unidades de peso. Um Byte de dados ocupa 1 vByte (4 unidades de peso) numa transação tradicional. Por outro lado, numa transação SegWit, um Byte de dados ocupa 1/4 de vByte (1 unidade de peso). Esta redução permite que os blocos sejam preenchidos com 4 vezes mais transações. O tamanho atual de um bloco de Bitcoin está limitado a 1 vMegabyte / 1 milhão de vByte / 4 milhões de unidades de peso. A maioria das carteiras calcula as taxas de transação em termos de satoshis/vByte, que são pagas por cada vByte de dados utilizado.
Casos de utilização da análise do mempool do Bitcoin:
A análise do mempool ajuda-nos a compreender o congestionamento e o tráfego na rede, o que, em última análise, nos ajuda a calcular as taxas de transação.
Vamos agora aceder ao mempool e obter alguns dados sobre as transações a partir desse conjunto.
Configurar um ponto de acesso Quicknode para Bitcoin
Para o que nos propomos a fazer hoje, precisamos de um nó Bitcoin para aceder aos dados da blockchain. Lançar o nosso próprio nó aqui seria muito dispendioso e demorado, dada a grande quantidade de dados existentes na Bitcoin. Em vez disso, vamos criar uma conta gratuita no Quicknode aqui, onde poderemos criar facilmente um ponto de acesso Bitcoin.

Copie e guarde o URL HTTPS do seu nó, pois irá precisar dele mais tarde.
Como aceder ao Mempool do Bitcoin/Como obter as transações pendentes do Bitcoin
Vamos utilizar os métodos RPC do Bitcoin para obter dados do mempool — mais concretamente, o método `getrawmempool `. Abra o terminal/cmd e copie e cole o seguinte:
curl --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrawmempool", "params": [true]}' -H 'content-type: application/json' <QUICKNODE_BITCOIN_URL>
Substitua QUICKNODE_BITCOIN_URL pela URL HTTPS do seu nó Bitcoin, que obtivemos no passo anterior. Acima encontra-se um pedido cURL para o nosso nó, juntamente com o método getrawmempool.
O resultado deverá ser semelhante a este.

Vamos agora analisar o corpo da resposta. O método acima apresenta uma lista das transações pendentes que se encontram atualmente no mempool. Vamos selecionar uma única transação e analisar cada um dos seus campos.
{
"result": {
"2d1228abf06836b1173936061fec0384e82e3b684d7950a27f06a06f587400d3": {
"fees": {
"base": 0.00111999,
"modified": 0.00111999,
"ancestor": 0.00111999,
"descendant": 0.00111999
},
"size": 90826,
"fee": 0.00111999,
"modifiedfee": 0.00111999,
"time": 1629052793,
"height": 695936,
"descendantcount": 1,
"descendantsize": 90826,
"descendantfees": 111999,
"ancestorcount": 1,
"ancestorsize": 90826,
"ancestorfees": 111999,
"wtxid": "b3b49bb3dcae483d579710a2e1f9c7ed585ab35e2a8cb941ff8cb27ea8adec20",
"depends": [],
"spentby": [],
"bip125-replaceable": false
}
}
}
Explicação da saída JSON acima:
Linha 3: Este é o identificador da transação, através do qual uma transação na blockchain é identificada.
Linhas 4-9: Discriminação das comissões de transação.
Linha 10: Tamanho da transação, de acordo com o BIP 141.
Linha 11: Taxa de transação em BTC (bitcoin).
Linha 12: Taxa de transação com diferenças de taxa utilizadas para determinar a prioridade de mineração.
Linha 13: Hora em que a transação foi introduzida no pool, em segundos, a contar de 1 de janeiro de 1970 (GMT).
Linha 14: Altura da blockchain (bloco mais recente) no momento em que a transação entrou na piscina.
Linha 15: Número de transações descendentes no mempool, incluindo esta.
Linha 16: Tamanho de todas as transações descendentes no mempool.
Linha 17: Taxas alteradas de todas as transações descendentes no mempool.
Linha 18: Número de transações anteriores no mempool, incluindo esta.
Linha 19: Tamanho de todas as transações ancestrais no mempool.
Linha 20: Taxas alteradas de todas as transações anteriores no mempool.
Linha 21: ID da transação, juntamente com os dados da testemunha.
Linha 22: Se uma transação não confirmada for utilizada como entrada para esta transação, deve ser introduzida aqui.
Linha 23: Se outra transação não confirmada estiver a utilizar dados desta transação, tal deve ser indicado aqui.
Linha 24: Um valor booleano que indica se a transação pode ser substituída ao abrigo do BIP 125.
Agora, para obter os dados reais da transação, teremos de utilizar outro método, o `getrawtransaction`, que irá devolver informações sobre uma transação específica. Copie e cole o seguinte no seu terminal/cmd:
curl --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrawtransaction", "params": ["2d1228abf06836b1173936061fec0384e82e3b684d7950a27f06a06f587400d3", true]}' -H 'content-type: application/json' <QUICKNODE_BITCOIN_URL>
Substitua QUICKNODE_BITCOIN_URL pela URL HTTPS do seu nó Bitcoin, que obtivemos no passo anterior. Acima encontra-se um pedido cURL para o nosso nó, juntamente com o método getrawtransaction. Para o obter, vamos enviar um ping ao nosso nó para resolver o método. Temos de passar dois parâmetros para este método. O primeiro é o ID da transação a ser consultada. O segundo é um valor booleano que, se definido como «false», devolve uma cadeia de caracteres; caso contrário, devolve um objeto JSON.
Definimos o segundo parâmetro como «true», pelo que o resultado deverá ser semelhante a este.

Explicação do objeto de transação aqui colada:
Linha 3: ID da transação através da qual uma transação na blockchain é identificada (tal como fornecido).
Linha 4: Hash da transação, derivado do txid das transações testemunho.
Linha 5: Tamanho da transação, de acordo com o BIP 141.
Linha 6: Tamanho virtual da transação, que corresponde ao tamanho das transações de testemunha.
Linha 7: O número da versão da transação, atualmente 1 ou 2. Se for 2, significa que se aplica o BIP 68.
Linha 8: O tempo de bloqueio é especificado como um número de bloco. Se for indicado um tempo de bloqueio, essa transação só poderá ser adicionada a um bloco se o bloco correspondente ao tempo de bloqueio já tiver sido ultrapassado. Por exemplo, se o tempo de bloqueio for indicado como 30, os mineradores só poderão incluir a transação depois de o bloco número 30 ter sido minerado.
Linhas 9-20: O Vin apresenta a lista de transações no mempool que esta transação específica está a utilizar como entrada.
Linhas 21-33: O Vout apresenta a lista de transações no mempool utilizando esta transação específica como entrada.
Linha 34: Hash do bloco; aqui aparece como nulo, uma vez que a transação ainda não foi confirmada.
Linha 35: Número de confirmações que a transação já recebeu.
Linha 36: Hora em que a transação foi introduzida no pool, em segundos, desde 1 de janeiro de 1970 (GMT).
Linha 37: Hora em que foi minerado o bloco no qual a transação foi adicionada; neste caso, o valor é nulo, uma vez que a transação está pendente.
Linha 38: Dados serializados e codificados em hexadecimal para «txid»
Ao analisar os dados acima, podemos compreender todos os pormenores de uma transação de Bitcoin. As transações de Bitcoin são bastante complexas, mas o método `getrawtransaction` fornece as informações brutas da transação, que são fáceis de analisar e compreender.
Conclusão
Parabéns por teres aprendido tudo sobre o mempool do Bitcoin. Hoje, neste guia, aprendemos o que é o mempool do Bitcoin, para que serve, como aceder ao mempool do Bitcoin e como obter transações pendentes do Bitcoin, bem como os dados dessas transações.
Subscreve a nossa newsletter para receberes mais artigos e guias sobre o Ethereum. Se tiveres algum comentário, não hesites em contactar-nos através do Twitter. Podes sempre conversar connosco no nosso servidor da comunidade Discord, onde encontrarás alguns dos programadores mais fantásticos que alguma vez conhecerás :)
