@@ -473,6 +473,116 @@ contract MixinMatchOrders is
473
473
);
474
474
}
475
475
476
+ /// @dev Settles matched order by transferring appropriate funds between order makers, taker, and fee recipient.
477
+ /// @param leftOrderHash First matched order hash.
478
+ /// @param rightOrderHash Second matched order hash.
479
+ /// @param leftOrder First matched order.
480
+ /// @param rightOrder Second matched order.
481
+ /// @param takerAddress Address that matched the orders. The taker receives the spread between orders as profit.
482
+ /// @param matchedFillResults Struct holding amounts to transfer between makers, taker, and fee recipients.
483
+ function _settleMatchedOrders (
484
+ bytes32 leftOrderHash ,
485
+ bytes32 rightOrderHash ,
486
+ LibOrder.Order memory leftOrder ,
487
+ LibOrder.Order memory rightOrder ,
488
+ address takerAddress ,
489
+ LibFillResults.MatchedFillResults memory matchedFillResults
490
+ )
491
+ internal
492
+ {
493
+ address leftFeeRecipientAddress = leftOrder.feeRecipientAddress;
494
+ address rightFeeRecipientAddress = rightOrder.feeRecipientAddress;
495
+
496
+ // Right maker asset -> left maker
497
+ _dispatchTransferFrom (
498
+ rightOrderHash,
499
+ rightOrder.makerAssetData,
500
+ rightOrder.makerAddress,
501
+ leftOrder.makerAddress,
502
+ matchedFillResults.left.takerAssetFilledAmount
503
+ );
504
+
505
+ // Left maker asset -> right maker
506
+ _dispatchTransferFrom (
507
+ leftOrderHash,
508
+ leftOrder.makerAssetData,
509
+ leftOrder.makerAddress,
510
+ rightOrder.makerAddress,
511
+ matchedFillResults.right.takerAssetFilledAmount
512
+ );
513
+
514
+ // Right maker fee -> right fee recipient
515
+ _dispatchTransferFrom (
516
+ rightOrderHash,
517
+ rightOrder.makerFeeAssetData,
518
+ rightOrder.makerAddress,
519
+ rightFeeRecipientAddress,
520
+ matchedFillResults.right.makerFeePaid
521
+ );
522
+
523
+ // Left maker fee -> left fee recipient
524
+ _dispatchTransferFrom (
525
+ leftOrderHash,
526
+ leftOrder.makerFeeAssetData,
527
+ leftOrder.makerAddress,
528
+ leftFeeRecipientAddress,
529
+ matchedFillResults.left.makerFeePaid
530
+ );
531
+
532
+ // Settle taker profits.
533
+ _dispatchTransferFrom (
534
+ leftOrderHash,
535
+ leftOrder.makerAssetData,
536
+ leftOrder.makerAddress,
537
+ takerAddress,
538
+ matchedFillResults.profitInLeftMakerAsset
539
+ );
540
+ _dispatchTransferFrom (
541
+ rightOrderHash,
542
+ rightOrder.makerAssetData,
543
+ rightOrder.makerAddress,
544
+ takerAddress,
545
+ matchedFillResults.profitInRightMakerAsset
546
+ );
547
+
548
+ // Settle taker fees.
549
+ if (
550
+ leftFeeRecipientAddress == rightFeeRecipientAddress &&
551
+ leftOrder.takerFeeAssetData.equals (rightOrder.takerFeeAssetData)
552
+ ) {
553
+ // Fee recipients and taker fee assets are identical, so we can
554
+ // transfer them in one go.
555
+ _dispatchTransferFrom (
556
+ leftOrderHash,
557
+ leftOrder.takerFeeAssetData,
558
+ takerAddress,
559
+ leftFeeRecipientAddress,
560
+ _safeAdd (
561
+ matchedFillResults.left.takerFeePaid,
562
+ matchedFillResults.right.takerFeePaid
563
+ )
564
+ );
565
+ } else {
566
+ // Right taker fee -> right fee recipient
567
+ _dispatchTransferFrom (
568
+ rightOrderHash,
569
+ rightOrder.takerFeeAssetData,
570
+ takerAddress,
571
+ rightFeeRecipientAddress,
572
+ matchedFillResults.right.takerFeePaid
573
+ );
574
+
575
+ // Left taker fee -> left fee recipient
576
+ _dispatchTransferFrom (
577
+ leftOrderHash,
578
+ leftOrder.takerFeeAssetData,
579
+ takerAddress,
580
+ leftFeeRecipientAddress,
581
+ matchedFillResults.left.takerFeePaid
582
+ );
583
+ }
584
+ }
585
+
476
586
/// @dev Match complementary orders that have a profitable spread.
477
587
/// Each order is filled at their respective price point, and
478
588
/// the matcher receives a profit denominated in the left maker asset.
@@ -708,115 +818,4 @@ contract MixinMatchOrders is
708
818
709
819
return matchedFillResults;
710
820
}
711
-
712
- /// @dev Settles matched order by transferring appropriate funds between order makers, taker, and fee recipient.
713
- /// @param leftOrderHash First matched order hash.
714
- /// @param rightOrderHash Second matched order hash.
715
- /// @param leftOrder First matched order.
716
- /// @param rightOrder Second matched order.
717
- /// @param takerAddress Address that matched the orders. The taker receives the spread between orders as profit.
718
- /// @param matchedFillResults Struct holding amounts to transfer between makers, taker, and fee recipients.
719
- function _settleMatchedOrders (
720
- bytes32 leftOrderHash ,
721
- bytes32 rightOrderHash ,
722
- LibOrder.Order memory leftOrder ,
723
- LibOrder.Order memory rightOrder ,
724
- address takerAddress ,
725
- LibFillResults.MatchedFillResults memory matchedFillResults
726
- )
727
- private
728
- {
729
- address leftFeeRecipientAddress = leftOrder.feeRecipientAddress;
730
- address rightFeeRecipientAddress = rightOrder.feeRecipientAddress;
731
-
732
- // Right maker asset -> left maker
733
- _dispatchTransferFrom (
734
- rightOrderHash,
735
- rightOrder.makerAssetData,
736
- rightOrder.makerAddress,
737
- leftOrder.makerAddress,
738
- matchedFillResults.left.takerAssetFilledAmount
739
- );
740
-
741
- // Left maker asset -> right maker
742
- _dispatchTransferFrom (
743
- leftOrderHash,
744
- leftOrder.makerAssetData,
745
- leftOrder.makerAddress,
746
- rightOrder.makerAddress,
747
- matchedFillResults.right.takerAssetFilledAmount
748
- );
749
-
750
- // Right maker fee -> right fee recipient
751
- _dispatchTransferFrom (
752
- rightOrderHash,
753
- rightOrder.makerFeeAssetData,
754
- rightOrder.makerAddress,
755
- rightFeeRecipientAddress,
756
- matchedFillResults.right.makerFeePaid
757
- );
758
-
759
- // Left maker fee -> left fee recipient
760
- _dispatchTransferFrom (
761
- leftOrderHash,
762
- leftOrder.makerFeeAssetData,
763
- leftOrder.makerAddress,
764
- leftFeeRecipientAddress,
765
- matchedFillResults.left.makerFeePaid
766
- );
767
-
768
- // Settle taker profits.
769
- _dispatchTransferFrom (
770
- leftOrderHash,
771
- leftOrder.makerAssetData,
772
- leftOrder.makerAddress,
773
- takerAddress,
774
- matchedFillResults.profitInLeftMakerAsset
775
- );
776
-
777
- _dispatchTransferFrom (
778
- rightOrderHash,
779
- rightOrder.makerAssetData,
780
- rightOrder.makerAddress,
781
- takerAddress,
782
- matchedFillResults.profitInRightMakerAsset
783
- );
784
-
785
- // Settle taker fees.
786
- if (
787
- leftFeeRecipientAddress == rightFeeRecipientAddress &&
788
- leftOrder.takerFeeAssetData.equals (rightOrder.takerFeeAssetData)
789
- ) {
790
- // Fee recipients and taker fee assets are identical, so we can
791
- // transfer them in one go.
792
- _dispatchTransferFrom (
793
- leftOrderHash,
794
- leftOrder.takerFeeAssetData,
795
- takerAddress,
796
- leftFeeRecipientAddress,
797
- _safeAdd (
798
- matchedFillResults.left.takerFeePaid,
799
- matchedFillResults.right.takerFeePaid
800
- )
801
- );
802
- } else {
803
- // Right taker fee -> right fee recipient
804
- _dispatchTransferFrom (
805
- rightOrderHash,
806
- rightOrder.takerFeeAssetData,
807
- takerAddress,
808
- rightFeeRecipientAddress,
809
- matchedFillResults.right.takerFeePaid
810
- );
811
-
812
- // Left taker fee -> left fee recipient
813
- _dispatchTransferFrom (
814
- leftOrderHash,
815
- leftOrder.takerFeeAssetData,
816
- takerAddress,
817
- leftFeeRecipientAddress,
818
- matchedFillResults.left.takerFeePaid
819
- );
820
- }
821
- }
822
821
}
0 commit comments