¿Por qué solc no detecta el problema en este código?

Escribí un ejemplo de código de Solidity a continuación: en función call()del contrato sample_call, hago una llamada a la add_car()función de otro contrato sample, pero esto es un error, ya que la variable vnunca se inicializa.

Supuse que solc debería detectar este problema y quejarse, pero en contraste compiló felizmente el código.

¿Crees que aquí es donde debería mejorarse solc?

pragma solidity ^0.4.1;

contract sample_call {
    function call() public pure {
        uint a;
        sample v;   // v is never initialized

        a = v.add_var(0x22); // BUG HERE, because v is uninitialized
    }
}

contract sample {
    function add_var(uint a) public pure returns(uint) {
    return a + 0x55;
    }
}

Gracias.

Informe tales problemas a su github.

Respuestas (1)

Habrá un error de tiempo de ejecución, pero no compilador.

vse proyecta como un tipo Sample. Entonces, tiene los métodos de Sample, y puedes hacer cosas como:

v = new Sample();

o

v = Sample(_sampleAddress);

Su contrato tampoco lo hace, por lo que function call()falla en el tiempo de ejecución.

No creo que el solcequipo lo considere un error. El grupo de análisis estático del equipo de Remix podría considerarlo una sugerencia útil si aún no está allí. Plantean todo tipo de inquietudes potenciales sobre los contratos que se compilan, pero posiblemente no hagan lo que el autor espera en tiempo de ejecución.

Espero eso ayude.

El acceso a las variables no inicializadas se puede determinar en tiempo de compilación. Y es una buena característica tener.
Sería genial si el compilador sugiriera que parece haber un contrato en juego, no está instanciado por nada en ninguna parte. Es "como se diseñó", al menos por ahora, por lo que tal vez sea más una solicitud de función o una queja que un "error".
Es solo una opinión pero vnunca se le asigna un valor, usarlo en lenguajes como C, Java, etc. es una advertencia. Sé que la solidez inicializa las variables a cero, pero usar variables sin una inicialización explícita no es una gran idea: lo explícito es mejor que lo implícito .
Estoy de acuerdo Es lo que es, pero tal vez no debería ser exactamente así. Entonces, sí, creo que solclo rechazarían como un informe de error, pero la idea tiene mérito, por lo que esto podría ser parte de una cruzada para revertir el status quo y cualquiera quiere llevar la antorcha.