Gerando e Exportando Intervalos de Chaves Bitcoin com Python
Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
Como Gerar e Dividir Intervalos de Chaves Bitcoin com Python
Em projetos relacionados à blockchain, especialmente no estudo de carteiras e chaves privadas de Bitcoin, é comum precisar calcular grandes volumes de endereços possíveis. Este artigo mostra como dividir de forma inteligente esses intervalos utilizando Python e bibliotecas como psutil e csv, de forma eficiente e segura.
O que este script faz?
O código abaixo realiza as seguintes tarefas:
- Calcula a quantidade de endereços possíveis dentro de um intervalo com 69 bits de entropia.
- Divide o intervalo total em blocos menores de endereços.
- Verifica a memória RAM disponível para operação.
- Imprime os blocos gerados e limpa a memória após cada bloco.
- Exporta os blocos para um arquivo
enderecos_blocos.csv.
Exemplo de aplicação
Suponha que você deseje explorar um espaço de endereços privados começando em 295147905179352825856 até 590295810358705651711. Isso representa aproximadamente 2⁶⁹ endereços possíveis. Com este script, você pode dividi-los em blocos de 1 quatrilhão para facilitar a análise paralela ou o armazenamento.
Pré-requisitos
Instale o módulo psutil caso ainda não esteja disponível:
pip install psutil
Código Python completo
import psutil
import gc
import csv
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
def dividir_blocos(inicio, fim, tamanho_bloco):
num_enderecos = fim - inicio + 1
blocos = []
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 = bloco_inicio + tamanho_bloco - 1
if bloco_fim > fim:
bloco_fim = fim
blocos.append((bloco_inicio, bloco_fim))
return blocos
def imprimir_blocos(blocos):
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()
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]])
print(f"\n[+] Blocos salvos no arquivo {arquivo_csv}")
def main():
inicio = int(295147905179352825856)
fim = int(590295810358705651711)
tamanho_bloco = 10**15
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.")
calcular_enderecos_possiveis(inicio, fim)
blocos = dividir_blocos(inicio, fim, tamanho_bloco)
imprimir_blocos(blocos)
salvar_em_csv(blocos, "enderecos_blocos.csv")
if __name__ == "__main__":
main()
Resultado esperado
Ao executar o código, o terminal exibirá os blocos gerados com seus intervalos e, ao final, criará um arquivo enderecos_blocos.csv contendo:
Bloco,Inicio,Fim
1,295147905179352825856,296147905179352825855
2,296147905179352825856,297147905179352825855
...
Importante
Este conteúdo tem fins educacionais e técnicos. Nenhum processo de geração ou varredura de chaves privadas deve ser utilizado para fins não autorizados. Analise cuidadosamente qualquer abordagem envolvendo criptografia e blockchain antes de aplicar recursos financeiros. Não invista tempo ou dinheiro sem entendimento técnico apropriado.

Comentários
Comente só assim vamos crescer juntos!