Я новичок в программировании, и у меня возникла проблема, когда я не могу получить доступ к общедоступной переменной из контракта.
В контракте я объявил следующую общедоступную переменную:
uint public numFoodInfos;
В JS я пытаюсь вызвать эту переменную:
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);
});
Однако это возвращает «ноль».
Кто-нибудь видит здесь проблему? Я читал, что общедоступные переменные должны автоматически генерировать функцию получения.
К вашему сведению, я использую структуру метеора. Другие пользовательские функции того же контракта работают...
Попробуйте вызвать эту переменную, используя круглые скобки следующим образом:
myContractF2F.numFoodInfos().call(function (error, result) {
if (!error)
console.log(result.toNumber())
else
console.log(error);
});
Причина, по которой нам нужно добавить круглые скобки, объясняется здесь - https://solidity.readthedocs.io/en/latest/contracts.html#getter-functions (когда вы делаете переменную состояния общедоступной, компилятор автоматически генерирует функцию получения как описано в документации)
Боб Руландтс