From 33a875449276c90debea66a326d0390d7ba9aea3 Mon Sep 17 00:00:00 2001 From: Chris Jacobs Date: Mon, 1 Jul 2024 12:18:13 -0700 Subject: [PATCH 1/5] change rpc --- squid.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/squid.yaml b/squid.yaml index ddf18ef..ac24da7 100644 --- a/squid.yaml +++ b/squid.yaml @@ -8,6 +8,7 @@ deploy: postgres: secrets: - RPC_ENDPOINT + - RPC_ENV processor: - name: lrt-processor cmd: [ "sqd", "process:lrt:prod" ] From 05530faabd857a26fe95ce6f40df25fcfc42acfc Mon Sep 17 00:00:00 2001 From: Chris Jacobs Date: Tue, 27 Aug 2024 08:58:42 -0700 Subject: [PATCH 2/5] turn off prime points --- src/lrt/logic/points.ts | 13 ++- src/lrt/logic/prime-points.ts | 151 +++++++++++++++++----------------- 2 files changed, 88 insertions(+), 76 deletions(-) diff --git a/src/lrt/logic/points.ts b/src/lrt/logic/points.ts index 43672d6..f99cbb7 100644 --- a/src/lrt/logic/points.ts +++ b/src/lrt/logic/points.ts @@ -5,6 +5,8 @@ import { campaigns } from './campaigns' import { updateEigenPoints } from './eigen-points' import { updateRecipientsPoints } from './prime-points' +const xpEndBlock = 20620867 + export const calculatePoints = async (ctx: Context, block: Block) => { ctx.log.info(`Calculating points: ${new Date(block.header.timestamp)}`) const { summary, recipients } = await createSummary(ctx, block) @@ -26,7 +28,9 @@ const createSummary = async (ctx: Context, block: Block) => { return { summary: lastSummary, recipients } } - await updateRecipientsPoints(ctx, block.header.timestamp, recipients) + if (block.header.height < xpEndBlock) { + await updateRecipientsPoints(ctx, block.header.timestamp, recipients) + } let totalPoints = 0n let totalBalance = 0n @@ -61,6 +65,13 @@ const createSummary = async (ctx: Context, block: Block) => { points: totalPoints, elPoints: lastSummary?.elPoints ?? 0n, }) + if ( + block.header.height >= xpEndBlock && + summary.points > lastSummary.points + ) { + throw new Error(`Points should no longer be accruing after ${xpEndBlock}`) + } + 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..434b6b8 100644 --- a/src/lrt/logic/prime-points.ts +++ b/src/lrt/logic/prime-points.ts @@ -39,81 +39,82 @@ export const updateRecipientsPoints = async ( } >(), // Who have we already calculated in this self-referencing function? ) => { - const totalReferralPoints: ReferralPointData[] = [] - for (const recipient of recipients) { - if (memo.has(recipient.id)) { - const lastResult = memo.get(recipient.id)! - totalReferralPoints.push(...lastResult.referralPointsArray) - continue - } - state.recipients.set(recipient.id, recipient) - const { points, referralPointsArray } = updateBalanceDataPoints( - timestamp, - recipient, - recipient.balanceDatas, - ) - totalReferralPoints.push(...referralPointsArray) - - // ========================= - // ========================= - // Points from using referral codes - // ========================= - const refereePoints = sum( - referralPointsArray.map((r) => { - return (r.referralPointsBase * r.referralMultiplier) / 100n - }), - ) - recipient.referralCount = referralPointsArray.length - recipient.points = points + refereePoints - recipient.referralPoints = refereePoints - recipient.pointsDate = new Date(timestamp) - - memo.set(recipient.id, { referralPointsArray }) - - // ========================= - // ========================= - // Points from others using this recipient's referral codes - // ========================= - const recipientReferralData = getReferralDataForRecipient(recipient.id) - const recipientReferralCodes = [ - ...recipientReferralData.map((d) => d.referralId), - recipient.id, - encodeAddress(recipient.id), - ] - - // TODO: Optimize? - const referringRecipients = [...state.recipients.values()].filter((r) => - r.balanceDatas.find( - (bd) => bd.referralId && recipientReferralCodes.includes(bd.referralId), - ), - ) - - const { totalReferralPoints: referringRecipientsPointData } = - await updateRecipientsPoints( - ctxOrEm, - timestamp, - referringRecipients, - memo, - ) - - const incomingReferralPointsData = referringRecipientsPointData.filter( - (rp) => recipientReferralCodes.includes(rp.referralId), - ) - - const refererPoints = incomingReferralPointsData.reduce( - (sum, incoming) => - sum + - (incoming.referralPointsBase * - (incoming.referralMultiplier + incoming.outgoingReferralMultiplier)) / - 100n, - 0n, - ) - - recipient.referrerCount = incomingReferralPointsData.length - recipient.points += refererPoints - recipient.referralPoints += refererPoints - } - return { totalReferralPoints, count: memo.size } + throw new Error('Prime points should no longer accrue.') + // const totalReferralPoints: ReferralPointData[] = [] + // for (const recipient of recipients) { + // if (memo.has(recipient.id)) { + // const lastResult = memo.get(recipient.id)! + // totalReferralPoints.push(...lastResult.referralPointsArray) + // continue + // } + // state.recipients.set(recipient.id, recipient) + // const { points, referralPointsArray } = updateBalanceDataPoints( + // timestamp, + // recipient, + // recipient.balanceDatas, + // ) + // totalReferralPoints.push(...referralPointsArray) + // + // // ========================= + // // ========================= + // // Points from using referral codes + // // ========================= + // const refereePoints = sum( + // referralPointsArray.map((r) => { + // return (r.referralPointsBase * r.referralMultiplier) / 100n + // }), + // ) + // recipient.referralCount = referralPointsArray.length + // recipient.points = points + refereePoints + // recipient.referralPoints = refereePoints + // recipient.pointsDate = new Date(timestamp) + // + // memo.set(recipient.id, { referralPointsArray }) + // + // // ========================= + // // ========================= + // // Points from others using this recipient's referral codes + // // ========================= + // const recipientReferralData = getReferralDataForRecipient(recipient.id) + // const recipientReferralCodes = [ + // ...recipientReferralData.map((d) => d.referralId), + // recipient.id, + // encodeAddress(recipient.id), + // ] + // + // // TODO: Optimize? + // const referringRecipients = [...state.recipients.values()].filter((r) => + // r.balanceDatas.find( + // (bd) => bd.referralId && recipientReferralCodes.includes(bd.referralId), + // ), + // ) + // + // const { totalReferralPoints: referringRecipientsPointData } = + // await updateRecipientsPoints( + // ctxOrEm, + // timestamp, + // referringRecipients, + // memo, + // ) + // + // const incomingReferralPointsData = referringRecipientsPointData.filter( + // (rp) => recipientReferralCodes.includes(rp.referralId), + // ) + // + // const refererPoints = incomingReferralPointsData.reduce( + // (sum, incoming) => + // sum + + // (incoming.referralPointsBase * + // (incoming.referralMultiplier + incoming.outgoingReferralMultiplier)) / + // 100n, + // 0n, + // ) + // + // recipient.referrerCount = incomingReferralPointsData.length + // recipient.points += refererPoints + // recipient.referralPoints += refererPoints + // } + // return { totalReferralPoints, count: memo.size } } /** From 41c7f7ce12d1490cca2e5c7d6b19a3246f09c773 Mon Sep 17 00:00:00 2001 From: Chris Jacobs Date: Tue, 27 Aug 2024 09:02:54 -0700 Subject: [PATCH 3/5] ... --- squid.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/squid.yaml b/squid.yaml index ac24da7..ddf18ef 100644 --- a/squid.yaml +++ b/squid.yaml @@ -8,7 +8,6 @@ deploy: postgres: secrets: - RPC_ENDPOINT - - RPC_ENV processor: - name: lrt-processor cmd: [ "sqd", "process:lrt:prod" ] From 61ff443ffc72c36bfacdac8d77feaffeb5d0c759 Mon Sep 17 00:00:00 2001 From: Chris Jacobs Date: Tue, 27 Aug 2024 09:12:33 -0700 Subject: [PATCH 4/5] simplify --- src/lrt/config.ts | 2 + src/lrt/logic/points.ts | 13 ++- src/lrt/logic/prime-points.ts | 155 +++++++++++++++++----------------- 3 files changed, 87 insertions(+), 83 deletions(-) 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 f99cbb7..af4e8ae 100644 --- a/src/lrt/logic/points.ts +++ b/src/lrt/logic/points.ts @@ -1,12 +1,11 @@ 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' import { updateRecipientsPoints } from './prime-points' -const xpEndBlock = 20620867 - export const calculatePoints = async (ctx: Context, block: Block) => { ctx.log.info(`Calculating points: ${new Date(block.header.timestamp)}`) const { summary, recipients } = await createSummary(ctx, block) @@ -28,9 +27,7 @@ const createSummary = async (ctx: Context, block: Block) => { return { summary: lastSummary, recipients } } - if (block.header.height < xpEndBlock) { - await updateRecipientsPoints(ctx, block.header.timestamp, recipients) - } + await updateRecipientsPoints(ctx, block.header.timestamp, recipients) let totalPoints = 0n let totalBalance = 0n @@ -66,10 +63,12 @@ const createSummary = async (ctx: Context, block: Block) => { elPoints: lastSummary?.elPoints ?? 0n, }) if ( - block.header.height >= xpEndBlock && + block.header.timestamp >= xpEndTimestamp && summary.points > lastSummary.points ) { - throw new Error(`Points should no longer be accruing after ${xpEndBlock}`) + throw new Error( + `Points should no longer be accruing after ${xpEndTimestamp}`, + ) } state.summaries.set(summary.id, summary) diff --git a/src/lrt/logic/prime-points.ts b/src/lrt/logic/prime-points.ts index 434b6b8..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,82 +40,84 @@ export const updateRecipientsPoints = async ( } >(), // Who have we already calculated in this self-referencing function? ) => { - throw new Error('Prime points should no longer accrue.') - // const totalReferralPoints: ReferralPointData[] = [] - // for (const recipient of recipients) { - // if (memo.has(recipient.id)) { - // const lastResult = memo.get(recipient.id)! - // totalReferralPoints.push(...lastResult.referralPointsArray) - // continue - // } - // state.recipients.set(recipient.id, recipient) - // const { points, referralPointsArray } = updateBalanceDataPoints( - // timestamp, - // recipient, - // recipient.balanceDatas, - // ) - // totalReferralPoints.push(...referralPointsArray) - // - // // ========================= - // // ========================= - // // Points from using referral codes - // // ========================= - // const refereePoints = sum( - // referralPointsArray.map((r) => { - // return (r.referralPointsBase * r.referralMultiplier) / 100n - // }), - // ) - // recipient.referralCount = referralPointsArray.length - // recipient.points = points + refereePoints - // recipient.referralPoints = refereePoints - // recipient.pointsDate = new Date(timestamp) - // - // memo.set(recipient.id, { referralPointsArray }) - // - // // ========================= - // // ========================= - // // Points from others using this recipient's referral codes - // // ========================= - // const recipientReferralData = getReferralDataForRecipient(recipient.id) - // const recipientReferralCodes = [ - // ...recipientReferralData.map((d) => d.referralId), - // recipient.id, - // encodeAddress(recipient.id), - // ] - // - // // TODO: Optimize? - // const referringRecipients = [...state.recipients.values()].filter((r) => - // r.balanceDatas.find( - // (bd) => bd.referralId && recipientReferralCodes.includes(bd.referralId), - // ), - // ) - // - // const { totalReferralPoints: referringRecipientsPointData } = - // await updateRecipientsPoints( - // ctxOrEm, - // timestamp, - // referringRecipients, - // memo, - // ) - // - // const incomingReferralPointsData = referringRecipientsPointData.filter( - // (rp) => recipientReferralCodes.includes(rp.referralId), - // ) - // - // const refererPoints = incomingReferralPointsData.reduce( - // (sum, incoming) => - // sum + - // (incoming.referralPointsBase * - // (incoming.referralMultiplier + incoming.outgoingReferralMultiplier)) / - // 100n, - // 0n, - // ) - // - // recipient.referrerCount = incomingReferralPointsData.length - // recipient.points += refererPoints - // recipient.referralPoints += refererPoints - // } - // return { totalReferralPoints, count: memo.size } + if (timestamp >= xpEndTimestamp) { + return { totalReferralPoints: [], count: memo.size } + } + const totalReferralPoints: ReferralPointData[] = [] + for (const recipient of recipients) { + if (memo.has(recipient.id)) { + const lastResult = memo.get(recipient.id)! + totalReferralPoints.push(...lastResult.referralPointsArray) + continue + } + state.recipients.set(recipient.id, recipient) + const { points, referralPointsArray } = updateBalanceDataPoints( + timestamp, + recipient, + recipient.balanceDatas, + ) + totalReferralPoints.push(...referralPointsArray) + + // ========================= + // ========================= + // Points from using referral codes + // ========================= + const refereePoints = sum( + referralPointsArray.map((r) => { + return (r.referralPointsBase * r.referralMultiplier) / 100n + }), + ) + recipient.referralCount = referralPointsArray.length + recipient.points = points + refereePoints + recipient.referralPoints = refereePoints + recipient.pointsDate = new Date(timestamp) + + memo.set(recipient.id, { referralPointsArray }) + + // ========================= + // ========================= + // Points from others using this recipient's referral codes + // ========================= + const recipientReferralData = getReferralDataForRecipient(recipient.id) + const recipientReferralCodes = [ + ...recipientReferralData.map((d) => d.referralId), + recipient.id, + encodeAddress(recipient.id), + ] + + // TODO: Optimize? + const referringRecipients = [...state.recipients.values()].filter((r) => + r.balanceDatas.find( + (bd) => bd.referralId && recipientReferralCodes.includes(bd.referralId), + ), + ) + + const { totalReferralPoints: referringRecipientsPointData } = + await updateRecipientsPoints( + ctxOrEm, + timestamp, + referringRecipients, + memo, + ) + + const incomingReferralPointsData = referringRecipientsPointData.filter( + (rp) => recipientReferralCodes.includes(rp.referralId), + ) + + const refererPoints = incomingReferralPointsData.reduce( + (sum, incoming) => + sum + + (incoming.referralPointsBase * + (incoming.referralMultiplier + incoming.outgoingReferralMultiplier)) / + 100n, + 0n, + ) + + recipient.referrerCount = incomingReferralPointsData.length + recipient.points += refererPoints + recipient.referralPoints += refererPoints + } + return { totalReferralPoints, count: memo.size } } /** From 0956c95235d7ebbf7db035b5a719aba6a60e112a Mon Sep 17 00:00:00 2001 From: Chris Jacobs Date: Tue, 27 Aug 2024 09:25:35 -0700 Subject: [PATCH 5/5] there may be some overlap so handle that --- src/lrt/logic/points.ts | 4 +++- src/lrt/state.ts | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/lrt/logic/points.ts b/src/lrt/logic/points.ts index af4e8ae..431c415 100644 --- a/src/lrt/logic/points.ts +++ b/src/lrt/logic/points.ts @@ -63,8 +63,10 @@ const createSummary = async (ctx: Context, block: Block) => { elPoints: lastSummary?.elPoints ?? 0n, }) if ( + lastSummary && block.header.timestamp >= xpEndTimestamp && - summary.points > lastSummary.points + lastSummary?.timestamp.valueOf() >= xpEndTimestamp && + summary.points > lastSummary?.points ) { throw new Error( `Points should no longer be accruing after ${xpEndTimestamp}`, 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