【发布时间】:2017-08-29 04:07:19
【问题描述】:
我有一份合同 A 和一份合同 B。
合约 A 声明了这个函数:
function getIntValue() constant returns (uint);
对于来自 B 的 delegatecall 合约 A 的 getIntValue 函数,合适的汇编代码是什么?我对组装还不是很有经验,所以到目前为止我只有这个不起作用:
function getContractAIntValue() constant returns (uint c) {
address addr = address(contractA); // contract A is stored in B.
bytes4 sig = bytes4(sha3("getIntValue()")); // function signature
assembly {
let x := mload(0x40) // find empty storage location using "free memory pointer"
mstore(x,sig) // attach function signature
let status := delegatecall(sub(gas, 10000), addr, add(x, 0x04), 0, x, 0x20)
jumpi(invalidJumpLabel, iszero(status)) // error out if unsuccessful delegatecall
c := mload(x)
}
}
【问题讨论】: