Solidity

delegatecall 方法如何呼叫另一個合約的方法?

  • November 21, 2018

我試圖弄清楚如何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.valueinside的值setN

您可以在 Solidity Browser 中快速測試以上內容

對於庫,請參閱Solidity 文件

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