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- "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"
@@ -581,6 +577,8 @@ func getDAS(
581577
582578 var err error
583579 var daClient * daclient.Client
580+ var anytrustWriter daprovider.Writer
581+ var anytrustReader daprovider.Reader
584582 var withDAWriter bool
585583 var dasServerCloseFn func ()
586584 if config .DAProvider .Enable {
@@ -591,51 +589,57 @@ func getDAS(
591589 // Only allow dawriter if batchposter is enabled
592590 withDAWriter = config .DAProvider .WithWriter && config .BatchPoster .Enable
593591 } else if config .DataAvailability .Enable {
594- jwtPath := path .Join (filepath .Dir (stack .InstanceDir ()), "dasserver-jwtsecret" )
595- if err := genericconf .TryCreatingJWTSecret (jwtPath ); err != nil {
596- return nil , nil , nil , fmt .Errorf ("error writing ephemeral jwtsecret of dasserver to file: %w" , err )
592+ // Create AnyTrust factory
593+ daFactory , err := factory .NewDAProviderFactory (
594+ factory .ModeAnyTrust ,
595+ & config .DataAvailability ,
596+ nil , // referencedaCfg
597+ dataSigner ,
598+ l1client ,
599+ l1Reader ,
600+ deployInfo .SequencerInbox ,
601+ config .BatchPoster .Enable ,
602+ )
603+ if err != nil {
604+ return nil , nil , nil , err
597605 }
598- log .Info ("Generated ephemeral JWT secret for dasserver" , "jwtPath" , jwtPath )
599- // JWTSecret is no longer needed, cleanup when returning
600- defer func () {
601- if err := os .Remove (jwtPath ); err != nil {
602- log .Error ("error deleting generated ephemeral JWT secret of dasserver" , "jwtPath" , jwtPath )
603- }
604- }()
605606
606- serverConfig := dapserver .DefaultDASServerConfig
607- serverConfig .Port = 0 // Initializes server at a random available port
608- serverConfig .DataAvailability = config .DataAvailability
609- serverConfig .EnableDAWriter = config .BatchPoster .Enable
610- serverConfig .JWTSecret = jwtPath
611- withDAWriter = config .BatchPoster .Enable
612- dasServer , closeFn , err := dapserver .NewServerForDAS (ctx , & serverConfig , dataSigner , l1client , l1Reader , deployInfo .SequencerInbox )
613- if err != nil {
607+ if err := daFactory .ValidateConfig (); err != nil {
614608 return nil , nil , nil , err
615609 }
616- rpcClientConfig := rpcclient .DefaultClientConfig
617- rpcClientConfig .URL = dasServer .Addr
618- rpcClientConfig .JWTSecret = jwtPath
619610
620- daClientConfig := config .DAProvider
621- daClientConfig .RPC = rpcClientConfig
611+ // Create writer if batch poster is enabled
612+ var writerCleanup func ()
613+ if config .BatchPoster .Enable {
614+ anytrustWriter , writerCleanup , err = daFactory .CreateWriter (ctx )
615+ if err != nil {
616+ return nil , nil , nil , err
617+ }
618+ withDAWriter = true
619+ }
622620
623- daClient , err = daclient .NewClient (ctx , & daClientConfig , data_streaming .PayloadCommiter ())
621+ // Create reader
622+ var readerCleanup func ()
623+ anytrustReader , readerCleanup , err = daFactory .CreateReader (ctx )
624624 if err != nil {
625625 return nil , nil , nil , err
626626 }
627+
628+ // Set up cleanup function
627629 dasServerCloseFn = func () {
628- _ = dasServer .Shutdown (ctx )
629- if closeFn != nil {
630- closeFn ()
630+ if writerCleanup != nil {
631+ writerCleanup ()
632+ }
633+ if readerCleanup != nil {
634+ readerCleanup ()
631635 }
632636 }
633637 } else if l2Config .ArbitrumChainParams .DataAvailabilityCommittee {
634638 return nil , nil , nil , errors .New ("a data availability service is required for this chain, but it was not configured" )
635639 }
636640
637641 // We support a nil txStreamer for the pruning code
638- if txStreamer != nil && txStreamer .chainConfig .ArbitrumChainParams .DataAvailabilityCommittee && daClient == nil {
642+ if txStreamer != nil && txStreamer .chainConfig .ArbitrumChainParams .DataAvailabilityCommittee && daClient == nil && anytrustReader == nil {
639643 return nil , nil , nil , errors .New ("data availability service required but unconfigured" )
640644 }
641645
@@ -650,15 +654,26 @@ func getDAS(
650654 return nil , nil , nil , fmt .Errorf ("failed to register DA client: %w" , err )
651655 }
652656 }
657+ if anytrustReader != nil {
658+ headerBytes := []byte {
659+ daprovider .DASMessageHeaderFlag ,
660+ daprovider .DASMessageHeaderFlag | daprovider .TreeDASMessageHeaderFlag ,
661+ }
662+ if err := dapReaders .RegisterAll (headerBytes , anytrustReader ); err != nil {
663+ return nil , nil , nil , fmt .Errorf ("failed to register AnyTrust reader: %w" , err )
664+ }
665+ }
653666 if blobReader != nil {
654667 if err := dapReaders .SetupBlobReader (daprovider .NewReaderForBlobReader (blobReader )); err != nil {
655668 return nil , nil , nil , fmt .Errorf ("failed to register blob reader: %w" , err )
656669 }
657670 }
658- // AnyTrust now always uses the daClient, which is already registered,
659- // so we don't need to register it separately here.
660671
661672 if withDAWriter {
673+ // Return anytrustWriter if it exists, otherwise daClient
674+ if anytrustWriter != nil {
675+ return anytrustWriter , dasServerCloseFn , dapReaders , nil
676+ }
662677 return daClient , dasServerCloseFn , dapReaders , nil
663678 }
664679 return nil , dasServerCloseFn , dapReaders , nil
0 commit comments