/** * Locates a redeem data (redeem script and keys) from the keyChainGroup given the hash of the script. * Returns RedeemData object or null if no such data was found. */ @Nullable @Override public RedeemData findRedeemDataFromScriptHash(byte[] payToScriptHash) { keyChainGroupLock.lock(); try { return keyChainGroup.findRedeemDataFromScriptHash(payToScriptHash); } finally { keyChainGroupLock.unlock(); } }
/** * Locates a redeem data (redeem script and keys) from the keyChainGroup given the hash of the script. * Returns RedeemData object or null if no such data was found. */ @Nullable @Override public RedeemData findRedeemDataFromScriptHash(byte[] payToScriptHash) { keyChainGroupLock.lock(); try { return keyChainGroup.findRedeemDataFromScriptHash(payToScriptHash); } finally { keyChainGroupLock.unlock(); } }
/** * Locates a redeem data (redeem script and keys) from the keyChainGroup given the hash of the script. * Returns RedeemData object or null if no such data was found. */ @Nullable @Override public RedeemData findRedeemDataFromScriptHash(byte[] payToScriptHash) { keyChainGroupLock.lock(); try { return keyChainGroup.findRedeemDataFromScriptHash(payToScriptHash); } finally { keyChainGroupLock.unlock(); } }
/** * Locates a redeem data (redeem script and keys) from the keyChainGroup given the hash of the script. * Returns RedeemData object or null if no such data was found. */ @Nullable @Override public RedeemData findRedeemDataFromScriptHash(byte[] payToScriptHash) { keyChainGroupLock.lock(); try { return keyChainGroup.findRedeemDataFromScriptHash(payToScriptHash); } finally { keyChainGroupLock.unlock(); } }
public void markP2SHAddressAsUsed(Address address) { checkArgument(address.isP2SHAddress()); RedeemData data = findRedeemDataFromScriptHash(address.getHash160()); if (data == null) return; // Not our P2SH address. for (ECKey key : data.keys) { for (DeterministicKeyChain chain : chains) { DeterministicKey k = chain.findKeyFromPubKey(key.getPubKey()); if (k == null) continue; chain.markKeyAsUsed(k); maybeMarkCurrentAddressAsUsed(address); } } }
public void markP2SHAddressAsUsed(Address address) { checkArgument(address.isP2SHAddress()); RedeemData data = findRedeemDataFromScriptHash(address.getHash160()); if (data == null) return; // Not our P2SH address. for (ECKey key : data.keys) { for (DeterministicKeyChain chain : chains) { DeterministicKey k = chain.findKeyFromPubKey(key.getPubKey()); if (k == null) continue; chain.markKeyAsUsed(k); maybeMarkCurrentAddressAsUsed(address); } } }
public void markP2SHAddressAsUsed(Address address) { checkArgument(address.isP2SHAddress()); RedeemData data = findRedeemDataFromScriptHash(address.getHash160()); if (data == null) return; // Not our P2SH address. for (ECKey key : data.keys) { for (DeterministicKeyChain chain : chains) { DeterministicKey k = chain.findKeyFromPubKey(key.getPubKey()); if (k == null) continue; chain.markKeyAsUsed(k); maybeMarkCurrentAddressAsUsed(address); } } }
public void markP2SHAddressAsUsed(Address address) { checkArgument(address.isP2SHAddress()); RedeemData data = findRedeemDataFromScriptHash(address.getHash160()); if (data == null) return; // Not our P2SH address. for (ECKey key : data.keys) { for (DeterministicKeyChain chain : chains) { DeterministicKey k = chain.findKeyFromPubKey(key.getPubKey()); if (k == null) continue; chain.markKeyAsUsed(k); maybeMarkCurrentAddressAsUsed(address); if (data.isP2SHofP2WPKH) maybeMarkCurrentKeyAsUsed(k); } } }
@Test public void findRedeemData() throws Exception { group = createMarriedKeyChainGroup(); // test script hash that we don't have assertNull(group.findRedeemDataFromScriptHash(new ECKey().getPubKey())); // test our script hash Address address = group.currentAddress(KeyChain.KeyPurpose.RECEIVE_FUNDS); RedeemData redeemData = group.findRedeemDataFromScriptHash(address.getHash160()); assertNotNull(redeemData); assertNotNull(redeemData.redeemScript); assertEquals(2, redeemData.keys.size()); }
@Test public void findRedeemScriptFromPubHash() throws Exception { group = createMarriedKeyChainGroup(); Address address = group.freshAddress(KeyChain.KeyPurpose.RECEIVE_FUNDS); assertTrue(group.findRedeemDataFromScriptHash(address.getHash160()) != null); group.getBloomFilterElementCount(); KeyChainGroup group2 = createMarriedKeyChainGroup(); group2.freshAddress(KeyChain.KeyPurpose.RECEIVE_FUNDS); group2.getBloomFilterElementCount(); // Force lookahead. // test address from lookahead zone and lookahead threshold zone for (int i = 0; i < group.getLookaheadSize() + group.getLookaheadThreshold(); i++) { address = group.freshAddress(KeyChain.KeyPurpose.RECEIVE_FUNDS); assertTrue(group2.findRedeemDataFromScriptHash(address.getHash160()) != null); } assertFalse(group2.findRedeemDataFromScriptHash(group.freshAddress(KeyChain.KeyPurpose.RECEIVE_FUNDS).getHash160()) != null); }