Простое логическое событие с функцией срабатывания, отлично работает, как и ожидалось, в консоли разработки трюфелей, но никогда не запускает мое Dapp, созданное с помощью приложения create-реагировать, просто кажется, что оно не слушает/не контролирует сеть, мне говорят, что это должно постоянно загружать POST-запрос для мониторинга сети, но не в моем случае. Я использую Metamask, и все вызовы функций смарт-контракта отлично работают, кроме событий.
event RoundStarted(uint256 closingBlock);
function roundStart() public ownerOnly {
RoundStarted(block.number + ROUND_LENGTH);
}
И строка кода, которую я использовал в консоли разработки трюфелей, которая не работает, когда я вставляю ее в componentWillMount()
Loto.deployed().then(function(instance){
return instance.RoundStarted({},{fromBlock: 0, toBlock: 'latest'});
}).then((result) => {
return result.watch((error,result) => {
console.log('Found him!')
})
})
UPD: я обнаружил, что события отлично работают в трюфельном реагирующем блоке, так что это вроде как решает проблему, но я до сих пор не знаю, как они с этим справились, это не моя проблема с кодом, что-то о зависимостях, я хотел бы знать что мне не хватает в моем приложении create-реагировать.
Будет ли это работать, если вы удалите все аргументы объекта JS в вызове события контракта, например, если вы замените строку 2 в своем фрагменте наreturn instance.RoundStarted();
Я не экспериментировал с указанием начального и конечного блоков, которые я хочу отслеживать, но, возможно, указав конечный блок, поскольку он 'latest'
принимает последний блок во время вызова вашей componentWillMount()
функции, который, вероятно, является блоком до запуска вашего события.
Уилджгрифф
const Loto = Contract(LotoContract); Loto.setProvider(web3.currentProvider)
? Где web3 от внедренного провайдера, например, MetaMask.Эндрю Кацевич