|
@@ -18,21 +18,21 @@ contract ERC721Basic is ERC165, IERC721Basic {
|
|
|
|
|
|
// Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
|
|
|
// which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
|
|
|
- bytes4 private constant ERC721_RECEIVED = 0x150b7a02;
|
|
|
+ bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;
|
|
|
|
|
|
// Mapping from token ID to owner
|
|
|
- mapping (uint256 => address) private tokenOwner_;
|
|
|
+ mapping (uint256 => address) private _tokenOwner;
|
|
|
|
|
|
// Mapping from token ID to approved address
|
|
|
- mapping (uint256 => address) private tokenApprovals_;
|
|
|
+ mapping (uint256 => address) private _tokenApprovals;
|
|
|
|
|
|
// Mapping from owner to number of owned token
|
|
|
- mapping (address => uint256) private ownedTokensCount_;
|
|
|
+ mapping (address => uint256) private _ownedTokensCount;
|
|
|
|
|
|
// Mapping from owner to operator approvals
|
|
|
- mapping (address => mapping (address => bool)) private operatorApprovals_;
|
|
|
+ mapping (address => mapping (address => bool)) private _operatorApprovals;
|
|
|
|
|
|
- bytes4 private constant InterfaceId_ERC721 = 0x80ac58cd;
|
|
|
+ bytes4 private constant _InterfaceId_ERC721 = 0x80ac58cd;
|
|
|
/*
|
|
|
* 0x80ac58cd ===
|
|
|
* bytes4(keccak256('balanceOf(address)')) ^
|
|
@@ -50,26 +50,26 @@ contract ERC721Basic is ERC165, IERC721Basic {
|
|
|
public
|
|
|
{
|
|
|
// register the supported interfaces to conform to ERC721 via ERC165
|
|
|
- _registerInterface(InterfaceId_ERC721);
|
|
|
+ _registerInterface(_InterfaceId_ERC721);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Gets the balance of the specified address
|
|
|
- * @param _owner address to query the balance of
|
|
|
+ * @param owner address to query the balance of
|
|
|
* @return uint256 representing the amount owned by the passed address
|
|
|
*/
|
|
|
- function balanceOf(address _owner) public view returns (uint256) {
|
|
|
- require(_owner != address(0));
|
|
|
- return ownedTokensCount_[_owner];
|
|
|
+ function balanceOf(address owner) public view returns (uint256) {
|
|
|
+ require(owner != address(0));
|
|
|
+ return _ownedTokensCount[owner];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Gets the owner of the specified token ID
|
|
|
- * @param _tokenId uint256 ID of the token to query the owner of
|
|
|
+ * @param tokenId uint256 ID of the token to query the owner of
|
|
|
* @return owner address currently marked as the owner of the given token ID
|
|
|
*/
|
|
|
- function ownerOf(uint256 _tokenId) public view returns (address) {
|
|
|
- address owner = tokenOwner_[_tokenId];
|
|
|
+ function ownerOf(uint256 tokenId) public view returns (address) {
|
|
|
+ address owner = _tokenOwner[tokenId];
|
|
|
require(owner != address(0));
|
|
|
return owner;
|
|
|
}
|
|
@@ -79,81 +79,80 @@ contract ERC721Basic is ERC165, IERC721Basic {
|
|
|
* The zero address indicates there is no approved address.
|
|
|
* There can only be one approved address per token at a given time.
|
|
|
* Can only be called by the token owner or an approved operator.
|
|
|
- * @param _to address to be approved for the given token ID
|
|
|
- * @param _tokenId uint256 ID of the token to be approved
|
|
|
+ * @param to address to be approved for the given token ID
|
|
|
+ * @param tokenId uint256 ID of the token to be approved
|
|
|
*/
|
|
|
- function approve(address _to, uint256 _tokenId) public {
|
|
|
- address owner = ownerOf(_tokenId);
|
|
|
- require(_to != owner);
|
|
|
+ function approve(address to, uint256 tokenId) public {
|
|
|
+ address owner = ownerOf(tokenId);
|
|
|
+ require(to != owner);
|
|
|
require(msg.sender == owner || isApprovedForAll(owner, msg.sender));
|
|
|
|
|
|
- tokenApprovals_[_tokenId] = _to;
|
|
|
- emit Approval(owner, _to, _tokenId);
|
|
|
+ _tokenApprovals[tokenId] = to;
|
|
|
+ emit Approval(owner, to, tokenId);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Gets the approved address for a token ID, or zero if no address set
|
|
|
- * Reverts if the token ID does not exist.
|
|
|
- * @param _tokenId uint256 ID of the token to query the approval of
|
|
|
+ * @param tokenId uint256 ID of the token to query the approval of
|
|
|
* @return address currently approved for the given token ID
|
|
|
*/
|
|
|
- function getApproved(uint256 _tokenId) public view returns (address) {
|
|
|
- require(_exists(_tokenId));
|
|
|
- return tokenApprovals_[_tokenId];
|
|
|
+ function getApproved(uint256 tokenId) public view returns (address) {
|
|
|
+ require(_exists(tokenId));
|
|
|
+ return _tokenApprovals[tokenId];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Sets or unsets the approval of a given operator
|
|
|
* An operator is allowed to transfer all tokens of the sender on their behalf
|
|
|
- * @param _to operator address to set the approval
|
|
|
- * @param _approved representing the status of the approval to be set
|
|
|
+ * @param to operator address to set the approval
|
|
|
+ * @param approved representing the status of the approval to be set
|
|
|
*/
|
|
|
- function setApprovalForAll(address _to, bool _approved) public {
|
|
|
- require(_to != msg.sender);
|
|
|
- operatorApprovals_[msg.sender][_to] = _approved;
|
|
|
- emit ApprovalForAll(msg.sender, _to, _approved);
|
|
|
+ function setApprovalForAll(address to, bool approved) public {
|
|
|
+ require(to != msg.sender);
|
|
|
+ _operatorApprovals[msg.sender][to] = approved;
|
|
|
+ emit ApprovalForAll(msg.sender, to, approved);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Tells whether an operator is approved by a given owner
|
|
|
- * @param _owner owner address which you want to query the approval of
|
|
|
- * @param _operator operator address which you want to query the approval of
|
|
|
+ * @param owner owner address which you want to query the approval of
|
|
|
+ * @param operator operator address which you want to query the approval of
|
|
|
* @return bool whether the given operator is approved by the given owner
|
|
|
*/
|
|
|
function isApprovedForAll(
|
|
|
- address _owner,
|
|
|
- address _operator
|
|
|
+ address owner,
|
|
|
+ address operator
|
|
|
)
|
|
|
public
|
|
|
view
|
|
|
returns (bool)
|
|
|
{
|
|
|
- return operatorApprovals_[_owner][_operator];
|
|
|
+ return _operatorApprovals[owner][operator];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Transfers the ownership of a given token ID to another address
|
|
|
* Usage of this method is discouraged, use `safeTransferFrom` whenever possible
|
|
|
* Requires the msg sender to be the owner, approved, or operator
|
|
|
- * @param _from current owner of the token
|
|
|
- * @param _to address to receive the ownership of the given token ID
|
|
|
- * @param _tokenId uint256 ID of the token to be transferred
|
|
|
+ * @param from current owner of the token
|
|
|
+ * @param to address to receive the ownership of the given token ID
|
|
|
+ * @param tokenId uint256 ID of the token to be transferred
|
|
|
*/
|
|
|
function transferFrom(
|
|
|
- address _from,
|
|
|
- address _to,
|
|
|
- uint256 _tokenId
|
|
|
+ address from,
|
|
|
+ address to,
|
|
|
+ uint256 tokenId
|
|
|
)
|
|
|
public
|
|
|
{
|
|
|
- require(_isApprovedOrOwner(msg.sender, _tokenId));
|
|
|
- require(_to != address(0));
|
|
|
+ require(_isApprovedOrOwner(msg.sender, tokenId));
|
|
|
+ require(to != address(0));
|
|
|
|
|
|
- _clearApproval(_from, _tokenId);
|
|
|
- _removeTokenFrom(_from, _tokenId);
|
|
|
- _addTokenTo(_to, _tokenId);
|
|
|
+ _clearApproval(from, tokenId);
|
|
|
+ _removeTokenFrom(from, tokenId);
|
|
|
+ _addTokenTo(to, tokenId);
|
|
|
|
|
|
- emit Transfer(_from, _to, _tokenId);
|
|
|
+ emit Transfer(from, to, tokenId);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -164,19 +163,19 @@ contract ERC721Basic is ERC165, IERC721Basic {
|
|
|
* the transfer is reverted.
|
|
|
*
|
|
|
* Requires the msg sender to be the owner, approved, or operator
|
|
|
- * @param _from current owner of the token
|
|
|
- * @param _to address to receive the ownership of the given token ID
|
|
|
- * @param _tokenId uint256 ID of the token to be transferred
|
|
|
+ * @param from current owner of the token
|
|
|
+ * @param to address to receive the ownership of the given token ID
|
|
|
+ * @param tokenId uint256 ID of the token to be transferred
|
|
|
*/
|
|
|
function safeTransferFrom(
|
|
|
- address _from,
|
|
|
- address _to,
|
|
|
- uint256 _tokenId
|
|
|
+ address from,
|
|
|
+ address to,
|
|
|
+ uint256 tokenId
|
|
|
)
|
|
|
public
|
|
|
{
|
|
|
// solium-disable-next-line arg-overflow
|
|
|
- safeTransferFrom(_from, _to, _tokenId, "");
|
|
|
+ safeTransferFrom(from, to, tokenId, "");
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -186,141 +185,141 @@ contract ERC721Basic is ERC165, IERC721Basic {
|
|
|
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
|
|
|
* the transfer is reverted.
|
|
|
* Requires the msg sender to be the owner, approved, or operator
|
|
|
- * @param _from current owner of the token
|
|
|
- * @param _to address to receive the ownership of the given token ID
|
|
|
- * @param _tokenId uint256 ID of the token to be transferred
|
|
|
- * @param _data bytes data to send along with a safe transfer check
|
|
|
+ * @param from current owner of the token
|
|
|
+ * @param to address to receive the ownership of the given token ID
|
|
|
+ * @param tokenId uint256 ID of the token to be transferred
|
|
|
+ * @param data bytes data to send along with a safe transfer check
|
|
|
*/
|
|
|
function safeTransferFrom(
|
|
|
- address _from,
|
|
|
- address _to,
|
|
|
- uint256 _tokenId,
|
|
|
- bytes _data
|
|
|
+ address from,
|
|
|
+ address to,
|
|
|
+ uint256 tokenId,
|
|
|
+ bytes data
|
|
|
)
|
|
|
public
|
|
|
{
|
|
|
- transferFrom(_from, _to, _tokenId);
|
|
|
+ transferFrom(from, to, tokenId);
|
|
|
// solium-disable-next-line arg-overflow
|
|
|
- require(_checkAndCallSafeTransfer(_from, _to, _tokenId, _data));
|
|
|
+ require(_checkAndCallSafeTransfer(from, to, tokenId, data));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Returns whether the specified token exists
|
|
|
- * @param _tokenId uint256 ID of the token to query the existence of
|
|
|
+ * @param tokenId uint256 ID of the token to query the existence of
|
|
|
* @return whether the token exists
|
|
|
*/
|
|
|
- function _exists(uint256 _tokenId) internal view returns (bool) {
|
|
|
- address owner = tokenOwner_[_tokenId];
|
|
|
+ function _exists(uint256 tokenId) internal view returns (bool) {
|
|
|
+ address owner = _tokenOwner[tokenId];
|
|
|
return owner != address(0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Returns whether the given spender can transfer a given token ID
|
|
|
- * @param _spender address of the spender to query
|
|
|
- * @param _tokenId uint256 ID of the token to be transferred
|
|
|
+ * @param spender address of the spender to query
|
|
|
+ * @param tokenId uint256 ID of the token to be transferred
|
|
|
* @return bool whether the msg.sender is approved for the given token ID,
|
|
|
* is an operator of the owner, or is the owner of the token
|
|
|
*/
|
|
|
function _isApprovedOrOwner(
|
|
|
- address _spender,
|
|
|
- uint256 _tokenId
|
|
|
+ address spender,
|
|
|
+ uint256 tokenId
|
|
|
)
|
|
|
internal
|
|
|
view
|
|
|
returns (bool)
|
|
|
{
|
|
|
- address owner = ownerOf(_tokenId);
|
|
|
+ address owner = ownerOf(tokenId);
|
|
|
// Disable solium check because of
|
|
|
// https://github.com/duaraghav8/Solium/issues/175
|
|
|
// solium-disable-next-line operator-whitespace
|
|
|
return (
|
|
|
- _spender == owner ||
|
|
|
- getApproved(_tokenId) == _spender ||
|
|
|
- isApprovedForAll(owner, _spender)
|
|
|
+ spender == owner ||
|
|
|
+ getApproved(tokenId) == spender ||
|
|
|
+ isApprovedForAll(owner, spender)
|
|
|
);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Internal function to mint a new token
|
|
|
* Reverts if the given token ID already exists
|
|
|
- * @param _to The address that will own the minted token
|
|
|
- * @param _tokenId uint256 ID of the token to be minted by the msg.sender
|
|
|
+ * @param to The address that will own the minted token
|
|
|
+ * @param tokenId uint256 ID of the token to be minted by the msg.sender
|
|
|
*/
|
|
|
- function _mint(address _to, uint256 _tokenId) internal {
|
|
|
- require(_to != address(0));
|
|
|
- _addTokenTo(_to, _tokenId);
|
|
|
- emit Transfer(address(0), _to, _tokenId);
|
|
|
+ function _mint(address to, uint256 tokenId) internal {
|
|
|
+ require(to != address(0));
|
|
|
+ _addTokenTo(to, tokenId);
|
|
|
+ emit Transfer(address(0), to, tokenId);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Internal function to burn a specific token
|
|
|
* Reverts if the token does not exist
|
|
|
- * @param _tokenId uint256 ID of the token being burned by the msg.sender
|
|
|
+ * @param tokenId uint256 ID of the token being burned by the msg.sender
|
|
|
*/
|
|
|
- function _burn(address _owner, uint256 _tokenId) internal {
|
|
|
- _clearApproval(_owner, _tokenId);
|
|
|
- _removeTokenFrom(_owner, _tokenId);
|
|
|
- emit Transfer(_owner, address(0), _tokenId);
|
|
|
+ function _burn(address owner, uint256 tokenId) internal {
|
|
|
+ _clearApproval(owner, tokenId);
|
|
|
+ _removeTokenFrom(owner, tokenId);
|
|
|
+ emit Transfer(owner, address(0), tokenId);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Internal function to clear current approval of a given token ID
|
|
|
* Reverts if the given address is not indeed the owner of the token
|
|
|
- * @param _owner owner of the token
|
|
|
- * @param _tokenId uint256 ID of the token to be transferred
|
|
|
+ * @param owner owner of the token
|
|
|
+ * @param tokenId uint256 ID of the token to be transferred
|
|
|
*/
|
|
|
- function _clearApproval(address _owner, uint256 _tokenId) internal {
|
|
|
- require(ownerOf(_tokenId) == _owner);
|
|
|
- if (tokenApprovals_[_tokenId] != address(0)) {
|
|
|
- tokenApprovals_[_tokenId] = address(0);
|
|
|
+ function _clearApproval(address owner, uint256 tokenId) internal {
|
|
|
+ require(ownerOf(tokenId) == owner);
|
|
|
+ if (_tokenApprovals[tokenId] != address(0)) {
|
|
|
+ _tokenApprovals[tokenId] = address(0);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Internal function to add a token ID to the list of a given address
|
|
|
- * @param _to address representing the new owner of the given token ID
|
|
|
- * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address
|
|
|
+ * @param to address representing the new owner of the given token ID
|
|
|
+ * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
|
|
|
*/
|
|
|
- function _addTokenTo(address _to, uint256 _tokenId) internal {
|
|
|
- require(tokenOwner_[_tokenId] == address(0));
|
|
|
- tokenOwner_[_tokenId] = _to;
|
|
|
- ownedTokensCount_[_to] = ownedTokensCount_[_to].add(1);
|
|
|
+ function _addTokenTo(address to, uint256 tokenId) internal {
|
|
|
+ require(_tokenOwner[tokenId] == address(0));
|
|
|
+ _tokenOwner[tokenId] = to;
|
|
|
+ _ownedTokensCount[to] = _ownedTokensCount[to].add(1);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Internal function to remove a token ID from the list of a given address
|
|
|
- * @param _from address representing the previous owner of the given token ID
|
|
|
- * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address
|
|
|
+ * @param from address representing the previous owner of the given token ID
|
|
|
+ * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
|
|
|
*/
|
|
|
- function _removeTokenFrom(address _from, uint256 _tokenId) internal {
|
|
|
- require(ownerOf(_tokenId) == _from);
|
|
|
- ownedTokensCount_[_from] = ownedTokensCount_[_from].sub(1);
|
|
|
- tokenOwner_[_tokenId] = address(0);
|
|
|
+ function _removeTokenFrom(address from, uint256 tokenId) internal {
|
|
|
+ require(ownerOf(tokenId) == from);
|
|
|
+ _ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
|
|
|
+ _tokenOwner[tokenId] = address(0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dev Internal function to invoke `onERC721Received` on a target address
|
|
|
* The call is not executed if the target address is not a contract
|
|
|
- * @param _from address representing the previous owner of the given token ID
|
|
|
- * @param _to target address that will receive the tokens
|
|
|
- * @param _tokenId uint256 ID of the token to be transferred
|
|
|
- * @param _data bytes optional data to send along with the call
|
|
|
+ * @param from address representing the previous owner of the given token ID
|
|
|
+ * @param to target address that will receive the tokens
|
|
|
+ * @param tokenId uint256 ID of the token to be transferred
|
|
|
+ * @param data bytes optional data to send along with the call
|
|
|
* @return whether the call correctly returned the expected magic value
|
|
|
*/
|
|
|
function _checkAndCallSafeTransfer(
|
|
|
- address _from,
|
|
|
- address _to,
|
|
|
- uint256 _tokenId,
|
|
|
- bytes _data
|
|
|
+ address from,
|
|
|
+ address to,
|
|
|
+ uint256 tokenId,
|
|
|
+ bytes data
|
|
|
)
|
|
|
internal
|
|
|
returns (bool)
|
|
|
{
|
|
|
- if (!_to.isContract()) {
|
|
|
+ if (!to.isContract()) {
|
|
|
return true;
|
|
|
}
|
|
|
- bytes4 retval = IERC721Receiver(_to).onERC721Received(
|
|
|
- msg.sender, _from, _tokenId, _data);
|
|
|
- return (retval == ERC721_RECEIVED);
|
|
|
+ bytes4 retval = IERC721Receiver(to).onERC721Received(
|
|
|
+ msg.sender, from, tokenId, data);
|
|
|
+ return (retval == _ERC721_RECEIVED);
|
|
|
}
|
|
|
}
|