@@ -33,6 +33,7 @@ import (
3333 "github.com/offchainlabs/nitro/consensus/consensusrpcclient"
3434 "github.com/offchainlabs/nitro/execution"
3535 executionrpcserver "github.com/offchainlabs/nitro/execution/rpcserver"
36+ "github.com/offchainlabs/nitro/restrictedaddr"
3637 "github.com/offchainlabs/nitro/solgen/go/precompilesgen"
3738 "github.com/offchainlabs/nitro/util"
3839 "github.com/offchainlabs/nitro/util/arbmath"
@@ -135,6 +136,7 @@ type Config struct {
135136 ExposeMultiGas bool `koanf:"expose-multi-gas"`
136137 RPCServer rpcserver.Config `koanf:"rpc-server"`
137138 ConsensusRPCClient rpcclient.ClientConfig `koanf:"consensus-rpc-client" reload:"hot"`
139+ RestrictedAddr restrictedaddr.Config `koanf:"restricted-addr" reload:"hot"`
138140
139141 forwardingTarget string
140142}
@@ -166,6 +168,9 @@ func (c *Config) Validate() error {
166168 if err := c .ConsensusRPCClient .Validate (); err != nil {
167169 return fmt .Errorf ("error validating ConsensusRPCClient config: %w" , err )
168170 }
171+ if err := c .RestrictedAddr .Validate (); err != nil {
172+ return fmt .Errorf ("error validating RestrictedAddr config: %w" , err )
173+ }
169174 return nil
170175}
171176
@@ -189,6 +194,7 @@ func ConfigAddOptions(prefix string, f *pflag.FlagSet) {
189194 LiveTracingConfigAddOptions (prefix + ".vmtrace" , f )
190195 rpcserver .ConfigAddOptions (prefix + ".rpc-server" , "execution" , f )
191196 rpcclient .RPCClientAddOptions (prefix + ".consensus-rpc-client" , f , & ConfigDefault .ConsensusRPCClient )
197+ restrictedaddr .ConfigAddOptions (prefix + ".restricted-addr" , f )
192198}
193199
194200type LiveTracingConfig struct {
@@ -235,6 +241,8 @@ var ConfigDefault = Config{
235241 ArgLogLimit : 2048 ,
236242 WebsocketMessageSizeLimit : 256 * 1024 * 1024 ,
237243 },
244+
245+ RestrictedAddr : restrictedaddr .DefaultConfig ,
238246}
239247
240248type ConfigFetcher interface {
@@ -260,6 +268,7 @@ type ExecutionNode struct {
260268 started atomic.Bool
261269 bulkBlockMetadataFetcher * BulkBlockMetadataFetcher
262270 consensusRPCClient * consensusrpcclient.ConsensusRPCClient
271+ RestrictedAddrService * restrictedaddr.Service
263272}
264273
265274func CreateExecutionNode (
@@ -354,6 +363,11 @@ func CreateExecutionNode(
354363
355364 bulkBlockMetadataFetcher := NewBulkBlockMetadataFetcher (l2BlockChain , execEngine , config .BlockMetadataApiCacheSize , config .BlockMetadataApiBlocksLimit )
356365
366+ restrictedAddrService , err := restrictedaddr .NewService (ctx , & config .RestrictedAddr )
367+ if err != nil {
368+ return nil , fmt .Errorf ("failed to create restricted addr service: %w" , err )
369+ }
370+
357371 execNode := & ExecutionNode {
358372 ExecutionDB : executionDB ,
359373 Backend : backend ,
@@ -369,6 +383,7 @@ func CreateExecutionNode(
369383 ParentChainReader : parentChainReader ,
370384 ClassicOutbox : classicOutbox ,
371385 bulkBlockMetadataFetcher : bulkBlockMetadataFetcher ,
386+ RestrictedAddrService : restrictedAddrService ,
372387 }
373388
374389 if config .ConsensusRPCClient .URL != "" {
@@ -460,7 +475,11 @@ func (n *ExecutionNode) Initialize(ctx context.Context) error {
460475 if err != nil {
461476 return fmt .Errorf ("error setting sync backend: %w" , err )
462477 }
463-
478+ if n .RestrictedAddrService != nil {
479+ if err = n .RestrictedAddrService .Initialize (ctx ); err != nil {
480+ return fmt .Errorf ("error initializing restricted addr service: %w" , err )
481+ }
482+ }
464483 return nil
465484}
466485
@@ -494,6 +513,8 @@ func (n *ExecutionNode) Start(ctxIn context.Context) error {
494513 n .ParentChainReader .Start (ctx )
495514 }
496515 n .bulkBlockMetadataFetcher .Start (ctx )
516+
517+ n .RestrictedAddrService .Start (ctx )
497518 return nil
498519}
499520
@@ -523,6 +544,10 @@ func (n *ExecutionNode) StopAndWait() {
523544 // log.Error("error on stak close", "err", err)
524545 // }
525546 n .StopWaiter .StopAndWait ()
547+
548+ if n .RestrictedAddrService != nil && n .RestrictedAddrService .Started () {
549+ n .RestrictedAddrService .StopAndWait ()
550+ }
526551}
527552
528553func (n * ExecutionNode ) DigestMessage (num arbutil.MessageIndex , msg * arbostypes.MessageWithMetadata , msgForPrefetch * arbostypes.MessageWithMetadata ) containers.PromiseInterface [* execution.MessageResult ] {
0 commit comments