diff --git a/spec/12/index.html b/spec/12/index.html index 4f6483cf1..b2c29309a 100644 --- a/spec/12/index.html +++ b/spec/12/index.html @@ -5,15 +5,13 @@ - + - + @@ -197,18 +195,9 @@

  • Adversarial Model @@ -281,18 +270,12 @@

  • -

    previous versions: 00

    -
    -

    WakuFilter is a protocol that enables subscribing to messages that a peer receives. This is a more lightweight version of WakuRelay specifically designed for bandwidth restricted devices. This is due to the fact that light nodes subscribe to full-nodes and only receive the messages they desire.

    +

    WakuFilter is a protocol that enables subscribing to messages that a peer receives. This is a more lightweight version of WakuRelay specifically designed for bandwidth restricted devices. This is due to the fact that light nodes subscribe to full-nodes and only receive the messages they desire.

    Content filtering #

    -

    Protocol identifiers:

    - +

    Protocol identifier*: /vac/waku/filter/2.0.0-beta1

    Content filtering is a way to do message-based filtering. Currently the only content filter being applied is on contentTopic. This @@ -341,168 +324,71 @@

    Protobuf #

    -
    syntax = "proto3";
    -
    -// 12/WAKU2-FILTER rfc: https://rfc.vac.dev/spec/12/
    -package waku.filter.v2;
    +
    message FilterRequest {
    +  bool subscribe = 1;
    +  string topic = 2;
    +  repeated ContentFilter contentFilters = 3;
     
    -// Protocol identifier: /vac/waku/filter-subscribe/2.0.0-beta1
    -message FilterSubscribeRequest {
    -  enum FilterSubscribeType {
    -    SUBSCRIBER_PING = 0;
    -    SUBSCRIBE = 1;
    -    UNSUBSCRIBE = 2;
    -    UNSUBSCRIBE_ALL = 3;
    +  message ContentFilter {
    +    string contentTopic = 1;
       }
    -
    -  string request_id = 1;
    -  FilterSubscribeType filter_subscribe_type = 2;
    -
    -  // Filter criteria
    -  optional string pubsub_topic = 10;
    -  repeated string content_topics = 11;
     }
     
    -message FilterSubscribeResponse {
    -  string request_id = 1;
    -  uint32 status_code = 10;
    -  optional string status_desc = 11;
    +message MessagePush {
    +  repeated WakuMessage messages = 1;
     }
     
    -// Protocol identifier: /vac/waku/filter-push/2.0.0-beta1
    -message MessagePush {
    -  WakuMessage waku_message = 1;
    -  optional string pubsub_topic = 2;
    +message FilterRPC {
    +  string requestId = 1;
    +  FilterRequest request = 2;
    +  MessagePush push = 3;
     }
    -

    - Filter-Subscribe - # -

    -

    A filter service node MUST support the filter-subscribe protocol -to allow filter clients to subscribe, modify, refresh and unsubscribe a desired set of filter criteria. -The combination of different filter criteria for a specific filter client node is termed a “subscription”. -A filter client is interested in receiving messages matching the filter criteria in its registered subscriptions.

    -

    Since a filter service node is consuming resources to provide this service, -it MAY account for usage and adapt its service provision to certain clients. -An incentive mechanism is currently planned but underspecified.

    -

    - Filter Subscribe Request - # -

    -

    A client node MUST send all filter requests in a FilterSubscribeRequest message. -This request MUST contain a request_id. -The request_id MUST be a uniquely generated string. -Each request MUST include a filter_subscribe_type, indicating the type of request.

    -

    - Filter Subscribe Response - # -

    -

    In return to any FilterSubscribeRequest, -a filter service node SHOULD respond with a FilterSubscribeResponse with a requestId matching that of the request. -This response MUST contain a status_code indicating if the request was successful or not. -Successful status codes are in the 2xx range. -Client nodes SHOULD consider all other status codes as error codes and assume that the requested operation had failed. -In addition, the filter service node MAY choose to provide a more detailed status description in the status_desc field.

    -

    - Filter matching - # -

    -

    In the description of each request type below, -the term “filter criteria” refers to the combination of pubsub_topic and a set of content_topics. -The request MAY include filter criteria, conditional to the selected filter_subscribe_type. -If the request contains filter criteria, -it MUST contain a pubsub_topic -and the content_topics set MUST NOT be empty. -A WakuMessage matches filter criteria when its content_topic is in the content_topics set -and it was published on a matching pubsub_topic.

    -

    - Filter Subscribe Types - # -

    -

    The following filter subscribe types are defined:

    -

    - SUBSCRIBER_PING - # -

    -

    A filter client that sends a FilterSubscribeRequest with filter_subscribe_type set to SUBSCRIBER_PING -requests that the service node SHOULD indicate if it has any active subscriptions for this client. -The filter client SHOULD exclude any filter criteria from the request. -The filter service node SHOULD respond with a success code if it has any active subscriptions for this client -or an error code if not. -The filter service node SHOULD ignore any filter criteria in the request.

    -

    - SUBSCRIBE - # +

    + FilterRPC + #

    -

    A filter client that sends a FilterSubscribeRequest with filter_subscribe_type set to SUBSCRIBE -requests that the service node SHOULD push messages matching this filter to the client. -The filter client MUST include the desired filter criteria in the request. -A client MAY use this request type to modify an existing subscription -by providing additional filter criteria in a new request. -A client MAY use this request type to refresh an existing subscription -by providing the same filter criteria in a new request. -The filter service node SHOULD respond with a success code if it successfully honored this request -or an error code if not. -The filter service node SHOULD respond with an error code and discard the request -if the subscribe request does not contain valid filter criteria, -i.e. both a pubsub_topic and a non-empty content_topics set.

    -

    - UNSUBSCRIBE - # +

    A node MUST send all Filter messages (FilterRequest, MessagePush) wrapped inside a +FilterRPC this allows the node handler to determine how to handle a message as the Waku +Filter protocol is not a request response based protocol but instead a push based system.

    +

    The requestId MUST be a uniquely generated string. When a MessagePush is sent +the requestId MUST match the requestId of the subscribing FilterRequest whose filters +matched the message causing it to be pushed.

    +

    + FilterRequest + #

    -

    A filter client that sends a FilterSubscribeRequest with filter_subscribe_type set to UNSUBSCRIBE -requests that the service node SHOULD stop pushing messages matching this filter to the client. -The filter client MUST include the filter criteria it desires to unsubscribe from in the request. -A client MAY use this request type to modify an existing subscription -by providing a subset of the original filter criteria to unsubscribe from in a new request. -The filter service node SHOULD respond with a success code if it successfully honored this request -or an error code if not. -The filter service node SHOULD respond with an error code and discard the request -if the unsubscribe request does not contain valid filter criteria, -i.e. both a pubsub_topic and a non-empty content_topics set.

    -

    - UNSUBSCRIBE_ALL - # +

    A FilterRequest contains an optional topic, zero or more content filters and +a boolean signifying whether to subscribe or unsubscribe to the given filters. +True signifies ‘subscribe’ and false signifies ‘unsubscribe’.

    +

    A node that sends the RPC with a filter request and subscribe set to ’true’ +requests that the filter node SHOULD notify the light requesting node of messages +matching this filter.

    +

    A node that sends the RPC with a filter request and subscribe set to ‘false’ +requests that the filter node SHOULD stop notifying the light requesting node +of messages matching this filter if it is currently doing so.

    +

    The filter matches when content filter and, optionally, a topic is matched. +Content filter is matched when a WakuMessage contentTopic field is the same.

    +

    A filter node SHOULD honor this request, though it MAY choose not to do so. If +it chooses not to do so it MAY tell the light why. The mechanism for doing this +is currently not specified. For notifying the light node a filter node sends a +MessagePush message.

    +

    Since such a filter node is doing extra work for a light node, it MAY also +account for usage and be selective in how much service it provides. This +mechanism is currently planned but underspecified.

    +

    + MessagePush + #

    -

    A filter client that sends a FilterSubscribeRequest with filter_subscribe_type set to UNSUBSCRIBE_ALL -requests that the service node SHOULD stop pushing messages matching any filter to the client. -The filter client SHOULD exclude any filter criteria from the request. -The filter service node SHOULD remove any existing subscriptions for this client. -It SHOULD respond with a success code if it successfully honored this request -or an error code if not.

    -

    - Filter-Push - # -

    -

    A filter client node MUST support the filter-push protocol -to allow filter service nodes to push messages matching registered subscriptions to this client.

    -

    A filter service node SHOULD push all messages -matching the filter criteria in a registered subscription -to the subscribed filter client. -These WakuMessages are likely to come from 11/WAKU2-RELAY, -but there MAY be other sources or protocols where this comes from. -This is up to the consumer of the protocol.

    -

    If a message push fails, -the filter service node MAY consider the client node to be unreachable. -If a specific filter client node is not reachable from the service node for a period of time, -the filter service node MAY choose to stop pushing messages to the client and remove its subscription. -This period is up to the service node implementation. -We consider 1 minute to be a reasonable default.

    -

    - Message Push - # -

    -

    Each message MUST be pushed in a MessagePush message. -Each MessagePush MUST contain one (and only one) waku_message. -If this message was received on a specific pubsub_topic, -it SHOULD be included in the MessagePush. -A filter client SHOULD NOT respond to a MessagePush. -Since the filter protocol does not include caching or fault-tolerance, -this is a best effort push service with no bundling -or guaranteed retransmission of messages. -A filter client SHOULD verify that each MessagePush it receives -originated from a service node where the client has an active subscription -and that it matches filter criteria belonging to that subscription.

    +

    A filter node that has received a filter request SHOULD push all messages that +match this filter to a light node. These WakuMessage’s are likely to come from the +relay protocol and be kept at the Node, but there MAY be other sources or +protocols where this comes from. This is up to the consumer of the protocol.

    +

    A filter node MUST NOT send a push message for messages that have not been +requested via a FilterRequest.

    +

    If a specific light node isn’t connected to a filter node for some specific +period of time (e.g. a TTL), then the filter node MAY choose to not push these +messages to the node. This period is up to the consumer of the protocol and node +implementation, though a reasonable default is one minute.


    Future Work @@ -607,18 +493,9 @@

  • Adversarial Model diff --git a/spec/65/index.html b/spec/65/index.html index ec7dbfcbc..ca826ef8f 100644 --- a/spec/65/index.html +++ b/spec/65/index.html @@ -5,15 +5,9 @@ - + - +