В настоящее время я пытаюсь расширить свои знания о вызовах более низкого уровня, таких как DELEGATECALL.
Я постоянно сталкиваюсь при попытке использовать .delegatecall():
RunTime Error: out of gas
Gas Usage: 0xe07e44(Decimal = 14712388)
контракт делегата вызова:
pragma solidity ^0.4.4;
import "delegateReceiever.sol";
contract delegateCall{
uint public testInt;
address public sender;
function delegateCall(){
testInt = 1;
}
function delegateCallC(address _c, uint _testInt){
if(_c.delegatecall(bytes4(sha3("setTestInt(uint")),_testInt ))
throw;
}
}
Контракт делегата-получателя:
pragma solidity ^0.4.4;
contract delegateReceiever{
uint public testInt;
function delegateReceiever(){
testInt = 2;
}
function setTestInt(uint _testInt){
testInt = _testInt;
}
}
Отредактировано развертывание трюфелей для увеличения газа следующим образом:
deployer.deploy(contract,{gas:114712388})
Исходный баланс аккаунта testrpc изменен на:
1e+167
Отредактированный файл truffle.js для включения газа:
rpc:{
host: "localhost",
port: 8545,
gas: 114712388
}
Есть ли другой способ гарантировать, что газ не закончится? Например, есть ли параметр проявителя, который не требует газа и т. д.?
delegatecall
возвращается true
в случае успеха, поэтому
if(_c.delegatecall(bytes4(sha3("setTestInt(uint")),_testInt ))
throw
будет брошен, если вызов будет успешным.
Пытаться
if(!_c.delegatecall(bytes4(sha3("setTestInt(uint")),_testInt ))
Мигель Мота
"setTestInt(uint"
умышленно отсутствуют закрывающие скобки?