Java Code Examples for org.bitcoinj.core.TransactionOutput#getParentTransaction()
The following examples show how to use
org.bitcoinj.core.TransactionOutput#getParentTransaction() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: NonBsqCoinSelector.java From bisq-core with GNU Affero General Public License v3.0 | 6 votes |
@Override protected boolean isTxOutputSpendable(TransactionOutput output) { // output.getParentTransaction() cannot be null as it is checked in calling method Transaction parentTransaction = output.getParentTransaction(); if (parentTransaction == null) return false; if (parentTransaction.getConfidence().getConfidenceType() != TransactionConfidence.ConfidenceType.BUILDING) return false; TxOutputKey key = new TxOutputKey(parentTransaction.getHashAsString(), output.getIndex()); // It might be that we received BTC in a non-BSQ tx so that will not be stored in out state and not found. // So we consider any txOutput which is not in the state as BTC output. boolean outputIsNotInBsqState = !bsqStateService.existsTxOutput(key); return outputIsNotInBsqState || bsqStateService.getBtcTxOutput(key).isPresent(); }
Example 2
Source File: UnconfirmedTxOutput.java From bisq with GNU Affero General Public License v3.0 | 6 votes |
public static UnconfirmedTxOutput fromTransactionOutput(TransactionOutput transactionOutput) { Transaction parentTransaction = transactionOutput.getParentTransaction(); if (parentTransaction != null) { return new UnconfirmedTxOutput(transactionOutput.getIndex(), transactionOutput.getValue().value, parentTransaction.getHashAsString()); } else { log.warn("parentTransaction of transactionOutput is null. " + "This must not happen. " + "We could throw an exception as well " + "here but we prefer to be for now more tolerant and just " + "assign the value 0 if that would be the case. transactionOutput={}", transactionOutput); return new UnconfirmedTxOutput(transactionOutput.getIndex(), 0, "null"); } }
Example 3
Source File: BsqCoinSelector.java From bisq with GNU Affero General Public License v3.0 | 6 votes |
@Override protected boolean isTxOutputSpendable(TransactionOutput output) { // output.getParentTransaction() cannot be null as it is checked in calling method Transaction parentTransaction = output.getParentTransaction(); if (parentTransaction == null) return false; // If it is a normal confirmed BSQ output we use the default lookup at the daoState if (daoStateService.isTxOutputSpendable(new TxOutputKey(parentTransaction.getHashAsString(), output.getIndex()))) return true; // It might be that it is an unconfirmed change output which we allow to be used for spending without requiring a confirmation. // We check if we have the output in the dao state, if so we have a confirmed but unspendable output (e.g. confiscated). if (daoStateService.getTxOutput(new TxOutputKey(parentTransaction.getHashAsString(), output.getIndex())).isPresent()) return false; // Only if it's not existing yet in the dao state (unconfirmed) we use our unconfirmedBsqChangeOutputList to // check if it is an own change output. return unconfirmedBsqChangeOutputListService.hasTransactionOutput(output); }
Example 4
Source File: NonBsqCoinSelector.java From bisq with GNU Affero General Public License v3.0 | 6 votes |
@Override protected boolean isTxOutputSpendable(TransactionOutput output) { // output.getParentTransaction() cannot be null as it is checked in calling method Transaction parentTransaction = output.getParentTransaction(); if (parentTransaction == null) return false; // It is important to not allow pending txs as otherwise unconfirmed BSQ txs would be considered nonBSQ as // below outputIsNotInBsqState would be true. if (parentTransaction.getConfidence().getConfidenceType() != TransactionConfidence.ConfidenceType.BUILDING) return false; TxOutputKey key = new TxOutputKey(parentTransaction.getHashAsString(), output.getIndex()); // It might be that we received BTC in a non-BSQ tx so that will not be stored in out state and not found. // So we consider any txOutput which is not in the state as BTC output. return !daoStateService.existsTxOutput(key) || daoStateService.isRejectedIssuanceOutput(key); }
Example 5
Source File: BisqDefaultCoinSelector.java From bisq-core with GNU Affero General Public License v3.0 | 5 votes |
@Override public CoinSelection select(Coin target, List<TransactionOutput> candidates) { ArrayList<TransactionOutput> selected = new ArrayList<>(); // Sort the inputs by age*value so we get the highest "coin days" spent. ArrayList<TransactionOutput> sortedOutputs = new ArrayList<>(candidates); // If we spend all we don't need to sort if (!target.equals(NetworkParameters.MAX_MONEY)) sortOutputs(sortedOutputs); // Now iterate over the sorted outputs until we have got as close to the target as possible or a little // bit over (excessive value will be change). long total = 0; long targetValue = target.value; for (TransactionOutput output : sortedOutputs) { if (total >= targetValue) { long change = total - targetValue; if (change == 0 || change >= Restrictions.getMinNonDustOutput().value) break; } if (output.getParentTransaction() != null && isTxSpendable(output.getParentTransaction()) && isTxOutputSpendable(output)) { selected.add(output); total += output.getValue().value; } } // Total may be lower than target here, if the given candidates were insufficient to create to requested // transaction. return new CoinSelection(Coin.valueOf(total), selected); }
Example 6
Source File: BsqWalletService.java From bisq-core with GNU Affero General Public License v3.0 | 5 votes |
@Override public Coin getValueSentToMeForTransaction(Transaction transaction) throws ScriptException { Coin result = Coin.ZERO; final String txId = transaction.getHashAsString(); // We check if we have a matching BSQ tx. We do that call here to avoid repeated calls in the loop. Optional<Tx> txOptional = bsqStateService.getTx(txId); // We check all the outputs of our tx for (int i = 0; i < transaction.getOutputs().size(); i++) { TransactionOutput output = transaction.getOutputs().get(i); final boolean isConfirmed = output.getParentTransaction() != null && output.getParentTransaction().getConfidence().getConfidenceType() == TransactionConfidence.ConfidenceType.BUILDING; if (output.isMineOrWatched(wallet)) { if (isConfirmed) { if (txOptional.isPresent()) { // The index of the BSQ tx outputs are the same like the bitcoinj tx outputs TxOutput txOutput = txOptional.get().getTxOutputs().get(i); if (bsqStateService.isBsqTxOutputType(txOutput)) { //TODO check why values are not the same if (txOutput.getValue() != output.getValue().value) { log.warn("getValueSentToMeForTransaction: Value of BSQ output do not match BitcoinJ tx output. " + "txOutput.getValue()={}, output.getValue().value={}, txId={}", txOutput.getValue(), output.getValue().value, txId); } // If it is a valid BSQ output we add it result = result.add(Coin.valueOf(txOutput.getValue())); } } } /*else { // TODO atm we don't display amounts of unconfirmed txs but that might change so we leave that code // if it will be required // If the tx is not confirmed yet we add the value and assume it is a valid BSQ output. result = result.add(output.getValue()); }*/ } } return result; }
Example 7
Source File: BisqDefaultCoinSelector.java From bisq with GNU Affero General Public License v3.0 | 5 votes |
@Override public CoinSelection select(Coin target, List<TransactionOutput> candidates) { ArrayList<TransactionOutput> selected = new ArrayList<>(); // Sort the inputs by age*value so we get the highest "coin days" spent. ArrayList<TransactionOutput> sortedOutputs = new ArrayList<>(candidates); // If we spend all we don't need to sort if (!target.equals(NetworkParameters.MAX_MONEY)) sortOutputs(sortedOutputs); // Now iterate over the sorted outputs until we have got as close to the target as possible or a little // bit over (excessive value will be change). long total = 0; long targetValue = target.value; for (TransactionOutput output : sortedOutputs) { if (!isDustAttackUtxo(output)) { if (total >= targetValue) { long change = total - targetValue; if (change == 0 || change >= Restrictions.getMinNonDustOutput().value) break; } if (output.getParentTransaction() != null && isTxSpendable(output.getParentTransaction()) && isTxOutputSpendable(output)) { selected.add(output); total += output.getValue().value; } } } // Total may be lower than target here, if the given candidates were insufficient to create to requested // transaction. return new CoinSelection(Coin.valueOf(total), selected); }
Example 8
Source File: BsqWalletService.java From bisq with GNU Affero General Public License v3.0 | 5 votes |
@Override public Coin getValueSentToMeForTransaction(Transaction transaction) throws ScriptException { Coin result = Coin.ZERO; final String txId = transaction.getHashAsString(); // We check if we have a matching BSQ tx. We do that call here to avoid repeated calls in the loop. Optional<Tx> txOptional = daoStateService.getTx(txId); // We check all the outputs of our tx for (int i = 0; i < transaction.getOutputs().size(); i++) { TransactionOutput output = transaction.getOutputs().get(i); final boolean isConfirmed = output.getParentTransaction() != null && output.getParentTransaction().getConfidence().getConfidenceType() == TransactionConfidence.ConfidenceType.BUILDING; if (output.isMineOrWatched(wallet)) { if (isConfirmed) { if (txOptional.isPresent()) { // The index of the BSQ tx outputs are the same like the bitcoinj tx outputs TxOutput txOutput = txOptional.get().getTxOutputs().get(i); if (daoStateService.isBsqTxOutputType(txOutput)) { //TODO check why values are not the same if (txOutput.getValue() != output.getValue().value) { log.warn("getValueSentToMeForTransaction: Value of BSQ output do not match BitcoinJ tx output. " + "txOutput.getValue()={}, output.getValue().value={}, txId={}", txOutput.getValue(), output.getValue().value, txId); } // If it is a valid BSQ output we add it result = result.add(Coin.valueOf(txOutput.getValue())); } } } /*else { // TODO atm we don't display amounts of unconfirmed txs but that might change so we leave that code // if it will be required // If the tx is not confirmed yet we add the value and assume it is a valid BSQ output. result = result.add(output.getValue()); }*/ } } return result; }
Example 9
Source File: BsqCoinSelector.java From bisq-core with GNU Affero General Public License v3.0 | 4 votes |
@Override protected boolean isTxOutputSpendable(TransactionOutput output) { // output.getParentTransaction() cannot be null as it is checked in calling method return output.getParentTransaction() != null && bsqStateService.isTxOutputSpendable(new TxOutputKey(output.getParentTransaction().getHashAsString(), output.getIndex())); }
Example 10
Source File: BsqWalletService.java From bisq-core with GNU Affero General Public License v3.0 | 4 votes |
@Override public Coin getValueSentFromMeForTransaction(Transaction transaction) throws ScriptException { Coin result = Coin.ZERO; // We check all our inputs and get the connected outputs. for (int i = 0; i < transaction.getInputs().size(); i++) { TransactionInput input = transaction.getInputs().get(i); // We grab the connected output for that input TransactionOutput connectedOutput = input.getConnectedOutput(); if (connectedOutput != null) { // We grab the parent tx of the connected output final Transaction parentTransaction = connectedOutput.getParentTransaction(); final boolean isConfirmed = parentTransaction != null && parentTransaction.getConfidence().getConfidenceType() == TransactionConfidence.ConfidenceType.BUILDING; if (connectedOutput.isMineOrWatched(wallet)) { if (isConfirmed) { // We lookup if we have a BSQ tx matching the parent tx // We cannot make that findTx call outside of the loop as the parent tx can change at each iteration Optional<Tx> txOptional = bsqStateService.getTx(parentTransaction.getHash().toString()); if (txOptional.isPresent()) { TxOutput txOutput = txOptional.get().getTxOutputs().get(connectedOutput.getIndex()); if (bsqStateService.isBsqTxOutputType(txOutput)) { //TODO check why values are not the same if (txOutput.getValue() != connectedOutput.getValue().value) log.warn("getValueSentToMeForTransaction: Value of BSQ output do not match BitcoinJ tx output. " + "txOutput.getValue()={}, output.getValue().value={}, txId={}", txOutput.getValue(), connectedOutput.getValue().value, txOptional.get().getId()); // If it is a valid BSQ output we add it result = result.add(Coin.valueOf(txOutput.getValue())); } } } /*else { // TODO atm we don't display amounts of unconfirmed txs but that might change so we leave that code // if it will be required // If the tx is not confirmed yet we add the value and assume it is a valid BSQ output. result = result.add(connectedOutput.getValue()); }*/ } } } return result; }
Example 11
Source File: BsqWalletService.java From bisq with GNU Affero General Public License v3.0 | 4 votes |
@Override public Coin getValueSentFromMeForTransaction(Transaction transaction) throws ScriptException { Coin result = Coin.ZERO; // We check all our inputs and get the connected outputs. for (int i = 0; i < transaction.getInputs().size(); i++) { TransactionInput input = transaction.getInputs().get(i); // We grab the connected output for that input TransactionOutput connectedOutput = input.getConnectedOutput(); if (connectedOutput != null) { // We grab the parent tx of the connected output final Transaction parentTransaction = connectedOutput.getParentTransaction(); final boolean isConfirmed = parentTransaction != null && parentTransaction.getConfidence().getConfidenceType() == TransactionConfidence.ConfidenceType.BUILDING; if (connectedOutput.isMineOrWatched(wallet)) { if (isConfirmed) { // We lookup if we have a BSQ tx matching the parent tx // We cannot make that findTx call outside of the loop as the parent tx can change at each iteration Optional<Tx> txOptional = daoStateService.getTx(parentTransaction.getHash().toString()); if (txOptional.isPresent()) { TxOutput txOutput = txOptional.get().getTxOutputs().get(connectedOutput.getIndex()); if (daoStateService.isBsqTxOutputType(txOutput)) { //TODO check why values are not the same if (txOutput.getValue() != connectedOutput.getValue().value) log.warn("getValueSentToMeForTransaction: Value of BSQ output do not match BitcoinJ tx output. " + "txOutput.getValue()={}, output.getValue().value={}, txId={}", txOutput.getValue(), connectedOutput.getValue().value, txOptional.get().getId()); // If it is a valid BSQ output we add it result = result.add(Coin.valueOf(txOutput.getValue())); } } } /*else { // TODO atm we don't display amounts of unconfirmed txs but that might change so we leave that code // if it will be required // If the tx is not confirmed yet we add the value and assume it is a valid BSQ output. result = result.add(connectedOutput.getValue()); }*/ } } } return result; }