I'm trying to get the pending transactions from my localhost node (NetworkParameters params = RegTestParams.get();) using my SPV wallet. So when I create a transaction sending funds from my localhost node to my SPV wallet I immediately see the transaction instead of waiting for it to be confirmed.
I see the pending 0 conf transaction on my node when I execute: ./bitcoin-cli -regtest listtransactions { "account": "", "address": "n4BMZgwrL8xoduXDh1tgrfRXV8r8YhYxLS", "category": "send", "amount": -10.00000000, "vout": 0, "fee": -0.00003360, "confirmations": 0, "trusted": true, "txid": "725ad4dcfee6378e699745534bad95a52baae4496ad0ca6a735dfcaa2b8ba77d", "walletconflicts": [ ], "time": 1525835288, "timereceived": 1525835288, "bip125-replaceable": "no", "abandoned": false } I see that my wallet is listening for the correct address: addr:n4BMZgwrL8xoduXDh1tgrfRXV8r8YhYxLS is listed along with the other two public addresses which already received transactions. The other two transactions were confirmed on my localhost blockchain and the wallet finds those no problem. wallet.toString() Wallet containing 20.00 BTC (spendable: 20.00 BTC) in: 0 pending transactions 2 unspent transactions 0 spent transactions 0 dead transactions Last seen best block: 102 (2018-05-09T02:41:50Z): 403e15efadaa0723a34525c8a99d3b48dcb686970b7fb4e3cce46ef39ea097b1 Keys: Earliest creation time: 2018-05-08T05:11:55Z Seed birthday: 1525756315 [2018-05-08T05:11:55Z] Key to watch: tpubD8oxvS8LoVzaMfThLGMpapwiX4DpSGyxE2EME6WyG5ZnEBvBkGkMUgsBKpuDYKv6se5P3vpEgVXT46eANE7cuyBkVwJMQcnRagQTwspf5GV addr:mpwXH58im3MBLszzZhhui9tboT4re13ToE hash160:675ea5e47418ba7b4bdae54dc3a905726d38aa80 (M/0H/0/0) addr:mhYeYHdmbVAhkwnsn9QrAYUdiCV31zGuin hash160:16424340810fabe6d5c7285199809b4257553bae (M/0H/0/1) addr:n4BMZgwrL8xoduXDh1tgrfRXV8r8YhYxLS hash160:f895ff8dbc68d497c83f49dc4d3e69db03e11635 (M/0H/0/2) >>> UNSPENT: 10.00 BTC total value (sends 0.00 BTC and receives 10.00 BTC) confidence: Appeared in best chain at height 104, depth 103. Source: NETWORK 88e4fb901b77bf2639c75fa7ceacc35a4a3c69848f4f1b338c6443419b918261 updated: 2018-05-09T03:06:09Z version 2 time locked until block 71 in PUSHDATA(22)[00141a0baa176e8b351f24a5bd53489f931af9d19a62] 39.999962 BTC outpoint:480d793055e871a89a4575b30fa12bfb896a8ddac963cc814c7342e4303750a1:1 hash160:f6ef780f621daa3c47dffb2f12fb2343e0f96d8a sequence:fffffffe out HASH160 PUSHDATA(20)[fc9b41dcd99fd7249cea58498db7bed0c8437100] EQUAL 29.9999284 BTC out DUP HASH160 PUSHDATA(20)[16424340810fabe6d5c7285199809b4257553bae] EQUALVERIFY CHECKSIG 10.00 BTC fee 0.00024 BTC/kB, 0.0000336 BTC for 140 bytes prps UNKNOWN 10.00 BTC total value (sends 0.00 BTC and receives 10.00 BTC) confidence: Appeared in best chain at height 103, depth 715. Source: NETWORK 480d793055e871a89a4575b30fa12bfb896a8ddac963cc814c7342e4303750a1 updated: 2018-05-09T02:58:24Z version 2 time locked until block 102 in PUSHDATA(72)[3045022100ccafa7d27952e3e0290457944900d0d3840858f264978d255130d8d833960dd3022074f4d29f3f4759e0a14e280e9801aa7d709a725773fb3e257b89328c42cdab4d01] outpoint:efa1370d76908a548792b290ebbb88d2f034d96cf4b7a2cc59329f01411615fa:0 sequence:fffffffe out DUP HASH160 PUSHDATA(20)[675ea5e47418ba7b4bdae54dc3a905726d38aa80] EQUALVERIFY CHECKSIG 10.00 BTC out HASH160 PUSHDATA(20)[f6ef780f621daa3c47dffb2f12fb2343e0f96d8a] EQUAL 39.999962 BTC Spent by 88e4fb901b77bf2639c75fa7ceacc35a4a3c69848f4f1b338c6443419b918261 prps UNKNOWN My main file. public class PaymentsReceived { public static void main(String[] args) { try { WalletBundle bundle = new WalletBundle(args[0]); Wallet wallet = bundle.getWallet(); PeerGroup peerGroup = bundle.getPeerGroup(); Coin availableCoin = wallet.getBalance(Wallet.BalanceType.AVAILABLE); Coin availableSpendableCoin = wallet.getBalance(Wallet.BalanceType.AVAILABLE_SPENDABLE); Coin estimatedCoin = wallet.getBalance(Wallet.BalanceType.ESTIMATED); Coin estimatedSpendableCoin = wallet.getBalance(Wallet.BalanceType.ESTIMATED_SPENDABLE); System.out.println("Balance: " + bundle.getWallet().getBalance().toFriendlyString()); System.out.println("Available Balance: " + availableCoin.toFriendlyString()); System.out.println("Estimated Balance: " + estimatedCoin.toFriendlyString()); System.out.println("Available Spendable Balance: " + availableSpendableCoin.toFriendlyString()); System.out.println("Estimated Spendable Balance: " + estimatedSpendableCoin.toFriendlyString()); List<TransactionOutput> watchedOutputs = wallet.getWatchedOutputs(true); for (final TransactionOutput output : watchedOutputs) { System.out.println("watched output: " + output.toString()); } Collection<Transaction> pendingTransactions = wallet.getPendingTransactions(); for (final Transaction transaction : pendingTransactions) { System.out.println("pending tx: " + transaction.toString()); } List<TransactionOutput> spendCandidates = wallet.calculateAllSpendCandidates(false, false); for (final TransactionOutput output : spendCandidates) { System.out.println("spend candidate output: " + output.toString()); } } catch (UnreadableWalletException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (BlockStoreException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } I use RegTestParams.get() and peerGroup.connectToLocalHost()to connect to my localhost node. I would expect peerGroup.addWallet(wallet) to associate my wallet with the public keys it's watching. But I'm not sure how to sync relevant transactions from my localhost node's mempool with my SPV wallet. public class WalletBundle { private final Wallet wallet; private final BlockStore blockStore; private final BlockChain blockChain; private final PeerGroup peerGroup; public WalletBundle(String fileName) throws UnreadableWalletException, BlockStoreException, IOException, InterruptedException { File walletFile = new File(fileName); wallet = Wallet.loadFromFile(walletFile, null); final NetworkParameters params = RegTestParams.get(); File chainFile = new File("restore-from-seed.spvchain"); boolean downloadBlockchain = true; // if (chainFile.exists()) { // chainFile.delete(); // downloadBlockchain = false; // } blockStore = new SPVBlockStore(params, chainFile); blockChain = new BlockChain(params, wallet, blockStore); peerGroup = new PeerGroup(params, blockChain); blockChain.addWallet(wallet); peerGroup.addWallet(wallet); System.out.println("Starting PeerGroup"); peerGroup.start(); peerGroup.connectToLocalHost(); DownloadProgressTracker bListener = new DownloadProgressTracker() { @Override public void doneDownload() { System.out.println("blockchain downloaded"); } @Override protected void startDownload(int blocks) { super.startDownload(blocks); System.out.println("number of blocks to DL: " + blocks); } }; if (downloadBlockchain) { System.out.println("Starting Blockchain download"); peerGroup.startBlockChainDownload(bListener); System.out.println("Waiting..."); bListener.await(); } System.out.println("Allow unconfirmed transactions"); wallet.allowSpendingUnconfirmedTransactions(); wallet.saveToFile(walletFile); System.out.println("Saved wallet to file"); System.out.println(wallet.toString()); } public Wallet getWallet() { return wallet; } public BlockStore getBlockStore() { return blockStore; } public BlockChain getBlockChain() { return blockChain; } public PeerGroup getPeerGroup() { return peerGroup; } } The stdout from executing my Main method: Starting PeerGroup Starting Blockchain download Waiting... number of blocks to DL: 2 blockchain downloaded Allow unconfirmed transactions Saved wallet to file Wallet containing 20.00 BTC (spendable: 20.00 BTC) in: 0 pending transactions 2 unspent transactions 0 spent transactions 0 dead transactions Last seen best block: 102 (2018-05-09T02:41:50Z): 403e15efadaa0723a34525c8a99d3b48dcb686970b7fb4e3cce46ef39ea097b1 Keys: Earliest creation time: 2018-05-08T05:11:55Z Seed birthday: 1525756315 [2018-05-08T05:11:55Z] Key to watch: tpubD8oxvS8LoVzaMfThLGMpapwiX4DpSGyxE2EME6WyG5ZnEBvBkGkMUgsBKpuDYKv6se5P3vpEgVXT46eANE7cuyBkVwJMQcnRagQTwspf5GV addr:mpwXH58im3MBLszzZhhui9tboT4re13ToE hash160:675ea5e47418ba7b4bdae54dc3a905726d38aa80 (M/0H/0/0) addr:mhYeYHdmbVAhkwnsn9QrAYUdiCV31zGuin hash160:16424340810fabe6d5c7285199809b4257553bae (M/0H/0/1) addr:n4BMZgwrL8xoduXDh1tgrfRXV8r8YhYxLS hash160:f895ff8dbc68d497c83f49dc4d3e69db03e11635 (M/0H/0/2) >>> UNSPENT: 10.00 BTC total value (sends 0.00 BTC and receives 10.00 BTC) confidence: Appeared in best chain at height 104, depth 103. Source: NETWORK 88e4fb901b77bf2639c75fa7ceacc35a4a3c69848f4f1b338c6443419b918261 updated: 2018-05-09T03:06:09Z version 2 time locked until block 71 in PUSHDATA(22)[00141a0baa176e8b351f24a5bd53489f931af9d19a62] 39.999962 BTC outpoint:480d793055e871a89a4575b30fa12bfb896a8ddac963cc814c7342e4303750a1:1 hash160:f6ef780f621daa3c47dffb2f12fb2343e0f96d8a sequence:fffffffe out HASH160 PUSHDATA(20)[fc9b41dcd99fd7249cea58498db7bed0c8437100] EQUAL 29.9999284 BTC out DUP HASH160 PUSHDATA(20)[16424340810fabe6d5c7285199809b4257553bae] EQUALVERIFY CHECKSIG 10.00 BTC fee 0.00024 BTC/kB, 0.0000336 BTC for 140 bytes prps UNKNOWN 10.00 BTC total value (sends 0.00 BTC and receives 10.00 BTC) confidence: Appeared in best chain at height 103, depth 715. Source: NETWORK 480d793055e871a89a4575b30fa12bfb896a8ddac963cc814c7342e4303750a1 updated: 2018-05-09T02:58:24Z version 2 time locked until block 102 in PUSHDATA(72)[3045022100ccafa7d27952e3e0290457944900d0d3840858f264978d255130d8d833960dd3022074f4d29f3f4759e0a14e280e9801aa7d709a725773fb3e257b89328c42cdab4d01] outpoint:efa1370d76908a548792b290ebbb88d2f034d96cf4b7a2cc59329f01411615fa:0 sequence:fffffffe out DUP HASH160 PUSHDATA(20)[675ea5e47418ba7b4bdae54dc3a905726d38aa80] EQUALVERIFY CHECKSIG 10.00 BTC out HASH160 PUSHDATA(20)[f6ef780f621daa3c47dffb2f12fb2343e0f96d8a] EQUAL 39.999962 BTC Spent by 88e4fb901b77bf2639c75fa7ceacc35a4a3c69848f4f1b338c6443419b918261 prps UNKNOWN Balance: 20.00 BTC Available Balance: 20.00 BTC Estimated Balance: 20.00 BTC Available Spendable Balance: 20.00 BTC Estimated Spendable Balance: 20.00 BTC spend candidate output: TxOut of 10.00 BTC to mpwXH58im3MBLszzZhhui9tboT4re13ToE script:DUP HASH160 PUSHDATA(20)[675ea5e47418ba7b4bdae54dc3a905726d38aa80] EQUALVERIFY CHECKSIG spend candidate output: TxOut of 10.00 BTC to mhYeYHdmbVAhkwnsn9QrAYUdiCV31zGuin script:DUP HASH160 PUSHDATA(20)[16424340810fabe6d5c7285199809b4257553bae] EQUALVERIFY CHECKSIG How can I watch my node's mempool so I can get relevant transactions whose outputs satisfy the addresses that my node is watching? I would like to be able to be instantly notified when a relevant transaction enters the mempool. -- You received this message because you are subscribed to the Google Groups "bitcoinj" group. To unsubscribe from this group and stop receiving emails from it, send an email to bitcoinj+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.