With the coordinator, the MCMC random walk tip selection algorithm starts with a milestone as its entry transaction. Without the coordinator, there are no milestones. How is the entry transaction for the random walk chosen in this case?

  • If I interpret github.com/iotaledger/cliri/blob/dev/src/main/java/com/iota/iri/… correctly, it starts from a random tip and then walks randomly backwards until it hits some cumulative weight. No idea how practical/bugfree the current implementation is, considering it is only 3 days old... – mihi Dec 5 '18 at 19:34
  • @mihi And what set of transactions qualify as "Solid Tips" and from what collection are they selected from? – The Coordinator Dec 8 '18 at 19:33
  • @TheCoordinator a transaction is a solid tip when : it is not yet approved by another transaction, and it's branch and trunk are solid. A transaction is solid when all it's ancestors are known (i.e. in the local DB) – ben75 Dec 8 '18 at 19:59
  • Comments are not for extended discussion; this conversation has been moved to chat. – mihi Dec 17 '18 at 20:40

There is currently no way to do that without a supplied reference or COO Milestones.

In a COO-free or Milestone-free Tangle, the user must supply their own tip references to begin the MCMC random walk tip selection.

You are free to look at the Open-Source Coordinator for users to use here https://github.com/iotaledger/compass

Feel free to check the IRI tip selection here: https://github.com/iotaledger/iri/blob/dev/src/main/java/com/iota/iri/service/tipselection/impl/TipSelectorImpl.java

And the EntryPointSelectorImpl here: https://github.com/iotaledger/iri/blob/dev/src/main/java/com/iota/iri/service/tipselection/impl/EntryPointSelectorImpl.java

You will see that either the user has to provide the starting points for the MCMC or there needs to be Milestones.

public Hash getEntryPoint(int depth) throws Exception {
    int milestoneIndex = Math.max(milestoneTracker.latestSolidSubtangleMilestoneIndex - depth - 1,
    MilestoneViewModel milestoneViewModel = MilestoneViewModel.findClosestNextMilestone(tangle, milestoneIndex,
    if (milestoneViewModel != null && milestoneViewModel.getHash() != null) {
        return milestoneViewModel.getHash();

    return milestoneTracker.latestSolidSubtangleMilestone;

I think the EntryPointSelector won't even work without the Milestone class and its dependence on Milestones.

  • I don't think we can glean much from the current code on how entry transactions will be determined. This is more a question about IOTA's plans for the protocol in a coo-free network instead of IOTA's current software implementation. – wass Dec 7 '18 at 2:29
  • right. But if they can't even provide a start for the MCMC, then how are they going to do the much more difficult thing in removing the COO? Theoretically, this is the easiest part. – The Coordinator Dec 7 '18 at 6:07

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.