mirror of
https://github.com/ipfs/kubo.git
synced 2025-09-14 18:58:40 +08:00

We now consider debugerrors harmful: we've run into cases where debugerror.Wrap() hid valuable error information (err == io.EOF?). I've removed them from the main code, but left them in some tests. Go errors are lacking, but unfortunately, this isn't the solution. It is possible that debugerros.New or debugerrors.Errorf should remain still (i.e. only remove debugerrors.Wrap) but we don't use these errors often enough to keep.
81 lines
3.1 KiB
Go
81 lines
3.1 KiB
Go
package config
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
iaddr "github.com/ipfs/go-ipfs/util/ipfsaddr"
|
|
)
|
|
|
|
// 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/ipfs/init.go -- because of an
|
|
// import dependency issue. TODO: move this into a config/default/ package.
|
|
var DefaultBootstrapAddresses = []string{
|
|
"/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", // mars.i.ipfs.io
|
|
"/ip4/104.236.176.52/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z", // neptune (to be neptune.i.ipfs.io)
|
|
"/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLpPVmHKQ4XTPdz8tjDFgdeRFkpV8JgYq8JVJ69RrZm", // pluto (to be pluto.i.ipfs.io)
|
|
"/ip4/162.243.248.213/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm", // uranus (to be uranus.i.ipfs.io)
|
|
"/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu", // saturn (to be saturn.i.ipfs.io)
|
|
"/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64", // venus (to be venus.i.ipfs.io)
|
|
"/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd", // earth (to be earth.i.ipfs.io)
|
|
"/ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3", // mercury (to be mercury.i.ipfs.io)
|
|
"/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx", // jupiter (to be jupiter.i.ipfs.io)
|
|
}
|
|
|
|
// BootstrapPeer is a peer used to bootstrap the network.
|
|
type BootstrapPeer iaddr.IPFSAddr
|
|
|
|
// ErrInvalidPeerAddr signals an address is not a valid peer address.
|
|
var ErrInvalidPeerAddr = errors.New("invalid peer address")
|
|
|
|
func (c *Config) BootstrapPeers() ([]BootstrapPeer, error) {
|
|
return ParseBootstrapPeers(c.Bootstrap)
|
|
}
|
|
|
|
// 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/ipfs/init) because of module dependency problems.
|
|
func DefaultBootstrapPeers() ([]BootstrapPeer, error) {
|
|
ps, err := ParseBootstrapPeers(DefaultBootstrapAddresses)
|
|
if err != nil {
|
|
return nil, fmt.Errorf(`failed to parse hardcoded bootstrap peers: %s
|
|
This is a problem with the ipfs codebase. Please report it to the dev team.`, err)
|
|
}
|
|
return ps, nil
|
|
}
|
|
|
|
func (c *Config) SetBootstrapPeers(bps []BootstrapPeer) {
|
|
c.Bootstrap = BootstrapPeerStrings(bps)
|
|
}
|
|
|
|
func ParseBootstrapPeer(addr string) (BootstrapPeer, error) {
|
|
ia, err := iaddr.ParseString(addr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return BootstrapPeer(ia), err
|
|
}
|
|
|
|
func ParseBootstrapPeers(addrs []string) ([]BootstrapPeer, error) {
|
|
peers := make([]BootstrapPeer, len(addrs))
|
|
var err error
|
|
for i, addr := range addrs {
|
|
peers[i], err = ParseBootstrapPeer(addr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return peers, nil
|
|
}
|
|
|
|
func BootstrapPeerStrings(bps []BootstrapPeer) []string {
|
|
bpss := make([]string, len(bps))
|
|
for i, p := range bps {
|
|
bpss[i] = p.String()
|
|
}
|
|
return bpss
|
|
}
|