A Transaction is how coins and tokens are transferred on the blockchain.
It comprises of a set of Transaction Inputs which will be spent to a set of Transaction Outputs.
The mining nodes and full node software ensures that every transaction follows the blockchain’s rules before admitting a transaction into a block.
Verification of a transaction ensures that:
|version||1 byte||unsigned integer(LE)||The version of the transaction. Currently 0|
|input count||variable||variable length integer||The number of inputs in the transaction.|
||Each of the transaction’s inputs serialized in order.|
|output count||variable||variable length integer||The number of output in the transaction.|
||Each of the transaction’s outputs serialized in order.|
|lock-time||4 bytes||unsigned integer(LE)||The block height or timestamp after which this transaction is allowed to be included in a block. If less than
Note that at 10 minutes per block, it will take over 9,500 years to reach block height 500,000,000. Also note that when Bitcoin was created the unix timestamp was well over 1,000,000,000.
Additionally, since BIP-113, when the lock-time is intepreted as a time, it is compared to the median-time-past of a block, not it’s timestamp.
The median-time-past, or MTP, of a block is defined as the median block timestamp of the 11 blocks preceding a block.
This is used in calculations to avoid circumstances where consecutive blocks may not have strictly increasing timestamps.
Note, however, that this means that transactions utilizing time-based locking will not be included in a block immediately after their lock-time is reached.
Instead, there will need to be 6 blocks after the lock-time in order for the MTP to indicate that the lock-time has been reached.
This means that such transactions will experience an additional delay of an hour on average.
Transaction inputs are the “debits” of Nexa and not only designate the satoshis that will be transferred as a part of the transaction, but they also provide proof of ownership via the Unlocking Script.
A Transaction Input references an unspent Transaction Output (oftern referred to as a “UTXO”), from a prior transaction.
If a Transaction would like to spend multiple UTXOs, it must have multiple inputs, one for each UTXO.
The Transaction Output that is being spent by a Transaction Input is often referred to as the “PrevOut”, short for the “Previous Output”.
|type||1 byte||byte||MUST be 0|
|outpoint||32 bytes||hash||A reference to the UTXO set entry being spent.|
|unlocking script length||variable||variable length integer||The size of the unlocking script in bytes.|
|unlocking script||variable||bytes(BE)||The contents of the unlocking script.|
|sequence number||4 bytes||unsigned integer(LE)||As of BIP-68, the sequence number is interpreted as a relative lock-time for the input.|
|amount||8 bytes||unsigned integer(LE)||The quantity of satoshi being imported into this transaction from this outpoint. This MUST BE the same number as the “value” field in the Prevout that this outpoint references (or the transaction is invalid).|
A transaction input’s sequence number may be interpreted as a relative lock-time for the input.
That is, it prevents the transaction from being mined until a certain amount of time has past (or number of blocks mined) since the transaction containing the output to be spent was mined.
The 4 bytes of the sequence number are read from the input and interpreted as an unsigned integer.
The lowest-order bit is denotes as the 0th bit and the highest order bit as the 31st.
The following rules are used to interpret the value:
As with lock-time, when the relative lock-time is interpreted as a time, it is compared to the median-time-past of a block, not it’s timestamp.
Transaction outputs are the “credits” of the blockchain. All outpoints refer to transaction outputs. The set of unspent transaction outputs comprise all the coins and tokens in the network and is called the “UTXO set” for short.
Each transaction output denotes a number of satoshis and the requirements for spending them.
These requirements take the form of a locking script or a commitment to a locking script and its arguments (a script template) and can equate to anything from the satoshis only being spendable by the owner of a specific private key, to anyone being able to spend them, to no one being able to spend them.
While a transaction output has not been spent by another transaction (i.e. had its locking script “unlocked” by an input of a valid transaction) it is referred to as an unspent transaction output, or UTXO.
A Transaction Output that is being spent by a Transaction Input is often referred to as the “PrevOut”, short for the “Previous Output”.
|type||1 byte||byte||0 for scripts. 1 for script template commitment|
|value||8 bytes||unsigned integer(LE)||The number of satoshis to be transferred.|
|locking script length||variable||variable length integer||The size of the locking script in bytes.|
|locking script||variable||bytes(BE)||The contents of the locking script, or the script template commitment (serialized as a push-only script)|
Extra satoshis from the Transaction Inputs that are not accounted for in the Transaction Outputs may be collected by the miner as the transaction fee.