Erc-721
ERC721 代幣究竟如何不可替代?
與 ERC20 相比,它們有何獨特之處?是包含在token id形式中的所有者地址嗎?那麼,是什麼讓它們與眾不同的是它所附的歷史地址鏈呢?
正如你在這個實現中看到的例子,ERC721 合約跟踪每個單個令牌(由其令牌 ID,一個 256 位數字標識)的所有者(由其地址標識):
mapping (uint256 => address) internal tokenOwner;
因此,要傳輸代幣,必須提供發送者、接收者和要傳輸的代幣的 ID:
function transferFrom(address _from, address _to, uint256 _tokenId) public canTransfer(_tokenId) { ... removeTokenFrom(_from, _tokenId); addTokenTo(_to, _tokenId); ... }
為了比較,這個 ERC20 實現的對應行如下所示:
mapping(address => uint256) balances;
function transfer(address _to, uint256 _value) public returns (bool) { ... balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); ... }
所以在這裡,沒有可辨識的令牌,但是對於每個使用者 a
balance
被儲存,它增加或減少 avalue
。來自不同來源的轉移只是加起來,之後就無法區分它們。