erc721中的可變性保證是什麼意思
ERC-721 介面中的一些函式包含
payable
修飾符。
function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
我想知道為什麼會這樣,
payable
並從EIP-721中找到解釋了原因。Solidity 問題 #3412:上述介面包括每個函式的顯式可變性保證。可變性保證按從弱到強的順序依次為:應付、隱式不可支付、視圖和純。您的實現必須滿足此介面中的可變性保證,並且您可能會遇到更強的保證。例如,此介面中的應付函式可以在您的合約中實現為 nonpayble(未指定狀態可變性)。我們預計以後的 Solidity 版本將允許您從該介面繼承更嚴格的合約,但版本 0.4.20 的解決方法是您可以在從合約繼承之前編輯此介面以添加更嚴格的可變性。
這是否意味著當介面中的一個函式包含
payable
,當它實現時,它可以更改為任何東西?比如public
,view
,pure
? 或者這是否意味著它只能更改為nonpayable which isnothing
?我不明白為什麼不是
function transferFrom(address _from, address _to, uint256 _tokenId) external;
首先。定義
Mutability guarantees
也很難理解。有人可以用更簡單的方式解釋一下嗎?
這是否意味著當介面中的一個功能包含payable時,當它實現時,它可以更改為任何東西?
是的,
payable
是最不嚴格的可變性形式,因此如果您願意,您的函式實現可以使用更嚴格的可變性。可變性保證的定義也很難理解。有人可以用更簡單的方式解釋一下嗎?
基本上,任何功能 , 都
payable
可以隱含地做任何非付費功能可以做的事情。任何非付費函式都可以隱式地做任何
view
函式可以做的事情。任何
view
函式都可以隱式地做任何pure
函式可以做的事情。但在相反的方向上情況並非如此。
因此,如果介面中的函式是
view
,則它保證您的函式可以根據需要讀取數據,但不能寫入數據或接受msg.value
。