Estoy tratando de descubrir cómo usar el delegatecall
método en una dirección de contrato en un contrato para llamar a una función en un contrato separado.
Sé que las bibliotecas son la interfaz de nivel superior para usar, pero quiero comprender las acciones y comportamientos de nivel inferior.
Si alguien pudiera proporcionar algunos buenos ejemplos de un contrato que se utiliza delegatecall
para las funciones de otro contrato, sería muy apreciado.
Aquí hay un fragmento del D
uso delegatecall
de Diferencia E
entre CALL, CALLCODE y DELEGATECALL
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;
}
}
Cuando una dirección C invoca delegatecallSetN
, las D sender
se establecerán en C (E no se modifica). Lo msg.value
que sea parte de la invocación, también será el valor del msg.value
interior setN
.
Puede probar rápidamente arriba en Solidity Browser .
Para las bibliotecas, consulte los documentos de Solidity .
un tío
ética
bytes32
. Parastring
ybytes
, no estoy seguro y probablemente se necesite una pregunta por separado.alper
D.delcallCfunc(addressOfE, 10);
es la forma correcta de llamarlo? ¿PodríaaddressOfE
ser una cadena? @ethética
addressOfE
no puede ser una cadena ya que la cadena no tiene undelegatecall
miembro. Probablemente sea más fácil apegarse a las bibliotecas en lugar de una llamada de delegado "simple".kaki maestro del tiempo
usuario2284570
ética