diff --git a/contracts/exchange/test/internal.ts b/contracts/exchange/test/internal.ts index b7cb059693..8357233f8c 100644 --- a/contracts/exchange/test/internal.ts +++ b/contracts/exchange/test/internal.ts @@ -81,55 +81,22 @@ blockchainTests('Exchange core internal functions', env => { let makerAddressLeft: string; let makerAddressRight: string; - function createMatchedFillResultsFromFilled( - leftMakerAssetFilledAmount: BigNumber, - leftTakerAssetFilledAmount: BigNumber, - rightMakerAssetFilledAmount: BigNumber, - rightTakerAssetFilledAmount: BigNumber, - ): MatchedFillResults { - return { - ...EMPTY_MATCHED_FILL_RESULTS, - left: { - ...EMPTY_FILL_RESULTS, - makerAssetFilledAmount: leftMakerAssetFilledAmount, - takerAssetFilledAmount: leftTakerAssetFilledAmount, - }, - right: { - ...EMPTY_FILL_RESULTS, - makerAssetFilledAmount: rightMakerAssetFilledAmount, - takerAssetFilledAmount: rightTakerAssetFilledAmount, - }, - }; + interface PartialMatchedFillResults { + left: Partial; + right: Partial; + profitInLeftMakerAsset?: BigNumber; + profitInRightMakerAsset?: BigNumber; } - function createMatchedFillResults( - leftMakerAssetFilledAmount: BigNumber, - leftTakerAssetFilledAmount: BigNumber, - leftMakerFeePaid: BigNumber, - leftTakerFeePaid: BigNumber, - rightMakerAssetFilledAmount: BigNumber, - rightTakerAssetFilledAmount: BigNumber, - rightMakerFeePaid: BigNumber, - rightTakerFeePaid: BigNumber, - profitInLeftMakerAsset?: BigNumber, - profitInRightMakerAsset?: BigNumber, - ): MatchedFillResults { - return { - left: { - makerAssetFilledAmount: leftMakerAssetFilledAmount, - takerAssetFilledAmount: leftTakerAssetFilledAmount, - makerFeePaid: leftMakerFeePaid, - takerFeePaid: leftTakerFeePaid, - }, - right: { - makerAssetFilledAmount: rightMakerAssetFilledAmount, - takerAssetFilledAmount: rightTakerAssetFilledAmount, - makerFeePaid: rightMakerFeePaid, - takerFeePaid: rightTakerFeePaid, - }, - profitInLeftMakerAsset: profitInLeftMakerAsset || constants.ZERO_AMOUNT, - profitInRightMakerAsset: profitInRightMakerAsset || constants.ZERO_AMOUNT, - }; + function createMatchedFillResults(partialMatchedFillResults: PartialMatchedFillResults): MatchedFillResults { + const matchedFillResults = EMPTY_MATCHED_FILL_RESULTS; + matchedFillResults.left = _.assign({}, EMPTY_FILL_RESULTS, partialMatchedFillResults.left); + matchedFillResults.right = _.assign({}, EMPTY_FILL_RESULTS, partialMatchedFillResults.right); + matchedFillResults.profitInLeftMakerAsset = + partialMatchedFillResults.profitInLeftMakerAsset || constants.ZERO_AMOUNT; + matchedFillResults.profitInRightMakerAsset = + partialMatchedFillResults.profitInRightMakerAsset || constants.ZERO_AMOUNT; + return matchedFillResults; } before(async () => { @@ -284,12 +251,16 @@ blockchainTests('Exchange core internal functions', env => { // Note: This call would never be able to be made through our contracts, since these orders will not actually be // fully filled. This is just a test case to make sure. it('should correctly update the fillResults with nonzero input', async () => { - const expectedMatchedFillResults = createMatchedFillResultsFromFilled( - Web3Wrapper.toBaseUnitAmount(17, 0), - Web3Wrapper.toBaseUnitAmount(98, 0), - Web3Wrapper.toBaseUnitAmount(75, 0), - Web3Wrapper.toBaseUnitAmount(13, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(17, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(98, 0), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(75, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(13, 0), + }, + }); await assertCalculateCompleteFillBothAsync( expectedMatchedFillResults, new BigNumber(17), @@ -300,12 +271,16 @@ blockchainTests('Exchange core internal functions', env => { }); it('should correctly update the fillResults with nonzero input', async () => { - const expectedMatchedFillResults = createMatchedFillResultsFromFilled( - Web3Wrapper.toBaseUnitAmount(5, 0), - Web3Wrapper.toBaseUnitAmount(10, 0), - Web3Wrapper.toBaseUnitAmount(10, 0), - Web3Wrapper.toBaseUnitAmount(5, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 0), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 0), + }, + }); await assertCalculateCompleteFillBothAsync( expectedMatchedFillResults, new BigNumber(5), @@ -316,12 +291,16 @@ blockchainTests('Exchange core internal functions', env => { }); it('should correctly update the fillResults with nonzero input', async () => { - const expectedMatchedFillResults = createMatchedFillResultsFromFilled( - Web3Wrapper.toBaseUnitAmount(5, 18), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(5, 18), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 18), + }, + }); await assertCalculateCompleteFillBothAsync( expectedMatchedFillResults, Web3Wrapper.toBaseUnitAmount(5, 18), @@ -332,12 +311,16 @@ blockchainTests('Exchange core internal functions', env => { }); it('should correctly update the fillResults with nonzero input', async () => { - const expectedMatchedFillResults = createMatchedFillResultsFromFilled( - Web3Wrapper.toBaseUnitAmount(5, 18), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(2, 18), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(2, 18), + }, + }); await assertCalculateCompleteFillBothAsync( expectedMatchedFillResults, Web3Wrapper.toBaseUnitAmount(5, 18), @@ -400,12 +383,16 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(17, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(98, 0), }); - const expectedMatchedFillResults = createMatchedFillResultsFromFilled( - Web3Wrapper.toBaseUnitAmount(13, 0), - Web3Wrapper.toBaseUnitAmount(75, 0), - Web3Wrapper.toBaseUnitAmount(75, 0), - Web3Wrapper.toBaseUnitAmount(13, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(13, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(75, 0), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(75, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(13, 0), + }, + }); await assertCalculateCompleteRightFillAsync( expectedMatchedFillResults, leftOrder, @@ -419,12 +406,16 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(12, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(97, 0), }); - const expectedMatchedFillResults = createMatchedFillResultsFromFilled( - Web3Wrapper.toBaseUnitAmount(11, 0), - Web3Wrapper.toBaseUnitAmount(89, 0), - Web3Wrapper.toBaseUnitAmount(89, 0), - Web3Wrapper.toBaseUnitAmount(1, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(11, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(89, 0), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(89, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(1, 0), + }, + }); await assertCalculateCompleteRightFillAsync( expectedMatchedFillResults, leftOrder, @@ -438,12 +429,16 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(50, 18), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(100, 18), }); - const expectedMatchedFillResults = createMatchedFillResultsFromFilled( - Web3Wrapper.toBaseUnitAmount(5, 18), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(2, 18), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(2, 18), + }, + }); await assertCalculateCompleteRightFillAsync( expectedMatchedFillResults, leftOrder, @@ -725,16 +720,20 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(75, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(13, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(13, 0), - Web3Wrapper.toBaseUnitAmount(75, 0), - Web3Wrapper.toBaseUnitAmount(new BigNumber('76.4705882352941176'), 16), - Web3Wrapper.toBaseUnitAmount(new BigNumber('76.5306122448979591'), 16), - Web3Wrapper.toBaseUnitAmount(75, 0), - Web3Wrapper.toBaseUnitAmount(13, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(13, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(75, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('76.4705882352941176'), 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('76.5306122448979591'), 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(75, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(13, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + }); await assertCalculateMatchedFillResultsAsync( expectedMatchedFillResults, leftOrder, @@ -753,17 +752,21 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(97, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(14, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(15, 0), - Web3Wrapper.toBaseUnitAmount(90, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(90, 0), - Web3Wrapper.toBaseUnitAmount(13, 0), - Web3Wrapper.toBaseUnitAmount(new BigNumber('92.7835051546391752'), 16), // 92.85% - Web3Wrapper.toBaseUnitAmount(new BigNumber('92.8571428571428571'), 16), // 92.85% - Web3Wrapper.toBaseUnitAmount(2, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(15, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(90, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(90, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(13, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('92.7835051546391752'), 16), // 92.85% + takerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('92.8571428571428571'), 16), // 92.85% + }, + profitInLeftMakerAsset: Web3Wrapper.toBaseUnitAmount(2, 0), + }); await assertCalculateMatchedFillResultsAsync( expectedMatchedFillResults, leftOrder, @@ -784,17 +787,21 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(83, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(49, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(16, 0), - Web3Wrapper.toBaseUnitAmount(22, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(22, 0), - Web3Wrapper.toBaseUnitAmount(13, 0), - Web3Wrapper.toBaseUnitAmount(new BigNumber('26.5060240963855421'), 16), // 26.506% - Web3Wrapper.toBaseUnitAmount(new BigNumber('26.5306122448979591'), 16), // 26.531% - Web3Wrapper.toBaseUnitAmount(3, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(16, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(22, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(22, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(13, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('26.5060240963855421'), 16), // 26.506% + takerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('26.5306122448979591'), 16), // 26.531% + }, + profitInLeftMakerAsset: Web3Wrapper.toBaseUnitAmount(3, 0), + }); await assertCalculateMatchedFillResultsAsync( expectedMatchedFillResults, leftOrder, @@ -815,17 +822,21 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(89, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(1, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(11, 0), - Web3Wrapper.toBaseUnitAmount(89, 0), - Web3Wrapper.toBaseUnitAmount(new BigNumber('91.6666666666666666'), 16), // 91.6% - Web3Wrapper.toBaseUnitAmount(new BigNumber('91.7525773195876288'), 16), // 91.75% - Web3Wrapper.toBaseUnitAmount(89, 0), - Web3Wrapper.toBaseUnitAmount(1, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(10, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(11, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(89, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('91.6666666666666666'), 16), // 91.6% + takerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('91.7525773195876288'), 16), // 91.75% + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(89, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(1, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + profitInLeftMakerAsset: Web3Wrapper.toBaseUnitAmount(10, 0), + }); await assertCalculateMatchedFillResultsAsync( expectedMatchedFillResults, leftOrder, @@ -848,17 +859,21 @@ blockchainTests('Exchange core internal functions', env => { makerFee: Web3Wrapper.toBaseUnitAmount(10000, 0), takerFee: Web3Wrapper.toBaseUnitAmount(10000, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(16, 0), - Web3Wrapper.toBaseUnitAmount(22, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(22, 0), - Web3Wrapper.toBaseUnitAmount(13, 0), - Web3Wrapper.toBaseUnitAmount(2650, 0), - Web3Wrapper.toBaseUnitAmount(2653, 0), - Web3Wrapper.toBaseUnitAmount(3, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(16, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(22, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(22, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(13, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(2650, 0), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(2653, 0), + }, + profitInLeftMakerAsset: Web3Wrapper.toBaseUnitAmount(3, 0), + }); await assertCalculateMatchedFillResultsAsync( expectedMatchedFillResults, leftOrder, @@ -882,17 +897,21 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(89, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(1, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(11, 0), - Web3Wrapper.toBaseUnitAmount(89, 0), - Web3Wrapper.toBaseUnitAmount(9166, 0), - Web3Wrapper.toBaseUnitAmount(9175, 0), - Web3Wrapper.toBaseUnitAmount(89, 0), - Web3Wrapper.toBaseUnitAmount(1, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(10, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(11, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(89, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(9166, 0), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(9175, 0), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(89, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(1, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + profitInLeftMakerAsset: Web3Wrapper.toBaseUnitAmount(10, 0), + }); await assertCalculateMatchedFillResultsAsync( expectedMatchedFillResults, leftOrder, @@ -913,17 +932,21 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(2126, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(1063, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(1000, 0), - Web3Wrapper.toBaseUnitAmount(1005, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(1005, 0), - Web3Wrapper.toBaseUnitAmount(503, 0), - Web3Wrapper.toBaseUnitAmount(new BigNumber('47.2718720602069614'), 16), // 47.27% - Web3Wrapper.toBaseUnitAmount(new BigNumber('47.3189087488240827'), 16), // 47.31% - Web3Wrapper.toBaseUnitAmount(497, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(1000, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(1005, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(1005, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(503, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('47.2718720602069614'), 16), // 47.27% + takerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('47.3189087488240827'), 16), // 47.31% + }, + profitInLeftMakerAsset: Web3Wrapper.toBaseUnitAmount(497, 0), + }); await assertCalculateMatchedFillResultsAsync( expectedMatchedFillResults, leftOrder, @@ -942,17 +965,21 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(10, 18), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(2, 18), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(5, 18), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(2, 18), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(3, 18), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(2, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + profitInLeftMakerAsset: Web3Wrapper.toBaseUnitAmount(3, 18), + }); await assertCalculateMatchedFillResultsAsync( expectedMatchedFillResults, leftOrder, @@ -971,16 +998,20 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(10, 18), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(5, 18), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(5, 18), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(5, 18), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + }); await assertCalculateMatchedFillResultsAsync( expectedMatchedFillResults, leftOrder, @@ -999,17 +1030,21 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(20, 18), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(4, 18), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(5, 18), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(2, 18), - Web3Wrapper.toBaseUnitAmount(50, 16), - Web3Wrapper.toBaseUnitAmount(50, 16), - Web3Wrapper.toBaseUnitAmount(3, 18), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(2, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(50, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(50, 16), + }, + profitInLeftMakerAsset: Web3Wrapper.toBaseUnitAmount(3, 18), + }); await assertCalculateMatchedFillResultsAsync( expectedMatchedFillResults, leftOrder, @@ -1028,17 +1063,21 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(10, 18), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(2, 18), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(5, 18), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(10, 16), - Web3Wrapper.toBaseUnitAmount(10, 16), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(2, 18), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(3, 18), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(10, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(10, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(2, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + profitInLeftMakerAsset: Web3Wrapper.toBaseUnitAmount(3, 18), + }); await assertCalculateMatchedFillResultsAsync( expectedMatchedFillResults, leftOrder, @@ -1290,16 +1329,20 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(75, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(13, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(13, 0), - Web3Wrapper.toBaseUnitAmount(75, 0), - Web3Wrapper.toBaseUnitAmount(new BigNumber('76.4705882352941176'), 16), // 76.47% - Web3Wrapper.toBaseUnitAmount(new BigNumber('76.5306122448979591'), 16), // 76.53% - Web3Wrapper.toBaseUnitAmount(75, 0), - Web3Wrapper.toBaseUnitAmount(13, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(13, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(75, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('76.4705882352941176'), 16), // 76.47% + takerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('76.5306122448979591'), 16), // 76.53% + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(75, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(13, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + }); await assertCalculateMatchedFillResultsWithMaximalFillAsync( expectedMatchedFillResults, leftOrder, @@ -1320,18 +1363,22 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(196, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(28, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(15, 0), - Web3Wrapper.toBaseUnitAmount(90, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(105, 0), - Web3Wrapper.toBaseUnitAmount(15, 0), - Web3Wrapper.toBaseUnitAmount(new BigNumber('53.5714285714285714'), 16), // 53.57% - Web3Wrapper.toBaseUnitAmount(new BigNumber('53.5714285714285714'), 16), // 53.57% - constants.ZERO_AMOUNT, - Web3Wrapper.toBaseUnitAmount(15, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(15, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(90, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(105, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(15, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('53.5714285714285714'), 16), // 53.57% + takerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('53.5714285714285714'), 16), // 53.57% + }, + profitInLeftMakerAsset: constants.ZERO_AMOUNT, + profitInRightMakerAsset: Web3Wrapper.toBaseUnitAmount(15, 0), + }); await assertCalculateMatchedFillResultsWithMaximalFillAsync( expectedMatchedFillResults, leftOrder, @@ -1352,18 +1399,22 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(87, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(48, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(16, 0), - Web3Wrapper.toBaseUnitAmount(22, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(29, 0), - Web3Wrapper.toBaseUnitAmount(16, 0), - Web3Wrapper.toBaseUnitAmount(new BigNumber('33.3333333333333333'), 16), // 33.33% - Web3Wrapper.toBaseUnitAmount(new BigNumber('33.3333333333333333'), 16), // 33.33% - constants.ZERO_AMOUNT, - Web3Wrapper.toBaseUnitAmount(7, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(16, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(22, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(29, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(16, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('33.3333333333333333'), 16), // 33.33% + takerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('33.3333333333333333'), 16), // 33.33% + }, + profitInLeftMakerAsset: constants.ZERO_AMOUNT, + profitInRightMakerAsset: Web3Wrapper.toBaseUnitAmount(7, 0), + }); await assertCalculateMatchedFillResultsWithMaximalFillAsync( expectedMatchedFillResults, leftOrder, @@ -1384,18 +1435,22 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(8, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(6, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(7, 0), - Web3Wrapper.toBaseUnitAmount(4, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(8, 0), - Web3Wrapper.toBaseUnitAmount(6, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(1, 0), - Web3Wrapper.toBaseUnitAmount(4, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(7, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(4, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(8, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(6, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + profitInLeftMakerAsset: Web3Wrapper.toBaseUnitAmount(1, 0), + profitInRightMakerAsset: Web3Wrapper.toBaseUnitAmount(4, 0), + }); await assertCalculateMatchedFillResultsWithMaximalFillAsync( expectedMatchedFillResults, leftOrder, @@ -1416,17 +1471,21 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(89, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(1, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(11, 0), - Web3Wrapper.toBaseUnitAmount(89, 0), - Web3Wrapper.toBaseUnitAmount(new BigNumber('91.6666666666666666'), 16), // 91.6% - Web3Wrapper.toBaseUnitAmount(new BigNumber('91.7525773195876288'), 16), // 91.75% - Web3Wrapper.toBaseUnitAmount(89, 0), - Web3Wrapper.toBaseUnitAmount(1, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(10, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(11, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(89, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('91.6666666666666666'), 16), // 91.6% + takerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('91.7525773195876288'), 16), // 91.75% + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(89, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(1, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + profitInLeftMakerAsset: Web3Wrapper.toBaseUnitAmount(10, 0), + }); await assertCalculateMatchedFillResultsWithMaximalFillAsync( expectedMatchedFillResults, leftOrder, @@ -1449,18 +1508,21 @@ blockchainTests('Exchange core internal functions', env => { makerFee: Web3Wrapper.toBaseUnitAmount(10000, 0), takerFee: Web3Wrapper.toBaseUnitAmount(10000, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(16, 0), - Web3Wrapper.toBaseUnitAmount(22, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(29, 0), - Web3Wrapper.toBaseUnitAmount(16, 0), - Web3Wrapper.toBaseUnitAmount(3333, 0), - Web3Wrapper.toBaseUnitAmount(3333, 0), - constants.ZERO_AMOUNT, - Web3Wrapper.toBaseUnitAmount(7, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(16, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(22, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(29, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(16, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(3333, 0), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(3333, 0), + }, + profitInRightMakerAsset: Web3Wrapper.toBaseUnitAmount(7, 0), + }); await assertCalculateMatchedFillResultsWithMaximalFillAsync( expectedMatchedFillResults, leftOrder, @@ -1483,17 +1545,21 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(89, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(1, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(11, 0), - Web3Wrapper.toBaseUnitAmount(89, 0), - Web3Wrapper.toBaseUnitAmount(9166, 0), - Web3Wrapper.toBaseUnitAmount(9175, 0), - Web3Wrapper.toBaseUnitAmount(89, 0), - Web3Wrapper.toBaseUnitAmount(1, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(10, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(11, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(89, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(9166, 0), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(9175, 0), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(89, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(1, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + profitInLeftMakerAsset: Web3Wrapper.toBaseUnitAmount(10, 0), + }); await assertCalculateMatchedFillResultsWithMaximalFillAsync( expectedMatchedFillResults, leftOrder, @@ -1531,16 +1597,20 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(100, 18), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(50, 18), }); - const expectedMatchedFillResults2 = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(45, 18), - Web3Wrapper.toBaseUnitAmount(90, 18), - Web3Wrapper.toBaseUnitAmount(90, 16), - Web3Wrapper.toBaseUnitAmount(90, 16), - Web3Wrapper.toBaseUnitAmount(90, 18), - Web3Wrapper.toBaseUnitAmount(45, 18), - Web3Wrapper.toBaseUnitAmount(90, 16), - Web3Wrapper.toBaseUnitAmount(90, 16), - ); + const expectedMatchedFillResults2 = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(45, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(90, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(90, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(90, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(90, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(45, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(90, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(90, 16), + }, + }); await assertCalculateMatchedFillResultsWithMaximalFillAsync( expectedMatchedFillResults2, leftOrder, @@ -1561,18 +1631,21 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(2126, 0), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(1063, 0), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(1000, 0), - Web3Wrapper.toBaseUnitAmount(1005, 0), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(2000, 0), - Web3Wrapper.toBaseUnitAmount(1000, 0), - Web3Wrapper.toBaseUnitAmount(new BigNumber('94.0733772342427093'), 16), // 94.07% - Web3Wrapper.toBaseUnitAmount(new BigNumber('94.0733772342427093'), 16), // 94.07% - constants.ZERO_AMOUNT, - Web3Wrapper.toBaseUnitAmount(995, 0), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(1000, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(1005, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(2000, 0), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(1000, 0), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('94.0733772342427093'), 16), // 94.07% + takerFeePaid: Web3Wrapper.toBaseUnitAmount(new BigNumber('94.0733772342427093'), 16), // 94.07% + }, + profitInRightMakerAsset: Web3Wrapper.toBaseUnitAmount(995, 0), + }); await assertCalculateMatchedFillResultsWithMaximalFillAsync( expectedMatchedFillResults, leftOrder, @@ -1591,16 +1664,20 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(10, 18), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(5, 18), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(5, 18), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(5, 18), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + }); await assertCalculateMatchedFillResultsWithMaximalFillAsync( expectedMatchedFillResults, leftOrder, @@ -1620,18 +1697,21 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(50, 18), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(100, 18), }); - const expectedMatchedFillResults = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(2, 18), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(100, 16), - Web3Wrapper.toBaseUnitAmount(5, 18), - Web3Wrapper.toBaseUnitAmount(10, 18), - Web3Wrapper.toBaseUnitAmount(10, 16), - Web3Wrapper.toBaseUnitAmount(10, 16), - constants.ZERO_AMOUNT, - Web3Wrapper.toBaseUnitAmount(3, 18), - ); + const expectedMatchedFillResults = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(2, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(100, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(5, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(10, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(10, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(10, 16), + }, + profitInRightMakerAsset: Web3Wrapper.toBaseUnitAmount(3, 18), + }); await assertCalculateMatchedFillResultsWithMaximalFillAsync( expectedMatchedFillResults, leftOrder, @@ -1647,16 +1727,20 @@ blockchainTests('Exchange core internal functions', env => { makerAssetAmount: Web3Wrapper.toBaseUnitAmount(100, 18), takerAssetAmount: Web3Wrapper.toBaseUnitAmount(50, 18), }); - const expectedMatchedFillResults2 = createMatchedFillResults( - Web3Wrapper.toBaseUnitAmount(90, 18), - Web3Wrapper.toBaseUnitAmount(45, 18), - Web3Wrapper.toBaseUnitAmount(90, 16), - Web3Wrapper.toBaseUnitAmount(90, 16), - Web3Wrapper.toBaseUnitAmount(45, 18), - Web3Wrapper.toBaseUnitAmount(90, 18), - Web3Wrapper.toBaseUnitAmount(90, 16), - Web3Wrapper.toBaseUnitAmount(90, 16), - ); + const expectedMatchedFillResults2 = createMatchedFillResults({ + left: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(90, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(45, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(90, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(90, 16), + }, + right: { + makerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(45, 18), + takerAssetFilledAmount: Web3Wrapper.toBaseUnitAmount(90, 18), + makerFeePaid: Web3Wrapper.toBaseUnitAmount(90, 16), + takerFeePaid: Web3Wrapper.toBaseUnitAmount(90, 16), + }, + }); await assertCalculateMatchedFillResultsWithMaximalFillAsync( expectedMatchedFillResults2, leftOrder2,