DuneAPI: new batch wire format (breaking change!) #64
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a breaking change, it changes the block batch format on the wire. It introduces a single JSON line (NDJSON) which is the batch header. This can be DISABLED with
DUNEAPI_DISABLE_BATCH_HEADER
environment variableThis line indicates how many blocks and the size of each block message In essense, we're length prefixing the batch.
This allows the reader to split out easily all the messages. Until now this wasn't needed because Optimism Stack (EVM stack) uses a fixed 3-line payload for the blocks.
But this isn't the case in other EVM stacks (such as arbitrum nitro)
It uses JSON to encode this information because the jsonRPC message from the blockchain RPC node are already in JSON and the wire format is already NDJSON.
For the server side to handle in a backwards compatible way the payload, it needs to read the first line and attempt to parse it as a BlockBatchHeader message If that fails, it can revert back to the older message format parser