Sale.new({ from: state.account, value: value, gas: 4000000 }).then((instance) => {
// do something with instance
}).catch((err) => {
alert(err)
})
Cuando se ejecuta el código anterior, a veces recibo este error:The contract code couldn't be stored, please check your gas amount.
El contrato que estoy tratando de crear es casi exactamente el mismo que el contrato de pago remoto seguro en los documentos de Solidity con tal vez solo unas pocas líneas más.
Lo extraño es que el contrato en realidad se crea y puedo ver la transacción exitosa en MetaMask y el Ether se resta de mi cuenta. Incluso puedo usarlo Sale.at(<new contract address>)
para interactuar con el contrato creado. He estado probando en la red Ropsten.
Una cosa que no mencionaste aquí es que antes funcionaba bien, pero hace una semana dejó de funcionar.
Esto me hace pensar que es un error con MetaMask, y lamento que aún no lo hayamos resuelto: https://github.com/MetaMask/metamask-plugin/issues/1361
Esto se siente como uno de esos errores muy amplios. Lo encontré cuando agregué un argumento de función sin actualizar mi archivo ABI (mantengo las definiciones de función y las funciones en archivos separados); esto llevó a que la definición de la función fuera inconsistente con la implementación.
Espero que eso ayude a alguien.
obtuviste el error después de la excepción lanzada en el constructor.
Creo que hay algo mal con este fragmento:
function Purchase() payable {
seller = msg.sender;
value = msg.value / 2;
if (2 * value != msg.value) throw;
}
es probable que arroje una excepción while 2*value==msg.value
.
web3.toWei(web3.toBigNumber(0.1).times(2), 'ether')
Entonces, creo que el constructor debería poder dividir el valor enviado en partes iguales en 2 porque se multiplicó por 2 antes de enviarlo.
mkaj