@Override public synchronized void addPaymentAddressesForMonitoring(String addressString, Long addressCreationTimestamp) { final Address address = Address.fromBase58(bitcoinNetworkParameters, addressString); LOG.info("Add monitored Bitcoin Address: {}", addressString); wallet.addWatchedAddress(address, addressCreationTimestamp); }
private static void addAddr() { String addr = (String) options.valueOf("addr"); if (addr == null) { System.err.println("You must specify an --addr to watch."); return; } try { Address address = Address.fromBase58(params, addr); // If no creation time is specified, assume genesis (zero). wallet.addWatchedAddress(address, getCreationTimeSeconds()); } catch (AddressFormatException e) { System.err.println("Could not parse given address, or wrong network: " + addr); } }
@Test public void getWatchedAddresses() throws Exception { Address watchedAddress = new ECKey().toAddress(PARAMS); wallet.addWatchedAddress(watchedAddress); List<Address> watchedAddresses = wallet.getWatchedAddresses(); assertEquals(1, watchedAddresses.size()); assertEquals(watchedAddress, watchedAddresses.get(0)); }
@Test public void removeWatchedAddresses() { List<Address> addressesForRemoval = new ArrayList<>(); for (int i = 0; i < 10; i++) { Address watchedAddress = new ECKey().toAddress(PARAMS); addressesForRemoval.add(watchedAddress); wallet.addWatchedAddress(watchedAddress); } wallet.removeWatchedAddresses(addressesForRemoval); for (Address addr : addressesForRemoval) assertFalse(wallet.isAddressWatched(addr)); assertFalse(wallet.isRequiringUpdateAllBloomFilter()); }
@Test public void watchingScripts() throws Exception { // Verify that pending transactions to watched addresses are relevant Address watchedAddress = new ECKey().toAddress(PARAMS); wallet.addWatchedAddress(watchedAddress); Coin value = valueOf(5, 0); Transaction t1 = createFakeTx(PARAMS, value, watchedAddress); assertTrue(t1.getWalletOutputs(wallet).size() >= 1); assertTrue(wallet.isPendingTransactionRelevant(t1)); }
@Test(expected = InsufficientMoneyException.class) public void watchingScriptsConfirmed() throws Exception { Address watchedAddress = new ECKey().toAddress(PARAMS); wallet.addWatchedAddress(watchedAddress); sendMoneyToWallet(BlockChain.NewBlockType.BEST_CHAIN, CENT, watchedAddress); assertEquals(CENT, wallet.getBalance()); // We can't spend watched balances wallet.createSend(OTHER_ADDRESS, CENT); }
@Before public void setUp() throws Exception { BriefLogFormatter.initVerbose(); Context ctx = new Context(PARAMS); myWatchedKey = new ECKey(); myWallet = new Wallet(PARAMS); myKey = new ECKey(); myKey.setCreationTimeSeconds(123456789L); myWallet.importKey(myKey); myAddress = myKey.toAddress(PARAMS); myWallet = new Wallet(PARAMS); myWallet.importKey(myKey); mScriptCreationTime = new Date().getTime() / 1000 - 1234; myWallet.addWatchedAddress(myWatchedKey.toAddress(PARAMS), mScriptCreationTime); myWallet.setDescription(WALLET_DESCRIPTION); }
@Test public void removeWatchedAddress() { Address watchedAddress = new ECKey().toAddress(PARAMS); wallet.addWatchedAddress(watchedAddress); wallet.removeWatchedAddress(watchedAddress); assertFalse(wallet.isAddressWatched(watchedAddress)); assertFalse(wallet.isRequiringUpdateAllBloomFilter()); }
@Test public void scriptCreationTime() throws Exception { Utils.setMockClock(); long now = Utils.currentTimeSeconds(); wallet = new Wallet(PARAMS); assertEquals(now, wallet.getEarliestKeyCreationTime()); Utils.rollMockClock(-120); wallet.addWatchedAddress(OTHER_ADDRESS); wallet.freshReceiveKey(); assertEquals(now - 120, wallet.getEarliestKeyCreationTime()); }
@Test public void removeScriptsBloomFilter() throws Exception { List<Address> addressesForRemoval = new ArrayList<>(); for (int i = 0; i < 10; i++) { Address watchedAddress = new ECKey().toAddress(PARAMS); addressesForRemoval.add(watchedAddress); wallet.addWatchedAddress(watchedAddress); } wallet.removeWatchedAddresses(addressesForRemoval); for (Address addr : addressesForRemoval) { Transaction t1 = createFakeTx(PARAMS, CENT, addr); TransactionOutPoint outPoint = new TransactionOutPoint(PARAMS, 0, t1); // Note that this has a 1e-12 chance of failing this unit test due to a false positive assertFalse(wallet.getBloomFilter(1e-12).contains(outPoint.unsafeBitcoinSerialize())); sendMoneyToWallet(BlockChain.NewBlockType.BEST_CHAIN, t1); assertFalse(wallet.getBloomFilter(1e-12).contains(outPoint.unsafeBitcoinSerialize())); } }
@Test public void watchingScriptsBloomFilter() throws Exception { assertFalse(wallet.isRequiringUpdateAllBloomFilter()); Address watchedAddress = new ECKey().toAddress(PARAMS); Transaction t1 = createFakeTx(PARAMS, CENT, watchedAddress); TransactionOutPoint outPoint = new TransactionOutPoint(PARAMS, 0, t1); wallet.addWatchedAddress(watchedAddress); assertTrue(wallet.isRequiringUpdateAllBloomFilter()); // Note that this has a 1e-12 chance of failing this unit test due to a false positive assertFalse(wallet.getBloomFilter(1e-12).contains(outPoint.unsafeBitcoinSerialize())); sendMoneyToWallet(BlockChain.NewBlockType.BEST_CHAIN, t1); assertTrue(wallet.getBloomFilter(1e-12).contains(outPoint.unsafeBitcoinSerialize())); }
@Test public void watchingScriptsSentFrom() throws Exception { int baseElements = wallet.getBloomFilterElementCount(); Address watchedAddress = new ECKey().toAddress(PARAMS); wallet.addWatchedAddress(watchedAddress); assertEquals(baseElements + 1, wallet.getBloomFilterElementCount()); Transaction t1 = createFakeTx(PARAMS, CENT, watchedAddress); Transaction t2 = createFakeTx(PARAMS, COIN, OTHER_ADDRESS); sendMoneyToWallet(AbstractBlockChain.NewBlockType.BEST_CHAIN, t1); assertEquals(baseElements + 2, wallet.getBloomFilterElementCount()); Transaction st2 = new Transaction(PARAMS); st2.addOutput(CENT, OTHER_ADDRESS); st2.addOutput(COIN, OTHER_ADDRESS); st2.addInput(t1.getOutput(0)); st2.addInput(t2.getOutput(0)); sendMoneyToWallet(AbstractBlockChain.NewBlockType.BEST_CHAIN, st2); assertEquals(baseElements + 2, wallet.getBloomFilterElementCount()); assertEquals(CENT, st2.getValueSentFromMe(wallet)); }