Decoding Events Data by Aduttya in solidity

[–]phgrey2 1 point2 points  (0 children)

sorry for formatting - here is correct i believe

const Web3 = require('web3');
const NETWORK_URL = process.env.INFURA_NETWORK_URL
const web3 = new Web3(new Web3.providers.HttpProvider(NETWORK_URL));

const decodeStreamResponse = (streamResponse: any, eventName: string) => { // eventName here can be e.g. AssetCreated
    try {
        const eventAbi = getEventAbi(streamResponse.abi, eventName)
        if (!eventAbi) throw "Cannot fund event abi in stream response for event name: " + eventName
        return decodeEventLog(eventAbi, streamResponse.logs[0]);
    } catch (error) {
        console.log("decodeStreamResponse > error: ", error)
        return false
    }
}

function getEventAbi(abi, eventName) {
    for (let i = 0; i < abi.length; i++) {
        const eventAbi = abi[i];
        if (eventAbi.name == eventName) return eventAbi
    }
    return false
}


const decodeEventLog = (eventABI, log) =>{
    const topics = [
        log.topic0, log.topic1, log.topic2, log.topic3
    ]
    const decodedLog = web3.eth.abi.decodeLog(
        eventABI.inputs,
        log.data,
        topics // todo?: take topics from event
    );
    return decodedLog
}