From 7090c50864b7c928022ac95d6e43d1286895a141 Mon Sep 17 00:00:00 2001 From: ThanhNhann Date: Wed, 20 Mar 2024 14:59:54 +0700 Subject: [PATCH 1/4] submit all blocks possible --- block/manager_test.go | 19 ++++++++++--------- da/da.go | 27 +++++++++++++-------------- da/da_test.go | 2 +- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/block/manager_test.go b/block/manager_test.go index f9e1296b0d..8ec3492e76 100644 --- a/block/manager_test.go +++ b/block/manager_test.go @@ -329,9 +329,9 @@ func Test_submitBlocksToDA_BlockMarshalErrorCase1(t *testing.T) { m := getManager(t, goDATest.NewDummyDA()) - block1 := types.GetRandomBlock(uint64(0), 5) - block2 := types.GetRandomBlock(uint64(1), 5) - block3 := types.GetRandomBlock(uint64(2), 5) + block1 := types.GetRandomBlock(uint64(1), 5) + block2 := types.GetRandomBlock(uint64(2), 5) + block3 := types.GetRandomBlock(uint64(3), 5) store := mocks.NewStore(t) invalidateBlockHeader(block1) @@ -354,7 +354,8 @@ func Test_submitBlocksToDA_BlockMarshalErrorCase1(t *testing.T) { assert.Equal(3, len(blocks)) } -// Test_submitBlocksToDA_BlockMarshalErrorCase2: A and B are fair blocks, but C has a marshalling error. None of the blocks get submitted to DA layer. +// Test_submitBlocksToDA_BlockMarshalErrorCase2: A and B are fair blocks, but C has a marshalling error +// - Block A and B get submitted to DA layer not block C func Test_submitBlocksToDA_BlockMarshalErrorCase2(t *testing.T) { assert := assert.New(t) require := require.New(t) @@ -362,12 +363,13 @@ func Test_submitBlocksToDA_BlockMarshalErrorCase2(t *testing.T) { m := getManager(t, goDATest.NewDummyDA()) - block1 := types.GetRandomBlock(uint64(0), 5) - block2 := types.GetRandomBlock(uint64(1), 5) - block3 := types.GetRandomBlock(uint64(2), 5) + block1 := types.GetRandomBlock(uint64(1), 5) + block2 := types.GetRandomBlock(uint64(2), 5) + block3 := types.GetRandomBlock(uint64(3), 5) store := mocks.NewStore(t) invalidateBlockHeader(block3) + store.On("SetMetadata", ctx, LastSubmittedHeightKey, []byte(strconv.FormatUint(2, 10)) ).Return(nil) store.On("GetMetadata", ctx, LastSubmittedHeightKey).Return(nil, ds.ErrNotFound) store.On("GetBlock", ctx, uint64(1)).Return(block1, nil) store.On("GetBlock", ctx, uint64(2)).Return(block2, nil) @@ -379,12 +381,11 @@ func Test_submitBlocksToDA_BlockMarshalErrorCase2(t *testing.T) { var err error m.pendingBlocks, err = NewPendingBlocks(store, m.logger) require.NoError(err) - err = m.submitBlocksToDA(ctx) assert.ErrorContains(err, "failed to submit all blocks to DA layer") blocks, err := m.pendingBlocks.getPendingBlocks(ctx) assert.NoError(err) - assert.Equal(3, len(blocks)) + assert.Equal(1, len(blocks)) } // invalidateBlockHeader results in a block header that produces a marshalling error diff --git a/da/da.go b/da/da.go index a325830ae9..98af428b2f 100644 --- a/da/da.go +++ b/da/da.go @@ -119,32 +119,31 @@ func NewDAClient(da goDA.DA, gasPrice, gasMultiplier float64, ns goDA.Namespace, // SubmitBlocks submits blocks to DA. func (dac *DAClient) SubmitBlocks(ctx context.Context, blocks []*types.Block, maxBlobSize uint64, gasPrice float64) ResultSubmitBlocks { - var blobs [][]byte - var blobSize uint64 - var submitted uint64 + var ( + blobs [][]byte + blobSize uint64 + message string + ) for i := range blocks { blob, err := blocks[i].MarshalBinary() if err != nil { - return ResultSubmitBlocks{ - BaseResult: BaseResult{ - Code: StatusError, - Message: "failed to serialize block", - }, - } + message = fmt.Sprint("failed to serialize block", err) + dac.Logger.Info(message) + break } if blobSize+uint64(len(blob)) > maxBlobSize { - dac.Logger.Info("blob size limit reached", "maxBlobSize", maxBlobSize, "index", i, "blobSize", blobSize, "len(blob)", len(blob)) + message = fmt.Sprint(ErrBlobSizeOverLimit.Error(), "blob size limit reached", "maxBlobSize", maxBlobSize, "index", i, "blobSize", blobSize, "len(blob)", len(blob)) + dac.Logger.Info(message) break } blobSize += uint64(len(blob)) - submitted += 1 blobs = append(blobs, blob) } - if submitted == 0 { + if len(blobs) == 0 { return ResultSubmitBlocks{ BaseResult: BaseResult{ Code: StatusError, - Message: "failed to submit blocks: oversized block: " + ErrBlobSizeOverLimit.Error(), + Message: "failed to submit blocks: no blobs generated " + message, }, } } @@ -186,7 +185,7 @@ func (dac *DAClient) SubmitBlocks(ctx context.Context, blocks []*types.Block, ma BaseResult: BaseResult{ Code: StatusSuccess, DAHeight: binary.LittleEndian.Uint64(ids[0]), - SubmittedCount: submitted, + SubmittedCount: uint64(len(blobs)), }, } } diff --git a/da/da_test.go b/da/da_test.go index 6e556e0d93..5018b0e5db 100644 --- a/da/da_test.go +++ b/da/da_test.go @@ -274,7 +274,7 @@ func doTestSubmitOversizedBlock(t *testing.T, dalc *DAClient) { oversizedBlock := types.GetRandomBlock(1, int(limit)) resp := dalc.SubmitBlocks(ctx, []*types.Block{oversizedBlock}, limit, -1) assert.Equal(StatusError, resp.Code, "oversized block should throw error") - assert.Contains(resp.Message, "failed to submit blocks: oversized block: blob: over size limit") + assert.Contains(resp.Message, "failed to submit blocks: no blobs generated blob: over size limit") } func doTestSubmitSmallBlocksBatch(t *testing.T, dalc *DAClient) { From 3972e46d63855706277fb4b05dc3e012299948d4 Mon Sep 17 00:00:00 2001 From: ThanhNhann Date: Wed, 20 Mar 2024 15:07:49 +0700 Subject: [PATCH 2/4] lint --- block/manager_test.go | 2 +- da/da.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/block/manager_test.go b/block/manager_test.go index 8ec3492e76..94c69e9daa 100644 --- a/block/manager_test.go +++ b/block/manager_test.go @@ -369,7 +369,7 @@ func Test_submitBlocksToDA_BlockMarshalErrorCase2(t *testing.T) { store := mocks.NewStore(t) invalidateBlockHeader(block3) - store.On("SetMetadata", ctx, LastSubmittedHeightKey, []byte(strconv.FormatUint(2, 10)) ).Return(nil) + store.On("SetMetadata", ctx, LastSubmittedHeightKey, []byte(strconv.FormatUint(2, 10))).Return(nil) store.On("GetMetadata", ctx, LastSubmittedHeightKey).Return(nil, ds.ErrNotFound) store.On("GetBlock", ctx, uint64(1)).Return(block1, nil) store.On("GetBlock", ctx, uint64(2)).Return(block2, nil) diff --git a/da/da.go b/da/da.go index 98af428b2f..bbf86325fe 100644 --- a/da/da.go +++ b/da/da.go @@ -120,9 +120,9 @@ func NewDAClient(da goDA.DA, gasPrice, gasMultiplier float64, ns goDA.Namespace, // SubmitBlocks submits blocks to DA. func (dac *DAClient) SubmitBlocks(ctx context.Context, blocks []*types.Block, maxBlobSize uint64, gasPrice float64) ResultSubmitBlocks { var ( - blobs [][]byte + blobs [][]byte blobSize uint64 - message string + message string ) for i := range blocks { blob, err := blocks[i].MarshalBinary() From e71249a367ca0ae595ad7fd92a7eefed073a72b1 Mon Sep 17 00:00:00 2001 From: ThanhNhann Date: Mon, 25 Mar 2024 11:14:16 +0700 Subject: [PATCH 3/4] update code with Sevey's suggestions --- da/da.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/da/da.go b/da/da.go index bbf86325fe..c279f4c6e2 100644 --- a/da/da.go +++ b/da/da.go @@ -147,6 +147,8 @@ func (dac *DAClient) SubmitBlocks(ctx context.Context, blocks []*types.Block, ma }, } } + dac.Logger.Info("Starting to submit blocks with %v blobs generated", len(blobs)) + ctx, cancel := context.WithTimeout(ctx, dac.SubmitTimeout) defer cancel() ids, err := dac.DA.Submit(ctx, blobs, gasPrice, dac.Namespace) @@ -185,7 +187,7 @@ func (dac *DAClient) SubmitBlocks(ctx context.Context, blocks []*types.Block, ma BaseResult: BaseResult{ Code: StatusSuccess, DAHeight: binary.LittleEndian.Uint64(ids[0]), - SubmittedCount: uint64(len(blobs)), + SubmittedCount: uint64(len(ids)), }, } } From 8c73a64790253dbbdc382a50f738cee9bd64625a Mon Sep 17 00:00:00 2001 From: ThanhNhann Date: Sat, 30 Mar 2024 14:08:36 +0700 Subject: [PATCH 4/4] fix panic CI --- da/da.go | 1 - 1 file changed, 1 deletion(-) diff --git a/da/da.go b/da/da.go index c279f4c6e2..efb5532495 100644 --- a/da/da.go +++ b/da/da.go @@ -147,7 +147,6 @@ func (dac *DAClient) SubmitBlocks(ctx context.Context, blocks []*types.Block, ma }, } } - dac.Logger.Info("Starting to submit blocks with %v blobs generated", len(blobs)) ctx, cancel := context.WithTimeout(ctx, dac.SubmitTimeout) defer cancel()