Last active
April 28, 2022 18:55
-
-
Save libotony/941682930bcd424768429f1e5ce7ba89 to your computer and use it in GitHub Desktop.
a decoder for general filter of connex
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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