go-waku/cmd/waku/options.go

186 lines
5.6 KiB
Go
Raw Normal View History

2023-07-06 21:40:57 +00:00
package main
import (
"crypto/ecdsa"
"time"
"github.com/ethereum/go-ethereum/common"
"github.com/multiformats/go-multiaddr"
"github.com/urfave/cli/v2"
"github.com/waku-org/go-waku/waku/cliutils"
)
2022-07-25 15:28:17 +00:00
// DiscV5Options are settings to enable a modified version of Ethereums Node
// Discovery Protocol v5 as a means for ambient node discovery.
2021-11-17 16:19:42 +00:00
type DiscV5Options struct {
Enable bool
Nodes cli.StringSlice
Port uint
AutoUpdate bool
2021-11-17 16:19:42 +00:00
}
2022-07-25 15:28:17 +00:00
// RelayOptions are settings to enable the relay protocol which is a pubsub
// approach to peer-to-peer messaging with a strong focus on privacy,
// censorship-resistance, security and scalability.
type RelayOptions struct {
Enable bool
Topics cli.StringSlice
ProtectedTopics []cliutils.ProtectedTopic
PubSubTopics cli.StringSlice
ContentTopics cli.StringSlice
PeerExchange bool
MinRelayPeersToPublish int
}
2023-07-06 21:40:57 +00:00
// RLNRelayOptions are settings used to enable RLN Relay. This is a protocol
// used to rate limit messages and penalize those attempting to send more than
// N messages per epoch
2022-07-05 21:28:34 +00:00
type RLNRelayOptions struct {
Enable bool
2022-09-11 21:08:58 +00:00
CredentialsPath string
2022-11-08 20:20:08 +00:00
CredentialsPassword string
TreePath string
MembershipIndex *uint
2022-07-05 21:28:34 +00:00
Dynamic bool
ETHClientAddress string
MembershipContractAddress common.Address
2022-07-05 21:28:34 +00:00
}
2022-07-25 15:28:17 +00:00
// FilterOptions are settings used to enable filter protocol. This is a protocol
// that enables subscribing to messages that a peer receives. This is a more
// lightweight version of WakuRelay specifically designed for bandwidth
// restricted devices.
type FilterOptions struct {
Enable bool
2023-04-13 19:28:46 +00:00
UseV1 bool
DisableFullNode bool
Nodes []multiaddr.Multiaddr
2023-04-13 19:28:46 +00:00
NodesV1 []multiaddr.Multiaddr
Timeout time.Duration
}
2021-10-09 18:18:53 +00:00
// LightpushOptions are settings used to enable the lightpush protocol. This is
// a lightweight protocol used to avoid having to run the relay protocol which
// is more resource intensive. With this protocol a message is pushed to a peer
// that supports both the lightpush protocol and relay protocol. That peer will
// broadcast the message and return a confirmation that the message was
// broadcasted
type LightpushOptions struct {
Enable bool
Nodes []multiaddr.Multiaddr
}
2021-10-09 18:18:53 +00:00
// StoreOptions are settings used for enabling the store protocol, used to
// retrieve message history from other nodes as well as acting as a store
// node and provide message history to nodes that ask for it.
type StoreOptions struct {
Enable bool
2022-11-25 20:54:11 +00:00
DatabaseURL string
RetentionTime time.Duration
RetentionMaxMessages int
//ResumeNodes []multiaddr.Multiaddr
Nodes []multiaddr.Multiaddr
Vacuum bool
Migration bool
}
2021-10-09 18:18:53 +00:00
// DNSDiscoveryOptions are settings used for enabling DNS-based discovery
// protocol that stores merkle trees in DNS records which contain connection
// information for nodes. It's very useful for bootstrapping a p2p network.
type DNSDiscoveryOptions struct {
Enable bool
URLs cli.StringSlice
Nameserver string
}
2021-10-09 18:18:53 +00:00
// MetricsOptions are settings used to start a prometheus server for obtaining
// useful node metrics to monitor the health of behavior of the go-waku node.
type MetricsOptions struct {
Enable bool
Address string
Port int
}
// RPCServerOptions are settings used to start a json rpc server
type RPCServerOptions struct {
Enable bool
Port int
Address string
Admin bool
RelayCacheCapacity int
}
// RESTServerOptions are settings used to start a rest http server
type RESTServerOptions struct {
Enable bool
Port int
Address string
Admin bool
RelayCacheCapacity int
}
2022-07-25 15:28:17 +00:00
// WSOptions are settings used for enabling websockets and secure websockets
// support
2022-03-22 13:12:58 +00:00
type WSOptions struct {
Enable bool
2022-08-25 20:36:04 +00:00
WSPort int
WSSPort int
2022-03-22 13:12:58 +00:00
Address string
Secure bool
KeyPath string
CertPath string
}
2022-10-23 13:13:43 +00:00
// PeerExchangeOptions are settings used with the peer exchange protocol
type PeerExchangeOptions struct {
Enable bool
Node *multiaddr.Multiaddr
}
2023-07-06 21:40:57 +00:00
// RendezvousOptions are settings used with the rendezvous protocol
2023-03-09 15:48:25 +00:00
type RendezvousOptions struct {
Enable bool
Nodes []multiaddr.Multiaddr
}
// NodeOptions contains all the available features and settings that can be
2021-10-09 18:18:53 +00:00
// configured via flags when executing go-waku as a service.
type NodeOptions struct {
2023-05-24 15:34:35 +00:00
Port int
Address string
2023-07-06 21:40:57 +00:00
DNS4DomainName string
2023-05-24 15:34:35 +00:00
NodeKey *ecdsa.PrivateKey
KeyFile string
KeyPasswd string
StaticNodes []multiaddr.Multiaddr
KeepAlive time.Duration
AdvertiseAddresses []multiaddr.Multiaddr
ShowAddresses bool
CircuitRelay bool
ResourceScalingMemoryPercent float64
ResourceScalingFDPercent float64
LogLevel string
LogEncoding string
LogOutput string
NAT string
ExtIP string
PersistPeers bool
UserAgent string
PProf bool
MaxPeerConnections int
2022-10-23 13:13:43 +00:00
PeerExchange PeerExchangeOptions
2022-10-26 13:43:28 +00:00
Websocket WSOptions
Relay RelayOptions
Store StoreOptions
Filter FilterOptions
LightPush LightpushOptions
RLNRelay RLNRelayOptions
DiscV5 DiscV5Options
DNSDiscovery DNSDiscoveryOptions
2023-03-09 15:48:25 +00:00
Rendezvous RendezvousOptions
2022-10-26 13:43:28 +00:00
Metrics MetricsOptions
RPCServer RPCServerOptions
RESTServer RESTServerOptions
}