github.com/celestiaorg/celestia-node@v0.15.0-beta.1/nodebuilder/p2p/config.go (about) 1 package p2p 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/libp2p/go-libp2p/core/peer" 8 ma "github.com/multiformats/go-multiaddr" 9 10 "github.com/celestiaorg/celestia-node/nodebuilder/node" 11 ) 12 13 const defaultRoutingRefreshPeriod = time.Minute 14 15 // Config combines all configuration fields for P2P subsystem. 16 type Config struct { 17 // ListenAddresses - Addresses to listen to on local NIC. 18 ListenAddresses []string 19 // AnnounceAddresses - Addresses to be announced/advertised for peers to connect to 20 AnnounceAddresses []string 21 // NoAnnounceAddresses - Addresses the P2P subsystem may know about, but that should not be 22 // announced/advertised, as undialable from WAN 23 NoAnnounceAddresses []string 24 // MutualPeers are peers which have a bidirectional peering agreement with the configured node. 25 // Connections with those peers are protected from being trimmed, dropped or negatively scored. 26 // NOTE: Any two peers must bidirectionally configure each other on their MutualPeers field. 27 MutualPeers []string 28 // PeerExchange configures the node, whether it should share some peers to a pruned peer. 29 // This is enabled by default for Bootstrappers. 30 PeerExchange bool 31 // ConnManager is a configuration tuple for ConnectionManager. 32 ConnManager connManagerConfig 33 RoutingTableRefreshPeriod time.Duration 34 35 // Allowlist for IPColocation PubSub parameter, a list of string CIDRs 36 IPColocationWhitelist []string 37 } 38 39 // DefaultConfig returns default configuration for P2P subsystem. 40 func DefaultConfig(tp node.Type) Config { 41 return Config{ 42 ListenAddresses: []string{ 43 "/ip4/0.0.0.0/udp/2121/quic-v1/webtransport", 44 "/ip6/::/udp/2121/quic-v1/webtransport", 45 "/ip4/0.0.0.0/udp/2121/quic-v1", 46 "/ip6/::/udp/2121/quic-v1", 47 "/ip4/0.0.0.0/tcp/2121", 48 "/ip6/::/tcp/2121", 49 }, 50 AnnounceAddresses: []string{}, 51 NoAnnounceAddresses: []string{ 52 "/ip4/127.0.0.1/udp/2121/quic-v1/webtransport", 53 "/ip4/0.0.0.0/udp/2121/quic-v1/webtransport", 54 "/ip6/::/udp/2121/quic-v1/webtransport", 55 "/ip4/0.0.0.0/udp/2121/quic-v1", 56 "/ip4/127.0.0.1/udp/2121/quic-v1", 57 "/ip6/::/udp/2121/quic-v1", 58 "/ip4/0.0.0.0/tcp/2121", 59 "/ip4/127.0.0.1/tcp/2121", 60 "/ip6/::/tcp/2121", 61 }, 62 MutualPeers: []string{}, 63 PeerExchange: tp == node.Bridge || tp == node.Full, 64 ConnManager: defaultConnManagerConfig(tp), 65 RoutingTableRefreshPeriod: defaultRoutingRefreshPeriod, 66 } 67 } 68 69 func (cfg *Config) mutualPeers() (_ []peer.AddrInfo, err error) { 70 maddrs := make([]ma.Multiaddr, len(cfg.MutualPeers)) 71 for i, addr := range cfg.MutualPeers { 72 maddrs[i], err = ma.NewMultiaddr(addr) 73 if err != nil { 74 return nil, fmt.Errorf("failure to parse config.P2P.MutualPeers: %s", err) 75 } 76 } 77 78 return peer.AddrInfosFromP2pAddrs(maddrs...) 79 } 80 81 // Validate performs basic validation of the config. 82 func (cfg *Config) Validate() error { 83 if cfg.RoutingTableRefreshPeriod <= 0 { 84 cfg.RoutingTableRefreshPeriod = defaultRoutingRefreshPeriod 85 log.Warnf("routingTableRefreshPeriod is not valid. restoring to default value: %d", cfg.RoutingTableRefreshPeriod) 86 } 87 return nil 88 }