mirror of https://github.com/status-im/EIPs.git
Clarify invalid deeds and counting
This commit is contained in:
parent
f53cc2ddba
commit
6754461619
|
@ -67,29 +67,28 @@ interface ERC721 {
|
||||||
|
|
||||||
/// @notice Find the owner of a deed
|
/// @notice Find the owner of a deed
|
||||||
/// @param _deedId The identifier for a deed we are inspecting
|
/// @param _deedId The identifier for a deed we are inspecting
|
||||||
/// @dev Deeds assigned to zero address are considered destroyed, and
|
/// @dev Deeds assigned to zero address are considered invalid, and
|
||||||
/// queries about them do throw.
|
/// queries about them do throw.
|
||||||
/// @return The non-zero address of the owner of deed `_deedId`, or `throw`
|
/// @return The non-zero address of the owner of deed `_deedId`, or `throw`
|
||||||
/// if deed `_deedId` is not tracked by this contract
|
/// if deed `_deedId` is not tracked by this contract
|
||||||
function ownerOf(uint256 _deedId) external view returns (address _owner);
|
function ownerOf(uint256 _deedId) external view returns (address _owner);
|
||||||
|
|
||||||
/// @notice Count deeds tracked by this contract
|
/// @notice Count deeds tracked by this contract
|
||||||
/// @return A count of the deeds tracked by this contract, where each one of
|
/// @return A count of valid deeds tracked by this contract, where each one of
|
||||||
/// them has an assigned and queryable owner
|
/// them has an assigned and queryable owner not equal to the zero address
|
||||||
function countOfDeeds() external view returns (uint256 _count);
|
function countOfDeeds() external view returns (uint256 _count);
|
||||||
|
|
||||||
/// @notice Count all deeds assigned to an owner
|
/// @notice Count all deeds assigned to an owner
|
||||||
/// @dev Throws if `_owner` is the zero address, representing destroyed deeds.
|
/// @dev Throws if `_owner` is the zero address, representing invalid deeds.
|
||||||
/// @param _owner An address where we are interested in deeds owned by them
|
/// @param _owner An address where we are interested in deeds owned by them
|
||||||
/// @return The number of deeds owned by `_owner`, possibly zero
|
/// @return The number of deeds owned by `_owner`, possibly zero
|
||||||
function countOfDeedsByOwner(address _owner) external view returns (uint256 _count);
|
function countOfDeedsByOwner(address _owner) external view returns (uint256 _count);
|
||||||
|
|
||||||
/// @notice Enumerate deeds assigned to an owner
|
/// @notice Enumerate deeds assigned to an owner
|
||||||
/// @dev Throws if `_index` >= `countOfDeedsByOwner(_owner)` or if
|
/// @dev Throws if `_index` >= `countOfDeedsByOwner(_owner)` or if
|
||||||
/// `_owner` is the zero address, representing destroyed deeds.
|
/// `_owner` is the zero address, representing invalid deeds.
|
||||||
/// @param _owner An address where we are interested in deeds owned by them
|
/// @param _owner An address where we are interested in deeds owned by them
|
||||||
/// @param _index A counter between zero and `countOfDeedsByOwner(_owner)`,
|
/// @param _index A counter less than `countOfDeedsByOwner(_owner)`
|
||||||
/// inclusive
|
|
||||||
/// @return The identifier for the `_index`th deed assigned to `_owner`,
|
/// @return The identifier for the `_index`th deed assigned to `_owner`,
|
||||||
/// (sort order not specified)
|
/// (sort order not specified)
|
||||||
function deedOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 _deedId);
|
function deedOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 _deedId);
|
||||||
|
@ -104,10 +103,10 @@ interface ERC721 {
|
||||||
event Transfer(address indexed from, address indexed to, uint256 indexed deedId);
|
event Transfer(address indexed from, address indexed to, uint256 indexed deedId);
|
||||||
|
|
||||||
/// @dev The Approve event emits to log the "approved taker" for a deed -- whether
|
/// @dev The Approve event emits to log the "approved taker" for a deed -- whether
|
||||||
/// set for the first time, reaffirmed by setting the same value, or by setting to
|
/// set for the first time, reaffirmed by setting the same value, or setting to
|
||||||
/// to a new value. The "approved taker" is the zero address if nobody can take the
|
/// a new value. The "approved taker" is the zero address if nobody can take the
|
||||||
/// deed now or it is an address if that address can call `takeOwnership` to attempt
|
/// deed now or it is an address if that address can call `takeOwnership` to attempt
|
||||||
/// taking the deed. Any change to the "approved taker" for a deed SHALL cause cause
|
/// taking the deed. Any change to the "approved taker" for a deed SHALL cause
|
||||||
/// Approve to emit. However, an exception, the Approve event will not emit when
|
/// Approve to emit. However, an exception, the Approve event will not emit when
|
||||||
/// Transfer emits, this is because Transfer implicitly denotes the "approved taker"
|
/// Transfer emits, this is because Transfer implicitly denotes the "approved taker"
|
||||||
/// is reset to the zero address.
|
/// is reset to the zero address.
|
||||||
|
@ -118,13 +117,14 @@ interface ERC721 {
|
||||||
/// the deed is assigned to you, only the most recent approval matters. Emits
|
/// the deed is assigned to you, only the most recent approval matters. Emits
|
||||||
/// an Approval event.
|
/// an Approval event.
|
||||||
/// @dev Throws if `msg.sender` does not own deed `_deedId` or if `_to` ==
|
/// @dev Throws if `msg.sender` does not own deed `_deedId` or if `_to` ==
|
||||||
/// `msg.sender`.
|
/// `msg.sender` or if `_deedId` is not a valid deed.
|
||||||
/// @param _deedId The deed for which you are granting approval
|
/// @param _deedId The deed for which you are granting approval
|
||||||
function approve(address _to, uint256 _deedId) external payable;
|
function approve(address _to, uint256 _deedId) external payable;
|
||||||
|
|
||||||
/// @notice Become owner of a deed for which you are currently approved
|
/// @notice Become owner of a deed for which you are currently approved
|
||||||
/// @dev Throws if `msg.sender` is not approved to become the owner of
|
/// @dev Throws if `msg.sender` is not approved to become the owner of
|
||||||
/// `deedId` or if `msg.sender` currently owns `_deedId`.
|
/// `deedId` or if `msg.sender` currently owns `_deedId` or if `_deedId is not a
|
||||||
|
/// valid deed.
|
||||||
/// @param _deedId The deed that is being transferred
|
/// @param _deedId The deed that is being transferred
|
||||||
function takeOwnership(uint256 _deedId) external payable;
|
function takeOwnership(uint256 _deedId) external payable;
|
||||||
}
|
}
|
||||||
|
@ -191,7 +191,7 @@ contract ERC721Enumerable is ERC721 {
|
||||||
|
|
||||||
/// @notice Enumerate active deeds
|
/// @notice Enumerate active deeds
|
||||||
/// @dev Throws if `_index` >= `countOfDeeds()`
|
/// @dev Throws if `_index` >= `countOfDeeds()`
|
||||||
/// @param _index A counter between zero and `countOfDeeds()`, inclusive
|
/// @param _index A counter less than `countOfDeeds()`
|
||||||
/// @return The identifier for the `_index`th deed, (sort order not
|
/// @return The identifier for the `_index`th deed, (sort order not
|
||||||
/// specified)
|
/// specified)
|
||||||
function deedByIndex(uint256 _index) external view returns (uint256 _deedId);
|
function deedByIndex(uint256 _index) external view returns (uint256 _deedId);
|
||||||
|
@ -202,7 +202,7 @@ contract ERC721Enumerable is ERC721 {
|
||||||
|
|
||||||
/// @notice Enumerate owners
|
/// @notice Enumerate owners
|
||||||
/// @dev Throws if `_index` >= `countOfOwners()`
|
/// @dev Throws if `_index` >= `countOfOwners()`
|
||||||
/// @param _index A counter between zero and `countOfOwners()`, inclusive
|
/// @param _index A counter less than `countOfOwners()`
|
||||||
/// @return The address of the `_index`th owner (sort order not specified)
|
/// @return The address of the `_index`th owner (sort order not specified)
|
||||||
function ownerByIndex(uint256 _index) external view returns (address _owner);
|
function ownerByIndex(uint256 _index) external view returns (address _owner);
|
||||||
}
|
}
|
||||||
|
@ -234,7 +234,7 @@ This definition is consistent with the fact that ERC-721 contracts track ownersh
|
||||||
|
|
||||||
**Deed identifiers**
|
**Deed identifiers**
|
||||||
|
|
||||||
The basis of this standard is that every deed is identified by a unique 256-bit unsigned integer within its tracking contract. This ID number MUST NOT change for the life of the contract. The pair `(contract address, asset ID)` will then be a globally unique and fully-qualified identifier for a specific deed within the Ethereum ecosystem. While some contracts may find it convenient to start with ID 0 and simply increment by one for each new NFT, callers MUST NOT assume that ID numbers have any specific pattern to them, and should treat the ID as a "black box". Also note that a deeds MAY be destroyed and as such you cannot simply count from from `0` to `countOfDeeds()`. Please see the enumerations functions for a supported enumeration interface.
|
The basis of this standard is that every deed is identified by a unique 256-bit unsigned integer within its tracking contract. This ID number MUST NOT change for the life of the contract. The pair `(contract address, asset ID)` will then be a globally unique and fully-qualified identifier for a specific deed within the Ethereum ecosystem. While some contracts may find it convenient to start with ID 0 and simply increment by one for each new NFT, callers MUST NOT assume that ID numbers have any specific pattern to them, and should treat the ID as a "black box". Also note that a deeds MAY become invalid (be destroyed). Please see the enumerations functions for a supported enumeration interface.
|
||||||
|
|
||||||
**Transfer mechanism**
|
**Transfer mechanism**
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue