@@ -223,11 +223,14 @@ func (s *DASubmitter) SubmitHeaders(ctx context.Context, headers []*types.Signed
223223
224224 postSubmit := s .makeHeaderPostSubmit (ctx , cache )
225225 namespace := s .client .GetHeaderNamespace ()
226+ submittedOffset := 0
226227
227228 s .wg .Go (func () {
228229 s .submitWithRetry (ctx , envelopes , namespace , func (submittedCount int , daHeight uint64 ) {
229230 if submittedCount > 0 {
230- postSubmit (headers [:submittedCount ], & datypes.ResultSubmit {BaseResult : datypes.BaseResult {Code : datypes .StatusSuccess , SubmittedCount : uint64 (submittedCount ), Height : daHeight }})
231+ end := submittedOffset + submittedCount
232+ postSubmit (headers [submittedOffset :end ], & datypes.ResultSubmit {BaseResult : datypes.BaseResult {Code : datypes .StatusSuccess , SubmittedCount : uint64 (submittedCount ), Height : daHeight }})
233+ submittedOffset = end
231234 }
232235 if onSubmitSuccess != nil {
233236 onSubmitSuccess ()
@@ -280,11 +283,14 @@ func (s *DASubmitter) SubmitData(ctx context.Context, unsignedDataList []*types.
280283
281284 postSubmit := s .makeDataPostSubmit (ctx , cache )
282285 namespace := s .client .GetDataNamespace ()
286+ submittedOffset := 0
283287
284288 s .wg .Go (func () {
285289 s .submitWithRetry (ctx , signedDataListBz , namespace , func (submittedCount int , daHeight uint64 ) {
286290 if submittedCount > 0 {
287- postSubmit (signedDataList [:submittedCount ], & datypes.ResultSubmit {BaseResult : datypes.BaseResult {Code : datypes .StatusSuccess , SubmittedCount : uint64 (submittedCount ), Height : daHeight }})
291+ end := submittedOffset + submittedCount
292+ postSubmit (signedDataList [submittedOffset :end ], & datypes.ResultSubmit {BaseResult : datypes.BaseResult {Code : datypes .StatusSuccess , SubmittedCount : uint64 (submittedCount ), Height : daHeight }})
293+ submittedOffset = end
288294 }
289295 if onSubmitSuccess != nil {
290296 onSubmitSuccess ()
@@ -383,6 +389,15 @@ func (s *DASubmitter) submitWithRetry(
383389 switch res .Code {
384390 case datypes .StatusSuccess :
385391 submitted := int (res .SubmittedCount )
392+ if submitted <= 0 || submitted > len (marshaled ) {
393+ err := fmt .Errorf ("invalid submitted count %d for batch size %d" , submitted , len (marshaled ))
394+ s .recordFailure (common .DASubmitterFailureReasonUnknown )
395+ s .logger .Error ().Err (err ).Str ("itemType" , itemType ).Msg ("DA layer returned invalid submitted count" )
396+ if onError != nil {
397+ onError (err )
398+ }
399+ return
400+ }
386401 if onSuccess != nil {
387402 onSuccess (submitted , res .Height )
388403 }
0 commit comments