Solidity

應付函式修飾符

  • October 5, 2022

我目前正在閱讀教程,想知道是否有人可以解釋我何時需要支付修改器?例如,我有以下程式碼,但不確定為什麼我需要包含應付部分。如果我沒有包含應付的修飾符會發生什麼?

       owner = payable (msg.sender);
   }```

該資源會告訴您何時、為什麼以及如果您不使用應付款修飾符會怎樣:

https://cryptomarketpool.com/payable-modifier-in-solidity-smart-contracts/

關於地址類型的solidity 文件中所述.transfer(...),支付地址除了可以訪問和.send(...)功能之外,還可以執行地址可以執行的所有操作。因此,您可以聲明一個狀態變數,address payable而不是僅address當您明確表示允許它從合約中接收乙太幣,並且希望將其轉換一次而不是每次需要呼叫這些函式時。

如果owner是一個狀態變數,它被聲明為一個應付地址 like address payable public owner;,如果你嘗試直接分配一個地址 likemsg.sender而不強制轉換它,solidity 將無法編譯:

TypeError: Type address is not implicitly convertible to expected type address payable

但是,如果owner像您一樣將其聲明為基本地址address public owner; ,則可以在需要時輕鬆地將地址轉換為應付:

payable(owner).transfer(...);

此外,由於.call{value: ...}('')目前是推薦的發送值.transfer的方式,並且可以與普通地址一起使用.send,因此將地址標記為應付似乎並沒有太大的價值,可能只是為了表明可讀性的意圖。

payable 請注意,這與使用修飾符like標記函式不同function fund() external payable,這使得函式可以在呼叫時從使用者或另一個合約接收乙太幣,這將被添加到合約的餘額中並且是可見的下msg.value

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