go-waku/cmd/waku/options.go

191 lines
5.8 KiB
Go
Raw Normal View History

2023-07-06 17:40:57 -04: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 11:28:17 -04: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 12:19:42 -04:00
type DiscV5Options struct {
Enable bool
Nodes cli.StringSlice
Port uint
AutoUpdate bool
2021-11-17 12:19:42 -04:00
}
2022-07-25 11:28:17 -04: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
2023-11-03 09:47:15 -04:00
BridgeTopics []cliutils.BridgeTopic
ProtectedTopics []cliutils.ProtectedTopic
PubSubTopics cli.StringSlice
ContentTopics cli.StringSlice
PeerExchange bool
MinRelayPeersToPublish int
}
2023-07-06 17:40:57 -04: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 17:28:34 -04:00
type RLNRelayOptions struct {
Enable bool
2022-09-11 17:08:58 -04:00
CredentialsPath string
2022-11-08 16:20:08 -04:00
CredentialsPassword string
TreePath string
MembershipIndex *uint
2022-07-05 17:28:34 -04:00
Dynamic bool
ETHClientAddress string
MembershipContractAddress common.Address
2022-07-05 17:28:34 -04:00
}
2022-07-25 11:28:17 -04: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 15:28:46 -04:00
UseV1 bool
DisableFullNode bool
Nodes []multiaddr.Multiaddr
2023-04-13 15:28:46 -04:00
NodesV1 []multiaddr.Multiaddr
Timeout time.Duration
}
2021-10-09 14:18:53 -04: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 14:18:53 -04: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 16:54:11 -04:00
DatabaseURL string
RetentionTime time.Duration
RetentionMaxMessages int
//ResumeNodes []multiaddr.Multiaddr
Nodes []multiaddr.Multiaddr
Vacuum bool
Migration bool
}
2021-10-09 14:18:53 -04: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 14:18:53 -04: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
FilterCacheCapacity int
}
2022-07-25 11:28:17 -04:00
// WSOptions are settings used for enabling websockets and secure websockets
// support
2022-03-22 09:12:58 -04:00
type WSOptions struct {
Enable bool
2022-08-25 16:36:04 -04:00
WSPort int
WSSPort int
2022-03-22 09:12:58 -04:00
Address string
Secure bool
KeyPath string
CertPath string
}
2022-10-23 09:13:43 -04:00
// PeerExchangeOptions are settings used with the peer exchange protocol
type PeerExchangeOptions struct {
Enable bool
Node *multiaddr.Multiaddr
}
2023-07-06 17:40:57 -04:00
// RendezvousOptions are settings used with the rendezvous protocol
2023-03-09 11:48:25 -04:00
type RendezvousOptions struct {
Enable bool
Nodes []multiaddr.Multiaddr
}
// NodeOptions contains all the available features and settings that can be
2021-10-09 14:18:53 -04:00
// configured via flags when executing go-waku as a service.
type NodeOptions struct {
2023-05-24 11:34:35 -04:00
Port int
Address string
2023-10-15 15:16:40 -04:00
ClusterID uint
2023-07-06 17:40:57 -04:00
DNS4DomainName string
2023-05-24 11:34:35 -04:00
NodeKey *ecdsa.PrivateKey
KeyFile string
KeyPasswd string
StaticNodes []multiaddr.Multiaddr
KeepAlive time.Duration
AdvertiseAddresses []multiaddr.Multiaddr
ShowAddresses bool
CircuitRelay bool
2023-09-28 16:08:40 -04:00
ForceReachability string
2023-05-24 11:34:35 -04:00
ResourceScalingMemoryPercent float64
ResourceScalingFDPercent float64
LogLevel string
LogEncoding string
LogOutput string
NAT string
ExtIP string
PersistPeers bool
UserAgent string
PProf bool
MaxPeerConnections int
PeerStoreCapacity int
2022-10-23 09:13:43 -04:00
PeerExchange PeerExchangeOptions
2022-10-26 09:43:28 -04:00
Websocket WSOptions
Relay RelayOptions
Store StoreOptions
Filter FilterOptions
LightPush LightpushOptions
RLNRelay RLNRelayOptions
DiscV5 DiscV5Options
DNSDiscovery DNSDiscoveryOptions
2023-03-09 11:48:25 -04:00
Rendezvous RendezvousOptions
2022-10-26 09:43:28 -04:00
Metrics MetricsOptions
RPCServer RPCServerOptions
RESTServer RESTServerOptions
}