117 lines
2.0 KiB
Go
117 lines
2.0 KiB
Go
package config
|
|
|
|
import (
|
|
"encoding"
|
|
"time"
|
|
)
|
|
|
|
// Common is common config between full node and miner
|
|
type Common struct {
|
|
API API
|
|
Libp2p Libp2p
|
|
}
|
|
|
|
// FullNode is a full node config
|
|
type FullNode struct {
|
|
Common
|
|
Metrics Metrics
|
|
}
|
|
|
|
// // Common
|
|
|
|
// StorageMiner is a storage miner config
|
|
type StorageMiner struct {
|
|
Common
|
|
|
|
Storage Storage
|
|
}
|
|
|
|
// API contains configs for API endpoint
|
|
type API struct {
|
|
ListenAddress string
|
|
Timeout Duration
|
|
}
|
|
|
|
// Libp2p contains configs for libp2p
|
|
type Libp2p struct {
|
|
ListenAddresses []string
|
|
BootstrapPeers []string
|
|
ProtectedPeers []string
|
|
|
|
ConnMgrLow uint
|
|
ConnMgrHigh uint
|
|
ConnMgrGrace Duration
|
|
}
|
|
|
|
// // Full Node
|
|
|
|
type Metrics struct {
|
|
Nickname string
|
|
HeadNotifs bool
|
|
PubsubTracing bool
|
|
}
|
|
|
|
// // Storage Miner
|
|
type Storage struct {
|
|
|
|
}
|
|
|
|
func defCommon() Common {
|
|
return Common{
|
|
API: API{
|
|
ListenAddress: "/ip4/127.0.0.1/tcp/1234/http",
|
|
Timeout: Duration(30 * time.Second),
|
|
},
|
|
Libp2p: Libp2p{
|
|
ListenAddresses: []string{
|
|
"/ip4/0.0.0.0/tcp/0",
|
|
"/ip6/::/tcp/0",
|
|
},
|
|
|
|
ConnMgrLow: 150,
|
|
ConnMgrHigh: 180,
|
|
ConnMgrGrace: Duration(20 * time.Second),
|
|
},
|
|
}
|
|
|
|
}
|
|
|
|
// Default returns the default config
|
|
func DefaultFullNode() *FullNode {
|
|
return &FullNode{
|
|
Common: defCommon(),
|
|
}
|
|
}
|
|
|
|
func DefaultStorageMiner() *StorageMiner {
|
|
cfg := &StorageMiner{
|
|
Common: defCommon(),
|
|
|
|
Storage: Storage{},
|
|
}
|
|
cfg.Common.API.ListenAddress = "/ip4/127.0.0.1/tcp/2345/http"
|
|
return cfg
|
|
}
|
|
|
|
var _ encoding.TextMarshaler = (*Duration)(nil)
|
|
var _ encoding.TextUnmarshaler = (*Duration)(nil)
|
|
|
|
// Duration is a wrapper type for time.Duration
|
|
// for decoding and encoding from/to TOML
|
|
type Duration time.Duration
|
|
|
|
// UnmarshalText implements interface for TOML decoding
|
|
func (dur *Duration) UnmarshalText(text []byte) error {
|
|
d, err := time.ParseDuration(string(text))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*dur = Duration(d)
|
|
return err
|
|
}
|
|
|
|
func (dur Duration) MarshalText() ([]byte, error) {
|
|
d := time.Duration(dur)
|
|
return []byte(d.String()), nil
|
|
}
|