mirror of
https://github.com/status-im/status-go.git
synced 2025-01-20 11:40:29 +00:00
77d9d0f4c9
* Added waku README.md, starting text and structure Resolves GH-1944 * Added api, config and doc details * Created Docs for waku.const, envelope and events * Added notes on Filter * Rewrote the filter section * Restructured docs to match new versioning structure * Moved package files out of the main ToC * Added waku/common/README.md * Added details to mailserver.go and notes to api.go * Update to bloomfilter and const common * Added common/ helpers.go, errors.go and message.go details * Added common/metrics.go and protocol details * Added rate_limiter and topic.go details * fix rate limiter table * Added Waku Versioning details * Added Versioned sub-package file details * Added better detail for Waku Filters Addressing https://github.com/status-im/status-go/pull/1949#discussion_r419232235 * Added notes about light nodes not being actually new * Added more detail for Waku node configs and defaults * Added details to the version message.go section * Added details to waku/common/rate_limiter * Minor typo fix in docs
103 lines
3.9 KiB
Go
103 lines
3.9 KiB
Go
package common
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/ethereum/go-ethereum/p2p"
|
|
"github.com/ethereum/go-ethereum/p2p/enode"
|
|
"github.com/ethereum/go-ethereum/rlp"
|
|
)
|
|
|
|
// Peer represents a remote Waku client with which the local host waku instance exchanges data / messages.
|
|
type Peer interface {
|
|
// Start performs the handshake and initialize the broadcasting of messages
|
|
Start() error
|
|
Stop()
|
|
// Run start the polling loop
|
|
Run() error
|
|
|
|
// NotifyAboutPowRequirementChange notifies the peer that POW for the host has changed
|
|
NotifyAboutPowRequirementChange(float64) error
|
|
// NotifyAboutBloomFilterChange notifies the peer that bloom filter for the host has changed
|
|
NotifyAboutBloomFilterChange([]byte) error
|
|
// NotifyAboutTopicInterestChange notifies the peer that topics for the host have changed
|
|
NotifyAboutTopicInterestChange([]TopicType) error
|
|
|
|
// SetPeerTrusted sets the value of trusted, meaning we will
|
|
// allow p2p messages from them, which is necessary to interact
|
|
// with mailservers.
|
|
SetPeerTrusted(bool)
|
|
// SetRWWriter sets the socket to read/write
|
|
SetRWWriter(p2p.MsgReadWriter)
|
|
|
|
RequestHistoricMessages(*Envelope) error
|
|
SendMessagesRequest(MessagesRequest) error
|
|
SendHistoricMessageResponse([]byte) error
|
|
SendP2PMessages([]*Envelope) error
|
|
SendRawP2PDirect([]rlp.RawValue) error
|
|
|
|
// Mark marks an envelope known to the peer so that it won't be sent back.
|
|
Mark(*Envelope)
|
|
// Marked checks if an envelope is already known to the remote peer.
|
|
Marked(*Envelope) bool
|
|
|
|
ID() []byte
|
|
IP() net.IP
|
|
EnodeID() enode.ID
|
|
|
|
PoWRequirement() float64
|
|
BloomFilter() []byte
|
|
ConfirmationsEnabled() bool
|
|
}
|
|
|
|
// WakuHost is the local instance of waku, which both interacts with remote clients
|
|
// (peers) and local clients (through RPC API)
|
|
type WakuHost interface {
|
|
// HandlePeer handles the connection of a new peer
|
|
HandlePeer(Peer, p2p.MsgReadWriter) error
|
|
// MaxMessageSize returns the maximum accepted message size.
|
|
MaxMessageSize() uint32
|
|
// LightClientMode returns whether the host is running in light client mode
|
|
LightClientMode() bool
|
|
// Mailserver returns whether the host is running a mailserver
|
|
Mailserver() bool
|
|
// LightClientModeConnectionRestricted indicates that connection to light client in light client mode not allowed
|
|
LightClientModeConnectionRestricted() bool
|
|
// ConfirmationsEnabled returns true if message confirmations are enabled.
|
|
ConfirmationsEnabled() bool
|
|
// RateLimits returns the current rate limits for the host
|
|
RateLimits() RateLimits
|
|
// MinPow returns the MinPow for the host
|
|
MinPow() float64
|
|
// BloomFilterMode returns whether the host is using bloom filter
|
|
BloomFilterMode() bool
|
|
// BloomFilter returns the bloom filter for the host
|
|
BloomFilter() []byte
|
|
//TopicInterest returns the topics for the host
|
|
TopicInterest() []TopicType
|
|
// IsEnvelopeCached checks if envelope with specific hash has already been received and cached.
|
|
IsEnvelopeCached(common.Hash) bool
|
|
// Envelopes returns all the envelopes queued
|
|
Envelopes() []*Envelope
|
|
SendEnvelopeEvent(EnvelopeEvent) int
|
|
// OnNewEnvelopes handles newly received envelopes from a peer
|
|
OnNewEnvelopes([]*Envelope, Peer) ([]EnvelopeError, error)
|
|
// OnNewP2PEnvelopes handles envelopes received though the P2P
|
|
// protocol (i.e from a mailserver in most cases)
|
|
OnNewP2PEnvelopes([]*Envelope) error
|
|
// OnMessagesResponse handles when the peer receive a message response
|
|
// from a mailserver
|
|
OnMessagesResponse(MessagesResponse, Peer) error
|
|
// OnMessagesRequest handles when the peer receive a message request
|
|
// this only works if the peer is a mailserver
|
|
OnMessagesRequest(MessagesRequest, Peer) error
|
|
// OnDeprecatedMessagesRequest handles when the peer receive a message request
|
|
// using the *Envelope format. Currently the only production client (status-react)
|
|
// is exclusively using this one.
|
|
OnDeprecatedMessagesRequest(*Envelope, Peer) error
|
|
|
|
OnBatchAcknowledged(common.Hash, Peer) error
|
|
OnP2PRequestCompleted([]byte, Peer) error
|
|
}
|