Remove LibExchangeSelectors.sol
This commit is contained in:
@@ -19,11 +19,11 @@
|
||||
pragma solidity ^0.5.9;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibExchangeSelectors.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibZeroExTransaction.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibBytes.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibAddressArray.sol";
|
||||
import "@0x/contracts-exchange/contracts/src/interfaces/IExchange.sol";
|
||||
import "./libs/LibCoordinatorApproval.sol";
|
||||
import "./interfaces/ISignatureValidator.sol";
|
||||
import "./interfaces/ICoordinatorApprovalVerifier.sol";
|
||||
@@ -31,7 +31,6 @@ import "./interfaces/ICoordinatorApprovalVerifier.sol";
|
||||
|
||||
// solhint-disable avoid-tx-origin
|
||||
contract MixinCoordinatorApprovalVerifier is
|
||||
LibExchangeSelectors,
|
||||
LibCoordinatorApproval,
|
||||
LibZeroExTransaction,
|
||||
ISignatureValidator,
|
||||
@@ -84,9 +83,9 @@ contract MixinCoordinatorApprovalVerifier is
|
||||
{
|
||||
bytes4 selector = data.readBytes4(0);
|
||||
if (
|
||||
selector == FILL_ORDER_SELECTOR ||
|
||||
selector == FILL_ORDER_NO_THROW_SELECTOR ||
|
||||
selector == FILL_OR_KILL_ORDER_SELECTOR
|
||||
selector == IExchange(address(0)).fillOrder.selector ||
|
||||
selector == IExchange(address(0)).fillOrderNoThrow.selector ||
|
||||
selector == IExchange(address(0)).fillOrKillOrder.selector
|
||||
) {
|
||||
// Decode single order
|
||||
(LibOrder.Order memory order) = abi.decode(
|
||||
@@ -96,11 +95,11 @@ contract MixinCoordinatorApprovalVerifier is
|
||||
orders = new LibOrder.Order[](1);
|
||||
orders[0] = order;
|
||||
} else if (
|
||||
selector == BATCH_FILL_ORDERS_SELECTOR ||
|
||||
selector == BATCH_FILL_ORDERS_NO_THROW_SELECTOR ||
|
||||
selector == BATCH_FILL_OR_KILL_ORDERS_SELECTOR ||
|
||||
selector == MARKET_BUY_ORDERS_SELECTOR ||
|
||||
selector == MARKET_SELL_ORDERS_SELECTOR
|
||||
selector == IExchange(address(0)).batchFillOrders.selector ||
|
||||
selector == IExchange(address(0)).batchFillOrdersNoThrow.selector ||
|
||||
selector == IExchange(address(0)).batchFillOrKillOrders.selector ||
|
||||
selector == IExchange(address(0)).marketBuyOrders.selector ||
|
||||
selector == IExchange(address(0)).marketSellOrders.selector
|
||||
) {
|
||||
// Decode all orders
|
||||
// solhint-disable indent
|
||||
@@ -108,7 +107,7 @@ contract MixinCoordinatorApprovalVerifier is
|
||||
data.slice(4, data.length),
|
||||
(LibOrder.Order[])
|
||||
);
|
||||
} else if (selector == MATCH_ORDERS_SELECTOR) {
|
||||
} else if (selector == IExchange(address(0)).matchOrders.selector) {
|
||||
// Decode left and right orders
|
||||
(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder) = abi.decode(
|
||||
data.slice(4, data.length),
|
||||
|
@@ -19,14 +19,13 @@
|
||||
pragma solidity ^0.5.5;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibExchangeSelectors.sol";
|
||||
import "@0x/contracts-exchange/contracts/src/interfaces/IExchange.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibBytes.sol";
|
||||
|
||||
|
||||
contract LibTransactionDecoder is
|
||||
LibExchangeSelectors
|
||||
{
|
||||
contract LibTransactionDecoder {
|
||||
|
||||
using LibBytes for bytes;
|
||||
|
||||
/// @dev Decodes the call data for an Exchange contract method call.
|
||||
@@ -47,66 +46,65 @@ contract LibTransactionDecoder is
|
||||
{
|
||||
bytes4 functionSelector = transactionData.readBytes4(0);
|
||||
|
||||
if (functionSelector == BATCH_CANCEL_ORDERS_SELECTOR) {
|
||||
if (functionSelector == IExchange(address(0)).batchCancelOrders.selector) {
|
||||
functionName = "batchCancelOrders";
|
||||
} else if (functionSelector == BATCH_FILL_ORDERS_SELECTOR) {
|
||||
} else if (functionSelector == IExchange(address(0)).batchFillOrders.selector) {
|
||||
functionName = "batchFillOrders";
|
||||
} else if (functionSelector == BATCH_FILL_ORDERS_NO_THROW_SELECTOR) {
|
||||
} else if (functionSelector == IExchange(address(0)).batchFillOrdersNoThrow.selector) {
|
||||
functionName = "batchFillOrdersNoThrow";
|
||||
} else if (functionSelector == BATCH_FILL_OR_KILL_ORDERS_SELECTOR) {
|
||||
} else if (functionSelector == IExchange(address(0)).batchFillOrKillOrders.selector) {
|
||||
functionName = "batchFillOrKillOrders";
|
||||
} else if (functionSelector == CANCEL_ORDER_SELECTOR) {
|
||||
} else if (functionSelector == IExchange(address(0)).cancelOrder.selector) {
|
||||
functionName = "cancelOrder";
|
||||
} else if (functionSelector == FILL_ORDER_SELECTOR) {
|
||||
} else if (functionSelector == IExchange(address(0)).fillOrder.selector) {
|
||||
functionName = "fillOrder";
|
||||
} else if (functionSelector == FILL_ORDER_NO_THROW_SELECTOR) {
|
||||
} else if (functionSelector == IExchange(address(0)).fillOrderNoThrow.selector) {
|
||||
functionName = "fillOrderNoThrow";
|
||||
} else if (functionSelector == FILL_OR_KILL_ORDER_SELECTOR) {
|
||||
} else if (functionSelector == IExchange(address(0)).fillOrKillOrder.selector) {
|
||||
functionName = "fillOrKillOrder";
|
||||
} else if (functionSelector == MARKET_BUY_ORDERS_SELECTOR) {
|
||||
} else if (functionSelector == IExchange(address(0)).marketBuyOrders.selector) {
|
||||
functionName = "marketBuyOrders";
|
||||
} else if (functionSelector == MARKET_SELL_ORDERS_SELECTOR) {
|
||||
} else if (functionSelector == IExchange(address(0)).marketSellOrders.selector) {
|
||||
functionName = "marketSellOrders";
|
||||
} else if (functionSelector == MATCH_ORDERS_SELECTOR) {
|
||||
} else if (functionSelector == IExchange(address(0)).matchOrders.selector) {
|
||||
functionName = "matchOrders";
|
||||
} else if (
|
||||
functionSelector == CANCEL_ORDERS_UP_TO_SELECTOR ||
|
||||
functionSelector == EXECUTE_TRANSACTION_SELECTOR
|
||||
// TODO: add new noThrow cancel functions when https://github.com/0xProject/ZEIPs/issues/35 is merged.
|
||||
functionSelector == IExchange(address(0)).cancelOrdersUpTo.selector ||
|
||||
functionSelector == IExchange(address(0)).executeTransaction.selector
|
||||
) {
|
||||
revert("UNIMPLEMENTED");
|
||||
} else {
|
||||
revert("UNKNOWN_FUNCTION_SELECTOR");
|
||||
}
|
||||
|
||||
if (functionSelector == BATCH_CANCEL_ORDERS_SELECTOR) {
|
||||
if (functionSelector == IExchange(address(0)).batchCancelOrders.selector) {
|
||||
// solhint-disable-next-line indent
|
||||
orders = abi.decode(transactionData.slice(4, transactionData.length), (LibOrder.Order[]));
|
||||
takerAssetFillAmounts = new uint256[](0);
|
||||
signatures = new bytes[](0);
|
||||
} else if (
|
||||
functionSelector == BATCH_FILL_OR_KILL_ORDERS_SELECTOR ||
|
||||
functionSelector == BATCH_FILL_ORDERS_NO_THROW_SELECTOR ||
|
||||
functionSelector == BATCH_FILL_ORDERS_SELECTOR
|
||||
functionSelector == IExchange(address(0)).batchFillOrKillOrders.selector ||
|
||||
functionSelector == IExchange(address(0)).batchFillOrdersNoThrow.selector ||
|
||||
functionSelector == IExchange(address(0)).batchFillOrders.selector
|
||||
) {
|
||||
(orders, takerAssetFillAmounts, signatures) = _makeReturnValuesForBatchFill(transactionData);
|
||||
} else if (functionSelector == CANCEL_ORDER_SELECTOR) {
|
||||
} else if (functionSelector == IExchange(address(0)).cancelOrder.selector) {
|
||||
orders = new LibOrder.Order[](1);
|
||||
orders[0] = abi.decode(transactionData.slice(4, transactionData.length), (LibOrder.Order));
|
||||
takerAssetFillAmounts = new uint256[](0);
|
||||
signatures = new bytes[](0);
|
||||
} else if (
|
||||
functionSelector == FILL_OR_KILL_ORDER_SELECTOR ||
|
||||
functionSelector == FILL_ORDER_SELECTOR ||
|
||||
functionSelector == FILL_ORDER_NO_THROW_SELECTOR
|
||||
functionSelector == IExchange(address(0)).fillOrKillOrder.selector ||
|
||||
functionSelector == IExchange(address(0)).fillOrder.selector ||
|
||||
functionSelector == IExchange(address(0)).fillOrderNoThrow.selector
|
||||
) {
|
||||
(orders, takerAssetFillAmounts, signatures) = _makeReturnValuesForSingleOrderFill(transactionData);
|
||||
} else if (
|
||||
functionSelector == MARKET_BUY_ORDERS_SELECTOR ||
|
||||
functionSelector == MARKET_SELL_ORDERS_SELECTOR
|
||||
functionSelector == IExchange(address(0)).marketBuyOrders.selector ||
|
||||
functionSelector == IExchange(address(0)).marketSellOrders.selector
|
||||
) {
|
||||
(orders, takerAssetFillAmounts, signatures) = _makeReturnValuesForMarketFill(transactionData);
|
||||
} else if (functionSelector == MATCH_ORDERS_SELECTOR) {
|
||||
} else if (functionSelector == IExchange(address(0)).matchOrders.selector) {
|
||||
(
|
||||
LibOrder.Order memory leftOrder,
|
||||
LibOrder.Order memory rightOrder,
|
||||
|
@@ -23,14 +23,12 @@ import "./libs/LibConstants.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibMath.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibExchangeSelectors.sol";
|
||||
|
||||
import "@0x/contracts/exchange/contracts/src/interfaces/IExchange.sol";
|
||||
|
||||
contract MixinExchangeWrapper is
|
||||
LibFillResults,
|
||||
LibMath,
|
||||
LibConstants,
|
||||
LibExchangeSelectors
|
||||
LibConstants
|
||||
{
|
||||
/// @dev Fills the input order.
|
||||
/// Returns false if the transaction would otherwise revert.
|
||||
@@ -48,9 +46,7 @@ contract MixinExchangeWrapper is
|
||||
{
|
||||
// ABI encode calldata for `fillOrder`
|
||||
bytes memory fillOrderCalldata = abi.encodeWithSelector(
|
||||
// bytes4(keccak256("fillOrder((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes),uint256,bytes)"))
|
||||
// = 0x9b44d556
|
||||
0x9b44d556,
|
||||
IExchange(address(0)).fillOrder.selector,
|
||||
order,
|
||||
takerAssetFillAmount,
|
||||
signature
|
||||
|
@@ -32,7 +32,6 @@ import "./MixinSignatureValidator.sol";
|
||||
|
||||
contract MixinExchangeCore is
|
||||
IExchangeCore,
|
||||
IExchangeRichErrors,
|
||||
LibMath,
|
||||
LibFillResults,
|
||||
MixinAssetProxyDispatcher,
|
||||
|
@@ -72,7 +72,7 @@ contract MixinWrapperFunctions is
|
||||
{
|
||||
// ABI encode calldata for `fillOrder`
|
||||
bytes memory fillOrderCalldata = abi.encodeWithSelector(
|
||||
IExchangeCore(0).fillOrder.selector,
|
||||
IExchangeCore(address(0)).fillOrder.selector,
|
||||
order,
|
||||
takerAssetFillAmount,
|
||||
signature
|
||||
|
@@ -216,13 +216,14 @@ blockchainTests.resets('Exchange wrappers', env => {
|
||||
signedOrder.signature,
|
||||
{ from: takerAddress },
|
||||
);
|
||||
await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress, {
|
||||
const txReceipt = await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress, {
|
||||
takerAssetFillAmount,
|
||||
// HACK(albrow): We need to hardcode the gas estimate here because
|
||||
// the Geth gas estimator doesn't work with the way we use
|
||||
// delegatecall and swallow errors.
|
||||
gas: 250000,
|
||||
});
|
||||
console.log(txReceipt.gasUsed);
|
||||
const newBalances = await erc20Wrapper.getBalancesAsync();
|
||||
|
||||
const makerAssetFilledAmount = takerAssetFillAmount
|
||||
|
@@ -19,16 +19,15 @@
|
||||
pragma solidity ^0.5.9;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibExchangeSelectors.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibZeroExTransaction.sol";
|
||||
import "@0x/contracts-exchange/contracts/src/interfaces/IExchange.sol";
|
||||
import "./MixinExchangeCalldata.sol";
|
||||
import "./interfaces/IBalanceThresholdFilterCore.sol";
|
||||
|
||||
|
||||
contract MixinBalanceThresholdFilterCore is
|
||||
IBalanceThresholdFilterCore,
|
||||
MixinExchangeCalldata,
|
||||
LibExchangeSelectors
|
||||
MixinExchangeCalldata
|
||||
{
|
||||
|
||||
/// @dev Executes an Exchange transaction iff the maker and taker meet
|
||||
@@ -100,34 +99,34 @@ contract MixinBalanceThresholdFilterCore is
|
||||
bytes4 exchangeFunctionSelector = bytes4(_exchangeCalldataload(0));
|
||||
// solhint-disable expression-indent
|
||||
if (
|
||||
exchangeFunctionSelector == BATCH_FILL_ORDERS_SELECTOR ||
|
||||
exchangeFunctionSelector == BATCH_FILL_ORDERS_NO_THROW_SELECTOR ||
|
||||
exchangeFunctionSelector == BATCH_FILL_OR_KILL_ORDERS_SELECTOR ||
|
||||
exchangeFunctionSelector == MARKET_BUY_ORDERS_SELECTOR ||
|
||||
exchangeFunctionSelector == MARKET_BUY_ORDERS_NO_THROW_SELECTOR ||
|
||||
exchangeFunctionSelector == MARKET_SELL_ORDERS_SELECTOR ||
|
||||
exchangeFunctionSelector == MARKET_SELL_ORDERS_NO_THROW_SELECTOR
|
||||
exchangeFunctionSelector == IExchange(address(0)).batchFillOrders.selector ||
|
||||
exchangeFunctionSelector == IExchange(address(0)).batchFillOrdersNoThrow.selector ||
|
||||
exchangeFunctionSelector == IExchange(address(0)).batchFillOrKillOrders.selector ||
|
||||
exchangeFunctionSelector == IExchange(address(0)).marketBuyOrders.selector ||
|
||||
exchangeFunctionSelector == IExchange(address(0)).marketBuyOrdersNoThrow.selector ||
|
||||
exchangeFunctionSelector == IExchange(address(0)).marketSellOrders.selector ||
|
||||
exchangeFunctionSelector == IExchange(address(0)).marketSellOrdersNoThrow.selector
|
||||
) {
|
||||
addressesToValidate = _loadMakerAddressesFromOrderArray(0);
|
||||
addressesToValidate = addressesToValidate.append(signerAddress);
|
||||
} else if (
|
||||
exchangeFunctionSelector == FILL_ORDER_SELECTOR ||
|
||||
exchangeFunctionSelector == FILL_ORDER_NO_THROW_SELECTOR ||
|
||||
exchangeFunctionSelector == FILL_OR_KILL_ORDER_SELECTOR
|
||||
exchangeFunctionSelector == IExchange(address(0)).fillOrder.selector ||
|
||||
exchangeFunctionSelector == IExchange(address(0)).fillOrderNoThrow.selector ||
|
||||
exchangeFunctionSelector == IExchange(address(0)).fillOrKillOrder.selector
|
||||
) {
|
||||
address makerAddress = _loadMakerAddressFromOrder(0);
|
||||
addressesToValidate = addressesToValidate.append(makerAddress);
|
||||
addressesToValidate = addressesToValidate.append(signerAddress);
|
||||
} else if (exchangeFunctionSelector == MATCH_ORDERS_SELECTOR) {
|
||||
} else if (exchangeFunctionSelector == IExchange(address(0)).matchOrders.selector) {
|
||||
address leftMakerAddress = _loadMakerAddressFromOrder(0);
|
||||
addressesToValidate = addressesToValidate.append(leftMakerAddress);
|
||||
address rightMakerAddress = _loadMakerAddressFromOrder(1);
|
||||
addressesToValidate = addressesToValidate.append(rightMakerAddress);
|
||||
addressesToValidate = addressesToValidate.append(signerAddress);
|
||||
} else if (
|
||||
exchangeFunctionSelector != CANCEL_ORDER_SELECTOR &&
|
||||
exchangeFunctionSelector != BATCH_CANCEL_ORDERS_SELECTOR &&
|
||||
exchangeFunctionSelector != CANCEL_ORDERS_UP_TO_SELECTOR
|
||||
exchangeFunctionSelector != IExchange(address(0)).cancelOrder.selector &&
|
||||
exchangeFunctionSelector != IExchange(address(0)).batchCancelOrders.selector &&
|
||||
exchangeFunctionSelector != IExchange(address(0)).cancelOrdersUpTo.selector
|
||||
) {
|
||||
revert("INVALID_OR_BLOCKED_EXCHANGE_SELECTOR");
|
||||
}
|
||||
|
Reference in New Issue
Block a user