Error de destino de salto incorrecto

Escribí lo que pensé que era un contrato absolutamente simple: un frasco de ahorro... agrega valor ("ahorra") en el frasco y cuando el saldo del contrato alcanza una cierta cantidad ("objetivo"), entonces puedo retirar el valor. Pero cada vez que intento enviarle valor, se produce un error con "Destino de salto incorrecto"

Aquí está mi contrato:

pragma solidity ^0.4.0;

contract jar {
  uint public target;
  uint public numDonations;

  function jar (uint _target) {
    target = _target;
    numDonations = 0;
  }

  function save() {
    numDonations++;
  }

  function getBalance() constant returns (uint) {
    return this.balance;
  }

  function withdraw () {
     if (this.balance < target) throw;
     if (!msg.sender.send(this.balance)) throw;
  }
}

Y aquí está el comando de guardar que estoy enviando:

jar.save({from:eth.accounts[0], value: 100000000000000000, gas:3000000}) 

Aquí hay un ejemplo de una transacción fallida:

https://testnet.etherscan.io/tx/0xcf93aa967f6d1d42b84147511ab58a66a468ee8a102a8d78f78f071ec1a30a05

Nunca he visto este error antes y estoy totalmente perplejo. Cualquier sugerencia sería muy apreciada.

Respuestas (1)

Mientras usa Solidity 0.4, debe definir su función de pago. si su contrato recibirá Etheres, defina en su código pagadero alternativo:

function() payable {}

si desea alguna función, aceptará Ethers, debe declararse con un modificador pagadero

function save() payable {
    numDonations++;
  }
En particular, para este ejemplo, debe serfunction save() payable{...}