Solidity
拒絕乙太幣的備份功能如何工作?
Solidity 中的合約可以具有備份功能,例如:
// This contract rejects any Ether sent to it. It is good // practise to include such a function for every contract // in order not to loose Ether. contract Rejector { function() { throw; } }
EVM 中的什麼底層機制允許這樣做?
回退功能是 Solidity 語言的一個特性,不是 EVM 級別的特性。Solidity 只是
msg.data
根據 ABI 解析交易中的欄位:bytes4(sha3("functionName(argTypes)"))
編譯程式碼時,ABI 簽名儲存在編譯後的程式碼中,當呼叫程式碼時,它會查看前四個字節是否
msg.data
對應於其中一個函式。如果是這樣,它將呼叫該函式,並將其餘的msg.data
解釋為參數。如果不是,則呼叫回退函式。Serpent 可以實現類似的系統,但我對 Serpent 的了解還不夠,無法說明它是如何實現的。