4.9 KiB
title | version | status | authors |
---|---|---|---|
Waku | 2.0.0-beta2 | Draft | Oskar Thorén <oskar@status.im>, Dean Eigenmann <dean@status.im>, Sanaz Taheri <sanaz@status.im> |
Table of Contents
Abstract
This specification explains the Waku Store protocol which enables querying of messages received through relay protocol and stored by other nodes. It also supports pagination for more efficient querying of historical messages.
Protocol identifier*: /vac/waku/store/2.0.0-beta2
Wire Specification
Peers communicate with each other using a request / response API. The messages sent are Protobuf RPC messages. The followings are the specifications of the Protobuf messages.
Protobuf
message Index {
bytes digest = 1;
float receivedTime = 2;
}
message PagingInfo {
int64 pageSize = 1;
Index cursor = 2;
enum Direction {
FORWARD = 0;
BACKWARD = 1;
}
Direction direction = 3;
}
message HistoryQuery {
repeated string topics = 2;
optional PagingInfo pagingInfo = 3; // used for pagination
}
message HistoryResponse {
repeated WakuMessage messages = 2;
optional PagingInfo pagingInfo = 3; // used for pagination
}
message HistoryRPC {
string request_id = 1;
HistoryQuery query = 2;
HistoryResponse response = 3;
}
Index
To perform pagination, each WakuMessage
stored at a node running the store protocol is associated with a unique Index
that encapsulates the following parts.
digest
: a sequence of bytes representing the hash of aWakuMessage
.receivedTime
: the UNIX time at which the waku message is received by the node running the store protocol.
PagingInfo
PagingInfo
holds the information required for pagination. It consists of the following components.
pageSize
: A positive integer indicating the number of queriedWakuMessage
s in aHistoryQuery
(or retrievedWakuMessage
s in aHistoryResponse
).cursor
: holds theIndex
of aWakuMessage
.direction
: indicates the direction of paging which can be eitherFORWARD
orBACKWARD
.
HistoryQuery
RPC call to query historical messages.
- The
topics
field MUST indicate the list of topics to query. PagingInfo
holds the information required for pagination. ItspageSize
field indicates the number ofWakuMessage
s to be included in the correspondingHistoryResponse
. If thepageSize
is zero then no pagination is required. If thepageSize
exceeds a threshold then the threshold value shall be used instead. In the forward pagination request, themessages
field of theHistoryResponse
shall contain at maximum thepageSize
amount of waku messages whoseIndex
values are larger than the givencursor
(and vise versa for the backward pagination). Note that thecursor
of aHistoryQuery
may be empty (e.g., for the initial query), as such, and depending on whether thedirection
isBACKWARD
orFORWARD
the last or the firstpageSize
waku messages shall be returned, respectively. The queried node MAY sort theWakuMessage
s based on theirIndex
, where thereceivedTime
constitutes the most significant part and thedigest
comes next, and then perform pagination on the sorted result. As such, the retrieved page contains an ordered list ofWakuMessage
s from the oldest message to the most recent one.
HistoryResponse
RPC call to respond to a HistoryQuery call.
- The
messages
field MUST contain the messages found, these are [WakuMessage
] types as defined in the corresponding specification. PagingInfo
holds the paging information based on which the querying node can resume its further history queries. ThepageSize
indicates the number of returned waku messages (i.e., the number of messages included in themessages
field ofHistoryResponse
). Thedirection
is the same direction as in the correspondingHistoryQuery
. In the forward pagination, thecursor
holds theIndex
of the last message in theHistoryResponse
messages
(and the first message in the backward paging). The requester shall embed the returnedcursor
inside its nextHistoryQuery
to retrieve the next page of the waku messages. Thecursor
obtained from one node SHOULD NOT be used in a request to another node because the result MAY be different.
Changelog
2.0.0-beta2
Released 2020-11-05
- Added pagination support.
2.0.0-beta1
Released 2020-10-06
- Initial draft version.
Copyright
Copyright and related rights waived via CC0.