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
1
currently 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 Acknowledge
confirmation? - In which circumstance would a node send a
Message Response
confirmation? - Why does
Message Response
have a version number? - Is
Message Response
a type ofMessage Confirmation
or visa versa?
Proposal Five
- Define in which circumstance a node would send a
Batch Acknowledge
confirmation - Define in which circumstance a node would send a
Message Response
confirmation
Proposal Six
Determine if Message Response
should have a version number.
- Could
Message Response
version defer to the protocol version? Examplewaku/1
- In which circumstance would
Message Response
make a version change that wouldn’t affect the protocol version?