5

I'm browsing the tangle explorer and found that transactions have fields called Branch, Bundle & Trunk, but cannot figure out what their meaning is exactly.

As second part of my question, I cannot see who are "sender" and "recipient" of the transacted amount. I apologize if the question is naive, I'm referring to this Tangle explorer

https://iotasear.ch/

  • 2
    Possible duplicate of What is an IOTA "bundle"? – Helmar Dec 18 '17 at 12:06
  • @Helmar Partially. I wish the opportunity is taken to better explain the difference between trunk and branch in the answer, in that case this question could be a starting point for anyone querying for any oth the three terms – Daniel F Dec 20 '17 at 0:11
5

Bundle

All individual transactions that make up the complete transaction share the same bundle hash. That bundle hash is unique to them. It is not an address hash or a transaction hash of another transaction. It is an ID that uniquely identifies the entire transaction.

Transactions can be replayed in order to position them at another point in the tangle and increase its visibility. This then causes all the original transactions to get inserted again in the bundle, so that they show up twice. If the original transaction group or one of its replays gets confirmed, then the remaining duplicates become irrelevant. More on these replayed transactions at a later point.

So the bundle groups together all the individual transactions which relate to a single intent to transfer value or messages from one or more source addresses to one or more target addresses (very likely more than one target, in order to avoid address reuse), regardless if they are have been executed multiple times.

This bundle on TheTangle.org illustrates the things above:

It has a couple of source addresses. They are defined as inputs because they have a negative value. All these addresses are used to send 590 Mi to one address, and the remainder, 396 Ki is sent to another address, in order to prevent address reuse.

You can also see there that the entire transaction has been replayed two more times. Those replays always contain the same addresses, but always contain different transaction hashes, because they are different transactions. But the bundle hash takes care of grouping them all together, so that the nodes know that these are only duplicates.

Within a bundle, each transaction has a transaction index, which is tied to the address. This means that in a bundle with duplicates, the duplicates have the same index. So the index is not a count number of all the transactions, including the duplicates, but they repeat themselves among duplicates.

The first transaction in the bundle, which has the index of 0, is one of the target addresses.

The last transaction in the bundle, which has the index of "total individual transactions in the entire transaction"-1, is the address where the remaining value is sent to.

The last transaction is different from the rest, because of what it contains in the branch and trunk fields.

Branch

All transactions but the last one contain the same branch hash. This branch hash is the hash of an almost randomly selected, unrelated transaction. This transaction is called a tip, and it was found by the node by using an algorithm which searches for tips in the tangle to be used in the new transaction. It is a transaction external to the bundle, one which has its own bundle and its own related transactions. Our new transaction will confirm that branch transaction.

The branch hash for the last transaction is different. The hash we had above in the branches is now to be found in the trunk hash of the last transaction. And the branch hash of the last transaction is a completely unrelated transaction external to the bundle. It is the second tip from the tangle which gets confirmed by this transaction.

To sum it up: Branches confirm tip transactions from the tangle and integrate the transaction into the tangle.

Additionally, the branch hash groups the transactions inside the bundle (except for the last one, which has it in its trunk). If a transaction is replayed, then all the new individual transactions will have a new branch hash, because the node selected new tips for them.

Trunk

Each indivitual transaction has its own individual transaction hash. The trunk hash chains each transaction to the next one inside the bundle. This means that the transaction with the index 0 will have in its trunk the hash of the transaction with the index 1. The transaction with the index 1 in its trunk the hash of the transaction with the index 2, and so on.

These are all hashes only to be found inside that bundle, with the exception of the last transaction, which will contain the hash of the branch transaction which all other nodes share, the hash of an external tip transaction. So there -- since the last transaction doesn't have a follow-up transaction to put the follow-up transaction hash into its trunk -- it uses its trunk to put the branch hash of the other sibling transactions in. What a horrible sentence.

So these can also be used to group the duplicate transactions inside a bundle, since the replayed transactions won't be part of the same chain of trunk transactions.

Note

This may not be all there is to it, since in this example you see that one entire transaction confirms two tips. But in the diagram of the tangle which is used on some slides that can be found online, sometimes one entire transaction confirms more than two tips. If that is due to the duplicates? I don't know. Maybe someone else can chime in on this.

Attachments

Screen capture of the transaction, in case it gets deleted with a snapshot:

enter image description here

The innards of the original transaction and the first replayed transaction (use with grep):

Bundles:
{u'bundles': [<iota.transaction.base.Bundle object at 0x7f06762c1a50>]}
len(api_response['bundles']) 1

------------------ Bundle 0 of 1 ------------------

0 bundle <iota.transaction.base.Bundle object at 0x7f06762c1a50>
0 bundle.hash MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9
0 bundle._dict__ { '_is_confirmed': None,
  'transactions': [ <iota.transaction.base.Transaction object at 0x7f0678726a50>,
                    <iota.transaction.base.Transaction object at 0x7f06762c1c10>,
                    <iota.transaction.base.Transaction object at 0x7f06762e2690>,
                    <iota.transaction.base.Transaction object at 0x7f06762e2a50>,
                    <iota.transaction.base.Transaction object at 0x7f06762e2950>,
                    <iota.transaction.base.Transaction object at 0x7f06762e2d90>,
                    <iota.transaction.base.Transaction object at 0x7f067628b2d0>,
                    <iota.transaction.base.Transaction object at 0x7f067628b090>,
                    <iota.transaction.base.Transaction object at 0x7f067628b590>,
                    <iota.transaction.base.Transaction object at 0x7f067628b890>,
                    <iota.transaction.base.Transaction object at 0x7f067628b290>,
                    <iota.transaction.base.Transaction object at 0x7f067630b890>]}
None
0 bundle.transactions [<iota.transaction.base.Transaction object at 0x7f0678726a50>, <iota.transaction.base.Transaction object at 0x7f06762c1c10>, <iota.transaction.base.Transaction object at 0x7f06762e2690>, <iota.transaction.base.Transaction object at 0x7f06762e2a50>, <iota.transaction.base.Transaction object at 0x7f06762e2950>, <iota.transaction.base.Transaction object at 0x7f06762e2d90>, <iota.transaction.base.Transaction object at 0x7f067628b2d0>, <iota.transaction.base.Transaction object at 0x7f067628b090>, <iota.transaction.base.Transaction object at 0x7f067628b590>, <iota.transaction.base.Transaction object at 0x7f067628b890>, <iota.transaction.base.Transaction object at 0x7f067628b290>, <iota.transaction.base.Transaction object at 0x7f067630b890>]

 ------------------ Transaction 0 of 12 ------------------

 0 0 of 12 transaction <iota.transaction.base.Transaction object at 0x7f0678726a50>
 0 0 of 12 transaction.__dict__ { '_legacy_tag': Tag('CA9999999999999999999999999'),
  'address': Address('WRJW9YNJZVLLVGPJFDPCFSSISGJVGIIUHZMBUGOO9PURMGBOE9UJNDWPXZDXKVJONWTFCOCFAUXXE9OEW'),
  'attachment_timestamp': 1515457790167,
  'attachment_timestamp_lower_bound': 0,
  'attachment_timestamp_upper_bound': 3812798742493,
  'branch_transaction_hash': TransactionHash('UINVYOFNQWXKLMOTEHWOTMXWLICVUPUVTSZMHJAOCVDDZRDCAVNYGYMPJSVWPWZXXAUQTAUIORLKZ9999'),
  'bundle_hash': BundleHash('MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9'),
  'current_index': 0,
  'hash': TransactionHash('VOXCVBZCNACHTAGIODKJA9MDDTLSBRPTMWNFXZSVADMX9NCHMTJQAGHWRXAHWZRGJ9YRZFOKZPCV99999'),
  'is_confirmed': None,
  'last_index': 11,
  'nonce': Nonce('CZ999IWJ9999999999999999999'),
  'signature_message_fragment': '9999999999999999999999999999999999999999999999999999999999999999... (shortened for pprint)',
  'tag': Tag('999999999999999999999999999'),
  'timestamp': 1514362726,
  'trunk_transaction_hash': TransactionHash('BONF9YENZYDJSGXVMGFSVLTIFYFUPZXUMMF9ZLXYEOEZWMDPOKTSPEHHCMAZEKWTLDP9ZDLNKFZG99999'),
  'value': 590000000L}
None
 0 0 of 12 transaction.is_confirmed None

 ------------------ Transaction 1 of 12 ------------------

 0 1 of 12 transaction <iota.transaction.base.Transaction object at 0x7f06762c1c10>
 0 1 of 12 transaction.__dict__ { '_legacy_tag': Tag('999999999999999999999999999'),
  'address': Address('FQGOVKAMQKWNXGDRVUXGUPUQIXSETHKYVDKQWRCGBILXPNZGHWYWRITWVOVNAWOKZHRMXYVOYVNNEBDCW'),
  'attachment_timestamp': 1515457780551,
  'attachment_timestamp_lower_bound': 0,
  'attachment_timestamp_upper_bound': 3812798742493,
  'branch_transaction_hash': TransactionHash('UINVYOFNQWXKLMOTEHWOTMXWLICVUPUVTSZMHJAOCVDDZRDCAVNYGYMPJSVWPWZXXAUQTAUIORLKZ9999'),
  'bundle_hash': BundleHash('MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9'),
  'current_index': 1,
  'hash': TransactionHash('BONF9YENZYDJSGXVMGFSVLTIFYFUPZXUMMF9ZLXYEOEZWMDPOKTSPEHHCMAZEKWTLDP9ZDLNKFZG99999'),
  'is_confirmed': None,
  'last_index': 11,
  'nonce': Nonce('9Z9999MI9999999999999999999'),
  'signature_message_fragment': 'KVABMMVPWOSICQCDGRVDANZHODLTTI9PZSFNYQURXI9ZNGNYROHSLBHMXPPTGTMH... (shortened for pprint)',
  'tag': Tag('999999999999999999999999999'),
  'timestamp': 1514362726,
  'trunk_transaction_hash': TransactionHash('WYVVCFV9RTLXPPTLWXBOHCPVOILECSQJHQUUPRET9OICPRNKSIWOKIZZLCZPCNXSFOUIIUJL9WVH99999'),
  'value': -92900000L}
None
 0 1 of 12 transaction.is_confirmed None

 ------------------ Transaction 2 of 12 ------------------

 0 2 of 12 transaction <iota.transaction.base.Transaction object at 0x7f06762e2690>
 0 2 of 12 transaction.__dict__ { '_legacy_tag': Tag('999999999999999999999999999'),
  'address': Address('FQGOVKAMQKWNXGDRVUXGUPUQIXSETHKYVDKQWRCGBILXPNZGHWYWRITWVOVNAWOKZHRMXYVOYVNNEBDCW'),
  'attachment_timestamp': 1515457743192,
  'attachment_timestamp_lower_bound': 0,
  'attachment_timestamp_upper_bound': 3812798742493,
  'branch_transaction_hash': TransactionHash('UINVYOFNQWXKLMOTEHWOTMXWLICVUPUVTSZMHJAOCVDDZRDCAVNYGYMPJSVWPWZXXAUQTAUIORLKZ9999'),
  'bundle_hash': BundleHash('MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9'),
  'current_index': 2,
  'hash': TransactionHash('WYVVCFV9RTLXPPTLWXBOHCPVOILECSQJHQUUPRET9OICPRNKSIWOKIZZLCZPCNXSFOUIIUJL9WVH99999'),
  'is_confirmed': None,
  'last_index': 11,
  'nonce': Nonce('IZ9999II9999999999999999999'),
  'signature_message_fragment': 'TGYNNZAYKZ9WMMYOJSUEMOWRHNQMXNNSVKWFSIFS9XMIVRUYVTWZXASUPLMYLBPX... (shortened for pprint)',
  'tag': Tag('999999999999999999999999999'),
  'timestamp': 1514362726,
  'trunk_transaction_hash': TransactionHash('OWCDKVKJGNIRXJJCLNBNF9SDIC9FVVBTSMPIP99MWCHSUWB9OJRPFYSPOSXGSFMLCMG9ZHMXUOOF99999'),
  'value': 0L}
None
 0 2 of 12 transaction.is_confirmed None

[REMOVED BECAUSE OF STACK-OVERFLOW LIMIT]

 ------------------ Transaction 9 of 12 ------------------

 0 9 of 12 transaction <iota.transaction.base.Transaction object at 0x7f067628b890>
 0 9 of 12 transaction.__dict__ { '_legacy_tag': Tag('999999999999999999999999999'),
  'address': Address('MTLHVPTOFHKLOAMDKAIXF9VWHGHAPVVDZLCJUWUJGIHZQDEMIWIBAHWW9SQTEGJWFHA9SVAAMHGJEIMPX'),
  'attachment_timestamp': 1515457666260,
  'attachment_timestamp_lower_bound': 0,
  'attachment_timestamp_upper_bound': 3812798742493,
  'branch_transaction_hash': TransactionHash('UINVYOFNQWXKLMOTEHWOTMXWLICVUPUVTSZMHJAOCVDDZRDCAVNYGYMPJSVWPWZXXAUQTAUIORLKZ9999'),
  'bundle_hash': BundleHash('MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9'),
  'current_index': 9,
  'hash': TransactionHash('GVHMABWUTSQ9DGLFWOGYWKAYOYWTHVNHXKNLUNQ9VQQBJJIRAZYZYZNKEUUXCIHOZBDIMMJFKPLR99999'),
  'is_confirmed': None,
  'last_index': 11,
  'nonce': Nonce('NA999IJH9999999999999999999'),
  'signature_message_fragment': 'WZVMBVCDEBVWTGITXUJKNYPB9DADFURDCDCODFIJGVQEMIWKOAREXRUXPLASGWZT... (shortened for pprint)',
  'tag': Tag('999999999999999999999999999'),
  'timestamp': 1514362726,
  'trunk_transaction_hash': TransactionHash('9RHSF9JVSMNGIRT9AW9GJGPNUVSURB99TDNSTI9LPSRTKKUXUNNAM9OEYQJFODQEXKQPLBLARUN999999'),
  'value': -72914000L}
None
 0 9 of 12 transaction.is_confirmed None

 ------------------ Transaction 10 of 12 ------------------

 0 10 of 12 transaction <iota.transaction.base.Transaction object at 0x7f067628b290>
 0 10 of 12 transaction.__dict__ { '_legacy_tag': Tag('999999999999999999999999999'),
  'address': Address('MTLHVPTOFHKLOAMDKAIXF9VWHGHAPVVDZLCJUWUJGIHZQDEMIWIBAHWW9SQTEGJWFHA9SVAAMHGJEIMPX'),
  'attachment_timestamp': 1515457656228,
  'attachment_timestamp_lower_bound': 0,
  'attachment_timestamp_upper_bound': 3812798742493,
  'branch_transaction_hash': TransactionHash('UINVYOFNQWXKLMOTEHWOTMXWLICVUPUVTSZMHJAOCVDDZRDCAVNYGYMPJSVWPWZXXAUQTAUIORLKZ9999'),
  'bundle_hash': BundleHash('MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9'),
  'current_index': 10,
  'hash': TransactionHash('9RHSF9JVSMNGIRT9AW9GJGPNUVSURB99TDNSTI9LPSRTKKUXUNNAM9OEYQJFODQEXKQPLBLARUN999999'),
  'is_confirmed': None,
  'last_index': 11,
  'nonce': Nonce('9Z999RCD9999999999999999999'),
  'signature_message_fragment': 'OC9LIJR9SRROHLAFK9BVFHEHRWMDCKWRJAYZZGYZTLMOMGPFZEUTJYUOGFQKMECK... (shortened for pprint)',
  'tag': Tag('999999999999999999999999999'),
  'timestamp': 1514362726,
  'trunk_transaction_hash': TransactionHash('NUST9UNXOIY9ERNSKPSKGZUKMHCJGD9LTCF9ZZXJJ9YTJDPGVKIKJZCXWYFBVCQKYL9TZVVTGCEE99999'),
  'value': 0L}
None
 0 10 of 12 transaction.is_confirmed None

 ------------------ Transaction 11 of 12 ------------------

 0 11 of 12 transaction <iota.transaction.base.Transaction object at 0x7f067630b890>
 0 11 of 12 transaction.__dict__ { '_legacy_tag': Tag('999999999999999999999999999'),
  'address': Address('RUPNXBXEYENBOZRTSBKBQZSEEMQTDBSFGJECXEBLDSLXIIWDTFONBTUGRQZZDTFSXPKBSFQCXVWMWIZVD'),
  'attachment_timestamp': 1515457646100,
  'attachment_timestamp_lower_bound': 0,
  'attachment_timestamp_upper_bound': 3812798742493,
  'branch_transaction_hash': TransactionHash('LFBKDBF9NSW9RAQETYEJIKMYXAUFPXNRFFYFUZKOJBNX9GWKADLVKMYUOJBSIKTW9PWQEYERGWTUA9999'),
  'bundle_hash': BundleHash('MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9'),
  'current_index': 11,
  'hash': TransactionHash('NUST9UNXOIY9ERNSKPSKGZUKMHCJGD9LTCF9ZZXJJ9YTJDPGVKIKJZCXWYFBVCQKYL9TZVVTGCEE99999'),
  'is_confirmed': None,
  'last_index': 11,
  'nonce': Nonce('QA999RGL9999999999999999999'),
  'signature_message_fragment': '9999999999999999999999999999999999999999999999999999999999999999... (shortened for pprint)',
  'tag': Tag('999999999999999999999999999'),
  'timestamp': 1514362727,
  'trunk_transaction_hash': TransactionHash('UINVYOFNQWXKLMOTEHWOTMXWLICVUPUVTSZMHJAOCVDDZRDCAVNYGYMPJSVWPWZXXAUQTAUIORLKZ9999'),
  'value': 396000L}
None
 0 11 of 12 transaction.is_confirmed None





















Bundles:
{u'bundles': [<iota.transaction.base.Bundle object at 0x7efdff1a2a50>]}
len(api_response['bundles']) 1

------------------ Bundle 0 of 1 ------------------

0 bundle <iota.transaction.base.Bundle object at 0x7efdff1a2a50>
0 bundle.hash MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9
0 bundle._dict__ { '_is_confirmed': None,
  'transactions': [ <iota.transaction.base.Transaction object at 0x7efe01607a50>,
                    <iota.transaction.base.Transaction object at 0x7efdff1a2c10>,
                    <iota.transaction.base.Transaction object at 0x7efdff1c3690>,
                    <iota.transaction.base.Transaction object at 0x7efdff1c3a50>,
                    <iota.transaction.base.Transaction object at 0x7efdff1c3950>,
                    <iota.transaction.base.Transaction object at 0x7efdff1c3d90>,
                    <iota.transaction.base.Transaction object at 0x7efdff16b2d0>,
                    <iota.transaction.base.Transaction object at 0x7efdff16b090>,
                    <iota.transaction.base.Transaction object at 0x7efdff16b590>,
                    <iota.transaction.base.Transaction object at 0x7efdff16b890>,
                    <iota.transaction.base.Transaction object at 0x7efdff16b290>,
                    <iota.transaction.base.Transaction object at 0x7efdff1ec890>]}
None
0 bundle.transactions [<iota.transaction.base.Transaction object at 0x7efe01607a50>, <iota.transaction.base.Transaction object at 0x7efdff1a2c10>, <iota.transaction.base.Transaction object at 0x7efdff1c3690>, <iota.transaction.base.Transaction object at 0x7efdff1c3a50>, <iota.transaction.base.Transaction object at 0x7efdff1c3950>, <iota.transaction.base.Transaction object at 0x7efdff1c3d90>, <iota.transaction.base.Transaction object at 0x7efdff16b2d0>, <iota.transaction.base.Transaction object at 0x7efdff16b090>, <iota.transaction.base.Transaction object at 0x7efdff16b590>, <iota.transaction.base.Transaction object at 0x7efdff16b890>, <iota.transaction.base.Transaction object at 0x7efdff16b290>, <iota.transaction.base.Transaction object at 0x7efdff1ec890>]

 ------------------ Transaction 0 of 12 ------------------

 0 0 of 12 transaction <iota.transaction.base.Transaction object at 0x7efe01607a50>
 0 0 of 12 transaction.__dict__ { '_legacy_tag': Tag('CA9999999999999999999999999'),
  'address': Address('WRJW9YNJZVLLVGPJFDPCFSSISGJVGIIUHZMBUGOO9PURMGBOE9UJNDWPXZDXKVJONWTFCOCFAUXXE9OEW'),
  'attachment_timestamp': 1514362992182,
  'attachment_timestamp_lower_bound': 0,
  'attachment_timestamp_upper_bound': 3812798742493,
  'branch_transaction_hash': TransactionHash('OKRKZOK9YGIDFJHXJRLODXDGNTPEUHWSQNNKAGWGEZAQIUMI99PWDJYQMEWUYMNRIXEIBUCVVGMMZ9999'),
  'bundle_hash': BundleHash('MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9'),
  'current_index': 0,
  'hash': TransactionHash('MZPZGTEMNBVLGVMVMQZKFROJLSJTPFRL9WOAJDQKJVKWNMRHPAAZAPNITJHJDLGZYNGLBMIYOMTH99999'),
  'is_confirmed': None,
  'last_index': 11,
  'nonce': Nonce('TA9999QE9999999999999999999'),
  'signature_message_fragment': '9999999999999999999999999999999999999999999999999999999999999999... (shortened for pprint)',
  'tag': Tag('999999999999999999999999999'),
  'timestamp': 1514362726,
  'trunk_transaction_hash': TransactionHash('IS9ETSDHEDKCWZQ9IBZLBHVDWQACGAXMPHIYMLVJFNUGHLNKXNPTZHDKDDRWLNSPYJDTFJHAWFQT99999'),
  'value': 590000000L}
None
 0 0 of 12 transaction.is_confirmed None

 ------------------ Transaction 1 of 12 ------------------

 0 1 of 12 transaction <iota.transaction.base.Transaction object at 0x7efdff1a2c10>
 0 1 of 12 transaction.__dict__ { '_legacy_tag': Tag('999999999999999999999999999'),
  'address': Address('FQGOVKAMQKWNXGDRVUXGUPUQIXSETHKYVDKQWRCGBILXPNZGHWYWRITWVOVNAWOKZHRMXYVOYVNNEBDCW'),
  'attachment_timestamp': 1514362962483,
  'attachment_timestamp_lower_bound': 0,
  'attachment_timestamp_upper_bound': 3812798742493,
  'branch_transaction_hash': TransactionHash('OKRKZOK9YGIDFJHXJRLODXDGNTPEUHWSQNNKAGWGEZAQIUMI99PWDJYQMEWUYMNRIXEIBUCVVGMMZ9999'),
  'bundle_hash': BundleHash('MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9'),
  'current_index': 1,
  'hash': TransactionHash('IS9ETSDHEDKCWZQ9IBZLBHVDWQACGAXMPHIYMLVJFNUGHLNKXNPTZHDKDDRWLNSPYJDTFJHAWFQT99999'),
  'is_confirmed': None,
  'last_index': 11,
  'nonce': Nonce('AZ999RPF9999999999999999999'),
  'signature_message_fragment': 'KVABMMVPWOSICQCDGRVDANZHODLTTI9PZSFNYQURXI9ZNGNYROHSLBHMXPPTGTMH... (shortened for pprint)',
  'tag': Tag('999999999999999999999999999'),
  'timestamp': 1514362726,
  'trunk_transaction_hash': TransactionHash('BMPWVRSVVLBRCGDYIGAHTWJDAPR9RKXZI9EMRKFANLK9TYKLTHXEUAXKFIUXYHQBLUEYKAIRWDXH99999'),
  'value': -92900000L}
None
 0 1 of 12 transaction.is_confirmed None

 ------------------ Transaction 2 of 12 ------------------

 0 2 of 12 transaction <iota.transaction.base.Transaction object at 0x7efdff1c3690>
 0 2 of 12 transaction.__dict__ { '_legacy_tag': Tag('999999999999999999999999999'),
  'address': Address('FQGOVKAMQKWNXGDRVUXGUPUQIXSETHKYVDKQWRCGBILXPNZGHWYWRITWVOVNAWOKZHRMXYVOYVNNEBDCW'),
  'attachment_timestamp': 1514362954624,
  'attachment_timestamp_lower_bound': 0,
  'attachment_timestamp_upper_bound': 3812798742493,
  'branch_transaction_hash': TransactionHash('OKRKZOK9YGIDFJHXJRLODXDGNTPEUHWSQNNKAGWGEZAQIUMI99PWDJYQMEWUYMNRIXEIBUCVVGMMZ9999'),
  'bundle_hash': BundleHash('MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9'),
  'current_index': 2,
  'hash': TransactionHash('BMPWVRSVVLBRCGDYIGAHTWJDAPR9RKXZI9EMRKFANLK9TYKLTHXEUAXKFIUXYHQBLUEYKAIRWDXH99999'),
  'is_confirmed': None,
  'last_index': 11,
  'nonce': Nonce('PA999IWA9999999999999999999'),
  'signature_message_fragment': 'TGYNNZAYKZ9WMMYOJSUEMOWRHNQMXNNSVKWFSIFS9XMIVRUYVTWZXASUPLMYLBPX... (shortened for pprint)',
  'tag': Tag('999999999999999999999999999'),
  'timestamp': 1514362726,
  'trunk_transaction_hash': TransactionHash('9NSHMIHXDBWWDRBLKUTKZUZ9ZWOXSYJFYLJWWGQBQGVEEYJXASIPSMXHZKV9IXNEQHKRMGSFOAVP99999'),
  'value': 0L}
None
 0 2 of 12 transaction.is_confirmed None

[REMOVED BECAUSE OF STACK-OVERFLOW LIMIT]

 ------------------ Transaction 9 of 12 ------------------

 0 9 of 12 transaction <iota.transaction.base.Transaction object at 0x7efdff16b890>
 0 9 of 12 transaction.__dict__ { '_legacy_tag': Tag('999999999999999999999999999'),
  'address': Address('MTLHVPTOFHKLOAMDKAIXF9VWHGHAPVVDZLCJUWUJGIHZQDEMIWIBAHWW9SQTEGJWFHA9SVAAMHGJEIMPX'),
  'attachment_timestamp': 1514362857069,
  'attachment_timestamp_lower_bound': 0,
  'attachment_timestamp_upper_bound': 3812798742493,
  'branch_transaction_hash': TransactionHash('OKRKZOK9YGIDFJHXJRLODXDGNTPEUHWSQNNKAGWGEZAQIUMI99PWDJYQMEWUYMNRIXEIBUCVVGMMZ9999'),
  'bundle_hash': BundleHash('MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9'),
  'current_index': 9,
  'hash': TransactionHash('OLF9KHHTXUIYUQZFBGTWYLYLUCSVBAHQEIPKEQDPZ9GOIPFNVFZRTQLPMJDZJGCZCNZTNXHY9TEI99999'),
  'is_confirmed': None,
  'last_index': 11,
  'nonce': Nonce('EA9999JE9999999999999999999'),
  'signature_message_fragment': 'WZVMBVCDEBVWTGITXUJKNYPB9DADFURDCDCODFIJGVQEMIWKOAREXRUXPLASGWZT... (shortened for pprint)',
  'tag': Tag('999999999999999999999999999'),
  'timestamp': 1514362726,
  'trunk_transaction_hash': TransactionHash('OPSSAILZUXTVMQQSMBMVEMIQMUWTOXVXTL9KLJZAOERYIMTJWCVJNQKXLB9S9VANOSDQKBRANPGG99999'),
  'value': -72914000L}
None
 0 9 of 12 transaction.is_confirmed None

 ------------------ Transaction 10 of 12 ------------------

 0 10 of 12 transaction <iota.transaction.base.Transaction object at 0x7efdff16b290>
 0 10 of 12 transaction.__dict__ { '_legacy_tag': Tag('999999999999999999999999999'),
  'address': Address('MTLHVPTOFHKLOAMDKAIXF9VWHGHAPVVDZLCJUWUJGIHZQDEMIWIBAHWW9SQTEGJWFHA9SVAAMHGJEIMPX'),
  'attachment_timestamp': 1514362846455,
  'attachment_timestamp_lower_bound': 0,
  'attachment_timestamp_upper_bound': 3812798742493,
  'branch_transaction_hash': TransactionHash('OKRKZOK9YGIDFJHXJRLODXDGNTPEUHWSQNNKAGWGEZAQIUMI99PWDJYQMEWUYMNRIXEIBUCVVGMMZ9999'),
  'bundle_hash': BundleHash('MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9'),
  'current_index': 10,
  'hash': TransactionHash('OPSSAILZUXTVMQQSMBMVEMIQMUWTOXVXTL9KLJZAOERYIMTJWCVJNQKXLB9S9VANOSDQKBRANPGG99999'),
  'is_confirmed': None,
  'last_index': 11,
  'nonce': Nonce('PA999IXA9999999999999999999'),
  'signature_message_fragment': 'OC9LIJR9SRROHLAFK9BVFHEHRWMDCKWRJAYZZGYZTLMOMGPFZEUTJYUOGFQKMECK... (shortened for pprint)',
  'tag': Tag('999999999999999999999999999'),
  'timestamp': 1514362726,
  'trunk_transaction_hash': TransactionHash('KYIVVGWMQNZIF9TWUVAGNZTZOHOYIBVXYR9MEXYGOOQRXNRGKEY9WKETACPLHIRA9JFIYAZMRWBT99999'),
  'value': 0L}
None
 0 10 of 12 transaction.is_confirmed None

 ------------------ Transaction 11 of 12 ------------------

 0 11 of 12 transaction <iota.transaction.base.Transaction object at 0x7efdff1ec890>
 0 11 of 12 transaction.__dict__ { '_legacy_tag': Tag('999999999999999999999999999'),
  'address': Address('RUPNXBXEYENBOZRTSBKBQZSEEMQTDBSFGJECXEBLDSLXIIWDTFONBTUGRQZZDTFSXPKBSFQCXVWMWIZVD'),
  'attachment_timestamp': 1514362839259,
  'attachment_timestamp_lower_bound': 0,
  'attachment_timestamp_upper_bound': 3812798742493,
  'branch_transaction_hash': TransactionHash('GZCNSWLFABBMLCLC9SVVNSGMKZUQMXMSCRKXKTZODGOQU9ILHICONNU9FZIGVTK9BDHVBNI9NSAKZ9999'),
  'bundle_hash': BundleHash('MNDBTVSNQDSVZLLJTSKGLUCCFTJOPLDY9VGFCJTZFKKAXLONQCU99VRKFPYJNTKZGEHDYKWDQHEPTAAB9'),
  'current_index': 11,
  'hash': TransactionHash('KYIVVGWMQNZIF9TWUVAGNZTZOHOYIBVXYR9MEXYGOOQRXNRGKEY9WKETACPLHIRA9JFIYAZMRWBT99999'),
  'is_confirmed': None,
  'last_index': 11,
  'nonce': Nonce('SA9999G99999999999999999999'),
  'signature_message_fragment': '9999999999999999999999999999999999999999999999999999999999999999... (shortened for pprint)',
  'tag': Tag('999999999999999999999999999'),
  'timestamp': 1514362727,
  'trunk_transaction_hash': TransactionHash('OKRKZOK9YGIDFJHXJRLODXDGNTPEUHWSQNNKAGWGEZAQIUMI99PWDJYQMEWUYMNRIXEIBUCVVGMMZ9999'),
  'value': 396000L}
None
 0 11 of 12 transaction.is_confirmed None
1

"Trunk" and "Branch" are hashes of other transactions, namely the two transactions that were approved by the transaction you are currently looking at.

"Bundle" refers to the bundle hash: This is not the hash of a transaction, but a way to group transactions together. When you spend 5Mi, and send 3Mi of them to X, 1Mi of them to Y, and 1Mi back to yourself (a new address), these transactions all get combined into one bundle. Most tangle explorers have a special view when you click on a bundle hash, that they show input and output transactions separately.

Input transactions need a signature, which is usually too big for one transactions, so it gets split into two or more transactions and all of them except the first one have an amount of 0 (but the same address).

Therefore, most simple bundles have 4 transactions, 1 outgoing, 1 incoming, 1 for the rest of the signature and 1 change transactions (sending the change back to yourself).

  • 1
    One important thing to add is that a bundle is atomic. It means that either all transactions of a bundle are confirmed, or none of them are confirmed. – ben75 Dec 17 '17 at 20:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.