@@ -171,6 +171,15 @@ func (service *CascadeAPIHandler) StartProcessing(ctx context.Context, p *cascad
171
171
}
172
172
sortedRelatedFiles := service .register .SortFilesWithHigherAmounts (relatedFiles )
173
173
174
+ err = service .checkBurnTxIDsValidForRegistration (ctx , sortedBurnTxids , sortedRelatedFiles )
175
+ if err != nil {
176
+ log .WithContext (ctx ).WithField ("related_volumes" , len (relatedFiles )).
177
+ WithError (err ).
178
+ WithField ("burn_txids" , len (p .BurnTxids )).
179
+ Error ("given burn-tx-ids are not valid" )
180
+ return nil , cascade .MakeBadRequest (errors .New ("given burn txids are not valid" ))
181
+ }
182
+
174
183
var taskIDs []string
175
184
for index , file := range sortedRelatedFiles {
176
185
burnTxID := sortedBurnTxids [index ]
@@ -558,12 +567,30 @@ func (service *CascadeAPIHandler) Restore(ctx context.Context, p *cascade.Restor
558
567
if unConcludedVolume .RegTxid == "" {
559
568
logger .WithField ("volume_name" , unConcludedVolume .FileID ).Info ("find a volume with no registration, trying again..." )
560
569
570
+ << << << < Updated upstream
561
571
burnTxId , err := service .register .GetBurnTxIdByAmount (ctx , int64 (unConcludedVolume .ReqBurnTxnAmount ))
562
572
if err != nil {
563
573
log .WithContext (ctx ).WithField ("amount" , int64 (unConcludedVolume .ReqBurnTxnAmount )).WithError (err ).Error ("error getting burn TxId for amount" )
564
574
return nil , cascade .MakeInternalServerError (err )
565
575
}
566
576
logger .WithField ("volume_name" , unConcludedVolume .FileID ).Info ("estimated fee has been burned, sending for registration" )
577
+ == == == =
578
+ var burnTxId string
579
+ if service .IsBurnTxIDValidForRecovery (ctx , v .BurnTxnID , v .ReqAmount - 10 ) {
580
+ log .WithContext (ctx ).WithField ("burn_txid" , v .BurnTxnID ).Info ("existing burn-txid is valid" )
581
+ burnTxId = v .BurnTxnID
582
+ } else {
583
+ log .WithContext (ctx ).WithField ("burn_txid" , v .BurnTxnID ).Info ("existing burn-txid is not valid, burning the new txid" )
584
+
585
+ burnTxId , err = service .register .GetBurnTxIdByAmount (ctx , int64 (v .ReqBurnTxnAmount ))
586
+ if err != nil {
587
+ log .WithContext (ctx ).WithField ("amount" , int64 (v .ReqBurnTxnAmount )).WithError (err ).Error ("error getting burn TxId for amount" )
588
+ return nil , cascade .MakeInternalServerError (err )
589
+ }
590
+
591
+ logger .WithField ("volume_name" , v .FileID ).Info ("estimated fee has been burned, sending for registration" )
592
+ }
593
+ >> >> >> > Stashed changes
567
594
568
595
addTaskPayload := & common.AddTaskPayload {
569
596
FileID : unConcludedVolume .FileID ,
@@ -577,7 +604,13 @@ func (service *CascadeAPIHandler) Restore(ctx context.Context, p *cascade.Restor
577
604
addTaskPayload .SpendableAddress = p .SpendableAddress
578
605
}
579
606
607
+ << << << < Updated upstream
580
608
_ , err = service .register .ProcessFile (ctx , * unConcludedVolume , addTaskPayload )
609
+ == == == =
610
+ service .register .Worker .Tasks ()
611
+
612
+ _ , err = service .register .ProcessFile (ctx , * v , addTaskPayload )
613
+ >> >> >> > Stashed changes
581
614
if err != nil {
582
615
log .WithContext (ctx ).WithField ("file_id" , unConcludedVolume .FileID ).WithError (err ).Error ("error processing un-concluded volume" )
583
616
continue
@@ -633,6 +666,40 @@ func (service *CascadeAPIHandler) Restore(ctx context.Context, p *cascade.Restor
633
666
}, nil
634
667
}
635
668
669
+ func (service * CascadeAPIHandler ) checkBurnTxIDsValidForRegistration (ctx context.Context , burnTxIDs []string , files types.Files ) error {
670
+ if isDuplicateExists (burnTxIDs ) {
671
+ return errors .New ("duplicate burn-tx-ids provided" )
672
+ }
673
+
674
+ for _ , bid := range burnTxIDs {
675
+ if err := service .register .CheckBurnTxIDTicketDuplication (ctx , bid ); err != nil {
676
+ return err
677
+ }
678
+ }
679
+
680
+ for i := 0 ; i < len (files ); i ++ {
681
+ err := service .register .ValidBurnTxnAmount (ctx , burnTxIDs [i ], files [i ].ReqBurnTxnAmount )
682
+ if err != nil {
683
+ return err
684
+ }
685
+ }
686
+
687
+ return nil
688
+ }
689
+
690
+ func (service * CascadeAPIHandler ) IsBurnTxIDValidForRecovery (ctx context.Context , burnTxID string , estimatedFee float64 ) bool {
691
+ if err := service .register .CheckBurnTxIDTicketDuplication (ctx , burnTxID ); err != nil {
692
+ return false
693
+ }
694
+
695
+ err := service .register .ValidateBurnTxn (ctx , burnTxID , estimatedFee )
696
+ if err != nil {
697
+ return false
698
+ }
699
+
700
+ return true
701
+ }
702
+
636
703
// NewCascadeAPIHandler returns the swagger OpenAPI implementation.
637
704
func NewCascadeAPIHandler (config * Config , filesMap * sync.Map , register * cascaderegister.CascadeRegistrationService , download * download.NftDownloadingService ) * CascadeAPIHandler {
638
705
return & CascadeAPIHandler {
0 commit comments