ERC721 tokens are not interchangeable and not divisable.
Each once is assumed to be unique (they have a unique ID). You can only trade them as a whole units.
We don't have to implement the auction/escrow logic because we're conforming the ERC721 token specification.
This means everybody can build an exchange platform for ERC721 collectibles and vice-versa.
An ERC721 contract interface looks like this:
solidity
contract ERC721 {
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
function balanceOf(address _owner) external view returns (uint256);
function ownerOf(uint256 _tokenId) external view returns (address);
function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
function approve(address _approved, uint256 _tokenId) external payable;
}
The best way to implement a token contract is to keep the standard definition in a separate file erc721.sol
.