diff --git a/api/clients/v2/config.go b/api/clients/v2/config.go index f9da6a4b7..e95baa4d3 100644 --- a/api/clients/v2/config.go +++ b/api/clients/v2/config.go @@ -198,6 +198,14 @@ func (rc *DistributedPayloadRetrieverConfig) checkAndSetDefaults() error { return err } + if rc.BlsOperatorStateRetrieverAddr == "" { + return fmt.Errorf("BlsOperatorStateRetrieverAddr is required") + } + + if rc.EigenDAServiceManagerAddr == "" { + return fmt.Errorf("EigenDAServiceManagerAddr is required") + } + defaultConfig := GetDefaultDistributedPayloadRetrieverConfig() if rc.RetrievalTimeout == 0 { rc.RetrievalTimeout = defaultConfig.RetrievalTimeout diff --git a/api/clients/v2/distributed_payload_retriever.go b/api/clients/v2/distributed_payload_retriever.go index 7301e9336..72fbcac4f 100644 --- a/api/clients/v2/distributed_payload_retriever.go +++ b/api/clients/v2/distributed_payload_retriever.go @@ -24,7 +24,7 @@ import ( // This struct is goroutine safe. type DistributedPayloadRetriever struct { logger logging.Logger - config DistributedPayloadRetrieverConfig + config DistributedPayloadRetrieverConfig codec codecs.BlobCodec retrievalClient RetrievalClient g1Srs []bn254.G1Affine @@ -32,8 +32,6 @@ type DistributedPayloadRetriever struct { var _ PayloadRetriever = &DistributedPayloadRetriever{} -// TODO: add basic constructor - // BuildDistributedPayloadRetriever builds a DistributedPayloadRetriever from config structs. func BuildDistributedPayloadRetriever( logger logging.Logger, @@ -42,6 +40,10 @@ func BuildDistributedPayloadRetriever( thegraphConfig thegraph.Config, kzgConfig kzg.KzgConfig, ) (*DistributedPayloadRetriever, error) { + err := distributedPayloadRetrieverConfig.checkAndSetDefaults() + if err != nil { + return nil, fmt.Errorf("check and set config defaults: %w", err) + } ethClient, err := geth.NewClient(ethConfig, gethcommon.Address{}, 0, logger) if err != nil { @@ -88,6 +90,28 @@ func BuildDistributedPayloadRetriever( }, nil } +// NewDistributedPayloadRetriever creates a new DistributedPayloadRetriever from already constructed objects +func NewDistributedPayloadRetriever( + logger logging.Logger, + config DistributedPayloadRetrieverConfig, + codec codecs.BlobCodec, + retrievalClient RetrievalClient, + g1Srs []bn254.G1Affine, +) (*DistributedPayloadRetriever, error) { + err := config.checkAndSetDefaults() + if err != nil { + return nil, fmt.Errorf("check and set config defaults: %w", err) + } + + return &DistributedPayloadRetriever{ + logger: logger, + config: config, + codec: codec, + retrievalClient: retrievalClient, + g1Srs: g1Srs, + }, nil +} + // GetPayload iteratively attempts to retrieve a given blob from the quorums listed in the EigenDACert. // // If the blob is successfully retrieved, then the blob is verified. If the verification succeeds, the blob is decoded