Excepción de VM: JUMP no válido cuando llamo a una segunda función

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

Establecí como valor de transacción en 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?

Cuando pones 1 en el navegador, se entiende como 1 éter, no 1 wei.
Sí, lo sé, pero no entiendo qué tiene que ver con el error. Además msg.value está en wei. ¿Estás seguro de que es relevante?

Respuestas (1)

Debe agregar la constantpalabra 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:

ingrese la descripción de la imagen aquí

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:

ingrese la descripción de la imagen aquí

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:

ingrese la descripción de la imagen aquí

Lo siento, pero falla. ¿Lo has probado tú mismo? ¿Funciona?
Sí. Lo probé en la solidez del navegador con local geth 1.4.11-stable. Respuesta actualizada con más detalles.
Sí, pero no llamaste la apuesta. ¿Podrías probar esto por favor? Primero establece el valor de la transacción. Luego iguala la apuesta con digamos 2. Luego prueba. ¿Funciona? Gracias