Skip to content

Commit a836166

Browse files
Modify SubmitBlock to SubmitBlocks in DA interace (cosmos#1083)
<!-- Please read and fill out this form before submitting your PR. Please make sure you have reviewed our contributors guide before submitting your first PR. --> ## Overview Resolves: cosmos#1080, cosmos#1084 Adding DA Testing PR WIP: cosmos#1086 <!-- Please provide an explanation of the PR, including the appropriate context, background, goal, and rationale. If there is an issue with this information, please provide a tl;dr and link the issue. --> ## Checklist <!-- Please complete the checklist to ensure that the PR is ready to be reviewed. IMPORTANT: PRs should be left in Draft until the below checklist is completed. --> - [x] New and updated code has appropriate documentation - [ ] New and updated code has new and/or updated testing - 1086 adds this - [x] Required CI checks are passing - [x] Visual proof for any user facing features like CLI or documentation updates - [x] Linked issues closed with keywords
1 parent f40c7c6 commit a836166

File tree

10 files changed

+193
-176
lines changed

10 files changed

+193
-176
lines changed

block/manager.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,7 @@ func (m *Manager) submitBlockToDA(ctx context.Context, block *types.Block) error
626626
submitted := false
627627
backoff := initialBackoff
628628
for attempt := 1; ctx.Err() == nil && !submitted && attempt <= maxSubmitAttempts; attempt++ {
629-
res := m.dalc.SubmitBlock(ctx, block)
629+
res := m.dalc.SubmitBlocks(ctx, []*types.Block{block})
630630
if res.Code == da.StatusSuccess {
631631
m.logger.Info("successfully submitted Rollkit block to DA layer", "rollkitHeight", block.SignedHeader.Header.Height(), "daHeight", res.DAHeight)
632632
submitted = true

da/celestia/celestia.go

+24-23
Original file line numberDiff line numberDiff line change
@@ -74,33 +74,34 @@ func (c *DataAvailabilityLayerClient) Stop() error {
7474
return nil
7575
}
7676

77-
// SubmitBlock submits a block to DA layer.
78-
func (c *DataAvailabilityLayerClient) SubmitBlock(ctx context.Context, block *types.Block) da.ResultSubmitBlock {
79-
data, err := block.MarshalBinary()
80-
if err != nil {
81-
return da.ResultSubmitBlock{
82-
BaseResult: da.BaseResult{
83-
Code: da.StatusError,
84-
Message: err.Error(),
85-
},
77+
// SubmitBlocks submits blocks to DA layer.
78+
func (c *DataAvailabilityLayerClient) SubmitBlocks(ctx context.Context, blocks []*types.Block) da.ResultSubmitBlocks {
79+
blobs := make([]*blob.Blob, len(blocks))
80+
for blockIndex, block := range blocks {
81+
data, err := block.MarshalBinary()
82+
if err != nil {
83+
return da.ResultSubmitBlocks{
84+
BaseResult: da.BaseResult{
85+
Code: da.StatusError,
86+
Message: err.Error(),
87+
},
88+
}
8689
}
87-
}
88-
89-
blockBlob, err := blob.NewBlobV0(c.namespace.Bytes(), data)
90-
if err != nil {
91-
return da.ResultSubmitBlock{
92-
BaseResult: da.BaseResult{
93-
Code: da.StatusError,
94-
Message: err.Error(),
95-
},
90+
blockBlob, err := blob.NewBlobV0(c.namespace.Bytes(), data)
91+
if err != nil {
92+
return da.ResultSubmitBlocks{
93+
BaseResult: da.BaseResult{
94+
Code: da.StatusError,
95+
Message: err.Error(),
96+
},
97+
}
9698
}
99+
blobs[blockIndex] = blockBlob
97100
}
98101

99-
blobs := []*blob.Blob{blockBlob}
100-
101102
txResponse, err := c.rpc.State.SubmitPayForBlob(ctx, math.NewInt(c.config.Fee), c.config.GasLimit, blobs)
102103
if err != nil {
103-
return da.ResultSubmitBlock{
104+
return da.ResultSubmitBlocks{
104105
BaseResult: da.BaseResult{
105106
Code: da.StatusError,
106107
Message: err.Error(),
@@ -113,15 +114,15 @@ func (c *DataAvailabilityLayerClient) SubmitBlock(ctx context.Context, block *ty
113114
"daHeight", txResponse.Height, "daTxHash", txResponse.TxHash)
114115

115116
if txResponse.Code != 0 {
116-
return da.ResultSubmitBlock{
117+
return da.ResultSubmitBlocks{
117118
BaseResult: da.BaseResult{
118119
Code: da.StatusError,
119120
Message: fmt.Sprintf("Codespace: '%s', Code: %d, Message: %s", txResponse.Codespace, txResponse.Code, txResponse.RawLog),
120121
},
121122
}
122123
}
123124

124-
return da.ResultSubmitBlock{
125+
return da.ResultSubmitBlocks{
125126
BaseResult: da.BaseResult{
126127
Code: da.StatusSuccess,
127128
Message: "tx hash: " + txResponse.TxHash,

da/celestia/mock/server.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ func (s *Server) rpc(w http.ResponseWriter, r *http.Request) {
221221
return
222222
}
223223

224-
res := s.mock.SubmitBlock(r.Context(), &block)
224+
res := s.mock.SubmitBlocks(r.Context(), []*types.Block{&block})
225225
resp := &response{
226226
Jsonrpc: "2.0",
227227
Result: &sdk.TxResponse{

da/da.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ type BaseResult struct {
4343
DAHeight uint64
4444
}
4545

46-
// ResultSubmitBlock contains information returned from DA layer after block submission.
47-
type ResultSubmitBlock struct {
46+
// ResultSubmitBlocks contains information returned from DA layer after blocks submission.
47+
type ResultSubmitBlocks struct {
4848
BaseResult
4949
// Not sure if this needs to be bubbled up to other
5050
// parts of Rollkit.
@@ -79,10 +79,10 @@ type DataAvailabilityLayerClient interface {
7979
// Stop is called once, when DataAvailabilityLayerClient is no longer needed.
8080
Stop() error
8181

82-
// SubmitBlock submits the passed in block to the DA layer.
82+
// SubmitBlocks submits the passed in blocks to the DA layer.
8383
// This should create a transaction which (potentially)
8484
// triggers a state transition in the DA layer.
85-
SubmitBlock(ctx context.Context, block *types.Block) ResultSubmitBlock
85+
SubmitBlocks(ctx context.Context, blocks []*types.Block) ResultSubmitBlocks
8686
}
8787

8888
// BlockRetriever is additional interface that can be implemented by Data Availability Layer Client that is able to retrieve

da/grpc/grpc.go

+16-9
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/rollkit/rollkit/log"
1414
"github.com/rollkit/rollkit/types"
1515
"github.com/rollkit/rollkit/types/pb/dalc"
16+
"github.com/rollkit/rollkit/types/pb/rollkit"
1617
)
1718

1819
// DataAvailabilityLayerClient is a generic client that proxies all DA requests via gRPC.
@@ -74,21 +75,27 @@ func (d *DataAvailabilityLayerClient) Stop() error {
7475
return d.conn.Close()
7576
}
7677

77-
// SubmitBlock proxies SubmitBlock request to gRPC server.
78-
func (d *DataAvailabilityLayerClient) SubmitBlock(ctx context.Context, block *types.Block) da.ResultSubmitBlock {
79-
bp, err := block.ToProto()
80-
if err != nil {
81-
return da.ResultSubmitBlock{
82-
BaseResult: da.BaseResult{Code: da.StatusError, Message: err.Error()},
78+
// SubmitBlocks proxies SubmitBlocks request to gRPC server.
79+
func (d *DataAvailabilityLayerClient) SubmitBlocks(ctx context.Context, blocks []*types.Block) da.ResultSubmitBlocks {
80+
bps := make([]*rollkit.Block, len(blocks))
81+
// convert blocks to protobuf
82+
for i, block := range blocks {
83+
bp, err := block.ToProto()
84+
if err != nil {
85+
return da.ResultSubmitBlocks{
86+
BaseResult: da.BaseResult{Code: da.StatusError, Message: err.Error()},
87+
}
8388
}
89+
bps[i] = bp
8490
}
85-
resp, err := d.client.SubmitBlock(ctx, &dalc.SubmitBlockRequest{Block: bp})
91+
92+
resp, err := d.client.SubmitBlocks(ctx, &dalc.SubmitBlocksRequest{Blocks: bps})
8693
if err != nil {
87-
return da.ResultSubmitBlock{
94+
return da.ResultSubmitBlocks{
8895
BaseResult: da.BaseResult{Code: da.StatusError, Message: err.Error()},
8996
}
9097
}
91-
return da.ResultSubmitBlock{
98+
return da.ResultSubmitBlocks{
9299
BaseResult: da.BaseResult{
93100
Code: da.StatusCode(resp.Result.Code),
94101
Message: resp.Result.Message,

da/grpc/mockserv/mockserv.go

+12-7
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,19 @@ type mockImpl struct {
3636
mock mock.DataAvailabilityLayerClient
3737
}
3838

39-
func (m *mockImpl) SubmitBlock(ctx context.Context, request *dalc.SubmitBlockRequest) (*dalc.SubmitBlockResponse, error) {
40-
var b types.Block
41-
err := b.FromProto(request.Block)
42-
if err != nil {
43-
return nil, err
39+
func (m *mockImpl) SubmitBlocks(ctx context.Context, request *dalc.SubmitBlocksRequest) (*dalc.SubmitBlocksResponse, error) {
40+
blocks := make([]*types.Block, len(request.Blocks))
41+
for i := range request.Blocks {
42+
var b types.Block
43+
err := b.FromProto(request.Blocks[i])
44+
if err != nil {
45+
return nil, err
46+
}
47+
blocks[i] = &b
4448
}
45-
resp := m.mock.SubmitBlock(ctx, &b)
46-
return &dalc.SubmitBlockResponse{
49+
50+
resp := m.mock.SubmitBlocks(ctx, blocks)
51+
return &dalc.SubmitBlocksResponse{
4752
Result: &dalc.DAResponse{
4853
Code: dalc.StatusCode(resp.Code),
4954
Message: resp.Message,

da/mock/mock.go

+19-17
Original file line numberDiff line numberDiff line change
@@ -132,30 +132,32 @@ func (m *DataAvailabilityLayerClient) GetHeightByHeader(dah *core.DataAvailabili
132132
return 0
133133
}
134134

135-
// SubmitBlock submits the passed in block to the DA layer.
135+
// SubmitBlocks submits the passed in blocks to the DA layer.
136136
// This should create a transaction which (potentially)
137137
// triggers a state transition in the DA layer.
138-
func (m *DataAvailabilityLayerClient) SubmitBlock(ctx context.Context, block *types.Block) da.ResultSubmitBlock {
138+
func (m *DataAvailabilityLayerClient) SubmitBlocks(ctx context.Context, blocks []*types.Block) da.ResultSubmitBlocks {
139139
daHeight := atomic.LoadUint64(&m.daHeight)
140-
m.logger.Debug("Submitting block to DA layer!", "height", block.SignedHeader.Header.Height(), "dataLayerHeight", daHeight)
141140

142-
hash := block.SignedHeader.Header.Hash()
143-
blob, err := block.MarshalBinary()
144-
if err != nil {
145-
return da.ResultSubmitBlock{BaseResult: da.BaseResult{Code: da.StatusError, Message: err.Error()}}
146-
}
141+
for _, block := range blocks {
142+
m.logger.Debug("Submitting blocks to DA layer!", "height", block.SignedHeader.Header.Height(), "dataLayerHeight", daHeight)
147143

148-
err = m.dalcKV.Put(ctx, getKey(daHeight, uint64(block.SignedHeader.Header.Height())), hash[:])
149-
if err != nil {
150-
return da.ResultSubmitBlock{BaseResult: da.BaseResult{Code: da.StatusError, Message: err.Error()}}
151-
}
144+
hash := block.SignedHeader.Header.Hash()
145+
blob, err := block.MarshalBinary()
146+
if err != nil {
147+
return da.ResultSubmitBlocks{BaseResult: da.BaseResult{Code: da.StatusError, Message: err.Error()}}
148+
}
152149

153-
err = m.dalcKV.Put(ctx, ds.NewKey(hex.EncodeToString(hash[:])), blob)
154-
if err != nil {
155-
return da.ResultSubmitBlock{BaseResult: da.BaseResult{Code: da.StatusError, Message: err.Error()}}
156-
}
150+
err = m.dalcKV.Put(ctx, getKey(daHeight, uint64(block.SignedHeader.Header.Height())), hash[:])
151+
if err != nil {
152+
return da.ResultSubmitBlocks{BaseResult: da.BaseResult{Code: da.StatusError, Message: err.Error()}}
153+
}
157154

158-
return da.ResultSubmitBlock{
155+
err = m.dalcKV.Put(ctx, ds.NewKey(hex.EncodeToString(hash[:])), blob)
156+
if err != nil {
157+
return da.ResultSubmitBlocks{BaseResult: da.BaseResult{Code: da.StatusError, Message: err.Error()}}
158+
}
159+
}
160+
return da.ResultSubmitBlocks{
159161
BaseResult: da.BaseResult{
160162
Code: da.StatusSuccess,
161163
Message: "OK",

da/test/da_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ func doTestRetrieve(t *testing.T, dalc da.DataAvailabilityLayerClient) {
124124

125125
for i := uint64(0); i < 100; i++ {
126126
b := getRandomBlock(i, rand.Int()%20) //nolint:gosec
127-
resp := dalc.SubmitBlock(ctx, b)
127+
resp := dalc.SubmitBlocks(ctx, []*types.Block{b})
128128
assert.Equal(da.StatusSuccess, resp.Code, resp.Message)
129129
time.Sleep(time.Duration(rand.Int63() % mockDaBlockTime.Milliseconds())) //nolint:gosec
130130

proto/dalc/dalc.proto

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ message DAResponse {
1818
uint64 da_height = 3 [(gogoproto.customname) = "DAHeight"];
1919
}
2020

21-
message SubmitBlockRequest {
22-
rollkit.Block block = 1;
21+
message SubmitBlocksRequest {
22+
repeated rollkit.Block blocks = 1;
2323
}
2424

25-
message SubmitBlockResponse {
25+
message SubmitBlocksResponse {
2626
DAResponse result = 1;
2727
}
2828

@@ -36,6 +36,6 @@ message RetrieveBlocksResponse {
3636
}
3737

3838
service DALCService {
39-
rpc SubmitBlock(SubmitBlockRequest) returns (SubmitBlockResponse) {}
39+
rpc SubmitBlocks(SubmitBlocksRequest) returns (SubmitBlocksResponse) {}
4040
rpc RetrieveBlocks(RetrieveBlocksRequest) returns (RetrieveBlocksResponse) {}
4141
}

0 commit comments

Comments
 (0)