為什麼在 ERC-721 規範中需要支付轉移和批准功能?
在ERC-721 規範 interface
safeTransferFrom
中,functionstransferFrom
和approve
all 都有payable
修飾符。這是什麼原因?據我所知,這些功能都不需要它,而且我不確定我應該用這個值做什麼。
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
似乎答案與可變性有關,來自 ERC721 規範的“警告”部分,
Solidity 問題 #3412:上述介面包括每個函式的顯式可變性保證。可變性保證從弱到強依次為:payable、implicit nonpayable、view和pure。您的實現必須滿足此介面中的可變性保證,並且您可能會遇到更強的保證。例如,此介面中的應付函式可以在您的合約中實現為 nonpayble(未指定狀態可變性)。我們預計以後的 Solidity 版本將允許您從該介面繼承更嚴格的合約,但版本 0.4.20 的解決方法是您可以在從合約繼承之前編輯此介面以添加更嚴格的可變性。
因此,這些函式被標記為payable作為一種明確不要求這些函式是view或pure的方式。
這是關於 issue #3412 討論的連結,其中討論了可變性保證。