package main import ( "fmt" "github.com/filecoin-project/lotus/node" "github.com/filecoin-project/lotus/node/config" "github.com/filecoin-project/lotus/node/modules" "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/filecoin-project/lotus/node/modules/lp2p" "github.com/filecoin-project/lotus/node/repo" "github.com/libp2p/go-libp2p-core/peer" ma "github.com/multiformats/go-multiaddr" ) func withGenesis(gb []byte) node.Option { return node.Override(new(modules.Genesis), modules.LoadGenesis(gb)) } func withBootstrapper(ab []byte) node.Option { return node.Override(new(dtypes.BootstrapPeers), func() (dtypes.BootstrapPeers, error) { if ab == nil { return dtypes.BootstrapPeers{}, nil } a, err := ma.NewMultiaddrBytes(ab) if err != nil { return nil, err } ai, err := peer.AddrInfoFromP2pAddr(a) if err != nil { return nil, err } return dtypes.BootstrapPeers{*ai}, nil }) } func withPubsubConfig(bootstrapper bool, pubsubTracer string) node.Option { return node.Override(new(*config.Pubsub), func() *config.Pubsub { return &config.Pubsub{ Bootstrapper: bootstrapper, RemoteTracer: pubsubTracer, } }) } func withListenAddress(ip string) node.Option { addrs := []string{fmt.Sprintf("/ip4/%s/tcp/4001", ip)} return node.Override(node.StartListeningKey, lp2p.StartListening(addrs)) } func withMinerListenAddress(ip string) node.Option { addrs := []string{fmt.Sprintf("/ip4/%s/tcp/4002", ip)} return node.Override(node.StartListeningKey, lp2p.StartListening(addrs)) } func withApiEndpoint(addr string) node.Option { return node.Override(node.SetApiEndpointKey, func(lr repo.LockedRepo) error { apima, err := ma.NewMultiaddr(addr) if err != nil { return err } return lr.SetAPIEndpoint(apima) }) }