Documentation ¶
Index ¶
Constants ¶
const ( FleetUndefined = "" FleetBeta = "eth.beta" FleetStaging = "eth.staging" )
Define available fleets.
const ( // ClientIdentifier is client identifier to advertise over the network ClientIdentifier = "StatusIM" // DataDir is default data directory used by statusd executable DataDir = "statusd-data" // StatusDatabase path relative to DataDir. StatusDatabase = "status-db" // KeyStoreDir is default directory where private keys are stored, relative to DataDir KeyStoreDir = "keystore" // IPCFile is filename of exposed IPC RPC Server IPCFile = "geth.ipc" // RPCEnabledDefault is the default state of whether the http rpc server is supposed // to be started along with a node. RPCEnabledDefault = false // HTTPHost is host interface for the HTTP RPC server HTTPHost = "localhost" // HTTPPort is HTTP RPC port (replaced in unit tests) HTTPPort = 8545 // ListenAddr is an IP address and port of this node (e.g. 127.0.0.1:30303). ListenAddr = ":0" // APIModules is a list of modules to expose via HTTP and `CallRPC()` binding. // We also expose all handlers registered with `rpc.Client.RegisterHandler` to `CallRPC()` binding. APIModules = "eth,net,web3,peer" // SendTransactionMethodName defines the name for a giving transaction. SendTransactionMethodName = "eth_sendTransaction" // AccountsMethodName defines the name for listing the currently signed accounts. AccountsMethodName = "eth_accounts" // PersonalSignMethodName defines the name for `personal.sign` API. PersonalSignMethodName = "personal_sign" // PersonalRecoverMethodName defines the name for `personal.recover` API. PersonalRecoverMethodName = "personal_ecRecover" // MaxPeers is the maximum number of global peers MaxPeers = 25 // MaxPendingPeers is the maximum number of peers that can be pending in the // handshake phase, counted separately for inbound and outbound connections. MaxPendingPeers = 0 // DefaultGas default amount of gas used for transactions DefaultGas = 180000 // DefaultFileDescriptorLimit is fd limit that database can use DefaultFileDescriptorLimit = uint64(2048) // DatabaseCache is memory (in MBs) allocated to internal caching (min 16MB / database forced) DatabaseCache = 16 // LogFile defines where to write logs to LogFile = "" // LogLevel defines the minimum log level to report LogLevel = "ERROR" // LogLevelSuccinct defines the log level when only errors are reported. // Useful when the default INFO level becomes too verbose. LogLevelSuccinct = "ERROR" // LogToStderr defines whether logged info should also be output to os.Stderr LogToStderr = true // WhisperDataDir is directory where Whisper data is stored, relative to DataDir WhisperDataDir = "wnode" // WhisperMinimumPoW amount of work for Whisper message to be added to sending queue WhisperMinimumPoW = 0.001 // WhisperTTL is time to live for messages, in seconds WhisperTTL = 120 // FirebaseNotificationTriggerURL is URL where FCM notification requests are sent to FirebaseNotificationTriggerURL = "https://fcm.googleapis.com/fcm/send" // MainnetEthereumNetworkURL is URL where the upstream ethereum network is loaded to // allow us avoid syncing node. MainnetEthereumNetworkURL = "https://mainnet.infura.io/nKmXgiFgc2KqtoQ8BCGJ" // RopstenEthereumNetworkURL is URL where the upstream ethereum network is loaded to // allow us avoid syncing node. RopstenEthereumNetworkURL = "https://ropsten.infura.io/nKmXgiFgc2KqtoQ8BCGJ" // RinkebyEthereumNetworkURL is URL where the upstream ethereum network is loaded to // allow us avoid syncing node. RinkebyEthereumNetworkURL = "https://rinkeby.infura.io/nKmXgiFgc2KqtoQ8BCGJ" // MainNetworkID is id of the main network MainNetworkID = 1 // RopstenNetworkID is id of a test network (on PoW) RopstenNetworkID = 3 // RinkebyNetworkID is id of a test network (on PoA) RinkebyNetworkID = 4 // StatusChainNetworkID is id of a test network (private chain) StatusChainNetworkID = 777 // WhisperDiscv5Topic used to register and search for whisper peers using discovery v5. WhisperDiscv5Topic = discv5.Topic("whisper") )
Variables ¶
var ( ErrMissingDataDir = errors.New("missing required 'DataDir' parameter") ErrMissingNetworkID = errors.New("missing required 'NetworkID' parameter") ErrEmptyPasswordFile = errors.New("password file cannot be empty") ErrNoPasswordFileValueSet = errors.New("password file path not set") ErrEmptyAuthorizationKeyFile = errors.New("authorization key file cannot be empty") ErrAuthorizationKeyFileNotSet = errors.New("authorization key file is not set") )
errors
var ( // WhisperDiscv5Limits declares min and max limits for peers with whisper topic. WhisperDiscv5Limits = Limits{2, 2} // LesDiscoveryLimits default limits used if LES and discovery are enabled. LesDiscoveryLimits = Limits{2, 2} )
var Version string
Version relies on a git tag and is passed by linker's '-ldflags' flag.
Functions ¶
func GetStatusHome ¶ added in v0.12.0
func GetStatusHome() string
GetStatusHome gets home directory of status-go
func LesTopic ¶ added in v0.13.0
LesTopic returns discovery v5 topic derived from genesis of the provided network. 1 - mainnet, 4 - ropsten
func NewValidator ¶
func NewValidator() *validator.Validate
NewValidator returns a new validator.Validate.
Types ¶
type Cluster ¶ added in v0.12.0
type Cluster struct { StaticNodes []string `json:"staticnodes"` BootNodes []string `json:"bootnodes"` MailServers []string `json:"mailservers"` // list of trusted mail servers RendezvousNodes []string `json:"rendezvousnodes"` }
Cluster defines a list of Ethereum nodes.
func ClusterForFleet ¶ added in v0.12.0
ClusterForFleet returns a cluster for a given fleet.
type ClusterConfig ¶
type ClusterConfig struct { // Enabled flag specifies whether feature is enabled Enabled bool // Fleet is a type of selected fleet. Fleet string // StaticNodes lists the static nodes taken from compiled or passed cluster.json StaticNodes []string // BootNodes list of cluster peer nodes for a given network (Mainnet, Ropsten, Rinkeby, Homestead), // for a given mode (production vs development) BootNodes []string // TrustedMailServers is a list of verified Mail Servers. TrustedMailServers []string // RendezvousNodes is a rendezvous discovery server. RendezvousNodes []string }
ClusterConfig holds configuration for supporting cluster peers, which is a temporary means for mobile devices to get connected to Ethereum network (UDP-based discovery may not be available, so we need means to discover the network manually).
func (*ClusterConfig) String ¶
func (c *ClusterConfig) String() string
String dumps config object as nicely indented JSON
type FirebaseConfig ¶
type FirebaseConfig struct { // AuthorizationKeyFile file path that contains FCM authorization key AuthorizationKeyFile string // NotificationTriggerURL URL used to send push notification requests to NotificationTriggerURL string }
FirebaseConfig holds FCM-related configuration
func (*FirebaseConfig) ReadAuthorizationKeyFile ¶
func (c *FirebaseConfig) ReadAuthorizationKeyFile() ([]byte, error)
ReadAuthorizationKeyFile reads and loads FCM authorization key
type LightEthConfig ¶
type LightEthConfig struct { // Enabled flag specifies whether protocol is enabled Enabled bool // Genesis is JSON to seed the chain database with Genesis string // DatabaseCache is memory (in MBs) allocated to internal caching (min 16MB / database forced) DatabaseCache int }
LightEthConfig holds LES-related configuration Status nodes are always lightweight clients (due to mobile platform constraints)
type NodeConfig ¶
type NodeConfig struct { // NetworkID sets network to use for selecting peers to connect to NetworkID uint64 `json:"NetworkId" validate:"required"` // DataDir is the file system folder the node should use for any data storage needs. DataDir string `validate:"required"` // KeyStoreDir is the file system folder that contains private keys. // If KeyStoreDir is empty, the default location is the "keystore" subdirectory of DataDir. KeyStoreDir string // NodeKeyFile is a filename with node ID (private key) // This file should contain a valid secp256k1 private key that will be used for both // remote peer identification as well as network traffic encryption. NodeKeyFile string // NoDiscovery set to true will disable discovery protocol. NoDiscovery bool // Rendezvous enables discovery protocol. Rendezvous bool // ListenAddr is an IP address and port of this node (e.g. 127.0.0.1:30303). ListenAddr string // AdvertiseAddr is a public IP address the node wants to be found with. // It is especially useful when using floating IPs attached to a server. AdvertiseAddr string // Name sets the instance name of the node. It must not contain the / character. Name string `validate:"excludes=/"` // Version exposes program's version. It is used in the devp2p node identifier. Version string // APIModules is a comma-separated list of API modules exposed via *any* (HTTP/WS/IPC) RPC interface. APIModules string // HTTPHost is the host interface on which to start the HTTP RPC server. // Pass empty string if no HTTP RPC interface needs to be started. HTTPHost string // RPCEnabled specifies whether the http RPC server is to be enabled by default. RPCEnabled bool // HTTPPort is the TCP port number on which to start the Geth's HTTP RPC server. HTTPPort int // IPCFile is filename of exposed IPC RPC Server IPCFile string // IPCEnabled specifies whether IPC-RPC Server is enabled or not IPCEnabled bool // TLSEnabled specifies whether TLS support should be enabled on node or not // TLS support is only planned in go-ethereum, so we are using our own patch. TLSEnabled bool // MaxPeers is the maximum number of (global) peers that can be connected. // Set to zero, if only static or trusted peers are allowed to connect. MaxPeers int // MaxPendingPeers is the maximum number of peers that can be pending in the // handshake phase, counted separately for inbound and outbound connections. MaxPendingPeers int // LogEnabled enables the logger LogEnabled bool `json:"LogEnabled"` // LogFile is filename where exposed logs get written to LogFile string // LogLevel defines minimum log level. Valid names are "ERROR", "WARN", "INFO", "DEBUG", and "TRACE". LogLevel string `validate:"eq=ERROR|eq=WARN|eq=INFO|eq=DEBUG|eq=TRACE"` // LogToStderr defines whether logged info should also be output to os.Stderr LogToStderr bool // UpstreamConfig extra config for providing upstream infura server. UpstreamConfig UpstreamRPCConfig `json:"UpstreamConfig"` // ClusterConfigFile contains the file name of the cluster configuration. If // empty the statical configuration data will be taken. ClusterConfigFile string `json:"ClusterConfigFile"` // ClusterConfig extra configuration for supporting cluster peers. ClusterConfig *ClusterConfig `json:"ClusterConfig," validate:"structonly"` // LightEthConfig extra configuration for LES LightEthConfig *LightEthConfig `json:"LightEthConfig," validate:"structonly"` // WhisperConfig extra configuration for SHH WhisperConfig *WhisperConfig `json:"WhisperConfig," validate:"structonly"` // SwarmConfig extra configuration for Swarm and ENS SwarmConfig *SwarmConfig `json:"SwarmConfig," validate:"structonly"` // RegisterTopics a list of specific topics where the peer wants to be // discoverable. RegisterTopics []discv5.Topic `json:"RegisterTopics"` // RequiredTopics list of topics where a client wants to search for // discoverable peers with the discovery limits. RequireTopics map[discv5.Topic]Limits `json:"RequireTopics"` // StatusServiceEnabled enables status service api StatusServiceEnabled bool // DebugAPIEnabled enables debug api DebugAPIEnabled bool // MailServerRegistryAddress is the MailServerRegistry contract address MailServerRegistryAddress string // contains filtered or unexported fields }
NodeConfig stores configuration options for a node
func LoadNodeConfig ¶
func LoadNodeConfig(configJSON string) (*NodeConfig, error)
LoadNodeConfig parses incoming JSON and returned it as Config
func NewNodeConfig ¶
func NewNodeConfig(dataDir, clstrCfgFile, fleet string, networkID uint64) (*NodeConfig, error)
NewNodeConfig creates new node configuration object
func (*NodeConfig) AddAPIModule ¶
func (c *NodeConfig) AddAPIModule(m string)
AddAPIModule adds a mobule to APIModules
func (*NodeConfig) DefaultStatusChainGenesisBlock ¶
func (c *NodeConfig) DefaultStatusChainGenesisBlock() (*core.Genesis, error)
DefaultStatusChainGenesisBlock returns the StatusChain network genesis block.
func (*NodeConfig) FormatAPIModules ¶
func (c *NodeConfig) FormatAPIModules() []string
FormatAPIModules returns a slice of APIModules.
func (*NodeConfig) String ¶
func (c *NodeConfig) String() string
String dumps config object as nicely indented JSON
func (*NodeConfig) Validate ¶
func (c *NodeConfig) Validate() error
Validate checks if NodeConfig fields have valid values.
It returns nil if there are no errors, otherwise one or more errors can be returned. Multiple errors are joined with a new line.
A single error for a struct:
type TestStruct struct { TestField string `validate:"required"` }
has the following format:
Key: 'TestStruct.TestField' Error:Field validation for 'TestField' failed on the 'required' tag
type SwarmConfig ¶
type SwarmConfig struct { // Enabled flag specifies whether protocol is enabled Enabled bool }
SwarmConfig holds Swarm-related configuration
func (*SwarmConfig) String ¶
func (c *SwarmConfig) String() string
String dumps config object as nicely indented JSON
type UpstreamRPCConfig ¶
type UpstreamRPCConfig struct { // Enabled flag specifies whether feature is enabled Enabled bool // URL sets the rpc upstream host address for communication with // a non-local infura endpoint. URL string }
UpstreamRPCConfig stores configuration for upstream rpc connection.
type WhisperConfig ¶
type WhisperConfig struct { // Enabled flag specifies whether protocol is enabled Enabled bool // LightClient should be true if the node should start with an empty bloom filter and not forward messages from other nodes LightClient bool // EnableMailServer is mode when node is capable of delivering expired messages on demand EnableMailServer bool // DataDir is the file system folder Whisper should use for any data storage needs. // For instance, MailServer will use this directory to store its data. DataDir string // MinimumPoW minimum PoW for Whisper messages MinimumPoW float64 // MailServerPasswordFile contains a password for symmetric encryption with MailServer. MailServerPasswordFile string // MailServerPassword for symmetric encryption with MailServer. // (if no account file selected, then this password is used for symmetric encryption). MailServerPassword string // MailServerAsymKeyFile is a file with an asymmetric key to decrypt messages sent to MailServer. MailServerAsymKeyFile string // MailServerAsymKey is an asymmetric key to decrypt messages sent to MailServer. MailServerAsymKey *ecdsa.PrivateKey // RateLimit minimum time between queries to mail server per peer MailServerRateLimit int // MailServerCleanupPeriod time in seconds to wait to run mail server cleanup MailServerCleanupPeriod int // TTL time to live for messages, in seconds TTL int // FirebaseConfig extra configuration for Firebase Cloud Messaging FirebaseConfig *FirebaseConfig `json:"FirebaseConfig,"` // EnableNTPSync enables NTP synchronizations EnableNTPSync bool }
WhisperConfig holds SHH-related configuration
func (*WhisperConfig) ReadMailServerAsymKeyFile ¶
func (c *WhisperConfig) ReadMailServerAsymKeyFile() (err error)
ReadMailServerAsymKeyFile reads and returns a private key from a given file.
func (*WhisperConfig) ReadMailServerPasswordFile ¶
func (c *WhisperConfig) ReadMailServerPasswordFile() error
ReadMailServerPasswordFile reads and returns content of the password file
func (*WhisperConfig) String ¶
func (c *WhisperConfig) String() string
String dumps config object as nicely indented JSON