建议和反馈

请填写你的反馈内容

问答 > Go/Python > 问答详情
求助中

读取和解析区块链DAT文件10LK

我正在处理一些读取区块链中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@9d1d82f2at org.bitcoinj.core.Context.getOrCreate(Context.java:147)at testBitcoin.main(testBitcoin.java:20)


2019-10-08
0
请先登陆或注册

月花雾2019-10-08

只需摆脱抱怨的行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());}


投一票
评论(0)
赞赏(0)
公子不笑2019-10-08

块.dat文件在一个文件中包含多个块,包括孤儿,并用魔术数字分隔。

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

您的代码似乎没有在寻找消息结构指定的幻数或跳跃长度。


投一票
评论(0)
赞赏(0)

求助中

解决了这个问题,预计可以帮助到

  • 0
  • 1
  • 5
  • 5
  • 9
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励