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  }