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

     1  package p2p
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/libp2p/go-libp2p"
     7  	"github.com/libp2p/go-libp2p/core/network"
     8  	rcmgr "github.com/libp2p/go-libp2p/p2p/host/resource-manager"
     9  	ma "github.com/multiformats/go-multiaddr"
    10  	madns "github.com/multiformats/go-multiaddr-dns"
    11  	"go.uber.org/fx"
    12  )
    13  
    14  func resourceManager(params resourceManagerParams) (network.ResourceManager, error) {
    15  	return rcmgr.NewResourceManager(rcmgr.NewFixedLimiter(params.Limits))
    16  }
    17  
    18  func infiniteResources() rcmgr.ConcreteLimitConfig {
    19  	return rcmgr.InfiniteLimits
    20  }
    21  
    22  func autoscaleResources() rcmgr.ConcreteLimitConfig {
    23  	limits := rcmgr.DefaultLimits
    24  	libp2p.SetDefaultServiceLimits(&limits)
    25  	return limits.AutoScale()
    26  }
    27  
    28  func allowList(ctx context.Context, cfg Config, bootstrappers Bootstrappers) (rcmgr.Option, error) {
    29  	mutual, err := cfg.mutualPeers()
    30  	if err != nil {
    31  		return nil, err
    32  	}
    33  
    34  	// TODO(@Wondertan): We should resolve their addresses only once, but currently
    35  	//  we resolve it here and libp2p stuck does that as well internally
    36  	allowlist := make([]ma.Multiaddr, 0, len(bootstrappers)+len(mutual))
    37  	for _, b := range bootstrappers {
    38  		for _, baddr := range b.Addrs {
    39  			resolved, err := madns.DefaultResolver.Resolve(ctx, baddr)
    40  			if err != nil {
    41  				log.Warnw("error resolving bootstrapper DNS", "addr", baddr.String(), "err", err)
    42  				continue
    43  			}
    44  			allowlist = append(allowlist, resolved...)
    45  		}
    46  	}
    47  	for _, m := range mutual {
    48  		for _, maddr := range m.Addrs {
    49  			resolved, err := madns.DefaultResolver.Resolve(ctx, maddr)
    50  			if err != nil {
    51  				log.Warnw("error resolving mutual peer DNS", "addr", maddr.String(), "err", err)
    52  				continue
    53  			}
    54  			allowlist = append(allowlist, resolved...)
    55  		}
    56  	}
    57  
    58  	return rcmgr.WithAllowlistedMultiaddrs(allowlist), nil
    59  }
    60  
    61  func traceReporter() rcmgr.Option {
    62  	str, err := rcmgr.NewStatsTraceReporter()
    63  	if err != nil {
    64  		panic(err) // err is always nil as per sources
    65  	}
    66  
    67  	return rcmgr.WithTraceReporter(str)
    68  }
    69  
    70  type resourceManagerParams struct {
    71  	fx.In
    72  
    73  	Limits rcmgr.ConcreteLimitConfig
    74  	Opts   []rcmgr.Option `group:"rcmgr-opts"`
    75  }
    76  
    77  func resourceManagerOpt(opt any) fx.Annotated {
    78  	return fx.Annotated{
    79  		Group:  "rcmgr-opts",
    80  		Target: opt,
    81  	}
    82  }