Mal destino de salto en contrato inteligente de depósito en garantía

Este es un contrato inteligente de custodia implementado en testnet Ropsten: https://testnet.etherscan.io/address/0xd8be8771520addd926a3b454b4ea89a31d753359#code

Al llamar a la función de inicio (dirección del vendedor, dirección de terceros) desde el nodo geth de esta manera:

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

Crea una nueva transacción https://testnet.etherscan.io/tx/0x0fe57a93d9618f915fa822ba1b727147e04c11b23e523d6382ddd879020d98d9 arrojando el siguiente error:

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

El código de la función 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;
}

El evento llamado es:

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

Lo extraño es que el mismo código funciona bien en Solidity Browser ( https://ethereum.github.io/browser-solidity/ ) pero no en testnet.

¿Alguna ayuda/idea? ¡Gracias!

Respuestas (1)

Es casi seguro que está enviando ETH a una función sin el payablemodificador. Sin ese modificador, Solidity asume que nunca tiene la intención de recibir ETH y, por lo tanto, se compilará throw(lo que aparece como un salto no válido) si lo hace.

¡Gracias! Esa es la razón del error!