99 "errors"
1010 "fmt"
1111 "math/big"
12- "os"
13- "path"
14- "path/filepath"
1512 "strings"
1613
1714 "github.com/spf13/pflag"
@@ -36,12 +33,11 @@ import (
3633 "github.com/offchainlabs/nitro/broadcastclients"
3734 "github.com/offchainlabs/nitro/broadcaster"
3835 "github.com/offchainlabs/nitro/cmd/chaininfo"
39- "github.com/offchainlabs/nitro/cmd/genericconf"
4036 "github.com/offchainlabs/nitro/daprovider"
4137 "github.com/offchainlabs/nitro/daprovider/daclient"
4238 "github.com/offchainlabs/nitro/daprovider/das"
4339 "github.com/offchainlabs/nitro/daprovider/data_streaming"
44- dapserver "github.com/offchainlabs/nitro/daprovider/server "
40+ "github.com/offchainlabs/nitro/daprovider/factory "
4541 "github.com/offchainlabs/nitro/eigenda"
4642 "github.com/offchainlabs/nitro/execution"
4743 "github.com/offchainlabs/nitro/execution/gethexec"
@@ -593,6 +589,8 @@ func getDAS(
593589
594590 var err error
595591 var daClient * daclient.Client
592+ var anytrustWriter daprovider.Writer
593+ var anytrustReader daprovider.Reader
596594 var withDAWriter bool
597595 var dasServerCloseFn func ()
598596 if config .DAProvider .Enable {
@@ -603,43 +601,49 @@ func getDAS(
603601 // Only allow dawriter if batchposter is enabled
604602 withDAWriter = config .DAProvider .WithWriter && config .BatchPoster .Enable
605603 } else if config .DataAvailability .Enable {
606- jwtPath := path .Join (filepath .Dir (stack .InstanceDir ()), "dasserver-jwtsecret" )
607- if err := genericconf .TryCreatingJWTSecret (jwtPath ); err != nil {
608- return nil , nil , nil , nil , fmt .Errorf ("error writing ephemeral jwtsecret of dasserver to file: %w" , err )
604+ // Create AnyTrust factory
605+ daFactory , err := factory .NewDAProviderFactory (
606+ factory .ModeAnyTrust ,
607+ & config .DataAvailability ,
608+ nil , // referencedaCfg
609+ dataSigner ,
610+ l1client ,
611+ l1Reader ,
612+ deployInfo .SequencerInbox ,
613+ config .BatchPoster .Enable ,
614+ )
615+ if err != nil {
616+ return nil , nil , nil , nil , err
609617 }
610- log .Info ("Generated ephemeral JWT secret for dasserver" , "jwtPath" , jwtPath )
611- // JWTSecret is no longer needed, cleanup when returning
612- defer func () {
613- if err := os .Remove (jwtPath ); err != nil {
614- log .Error ("error deleting generated ephemeral JWT secret of dasserver" , "jwtPath" , jwtPath )
615- }
616- }()
617618
618- serverConfig := dapserver .DefaultDASServerConfig
619- serverConfig .Port = 0 // Initializes server at a random available port
620- serverConfig .DataAvailability = config .DataAvailability
621- serverConfig .EnableDAWriter = config .BatchPoster .Enable
622- serverConfig .JWTSecret = jwtPath
623- withDAWriter = config .BatchPoster .Enable
624- dasServer , closeFn , err := dapserver .NewServerForDAS (ctx , & serverConfig , dataSigner , l1client , l1Reader , deployInfo .SequencerInbox )
625- if err != nil {
619+ if err := daFactory .ValidateConfig (); err != nil {
626620 return nil , nil , nil , nil , err
627621 }
628- rpcClientConfig := rpcclient .DefaultClientConfig
629- rpcClientConfig .URL = dasServer .Addr
630- rpcClientConfig .JWTSecret = jwtPath
631622
632- daClientConfig := config .DAProvider
633- daClientConfig .RPC = rpcClientConfig
623+ // Create writer if batch poster is enabled
624+ var writerCleanup func ()
625+ if config .BatchPoster .Enable {
626+ anytrustWriter , writerCleanup , err = daFactory .CreateWriter (ctx )
627+ if err != nil {
628+ return nil , nil , nil , nil , err
629+ }
630+ withDAWriter = true
631+ }
634632
635- daClient , err = daclient .NewClient (ctx , & daClientConfig , data_streaming .PayloadCommiter ())
633+ // Create reader
634+ var readerCleanup func ()
635+ anytrustReader , readerCleanup , err = daFactory .CreateReader (ctx )
636636 if err != nil {
637637 return nil , nil , nil , nil , err
638638 }
639+
640+ // Set up cleanup function
639641 dasServerCloseFn = func () {
640- _ = dasServer .Shutdown (ctx )
641- if closeFn != nil {
642- closeFn ()
642+ if writerCleanup != nil {
643+ writerCleanup ()
644+ }
645+ if readerCleanup != nil {
646+ readerCleanup ()
643647 }
644648 }
645649 } else if l2Config .ArbitrumChainParams .DataAvailabilityCommittee {
@@ -651,7 +655,7 @@ func getDAS(
651655 }
652656
653657 // We support a nil txStreamer for the pruning code
654- if txStreamer != nil && txStreamer .chainConfig .ArbitrumChainParams .DataAvailabilityCommittee && daClient == nil {
658+ if txStreamer != nil && txStreamer .chainConfig .ArbitrumChainParams .DataAvailabilityCommittee && daClient == nil && anytrustReader == nil {
655659 return nil , nil , nil , nil , errors .New ("data availability service required but unconfigured" )
656660 }
657661
@@ -679,15 +683,26 @@ func getDAS(
679683 return nil , nil , nil , nil , fmt .Errorf ("failed to register DA client: %w" , err )
680684 }
681685 }
686+ if anytrustReader != nil {
687+ headerBytes := []byte {
688+ daprovider .DASMessageHeaderFlag ,
689+ daprovider .DASMessageHeaderFlag | daprovider .TreeDASMessageHeaderFlag ,
690+ }
691+ if err := dapReaders .RegisterAll (headerBytes , anytrustReader ); err != nil {
692+ return nil , nil , nil , nil , fmt .Errorf ("failed to register AnyTrust reader: %w" , err )
693+ }
694+ }
682695 if blobReader != nil {
683696 if err := dapReaders .SetupBlobReader (daprovider .NewReaderForBlobReader (blobReader )); err != nil {
684697 return nil , nil , nil , nil , fmt .Errorf ("failed to register blob reader: %w" , err )
685698 }
686699 }
687- // AnyTrust now always uses the daClient, which is already registered,
688- // so we don't need to register it separately here.
689700
690701 if withDAWriter {
702+ // Return anytrustWriter if it exists, otherwise daClient
703+ if anytrustWriter != nil {
704+ return anytrustWriter , dasServerCloseFn , dapReaders , eigenDAWriter , nil
705+ }
691706 return daClient , dasServerCloseFn , dapReaders , eigenDAWriter , nil
692707 }
693708 return nil , dasServerCloseFn , dapReaders , eigenDAWriter , nil
0 commit comments