Пытаетесь подписаться на определенное событие в 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/

Другие вопросы по тегам