When adding a new transaction, I get two "random" other transactions to use as my branch and trunk.

But if I have several transactions in a bundle, does each one get their own random two? Or should transaction 2 in the bundle reference transaction 1? And only the 0th transaction in the bundle uses real random not-this-bundle transactions?

Here are docs on the subject, but I'm not sure I'm understanding this right:


A unique feature of bundles is that the transactions are identified via the bundle hash, but also via the trunkTransaction . What this means is that the tail transaction (index 0), references in the trunkTransaction the transaction hash at index: 1 , index 1 references (and approves) index 2 and so on. This makes it possible to get the full bundle of transactions from just a tail transaction by traversing down the trunk transaction.

  • check out this question There is a beautiful bundle cheat sheet there which explains a bundle structure.
    – alexpods
    Dec 27, 2017 at 18:16

4 Answers 4


A bundle consisting of N transactions can reference 2*N completely different transactions (almost half of them will belong to the bundle). The chain of trunkTransaction references must form the correct bundle, branchTransaction fields can reference tails (transactions with currentIndex = 0) of any other bundles.

Current implementation of the tip selection algorithm returns only 2 transactions to reference though, this is why now we have the currently observed picture.

  • 1
    So in the future a bundle that has N transactions will confirm N + 1 other transactions, am I right?
    – alexpods
    Feb 12, 2018 at 17:02
  • 1
    Yes. (This part is only for passing the character limit.) Feb 12, 2018 at 17:11
  • Cool, thanks! (This part is also for passing the character limit)
    – alexpods
    Feb 12, 2018 at 17:13
  • N tx will confirm 2*N other tx of which (N-1) internally and (N+1) externally. Beautiful!
    – GJEEE
    Feb 12, 2018 at 22:49

I found the cheat sheet to be somewhat misleading as it assumes, that one tip to be confirmed is the latest solid milestone. You'll find a precise answer here. I had the exact same conceptual question. Make sure you read all comments!


They do, and this schema shows how TX(currentIndex, lastIndex):

enter image description here

Taken from this nice article.

  • The „trunkTip“ where all the branchTransaction fields in this schema point to, should be labeled „tail (index == 0) of other bundle“ instead of „trunk tip“, or? I think there is no such thing as a „trunk tip“ and the labeling is slightly confusing.
    – ralf
    Feb 13, 2018 at 7:50
  • Then the “branch tip” could also be labeled “tail of another bundle” (‘TX(0,n)’). I think the labelling was supposed to show how, from a bundle perspective, other tx are referenced. I agree that naming can be somewhat confusing, since multiple branch and trunk references point towards a trunk tip. Feb 13, 2018 at 9:19
  • My point is: A bundle comprises of multiple transactions with each having a trunkTransaction field, while a bundle has exactly one tail. IMHO, being as precise as possible here will help reducing confusion.
    – ralf
    Feb 13, 2018 at 11:58
  • @ralf I have updated the image accordingly. Feb 21, 2018 at 13:24

okay I think I can answer my own question with this data:


bundle DFZCQK has 4 transactions: [VYWRBV, RZKOLU, USOBTT, H9OOFC]

tx0 points to RZKOLU (in) and MJOTMK (out)

tx1 points to USOBTT (in) and MJOTMK (out)

tx2 points to H9OOFC (in) and MJOTMK (out)

tx3 points to MJOTMK (out) and HBDVJA (out)


The short answer is, within a bundle you are creating, you might as well approve your own transactions with each other and then go out to some txs outside your bundle at the very end.

Then more info is nonce of each tx:


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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