Чтение и анализ файлов 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 в простое текстовое представление.