Formulário de contato

Nome

E-mail *

Mensagem *

Imagem

Dividindo Intervalos de Endereços Bitcoin com Python

Dividindo Intervalos de Endereços Bitcoin com Python

Publicado por em


@CanalQb no YouTube


@CanalQb

Dividindo Intervalos de Endereços Bitcoin com Python


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



Como Dividir Grandes Intervalos de Endereços Bitcoin com Python

Quando trabalhamos com grandes intervalos de chaves privadas no contexto de Bitcoin, é essencial adotar técnicas eficientes para dividir esse espaço de busca. O script abaixo demonstra como dividir um intervalo de endereços potenciais em blocos menores, salvando os resultados em um arquivo CSV e utilizando psutil para monitoramento de memória.

Objetivo do Script

O código em Python tem como objetivo principal calcular todos os endereços possíveis entre um intervalo de valores (representados como inteiros), dividindo este intervalo em blocos gerenciáveis e exportando os dados para análise futura. Esta técnica é útil em estudos criptográficos, blockchain forensics, e geração de carteiras Bitcoin para testes e auditorias.

Bibliotecas Utilizadas

  • psutil: monitora a memória disponível do sistema.
  • gc: libera memória entre blocos, aumentando a eficiência.
  • csv: grava os blocos calculados em um arquivo .csv.

Funções Principais do Script

1. Calcular Endereços Possíveis

Calcula o total de valores possíveis dentro de um intervalo numérico:

def calcular_enderecos_possiveis(inicio, fim):
    num_enderecos = fim - inicio + 1
    print(f"Existem {num_enderecos} endereços possíveis com 69 bits de entropia.")
    return num_enderecos

2. Dividir o Intervalo em Blocos

Divide os endereços entre início e fim em blocos com tamanho definido (ex: 1 quatrilhão):

def dividir_blocos(inicio, fim, tamanho_bloco):
    blocos = []
    num_enderecos = fim - inicio + 1
    num_blocos = num_enderecos // tamanho_bloco
    if num_enderecos % tamanho_bloco != 0:
        num_blocos += 1
    for i in range(num_blocos):
        bloco_inicio = inicio + i * tamanho_bloco
        bloco_fim = min(bloco_inicio + tamanho_bloco - 1, fim)
        blocos.append((bloco_inicio, bloco_fim))
    return blocos

3. Impressão e Liberação de Memória

Após imprimir os blocos gerados, a função chama gc.collect() para liberar memória:

def imprimir_blocos(blocos):
    for i, bloco in enumerate(blocos):
        print(f"Bloco {i+1}: Endereços de {bloco[0]} a {bloco[1]}")
        gc.collect()

4. Exportar para CSV

O script exporta todos os blocos para um arquivo chamado enderecos_blocos.csv:

def salvar_em_csv(blocos, arquivo_csv):
    with open(arquivo_csv, mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(["Bloco", "Inicio", "Fim"])
        for i, bloco in enumerate(blocos):
            writer.writerow([i+1, bloco[0], bloco[1]])

Verificação de Memória RAM

Antes de iniciar o processo, o script exibe a memória disponível usando o módulo psutil:

memoria_disponivel = psutil.virtual_memory().available
memoria_disponivel_mb = memoria_disponivel / (1024 ** 2)
print(f"Memória disponível: {memoria_disponivel_mb:.2f} MB")

Configuração Inicial

O intervalo utilizado corresponde a um espaço de 69 bits:

  • Início: 295147905179352825856
  • Fim: 590295810358705651711
  • Tamanho de bloco: 1 quatrilhão (10¹⁵)

Conclusão

Esse tipo de abordagem é ideal para dividir tarefas de alto custo computacional em partes menores, especialmente em projetos relacionados a blockchain ou pesquisa de chaves. O script ainda demonstra boas práticas como uso de garbage collection e monitoramento de memória, evitando sobrecarga do sistema.

Atenção: Este conteúdo é educativo. O uso de técnicas de geração ou análise de chaves deve ser feito com total compreensão dos riscos. Jamais armazene ativos reais em chaves geradas para fins de teste. O julgamento individual é essencial antes de tomar qualquer decisão envolvendo ativos digitais.

Referências


import psutil
import gc
import csv

# Função que calcula os endereços possíveis entre o intervalo de início e fim
def calcular_enderecos_possiveis(inicio, fim):
    """
    Calcula o número total de endereços possíveis entre o intervalo dado (início e fim).
    """
    num_enderecos = fim - inicio + 1
    print(f"Existem {num_enderecos} endereços possíveis com 69 bits de entropia.")
    return num_enderecos

# Função que divide os endereços possíveis entre o intervalo de início e fim em blocos de tamanho especificado
def dividir_blocos(inicio, fim, tamanho_bloco):
    """
    Divide o intervalo entre 'inicio' e 'fim' em blocos de tamanho especificado.
    """
    num_enderecos = fim - inicio + 1
    blocos = []
    num_blocos = num_enderecos // tamanho_bloco
    if num_enderecos % tamanho_bloco != 0:
        num_blocos += 1  # Se houver sobra, adiciona um bloco extra

    for i in range(num_blocos): 
        bloco_inicio = inicio + i * tamanho_bloco
        bloco_fim = bloco_inicio + tamanho_bloco - 1
        if bloco_fim > fim:
            bloco_fim = fim
        blocos.append((bloco_inicio, bloco_fim))
    
    return blocos

# Função para imprimir os blocos e liberar memória após cada bloco
def imprimir_blocos(blocos):
    """
    Imprime os blocos de endereços e libera a memória após cada bloco.
    """
    for i, bloco in enumerate(blocos):
        bloco_inicio, bloco_fim = bloco
        print(f"Bloco {i+1}: Endereços de {bloco_inicio} a {bloco_fim}")
        gc.collect()  # Libera memória

# Função para salvar os blocos em um arquivo CSV
def salvar_em_csv(blocos, arquivo_csv):
    """
    Salva os blocos de endereços no arquivo CSV.
    """
    with open(arquivo_csv, mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(["Bloco", "Inicio", "Fim"])  # Cabeçalho
        for i, bloco in enumerate(blocos):
            writer.writerow([i+1, bloco[0], bloco[1]])
    print(f"\n[+] Blocos salvos no arquivo {arquivo_csv}")

# Função principal
def main():
    # Define o intervalo (como decimal)
    inicio = int(295147905179352825856)
    fim = int(590295810358705651711)

    # Define o tamanho do bloco: 1 quatrilhão
    tamanho_bloco = 10**15

    # Verifica a quantidade de memória disponível
    memoria_disponivel = psutil.virtual_memory().available
    memoria_disponivel_mb = memoria_disponivel / (1024 ** 2)
    
    print(f"\n[+] Estimativa de memória disponível: {memoria_disponivel_mb:.2f} MB")
    print(f"[+] Dividindo os endereços entre {inicio} e {fim} em blocos de {tamanho_bloco} endereços.")

    # Calcula o número total de endereços
    calcular_enderecos_possiveis(inicio, fim)

    # Divide os endereços em blocos
    blocos = dividir_blocos(inicio, fim, tamanho_bloco)

    # Imprime os blocos
    imprimir_blocos(blocos)

    # Salva os blocos em um arquivo CSV
    salvar_em_csv(blocos, "enderecos_blocos.csv")

# Corrigido o nome da verificação do main
if __name__ == "__main__":
    main()

Marcadores: Airdrop Blogger Cripto IA Jogos Python Script Sistemas Tutorial

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

Comentários