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 [email protected].
For more options, visit https://groups.google.com/d/optout.