waku.guide/docs/Concepts/protocols-overview-by-examp...

2.1 KiB

title
Protocols Overview by Example

We have six nodes, A-F.

The protocols initially mounted are indicated as such.

sequenceDiagram
  participant A as A relay(0)
  participant B as B relay(pubtopic1)(0)
  participant C as C relay(pubtopic1)(0)
  participant D as D relay(pubtopic1), store(pubtopic1), filter(0)
  participant E as E relay, store(0)
  participant F as F relay, filter(0)

  A ->> A: msg1=WakuMessage(contentTopic1, data) [14/WAKU2-MESSAGE] (1)
  Note right of A: If version=1, encrypt data per [7/WAKU-DATA] (1)

  F ->> D: FilterRequest(pubtopic1, contentTopic1) [12/WAKU2-FILTER] (2)
  D ->> D: Subscribe F to filter [12/WAKU2-FILTER] (2)

  A ->> B: Publish msg1 on pubtopic1 [11/WAKU2-RELAY] (3)
  B ->> D: relay msg1 on pubtopic1 [11/WAKU2-RELAY] (3)

  D ->> D: store: saves msg1 [13/WAKU2-STORE] (4)

  D ->> F: MessagePush(msg1)[12/WAKU2-FILTER] (5)

  E ->> E: E comes online (6)
  E ->> D: HistoryQuery(pubtopic1, contentTopic1) [13/WAKU2-STORE] (6)
  D ->> E: HistoryResponse(msg1, ...) [13/WAKU2-STORE] (6)

The PubSub topic pubtopic1 is used for routing (the network uses a default pubsub topic) and indicates that it is subscribed to messages on that topic for relay.Ditto for Waku Store where it indicates that these messages are persisted on that node.

  1. Node A creates a WakuMessage msg1 with a ContentTopic /my-dapp/0/notifications/proto.

  2. Node F requests to get messages filtered by PubSub topic pubtopic1 and ContentTopic contentTopic1. Node D subscribes F to this filter and will in the future forward messages that match that filter.

  3. Node A publishes msg1 on pubtopic1 and subscribes to that relay topic pick it up. It then gets relayed further from B to D, but not C since it doesn't subscribe to that topic.

  4. Node D saves msg1 for possible later retrieval by other nodes.

  5. Node D also pushes msg1 to F, as it has previously subscribed F to this filter.

  6. At a later time, Node E comes online. It then requests messages matching pubtopic1 and contentTopic1 from Node D. Node D responds with messages meeting this (and possibly other) criteria.