Skip to content
Snippets Groups Projects
Select Git revision
  • 773c246232c1f3d7fc67d7ddf5b1cb172ece8fa1
  • master default protected
  • feat/pin-names-with-boxo
  • fix/webui-nofetch-error
  • reprovide-config-migration
  • reprovide-sweep
  • reprovide-sweep-enabled
  • fix/agent-version-suffix
  • dependabot/github_actions/codecov/codecov-action-5.5.1
  • dependabot/github_actions/actions/setup-node-5
  • dependabot/github_actions/actions/setup-go-6
  • dependabot/github_actions/actions/github-script-8
  • dependabot/github_actions/hadolint/hadolint-action-3.2.0
  • feat/get-closest-peers
  • fix/car-blocked-cids
  • release
  • release-v0.37.0
  • staging
  • copilot/fix-859994d3-9d4e-4a8e-bea3-58b58c75a399
  • fix/panic-and-zombie-daemons
  • chore-golangci-v2
  • v0.37.0
  • v0.37.0-rc1
  • v0.36.0
  • v0.36.0-rc2
  • v0.36.0-rc1
  • v0.35.0
  • v0.35.0-rc2
  • v0.35.0-rc1
  • v0.34.1
  • v0.34.0
  • v0.34.0-rc2
  • v0.34.0-rc1
  • v0.33.2
  • v0.33.1
  • v0.33.0
  • v0.33.0-rc3
  • v0.33.0-rc2
  • v0.33.0-rc1
  • v0.32.1
  • v0.32.0
41 results

bootstrap_peers.go

Blame
  • bootstrap_peers.go 2.69 KiB
    package config
    
    import (
    	"errors"
    	"fmt"
    
    	peer "github.com/libp2p/go-libp2p/core/peer"
    	ma "github.com/multiformats/go-multiaddr"
    )
    
    // 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{
    	"/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
    	"/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
    	"/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
    	"/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
    	"/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",      // mars.i.ipfs.io
    	"/ip4/104.131.131.82/udp/4001/quic/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", // mars.i.ipfs.io
    }
    
    // ErrInvalidPeerAddr signals an address is not a valid peer address.
    var ErrInvalidPeerAddr = errors.New("invalid peer address")
    
    func (c *Config) BootstrapPeers() ([]peer.AddrInfo, 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() ([]peer.AddrInfo, 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 []peer.AddrInfo) {
    	c.Bootstrap = BootstrapPeerStrings(bps)
    }
    
    // ParseBootstrapPeer parses a bootstrap list into a list of AddrInfos.
    func ParseBootstrapPeers(addrs []string) ([]peer.AddrInfo, error) {
    	maddrs := make([]ma.Multiaddr, len(addrs))
    	for i, addr := range addrs {
    		var err error
    		maddrs[i], err = ma.NewMultiaddr(addr)
    		if err != nil {
    			return nil, err
    		}
    	}
    	return peer.AddrInfosFromP2pAddrs(maddrs...)
    }
    
    // BootstrapPeerStrings formats a list of AddrInfos as a bootstrap peer list
    // suitable for serialization.
    func BootstrapPeerStrings(bps []peer.AddrInfo) []string {
    	bpss := make([]string, 0, len(bps))
    	for _, pi := range bps {
    		addrs, err := peer.AddrInfoToP2pAddrs(&pi)
    		if err != nil {
    			// programmer error.
    			panic(err)
    		}
    		for _, addr := range addrs {
    			bpss = append(bpss, addr.String())
    		}
    	}
    	return bpss
    }