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 '17 at 18:16

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 '18 at 17:02
  • 1
    Yes. (This part is only for passing the character limit.) – Come-from-Beyond Feb 12 '18 at 17:11
  • Cool, thanks! (This part is also for passing the character limit) – alexpods Feb 12 '18 at 17:13
  • N tx will confirm 2*N other tx of which (N-1) internally and (N+1) externally. Beautiful! – GJEEE Feb 12 '18 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 '18 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. – Akkumulator Feb 13 '18 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 '18 at 11:58
  • @ralf I have updated the image accordingly. – Akkumulator Feb 21 '18 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 acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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