From c43ecc33a75c548611ba921cedb142e57f7155d4 Mon Sep 17 00:00:00 2001 From: Jakub Zajac Date: Thu, 1 Jun 2023 19:59:51 +0100 Subject: [PATCH] Fix: Get the correct most recent extension installed/uninstalled log --- src/trackExtensions.ts | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/trackExtensions.ts b/src/trackExtensions.ts index b4372a45c..e9c546ee4 100644 --- a/src/trackExtensions.ts +++ b/src/trackExtensions.ts @@ -1,5 +1,6 @@ import { Extension, getExtensionHash, getLogs } from '@colony/colony-js'; import { BigNumber } from 'ethers'; +import { Log } from '@ethersproject/providers'; import networkClient from '~networkClient'; import { @@ -112,8 +113,10 @@ const trackExtensionEvents = async ( * If installation count is 0, that means the extension has been uninstalled */ if (installationsCount <= 0) { - const mostRecentUninstalledLog = - extensionUninstalledLogs[extensionUninstalledLogs.length - 1]; + const mostRecentUninstalledLog = getMostRecentLog( + extensionUninstalledLogs, + colony, + ); /** * Short circuit if there's no log or it happened before the latest processed block * (meaning it's already reflected in the db) @@ -148,13 +151,18 @@ const trackExtensionEvents = async ( await extensionSpecificEventsListener(extensionAddress, extensionHash); // Store the most recent installation in the db - const mostRecentInstalledLog = - extensionInstalledLogs[extensionInstalledLogs.length - 1]; + const mostRecentInstalledLog = getMostRecentLog( + extensionInstalledLogs, + colony, + ); + if (!mostRecentInstalledLog) { + return; + } + const event = await mapLogToContractEvent( mostRecentInstalledLog, networkClient.interface, ); - if (!event) { return; } @@ -194,3 +202,15 @@ const trackExtensionEvents = async ( ); } }; + +// Util returning the most recent extension installed/uninstalled log for a given colony address +const getMostRecentLog = ( + logs: Log[], + colonyAddress: string, +): Log | undefined => { + const colonyFilteredLogs = logs.filter( + (log) => + networkClient.interface.parseLog(log).args.colony === colonyAddress, + ); + return colonyFilteredLogs[colonyFilteredLogs.length - 1]; +};