Erc-721

ERC721 代幣究竟如何不可替代?

  • April 20, 2018

與 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);

   ...
}

所以在這裡,沒有可辨識的令牌,但是對於每個使用者 abalance被儲存,它增加或減少 a value。來自不同來源的轉移只是加起來,之後就無法區分它們。

引用自:https://ethereum.stackexchange.com/questions/46212