diff --git a/docs/guides/contract-events.md b/docs/guides/contract-events.md index f9187a161c..c77a7db69c 100644 --- a/docs/guides/contract-events.md +++ b/docs/guides/contract-events.md @@ -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) diff --git a/src/contract/aci/index.js b/src/contract/aci/index.js index c79909bf33..f101a9fc60 100644 --- a/src/contract/aci/index.js +++ b/src/contract/aci/index.js @@ -254,7 +254,7 @@ 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 } @@ -262,19 +262,17 @@ export default async function getContractInstance ({ /** * 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) } @@ -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) } ) ] diff --git a/test/integration/contract-aci.js b/test/integration/contract-aci.js index 180b3f80ec..7b4c929f46 100644 --- a/test/integration/contract-aci.js +++ b/test/integration/contract-aci.js @@ -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) })