Trinary Note
- In the "normal" world we have bytes & bits, where 1 byte is 8 bits giving us 2^8 = 256 possible data values for 1 byte.
- In the trinary world we have trytes & trits, where 1 tryte is 3 trits giving us 3^3 = 27 possible data values for 1 tryte. This is what IOTA uses to stores its transaction data.
Transaction Composition
One IOTA transaction consists of 2673 trytes. Note, however, that a user will usually broadcast a collection of multiple transactions (also called a bundle). One bundle could consist of
- Withdrawal transaction (acquire funds to be spent from some address)
- Payment transactions (pay some other address a sub or total amount of the funds withdrawn)
- Change transaction (deposit unspent funds back to one of the user's addresses)
Note that bundles are not restricted to a specific number of transactions. For exmaple, one could have a bundle that consists of just one transaction (when a value of 0 is "transferred").
The data segments within one transaction are as follows.
Core Data
- Signature Message Fragment contains the transaction signature = 2187 trytes
- Address is either receipt address (if value > 0) or withdrawal address (if value < 0) = 81 trytes
- Value is the amount of IOTA transferred = 27 trytes
- Obsolete Tag is some arbitrary user-defined value = 27 trytes
- Time Stamp of when the transaction was issued = 9 trytes
- Current Index of this transaction in its bundle = 9 trytes
- Last Index is the total number of transactions in the bundle = 9 trytes
Hashes
- Bundle Hash is the hash of the entire bundle = 81 trytes
- Trunk Hash is the hash of the 1st transaction referenced/approved = 81 trytes
- Branch Hash is the hash of the 2nd transaction referenced/approved = 81 trytes
Another Tag
- Tag is another arbitrary user-defined value = 27 trytes
Additional Time Stamps
- Attachment Time is the time stamp for when PoW is completed = 9 trytes
- Attachment Time (lower bound) is a slot for future use = 9 trytes
- Attachment Time (upper bound) is a slot for future use = 9 trytes
Proof-of-Work Data
- Nonce is the PoW nonce of the transaction = 27 trytes
Additional Links
https://github.com/iotaledger/iri/.../controllers/TransactionViewModel.java
https://github.com/alon-e/iotaWayback
https://iota.readme.io/docs/the-anatomy-of-a-transaction