Skip to content

Commit

Permalink
da check added before retrieving
Browse files Browse the repository at this point in the history
  • Loading branch information
srene committed Apr 19, 2024
1 parent c9d6171 commit b768960
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 0 deletions.
1 change: 1 addition & 0 deletions block/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ import "errors"
var (
ErrNonRecoverable = errors.New("non recoverable")
ErrRecoverable = errors.New("recoverable")
ErrWrongDA = errors.New("wrong DA")
)
54 changes: 54 additions & 0 deletions block/manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ func TestRetrieveDaBatchesFailed(t *testing.T) {

t.Log(manager.lastState.SLStateIndex)
daMetaData := &da.DASubmitMetaData{
Client: da.Mock,
Height: 1,
}
err = manager.processNextDABatch(daMetaData)
Expand Down Expand Up @@ -465,3 +466,56 @@ func TestCreateNextDABatchWithBytesLimit(t *testing.T) {
})
}
}

func TestDAFetch(t *testing.T) {

require := require.New(t)
// Setup app
app := testutil.GetAppMock(testutil.Info, testutil.Commit)
// Create proxy app
clientCreator := proxy.NewLocalClientCreator(app)
proxyApp := proxy.NewAppConns(clientCreator)
err := proxyApp.Start()
require.NoError(err)
// Create a new mock store which should succeed to save the first block
mockStore := testutil.NewMockStore()
// Init manager
manager, err := getManager(getManagerConfig(), nil, nil, 1, 1, 0, proxyApp, mockStore)
require.NoError(err)

syncTarget := manager.syncTarget.Load()
nextBatchStartHeight := syncTarget + 1
batch, err := testutil.GenerateBatch(nextBatchStartHeight, nextBatchStartHeight+uint64(defaultBatchSize-1), manager.proposerKey)
require.NoError(err)
daResultSubmitBatch := manager.dalc.SubmitBatch(batch)
require.Equal(daResultSubmitBatch.Code, da.StatusSuccess)
err = manager.settlementClient.SubmitBatch(batch, manager.dalc.GetClientType(), &daResultSubmitBatch)
require.NoError(err)

cases := []struct {
name string
manager *Manager
daMetaData *da.DASubmitMetaData
err error
}{
{
name: "valid DA",
manager: manager,
daMetaData: daResultSubmitBatch.SubmitMetaData,
err: nil,
},
{
name: "wrong DA",
manager: manager,
daMetaData: &da.DASubmitMetaData{Client: da.Celestia, Height: daResultSubmitBatch.SubmitMetaData.Height},
err: ErrWrongDA,
},
}

for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
result := manager.fetchBatch(c.daMetaData)
require.Equal(c.err, result.Error)
})
}
}
12 changes: 12 additions & 0 deletions block/retriever.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ func (m *Manager) processNextDABatch(daMetaData *da.DASubmitMetaData) error {
m.logger.Debug("trying to retrieve batch from DA", "daHeight", daMetaData.Height)
batchResp := m.fetchBatch(daMetaData)
if batchResp.Code != da.StatusSuccess {
m.logger.Error("Failed fetching batch from DA", batchResp.Message)
return batchResp.Error
}

Expand Down Expand Up @@ -108,6 +109,17 @@ func (m *Manager) processNextDABatch(daMetaData *da.DASubmitMetaData) error {
}

func (m *Manager) fetchBatch(daMetaData *da.DASubmitMetaData) da.ResultRetrieveBatch {

// Check DA client
if daMetaData.Client != m.dalc.GetClientType() {
return da.ResultRetrieveBatch{
BaseResult: da.BaseResult{
Code: da.StatusError,
Message: fmt.Sprintf("DA batch client from SL does not match node config: DA client SL: %s: DA client config: %s", daMetaData.Client, m.dalc.GetClientType()),
Error: ErrWrongDA,
},
}
}
// Check batch availability
availabilityRes := m.retriever.CheckBatchAvailability(daMetaData)
if availabilityRes.Code != da.StatusSuccess {
Expand Down

0 comments on commit b768960

Please sign in to comment.