"Fehler: Grundgebühr überschreitet Gaslimit" bei Verwendung des Entnahmemusters

Wenn ich die withdraw()Methode von „WithdrawalContract“ von http://solidity.readthedocs.io/en/develop/common-patterns.html mit Remix und testrpc teste, wird der folgende Fehler gemeldet. Das Testrpc-Gaslimit ist auf 0xffffff eingestellt. Irgendwelche Hinweise, warum dieses Problem auftritt?

callback contain no result Error: Error: base fee exceeds gas limit
at runCall (/home/chankh/anaconda3/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:88096:17)
at /home/chankh/anaconda3/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:11855:24
at replenish (/home/chankh/anaconda3/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:8948:17)
at iterateeCallback (/home/chankh/anaconda3/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:8933:17)
at /home/chankh/anaconda3/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:8908:16
at /home/chankh/anaconda3/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:11860:13
at /home/chankh/anaconda3/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:74400:16
at replenish (/home/chankh/anaconda3/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:74347:25)
at /home/chankh/anaconda3/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:74356:9
at eachLimit (/home/chankh/anaconda3/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:74280:36)
at /home/chankh/anaconda3/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:75460:16
at VM.AsyncEventEmitter.emit (/home/chankh/anaconda3/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:74051:3)

FYI Der Vertragscode ist

pragma solidity ^0.4.11;

contract WithdrawalContract {
    address public richest;
    uint public mostSent;

    mapping (address => uint) pendingWithdrawals;

    function WithdrawalContract() payable {
        richest = msg.sender;
        mostSent = msg.value;
    }

    function becomeRichest() payable returns (bool) {
        if (msg.value > mostSent) {
            pendingWithdrawals[richest] += msg.value;
            richest = msg.sender;
            mostSent = msg.value;
            return true;
        } else {
            return false;
        }
    }

    function withdraw() {
        uint amount = pendingWithdrawals[msg.sender];
        // Remember to zero the pending refund before
        // sending to prevent re-entrancy attacks
        pendingWithdrawals[msg.sender] = 0;
        msg.sender.transfer(amount);
    }
}

Antworten (1)

Haben Sie diesen "Rückruf enthält kein Ergebnis Fehler: Fehler: Grundgebühr überschreitet Gaslimit" beim Aufruf der Selbstzerstörungsfunktion (mit Remix IDE) gelesen ?

Ich schlage vor, Ihren Vertrag mit MyEtherWallet zu testen. Die Einrichtung ist ganz einfach:

  1. Besuchen Sie https://www.myetherwallet.com/
  2. Wählen Sie in der oberen rechten Ecke das Dropdown-Menü und wählen Sie „Benutzerdefinierten Knoten hinzufügen“.
  3. Fügen Sie die IP-Adresse und die Portnummer hinzu, unter der testrpc ausgeführt wird (normalerweise http://127.0.0.1:8545 ) .
  4. Gehen Sie zur Registerkarte Vertrag und fügen Sie die Vertragsadresse (bereitgestellt mit Remix) und ihre ABI-Schnittstelle ein

Jetzt können Sie mit Ihrem Vertrag interagieren.

In deinem Beispiel habe ich die witdraw()Funktion mit Gaslimit 30000 aufgerufen und es funktioniert.

Ja, es funktioniert wie ein Zauber.