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/execution"
4642 "github.com/offchainlabs/nitro/execution/gethexec"
4743 "github.com/offchainlabs/nitro/solgen/go/bridgegen"
@@ -579,6 +575,8 @@ func getDAS(
579575
580576 var err error
581577 var daClient * daclient.Client
578+ var anytrustWriter daprovider.Writer
579+ var anytrustReader daprovider.Reader
582580 var withDAWriter bool
583581 var dasServerCloseFn func ()
584582 if config .DAProvider .Enable {
@@ -589,51 +587,57 @@ func getDAS(
589587 // Only allow dawriter if batchposter is enabled
590588 withDAWriter = config .DAProvider .WithWriter && config .BatchPoster .Enable
591589 } else if config .DataAvailability .Enable {
592- jwtPath := path .Join (filepath .Dir (stack .InstanceDir ()), "dasserver-jwtsecret" )
593- if err := genericconf .TryCreatingJWTSecret (jwtPath ); err != nil {
594- return nil , nil , nil , fmt .Errorf ("error writing ephemeral jwtsecret of dasserver to file: %w" , err )
590+ // Create AnyTrust factory
591+ daFactory , err := factory .NewDAProviderFactory (
592+ factory .ModeAnyTrust ,
593+ & config .DataAvailability ,
594+ nil , // referencedaCfg
595+ dataSigner ,
596+ l1client ,
597+ l1Reader ,
598+ deployInfo .SequencerInbox ,
599+ config .BatchPoster .Enable ,
600+ )
601+ if err != nil {
602+ return nil , nil , nil , err
595603 }
596- log .Info ("Generated ephemeral JWT secret for dasserver" , "jwtPath" , jwtPath )
597- // JWTSecret is no longer needed, cleanup when returning
598- defer func () {
599- if err := os .Remove (jwtPath ); err != nil {
600- log .Error ("error deleting generated ephemeral JWT secret of dasserver" , "jwtPath" , jwtPath )
601- }
602- }()
603604
604- serverConfig := dapserver .DefaultDASServerConfig
605- serverConfig .Port = 0 // Initializes server at a random available port
606- serverConfig .DataAvailability = config .DataAvailability
607- serverConfig .EnableDAWriter = config .BatchPoster .Enable
608- serverConfig .JWTSecret = jwtPath
609- withDAWriter = config .BatchPoster .Enable
610- dasServer , closeFn , err := dapserver .NewServerForDAS (ctx , & serverConfig , dataSigner , l1client , l1Reader , deployInfo .SequencerInbox )
611- if err != nil {
605+ if err := daFactory .ValidateConfig (); err != nil {
612606 return nil , nil , nil , err
613607 }
614- rpcClientConfig := rpcclient .DefaultClientConfig
615- rpcClientConfig .URL = dasServer .Addr
616- rpcClientConfig .JWTSecret = jwtPath
617608
618- daClientConfig := config .DAProvider
619- daClientConfig .RPC = rpcClientConfig
609+ // Create writer if batch poster is enabled
610+ var writerCleanup func ()
611+ if config .BatchPoster .Enable {
612+ anytrustWriter , writerCleanup , err = daFactory .CreateWriter (ctx )
613+ if err != nil {
614+ return nil , nil , nil , err
615+ }
616+ withDAWriter = true
617+ }
620618
621- daClient , err = daclient .NewClient (ctx , & daClientConfig , data_streaming .PayloadCommiter ())
619+ // Create reader
620+ var readerCleanup func ()
621+ anytrustReader , readerCleanup , err = daFactory .CreateReader (ctx )
622622 if err != nil {
623623 return nil , nil , nil , err
624624 }
625+
626+ // Set up cleanup function
625627 dasServerCloseFn = func () {
626- _ = dasServer .Shutdown (ctx )
627- if closeFn != nil {
628- closeFn ()
628+ if writerCleanup != nil {
629+ writerCleanup ()
630+ }
631+ if readerCleanup != nil {
632+ readerCleanup ()
629633 }
630634 }
631635 } else if l2Config .ArbitrumChainParams .DataAvailabilityCommittee {
632636 return nil , nil , nil , errors .New ("a data availability service is required for this chain, but it was not configured" )
633637 }
634638
635639 // We support a nil txStreamer for the pruning code
636- if txStreamer != nil && txStreamer .chainConfig .ArbitrumChainParams .DataAvailabilityCommittee && daClient == nil {
640+ if txStreamer != nil && txStreamer .chainConfig .ArbitrumChainParams .DataAvailabilityCommittee && daClient == nil && anytrustReader == nil {
637641 return nil , nil , nil , errors .New ("data availability service required but unconfigured" )
638642 }
639643
@@ -648,15 +652,26 @@ func getDAS(
648652 return nil , nil , nil , fmt .Errorf ("failed to register DA client: %w" , err )
649653 }
650654 }
655+ if anytrustReader != nil {
656+ headerBytes := []byte {
657+ daprovider .DASMessageHeaderFlag ,
658+ daprovider .DASMessageHeaderFlag | daprovider .TreeDASMessageHeaderFlag ,
659+ }
660+ if err := dapReaders .RegisterAll (headerBytes , anytrustReader ); err != nil {
661+ return nil , nil , nil , fmt .Errorf ("failed to register AnyTrust reader: %w" , err )
662+ }
663+ }
651664 if blobReader != nil {
652665 if err := dapReaders .SetupBlobReader (daprovider .NewReaderForBlobReader (blobReader )); err != nil {
653666 return nil , nil , nil , fmt .Errorf ("failed to register blob reader: %w" , err )
654667 }
655668 }
656- // AnyTrust now always uses the daClient, which is already registered,
657- // so we don't need to register it separately here.
658669
659670 if withDAWriter {
671+ // Return anytrustWriter if it exists, otherwise daClient
672+ if anytrustWriter != nil {
673+ return anytrustWriter , dasServerCloseFn , dapReaders , nil
674+ }
660675 return daClient , dasServerCloseFn , dapReaders , nil
661676 }
662677 return nil , dasServerCloseFn , dapReaders , nil
0 commit comments