Чтение и анализ файлов DAT блокчейна

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

Я чувствую, что это должно быть довольно просто, и я просто упускаю что-то простое здесь. Чтобы было ясно, я не пытаюсь писать в блокчейн, просто читаю файлы DAT.
Спасибо!

Вот фрагмент кода.

NetworkParameters np = new MainNetParams();
Context c = new Context( np );
Context.getOrCreate(MainNetParams.get());
List<File> blockChainFiles = new ArrayList<>();
blockChainFiles.add( new File( "blk00000.dat" ) );
BlockFileLoader bfl = new BlockFileLoader(np, blockChainFiles);

int blockNum = 0;
// Iterate over the blocks in the dataset.
for (Block block : bfl) {
...

Этот код выдает следующую ошибку:

Exception in thread "main" java.lang.IllegalStateException: Context does not match implicit network params: org.bitcoinj.params.MainNetParams@9d1d82f2 vs org.bitcoinj.params.MainNetParams@9d1d82f2
at org.bitcoinj.core.Context.getOrCreate(Context.java:147)
at testBitcoin.main(testBitcoin.java:20)

2 ответа

Файлы блоков.dat содержат несколько блоков в одном файле, включая сирот, разделенных магическими числами.

Пожалуйста, обратитесь https://en.bitcoin.it/wiki/Protocol_documentation

Ваш код, похоже, не ищет магические числа или длину прыжка, как указано в структуре сообщения.

Просто избавься от жалующейся линии, Context.getOrCreate(MainNetParams.get());, это не нужно.

Следующая слегка измененная версия вашего кода работала для меня:

List<File> blockChainFiles = new ArrayList<>();
blockChainFiles.add(new File("blk00000.dat"));
MainNetParams params = MainNetParams.get();
Context context = new Context(params);
BlockFileLoader bfl = new BlockFileLoader(params, blockChainFiles);

// Iterate over the blocks in the dataset.
for (Block block : bfl) {
    System.out.println(block.getHashAsString());
}

Вы можете использовать мой парсер блокчейна. Он пишет на Python и может анализировать все данные из файлов blk*.dat в простое текстовое представление.

Другие вопросы по тегам