Solidity
沒有支付功能的合約可以有乙太幣嗎?
標題中的問題說明了一切。
據我所知,將乙太幣存入合約的唯一方法是呼叫一個
payable
函式,並將其設置msg.value
為大於 0(當然,該函式應該成功完成而無需還原)。但是如果沒有
payable
函式開始,合約的乙太幣餘額是否有可能大於0?謝謝!
是的,合約可以在沒有任何
payable
功能的情況下擁有 Ether 餘額。有四種可能的方法:
- 自我毀滅。另一個合約自毀(通過使用該
selfdestruct
功能)並將其剩餘的乙太幣發送到您的合約- 挖礦目標(所謂的coinbase地址)。不能拒絕挖礦獎勵的乙太幣。
- 在合約存在之前發送給合約的乙太幣。
- 乙太幣在 Solidity 0.4 版本之前發送到合約,因為
payable
僅在該版本中引入例如,可以在此處找到有關這些替代方案的更多詳細資訊:https ://medium.com/@alexsherbuck/two-ways-to-force-ether-into-a-contract-1543c1311c56