@@ -502,12 +502,6 @@ func (n *OpenBazaarNode) CloseDispute(orderID string, buyerPercentage, vendorPer
502
502
return ErrCloseFailureCaseExpired
503
503
}
504
504
505
- var outpoints = dispute .ResolutionPaymentOutpoints (payDivision )
506
- if outpoints == nil {
507
- log .Errorf ("no outpoints to resolve in dispute for order %s" , orderID )
508
- return ErrCloseFailureNoOutpoints
509
- }
510
-
511
505
if dispute .VendorContract == nil && vendorPercentage > 0 {
512
506
return errors .New ("vendor must provide his copy of the contract before you can release funds to the vendor" )
513
507
}
@@ -521,6 +515,24 @@ func (n *OpenBazaarNode) CloseDispute(orderID string, buyerPercentage, vendorPer
521
515
return err
522
516
}
523
517
518
+ var outpoints = dispute .ResolutionPaymentOutpoints (payDivision )
519
+ if outpoints == nil {
520
+ log .Errorf ("no outpoints to resolve in dispute for order %s" , orderID )
521
+ return ErrCloseFailureNoOutpoints
522
+ }
523
+ for i , o := range outpoints {
524
+ if preferredContract .VendorListings [0 ].Metadata .Version < repo .ListingVersion {
525
+ if o .BigValue != "" {
526
+ n , ok := new (big.Int ).SetString (o .BigValue , 10 )
527
+ if ! ok {
528
+ return errors .New ("invalid amount" )
529
+ }
530
+ outpoints [i ].Value = n .Uint64 ()
531
+ outpoints [i ].BigValue = ""
532
+ }
533
+ }
534
+ }
535
+
524
536
// TODO: Remove once broken contracts are migrated
525
537
paymentCoin := preferredOrder .Payment .AmountCurrency .Code
526
538
_ , err = n .LookupCurrency (paymentCoin )
@@ -563,9 +575,15 @@ func (n *OpenBazaarNode) CloseDispute(orderID string, buyerPercentage, vendorPer
563
575
// Calculate total out value
564
576
totalOut := big .NewInt (0 )
565
577
for _ , o := range outpoints {
566
- n , ok := new (big.Int ).SetString (o .BigValue , 10 )
567
- if ! ok {
568
- return errors .New ("invalid total out amount" )
578
+ var n * big.Int
579
+ if o .Value > 0 {
580
+ n = big .NewInt (int64 (o .Value ))
581
+ } else {
582
+ ok := false
583
+ n , ok = new (big.Int ).SetString (o .BigValue , 10 )
584
+ if ! ok {
585
+ return errors .New ("invalid amount" )
586
+ }
569
587
}
570
588
totalOut = new (big.Int ).Add (totalOut , n )
571
589
}
@@ -640,9 +658,15 @@ func (n *OpenBazaarNode) CloseDispute(orderID string, buyerPercentage, vendorPer
640
658
if err != nil {
641
659
return err
642
660
}
643
- n , ok := new (big.Int ).SetString (o .BigValue , 10 )
644
- if ! ok {
645
- return errors .New ("invalid amount" )
661
+ var n * big.Int
662
+ if o .Value > 0 {
663
+ n = big .NewInt (int64 (o .Value ))
664
+ } else {
665
+ ok := false
666
+ n , ok = new (big.Int ).SetString (o .BigValue , 10 )
667
+ if ! ok {
668
+ return errors .New ("invalid amount" )
669
+ }
646
670
}
647
671
input := wallet.TransactionInput {
648
672
OutpointHash : decodedHash ,
@@ -738,25 +762,39 @@ func (n *OpenBazaarNode) CloseDispute(orderID string, buyerPercentage, vendorPer
738
762
if out , ok := outMap ["buyer" ]; ok {
739
763
payout .BuyerOutput = & pb.DisputeResolution_Payout_Output {
740
764
ScriptOrAddress : & pb.DisputeResolution_Payout_Output_Address {Address : buyerAddr .String ()},
741
- BigAmount : out .Value .String (),
765
+ }
766
+ if preferredContract .VendorListings [0 ].Metadata .Version >= repo .ListingVersion {
767
+ payout .BuyerOutput .BigAmount = out .Value .String ()
768
+ } else {
769
+ payout .BuyerOutput .Amount = out .Value .Uint64 ()
742
770
}
743
771
}
744
772
if out , ok := outMap ["vendor" ]; ok {
745
773
payout .VendorOutput = & pb.DisputeResolution_Payout_Output {
746
774
ScriptOrAddress : & pb.DisputeResolution_Payout_Output_Address {Address : vendorAddr .String ()},
747
- BigAmount : out .Value .String (),
775
+ }
776
+ if preferredContract .VendorListings [0 ].Metadata .Version >= repo .ListingVersion {
777
+ payout .VendorOutput .BigAmount = out .Value .String ()
778
+ } else {
779
+ payout .VendorOutput .Amount = out .Value .Uint64 ()
748
780
}
749
781
}
750
782
if out , ok := outMap ["moderator" ]; ok {
751
783
payout .ModeratorOutput = & pb.DisputeResolution_Payout_Output {
752
784
ScriptOrAddress : & pb.DisputeResolution_Payout_Output_Address {Address : modAddr .String ()},
753
- BigAmount : out .Value .String (),
785
+ }
786
+ if preferredContract .VendorListings [0 ].Metadata .Version >= repo .ListingVersion {
787
+ payout .ModeratorOutput .BigAmount = out .Value .String ()
788
+ } else {
789
+ payout .ModeratorOutput .Amount = out .Value .Uint64 ()
754
790
}
755
791
}
756
792
757
- payout .PayoutCurrency = & pb.CurrencyDefinition {
758
- Code : preferredOrder .Payment .AmountCurrency .Code ,
759
- Divisibility : preferredOrder .Payment .AmountCurrency .Divisibility ,
793
+ if preferredContract .VendorListings [0 ].Metadata .Version >= repo .ListingVersion {
794
+ payout .PayoutCurrency = & pb.CurrencyDefinition {
795
+ Code : preferredOrder .Payment .AmountCurrency .Code ,
796
+ Divisibility : preferredOrder .Payment .AmountCurrency .Divisibility ,
797
+ }
760
798
}
761
799
762
800
d .Payout = payout
0 commit comments