2017-12-08 9 views
7

Bitcoinブロックチェーンでの新しいブロックに関する通知を受け取ろうとしています。私はこのコードを使用していますが、これは2010年以降の何百ものブロックを印刷します。bitcoinjを使用して新しいブロックに関する通知を受け取る方法

import org.bitcoinj.core.*; 
import org.bitcoinj.net.discovery.DnsDiscovery; 
import org.bitcoinj.params.MainNetParams; 
import org.bitcoinj.store.BlockStore; 
import org.bitcoinj.store.MemoryBlockStore; 


public class BlockChainMonitorTest { 


    BlockChainMonitorTest() throws Exception { 

     NetworkParameters params = MainNetParams.get(); 

     BlockStore bs = new MemoryBlockStore(params); 
     BlockChain bc = new BlockChain(params, bs); 

     PeerGroup peerGroup = new PeerGroup(params, bc); 
     peerGroup.setUserAgent("PeerMonitor", "1.0"); 
     peerGroup.setMaxConnections(4); 
     peerGroup.addPeerDiscovery(new DnsDiscovery(params)); 

     bc.addNewBestBlockListener((StoredBlock block) -> { 
      System.out.println("addNewBestBlockListener"); 
      System.out.println(block); 
     }); 

     //peerGroup.setFastCatchupTimeSecs(1483228800); // 2017-01-01 

     peerGroup.start(); 
     peerGroup.waitForPeers(4).get(); 
     Thread.sleep(1000 * 60 * 30); 
     peerGroup.stop(); 

    } 

    public static void main(String[] args) throws Exception { 
     new BlockChainMonitorTest(); 
    } 
} 

私は新しいブロックだけを聞きたいです。何か案は ?
私はsetFastCatchupTimeSecsを試しましたが、それは私のようなイベントはありません。

答えて

0

だから私は、ソースコードに入ったと明らかに完全なblockchainをダウンロードすることなく、ブロック通知を受信する唯一の方法は、bitcoinjのソースコードを変更することです。ライン352の周りAbstractBlockChain.javaで

:私は完全なblockchainをダウンロードすることを避けるために希望

informListenersForNewBlock(block, NewBlockType.BEST_CHAIN, null, null, new StoredBlock(block, BigInteger.ZERO, 0)); 
return true; 
0

コレクションを使用して既に見つかったブロックを保存し、ブロックが既に存在するかどうかを確認し、そうでない場合にのみSystem.out.println呼び出しを実行します。

bc.addNewBestBlockListener((StoredBlock block) -> { 
    if (!blocksFoundMap.contains(block)) { 
     System.out.println("addNewBestBlockListener"); 
     System.out.println(block); 
    } 
}); 
+0

が持つメソッドpublic boolean add(Block block)の本体を交換してください。 –

関連する問題