Solidity
delegatecall 方法如何呼叫另一個合約的方法?
我試圖弄清楚如何
delegatecall
在契約中的契約地址上使用該方法來呼叫單獨契約中的函式。我知道庫是使用的更高級別的界面,但我想了解較低級別的操作和行為。
如果有人可以提供一些使用另一個契約功能的契約的好例子
delegatecall
,那將不勝感激。
下面是
D
使用CALL、CALLCODE 和 DELEGATECALLdelegatecall
之間E
的差異的片段contract D { uint public n; address public sender; function delegatecallSetN(address _e, uint _n) { _e.delegatecall(bytes4(keccak256("setN(uint256)")), _n); // D's storage is set, E is not modified } } contract E { uint public n; address public sender; function setN(uint _n) { n = _n; sender = msg.sender; } }
當地址 C 呼叫
delegatecallSetN
時,Dsender
將被設置為 C(E 未被修改)。無論msg.value
是呼叫的一部分,也將是msg.value
inside的值setN
。您可以在 Solidity Browser 中快速測試以上內容。
對於庫,請參閱Solidity 文件。