aboutsummaryrefslogtreecommitdiffstats
path: root/contracts/extensions/contracts/OrderMatcher/MixinAssets.sol
diff options
context:
space:
mode:
Diffstat (limited to 'contracts/extensions/contracts/OrderMatcher/MixinAssets.sol')
-rw-r--r--contracts/extensions/contracts/OrderMatcher/MixinAssets.sol195
1 files changed, 0 insertions, 195 deletions
diff --git a/contracts/extensions/contracts/OrderMatcher/MixinAssets.sol b/contracts/extensions/contracts/OrderMatcher/MixinAssets.sol
deleted file mode 100644
index f0f91cfc0..000000000
--- a/contracts/extensions/contracts/OrderMatcher/MixinAssets.sol
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-
- Copyright 2018 ZeroEx Intl.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-*/
-
-pragma solidity ^0.4.24;
-
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
-import "@0x/contracts-utils/contracts/utils/Ownable/Ownable.sol";
-import "@0x/contracts-tokens/contracts/tokens/ERC20Token/IERC20Token.sol";
-import "@0x/contracts-tokens/contracts/tokens/ERC721Token/IERC721Token.sol";
-import "./mixins/MAssets.sol";
-import "./libs/LibConstants.sol";
-
-
-contract MixinAssets is
- MAssets,
- Ownable,
- LibConstants
-{
- using LibBytes for bytes;
-
- /// @dev Withdraws assets from this contract. The contract requires a ZRX balance in order to
- /// function optimally, and this function allows the ZRX to be withdrawn by owner. It may also be
- /// used to withdraw assets that were accidentally sent to this contract.
- /// @param assetData Byte array encoded for the respective asset proxy.
- /// @param amount Amount of asset to withdraw.
- function withdrawAsset(
- bytes assetData,
- uint256 amount
- )
- external
- onlyOwner
- {
- transferAssetToSender(assetData, amount);
- }
-
- /// @dev Approves or disapproves an AssetProxy to spend asset.
- /// @param assetData Byte array encoded for the respective asset proxy.
- /// @param amount Amount of asset to approve for respective proxy.
- function approveAssetProxy(
- bytes assetData,
- uint256 amount
- )
- external
- onlyOwner
- {
- bytes4 proxyId = assetData.readBytes4(0);
-
- if (proxyId == ERC20_DATA_ID) {
- approveERC20Token(assetData, amount);
- } else if (proxyId == ERC721_DATA_ID) {
- approveERC721Token(assetData, amount);
- } else {
- revert("UNSUPPORTED_ASSET_PROXY");
- }
- }
-
- /// @dev Transfers given amount of asset to sender.
- /// @param assetData Byte array encoded for the respective asset proxy.
- /// @param amount Amount of asset to transfer to sender.
- function transferAssetToSender(
- bytes memory assetData,
- uint256 amount
- )
- internal
- {
- bytes4 proxyId = assetData.readBytes4(0);
-
- if (proxyId == ERC20_DATA_ID) {
- transferERC20Token(assetData, amount);
- } else if (proxyId == ERC721_DATA_ID) {
- transferERC721Token(assetData, amount);
- } else {
- revert("UNSUPPORTED_ASSET_PROXY");
- }
- }
-
- /// @dev Decodes ERC20 assetData and transfers given amount to sender.
- /// @param assetData Byte array encoded for the respective asset proxy.
- /// @param amount Amount of asset to transfer to sender.
- function transferERC20Token(
- bytes memory assetData,
- uint256 amount
- )
- internal
- {
- // 4 byte id + 12 0 bytes before ABI encoded token address.
- address token = assetData.readAddress(16);
-
- // Transfer tokens.
- // We do a raw call so we can check the success separate
- // from the return data.
- bool success = token.call(abi.encodeWithSelector(
- ERC20_TRANSFER_SELECTOR,
- msg.sender,
- amount
- ));
- require(
- success,
- "TRANSFER_FAILED"
- );
-
- // Check return data.
- // If there is no return data, we assume the token incorrectly
- // does not return a bool. In this case we expect it to revert
- // on failure, which was handled above.
- // If the token does return data, we require that it is a single
- // value that evaluates to true.
- assembly {
- if returndatasize {
- success := 0
- if eq(returndatasize, 32) {
- // First 64 bytes of memory are reserved scratch space
- returndatacopy(0, 0, 32)
- success := mload(0)
- }
- }
- }
- require(
- success,
- "TRANSFER_FAILED"
- );
- }
-
- /// @dev Decodes ERC721 assetData and transfers given amount to sender.
- /// @param assetData Byte array encoded for the respective asset proxy.
- /// @param amount Amount of asset to transfer to sender.
- function transferERC721Token(
- bytes memory assetData,
- uint256 amount
- )
- internal
- {
- require(
- amount == 1,
- "INVALID_AMOUNT"
- );
- // Decode asset data.
- // 4 byte id + 12 0 bytes before ABI encoded token address.
- address token = assetData.readAddress(16);
- // 4 byte id + 32 byte ABI encoded token address before token id.
- uint256 tokenId = assetData.readUint256(36);
-
- // Perform transfer.
- IERC721Token(token).transferFrom(
- address(this),
- msg.sender,
- tokenId
- );
- }
-
- /// @dev Sets approval for ERC20 AssetProxy.
- /// @param assetData Byte array encoded for the respective asset proxy.
- /// @param amount Amount of asset to approve for respective proxy.
- function approveERC20Token(
- bytes memory assetData,
- uint256 amount
- )
- internal
- {
- address token = assetData.readAddress(16);
- require(
- IERC20Token(token).approve(ERC20_PROXY_ADDRESS, amount),
- "APPROVAL_FAILED"
- );
- }
-
- /// @dev Sets approval for ERC721 AssetProxy.
- /// @param assetData Byte array encoded for the respective asset proxy.
- /// @param amount Amount of asset to approve for respective proxy.
- function approveERC721Token(
- bytes memory assetData,
- uint256 amount
- )
- internal
- {
- address token = assetData.readAddress(16);
- bool approval = amount >= 1;
- IERC721Token(token).setApprovalForAll(ERC721_PROXY_ADDRESS, approval);
- }
-}