Skip to content

Instantly share code, notes, and snippets.

@libotony
Last active April 28, 2022 18:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save libotony/941682930bcd424768429f1e5ce7ba89 to your computer and use it in GitHub Desktop.
Save libotony/941682930bcd424768429f1e5ce7ba89 to your computer and use it in GitHub Desktop.
a decoder for general filter of connex
// npm i @vechain/connex-framework @vechain/connex-driver thor-devkit
const { Framework } = require('@vechain/connex-framework')
const { Driver, SimpleNet, SimpleWallet } = require('@vechain/connex-driver')
const { abi } = require('thor-devkit')
const energy = '0x0000000000000000000000000000456e65726779'
const energyABI = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"move","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalBurned","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]
void (async () => {
const driver = await Driver.connect(new SimpleNet('https://mainnet.vecha.in/'), new SimpleWallet)
const connex = new Framework(driver)
const decoder = newEventsDecoder(energyABI)
const events = await connex
.thor
.filter('event', [{ address: energy }])
.apply(0, 10)
console.log(decoder.decode(events[0]))
// or chained promise to make all outputs decoded
/*
const events = await connex
.thor
.filter('event', [{ address: energy }])
.apply(0, 10).then(outputs => outputs.map(x=>decoder.decode(x)))
console.log(events[0])
*/
driver.close()
})().catch(console.log)
const newEventsDecoder = (abiDefs) => {
const coders = {}
for (const def of abiDefs) {
if (def.type === 'event') {
const ev = new abi.Event(def)
coders[ev.signature] = ev
}
}
return {
decode: (output) => {
const ev =coders[output.topics[0]]
if (!!ev) {
output.decoded = ev.decode(output.data, output.topics)
output.decoded.event = ev.definition.name
}
return output
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment