Пытаетесь подписаться на определенное событие в ETH с помощью Web3, но не знаете, как получить возвращенные данные и использовать их.
Я пытаюсь создать бота Javascript, подписывающегося на определенные события в контракте, я написал несколько строк кода, но я не уверен, как EventEmitter возвращает данные и как я могу их использовать. Может ли кто-нибудь привести мне пример того, как я могу получать определенные данные (например, хэш транзакции / параметры события) каждый раз, когда срабатывает web3.eth.subscribe()?
Вот код, который я написал:
const Web3 = require('web3')
const web3 = new Web3(new Web3.providers.HttpProvider("https://api.avax-
test.network/ext/bc/C/rpc") )
web3.eth.subscribe(
'logs',
{
address : 'some contract address',
topics : ['Keccak-256 hash(the event)']
},
function(error,result){
if(!error)
console.log(result);
}
)
.on("connected",function(subscriptionId){ //to check if subscription is successful
print(subscriptionId);
})
1 ответ
Если вы прослушиваете подобные события контракта, они не будут иметь никаких параметров в возвращаемом объекте. Вместо этого, если вам нужны параметры, вам нужно получить события из объекта контракта. Есть два варианта (в примере показано, как получить события «Передача»)
Вариант первый
let options = {
filter: {
value: ['1000', '1337'] //Only get events where transfer value was 1000 or 1337
},
fromBlock: 0, //Number || "earliest" || "pending" || "latest"
toBlock: 'latest'
};
const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);
myContract.getPastEvents('Transfer', options)
.then(results => console.log(results))
.catch(err => throw err);
Вариант второй
let options = {
filter: {
value: [],
},
fromBlock: 0
};
const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);
myContract.events.Transfer(options)
.on('data', event => console.log(event))
.on('changed', changed => console.log(changed))
.on('error', err => throw err)
.on('connected', str => console.log(str))
источник: https://www.coinclarified.com/p/3-ways-to-subscribe-to-events-with-web3-js/