Out-of-Gas-Transaktion mit Delegiertenruf

Ich versuche derzeit, mein Wissen in Calls auf niedrigerem Niveau wie DELEGATECALL weiterzuentwickeln.

Ich stoße ständig darauf, wenn ich versuche, .delegatecall() zu verwenden:

RunTime Error: out of gas
Gas Usage: 0xe07e44(Decimal = 14712388)

DelegateCall-Vertrag:

 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;
}  
}

DelegateReceiver-Vertrag:

pragma solidity ^0.4.4;
contract delegateReceiever{
uint public testInt;

function delegateReceiever(){
    testInt = 2;
}

function setTestInt(uint _testInt){
    testInt = _testInt;
}
}

Bearbeiteter Trüffeleinsatz, um das Gas wie folgt zu erhöhen:

deployer.deploy(contract,{gas:114712388})

Anfangskontostand von testrpc geändert auf:

1e+167

Bearbeitete truffle.js-Datei, um Gas einzuschließen:

rpc:{
   host: "localhost",
   port: 8545,
   gas: 114712388
}

Gibt es eine andere Methode, um sicherzustellen, dass das Gas nicht ausgeht? Gibt es zum Beispiel einen Entwicklerparameter, der kein Gas etc. benötigt?

Fehlt für mein eigenes Lernen "setTestInt(uint"absichtlich eine schließende Klammer?

Antworten (1)

delegatecallRenditen trueauf Erfolg, so

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

wird ausgelöst, wenn der Anruf erfolgreich ist.

Versuchen

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