diff options
author | Jacob Evans <jacob@dekz.net> | 2018-07-06 13:00:09 +0800 |
---|---|---|
committer | Jacob Evans <jacob@dekz.net> | 2018-07-06 13:30:07 +0800 |
commit | 0557d6a9bfc07b8d360970ffbcf582f8a26943cb (patch) | |
tree | 76b233a7a50c2e10ee3eb09a848c2494d0512c26 /packages/contracts/src/2.0.0/forwarder/MixinERC721.sol | |
parent | b9b00e10d39c3c84bc72892ef37f1313e904414d (diff) | |
download | dexon-sol-tools-0557d6a9bfc07b8d360970ffbcf582f8a26943cb.tar dexon-sol-tools-0557d6a9bfc07b8d360970ffbcf582f8a26943cb.tar.gz dexon-sol-tools-0557d6a9bfc07b8d360970ffbcf582f8a26943cb.tar.bz2 dexon-sol-tools-0557d6a9bfc07b8d360970ffbcf582f8a26943cb.tar.lz dexon-sol-tools-0557d6a9bfc07b8d360970ffbcf582f8a26943cb.tar.xz dexon-sol-tools-0557d6a9bfc07b8d360970ffbcf582f8a26943cb.tar.zst dexon-sol-tools-0557d6a9bfc07b8d360970ffbcf582f8a26943cb.zip |
Forwarding contract (squashed commits)
Diffstat (limited to 'packages/contracts/src/2.0.0/forwarder/MixinERC721.sol')
-rw-r--r-- | packages/contracts/src/2.0.0/forwarder/MixinERC721.sol | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/packages/contracts/src/2.0.0/forwarder/MixinERC721.sol b/packages/contracts/src/2.0.0/forwarder/MixinERC721.sol new file mode 100644 index 000000000..b2e8803a9 --- /dev/null +++ b/packages/contracts/src/2.0.0/forwarder/MixinERC721.sol @@ -0,0 +1,64 @@ +/* + + 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; +pragma experimental ABIEncoderV2; + +import "../utils/LibBytes/LibBytes.sol"; +import "../tokens/ERC721Token/IERC721Token.sol"; + +contract MixinERC721 { + + using LibBytes for bytes; + bytes4 constant ERC721_RECEIVED = bytes4(keccak256("onERC721Received(address,uint256,bytes)")); + bytes4 constant ERC721_RECEIVED_OPERATOR = bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")); + + function onERC721Received(address, uint256, bytes memory) + public + pure + returns(bytes4) + { + return ERC721_RECEIVED; + } + + function onERC721Received(address, address, uint256, bytes memory) + public + pure + returns(bytes4) + { + return ERC721_RECEIVED_OPERATOR; + } + + function transferERC721Token( + bytes memory assetData, + address to + ) + internal + { + // Decode asset data. + address token = assetData.readAddress(16); + uint256 tokenId = assetData.readUint256(36); + bytes memory receiverData = assetData.readBytesWithLength(100); + IERC721Token(token).safeTransferFrom( + address(this), + to, + tokenId, + receiverData + ); + } +} |