Skip to content

Commit

Permalink
fix(events): don't require function name for events decoding
Browse files Browse the repository at this point in the history
  • Loading branch information
thepiwo committed Nov 25, 2021
1 parent ac69267 commit f963bdb
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 11 deletions.
2 changes: 1 addition & 1 deletion docs/guides/contract-events.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ const txHash = 'th_2YV3AmAz2kXdTnQxXtR2uxQi3KuLS9wfvXyqKkQQ2Y6dE6RnET';
const tx = await client.tx(txHash)

// decode events using contract instance
const decodedUsingInstance = contractInstance.decodeEvents('emitEvents', tx.log)
const decodedUsingInstance = contractInstance.decodeEvents(tx.log)

// OR decode of events using contract instance ACI methods
const decodedUsingInstanceMethods = contractInstance.methods.emitEvents.decodeEvents(tx.log)
Expand Down
16 changes: 7 additions & 9 deletions src/contract/aci/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -254,27 +254,25 @@ export default async function getContractInstance ({
if (opt.waitMined || opt.callStatic) {
res.decodedResult = fnACI.returns && fnACI.returns !== 'unit' && fn !== 'init' &&
instance.calldata.decode(instance.aci.name, fn, res.result.returnValue)
res.decodedEvents = instance.decodeEvents(fn, res.result.log)
res.decodedEvents = instance.decodeEvents(res.result.log)
}
return res
}

/**
* Decode Events
* @alias module:@aeternity/aepp-sdk/es/contract/aci
* @rtype (fn: String, events: Array) => DecodedEvents: Array
* @param {String} fn Function name
* @rtype (events: Array) => DecodedEvents: Array
* @param {Array} events Array of encoded events(callRes.result.log)
* @return {Object} DecodedEvents
*/
instance.decodeEvents = (fn, events) => {
const fnACI = getFunctionACI(instance.aci, fn, instance.externalAci)
if (!fnACI.event || !fnACI.event.length) return []

const eventsSchema = fnACI.event.map(e => {
instance.decodeEvents = (events) => {
const eventsACI = instance.aci.event ? instance.aci.event.variant : []
const eventsSchema = eventsACI.map(e => {
const name = Object.keys(e)[0]
return { name, types: e[name] }
})

return decodeEvents(events, eventsSchema)
}

Expand All @@ -301,7 +299,7 @@ export default async function getContractInstance ({
{
get: genHandler(true),
send: genHandler(false),
decodeEvents: events => instance.decodeEvents(name, events)
decodeEvents: events => instance.decodeEvents(events)
}
)
]
Expand Down
2 changes: 1 addition & 1 deletion test/integration/contract-aci.js
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ describe('Contract instance', function () {
eventResult = await cInstance.methods.emitEvents()
const { log } = await sdk.tx(eventResult.hash)
decodedEventsWithoutACI = decodeEvents(log, events)
decodedEventsUsingACI = cInstance.decodeEvents('emitEvents', log)
decodedEventsUsingACI = cInstance.decodeEvents(log)
decodedEventsUsingBuildInMethod = cInstance.methods.emitEvents.decodeEvents(log)
})

Expand Down

0 comments on commit f963bdb

Please sign in to comment.