2017-12-08 75 views
7

मैं Bitcoin blockchain में नई ब्लॉकों के बारे में सूचनाएं प्राप्त करने के कोशिश कर रहा हूँ का उपयोग कर नए ब्लॉकों के बारे में सूचनाएं प्राप्त कर सकते हैं। मैं इस कोड का उपयोग कर रहा है, लेकिन इस 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 स्रोत कोड को संशोधित करने के लिए है।

AbstractBlockChain.java में लाइन 352 के आसपास:

साथ विधि public boolean add(Block block) के शरीर की जगह:

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

मैं पूरा blockchain डाउनलोड करने के लिए होने से बचने के लिए चाहते हैं। –