No tiene fondos suficientes para enviar Tx - TestRPC y Metamask

Estoy probando y creando un contrato inteligente para enviar algo de éter a una cuenta usando TestRPC, Truffle y Metamask.

Tengo una página con un botón, cuando hago clic en el botón, se activa el evento submitEtherWallet

submitEtherToWallet: function() {
    MyWallet.deployed().then(function(instance){

      return instance.sendTransaction({from: account, to: instance.address, value: web3.toWei(5, 'ether')});

    }).then(function(result) {
      App.basicInfoUpdate();
    });
  },

Aparentemente, el método funciona bien, porque metamask abre una ventana emergente para confirmar la transacción.

ingrese la descripción de la imagen aquí

Después de hacer clic para enviar la transacción:

ingrese la descripción de la imagen aquí

Respuestas (3)

¿Está seguro, en el código, que "de: cuenta" se refiere a cuentas[0]?

Sí, lo hace. En la función de inicio llena la cuenta con cuentas[0], también intenté cambiar la cuenta a cuentas[0] y sucedió lo mismo.

Después de algunas horas con este problema, me di cuenta de que aparentemente mi metamáscara se estaba ejecutando en una instancia diferente de web3 que mi testrpc, es una situación extraña.

Metamask estaba abriendo la ventana emergente de cuenta correcta para confirmar la transacción, pero en el back-end metamask estaba tratando de enviar la transacción con una cuenta diferente, no sé cómo sucedió esto, pero reemplacé mi addEventListener al original de truffle webpack y aparentemente solucionó el problema.

window.addEventListener('load', function() {
  // Checking if Web3 has been injected by the browser (Mist/MetaMask)
  if (typeof web3 !== 'undefined') {
    console.warn("Using web3 detected from external source. If you find that your accounts don't appear or you have 0 MetaCoin, ensure you've configured that source properly. If using MetaMask, see the following link. Feel free to delete this warning. :) http://truffleframework.com/tutorials/truffle-and-metamask")
    // Use Mist/MetaMask's provider
    window.web3 = new Web3(web3.currentProvider);
  } else {
    console.warn("No web3 detected. Falling back to http://127.0.0.1:9545. You should remove this fallback when you deploy live, as it's inherently insecure. Consider switching to Metamask for development. More info here: http://truffleframework.com/tutorials/truffle-and-metamask");
    // fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
    window.web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:9545"));
  }

  App.start();
});

Como puede ver en la pantalla de impresión, metamask intentaba enviar la transacción a través de la billetera "0xf9..." y no con la billetera que estaba en la ventana emergente.

Puede reiniciar testrpc. Enfrenté el mismo problema, reiniciar testrpc solucionó el problema