Formulário de contato

Nome

E-mail *

Mensagem *

Imagem

Como Criar e Enviar Transação Bitcoin com Python Usando bitcoinlib

Como Criar e Enviar Transação Bitcoin com Python Usando bitcoinlib

Publicado por em


@CanalQb no YouTube


@CanalQb

Como Criar e Enviar Transação Bitcoin com Python Usando bitcoinlib


Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.



Como Criar e Enviar Transação Bitcoin com Python Usando bitcoinlib

Este tutorial detalha como criar e preparar uma transação Bitcoin utilizando a biblioteca bitcoinlib em Python. Através deste exemplo prático, você aprenderá a consultar UTXOs, calcular taxas dinâmicas com base no último bloco minerado, construir a transação, calcular o troco e ajustar a taxa para garantir que a transação seja aceita pela rede Bitcoin.

Bibliotecas e dependências

Antes de começar, certifique-se de ter instalado as bibliotecas necessárias:

pip install bitcoinlib requests

Parâmetros principais do script

  • WIF: Chave privada no formato Wallet Import Format do remetente.
  • DESTINO: Endereço Bitcoin que receberá os fundos.
  • VALOR_ENVIO: Valor a ser enviado em BTC. Se zero, o script envia todo o saldo disponível descontada a taxa.

Obter a taxa média do último bloco minerado

Para definir uma taxa justa e atualizada para a transação, o script consulta a API Blockchain.info para obter dados do bloco mais recente. Com isso, calcula a média da taxa paga por byte nas transações desse bloco.

Explicação do fluxo do script

  1. Consulta dos UTXOs: O script usa a API da Blockchain.info para obter os Unspent Transaction Outputs (UTXOs) do endereço de origem, que representam os fundos disponíveis para gastar.
  2. Criação da transação: Monta as entradas (inputs) baseadas nos UTXOs obtidos e adiciona a saída (output) para o endereço de destino.
  3. Cálculo do troco: Caso haja saldo restante, o valor do troco é enviado de volta para o endereço de origem.
  4. Ajuste da taxa: A taxa é recalculada dinamicamente com base no tamanho final da transação, garantindo que a rede aceite a transação rapidamente.
  5. Exibição da transação não assinada: Para fins didáticos, o script imprime a estrutura da transação, pronta para ser assinada e enviada à rede.

Exemplo completo do código em Python

from bitcoinlib.keys import Key
from bitcoinlib.transactions import Transaction
from decimal import Decimal
import requests
import json

# 🔐 Parâmetros do usuário
WIF = "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi4SWWqNAWKRpf1YVnSL5mY"  # Chave privada WIF do remetente
DESTINO = "15ELiLBwTcuNnfyCmSD88gWNgprsPTLPke"  # Endereço do destinatário
VALOR_ENVIO = Decimal("0")  # Valor em BTC; zero para enviar todo saldo disponível

def obter_taxa_media_bloco():
    url = 'https://blockchain.info/latestblock'
    response = requests.get(url)
    if response.status_code == 200:
        last_block = response.json()
        block_hash = last_block['hash']
        url_block = f'https://blockchain.info/rawblock/{block_hash}'
        response_block = requests.get(url_block)
        if response_block.status_code == 200:
            block_data = response_block.json()
            total_fee = sum(tx['fee'] for tx in block_data['tx'])
            total_size = sum(tx['size'] for tx in block_data['tx'])
            return total_fee / total_size if total_size > 0 else 0
    return 0

# Obter taxa média atual do bloco para cálculo da fee
taxa_media = obter_taxa_media_bloco()
print(f"Taxa média do bloco atual: {taxa_media:.2f} satoshis/byte")

# Valor estimado da taxa, considerando 250 bytes como tamanho inicial
FEE = int(taxa_media * 250)

# Conversão do valor de envio para satoshis
valor_satoshis = int(VALOR_ENVIO * 10**8)

# Criar chave a partir do WIF
key = Key(WIF)

# Endereço de origem derivado da chave privada
endereco_origem = key.address()
print(f"Endereço de origem: {endereco_origem}")

# Consulta UTXOs via API Blockchain.info
url = f'https://blockchain.info/unspent?active={endereco_origem}'
response = requests.get(url)

if response.status_code == 200:
    utxos = response.json().get('unspent_outputs', [])

    if not utxos:
        print(f"Nenhum UTXO disponível no endereço {endereco_origem}.")
        exit()

    tx = Transaction()
    total_value = 0

    for utxo in utxos:
        tx.add_input(utxo['tx_hash'], utxo['tx_output_n'], utxo['value'])
        total_value += utxo['value']

    if total_value == 0:
        print("Saldo zero, não há o que enviar.")
        exit()

    # Se VALOR_ENVIO for 0, envia todo o saldo descontada a taxa
    if valor_satoshis == 0:
        valor_satoshis = total_value - FEE

    tx.add_output(valor_satoshis, DESTINO)

    valor_troco = total_value - valor_satoshis - FEE
    if valor_troco > 0:
        tx.add_output(valor_troco, endereco_origem)

    tamanho_transacao = tx.size
    print(f"Tamanho da transação: {tamanho_transacao} bytes")

    FEE = int(taxa_media * tamanho_transacao)
    print(f"Taxa ajustada: {FEE} satoshis")

    print("Transação não assinada:")
    print(json.dumps(tx.as_dict(), indent=4))

else:
    print(f"Erro ao consultar UTXOs: {response.status_code} - {response.text}")

Considerações finais e responsabilidade

Importante: Sempre analise cuidadosamente qualquer operação com criptomoedas. Utilize chaves e fundos que você controla para testes e nunca compartilhe sua chave privada (WIF) com terceiros. Este exemplo é para fins educativos e não deve ser utilizado para transações financeiras reais sem as devidas precauções.

Links oficiais

Marcadores: Airdrop Blogger Cripto IA Jogos Mineração Python Script Sistemas Tutorial

© junho 30, 2025 CanalQb — Python, Scripts, Automação, Airdrops e Criptomoedas | Web3 e Tech na Prática

Comentários