Я использую Ganache CLI v6.1.0 (ganache-core: 2.1.0))
(начал с настроек по умолчанию, запустив просто ganache-cli
), web3 (^1.0.0-beta.33)
и мой смарт-контракт написан для solidity ^0.4.0
.
У меня есть несколько работающих функций, где я могу, например, нажать кнопку в своем веб-интерфейсе, и он отправит транзакцию в мой развернутый смарт-контракт и обновит данные в цепочке. Это работает без каких-либо проблем.
Как ни странно, у меня возникают проблемы при простом call
вызове constant
функции (которая просто возвращает длину массива). Почему-то каждый раз, когда я это делаю, я получаю сообщение об ошибке: Key not found in database
. Эта ошибка возникает в обещании, возвращенном вызовом call
.
Вот мой код:
Функция твердости:
function getItemsLength() public constant returns(uint256) {
return items.length;
}
JS-код:
var account;
var numItems = 0;
web3.eth.getAccounts().then(function(result) {
account = result[0];
var contract = new web3.eth.Contract(
simpleStorageABI,
contractAddress,
{
from: account,
gasPrice: '20000000000',
gas: '100000'
}
)
contract.methods.getItemsLength().call(account) // Error occurs here
.then(function(result) {
numItems = result;
})
});
У меня это работало с использованием testrpc вместо Ganache несколько дней назад, но затем я перешел на Ganache для поддержки веб-сокетов (для прослушивателей событий). Где-то по пути это сломалось, и похоже, что это ошибка в Ganache.
Кто-нибудь еще столкнулся с этим? Я видел некоторые проблемы в своем поиске, которые казались похожими, но в основном они казались прерывистыми и касались конкретно тестирования. Буду признателен за любое понимание или руководство, я слишком долго застрял на этом.
Призыв неправильный. Просто попробуйте написать это так:
Contract.methods.getItemsLength().call({ from: account}) .затем (функция (результат) { количество элементов = результат; })
У меня была эта проблема, когда я использовал переменные функционального блока, такие как block.number или block. сложности, некоторые из которых недоступны в ремиксе, я полагаю, когда я удалил их, код сработал.
мирг
Крис Стайкос
мирг