Solidity

拒絕乙太幣的備份功能如何工作?

  • June 14, 2016

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 的了解還不夠,無法說明它是如何實現的。

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