I'm trying to run a private network and so modifying stellar-core's source code is not out of the question. I noticed that the network is right now configured to come to consensus every 5 seconds, even when there's nothing happening. This would create a lot of unnecessary ledger entries and boggle down the use cases for my project.

My question is, could the consensus protocol be altered so that the system only votes when there's at least one transaction? Would this conflict with SCP or prove to be a security issue?

  • Really interesting question. I was wondering about it myself. ~20% of the current Stellar history archive consists of the empty ledgers.
    – Orbit Lens
    Oct 6, 2018 at 1:02

1 Answer 1


The tricky part is that the timer for the nomination rounds of the SCP protocol starts five seconds after the previous slot's nomination protocol has ended. If you want to have an arbitrary delay between slots while waiting for a transaction, you may want to trigger the start of nomination from something other than the previous round. However, the only events that are guaranteed to be roughly synchronized over intact nodes are confirmation events, because once a single intact node has confirmed a statement, all other intact nodes will do so as soon as messages are exchanged, regardless of what malicious nodes attempt to do.

That said, the way nomination currently works in rounds is an optimization designed so that in the common case only one node nominates a value. The protocol still works (modulo maximum message sizes) if everyone nominates a different value and everyone echoes each other's values. Maybe you could implement two modes, where first you run normal nomination except don't nominate a ledger if you haven't seen any transactions. Then, if by round 5 no one has nominated anything, open up the protocol to nominations from anyone (basically assume neighbors is all nodes you know about).

One final point is that an empty transaction set is not meaningless, as it still increments the timestamp. If, for instance, you are doing an atomic cross chain swap between Stellar and some other blockchain, you want to make sure a pre-signed transaction cannot execute after its timebounds, and having a ledger header whose timestamp exceeds those timebounds is what guarantees this.

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.