Estoy experimentando con Solidity Browser
Aquí está mi código de contrato:
Prueba de contrato { mapeo (dirección => uint256) weismap; function apuesta (uint vote) rendimientos a pagar (uint256 weis) { if (msg.value==0) throw; weismap[mensaje.remitente]= mensaje.valor; volver weismap[mensaje.remitente]; } prueba de función () devuelve (uint myVote) { devolver 1; } }
Si pongo como valor de transacción 1
,cree el contrato y llame a la función apostar con 1 como parámetro
la función se ejecuta con éxito.
Si después de eso, llamo a la función test() obtengo
Excepción de VM: JUMP no válido
¿Alguna idea sobre lo que está mal?
Debe agregar la constant
palabra clave a la test()
función como:
pragma solidity ^0.4.0;
contract Test {
mapping (address => uint256) weismap;
function bet(uint vote) payable returns (uint256 weis) {
if (msg.value==0)
throw;
weismap[msg.sender]= msg.value;
return weismap[msg.sender];
}
function test() constant returns (uint myVote) {
return 1;
}
}
Llamando bet(...)
con el valor 2. Tenga en cuenta que también estoy enviando 2 éteres con la transacción:
Ahora llamo test()
Y he dejado el valor 2 . Esta llamada test()
falla porque la función constante se llama como una transacción, no como una lectura de los valores de la cadena de bloques:
Si llamo test()
Y he establecido el valor en blanco , esta llamada test()
tiene éxito ya que la función constante se llama como una lectura de los valores de la cadena de bloques:
geth 1.4.11-stable
. Respuesta actualizada con más detalles.
Xavier Leprêtre B9lab
Gyonder