Schlechtes Sprungziel im Escrow Smart Contract

Dies ist ein Treuhand-Smart-Vertrag, der auf Testnet Ropsten bereitgestellt wird: https://testnet.etherscan.io/address/0xd8be8771520addd926a3b454b4ea89a31d753359#code

Beim Aufrufen der Funktion start (Adresse Verkäufer, Adresse Drittanbieter) vom Get-Knoten wie folgt:

sc.start.sendTransaction("0x90e8682b63d7922a3e942d4bbd4c88095634a17b", "0xf28dafbfeb41bf32869c9d498da0d651d0206ed4", {from:"0x3b877e80b5c0b29d88f3768ed4292b35fdd93a9d", value:"0x3b9aca00", gas:1000000});

Es erstellt eine neue Transaktion https://testnet.etherscan.io/tx/0x0fe57a93d9618f915fa822ba1b727147e04c11b23e523d6382ddd879020d98d9 und wirft den folgenden Fehler:

Warning! Error encountered during contract execution [Bad jump destination] 

Der Code der Funktion start():

function start(address seller, address thirdParty) returns (uint) {
    uint escrowId = numEscrows;
    numEscrows++;
    escrow memory e;
    e.thirdParty = thirdParty;
    e.seller = seller;
    e.buyer = msg.sender;
    e.amount = msg.value;
    e.recipient = seller;
    e.status = 1; // started
    escrows[escrowId] = e;

    escrowStart(e.buyer, e.seller, e.thirdParty); // Log

    return escrowId;
}

Das aufgerufene Ereignis ist:

event escrowStart(address buyer, address seller, address thirdParty);

Seltsamerweise funktioniert derselbe Code gut im Solidity Browser ( https://ethereum.github.io/browser-solidity/ ), aber nicht im Testnet.

Irgendwelche Hilfe/Ideen? Danke!

Antworten (1)

Es liegt mit ziemlicher Sicherheit daran, dass Sie ETH ohne den payableModifikator an eine Funktion senden. Ohne diesen Modifikator geht Solidity davon aus, dass es niemals beabsichtigt ist, ETH zu erhalten, und wird daher kompiliert throw(was als ungültiger Sprung erscheint), wenn dies der Fall ist.

Danke! Das ist der Grund für den Fehler!