Documentation ¶
Overview ¶
package config implements the ipfs config file datastructures and utilities.
Index ¶
- Constants
- Variables
- func BootstrapPeerStrings(bps []peer.AddrInfo) []string
- func DataStorePath(configroot string) (string, error)
- func DefaultBootstrapPeers() ([]peer.AddrInfo, error)
- func DefaultTestnetBootstrapPeers() ([]peer.AddrInfo, error)
- func ExternalIP() (string, error)
- func ExternalIPWithPort(extPort, intPort int, swarmAddrs []string) (string, error)
- func Filename(configroot string) (string, error)
- func HumanOutput(value interface{}) ([]byte, error)
- func Marshal(value interface{}) ([]byte, error)
- func MigrateConfig(cfg *Config, inited, hasHval bool) bool
- func ParseBootstrapPeers(addrs []string) ([]peer.AddrInfo, error)
- func Path(configroot, extension string) (string, error)
- func PathRoot() (string, error)
- func ToMap(conf *Config) (map[string]interface{}, error)
- type API
- type Addresses
- type Config
- type ConnMgr
- type Datastore
- type Discovery
- type Experiments
- type Gateway
- type HostUI
- type Identity
- type Ipns
- type MDNS
- type Mounts
- type Profile
- type Provider
- type PubsubConfig
- type RenterUI
- type Reprovider
- type Routing
- type Services
- type Strings
- type SwarmConfig
- type Transformer
- type UI
Constants ¶
const ( // DefaultPathName is the default config dir name DefaultPathName = ".btfs" // DefaultPathRoot is the path to the default config dir location. DefaultPathRoot = "~/" + DefaultPathName // DefaultConfigFile is the filename of the configuration file DefaultConfigFile = "config" // EnvDir is the environment variable used to change the path root. EnvDir = "BTFS_PATH" )
const DefaultConnMgrGracePeriod = time.Second * 20
DefaultConnMgrGracePeriod is the default value for the connection managers grace period
const DefaultConnMgrHighWater = 900
DefaultConnMgrHighWater is the default value for the connection managers 'high water' mark
const DefaultConnMgrLowWater = 600
DefaultConnMgrLowWater is the default value for the connection managers 'low water' mark
const DefaultDataStoreDirectory = "datastore"
DefaultDataStoreDirectory is the directory to store all the local IPFS data.
const DefaultEnableAutoRelay = true
const DefaultHostsSyncEnabled = true
DefaultHostSyncEnabled is the default value for the periodic hosts sync from hub
const DefaultHostsSyncMode = hubpb.HostsReq_SCORE
DefaultHostsSyncMode is the default value for the hosts sync mode from hub
const DefaultHostsSyncModeDev = hubpb.HostsReq_TESTNET
const DefaultSwarmKey = `/key/swarm/psk/1.0.0/
/base16/
64ef95289a6b998c776927ed6e33ca8c9202ee47df90141d09f5ffeeb64b8a66`
DefaultSwarmKey is the default swarm key for mainnet BTFS
const DefaultSwarmPort = 4001
DefaultSwarmPort is the default swarm discovery port
const DefaultTestnetSwarmKey = `/key/swarm/psk/1.0.0/
/base16/
d0566ce7e71d880487a89385296ab8a454967e975955ce0e59bff7991d5539d6`
DefaultTestnetSwarmKey is the default swarm key for testnet BTFS
const IdentityTag = "Identity"
const PrivKeySelector = IdentityTag + "." + PrivKeyTag
const PrivKeyTag = "PrivKey"
Variables ¶
var DefaultBootstrapAddresses = []string{
"/ip4/18.237.54.123/tcp/4001/btfs/QmWJWGxKKaqZUW4xga2BCzT5FBtYDL8Cc5Q5jywd6xPt1g",
"/ip4/54.213.128.120/tcp/4001/btfs/QmWm3vBCRuZcJMUT9jDZysoYBb66aokmSReX26UaMk8qq5",
"/ip4/34.213.5.20/tcp/4001/btfs/QmQVQBsM7uoJy8hATjTm51uSAkx2y3iGLhSwA6LWLa7iQJ",
"/ip4/18.237.202.91/tcp/4001/btfs/QmbVFdiNkvxtc7Nni7yBWAgtHg8MuyhaZ5mDaYR2ZrhhvN",
"/ip4/13.229.45.41/tcp/4001/btfs/QmX7RZXh27AX8iv2BKLGMgPBiuUpEy8p4LFXgtXAfaZDn9",
"/ip4/54.254.227.188/tcp/4001/btfs/QmYqCq3PasrzLr3PxtLo5D6spEAJ836W9Re9Eo4zUou45U",
"/ip4/52.77.240.134/tcp/4001/btfs/QmURPwdLYesWUDB66EGXvDvwcyV44rVRqV2iGNqKN24eVu",
"/ip4/18.196.49.234/tcp/4001/btfs/QmWTTmvchTodUaVvuKZMo67xk7ZgkxJf4nBo7SZry3vGU5",
"/ip4/18.194.71.27/tcp/4001/btfs/QmYHkY5CrWcvgaDo4PfvzTQgaZtfaqRGDjwW1MrHUj8cLK",
"/ip4/54.93.47.134/tcp/4001/btfs/QmeHaHe7WvjeY37z5MYC3qYQcQcuvDwUhwTXtP3KhKLXXK",
}
DefaultBootstrapAddresses are the hardcoded bootstrap addresses for IPFS. they are nodes run by the IPFS team. docs on these later. As with all p2p networks, bootstrap is an important security concern.
NOTE: This is here -- and not inside cmd/btfs/init.go -- because of an import dependency issue. TODO: move this into a config/default/ package.
var DefaultTestnetBootstrapAddresses = []string{
"/ip4/13.59.69.165/tcp/45301/btfs/16Uiu2HAmFFwNdgSoLhfgJUPEfPEVodppRxaeZBVpAvrH5s3qSkWo",
"/ip4/13.59.69.165/tcp/34237/btfs/16Uiu2HAmDigS3SDx6g9Sp6MUfdFHvDwS8Zw8E14V6bLhCAHA3jjB",
"/ip4/13.59.69.165/tcp/43097/btfs/16Uiu2HAm7HQoEbQe1fYt4LtnG6z5TqwTrrqUv5xsnt4nukskWmAi",
"/ip4/13.59.69.165/tcp/38955/btfs/16Uiu2HAm5WrYvkJwaRP7ZAroWCfjaUxKkNssqcSmEmKJ8vXVYp1o",
"/ip4/13.59.69.165/tcp/43113/btfs/16Uiu2HAkxwtWLvxtu1Av4ia57qzbuBN2gFJ9zxcaGM6yDtyZxx7T",
"/ip4/13.229.73.63/tcp/36707/btfs/16Uiu2HAmDis3wAorW46YyNmXNk963VAAHwZ1phjHXj5yduyawAUy",
"/ip4/13.229.73.63/tcp/42741/btfs/16Uiu2HAmSfqLCyqH5qQQF8zpzPMQvWiQunhWpYtSxwGw5QR2jhgU",
"/ip4/13.229.73.63/tcp/37403/btfs/16Uiu2HAmBHwyRUETsGqjYpgPRpnMC9y39tcVYH6vKxZidCBcBeFG",
"/ip4/13.229.73.63/tcp/37739/btfs/16Uiu2HAm2oKy37KvYmiv1nnRWZwUoLPZumNKFxPzhM1t8F3KxADu",
"/ip4/13.229.73.63/tcp/38869/btfs/16Uiu2HAkz9ayzU2yXBMKuajyFAJ38DKWJhUDMWWehvEHnBYqPwqw",
"/ip4/3.126.51.74/tcp/40155/btfs/16Uiu2HAmTMEqndByECXuxk1Rg8szxMqwS3tUFFWhAUduFzwfwmfK",
"/ip4/3.126.51.74/tcp/44569/btfs/16Uiu2HAmL4QNi68nSNbedUWp1A1cRR3z3NuJqQYmAYoj19ht6iNv",
"/ip4/3.126.51.74/tcp/39703/btfs/16Uiu2HAkzF6JMx4EL2C4cLoCLyQH8t1sgyttQxPfQtNt5FZhvpxs",
"/ip4/3.126.51.74/tcp/46713/btfs/16Uiu2HAm85HXJA7xmgNxxTVdFRuRCGstvrY8nW6KqfTtkuZrZg64",
"/ip4/3.126.51.74/tcp/38131/btfs/16Uiu2HAmLvC6gRHir8FCB63seobydTTuwmxMcrBceEiBcNVZBaPw",
}
var ErrInvalidPeerAddr = errors.New("invalid peer address")
ErrInvalidPeerAddr signals an address is not a valid peer address.
var Profiles = map[string]Profile{ "server": { Description: `Disables local host discovery, recommended when running IPFS on machines with public IPv4 addresses.`, Transform: func(c *Config) error { c.Addresses.NoAnnounce = appendSingle(c.Addresses.NoAnnounce, defaultServerFilters) c.Swarm.AddrFilters = appendSingle(c.Swarm.AddrFilters, defaultServerFilters) c.Discovery.MDNS.Enabled = false c.Swarm.DisableNatPortMap = true return nil }, }, "local-discovery": { Description: `Sets default values to fields affected by the server profile, enables discovery in local networks.`, Transform: func(c *Config) error { c.Addresses.NoAnnounce = deleteEntries(c.Addresses.NoAnnounce, defaultServerFilters) c.Swarm.AddrFilters = deleteEntries(c.Swarm.AddrFilters, defaultServerFilters) c.Discovery.MDNS.Enabled = true c.Swarm.DisableNatPortMap = false return nil }, }, "test": { Description: `Reduces external interference of IPFS daemon, this is useful when using the daemon in test environments.`, Transform: func(c *Config) error { c.Addresses.API = Strings{"/ip4/127.0.0.1/tcp/0"} c.Addresses.Gateway = Strings{"/ip4/127.0.0.1/tcp/0"} c.Addresses.Swarm = []string{ "/ip4/127.0.0.1/tcp/0", } c.Swarm.DisableNatPortMap = true c.Bootstrap = []string{} c.Discovery.MDNS.Enabled = false return nil }, }, "default-networking": { Description: `Restores default network settings. Inverse profile of the test profile.`, Transform: func(c *Config) error { c.Addresses = addressesConfig() bootstrapPeers, err := DefaultBootstrapPeers() if err != nil { return err } c.Bootstrap = appendSingle(c.Bootstrap, BootstrapPeerStrings(bootstrapPeers)) c.Swarm.DisableNatPortMap = false c.Discovery.MDNS.Enabled = true return nil }, }, "announce-public": { Description: `Announce public IP when running on cloud VM or local network.`, Transform: func(c *Config) error { address, err := ExternalIP() if err != nil { return err } c.Addresses.Announce = appendSingle(c.Addresses.Announce, []string{address}) return nil }, }, "badgerds": { Description: `Replaces default datastore configuration with experimental badger datastore. If you apply this profile after ipfs init, you will need to convert your datastore to the new configuration. You can do this using ipfs-ds-convert. For more on ipfs-ds-convert see $ ipfs-ds-convert --help and $ ipfs-ds-convert convert --help WARNING: badger datastore is experimental. Make sure to backup your data frequently.`, Transform: func(c *Config) error { c.Datastore.Spec = map[string]interface{}{ "type": "measure", "prefix": "badger.datastore", "child": map[string]interface{}{ "type": "badgerds", "path": "badgerds", "syncWrites": true, "truncate": true, }, } return nil }, }, "default-datastore": { Description: `Restores default datastore configuration. If you apply this profile after ipfs init, you will need to convert your datastore to the new configuration. You can do this using ipfs-ds-convert. For more on ipfs-ds-convert see $ ipfs-ds-convert --help and $ ipfs-ds-convert convert --help `, Transform: func(c *Config) error { c.Datastore.Spec = DefaultDatastoreConfig().Spec return nil }, }, "lowpower": { Description: `Reduces daemon overhead on the system. May affect node functionality - performance of content discovery and data fetching may be degraded. `, Transform: func(c *Config) error { c.Routing.Type = "dhtclient" c.Reprovider.Interval = "0" c.Swarm.ConnMgr.LowWater = 20 c.Swarm.ConnMgr.HighWater = 40 c.Swarm.ConnMgr.GracePeriod = time.Minute.String() return nil }, }, "randomports": { Description: `Use a random port number for swarm.`, Transform: func(c *Config) error { port, err := getAvailablePort() if err != nil { return err } c.Addresses.Swarm = []string{ fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", port), fmt.Sprintf("/ip6/::/tcp/%d", port), } return nil }, }, "storage-host": { Description: `Configures necessary flags and options for node to become a storage host.`, Transform: func(c *Config) error { bootstrapPeers, err := DefaultBootstrapPeers() if err != nil { return err } c.Bootstrap = BootstrapPeerStrings(bootstrapPeers) c.Experimental.Libp2pStreamMounting = true c.Experimental.StorageHostEnabled = true c.Experimental.Analytics = true if len(c.Addresses.RemoteAPI) == 0 { c.Addresses.RemoteAPI = Strings{"/ip4/0.0.0.0/tcp/5101"} } if c.Datastore.StorageMax == "10GB" { c.Datastore.StorageMax = "1TB" } c.Services = DefaultServicesConfig() c.Swarm.SwarmKey = DefaultSwarmKey return nil }, }, "storage-host-dev": { Description: `[dev] Configures necessary flags and options for node to become a storage host.`, Transform: func(c *Config) error { if err := transformDevStorageHost(c); err != nil { return err } c.Services = DefaultServicesConfigDev() return nil }, }, "storage-host-testnet": { Description: `[testnet] Configures necessary flags and options for node to become a storage host.`, Transform: func(c *Config) error { if err := transformDevStorageHost(c); err != nil { return err } c.Services = DefaultServicesConfigTestnet() return nil }, }, "storage-client": { Description: `Configures necessary flags and options for node to pay to store files on the network.`, Transform: func(c *Config) error { bootstrapPeers, err := DefaultBootstrapPeers() if err != nil { return err } c.Bootstrap = BootstrapPeerStrings(bootstrapPeers) c.Experimental.Libp2pStreamMounting = true c.Experimental.StorageClientEnabled = true c.Experimental.HostsSyncEnabled = true c.Experimental.HostsSyncMode = DefaultHostsSyncMode.String() if len(c.Addresses.RemoteAPI) == 0 { c.Addresses.RemoteAPI = Strings{"/ip4/0.0.0.0/tcp/5101"} } c.Services = DefaultServicesConfig() c.Swarm.SwarmKey = DefaultSwarmKey return nil }, }, "storage-client-dev": { Description: `[dev] Configures necessary flags and options for node to pay to store files on the network.`, Transform: func(c *Config) error { if err := transformDevStorageClient(c); err != nil { return err } c.Services = DefaultServicesConfigDev() return nil }, }, "storage-client-testnet": { Description: `[testnet] Configures necessary flags and options for node to pay to store files on the network.`, Transform: func(c *Config) error { if err := transformDevStorageClient(c); err != nil { return err } c.Services = DefaultServicesConfigTestnet() return nil }, }, }
Profiles is a map holding configuration transformers. Docs are in docs/config.md
Functions ¶
func BootstrapPeerStrings ¶
BootstrapPeerStrings formats a list of AddrInfos as a bootstrap peer list suitable for serialization.
func DataStorePath ¶
DataStorePath returns the default data store path given a configuration root (set an empty string to have the default configuration root)
func DefaultBootstrapPeers ¶
DefaultBootstrapPeers returns the (parsed) set of default bootstrap peers. if it fails, it returns a meaningful error for the user. This is here (and not inside cmd/btfs/init) because of module dependency problems.
func DefaultTestnetBootstrapPeers ¶ added in v0.4.1
func ExternalIP ¶ added in v0.1.2
func ExternalIPWithPort ¶ added in v0.4.2
func Filename ¶
Filename returns the configuration file path given a configuration root directory. If the configuration root directory is empty, use the default one
func HumanOutput ¶
HumanOutput gets a config value ready for printing
func MigrateConfig ¶ added in v0.2.0
MigrateConfig migrates config options to the latest known version It may correct incompatible configs as well inited = just initialized in the same call hasHval = passed in Hval in the same call
func ParseBootstrapPeers ¶
ParseBootstrapPeer parses a bootstrap list into a list of AddrInfos.
func Path ¶
Path returns the path `extension` relative to the configuration root. If an empty string is provided for `configroot`, the default root is used.
Types ¶
type Addresses ¶
type Addresses struct { Swarm []string // addresses for the swarm to listen on Announce []string // swarm addresses to announce to the network NoAnnounce []string // swarm addresses not to announce to the network API Strings // address for the local API (RPC) Gateway Strings // address to listen on for BTFS HTTP object gateway RemoteAPI Strings // address to listen for remote API (RPC over libp2p) }
Addresses stores the (string) multiaddr addresses for the node.
type Config ¶
type Config struct { Identity Identity // local node's peer identity Datastore Datastore // local node's storage Addresses Addresses // local node's addresses Mounts Mounts // local node's mount points Discovery Discovery // local node's discovery mechanisms Routing Routing // local node's routing settings Ipns Ipns // Ipns settings Bootstrap []string // local nodes's bootstrap peer addresses Gateway Gateway // local node's gateway server options API API // local node's API settings Swarm SwarmConfig Pubsub PubsubConfig Services Services // External service domains and info Provider Provider Reprovider Reprovider Experimental Experiments UI UI }
Config is used to load ipfs config files.
func (*Config) SetBootstrapPeers ¶
type Datastore ¶
type Datastore struct { StorageMax string // in B, kB, kiB, MB, ... StorageGCWatermark int64 // in percentage to multiply on StorageMax GCPeriod string // in ns, us, ms, s, m, h // deprecated fields, use Spec Type string `json:",omitempty"` Path string `json:",omitempty"` NoSync bool `json:",omitempty"` Params *json.RawMessage `json:",omitempty"` Spec map[string]interface{} HashOnRead bool BloomFilterSize int }
Datastore tracks the configuration of the datastore.
func DefaultDatastoreConfig ¶
func DefaultDatastoreConfig() Datastore
DefaultDatastoreConfig is an internal function exported to aid in testing.
type Experiments ¶
type Experiments struct { FilestoreEnabled bool UrlstoreEnabled bool ShardingEnabled bool Libp2pStreamMounting bool P2pHttpProxy bool QUIC bool PreferTLS bool StrategicProviding bool StorageHostEnabled bool StorageClientEnabled bool Analytics bool RemoveOnUnpin bool HostsSyncEnabled bool HostsSyncMode string DisableAutoUpdate bool }
type Gateway ¶
type Gateway struct { HTTPHeaders map[string][]string // HTTP headers to return with the gateway RootRedirect string Writable bool PathPrefixes []string APICommands []string NoFetch bool }
Gateway contains options for the HTTP gateway server.
type Profile ¶
type Profile struct { // Description briefly describes the functionality of the profile Description string // Transform takes ipfs configuration and applies the profile to it Transform Transformer }
Profile contains the profile transformer the description of the profile
type PubsubConfig ¶
type PubsubConfig struct { // Router can be either floodsub (legacy) or gossipsub (new and // backwards compatible). Router string // DisableSigning disables message signing. Message signing is *enabled* // by default. DisableSigning bool // StrictSignatureVerification enables strict signature verification. // When enabled, unsigned messages will be rejected. Eventually, this // will be made the default and this option will disappear. Once this // happens, networks will either need to completely disable or // completely enable message signing. StrictSignatureVerification bool }
type Reprovider ¶
type Routing ¶
type Routing struct { // Type sets default daemon routing mode. Type string }
Routing defines configuration options for libp2p routing
type Services ¶ added in v0.2.0
type Services struct { StatusServerDomain string HubDomain string EscrowDomain string GuardDomain string ExchangeDomain string SolidityDomain string EscrowPubKeys []string GuardPubKeys []string }
func DefaultServicesConfig ¶ added in v0.2.0
func DefaultServicesConfig() Services
DefaultServicesConfig returns the default set of configs for external services.
func DefaultServicesConfigDev ¶ added in v0.3.0
func DefaultServicesConfigDev() Services
DefaultServicesConfigDev returns the default set of configs for dev external services.
func DefaultServicesConfigTestnet ¶ added in v0.4.1
func DefaultServicesConfigTestnet() Services
DefaultServicesConfigTestnet returns the default set of configs for testnet external services.
type Strings ¶
type Strings []string
Strings is a helper type that (un)marshals a single string to/from a single JSON string and a slice of strings to/from a JSON array of strings.
func (Strings) MarshalJSON ¶
MarshalJSON conforms to the json.Marshaler interface.
func (*Strings) UnmarshalJSON ¶
UnmarshalJSON conforms to the json.Unmarshaler interface.
type SwarmConfig ¶
type SwarmConfig struct { AddrFilters []string DisableBandwidthMetrics bool DisableNatPortMap bool DisableRelay bool EnableRelayHop bool SwarmKey string // autorelay functionality // if true, then the libp2p host will be constructed with autorelay functionality. EnableAutoRelay bool // if true, then an AutoNATService will be instantiated to facilitate autorelay EnableAutoNATService bool ConnMgr ConnMgr }
type Transformer ¶
Transformer is a function which takes configuration and applies some filter to it