Documentation ¶
Index ¶
- Constants
- Variables
- func BytesToUintBigEndian(b []byte) (res uint64)
- func BytesToUintLittleEndian(b []byte) (res uint64)
- func ContainsOnlyZeros(data []byte) bool
- func GenerateRandomID() (id string, err error)
- func GenerateSecureRandomData(length int) ([]byte, error)
- func IsPubKeyEqual(a, b *ecdsa.PublicKey) bool
- func ValidateDataIntegrity(k []byte, expectedSize int) bool
- func ValidatePublicKey(k *ecdsa.PublicKey) bool
- type ContentTopicToFilter
- type EnvelopeError
- type EnvelopeEvent
- type EventType
- type Filter
- type FilterSet
- type Filters
- func (fs *Filters) All() []*Filter
- func (fs *Filters) AllTopics() []TopicType
- func (fs *Filters) Get(id string) *Filter
- func (fs *Filters) GetFilters() map[string]*Filter
- func (fs *Filters) GetWatchersByTopic(pubsubTopic string, contentTopic TopicType) []*Filter
- func (fs *Filters) Install(watcher *Filter) (string, error)
- func (fs *Filters) NotifyWatchers(recvMessage *ReceivedMessage) bool
- func (fs *Filters) Uninstall(id string) bool
- type Measure
- type MemoryMessageStore
- type MessageParams
- type MessageStore
- type MessageType
- type MessagesResponse
- type PubsubTopicToContentTopic
- type ReceivedMessage
- type StatsTracker
- func (s *StatsTracker) AddDownload(input interface{})
- func (s *StatsTracker) AddDownloadBytes(size uint64)
- func (s *StatsTracker) AddUpload(input interface{})
- func (s *StatsTracker) AddUploadBytes(size uint64)
- func (s *StatsTracker) GetRatePerSecond() (uploadRate uint64, downloadRate uint64)
- func (s *StatsTracker) GetStats() types.StatsSummary
- type TopicSet
- type TopicType
Constants ¶
const ( TopicLength = 4 // in bytes AESKeyLength = 32 // in bytes KeyIDSize = 32 // in bytes DefaultMaxMessageSize = uint32(1 << 20) // DefaultMaximumMessageSize is 1mb. )
Waku protocol parameters
Variables ¶
var ( EnvelopesReceivedCounter = prom.NewCounter(prom.CounterOpts{ Name: "waku2_envelopes_received_total", Help: "Number of envelopes received.", }) EnvelopesValidatedCounter = prom.NewCounter(prom.CounterOpts{ Name: "waku2_envelopes_validated_total", Help: "Number of envelopes processed successfully.", }) EnvelopesRejectedCounter = prom.NewCounterVec(prom.CounterOpts{ Name: "waku2_envelopes_rejected_total", Help: "Number of envelopes rejected.", }, []string{"reason"}) EnvelopesCacheFailedCounter = prom.NewCounterVec(prom.CounterOpts{ Name: "waku2_envelopes_cache_failures_total", Help: "Number of envelopes which failed to be cached.", }, []string{"type"}) EnvelopesCachedCounter = prom.NewCounterVec(prom.CounterOpts{ Name: "waku2_envelopes_cached_total", Help: "Number of envelopes cached.", }, []string{"cache"}) EnvelopesSizeMeter = prom.NewHistogram(prom.HistogramOpts{ Name: "waku2_envelopes_size_bytes", Help: "Size of processed Waku envelopes in bytes.", Buckets: prom.ExponentialBuckets(256, 4, 10), }) )
Functions ¶
func BytesToUintBigEndian ¶
BytesToUintBigEndian converts the slice to 64-bit unsigned integer.
func BytesToUintLittleEndian ¶
BytesToUintLittleEndian converts the slice to 64-bit unsigned integer.
func ContainsOnlyZeros ¶
ContainsOnlyZeros checks if the data contain only zeros.
func GenerateRandomID ¶
GenerateRandomID generates a random string, which is then returned to be used as a key id
func GenerateSecureRandomData ¶
GenerateSecureRandomData generates random data where extra security is required. The purpose of this function is to prevent some bugs in software or in hardware from delivering not-very-random data. This is especially useful for AES nonce, where true randomness does not really matter, but it is very important to have a unique nonce for every message.
func IsPubKeyEqual ¶
IsPubKeyEqual checks that two public keys are equal
func ValidateDataIntegrity ¶
ValidateDataIntegrity returns false if the data have the wrong or contains all zeros, which is the simplest and the most common bug.
func ValidatePublicKey ¶
ValidatePublicKey checks the format of the given public key.
Types ¶
type ContentTopicToFilter ¶ added in v0.166.1
type EnvelopeError ¶
EnvelopeError code and optional description of the error.
type EnvelopeEvent ¶
type EnvelopeEvent struct { Event EventType Topic TopicType Hash common.Hash Batch common.Hash Peer enode.ID Data interface{} }
EnvelopeEvent represents an envelope event.
type EventType ¶
type EventType string
EventType used to define known waku events.
const ( // EventEnvelopeSent fires when envelope was sent to a peer. EventEnvelopeSent EventType = "envelope.sent" // EventEnvelopeExpired fires when envelop expired EventEnvelopeExpired EventType = "envelope.expired" // EventEnvelopeReceived is sent once envelope was received from a peer. // EventEnvelopeReceived must be sent to the feed even if envelope was previously in the cache. // And event, ideally, should contain information about peer that sent envelope to us. EventEnvelopeReceived EventType = "envelope.received" // EventBatchAcknowledged is sent when batch of envelopes was acknowledged by a peer. EventBatchAcknowledged EventType = "batch.acknowledged" // EventEnvelopeAvailable fires when envelop is available for filters EventEnvelopeAvailable EventType = "envelope.available" )
type Filter ¶
type Filter struct { Src *ecdsa.PublicKey // Sender of the message KeyAsym *ecdsa.PrivateKey // Private Key of recipient KeySym []byte // Key associated with the Topic PubsubTopic string // Pubsub topic used to filter messages with ContentTopics TopicSet // ContentTopics to filter messages with SymKeyHash common.Hash // The Keccak256Hash of the symmetric key, needed for optimization Messages MessageStore // contains filtered or unexported fields }
Filter represents a Waku message filter
func (*Filter) MatchMessage ¶
func (f *Filter) MatchMessage(msg *ReceivedMessage) bool
MatchMessage checks if the filter matches an already decrypted message (i.e. a Message that has already been handled by MatchEnvelope when checked by a previous filter). Topics are not checked here, since this is done by topic matchers.
func (*Filter) Retrieve ¶
func (f *Filter) Retrieve() []*ReceivedMessage
Retrieve will return the list of all received messages associated to a filter.
func (*Filter) Trigger ¶
func (f *Filter) Trigger(msg *ReceivedMessage)
Trigger adds a yet-unknown message to the filter's list of received messages.
type Filters ¶
Filters represents a collection of filters
func NewFilters ¶
NewFilters returns a newly created filter collection
func (*Filters) GetFilters ¶ added in v0.167.6
func (*Filters) GetWatchersByTopic ¶
GetWatchersByTopic returns a slice containing the filters that match a specific topic
func (*Filters) NotifyWatchers ¶
func (fs *Filters) NotifyWatchers(recvMessage *ReceivedMessage) bool
NotifyWatchers notifies any filter that has declared interest for the envelope's topic.
type MemoryMessageStore ¶
type MemoryMessageStore struct {
// contains filtered or unexported fields
}
MemoryMessageStore represents messages stored in a memory hash table.
func NewMemoryMessageStore ¶
func NewMemoryMessageStore() *MemoryMessageStore
NewMemoryMessageStore returns pointer to an instance of the MemoryMessageStore.
func (*MemoryMessageStore) Add ¶
func (store *MemoryMessageStore) Add(msg *ReceivedMessage) error
Add adds message to store.
func (*MemoryMessageStore) Pop ¶
func (store *MemoryMessageStore) Pop() ([]*ReceivedMessage, error)
Pop returns all available messages and cleans the store.
type MessageParams ¶
type MessageParams struct { Src *ecdsa.PrivateKey Dst *ecdsa.PublicKey KeySym []byte Topic TopicType Payload []byte Padding []byte }
MessageParams specifies the exact way a message should be wrapped into an Envelope.
type MessageStore ¶
type MessageStore interface { Add(*ReceivedMessage) error Pop() ([]*ReceivedMessage, error) }
MessageStore defines interface for temporary message store.
type MessageType ¶ added in v0.91.13
type MessageType = string
MessageType represents where this message comes from
const ( RelayedMessageType MessageType = "relay" StoreMessageType MessageType = "store" SendMessageType MessageType = "send" MissingMessageType MessageType = "missing" )
type MessagesResponse ¶
type MessagesResponse struct { // Hash is a hash of all envelopes sent in the single batch. Hash common.Hash // Per envelope error. Errors []EnvelopeError }
MessagesResponse sent as a response after processing batch of envelopes.
type PubsubTopicToContentTopic ¶ added in v0.166.1
type PubsubTopicToContentTopic = map[string]ContentTopicToFilter
type ReceivedMessage ¶
type ReceivedMessage struct { Envelope *protocol.Envelope // Wrapped Waku Message MsgType MessageType Data []byte Padding []byte Signature []byte Sent uint32 // Time when the message was posted into the network in seconds Src *ecdsa.PublicKey // Message recipient (identity used to decode the message) Dst *ecdsa.PublicKey // Message recipient (identity used to decode the message) PubsubTopic string ContentTopic TopicType SymKeyHash common.Hash // The Keccak256Hash of the key Processed atomic.Bool // contains filtered or unexported fields }
ReceivedMessage represents a data packet to be received through the WakuV2 protocol and successfully decrypted.
func NewReceivedMessage ¶
func NewReceivedMessage(env *protocol.Envelope, msgType MessageType) *ReceivedMessage
func (*ReceivedMessage) Hash ¶
func (msg *ReceivedMessage) Hash() common.Hash
Hash returns the SHA3 hash of the envelope, calculating it if not yet done.
func (*ReceivedMessage) Open ¶
func (msg *ReceivedMessage) Open(watcher *Filter) (result *ReceivedMessage)
Open tries to decrypt an message, and populates the message fields in case of success.
type StatsTracker ¶ added in v0.83.8
type StatsTracker struct { Uploads []Measure Downloads []Measure // contains filtered or unexported fields }
func (*StatsTracker) AddDownload ¶ added in v0.83.8
func (s *StatsTracker) AddDownload(input interface{})
func (*StatsTracker) AddDownloadBytes ¶ added in v0.83.8
func (s *StatsTracker) AddDownloadBytes(size uint64)
func (*StatsTracker) AddUpload ¶ added in v0.83.8
func (s *StatsTracker) AddUpload(input interface{})
func (*StatsTracker) AddUploadBytes ¶ added in v0.83.8
func (s *StatsTracker) AddUploadBytes(size uint64)
func (*StatsTracker) GetRatePerSecond ¶ added in v0.83.8
func (s *StatsTracker) GetRatePerSecond() (uploadRate uint64, downloadRate uint64)
func (*StatsTracker) GetStats ¶ added in v0.83.8
func (s *StatsTracker) GetStats() types.StatsSummary
type TopicSet ¶ added in v0.167.6
type TopicSet map[TopicType]struct{}
func NewTopicSet ¶ added in v0.167.6
func NewTopicSetFromBytes ¶ added in v0.167.6
func (TopicSet) ContentTopics ¶ added in v0.182.41
type TopicType ¶
type TopicType [TopicLength]byte
TopicType represents a cryptographically secure, probabilistic partial classifications of a message, determined as the first (leftmost) 4 bytes of the SHA3 hash of some arbitrary data given by the original author of the message.
func BytesToTopic ¶
BytesToTopic converts from the byte array representation of a topic into the TopicType type.
func ExtractTopicFromContentTopic ¶ added in v0.83.12
func StringToTopic ¶
func (TopicType) ContentTopic ¶ added in v0.83.12
Converts a topic to its 23/WAKU2-TOPICS representation
func (TopicType) MarshalText ¶
MarshalText returns the hex representation of t.
func (*TopicType) UnmarshalText ¶
UnmarshalText parses a hex representation to a topic.