Как декодировать очень большие (!) необработанные транзакции?

Я анализирую блокчейн, чтобы извлечь определенную информацию, необходимую для сценария.

Я занимаюсь разбором транзакций. Что я делаю:

getrawtransaction <tx>
decoderawtransaction <rawtx>

Это работает для большинства транзакций (> 99%), но некоторые из них очень велики, и биткойн-клиент не может их обработать. Интересно, что еще может с ними справиться, если не сам биткойн. Ошибка, которую я получаю в биткойне:

TX decode failed (code -22)

Это потому, что он не может принимать очень длинные аргументы. Мой рубиновый скрипт умирает с

Arguement list too long - (Errno::E2BIG)

Как расшифровать такие транзакции? Вот некоторые примеры:

2f50fdf7adbf58e91d738869948f4b191eb3cafa016c6df7e9182c06e4513852
e7229316b5a5b1f53382ec5a526b842dda2ca96bc891cd02d397a52c4a84dba0
540359af779a510828f0afd3c88562b62c37d0e4eeccb08104a167a3600f7956

Спасибо.


Обновление: я только что попытался вставить необработанную транзакцию в этот онлайн-парсер , и он без проблем декодирует эту транзакцию. Как это возможно программно?

Ответы (4)

попробуй это:

bitcoind getrawtransaction 2f50fdf7adbf58e91d738869948f4b191eb3cafa016c6df7e9182c06e4513852 1

обратите внимание на цифру 1 в конце, которая указывает биткойну работать в подробном режиме.

Похоже, вы передаете всю транзакцию в командной строке, но ваша операционная система имеет ограничение на максимальную (объединенную) длину аргументов командной строки, которое было превышено. Сообщение «Слишком длинный список аргументов» является ошибкой ОС, а не самим биткойном.

Вы должны иметь возможность использовать -stdinаргумент from bitcoin-cliдля передачи его через стандартный ввод, а не через командную строку, и в этом случае ограничений по длине нет. В Unix-подобной операционной системе вы, вероятно, захотите передавать данные через конвейер, используя popen(3)или его эквивалент на выбранном вами языке, но вы также можете записать во временный файл.

Bitcoind может принимать очень длинные входные данные, но если вы используете bitcoin-cli, существует ограничение на длину аргумента командной строки. Вы можете использовать параметр -stdin, чтобы отправить аргументы в биткойн-кли по сравнению со стандартным вводом и обойти ограничение размера аргументов.

Существуют библиотеки для десериализации транзакций.

pybitcointools — питон

битвасп/биткойн-php - php

либбиткойн — C++/C

УСТАРЕЛО: биткойн-lib-php - php

Обязательно будет много других.

Знаете ли вы что-нибудь в JavaScript? Например, может ли Bitcore десериализовать транзакции?