diff --git a/src/lrt/config.ts b/src/lrt/config.ts index b983d81..2eb27ba 100644 --- a/src/lrt/config.ts +++ b/src/lrt/config.ts @@ -10,6 +10,8 @@ const primeLaunchDate = new Date('2024-02-05 12:00 PM PST') const eth = (val: bigint) => val * 1_000000000_000000000n +export const xpEndTimestamp = 1724785200000 // 2024-08-27 12:00 PM PST + export interface PointCondition { name: string // The multiplier the point condition will apply. diff --git a/src/lrt/logic/points.ts b/src/lrt/logic/points.ts index 43672d6..431c415 100644 --- a/src/lrt/logic/points.ts +++ b/src/lrt/logic/points.ts @@ -1,5 +1,6 @@ import { LRTPointRecipientHistory, LRTSummary } from '../../model' import { Block, Context } from '../../processor' +import { xpEndTimestamp } from '../config' import { getLastSummary, state } from '../state' import { campaigns } from './campaigns' import { updateEigenPoints } from './eigen-points' @@ -61,6 +62,17 @@ const createSummary = async (ctx: Context, block: Block) => { points: totalPoints, elPoints: lastSummary?.elPoints ?? 0n, }) + if ( + lastSummary && + block.header.timestamp >= xpEndTimestamp && + lastSummary?.timestamp.valueOf() >= xpEndTimestamp && + summary.points > lastSummary?.points + ) { + throw new Error( + `Points should no longer be accruing after ${xpEndTimestamp}`, + ) + } + state.summaries.set(summary.id, summary) return { summary, recipients } diff --git a/src/lrt/logic/prime-points.ts b/src/lrt/logic/prime-points.ts index 25d50c8..65eb38c 100644 --- a/src/lrt/logic/prime-points.ts +++ b/src/lrt/logic/prime-points.ts @@ -8,6 +8,7 @@ import { pointConditions, pointInterval, referralConditions, + xpEndTimestamp, } from '../config' import { state } from '../state' import { encodeAddress } from '../utils/encoding' @@ -39,6 +40,9 @@ export const updateRecipientsPoints = async ( } >(), // Who have we already calculated in this self-referencing function? ) => { + if (timestamp >= xpEndTimestamp) { + return { totalReferralPoints: [], count: memo.size } + } const totalReferralPoints: ReferralPointData[] = [] for (const recipient of recipients) { if (memo.has(recipient.id)) { diff --git a/src/lrt/state.ts b/src/lrt/state.ts index cdd31ef..6a3f4e0 100644 --- a/src/lrt/state.ts +++ b/src/lrt/state.ts @@ -141,7 +141,7 @@ export const getLastSummary = async (ctxOrEm: Context | EntityManager) => { return await find(ctxOrEm, LRTSummary, { take: 1, order: { id: 'desc' }, - }).then((r) => r[0]) + }).then((r) => r[0] as LRTSummary | undefined) } export const getSummary = async ( @@ -156,9 +156,9 @@ export const getSummary = async ( id, timestamp: new Date(block.header.timestamp), blockNumber: block.header.height, - balance: lastSummary.balance ?? 0n, - points: lastSummary.points ?? 0n, - elPoints: lastSummary.elPoints ?? 0n, + balance: lastSummary?.balance ?? 0n, + points: lastSummary?.points ?? 0n, + elPoints: lastSummary?.elPoints ?? 0n, }) } return summary