We introduce a new RequestType - Metadata - as follows:
type GraphSyncRequestType enum {
# New means a new request
| New ("n")
# Cancel means cancel the request referenced by request ID
| Cancel ("c")
# Update means the extensions contain an update about this request
| Update ("u")
# Restart means restart this request from the begging, respecting the any
# DoNotSendCids/DoNotSendBlocks contained in the extensions--essentially a
# cancel followed by a new
# TODO: | Restart ("r")
| Metadata ("m")
} representation string
For a metadata request, a responder responds as would normally, but simply never sends blocks for this request. This means they respond only with metadata.
Suggested implementation:
Add a call to the ResponseStream to disable block sending entirely, similar to the SkipFirstBlocks / IgnoreBlocks that when called, always does not send a block in future calls to Transaction
Modify the query preparer as needed
Handle the request type in the ResponseManager otherwise just like a new request for first implementation.
What
We introduce a new RequestType - Metadata - as follows:
For a metadata request, a responder responds as would normally, but simply never sends blocks for this request. This means they respond only with metadata.
Suggested implementation: