Package org.bitcoinj.core
Class TransactionOutput
- java.lang.Object
-
- org.bitcoinj.core.TransactionOutput
-
public class TransactionOutput extends java.lang.Object
A TransactionOutput message contains a scriptPubKey that controls who is able to spend its value. It is a sub-part of the Transaction message.
Instances of this class are not safe for use by multiple threads.
-
-
Field Summary
Fields Modifier and Type Field Description protected Transaction
parent
-
Constructor Summary
Constructors Constructor Description TransactionOutput(NetworkParameters params, Transaction parent, Coin value, byte[] scriptBytes)
Deprecated.TransactionOutput(Transaction parent, Coin value, byte[] scriptBytes)
TransactionOutput(Transaction parent, Coin value, Address to)
Creates an output that sends 'value' to the given address (public key hash).TransactionOutput(Transaction parent, Coin value, ECKey to)
Creates an output that sends 'value' to the given public key using a simple CHECKSIG script (no addresses).
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description byte[]
bitcoinSerialize()
Deprecated.useserialize()
TransactionOutput
duplicateDetached()
Returns a copy of the output detached from its containing transaction, if need be.boolean
equals(java.lang.Object o)
int
getIndex()
Gets the index of this output in the parent transaction, or throws if this output is freestanding.int
getMessageSize()
Deprecated.UsemessageSize()
Coin
getMinNonDustValue()
Returns the minimum value for this output to be considered "not dust", i.e.Coin
getMinNonDustValue(Coin feePerKb)
Gets the minimum value for a txout of this size to be considered non-dust by Bitcoin Core (and thus relayed).TransactionOutPoint
getOutPointFor()
Returns a newTransactionOutPoint
, which is essentially a structure pointing to this output.Transaction
getParentTransaction()
Returns the transaction that owns this output.int
getParentTransactionDepthInBlocks()
Returns the depth in blocks of the parent tx.Sha256Hash
getParentTransactionHash()
Returns the transaction hash that owns this output.byte[]
getScriptBytes()
The backing script bytes which can be turned into a Script object.Script
getScriptPubKey()
TransactionInput
getSpentBy()
Returns the connected input.Coin
getValue()
Returns the value of this output.int
hashCode()
boolean
isAvailableForSpending()
Returns whethermarkAsSpent(TransactionInput)
has been called on this class.boolean
isDust()
Will this transaction be considered dust and not be relayable and mined by default miners?boolean
isMine(TransactionBag transactionBag)
Returns true if this output is to a key, or an address we have the keys for, in the wallet.boolean
isMineOrWatched(TransactionBag transactionBag)
Returns true if this output is to a key in the wallet or to an address/script we are watching.boolean
isWatched(TransactionBag transactionBag)
Returns true if this output is to a key, or an address we have the keys for, in the wallet.void
markAsSpent(TransactionInput input)
Sets this objects availableForSpending flag to false and the spentBy pointer to the given input.void
markAsUnspent()
Resets the spent pointer / availableForSpending flag to null.int
messageSize()
Return the size of the serialized message.static TransactionOutput
read(java.nio.ByteBuffer payload, Transaction parentTransaction)
Deserialize this transaction output from a given payload.byte[]
serialize()
Allocates a byte array and writes this transaction output into it.protected void
setParent(Transaction parent)
void
setValue(Coin value)
Sets the value of this output.java.lang.String
toString()
Returns a human-readable debug string.java.lang.String
toString(Network network)
Returns a human-readable debug string.java.nio.ByteBuffer
write(java.nio.ByteBuffer buf)
Write this transaction output into the given buffer.
-
-
-
Field Detail
-
parent
@Nullable protected Transaction parent
-
-
Constructor Detail
-
TransactionOutput
public TransactionOutput(@Nullable Transaction parent, Coin value, Address to)
Creates an output that sends 'value' to the given address (public key hash). The amount should be created with something likeCoin.valueOf(int, int)
. Typically you would useTransaction.addOutput(Coin, Address)
instead of creating a TransactionOutput directly.
-
TransactionOutput
public TransactionOutput(@Nullable Transaction parent, Coin value, ECKey to)
Creates an output that sends 'value' to the given public key using a simple CHECKSIG script (no addresses). The amount should be created with something likeCoin.valueOf(int, int)
. Typically you would useTransaction.addOutput(Coin, ECKey)
instead of creating an output directly.
-
TransactionOutput
public TransactionOutput(@Nullable Transaction parent, Coin value, byte[] scriptBytes)
-
TransactionOutput
@Deprecated public TransactionOutput(NetworkParameters params, @Nullable Transaction parent, Coin value, byte[] scriptBytes)
Deprecated.
-
-
Method Detail
-
read
public static TransactionOutput read(java.nio.ByteBuffer payload, Transaction parentTransaction) throws java.nio.BufferUnderflowException, ProtocolException
Deserialize this transaction output from a given payload.- Parameters:
payload
- payload to deserialize fromparentTransaction
- parent transaction of the output- Returns:
- read message
- Throws:
java.nio.BufferUnderflowException
- if the read message extends beyond the remaining bytes of the payloadProtocolException
-
getScriptPubKey
public Script getScriptPubKey() throws ScriptException
- Throws:
ScriptException
-
write
public java.nio.ByteBuffer write(java.nio.ByteBuffer buf) throws java.nio.BufferOverflowException
Write this transaction output into the given buffer.- Parameters:
buf
- buffer to write into- Returns:
- the buffer
- Throws:
java.nio.BufferOverflowException
- if the output doesn't fit the remaining buffer
-
serialize
public byte[] serialize()
Allocates a byte array and writes this transaction output into it.- Returns:
- byte array containing the transaction output
-
bitcoinSerialize
@Deprecated public byte[] bitcoinSerialize()
Deprecated.useserialize()
-
messageSize
public int messageSize()
Return the size of the serialized message. Note that if the message was deserialized from a payload, this size can differ from the size of the original payload.- Returns:
- size of the serialized message in bytes
-
getMessageSize
@Deprecated public int getMessageSize()
Deprecated.UsemessageSize()
-
getValue
public Coin getValue()
Returns the value of this output. This is the amount of currency that the destination address receives.
-
setValue
public void setValue(Coin value)
Sets the value of this output.
-
getIndex
public int getIndex()
Gets the index of this output in the parent transaction, or throws if this output is freestanding. Iterates over the parents list to discover this.
-
isDust
public boolean isDust()
Will this transaction be considered dust and not be relayable and mined by default miners?- Returns:
- true if this output is dust
-
getMinNonDustValue
public Coin getMinNonDustValue(Coin feePerKb)
Gets the minimum value for a txout of this size to be considered non-dust by Bitcoin Core (and thus relayed). See: CTxOut::IsDust() in Bitcoin Core.
You probably should use
getMinNonDustValue()
which uses a safe fee-per-kb by default.- Parameters:
feePerKb
- The fee required per kilobyte. Note that this is the same as Bitcoin Core's -minrelaytxfee * 3
-
getMinNonDustValue
public Coin getMinNonDustValue()
Returns the minimum value for this output to be considered "not dust", i.e. the transaction will be relayable and mined by default miners.
-
markAsSpent
public void markAsSpent(TransactionInput input)
Sets this objects availableForSpending flag to false and the spentBy pointer to the given input. If the input is null, it means this output was signed over to somebody else rather than one of our own keys.- Throws:
java.lang.IllegalStateException
- if the transaction was already marked as spent.
-
markAsUnspent
public void markAsUnspent()
Resets the spent pointer / availableForSpending flag to null.
-
isAvailableForSpending
public boolean isAvailableForSpending()
Returns whethermarkAsSpent(TransactionInput)
has been called on this class. AWallet
will mark a transaction output as spent once it sees a transaction input that is connected to it. Note that this flag can be false when an output has in fact been spent according to the rest of the network if the spending transaction wasn't downloaded yet, and it can be marked as spent when in reality the rest of the network believes it to be unspent if the signature or script connecting to it was not actually valid.
-
getScriptBytes
public byte[] getScriptBytes()
The backing script bytes which can be turned into a Script object.- Returns:
- the scriptBytes
-
isMineOrWatched
public boolean isMineOrWatched(TransactionBag transactionBag)
Returns true if this output is to a key in the wallet or to an address/script we are watching.
-
isWatched
public boolean isWatched(TransactionBag transactionBag)
Returns true if this output is to a key, or an address we have the keys for, in the wallet.
-
isMine
public boolean isMine(TransactionBag transactionBag)
Returns true if this output is to a key, or an address we have the keys for, in the wallet.
-
toString
public java.lang.String toString()
Returns a human-readable debug string.- Overrides:
toString
in classjava.lang.Object
- Returns:
- debug string
-
toString
public java.lang.String toString(@Nullable Network network)
Returns a human-readable debug string.- Parameters:
network
- if provided, addresses (of that network) will be printed for standard scripts- Returns:
- debug string
-
getSpentBy
@Nullable public TransactionInput getSpentBy()
Returns the connected input.
-
getParentTransaction
@Nullable public Transaction getParentTransaction()
Returns the transaction that owns this output.
-
getParentTransactionHash
@Nullable public Sha256Hash getParentTransactionHash()
Returns the transaction hash that owns this output.
-
getParentTransactionDepthInBlocks
public int getParentTransactionDepthInBlocks()
Returns the depth in blocks of the parent tx.If the transaction appears in the top block, the depth is one. If it's anything else (pending, dead, unknown) then -1.
- Returns:
- The tx depth or -1.
-
getOutPointFor
public TransactionOutPoint getOutPointFor()
Returns a newTransactionOutPoint
, which is essentially a structure pointing to this output. Requires that this output is not detached.
-
duplicateDetached
public TransactionOutput duplicateDetached()
Returns a copy of the output detached from its containing transaction, if need be.
-
setParent
protected final void setParent(@Nullable Transaction parent)
-
equals
public boolean equals(java.lang.Object o)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
-