Skip to content

Explicitly pull missing data using data hashes #77

@loongy

Description

@loongy

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions