github.com/celestiaorg/celestia-node@v0.15.0-beta.1/nodebuilder/p2p/bootstrap.go (about)

     1  package p2p
     2  
     3  import (
     4  	"os"
     5  	"strconv"
     6  
     7  	"github.com/libp2p/go-libp2p/core/peer"
     8  	ma "github.com/multiformats/go-multiaddr"
     9  )
    10  
    11  const EnvKeyCelestiaBootstrapper = "CELESTIA_BOOTSTRAPPER"
    12  
    13  func isBootstrapper() bool {
    14  	return os.Getenv(EnvKeyCelestiaBootstrapper) == strconv.FormatBool(true)
    15  }
    16  
    17  // BootstrappersFor returns address information of bootstrap peers for a given network.
    18  func BootstrappersFor(net Network) (Bootstrappers, error) {
    19  	bs, err := bootstrappersFor(net)
    20  	if err != nil {
    21  		return nil, err
    22  	}
    23  
    24  	return parseAddrInfos(bs)
    25  }
    26  
    27  // bootstrappersFor reports multiaddresses of bootstrap peers for a given network.
    28  func bootstrappersFor(net Network) ([]string, error) {
    29  	var err error
    30  	net, err = net.Validate()
    31  	if err != nil {
    32  		return nil, err
    33  	}
    34  
    35  	return bootstrapList[net], nil
    36  }
    37  
    38  // NOTE: Every time we add a new long-running network, its bootstrap peers have to be added here.
    39  var bootstrapList = map[Network][]string{
    40  	Mainnet: {
    41  		"/dns4/da-bridge-1.celestia-bootstrap.net/tcp/2121/p2p/12D3KooWSqZaLcn5Guypo2mrHr297YPJnV8KMEMXNjs3qAS8msw8",
    42  		"/dns4/da-bridge-2.celestia-bootstrap.net/tcp/2121/p2p/12D3KooWQpuTFELgsUypqp9N4a1rKBccmrmQVY8Em9yhqppTJcXf",
    43  		"/dns4/da-bridge-3.celestia-bootstrap.net/tcp/2121/p2p/12D3KooWSGa4huD6ts816navn7KFYiStBiy5LrBQH1HuEahk4TzQ",
    44  		"/dns4/da-bridge-4.celestia-bootstrap.net/tcp/2121/p2p/12D3KooWHBXCmXaUNat6ooynXG837JXPsZpSTeSzZx6DpgNatMmR",
    45  		"/dns4/da-bridge-5.celestia-bootstrap.net/tcp/2121/p2p/12D3KooWDGTBK1a2Ru1qmnnRwP6Dmc44Zpsxi3xbgFk7ATEPfmEU",
    46  		"/dns4/da-bridge-6.celestia-bootstrap.net/tcp/2121/p2p/12D3KooWLTUFyf3QEGqYkHWQS2yCtuUcL78vnKBdXU5gABM1YDeH",
    47  		"/dns4/da-full-1.celestia-bootstrap.net/tcp/2121/p2p/12D3KooWKZCMcwGCYbL18iuw3YVpAZoyb1VBGbx9Kapsjw3soZgr",
    48  		"/dns4/da-full-2.celestia-bootstrap.net/tcp/2121/p2p/12D3KooWE3fmRtHgfk9DCuQFfY3H3JYEnTU3xZozv1Xmo8KWrWbK",
    49  		"/dns4/da-full-3.celestia-bootstrap.net/tcp/2121/p2p/12D3KooWK6Ftsd4XsWCsQZgZPNhTrE5urwmkoo5P61tGvnKmNVyv",
    50  	},
    51  	Arabica: {
    52  		"/dns4/da-bridge-1.celestia-arabica-11.com/tcp/2121/p2p/12D3KooWGqwzdEqM54Dce6LXzfFr97Bnhvm6rN7KM7MFwdomfm4S",
    53  		"/dns4/da-bridge-2.celestia-arabica-11.com/tcp/2121/p2p/12D3KooWCMGM5eZWVfCN9ZLAViGfLUWAfXP5pCm78NFKb9jpBtua",
    54  		"/dns4/da-bridge-3.celestia-arabica-11.com/tcp/2121/p2p/12D3KooWEWuqrjULANpukDFGVoHW3RoeUU53Ec9t9v5cwW3MkVdQ",
    55  		"/dns4/da-bridge-4.celestia-arabica-11.com/tcp/2121/p2p/12D3KooWLT1ysSrD7XWSBjh7tU1HQanF5M64dHV6AuM6cYEJxMPk",
    56  	},
    57  	Mocha: {
    58  		"/dns4/da-bridge-mocha-4.celestia-mocha.com/tcp/2121/p2p/12D3KooWCBAbQbJSpCpCGKzqz3rAN4ixYbc63K68zJg9aisuAajg",
    59  		"/dns4/da-bridge-mocha-4-2.celestia-mocha.com/tcp/2121/p2p/12D3KooWK6wJkScGQniymdWtBwBuU36n6BRXp9rCDDUD6P5gJr3G",
    60  		"/dns4/da-full-1-mocha-4.celestia-mocha.com/tcp/2121/p2p/12D3KooWCUHPLqQXZzpTx1x3TAsdn3vYmTNDhzg66yG8hqoxGGN8",
    61  		"/dns4/da-full-2-mocha-4.celestia-mocha.com/tcp/2121/p2p/12D3KooWR6SHsXPkkvhCRn6vp1RqSefgaT1X1nMNvrVjU2o3GoYy",
    62  	},
    63  	Private: {},
    64  }
    65  
    66  // parseAddrInfos converts strings to AddrInfos
    67  func parseAddrInfos(addrs []string) ([]peer.AddrInfo, error) {
    68  	infos := make([]peer.AddrInfo, 0, len(addrs))
    69  	for _, addr := range addrs {
    70  		maddr, err := ma.NewMultiaddr(addr)
    71  		if err != nil {
    72  			log.Errorw("parsing and validating addr", "addr", addr, "err", err)
    73  			return nil, err
    74  		}
    75  
    76  		info, err := peer.AddrInfoFromP2pAddr(maddr)
    77  		if err != nil {
    78  			log.Errorw("parsing info from multiaddr", "maddr", maddr, "err", err)
    79  			return nil, err
    80  		}
    81  		infos = append(infos, *info)
    82  	}
    83  
    84  	return infos, nil
    85  }