私の目標は、パブリック ビットコイン アドレスを監視し、そのアドレスに送金されるたびにコンソールに出力することです。それで全部です。今のところ、Bitcoin Core で以前に生成されたアドレスを使用しています。
私は次のことをしています:
NetworkParameters params = MainNetParams.get();
Wallet wallet = Wallet.loadFromFile(file);
BlockStore blockStore = new MemoryBlockStore(params);
BlockChain chain = new BlockChain(params, wallet, blockStore);
PeerGroup peerGroup = new PeerGroup(params, chain);
peerGroup.addPeerDiscovery(new DnsDiscovery(params));
peerGroup.setUseLocalhostPeerWhenPossible(true);
peerGroup.startAsync();
Address add = new Address(params, "1NpxxxxxxxxxxxxxxxaSC4");
wallet.addWatchedAddress(add);
wallet.addEventListener(new AbstractWalletEventListener() {
@Override
public synchronized void onCoinsReceived(Wallet w, Transaction tx, Coin prevBalance, Coin newBalance) {
System.out.println("[main]: COINS RECIEVED!");
System.out.println("\nReceived tx " + tx.getHashAsString());
System.out.println(tx.toString());
}
});
System.out.println("\nDone!\n");
System.out.println(wallet.toString());
AbstractWalletEventListener を正しく処理していない気がします。そのアドレスに送金すると、コンソールに表示されるはずのテキストが表示されません。代わりに、peerGroup.startAsync() メソッドの [NioClientManager] からの「ピアが新しいトランザクションを発表しました」の継続的なストリームが表示されます。
私は何を間違っていますか?どうすれば修正できますか? こんなに簡単な仕事のはずなのに、必要以上に多くの時間を費やしてしまいました。
PS。「loadFromFile」で呼び出しているファイルは、bitcoinj によって生成された空のデフォルトのウォレット ファイルです。それについて特別なことは何もありません。
編集: また、ウォレットの合計残高を確認するつもりはありません。私が知りたいのは、新しいトランザクションがいつ入ってくるかだけです。古いトランザクションは私のプログラムには関係ありません。