-
Notifications
You must be signed in to change notification settings - Fork 20
Description
Currently, when blocks are proposed they include all of the previous state. It should be possible to only include the prevStateRef (in the block header), and then explicitly request the prevState if required (most nodes will have the prevState because of participation in execution of the previous block).
However, this gives rise to a broader question: can we send all messages as just identifying hashes and the explicitly request the full message only if it is required? This question is a bit broader than just Hyperdrive — and could even be implemented at the airwave level — but there are some Hyperdrive-specific versions of this. For example, the LatestCommit object could be just the hash of the LatestCommit, and only if the node needs to fast-forward does it then go and explicitly request the full object.
Another question that arises: can we aggregate signatures into a single message? For example, when sending the LatestCommit object, we could send only one full Precommit but include 2F+1 signatures for it. This would reduce the size of this message significantly (up to 5 kilobytes when there are 100 nodes).
Lastly, resynchronisation and resending of messages. Resynchronisation is not always necessary, so there should be some basic check that receiving nodes do before resending all their messages. But, we should also be able to trim down on exactly what is resent and only cherry-pick messages that are known to be missing.