mirror of https://github.com/status-im/specs.git
move over mailserver stuff to own spec
This commit is contained in:
parent
27bc6148c4
commit
7d19586da7
|
@ -15,19 +15,31 @@ TBD.
|
|||
|
||||
## Introduction
|
||||
|
||||
TBD.
|
||||
In the case of mobile clients which are often offline, there is a strong need to have an ability to download offline messages. By offline messages, we mean messages sent into the Whisper network and expired before being collected by the recipient. A message stays in the Whisper network for a duration specified as `TTL` (time-to-live) property.
|
||||
|
||||
## Mailserver
|
||||
|
||||
TBD.
|
||||
A mailserver can either be running as a server or as a client.
|
||||
|
||||
### Server
|
||||
|
||||
TBD.
|
||||
<!-- TODO: This doesn't actually describe how to implement a mailserver -->
|
||||
|
||||
`MailServer` is an interface with two methods:
|
||||
* `Archive(env *Envelope)`
|
||||
* `DeliverMail(whisperPeer *Peer, request *Envelope)`
|
||||
|
||||
### Client
|
||||
|
||||
TBD.
|
||||
A Whisper client needs to register a mail server instance which will be used by [geth's Whisper service](https://github.com/ethereum/go-ethereum/blob/v1.8.23/whisper/whisperv6/whisper.go#L209-L213).
|
||||
|
||||
If a mail server is registered for a given Whisper client, it will save all incoming messages on a local disk (this is the simplest implementation, it can store the messages wherever it wants, also using technologies like swarm and IPFS) in the background.
|
||||
|
||||
Notice that each node is meant to be independent and SHOULD keep a copy of all historic messages. High Availability (HA) can be achieved by having multiple nodes in different locations. Additionally, each node is free to store messages in a way which provides storage HA as well.
|
||||
|
||||
Saved messages are delivered to a requester (another Whisper peer) asynchronously as a response to `p2pMessageCode` message code. This is not exposed as a JSON-RPC method in `shh` namespace but it's exposed in status-go as `shhext_requestMessages` and blocking `shh_requestMessagesSync`. Read more about [Whisper V6 extensions](#whisper-v6-extensions-or-status-whisper-node).
|
||||
|
||||
In order to receive historic messages from a filter, p2p messages MUST be allowed when creating the filter. Receiving p2p messages is implemented in [geth's Whisper V6 implementation](https://github.com/ethereum/go-ethereum/blob/v1.8.23/whisper/whisperv6/whisper.go#L739-L751).
|
||||
|
||||
## Security considerations
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ This protocol consist of three components:
|
|||
|
||||
Whisper adapter specifies interaction with the Whisper service with regards to keys management, configuration and attaching metadata required to properly forward and process messages.
|
||||
|
||||
Offline messaging describes how the protocol handles delivering messages when one or more participants are offline and the messages expire in the Whisper network.
|
||||
Offline messaging describes how the protocol handles delivering messages when one or more participants are offline and the messages expire in the Whisper network. For more, see [Status Whisper Mailserver Spec)[status-whisper-mailserver-spec.md].
|
||||
|
||||
The protocol does not specify additional things like peers discovery, running Whisper nodes, underlying p2p protocols etc.
|
||||
|
||||
|
@ -295,23 +295,7 @@ Learn more following [Whisper V6 RPC API](https://github.com/ethereum/go-ethereu
|
|||
|
||||
# Offline messages
|
||||
|
||||
<!-- TODO: Remove implementation specific stuff -->
|
||||
|
||||
In the case of mobile clients which are often offline, there is a strong need to have an ability to download offline messages. By offline messages, we mean messages sent into the Whisper network and expired before being collected by the recipient. A message stays in the Whisper network for a duration specified as `TTL` (time-to-live) property.
|
||||
|
||||
A Whisper client needs to register a mail server instance which will be used by [geth's Whisper service](https://github.com/ethereum/go-ethereum/blob/v1.8.23/whisper/whisperv6/whisper.go#L209-L213).
|
||||
|
||||
`MailServer` is an interface with two methods:
|
||||
* `Archive(env *Envelope)`
|
||||
* `DeliverMail(whisperPeer *Peer, request *Envelope)`
|
||||
|
||||
If a mail server is registered for a given Whisper client, it will save all incoming messages on a local disk (this is the simplest implementation, it can store the messages wherever it wants, also using technologies like swarm and IPFS) in the background.
|
||||
|
||||
Notice that each node is meant to be independent and SHOULD keep a copy of all historic messages. High Availability (HA) can be achieved by having multiple nodes in different locations. Additionally, each node is free to store messages in a way which provides storage HA as well.
|
||||
|
||||
Saved messages are delivered to a requester (another Whisper peer) asynchronously as a response to `p2pMessageCode` message code. This is not exposed as a JSON-RPC method in `shh` namespace but it's exposed in status-go as `shhext_requestMessages` and blocking `shh_requestMessagesSync`. Read more about [Whisper V6 extensions](#whisper-v6-extensions-or-status-whisper-node).
|
||||
|
||||
In order to receive historic messages from a filter, p2p messages MUST be allowed when creating the filter. Receiving p2p messages is implemented in [geth's Whisper V6 implementation](https://github.com/ethereum/go-ethereum/blob/v1.8.23/whisper/whisperv6/whisper.go#L739-L751).
|
||||
A client SHOULD implement mailserver client mode. See [Status Whispre Mailserver Spec](status-whisper-mailserver-spec.md)
|
||||
|
||||
## Whisper V6 extensions (or Status Whisper Node)
|
||||
|
||||
|
|
Loading…
Reference in New Issue