Skip to content

Commit

Permalink
Merge pull request #201 from lidofinance/fix/rpc-fallback
Browse files Browse the repository at this point in the history
fix: drop unnecessary decode event calls
  • Loading branch information
AnnaSila authored Oct 8, 2024
2 parents a090e66 + 078c6ea commit c5e5ad4
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 37 deletions.
17 changes: 10 additions & 7 deletions modules/votes/utils/getEventExecuteVote.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,29 @@
import type {
AragonVotingAbi,
ExecuteVoteEvent,
ExecuteVoteEventObject,
} from 'generated/AragonVotingAbi'

export async function getEventExecuteVote(
contractVoting: AragonVotingAbi,
voteId: string | number,
block?: string | number,
) {
): Promise<{
event: ExecuteVoteEvent
decoded: ExecuteVoteEventObject
} | null> {
const filter = contractVoting.filters.ExecuteVote(Number(voteId))
const events = await contractVoting.queryFilter(
filter,
block ? Number(block) : undefined,
)
const event = events[0]
if (!events[0]) return undefined
if (!event.decode) {
throw new Error('ExecuteVote event decoding error')
if (!events.length) {
return null
}
const decoded: ExecuteVoteEventObject = event.decode(event.data, event.topics)
const event = events[0]

return {
event,
decoded,
decoded: event.args,
}
}
10 changes: 5 additions & 5 deletions modules/votes/utils/getEventVoteStart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@ export async function getEventStartVote(
contractVoting: AragonVotingAbi,
voteId: string | number,
block?: string | number,
) {
): Promise<StartVoteEventObject | null> {
const filter = contractVoting.filters.StartVote(Number(voteId))
const events = await contractVoting.queryFilter(
filter,
block ? Number(block) : undefined,
block ? Number(block) + 1 : undefined,
)
const event = events[0]
if (!events[0] || !event.decode) {

if (!events.length) {
return null
}
const decoded = event.decode(event.data, event.topics)
return decoded as StartVoteEventObject

return events[0].args
}
33 changes: 8 additions & 25 deletions modules/votes/utils/getEventsCastVote.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
import type { AragonVotingAbi } from 'generated'
import type {
CastVoteEventObject,
AttemptCastVoteAsDelegateEventObject,
} from 'generated/AragonVotingAbi'
import type { CastVoteEventObject } from 'generated/AragonVotingAbi'

export function unifyEventsVotedWithLast(events: CastVoteEventObject[]) {
return events.reverse().reduce(
Expand Down Expand Up @@ -31,9 +28,7 @@ export async function getEventsCastVote(
filter,
block ? Number(block) : undefined,
)
const decoded = events.map(e =>
e.decode!(e.data, e.topics),
) as CastVoteEventObject[]
const decoded = events.map(e => e.args) as CastVoteEventObject[]
return unifyEventsVotedWithLast(decoded)
}

Expand Down Expand Up @@ -67,11 +62,7 @@ export async function getEventsAttemptCastVoteAsDelegate(
>()

delegateEvents.forEach(event => {
const decodedEvent = event.decode!(
event.data,
event.topics,
) as AttemptCastVoteAsDelegateEventObject
decodedEvent.voters.forEach(voter => {
event.args.voters.forEach(voter => {
const voterLower = voter.toLowerCase()
const existing = voterToLatestVote.get(voterLower)
if (
Expand All @@ -84,18 +75,14 @@ export async function getEventsAttemptCastVoteAsDelegate(
blockNumber: event.blockNumber,
transactionIndex: event.transactionIndex,
isDelegate: true,
delegate: decodedEvent.delegate,
delegate: event.args.delegate,
})
}
})
})

castVoteEvents.forEach(event => {
const decodedEvent = event.decode!(
event.data,
event.topics,
) as CastVoteEventObject
const voterLower = decodedEvent.voter.toLowerCase()
const voterLower = event.args.voter.toLowerCase()
const existing = voterToLatestVote.get(voterLower)
if (
!existing ||
Expand All @@ -113,22 +100,18 @@ export async function getEventsAttemptCastVoteAsDelegate(

return delegateEvents
.map(event => {
const decodedEvent = event.decode!(
event.data,
event.topics,
) as AttemptCastVoteAsDelegateEventObject
const filteredVoters = decodedEvent.voters.filter(voter => {
const filteredVoters = event.args.voters.filter(voter => {
const latestVote = voterToLatestVote.get(voter.toLowerCase())
return (
latestVote &&
latestVote.isDelegate &&
latestVote.delegate === decodedEvent.delegate &&
latestVote.delegate === event.args.delegate &&
latestVote.blockNumber === event.blockNumber &&
latestVote.transactionIndex === event.transactionIndex
)
})
return {
...decodedEvent,
...event.args,
voters: filteredVoters,
}
})
Expand Down

0 comments on commit c5e5ad4

Please sign in to comment.