我如何使用 bitcoinj 接收有关新块的通知
How can I receive notifications about new blocks using bitcoinj
我正在尝试接收有关比特币区块链中 新 区块的通知。我正在使用这段代码,但这会打印出从 2010 年左右开始的数百个区块。
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
,但似乎没有收到任何事件。
如何使用集合来存储已找到的块并检查该块是否已经存在,如果不存在则只执行 System.out.println 调用。
bc.addNewBestBlockListener((StoredBlock block) -> {
if (!blocksFoundMap.contains(block)) {
System.out.println("addNewBestBlockListener");
System.out.println(block);
}
});
所以我查看了源代码,显然唯一无需下载完整区块链即可接收块通知的方法是修改 bitcoinj 源代码。
在第 352 行附近的 AbstractBlockChain.java 中:
将方法 public boolean add(Block block)
的主体替换为:
informListenersForNewBlock(block, NewBlockType.BEST_CHAIN, null, null, new StoredBlock(block, BigInteger.ZERO, 0));
return true;
我正在尝试接收有关比特币区块链中 新 区块的通知。我正在使用这段代码,但这会打印出从 2010 年左右开始的数百个区块。
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
,但似乎没有收到任何事件。
如何使用集合来存储已找到的块并检查该块是否已经存在,如果不存在则只执行 System.out.println 调用。
bc.addNewBestBlockListener((StoredBlock block) -> {
if (!blocksFoundMap.contains(block)) {
System.out.println("addNewBestBlockListener");
System.out.println(block);
}
});
所以我查看了源代码,显然唯一无需下载完整区块链即可接收块通知的方法是修改 bitcoinj 源代码。
在第 352 行附近的 AbstractBlockChain.java 中:
将方法 public boolean add(Block block)
的主体替换为:
informListenersForNewBlock(block, NewBlockType.BEST_CHAIN, null, null, new StoredBlock(block, BigInteger.ZERO, 0));
return true;