You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jun 14, 2024. It is now read-only.
Currently we describe the various types of capabilities as different node types, such as bootstrap nodes, mailserver servers, mailserver clients, relay nodes, and light nodes. In some places we describe these as actual capabilities that different things a node can do. This inconsistency and lack of clarity around a node and what it can do makes it harder to do many things. Among others, to reason about and extend things related to specs, analysis, clients, simulations, running a node and explaining things to end users.
A cleaner mental model is to be consistent about it being a node with a set of capabilities. The "X node" then becomes more of a shortcut to refer to certain optimized client configurations. This is more in-line with the adaptive nodes ethos that we want to practice, as well as future enhancements we want to make (libp2p, dagger). It is conceptually simpler and more accurate. If clients implement this correctly, it also simplifies the use of different capabilities for people who want to run their own node.
Specific proposal
Use the following terminology consistently throughout the spec:
A node is defined by its set of capabilities.
For Waku, these capabilities are:
send messages
receive messages, including historical messages
relay messages
bootstrap nodes
store historical messages and return these upon request
We use the following shortcuts to refer to nodes with certain set of common capabilities:
A light node only has send and receive capability
A full node has all capabilities (send/receive/relay/bootstrap/store)
A bootstrap node only has capability to bootstrap nodes
These common configurations and their capabilities can be cleanly visualized as follows:
Each capability have a set of requirements. For example, to have the bootstrap capability you currently:
MUST be connectable through a static IP
SHOULD be long-running process
A client SHOULD be able to specify all (legal) set of capabilities through a simple configuration and the same executable.
The previously used "Waku server node", "mailserver node" and "Whisper relay node" is supplanted by simply a "full node" as in "run a full node to make the network more robust".
This doesn't preclude nodes, e.g. in a specific cluster configuration, choosing to have fewer capabilities. In that case they'll simply be referred to as the set of their capabilities.
Next steps
Consensus within protocol team
Update Waku specs with more precise terminology
Update Status client spec
Update client configuration and docs to reflect and enable this
Update infra configuration snad docs to reflect and enable this
Abstract
Currently we describe the various types of capabilities as different node types, such as bootstrap nodes, mailserver servers, mailserver clients, relay nodes, and light nodes. In some places we describe these as actual capabilities that different things a node can do. This inconsistency and lack of clarity around a node and what it can do makes it harder to do many things. Among others, to reason about and extend things related to specs, analysis, clients, simulations, running a node and explaining things to end users.
A cleaner mental model is to be consistent about it being a node with a set of capabilities. The "X node" then becomes more of a shortcut to refer to certain optimized client configurations. This is more in-line with the adaptive nodes ethos that we want to practice, as well as future enhancements we want to make (libp2p, dagger). It is conceptually simpler and more accurate. If clients implement this correctly, it also simplifies the use of different capabilities for people who want to run their own node.
Specific proposal
Use the following terminology consistently throughout the spec:
A node is defined by its set of capabilities.
For Waku, these capabilities are:
A client SHOULD be able to specify all (legal) set of capabilities through a simple configuration and the same executable.
The previously used "Waku server node", "mailserver node" and "Whisper relay node" is supplanted by simply a "full node" as in "run a full node to make the network more robust".
Next steps
Notes
Status client spec: https://github.com/status-im/specs/blob/master/status-client-spec.md
Current Waku spec: https://specs.vac.dev/waku/waku.html
UX and confusion around terminology: Design Status node instructions status-im/design#40
Nimbus capabilities example: https://github.com/status-im/nim-eth/issues/102#issuecomment-543590468
Beyond messaging: Add ETH and LES RLPx full node as capability