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 }