Solidity

ERC721:介面 ID 註冊

  • June 8, 2019

為什麼我們需要在 ERC721 令牌中註冊介面 ID。我剛剛瀏覽了 openzeppelin-solidity erc721 程式碼,很想知道為什麼我們需要使用它。該介面 id 註冊程式碼是這樣的:

/*
*  bytes4(keccak256('name()')) == 0x06fdde03
*  bytes4(keccak256('symbol()')) == 0x95d89b41
*  bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd
*
*  => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f
*/

bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;

constructor (string memory name, string memory symbol) public {
 _name = name;
 _symbol = symbol;

 // register the supported interfaces to conform to ERC721 via ERC165
 _registerInterface(_INTERFACE_ID_ERC721_METADATA);
}

介面支持使用 ERC-165 進行宣傳。這記錄在https://eips.ethereum.org/EIPS/eip-165

在兩種情況下這是有用的,這些原因促使將該功能添加為所有 ERC-721 合約的要求:

  1. 允許鏈下實體(錢包、區塊瀏覽器、Web3 客戶端)辨識合約的能力。例如,當您呼叫safeTransferFromERC-721 合約時,MetaMask 可以檢查您是否正在轉移代幣,而不僅僅是顯示原始的四字節函式標識符。

2)允許鏈上合約詢問其他合約。例如,OpenSea 可以使用此功能檢測來辨識包含標準化批量傳輸擴展的 ERC-721 契約。它可以使用該功能在某些情況下更有效地轉移代幣。

老實說,鏈下客戶端的開發比我預期的要慢,而且大多數合約,比如 Compound,都是在受支持的代幣中硬編碼。因此,實施 ERC-165 所實現的價值比我們計劃的要少得多。但是還是有很多項目想要使用界面廣告,所以我們不妨使用標準化的方式。

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