Skip to content

Commit 30177ec

Browse files
authored
feat: add eth blob support to proposer (#938)
* add eth blob support to proposer * allow no DA provider configured
1 parent ed9e6f6 commit 30177ec

2 files changed

Lines changed: 44 additions & 11 deletions

File tree

synd-withdrawals/synd-proposer/pkg/config/config.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type Config struct {
2424
AppchainRPCURL string `json:"AppchainRPCURL"`
2525
EnclaveRPCURL string `json:"EnclaveRPCURL"`
2626
EigenRPCUrl string `json:"EigenRPCUrl"`
27+
BeaconRPCURL string `json:"BeaconRPCURL"`
2728

2829
PrivateKey *ecdsa.PrivateKey `json:"-"`
2930
PollingInterval time.Duration `json:"PollingInterval"`
@@ -52,7 +53,8 @@ var Keys = map[string]struct {
5253
"settlement-chain-id": {"Settlement Chain ID", "", true},
5354
"sequencing-rpc-url": {"Sequencing RPC URL", "", true},
5455
"appchain-rpc-url": {"Appchain RPC URL", "", true},
55-
"eigen-rpc-url": {"EigenDA RPC URL", "", true},
56+
"eigen-rpc-url": {"EigenDA RPC URL", "", false},
57+
"beacon-rpc-url": {"Beacon Chain RPC URL for blob fetching", "", false},
5658
"enclave-rpc-url": {"Enclave RPC URL", "", true},
5759
"tee-module-contract-address": {"TEE Module Contract Address", "", true},
5860
"appchain-bridge-address": {"Appchain Bridge Address", "", true},
@@ -121,6 +123,7 @@ func LoadConfig() (*Config, error) {
121123
AppchainRPCURL: viper.GetString("appchain-rpc-url"),
122124
EnclaveRPCURL: viper.GetString("enclave-rpc-url"),
123125
EigenRPCUrl: viper.GetString("eigen-rpc-url"),
126+
BeaconRPCURL: viper.GetString("beacon-rpc-url"),
124127
TeeModuleContractAddress: common.HexToAddress(viper.GetString("tee-module-contract-address")),
125128
AppchainBridgeAddress: common.HexToAddress(viper.GetString("appchain-bridge-address")),
126129
PrivateKey: privateKey,

synd-withdrawals/synd-proposer/pkg/proposer.go

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/offchainlabs/nitro/daprovider"
2929
"github.com/offchainlabs/nitro/eigenda"
3030
"github.com/offchainlabs/nitro/solgen/go/bridgegen"
31+
"github.com/offchainlabs/nitro/util/headerreader"
3132
"github.com/pkg/errors"
3233
"github.com/rs/zerolog"
3334
"github.com/rs/zerolog/log"
@@ -86,15 +87,6 @@ func NewProposer(ctx context.Context, cfg *config.Config, metrics *metrics.Metri
8687
msg, wrappedErr := logger.WrapErrorWithMsg("Failed to create settlement provider", err)
8788
log.Fatal().Stack().Err(wrappedErr).Msg(msg)
8889
}
89-
eigenClient, err := eigenda.NewEigenDA(&eigenda.EigenDAConfig{
90-
Enable: true,
91-
Rpc: cfg.EigenRPCUrl,
92-
})
93-
if err != nil {
94-
msg, wrappedErr := logger.WrapErrorWithMsg("Failed to create Eigen provider", err)
95-
log.Fatal().Stack().Err(wrappedErr).Msg(msg)
96-
}
97-
9890
settlementAuth, err := bind.NewKeyedTransactorWithChainID(cfg.PrivateKey, big.NewInt(int64(cfg.SettlementChainID)))
9991
if err != nil {
10092
msg, wrappedErr := logger.WrapErrorWithMsg("Failed to create settlement transactor", err)
@@ -114,7 +106,7 @@ func NewProposer(ctx context.Context, cfg *config.Config, metrics *metrics.Metri
114106
EnclaveClient: enclaveClient,
115107
SettlementClient: settlementClient,
116108
SettlementAuth: *settlementAuth,
117-
DapReaders: []daprovider.Reader{eigenda.NewReaderForEigenDA(eigenClient)},
109+
DapReaders: buildDapReaders(ctx, cfg, ethereumClient),
118110
TeeModule: teeModule,
119111
Metrics: metrics,
120112

@@ -645,3 +637,41 @@ func (p *Proposer) makeTransactOptsCopy(ctx context.Context) *bind.TransactOpts
645637
copy.Nonce = nil // ensure fresh nonce lookup
646638
return &copy
647639
}
640+
641+
// buildDapReaders constructs the list of DA provider readers based on configuration
642+
func buildDapReaders(ctx context.Context, cfg *config.Config, ethereumClient *ethclient.Client) []daprovider.Reader {
643+
var readers []daprovider.Reader
644+
645+
if cfg.EigenRPCUrl != "" {
646+
eigenClient, err := eigenda.NewEigenDA(&eigenda.EigenDAConfig{
647+
Enable: true,
648+
Rpc: cfg.EigenRPCUrl,
649+
})
650+
if err != nil {
651+
msg, wrappedErr := logger.WrapErrorWithMsg("Failed to create Eigen provider", err)
652+
log.Fatal().Stack().Err(wrappedErr).Msg(msg)
653+
}
654+
readers = append(readers, eigenda.NewReaderForEigenDA(eigenClient))
655+
}
656+
657+
if cfg.BeaconRPCURL != "" {
658+
blobClient, err := headerreader.NewBlobClient(headerreader.BlobClientConfig{
659+
BeaconUrl: cfg.BeaconRPCURL,
660+
}, ethereumClient)
661+
if err != nil {
662+
msg, wrappedErr := logger.WrapErrorWithMsg("Failed to create blob client", err)
663+
log.Fatal().Stack().Err(wrappedErr).Msg(msg)
664+
}
665+
if err = blobClient.Initialize(ctx); err != nil {
666+
msg, wrappedErr := logger.WrapErrorWithMsg("Failed to initialize blob client", err)
667+
log.Fatal().Stack().Err(wrappedErr).Msg(msg)
668+
}
669+
readers = append(readers, daprovider.NewReaderForBlobReader(blobClient))
670+
}
671+
672+
if len(readers) == 0 {
673+
log.Warn().Msg("No DA provider has been configured (eigen-rpc-url or beacon-rpc-url)")
674+
}
675+
676+
return readers
677+
}

0 commit comments

Comments
 (0)