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!
Es casi seguro que está enviando ETH a una función sin el payable
modificador. 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.
Juan Ignacio Pérez Sacristán