Soy bastante nuevo en la programación y me enfrento a un problema en el que no puedo acceder a una variable pública desde un contrato.
En el contrato, he declarado la siguiente variable pública:
uint public numFoodInfos;
En JS trato de llamar a esta variable:
contractAdressF2F = "...";
ABIArrayF2F = ...;
dataF2F = "...";
myContractF2F = web3.eth.contract(ABIArrayF2F).at(contractAdressF2F);
myContractF2F.numFoodInfos.call(function (error, result) {
if (!error)
console.log(result.toNumber())
else
console.log(error);
});
Sin embargo, esto devuelve 'nulo'.
¿Alguien ve el problema aquí? Leí que las variables públicas deberían generar una función getter automáticamente.
FYI, estoy usando el marco de meteoritos. Otras funciones personalizadas del mismo contrato funcionan...
Intente llamar a esa variable usando paréntesis como este:
myContractF2F.numFoodInfos().call(function (error, result) {
if (!error)
console.log(result.toNumber())
else
console.log(error);
});
La razón por la que necesitamos agregar paréntesis se explica aquí: https://solidity.readthedocs.io/en/latest/contracts.html#getter-functions (cuando hace pública una variable de estado, el compilador genera automáticamente una función getter como descrito en la documentación)
Bob Roelandts