What is in a name?
What’s in a name? That which we call a rose by any other name would smell as sweet.
Though, calling a rose “swamp stench” would give the uninitiated the forgivable assumption that sweetness is far from its prime quality.
Waku Nomenclature
Waku has inherited a lot of things from Whisper and despite effort to bring clarity to the Waku specification there are still a number of vestigial quirks in its makeup. Listed here is the non-exhaustive findings of several weeks wading in the Waku weeds:
The deceptive Mailserver
The word broth of Message, Envelope, Batch, Messages
Synonym salad of Response, Confirmation, Acknowledge
I may be wrong, and misunderstand everything, so here’s to my inevitable humiliation and embarrassment. ![]()
Mailserver is a swamp stench
Waku doesn’t have a concept of “Mail”, neither does it have a concept of “Server”. Waku does have a concept of “Message” and a concept of “Node”, but “MessageNode” doesn’t describe what a Mailserver actually does, neither does “MailServer” BTW.
The current Waku specs’ abstract states:
Waku is a fork of the original Whisper protocol that enables better usability … through … (b) historic messages (with a mailserver)
The key to what a Mailserver does is explained in only 2 words, “historic messages”.
The term Mailserver is antiquated (at least in the Waku context) and laced with decades of exclusive association with email, and has all the connotations of what an email server is and does.
Proposal One
Rename “Mailserver” to a better more Wakuy name
Proposal Two
The new name for Mailserver should be History Node or Persistence Node
Confusing Concept Curry of Messages
What is a Waku Message?
According to the specs:
Use of RLPx transport protocol
All Waku messages are sent as devp2p RLPx transport protocol, version 5[^1] packets. These packets MUST be RLP-encoded arrays of data containing two objects: packet code followed by another object (whose type depends on the packet code). See informal RLP spec and the Ethereum Yellow Paper, appendix B for more details on RLP.
The message codes reserved for Waku protocol: 0 - 127.
Messages with unknown codes MUST be ignored without generating any error, for forward compatibility of future versions.
So far so good, “Messages” are the data packets that Waku uses to communicate various things between peers.
This packet is used for sending the standard Waku envelopes.
Oh, so a data package message with the code of 1 represents Messages, and the definition of these Messages is Waku envelopes.
Ok. So a Message is a data packet that may or may not be of the packet code type 1 which represents Messages, which contains Envelopes. This is already a little confusing as the Waku term Messages does not represent multiple Message data packets, instead represents Envelopes.
What’s an Envelope?
Envelope Messages sent and received by Waku nodes.
Oh, ok. So an Envelope is a Message ? But, doesn’t Message contain Messages that list Envelopes? Is an Envelope an infinite recursive loop of data packets?
I’m obviously being facetious here, I do know what an Envelope is, but I didn’t learn it from the specs, I learned it from the status-go code. The specs don’t formally define what an Envelope is, or what an Envelope is used for and its properties, the specs assumes that the reader knows this.
Proposal Three
Formally define and/or rename and make strict distinctions between the following concepts:
- The name for raw data packets sent between Waku peers, referred to as
Message - Packet code type
1currently defined asMessages - The name for the communication the user sends, also referred to as a “message”.
Maybe use some of the old Whisper lingo Whisper Overview · ethereum/go-ethereum Wiki · GitHub
Proposal Four
Specify the purpose and usage of the Envelope. Perhaps copypasta of or reference to Whisper Overview · ethereum/go-ethereum Wiki · GitHub
Acknowledging the Confirmation of a Response
I split this apart from the Message, Messages, Envelope section because it is a distinct issue, but there is some overlap.
Message confirmations tell a node that a message originating from it has been received by its peers, allowing a node to know whether a message has or has not been received.
A node MAY send a message confirmation for any batch of messages received with a packet Messages Code.
A message confirmation is sent using Batch Acknowledge packet or Message Response packet. The Batch Acknowledge packet is followed by a keccak256 hash of the envelopes batch data.
So, if a data packet has code 1, a node may send a Message Confirmation in response. The node can use data packet code 11 for Batch Acknowledge or code 12 for Message Response.
- In which circumstance would a node send a
Batch Acknowledgeconfirmation? - In which circumstance would a node send a
Message Responseconfirmation? - Why does
Message Responsehave a version number? - Is
Message Responsea type ofMessage Confirmationor visa versa?
Proposal Five
- Define in which circumstance a node would send a
Batch Acknowledgeconfirmation - Define in which circumstance a node would send a
Message Responseconfirmation
Proposal Six
Determine if Message Response should have a version number.
- Could
Message Responseversion defer to the protocol version? Examplewaku/1 - In which circumstance would
Message Responsemake a version change that wouldn’t affect the protocol version?