Removed unused reference functions
This commit is contained in:
@@ -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": {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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",
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user