@@ -68,6 +68,7 @@ import (
6868 "github.com/onflow/flow-go/network/p2p/dht"
6969 "github.com/onflow/flow-go/network/p2p/middleware"
7070 "github.com/onflow/flow-go/network/p2p/p2pbuilder"
71+ "github.com/onflow/flow-go/network/p2p/p2pbuilder/inspector"
7172 "github.com/onflow/flow-go/network/p2p/subscription"
7273 "github.com/onflow/flow-go/network/p2p/tracer"
7374 "github.com/onflow/flow-go/network/p2p/translator"
@@ -170,7 +171,7 @@ func DefaultAccessNodeConfig() *AccessNodeConfig {
170171 BindAddress : cmd .NotSet ,
171172 Metrics : metrics .NewNoopCollector (),
172173 },
173- executionDataSyncEnabled : false ,
174+ executionDataSyncEnabled : true ,
174175 executionDataDir : filepath .Join (homedir , ".flow" , "execution_data" ),
175176 executionDataStartHeight : 0 ,
176177 executionDataConfig : edrequester.ExecutionDataConfig {
@@ -236,7 +237,15 @@ func (builder *FlowAccessNodeBuilder) buildFollowerState() *FlowAccessNodeBuilde
236237 return fmt .Errorf ("only implementations of type badger.State are currently supported but read-only state has type %T" , node .State )
237238 }
238239
239- followerState , err := badgerState .NewFollowerState (state , node .Storage .Index , node .Storage .Payloads , node .Tracer , node .ProtocolEvents , blocktimer .DefaultBlockTimer )
240+ followerState , err := badgerState .NewFollowerState (
241+ node .Logger ,
242+ node .Tracer ,
243+ node .ProtocolEvents ,
244+ state ,
245+ node .Storage .Index ,
246+ node .Storage .Payloads ,
247+ blocktimer .DefaultBlockTimer ,
248+ )
240249 builder .FollowerState = followerState
241250
242251 return err
@@ -333,7 +342,6 @@ func (builder *FlowAccessNodeBuilder) buildFollowerEngine() *FlowAccessNodeBuild
333342 builder .Validator ,
334343 builder .SyncCore ,
335344 node .Tracer ,
336- modulecompliance .WithSkipNewProposalsThreshold (node .ComplianceConfig .SkipNewProposalsThreshold ),
337345 )
338346 if err != nil {
339347 return nil , fmt .Errorf ("could not create follower core: %w" , err )
@@ -347,6 +355,7 @@ func (builder *FlowAccessNodeBuilder) buildFollowerEngine() *FlowAccessNodeBuild
347355 node .Storage .Headers ,
348356 builder .Finalized ,
349357 core ,
358+ followereng .WithComplianceConfigOpt (modulecompliance .WithSkipNewProposalsThreshold (node .ComplianceConfig .SkipNewProposalsThreshold )),
350359 )
351360 if err != nil {
352361 return nil , fmt .Errorf ("could not create follower engine: %w" , err )
@@ -1020,7 +1029,7 @@ func (builder *FlowAccessNodeBuilder) enqueuePublicNetworkInit() {
10201029 }).
10211030 Component ("public libp2p node" , func (node * cmd.NodeConfig ) (module.ReadyDoneAware , error ) {
10221031
1023- libP2PFactory := builder .initLibP2PFactory (builder .NodeConfig .NetworkKey , builder .PublicNetworkConfig .BindAddress , builder .PublicNetworkConfig .Metrics )
1032+ libP2PFactory := builder .initPublicLibP2PFactory (builder .NodeConfig .NetworkKey , builder .PublicNetworkConfig .BindAddress , builder .PublicNetworkConfig .Metrics )
10241033
10251034 var err error
10261035 libp2pNode , err = libP2PFactory ()
@@ -1066,15 +1075,15 @@ func (builder *FlowAccessNodeBuilder) enqueuePublicNetworkInit() {
10661075 })
10671076}
10681077
1069- // initLibP2PFactory creates the LibP2P factory function for the given node ID and network key.
1078+ // initPublicLibP2PFactory creates the LibP2P factory function for the given node ID and network key.
10701079// The factory function is later passed into the initMiddleware function to eventually instantiate the p2p.LibP2PNode instance
10711080// The LibP2P host is created with the following options:
10721081// - DHT as server
10731082// - The address from the node config or the specified bind address as the listen address
10741083// - The passed in private key as the libp2p key
10751084// - No connection gater
10761085// - Default Flow libp2p pubsub options
1077- func (builder * FlowAccessNodeBuilder ) initLibP2PFactory (networkKey crypto.PrivateKey , bindAddress string , networkMetrics module.LibP2PMetrics ) p2p.LibP2PFactoryFunc {
1086+ func (builder * FlowAccessNodeBuilder ) initPublicLibP2PFactory (networkKey crypto.PrivateKey , bindAddress string , networkMetrics module.LibP2PMetrics ) p2p.LibP2PFactoryFunc {
10781087 return func () (p2p.LibP2PNode , error ) {
10791088 connManager , err := connection .NewConnManager (builder .Logger , networkMetrics , builder .ConnectionManagerConfig )
10801089 if err != nil {
@@ -1087,6 +1096,16 @@ func (builder *FlowAccessNodeBuilder) initLibP2PFactory(networkKey crypto.Privat
10871096 builder .IdentityProvider ,
10881097 builder .GossipSubConfig .LocalMeshLogInterval )
10891098
1099+ // setup RPC inspectors
1100+ rpcInspectorBuilder := inspector .NewGossipSubInspectorBuilder (builder .Logger , builder .SporkID , builder .GossipSubRPCInspectorsConfig , builder .GossipSubInspectorNotifDistributor )
1101+ rpcInspectors , err := rpcInspectorBuilder .
1102+ SetPublicNetwork (p2p .PublicNetworkEnabled ).
1103+ SetMetrics (builder .Metrics .Network , builder .MetricsRegisterer ).
1104+ SetMetricsEnabled (builder .MetricsEnabled ).Build ()
1105+ if err != nil {
1106+ return nil , fmt .Errorf ("failed to create gossipsub rpc inspectors: %w" , err )
1107+ }
1108+
10901109 libp2pNode , err := p2pbuilder .NewNodeBuilder (
10911110 builder .Logger ,
10921111 networkMetrics ,
@@ -1116,6 +1135,7 @@ func (builder *FlowAccessNodeBuilder) initLibP2PFactory(networkKey crypto.Privat
11161135 SetStreamCreationRetryInterval (builder .UnicastCreateStreamRetryDelay ).
11171136 SetGossipSubTracer (meshTracer ).
11181137 SetGossipSubScoreTracerInterval (builder .GossipSubConfig .ScoreTracerInterval ).
1138+ SetGossipSubRPCInspectors (rpcInspectors ... ).
11191139 Build ()
11201140
11211141 if err != nil {
0 commit comments