aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts/contracts/tokens/ERC721Token/MintableERC721Token.sol
diff options
context:
space:
mode:
Diffstat (limited to 'packages/contracts/contracts/tokens/ERC721Token/MintableERC721Token.sol')
-rw-r--r--packages/contracts/contracts/tokens/ERC721Token/MintableERC721Token.sol82
1 files changed, 82 insertions, 0 deletions
diff --git a/packages/contracts/contracts/tokens/ERC721Token/MintableERC721Token.sol b/packages/contracts/contracts/tokens/ERC721Token/MintableERC721Token.sol
new file mode 100644
index 000000000..bc5cd2cc2
--- /dev/null
+++ b/packages/contracts/contracts/tokens/ERC721Token/MintableERC721Token.sol
@@ -0,0 +1,82 @@
+/*
+
+ 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 "./ERC721Token.sol";
+
+
+contract MintableERC721Token is
+ ERC721Token
+{
+ /// @dev Function to mint a new token
+ /// Reverts if the given token ID already exists
+ /// @param _to Address of the beneficiary that will own the minted token
+ /// @param _tokenId ID of the token to be minted by the msg.sender
+ function _mint(address _to, uint256 _tokenId)
+ internal
+ {
+ require(
+ _to != address(0),
+ "ERC721_ZERO_TO_ADDRESS"
+ );
+
+ address owner = owners[_tokenId];
+ require(
+ owner == address(0),
+ "ERC721_OWNER_ALREADY_EXISTS"
+ );
+
+ owners[_tokenId] = _to;
+ balances[_to] = safeAdd(balances[_to], 1);
+
+ emit Transfer(
+ address(0),
+ _to,
+ _tokenId
+ );
+ }
+
+ /// @dev Function to burn a token
+ /// Reverts if the given token ID doesn't exist
+ /// @param _owner Owner of token with given token ID
+ /// @param _tokenId ID of the token to be burned by the msg.sender
+ function _burn(address _owner, uint256 _tokenId)
+ internal
+ {
+ require(
+ _owner != address(0),
+ "ERC721_ZERO_OWNER_ADDRESS"
+ );
+
+ address owner = owners[_tokenId];
+ require(
+ owner == _owner,
+ "ERC721_OWNER_MISMATCH"
+ );
+
+ owners[_tokenId] = address(0);
+ balances[_owner] = safeSub(balances[_owner], 1);
+
+ emit Transfer(
+ _owner,
+ address(0),
+ _tokenId
+ );
+ }
+}