diff --git a/contracts/exchange/package.json b/contracts/exchange/package.json index 6fd42054bc..558528f0e1 100644 --- a/contracts/exchange/package.json +++ b/contracts/exchange/package.json @@ -34,7 +34,11 @@ "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol" }, "config": { +<<<<<<< HEAD "abis": "./generated-artifacts/@(Exchange|ExchangeWrapper|IAssetProxyDispatcher|IEIP1271Wallet|IExchange|IExchangeCore|IMatchOrders|ISignatureValidator|ITransactions|IWallet|IWrapperFunctions|IsolatedExchange|ReentrancyTester|TestAssetProxyDispatcher|TestExchangeInternals|TestLibExchangeRichErrorDecoder|TestMatchOrders|TestSignatureValidator|TestValidatorWallet|TestWrapperFunctions|Whitelist).json", +======= + "abis": "./generated-artifacts/@(Exchange|ExchangeWrapper|IAssetProxyDispatcher|IEIP1271Wallet|IExchange|IExchangeCore|IMatchOrders|ISignatureValidator|ITransactions|IWallet|IWrapperFunctions|IsolatedExchange|ReentrantERC20Token|TestAssetProxyDispatcher|TestExchangeInternals|TestLibExchangeRichErrorDecoder|TestSignatureValidator|TestValidatorWallet|Whitelist).json", +>>>>>>> Removed unused reference functions "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." }, "repository": { diff --git a/contracts/exchange/src/artifacts.ts b/contracts/exchange/src/artifacts.ts index 9c9e4e1066..596e449b95 100644 --- a/contracts/exchange/src/artifacts.ts +++ b/contracts/exchange/src/artifacts.ts @@ -21,7 +21,6 @@ import * as ReentrancyTester from '../generated-artifacts/ReentrancyTester.json' import * as TestAssetProxyDispatcher from '../generated-artifacts/TestAssetProxyDispatcher.json'; import * as TestExchangeInternals from '../generated-artifacts/TestExchangeInternals.json'; import * as TestLibExchangeRichErrorDecoder from '../generated-artifacts/TestLibExchangeRichErrorDecoder.json'; -import * as TestMatchOrders from '../generated-artifacts/TestMatchOrders.json'; import * as TestSignatureValidator from '../generated-artifacts/TestSignatureValidator.json'; import * as TestValidatorWallet from '../generated-artifacts/TestValidatorWallet.json'; import * as TestWrapperFunctions from '../generated-artifacts/TestWrapperFunctions.json'; @@ -40,11 +39,14 @@ export const artifacts = { IWallet: IWallet as ContractArtifact, IWrapperFunctions: IWrapperFunctions as ContractArtifact, IsolatedExchange: IsolatedExchange as ContractArtifact, +<<<<<<< HEAD ReentrancyTester: ReentrancyTester as ContractArtifact, +======= + ReentrantERC20Token: ReentrantERC20Token as ContractArtifact, +>>>>>>> Removed unused reference functions TestAssetProxyDispatcher: TestAssetProxyDispatcher as ContractArtifact, TestExchangeInternals: TestExchangeInternals as ContractArtifact, TestLibExchangeRichErrorDecoder: TestLibExchangeRichErrorDecoder as ContractArtifact, - TestMatchOrders: TestMatchOrders as ContractArtifact, TestSignatureValidator: TestSignatureValidator as ContractArtifact, TestValidatorWallet: TestValidatorWallet as ContractArtifact, TestWrapperFunctions: TestWrapperFunctions as ContractArtifact, diff --git a/contracts/exchange/src/reference_functions.ts b/contracts/exchange/src/reference_functions.ts index 0fb587d25e..91a96999ad 100644 --- a/contracts/exchange/src/reference_functions.ts +++ b/contracts/exchange/src/reference_functions.ts @@ -1,26 +1,8 @@ import { ReferenceFunctions as ExchangeLibsReferenceFunctions } from '@0x/contracts-exchange-libs'; -import { constants } from '@0x/contracts-test-utils'; -import { ReferenceFunctions as UtilsReferenceFunctions } from '@0x/contracts-utils'; -import { ExchangeRevertErrors, orderHashUtils } from '@0x/order-utils'; -import { FillResults, MatchedFillResults, Order, OrderWithoutDomain } from '@0x/types'; +import { FillResults, OrderWithoutDomain } from '@0x/types'; import { BigNumber } from '@0x/utils'; -const { safeGetPartialAmountCeil, safeGetPartialAmountFloor } = ExchangeLibsReferenceFunctions; -const { safeMul, safeSub } = UtilsReferenceFunctions; - -/** - * Ensure that there is a profitable spread. - */ -export function assertValidMatch(leftOrder: Order, rightOrder: Order): void { - if ( - safeMul(leftOrder.makerAssetAmount, rightOrder.makerAssetAmount) < - safeMul(leftOrder.takerAssetAmount, rightOrder.takerAssetAmount) - ) { - const orderHashHexLeft = orderHashUtils.getOrderHashHex(leftOrder); - const orderHashHexRight = orderHashUtils.getOrderHashHex(rightOrder); - throw new ExchangeRevertErrors.NegativeSpreadError(orderHashHexLeft, orderHashHexRight); - } -} +const { safeGetPartialAmountFloor } = ExchangeLibsReferenceFunctions; /** * Calculates amounts filled and fees paid by maker and taker. @@ -40,188 +22,3 @@ export function calculateFillResults(order: OrderWithoutDomain, takerAssetFilled takerFeePaid, }; } - -/** - * Calculates amounts filled and fees paid by maker and taker. - */ -export function calculateMatchedFillResults( - leftOrder: OrderWithoutDomain, - rightOrder: OrderWithoutDomain, - leftOrderTakerAssetFilledAmount: BigNumber, - rightOrderTakerAssetFilledAmount: BigNumber, -): MatchedFillResults { - // Get an empty matched fill results object to fill with this data. - const matchedFillResults = emptyMatchedFillResults(); - - // Calculate the remaining amounts of maker and taker assets for both orders. - const [ - leftMakerAssetAmountRemaining, - leftTakerAssetAmountRemaining, - rightMakerAssetAmountRemaining, - rightTakerAssetAmountRemaining, - ] = getRemainingFillAmounts( - leftOrder, - rightOrder, - leftOrderTakerAssetFilledAmount, - rightOrderTakerAssetFilledAmount, - ); - - if (leftTakerAssetAmountRemaining.isGreaterThan(rightMakerAssetAmountRemaining)) { - // Case 1 - calculateCompleteRightFill( - leftOrder, - rightMakerAssetAmountRemaining, - rightTakerAssetAmountRemaining, - matchedFillResults, - ); - } else if (leftTakerAssetAmountRemaining.isLessThan(rightMakerAssetAmountRemaining)) { - // Case 2 - matchedFillResults.left.makerAssetFilledAmount = leftMakerAssetAmountRemaining; - matchedFillResults.left.takerAssetFilledAmount = leftTakerAssetAmountRemaining; - matchedFillResults.right.makerAssetFilledAmount = leftTakerAssetAmountRemaining; - matchedFillResults.right.takerAssetFilledAmount = safeGetPartialAmountCeil( - rightOrder.takerAssetAmount, - rightOrder.makerAssetAmount, - leftTakerAssetAmountRemaining, - ); - } else { - // Case 3 - calculateCompleteFillBoth( - leftMakerAssetAmountRemaining, - leftTakerAssetAmountRemaining, - rightMakerAssetAmountRemaining, - rightTakerAssetAmountRemaining, - matchedFillResults, - ); - } - - // Compute the fees from the order matching - calculateFees(leftOrder, rightOrder, matchedFillResults); - - // Calculate the profit from the matching - matchedFillResults.profitInLeftMakerAsset = safeSub( - matchedFillResults.left.makerAssetFilledAmount, - matchedFillResults.right.takerAssetFilledAmount, - ); - - return matchedFillResults; -} - -/** - * Calculates the complete fill of both orders and updates the provided MatchedFillResults object. - */ -export function calculateCompleteFillBoth( - leftMakerAssetAmountRemaining: BigNumber, - leftTakerAssetAmountRemaining: BigNumber, - rightMakerAssetAmountRemaining: BigNumber, - rightTakerAssetAmountRemaining: BigNumber, - matchedFillResults?: MatchedFillResults, -): MatchedFillResults { - if (matchedFillResults === undefined) { - matchedFillResults = emptyMatchedFillResults(); // tslint:disable-line:no-parameter-reassignment - } - matchedFillResults.left.makerAssetFilledAmount = leftMakerAssetAmountRemaining; - matchedFillResults.left.takerAssetFilledAmount = leftTakerAssetAmountRemaining; - matchedFillResults.right.makerAssetFilledAmount = rightMakerAssetAmountRemaining; - matchedFillResults.right.takerAssetFilledAmount = rightTakerAssetAmountRemaining; - return matchedFillResults; -} - -/** - * Calculates the complete fill of the right order and updates the provided MatchedFillResults object. - */ -export function calculateCompleteRightFill( - leftOrder: OrderWithoutDomain, - rightMakerAssetAmountRemaining: BigNumber, - rightTakerAssetAmountRemaining: BigNumber, - matchedFillResults?: MatchedFillResults, -): MatchedFillResults { - if (matchedFillResults === undefined) { - matchedFillResults = emptyMatchedFillResults(); // tslint:disable-line:no-parameter-reassignment - } - matchedFillResults.left.makerAssetFilledAmount = safeGetPartialAmountFloor( - leftOrder.makerAssetAmount, - leftOrder.takerAssetAmount, - rightMakerAssetAmountRemaining, - ); - matchedFillResults.left.takerAssetFilledAmount = rightMakerAssetAmountRemaining; - matchedFillResults.right.makerAssetFilledAmount = rightMakerAssetAmountRemaining; - matchedFillResults.right.takerAssetFilledAmount = rightTakerAssetAmountRemaining; - return matchedFillResults; -} - -/** - * Compute the fees for the left and right orders. - */ -function calculateFees( - leftOrder: OrderWithoutDomain, - rightOrder: OrderWithoutDomain, - matchedFillResults: MatchedFillResults, -): void { - // Compute fees for left order - matchedFillResults.left.makerFeePaid = safeGetPartialAmountFloor( - matchedFillResults.left.makerAssetFilledAmount, - leftOrder.makerAssetAmount, - leftOrder.makerFee, - ); - matchedFillResults.left.takerFeePaid = safeGetPartialAmountFloor( - matchedFillResults.left.takerAssetFilledAmount, - leftOrder.takerAssetAmount, - leftOrder.takerFee, - ); - - // Compute fees for right order - matchedFillResults.right.makerFeePaid = safeGetPartialAmountFloor( - matchedFillResults.right.makerAssetFilledAmount, - rightOrder.makerAssetAmount, - rightOrder.makerFee, - ); - matchedFillResults.right.takerFeePaid = safeGetPartialAmountFloor( - matchedFillResults.right.takerAssetFilledAmount, - rightOrder.takerAssetAmount, - rightOrder.takerFee, - ); -} - -/** - * Returns an empty fill results object. - */ -function emptyFillResults(): FillResults { - return { - makerAssetFilledAmount: constants.ZERO_AMOUNT, - takerAssetFilledAmount: constants.ZERO_AMOUNT, - makerFeePaid: constants.ZERO_AMOUNT, - takerFeePaid: constants.ZERO_AMOUNT, - }; -} - -/** - * Returns an empty matched fill results object. - */ -function emptyMatchedFillResults(): MatchedFillResults { - return { - left: emptyFillResults(), - right: emptyFillResults(), - profitInLeftMakerAsset: constants.ZERO_AMOUNT, - profitInRightMakerAsset: constants.ZERO_AMOUNT, - }; -} - -/** - * Returns the token amounts that are remaining to be filled. - */ -function getRemainingFillAmounts( - leftOrder: OrderWithoutDomain, - rightOrder: OrderWithoutDomain, - leftOrderTakerAssetFilledAmount: BigNumber, - rightOrderTakerAssetFilledAmount: BigNumber, -): [BigNumber, BigNumber, BigNumber, BigNumber] { - const leftTakerAssetRemaining = safeSub(leftOrder.takerAssetAmount, leftOrderTakerAssetFilledAmount); - const rightTakerAssetRemaining = safeSub(rightOrder.takerAssetAmount, rightOrderTakerAssetFilledAmount); - return [ - safeGetPartialAmountFloor(leftOrder.makerAssetAmount, leftOrder.takerAssetAmount, leftTakerAssetRemaining), - leftTakerAssetRemaining, - safeGetPartialAmountFloor(rightOrder.makerAssetAmount, rightOrder.takerAssetAmount, rightTakerAssetRemaining), - rightTakerAssetRemaining, - ]; -} diff --git a/contracts/exchange/src/wrappers.ts b/contracts/exchange/src/wrappers.ts index aff425c9db..63165e9a40 100644 --- a/contracts/exchange/src/wrappers.ts +++ b/contracts/exchange/src/wrappers.ts @@ -19,7 +19,6 @@ export * from '../generated-wrappers/reentrancy_tester'; export * from '../generated-wrappers/test_asset_proxy_dispatcher'; export * from '../generated-wrappers/test_exchange_internals'; export * from '../generated-wrappers/test_lib_exchange_rich_error_decoder'; -export * from '../generated-wrappers/test_match_orders'; export * from '../generated-wrappers/test_signature_validator'; export * from '../generated-wrappers/test_validator_wallet'; export * from '../generated-wrappers/test_wrapper_functions'; diff --git a/contracts/exchange/tsconfig.json b/contracts/exchange/tsconfig.json index dd6bc2aca0..c2cb29514d 100644 --- a/contracts/exchange/tsconfig.json +++ b/contracts/exchange/tsconfig.json @@ -19,7 +19,6 @@ "generated-artifacts/TestAssetProxyDispatcher.json", "generated-artifacts/TestExchangeInternals.json", "generated-artifacts/TestLibExchangeRichErrorDecoder.json", - "generated-artifacts/TestMatchOrders.json", "generated-artifacts/TestSignatureValidator.json", "generated-artifacts/TestValidatorWallet.json", "generated-artifacts/TestWrapperFunctions.json", diff --git a/contracts/test-utils/src/.mocha_blockchain.ts.swp b/contracts/test-utils/src/.mocha_blockchain.ts.swp deleted file mode 100644 index 96fcfdf4ea..0000000000 Binary files a/contracts/test-utils/src/.mocha_blockchain.ts.swp and /dev/null differ