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 v
nunca 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.
Habrá un error de tiempo de ejecución, pero no compilador.
v
se 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 solc
equipo 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.
v
nunca 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 .solc
lo 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.
ismael