status-im/status-go

View on GitHub
eth-node/types/envelopes.go

Summary

Maintainability
A
0 mins
Test Coverage
package types

// Envelope represents a clear-text data packet to transmit through the Whisper
// network. Its contents may or may not be encrypted and signed.
type Envelope interface {
    Wrapped

    Hash() Hash // cached hash of the envelope to avoid rehashing every time
    Bloom() []byte
    PoW() float64
    Expiry() uint32
    TTL() uint32
    Topic() TopicType
    Size() int
}

// EventType used to define known envelope events.
type EventType string

// NOTE: This list of event names is extracted from Geth. It must be kept in sync, or otherwise a mapping layer needs to be created
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"
    // EventMailServerRequestSent fires when such request is sent.
    EventMailServerRequestSent EventType = "mailserver.request.sent"
    // EventMailServerRequestCompleted fires after mailserver sends all the requested messages
    EventMailServerRequestCompleted EventType = "mailserver.request.completed"
    // EventMailServerRequestExpired fires after mailserver the request TTL ends.
    // This event is independent and concurrent to EventMailServerRequestCompleted.
    // Request should be considered as expired only if expiry event was received first.
    EventMailServerRequestExpired EventType = "mailserver.request.expired"
    // EventMailServerEnvelopeArchived fires after an envelope has been archived
    EventMailServerEnvelopeArchived EventType = "mailserver.envelope.archived"
    // EventMailServerSyncFinished fires when the sync of messages is finished.
    EventMailServerSyncFinished EventType = "mailserver.sync.finished"
)

const (
    // EnvelopeTimeNotSynced represents the code passed to notify of a clock skew situation
    EnvelopeTimeNotSynced uint = 1000
    // EnvelopeOtherError represents the code passed to notify of a generic error situation
    EnvelopeOtherError
)

// EnvelopeEvent used for envelopes events.
type EnvelopeEvent struct {
    Event EventType
    Hash  Hash
    Batch Hash
    Peer  EnodeID
    Data  interface{}
}

// EnvelopeError code and optional description of the error.
type EnvelopeError struct {
    Hash        Hash
    Code        uint
    Description string
}

// Subscription represents a stream of events. The carrier of the events is typically a
// channel, but isn't part of the interface.
//
// Subscriptions can fail while established. Failures are reported through an error
// channel. It receives a value if there is an issue with the subscription (e.g. the
// network connection delivering the events has been closed). Only one value will ever be
// sent.
//
// The error channel is closed when the subscription ends successfully (i.e. when the
// source of events is closed). It is also closed when Unsubscribe is called.
//
// The Unsubscribe method cancels the sending of events. You must call Unsubscribe in all
// cases to ensure that resources related to the subscription are released. It can be
// called any number of times.
type Subscription interface {
    Err() <-chan error // returns the error channel
    Unsubscribe()      // cancels sending of events, closing the error channel
}