阅读与阅读解析区块链DAT文件

时间:2017-02-27 13:12:09

标签: java bitcoin blockchain bitcoinj

我正在研究一些读取区块链中DAT文件的代码,我试图使用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)

3 个答案:

答案 0 :(得分:0)

块.dat文件在一个文件中包含多个块,包括孤儿,由幻数分开。

请参阅https://en.bitcoin.it/wiki/Protocol_documentation#Message_structure

您的代码似乎没有按照消息结构的规定查找幻数或跳跃长度。

答案 1 :(得分:0)

只是摆脱抱怨线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());
}

答案 2 :(得分:0)

您可以使用我的blockchain parser。它使用Python编写,可以将blk * .dat文件中的所有数据解析到简单文本视图中。