Skip to content

Commit f270ca1

Browse files
authored
Merge pull request #31 from Layr-Labs/e2e-test-update
Update EigenDA proxy to match OP v1.7.6 client expectation
2 parents 2dbe724 + 62668d0 commit f270ca1

File tree

15 files changed

+152
-137
lines changed

15 files changed

+152
-137
lines changed

.github/workflows/actions.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ jobs:
2727
runs-on: ubuntu-latest
2828
steps:
2929
- uses: actions/checkout@v3
30+
with:
31+
submodules: true
3032

3133
- name: Set up Go
3234
uses: actions/setup-go@v3
@@ -58,6 +60,8 @@ jobs:
5860
runs-on: ubuntu-latest
5961
steps:
6062
- uses: actions/checkout@v3
63+
with:
64+
submodules: true
6165

6266
- name: Set up Go
6367
uses: actions/setup-go@v3

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ clean:
2929
test:
3030
go test -v ./...
3131

32-
e2e-test: submodules srs
32+
e2e-test: submodules
3333
go test -timeout 50m -v ./test/e2e_test.go -testnet-integration
3434

3535
.PHONY: lint

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ An `EigenDACommitment` layer type has been added that supports verification agai
5959
|--------|--------|--------|--------|-----------------|
6060
commit da layer ext da version raw commitment
6161
type type type byte
62-
6362
```
6463

6564
The `raw commitment` for EigenDA is encoding certificate and kzg fields.

cmd/server/entrypoint.go

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,53 +5,18 @@ import (
55
"fmt"
66

77
"github.com/Layr-Labs/eigenda-proxy/metrics"
8-
"github.com/Layr-Labs/eigenda-proxy/store"
9-
"github.com/Layr-Labs/eigenda-proxy/verify"
10-
"github.com/Layr-Labs/eigenda/api/clients"
11-
"github.com/ethereum/go-ethereum/log"
128
"github.com/urfave/cli/v2"
139

14-
proxy "github.com/Layr-Labs/eigenda-proxy"
10+
"github.com/Layr-Labs/eigenda-proxy/server"
1511
oplog "github.com/ethereum-optimism/optimism/op-service/log"
1612
"github.com/ethereum-optimism/optimism/op-service/opio"
1713
)
1814

19-
func LoadStore(cfg CLIConfig, ctx context.Context, log log.Logger) (store.Store, error) {
20-
log.Info("Using eigenda backend")
21-
daCfg := cfg.EigenDAConfig
22-
23-
verifier, err := verify.NewVerifier(daCfg.KzgConfig())
24-
if err != nil {
25-
return nil, err
26-
}
27-
28-
maxBlobLength, err := daCfg.GetMaxBlobLength()
29-
if err != nil {
30-
return nil, err
31-
}
32-
33-
if cfg.MemStoreCfg.Enabled {
34-
log.Info("Using memstore backend")
35-
return store.NewMemStore(ctx, &cfg.MemStoreCfg, verifier, log, maxBlobLength)
36-
}
37-
38-
client, err := clients.NewEigenDAClient(log, daCfg.ClientConfig)
39-
if err != nil {
40-
return nil, err
41-
}
42-
return store.NewEigenDAStore(
43-
ctx,
44-
client,
45-
verifier,
46-
maxBlobLength,
47-
)
48-
}
49-
5015
func StartProxySvr(cliCtx *cli.Context) error {
51-
if err := CheckRequired(cliCtx); err != nil {
16+
if err := server.CheckRequired(cliCtx); err != nil {
5217
return err
5318
}
54-
cfg := ReadCLIConfig(cliCtx)
19+
cfg := server.ReadCLIConfig(cliCtx)
5520
if err := cfg.Check(); err != nil {
5621
return err
5722
}
@@ -65,11 +30,11 @@ func StartProxySvr(cliCtx *cli.Context) error {
6530

6631
log.Info("Initializing EigenDA proxy server...")
6732

68-
da, err := LoadStore(cfg, ctx, log)
33+
da, err := server.LoadStore(cfg, ctx, log)
6934
if err != nil {
7035
return fmt.Errorf("failed to create store: %w", err)
7136
}
72-
server := proxy.NewServer(cliCtx.String(ListenAddrFlagName), cliCtx.Int(PortFlagName), da, log, m)
37+
server := server.NewServer(cliCtx.String(server.ListenAddrFlagName), cliCtx.Int(server.PortFlagName), da, log, m)
7338

7439
if err := server.Start(); err != nil {
7540
return fmt.Errorf("failed to start the DA server")

cmd/server/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/joho/godotenv"
99
"github.com/urfave/cli/v2"
1010

11+
"github.com/Layr-Labs/eigenda-proxy/server"
1112
"github.com/ethereum-optimism/optimism/op-node/metrics"
1213
opservice "github.com/ethereum-optimism/optimism/op-service"
1314
"github.com/ethereum-optimism/optimism/op-service/cliapp"
@@ -22,7 +23,7 @@ func main() {
2223
oplog.SetupDefaults()
2324

2425
app := cli.NewApp()
25-
app.Flags = cliapp.ProtectFlags(Flags)
26+
app.Flags = cliapp.ProtectFlags(server.Flags)
2627
app.Version = opservice.FormatVersion(Version, "", "", "")
2728
app.Name = "eigenda-proxy"
2829
app.Usage = "EigenDA Proxy Sidecar Service"

eigenda/commitment.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ const (
3333
type Commitment []byte
3434

3535
func (c Commitment) Encode() []byte {
36-
return append([]byte{byte(op_plasma.GenericCommitmentType), byte(EigenDA), byte(EigenV0)}, c...)
36+
return append([]byte{byte(EigenDA), byte(EigenV0)}, c...)
3737
}
3838

3939
func StringToCommit(key string) (Commitment, error) {

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.21
55
require (
66
github.com/Layr-Labs/eigenda v0.7.2-0.20240606180508-e90cb7432ca5
77
github.com/consensys/gnark-crypto v0.12.1
8-
github.com/ethereum-optimism/optimism v1.7.5-0.20240520224312-38cd9944494a
8+
github.com/ethereum-optimism/optimism v1.7.6
99
github.com/ethereum/go-ethereum v1.14.0
1010
github.com/joho/godotenv v1.5.1
1111
github.com/prometheus/client_golang v1.19.0
@@ -49,7 +49,7 @@ require (
4949
github.com/davecgh/go-spew v1.1.1 // indirect
5050
github.com/deckarep/golang-set/v2 v2.1.0 // indirect
5151
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect
52-
github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240516202831-8117b611dc3c // indirect
52+
github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240522134500-19555bdbdc95 // indirect
5353
github.com/ethereum/c-kzg-4844 v1.0.0 // indirect
5454
github.com/fjl/memsize v0.0.2 // indirect
5555
github.com/fsnotify/fsnotify v1.7.0 // indirect

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,10 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4
142142
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
143143
github.com/ethereum-optimism/op-geth v1.101315.1-rc.4 h1:8kKEkKIpEiDA1yJfrOO473Tyz4nGgSJHpyK1I0fbPDo=
144144
github.com/ethereum-optimism/op-geth v1.101315.1-rc.4/go.mod h1:TtEUbMSmnt2jrnmxAG0n7tj6ujmcBJ+TKkmU56+NMMw=
145-
github.com/ethereum-optimism/optimism v1.7.5-0.20240520224312-38cd9944494a h1:G/ZEyK8EGxte4pl/2Z5pP+/MbOFxsey4DzC6nHT/pqw=
146-
github.com/ethereum-optimism/optimism v1.7.5-0.20240520224312-38cd9944494a/go.mod h1:0SW2VbS19rHhno7VpBKODQzpUsb7xaNlBgdDkiu/O/I=
147-
github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240516202831-8117b611dc3c h1:dZYKUyjBsJfkCdlcqQ65pjIV1KD7P46ZvENKTxuxfJQ=
148-
github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240516202831-8117b611dc3c/go.mod h1:7xh2awFQqsiZxFrHKTgEd+InVfDRrkKVUIuK8SAFHp0=
145+
github.com/ethereum-optimism/optimism v1.7.6 h1:iwbO47lwa6vi5gQA0Lbnf/uOzmqXFHvXgmziLtVMbwM=
146+
github.com/ethereum-optimism/optimism v1.7.6/go.mod h1:0zhgYDWSk2ZgzFkhA4ENcWRvS0EuO9IUQAhXenvtSZM=
147+
github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240522134500-19555bdbdc95 h1:GjXKQg6u6WkEIcY0dvW2IKhMRY8cVjwdw+rNKhduAo8=
148+
github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240522134500-19555bdbdc95/go.mod h1:7xh2awFQqsiZxFrHKTgEd+InVfDRrkKVUIuK8SAFHp0=
149149
github.com/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA=
150150
github.com/ethereum/c-kzg-4844 v1.0.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0=
151151
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=

cmd/server/flags.go renamed to server/flags.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package main
1+
package server
22

33
import (
44
"fmt"

server/load_store.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package server
2+
3+
import (
4+
"context"
5+
6+
"github.com/Layr-Labs/eigenda-proxy/store"
7+
"github.com/Layr-Labs/eigenda-proxy/verify"
8+
"github.com/Layr-Labs/eigenda/api/clients"
9+
"github.com/ethereum/go-ethereum/log"
10+
)
11+
12+
func LoadStore(cfg CLIConfig, ctx context.Context, log log.Logger) (store.Store, error) {
13+
log.Info("Using eigenda backend")
14+
daCfg := cfg.EigenDAConfig
15+
16+
verifier, err := verify.NewVerifier(daCfg.KzgConfig())
17+
if err != nil {
18+
return nil, err
19+
}
20+
21+
maxBlobLength, err := daCfg.GetMaxBlobLength()
22+
if err != nil {
23+
return nil, err
24+
}
25+
26+
if cfg.MemStoreCfg.Enabled {
27+
log.Info("Using memstore backend")
28+
return store.NewMemStore(ctx, &cfg.MemStoreCfg, verifier, log, maxBlobLength)
29+
}
30+
31+
client, err := clients.NewEigenDAClient(log, daCfg.ClientConfig)
32+
if err != nil {
33+
return nil, err
34+
}
35+
return store.NewEigenDAStore(
36+
ctx,
37+
client,
38+
verifier,
39+
maxBlobLength,
40+
)
41+
}

server.go renamed to server/server.go

Lines changed: 26 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package proxy
1+
package server
22

33
import (
44
"context"
@@ -28,8 +28,8 @@ const (
2828
)
2929

3030
const (
31-
GetRoute = "/get"
32-
PutRoute = "/put"
31+
GetRoute = "/get/"
32+
PutRoute = "/put/"
3333

3434
DomainFilterKey = "domain"
3535
)
@@ -60,43 +60,32 @@ func NewServer(host string, port int, store store.Store, log log.Logger, m metri
6060
}
6161
}
6262

63-
// WithVerify is a middleware that verifies the route path.
64-
func WithVerify(handleFn func(http.ResponseWriter, *http.Request), path string) func(http.ResponseWriter, *http.Request) {
65-
return func(w http.ResponseWriter, r *http.Request) {
66-
route := r.URL.Path
67-
68-
if route != path {
69-
w.WriteHeader(http.StatusBadRequest)
70-
return
71-
}
72-
73-
handleFn(w, r)
74-
}
75-
}
76-
7763
// WithMetrics is a middleware that records metrics for the route path.
78-
func WithMetrics(handleFn func(http.ResponseWriter, *http.Request), m metrics.Metricer) func(http.ResponseWriter, *http.Request) {
79-
return func(w http.ResponseWriter, r *http.Request) {
64+
func WithMetrics(handleFn func(http.ResponseWriter, *http.Request) error, m metrics.Metricer) func(http.ResponseWriter, *http.Request) error {
65+
return func(w http.ResponseWriter, r *http.Request) error {
8066
recordDur := m.RecordRPCServerRequest(r.URL.Path)
8167
defer recordDur()
8268

83-
handleFn(w, r)
69+
return handleFn(w, r)
8470
}
8571
}
8672

87-
func WithLogging(handleFn func(http.ResponseWriter, *http.Request), log log.Logger) func(http.ResponseWriter, *http.Request) {
73+
func WithLogging(handleFn func(http.ResponseWriter, *http.Request) error, log log.Logger) func(http.ResponseWriter, *http.Request) {
8874
return func(w http.ResponseWriter, r *http.Request) {
8975
log.Info("request", "method", r.Method, "url", r.URL)
90-
handleFn(w, r)
76+
err := handleFn(w, r)
77+
if err != nil {
78+
log.Error(err.Error())
79+
}
9180
}
9281
}
9382

9483
func (svr *Server) Start() error {
9584
mux := http.NewServeMux()
9685

97-
mux.HandleFunc(GetRoute, WithMetrics(WithVerify(svr.HandleGet, GetRoute), svr.m))
98-
mux.HandleFunc(PutRoute, WithMetrics(WithVerify(svr.HandlePut, PutRoute), svr.m))
99-
mux.HandleFunc("/health", WithVerify(svr.Health, "/health"))
86+
mux.HandleFunc(GetRoute, WithLogging(WithMetrics(svr.HandleGet, svr.m), svr.log))
87+
mux.HandleFunc(PutRoute, WithLogging(WithMetrics(svr.HandlePut, svr.m), svr.log))
88+
mux.HandleFunc("/health", WithLogging(svr.Health, svr.log))
10089

10190
svr.httpServer.Handler = mux
10291

@@ -147,58 +136,57 @@ func (svr *Server) Stop() error {
147136
}
148137
return nil
149138
}
150-
func (svr *Server) Health(w http.ResponseWriter, r *http.Request) {
151-
svr.log.Info("GET", "url", r.URL)
152-
139+
func (svr *Server) Health(w http.ResponseWriter, r *http.Request) error {
153140
w.WriteHeader(http.StatusOK)
141+
return nil
154142
}
155143

156-
func (svr *Server) HandleGet(w http.ResponseWriter, r *http.Request) {
157-
svr.log.Info("GET", "url", r.URL)
158-
144+
func (svr *Server) HandleGet(w http.ResponseWriter, r *http.Request) error {
159145
domain, err := ReadDomainFilter(r)
160146
if err != nil {
161147
svr.WriteBadRequest(w, invalidDomain)
162-
return
148+
return err
163149
}
164150

165151
key := path.Base(r.URL.Path)
166152
comm, err := eigenda.StringToCommit(key)
167153
if err != nil {
168154
svr.log.Info("failed to decode commitment", "err", err, "key", key)
169155
w.WriteHeader(http.StatusBadRequest)
170-
return
156+
return err
171157
}
172158

173159
input, err := svr.store.Get(r.Context(), comm, domain)
174160
if err != nil && errors.Is(err, ErrNotFound) {
175161
svr.WriteNotFound(w, err.Error())
176-
return
162+
return err
177163
}
178164

179165
if err != nil {
180166
svr.WriteInternalError(w, err)
181-
return
167+
return err
182168
}
183169

184170
svr.WriteResponse(w, input)
171+
return nil
185172
}
186173

187-
func (svr *Server) HandlePut(w http.ResponseWriter, r *http.Request) {
174+
func (svr *Server) HandlePut(w http.ResponseWriter, r *http.Request) error {
188175
input, err := io.ReadAll(r.Body)
189176
if err != nil {
190177
w.WriteHeader(http.StatusBadRequest)
191-
return
178+
return err
192179
}
193180

194181
var comm []byte
195182
if comm, err = svr.store.Put(r.Context(), input); err != nil {
196183
svr.WriteInternalError(w, err)
197-
return
184+
return err
198185
}
199186

200187
// write out encoded commitment
201188
svr.WriteResponse(w, eigenda.Commitment.Encode(comm))
189+
return nil
202190
}
203191

204192
func (svr *Server) WriteResponse(w http.ResponseWriter, data []byte) {

store/eigenda.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ func NewEigenDAStore(ctx context.Context, client *clients.EigenDAClient, v *veri
3131
// Get fetches a blob from DA using certificate fields and verifies blob
3232
// against commitment to ensure data is valid and non-tampered.
3333
func (e EigenDAStore) Get(ctx context.Context, key []byte, domain common.DomainType) ([]byte, error) {
34-
var cert *disperser.BlobInfo
35-
err := rlp.DecodeBytes(key, cert)
34+
var cert disperser.BlobInfo
35+
err := rlp.DecodeBytes(key, &cert)
3636
if err != nil {
3737
return nil, fmt.Errorf("failed to decode DA cert to RLP format: %w", err)
3838
}

store/memory.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func (e *MemStore) Get(ctx context.Context, commit []byte, domain eigendacommon.
104104
e.RLock()
105105
defer e.RUnlock()
106106

107-
var cert *disperser.BlobInfo
107+
var cert disperser.BlobInfo
108108
err := rlp.DecodeBytes(commit, &cert)
109109
if err != nil {
110110
return nil, fmt.Errorf("failed to decode DA cert to RLP format: %w", err)

0 commit comments

Comments
 (0)