Skip to content

Commit

Permalink
Reuse existing activity state data
Browse files Browse the repository at this point in the history
This adds a check into the account activity initialization process
so we re-use already-enriched activity data if it corresponds to a
finalized transaction.

Improves worker startup and prevents requests bursts by optimizing
activity initialization for tracked accounts.
  • Loading branch information
hyphenized committed Feb 17, 2025
1 parent ee02541 commit a8d6ddb
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 53 deletions.
103 changes: 50 additions & 53 deletions background/redux-slices/activities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,55 +63,6 @@ const addActivityToState =
}
}

const initializeActivitiesFromTransactions = ({
transactions,
accounts,
}: {
transactions: Transaction[]
accounts: AddressOnNetwork[]
}): Activities => {
const activities: {
[address: string]: {
[chainID: string]: Activity[]
}
} = {}

const addActivity = addActivityToState(activities)

const normalizedAccounts = accounts.map((account) =>
normalizeAddressOnNetwork(account),
)

// Add transactions
transactions.forEach((transaction) => {
const { to, from, network } = transaction
const isTrackedTo = normalizedAccounts.some(
({ address, network: activeNetwork }) =>
network.chainID === activeNetwork.chainID &&
sameEVMAddress(to, address),
)
const isTrackedFrom = normalizedAccounts.some(
({ address, network: activeNetwork }) =>
network.chainID === activeNetwork.chainID &&
sameEVMAddress(from, address),
)

if (to && isTrackedTo) {
addActivity(to, network.chainID, transaction)
}
if (from && isTrackedFrom) {
addActivity(from, network.chainID, transaction)
}
})

// Sort and reduce # of transactions
normalizedAccounts.forEach(({ address, network }) =>
cleanActivitiesArray(activities[address]?.[network.chainID]),
)

return activities
}

const initialState: ActivitiesState = {
activities: {},
}
Expand All @@ -123,13 +74,59 @@ const activitiesSlice = createSlice({
initializeActivities: (
immerState,
{
payload,
payload: { transactions, accounts },
}: {
payload: { transactions: Transaction[]; accounts: AddressOnNetwork[] }
},
) => ({
activities: initializeActivitiesFromTransactions(payload),
}),
) => {
const activities: {
[address: string]: {
[chainID: string]: Activity[]
}
} = {}

const { activities: existingActivities } = immerState

const addActivity = addActivityToState(activities)

const normalizedAccounts = accounts.map((account) =>
normalizeAddressOnNetwork(account),
)

// Add transactions
transactions.forEach((transaction) => {
const { to, from, network } = transaction

const trackedAccounts = normalizedAccounts.filter(
({ address, network: activeNetwork }) =>
network.chainID === activeNetwork.chainID &&
(sameEVMAddress(to, address) || sameEVMAddress(from, address)),
)

trackedAccounts.forEach(({ address, network: { chainID } }) => {
const accountData = existingActivities?.[address]?.[chainID] ?? []
const activityExists = accountData.find(
({ hash }) => hash === transaction.hash,
)

// if activity transaction has finalized, reuse existing data
if (activityExists && activityExists.blockHeight) {
activities[address] ??= {}
activities[address][chainID] ??= []
activities[address][chainID].push(activityExists)
} else {
addActivity(address, chainID, transaction)
}
})
})

// Sort and reduce # of transactions
normalizedAccounts.forEach(({ address, network }) =>
cleanActivitiesArray(activities[address]?.[network.chainID]),
)

immerState.activities = activities
},
initializeActivitiesForAccount: (
immerState,
{
Expand Down
1 change: 1 addition & 0 deletions background/services/redux/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -589,6 +589,7 @@ export default class ReduxService extends BaseService<never> {

async enrichActivities(addressNetwork: AddressOnNetwork): Promise<void> {
const accountsToTrack = await this.chainService.getAccountsToTrack()

const activitiesToEnrich = selectActivitesHashesForEnrichment(
this.store.getState(),
)
Expand Down

0 comments on commit a8d6ddb

Please sign in to comment.