Skip to content

Commit 7929dfc

Browse files
committed
Enhance staker event handling
Update staker data on `StakerUpdated` and `StakerMoved` events
1 parent 93b31cc commit 7929dfc

File tree

1 file changed

+24
-10
lines changed

1 file changed

+24
-10
lines changed

src/main.ts

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -124,15 +124,6 @@ processor.run(db, async ctx => {
124124
let { blsPubKey, atFutureBlock } = depositAbi.events.StakerRemoved.decode(log)
125125
ctx.log.info(`StakerRemoved: ${blsPubKey} ${atFutureBlock}`)
126126
let staker = await ctx.store.findOneByOrFail(Staker, { id: blsPubKey })
127-
let stakerWithHighestIndex = await ctx.store.find(Staker, {
128-
where: { balance: MoreThan(BigInt(0)) },
129-
order: { index: 'DESC' }
130-
})[0]
131-
if (staker.id !== stakerWithHighestIndex.id) {
132-
stakerWithHighestIndex.index = staker.index
133-
stakerWithHighestIndex.updatedAt = new Date()
134-
keyToStaker.set(stakerWithHighestIndex.id, stakerWithHighestIndex)
135-
}
136127
staker.stakeUpdatedAtBlockNumber = Number(atFutureBlock)
137128
staker.balance = BigInt(0)
138129
staker.updatedAt = new Date()
@@ -152,7 +143,30 @@ processor.run(db, async ctx => {
152143
}
153144
break
154145
case depositAbi.events.StakerUpdated.topic:
155-
// This event is not emitted by the contract, but is present in the ABI
146+
{
147+
let { blsPubKey } = depositAbi.events.StakerUpdated.decode(log)
148+
ctx.log.info(`StakerUpdated: ${blsPubKey}`)
149+
let staker = await ctx.store.findOneByOrFail(Staker, { id: blsPubKey })
150+
let contract = new depositAbi.Contract(ctx, block.header, CONTRACT_ADDRESS)
151+
let { index, stakerData } = await contract.getStakerData(staker.id)
152+
ctx.log.info(`Retrieved staker data: ${index} ${stakerData.peerId} ${stakerData.controlAddress} ${stakerData.rewardAddress} ${stakerData.signingAddress}`)
153+
staker.index = Number(index) - 1
154+
staker.peerId = hexToBytes(stakerData.peerId)
155+
staker.controlAddressHash = hexToBytes(stakerData.controlAddress)
156+
staker.rewardAddressHash = hexToBytes(stakerData.rewardAddress)
157+
staker.signingAddressHash = hexToBytes(stakerData.signingAddress)
158+
staker.updatedAt = new Date()
159+
keyToStaker.set(staker.id, staker)
160+
}
161+
break
162+
case depositAbi.events.StakerMoved.topic:
163+
{
164+
let { blsPubKey, newPosition, atFutureBlock } = depositAbi.events.StakerMoved.decode(log)
165+
ctx.log.info(`StakerMoved: ${blsPubKey} to position ${newPosition} at block ${atFutureBlock}`)
166+
let staker = await ctx.store.findOneByOrFail(Staker, { id: blsPubKey })
167+
staker.index = Number(newPosition) - 1
168+
keyToStaker.set(staker.id, staker)
169+
}
156170
break
157171
default:
158172
break

0 commit comments

Comments
 (0)