Существует два способа подписки/просмотра логов/событий:
Подписаться:
var subscription = web3.eth.subscribe('logs', {
address: '0x123456..',
topics: ['0x12345...']
}, function(error, result){
if (!error)
console.log(log);
});
Отписаться:
subscription.unsubscribe(function(error, success){
if(success)
console.log('Successfully unsubscribed!');
});
Но как мне отписаться, если я смотрю логи/события вот так:
myContractWebsocket.events.MyLogName({
filter: {'orderId': '0x123456...'},
fromBlock: 0
})
.on('data', data => { console.log(data); })
.on('error', error => { console.log(error); });
С этим тоже боролся, вот мое решение:
Настройка события
let subscriptionId;
const eventEmitter = web3.contract.events.MyEvent({...options})
.on('connected', id => subscriptionId = id)
.on('data', event => {
// Your event logic
})
Отписаться
// Unsubscribe if connected successfully and not undefined
if(!subscriptionId) return
eventEmitter.options.requestManager.removeSubscription(subscriptionId)
myContractWebsocket.events.MyLogName
возвращает Subscription
ответ, который имеет метод отказа от подписки. Подробнее см. здесь .
Роб Магьер
Ренессанс