2017-02-27 10 views
1

ブロックチェインのDATファイルを読み込むコードを作成していますが、かなり簡単なので、bitcoinjを使用しようとしていました。しかし、DATファイル内のブロックを実際に読み取ることはできません。私は多くの異なるバージョンを試してきましたが、大きな進展はありませんでした。ブロックチェイン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: [email protected] vs [email protected] 
at org.bitcoinj.core.Context.getOrCreate(Context.java:147) 
at testBitcoin.main(testBitcoin.java:20) 

答えて

0

ブロック.datファイルはマジックナンバーで区切られ、孤児を含む1つのファイルに複数のブロックが含まれています。

参照してくださいhttps://en.bitcoin.it/wiki/Protocol_documentation#Message_structure

あなたのコードでは、マジックナンバーを探したり、メッセージ構造で指定された長さをジャンプしていないようです。

+0

私の理解では、bitcoinj BlockFileLoaderは、その一部を行うことです。 – cgivre

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()); 
} 
関連する問題