Removed unused reference functions

This commit is contained in:
Alex Towle
2019-08-08 14:12:15 -07:00
parent 327c6e8ac2
commit 36fac3532c
6 changed files with 10 additions and 209 deletions

View File

@@ -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": {

View File

@@ -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,

View File

@@ -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,
];
}

View File

@@ -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';

View File

@@ -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",