Solidity
應付函式修飾符
我目前正在閱讀教程,想知道是否有人可以解釋我何時需要支付修改器?例如,我有以下程式碼,但不確定為什麼我需要包含應付部分。如果我沒有包含應付的修飾符會發生什麼?
owner = payable (msg.sender); }```
該資源會告訴您何時、為什麼以及如果您不使用應付款修飾符會怎樣:
https://cryptomarketpool.com/payable-modifier-in-solidity-smart-contracts/
如關於地址類型的solidity 文件中所述
.transfer(...)
,支付地址除了可以訪問和.send(...)
功能之外,還可以執行地址可以執行的所有操作。因此,您可以聲明一個狀態變數,address payable
而不是僅address
當您明確表示允許它從合約中接收乙太幣,並且希望將其轉換一次而不是每次需要呼叫這些函式時。如果
owner
是一個狀態變數,它被聲明為一個應付地址 likeaddress 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
。