Как извлечь все адреса биткойнов из файлов блоков (revxxxxx.dat)

Я использую полный биткойн-узел, и у меня есть доступ ко всем файлам блоков (150 ГБ) (на моем сервере 32 ГБ ОЗУ и 400 ГБ SSD)

Есть идеи, как извлечь биткойн-адреса или hash160 из файлов блоков (revxxxxx.dat)?

Просто мне нужно найти все использованные адреса биткойнов на данный момент (найти дублированные адреса - нормально)

Это мой код для этого, но он очень медленный и бесполезный.

from bitcoin.rpc import RawProxy

for blockheight in xrange(0, 543624):
    # Create a connection to local Bitcoin Core node
    p = RawProxy()

    # Get the block hash of block with height blockheight
    blockhash = p.getblockhash(blockheight)

    # Retrieve the block by its hash
    block = p.getblock(blockhash)

    # Element tx contains the list of all transaction IDs in the block
    transactions = block['tx']

    for txid in transactions:
        # Retrieve the raw transaction by ID
        try:
            raw_tx = p.getrawtransaction(txid)
        except:
            with open("error.txt", "a") as f: 
                f.write(str(blockheight) + "," + str(txid) + ",\n" )
            continue

        # Decode the transaction
        decoded_tx = p.decoderawtransaction(raw_tx)

        # Iterate through each output in the transaction
        for output in decoded_tx['vout']:
            try:
                with open('hash160.txt', 'a') as file:
                    file.write(output['scriptPubKey']['asm'].split('OP_HASH160 ')[1].split(' ')[0] + "," + output['scriptPubKey']['addresses'][0] + ",\n")
            except: 
                with open("error.txt", "a") as f: 
                    f.write(str(blockheight) + "," + str(txid) + "," + str(decoded_tx) + ",\n" )

person John Kotkin    schedule 07.10.2018    source источник


Ответы (1)


Если вам нужен hash160s, очевидно, что анализатор блоков - отличный инструмент.

https://github.com/znort987/blockparser

Скорее всего, вам понадобится много места на диске и, что особенно важно, по крайней мере 128GB RAM, насколько я понимаю, или большой файл подкачки и много времени. Очевидно, у него неприятная привычка crashing/seg-faulting.

В util.cpp в строках 606 и 729, по-видимому, решение проблемы заключается в закомментировании // BN_CTX_init(ctx);

Изменить: извините, измените на BN_CTX_free(ctx); в строках 606 и 729.

git clone https://github.com/znort987/blockparser.git

Установите deps, и в каталоге запустите ./make, и все должно работать нормально.

Удачи! Не забудьте сначала проверить ./parser справку.

person JYG    schedule 09.11.2018
comment
Я тестировал этот анализатор блоков. Все это своего рода обертка на blockchain-cli. Он не может вернуть все хэши блоков. Блокируйте только хеши из вашего кошелька - person Dunski; 27.05.2021