Транзакция вне газа с использованием делегатского вызова

В настоящее время я пытаюсь расширить свои знания о вызовах более низкого уровня, таких как 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
}

Есть ли другой способ гарантировать, что газ не закончится? Например, есть ли параметр проявителя, который не требует газа и т. д.?

Для моего собственного обучения, "setTestInt(uint"умышленно отсутствуют закрывающие скобки?

Ответы (1)

delegatecallвозвращается trueв случае успеха, поэтому

if(_c.delegatecall(bytes4(sha3("setTestInt(uint")),_testInt ))
    throw

будет брошен, если вызов будет успешным.

Пытаться

if(!_c.delegatecall(bytes4(sha3("setTestInt(uint")),_testInt ))