fix: Ponder: fix mintNextHourProjected divisor, dead param, dead code (#308)
This commit is contained in:
parent
c540d56d08
commit
a4a3a85fdc
6 changed files with 31 additions and 32 deletions
8
services/ponder/package-lock.json
generated
8
services/ponder/package-lock.json
generated
|
|
@ -45,17 +45,17 @@
|
|||
"@graphql-codegen/typescript": "^4.0.6",
|
||||
"@graphql-codegen/typescript-operations": "^4.2.0",
|
||||
"@graphql-typed-document-node/core": "^3.2.0",
|
||||
"@types/jest": "^29.5.12",
|
||||
"@types/node": "^24.6.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.45.0",
|
||||
"@typescript-eslint/parser": "^8.45.0",
|
||||
"@vitest/coverage-v8": "^3.0.0",
|
||||
"eslint": "^9.36.0",
|
||||
"husky": "^9.1.7",
|
||||
"jest": "^29.7.0",
|
||||
"lint-staged": "^16.2.3",
|
||||
"picomatch": "^4.0.3",
|
||||
"prettier": "^3.6.2",
|
||||
"ts-jest": "^29.1.2",
|
||||
"typescript": "^5.4.3"
|
||||
"typescript": "^5.4.3",
|
||||
"vitest": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@adraffy/ens-normalize": {
|
||||
|
|
|
|||
|
|
@ -92,11 +92,11 @@ function computeProjections(ringBuffer: bigint[], pointer: number, timestamp: bi
|
|||
|
||||
const project = (current: bigint, previous: bigint, weekly: bigint) => {
|
||||
if (elapsedSeconds === 0n) {
|
||||
return weekly / 7n;
|
||||
return weekly / 168n;
|
||||
}
|
||||
const projectedTotal = (current * BigInt(SECONDS_IN_HOUR)) / elapsedSeconds;
|
||||
const medium = (previous + projectedTotal) / 2n;
|
||||
return medium > 0n ? medium : weekly / 7n;
|
||||
return medium > 0n ? medium : weekly / 168n;
|
||||
};
|
||||
|
||||
const mintProjection = project(ringBuffer[currentBase + 1], ringBuffer[previousBase + 1], metrics.mintedWeek);
|
||||
|
|
@ -259,8 +259,8 @@ export async function updateHourlyData(context: StatsContext, timestamp: bigint)
|
|||
ethReserveLastWeek: metrics.ethReserveLatest > 0n ? metrics.ethReserveLatest - metrics.ethReserve7dAgo : 0n,
|
||||
netSupplyChangeDay: metrics.mintedDay - metrics.burnedDay,
|
||||
netSupplyChangeWeek: metrics.mintedWeek - metrics.burnedWeek,
|
||||
mintNextHourProjected: metrics.mintedWeek / 7n,
|
||||
burnNextHourProjected: metrics.burnedWeek / 7n,
|
||||
mintNextHourProjected: metrics.mintedWeek / 168n,
|
||||
burnNextHourProjected: metrics.burnedWeek / 168n,
|
||||
});
|
||||
} else {
|
||||
const metrics = computeMetrics(ringBuffer, pointer);
|
||||
|
|
@ -325,7 +325,7 @@ export async function refreshOutstandingStake(context: StatsContext) {
|
|||
* Record ETH reserve snapshot in ring buffer slot 0.
|
||||
* Called from lm.ts on Recentered events (where we know the pool's ETH balance).
|
||||
*/
|
||||
export async function recordEthReserveSnapshot(context: StatsContext, timestamp: bigint, ethBalance: bigint) {
|
||||
export async function recordEthReserveSnapshot(context: StatsContext, ethBalance: bigint) {
|
||||
const statsData = await context.db.find(stats, { id: STATS_ID });
|
||||
if (!statsData) return;
|
||||
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ async function updateReserveStats(
|
|||
vwapTick: number | bigint
|
||||
) {
|
||||
// Record ETH reserve in ring buffer for hourly time-series
|
||||
await recordEthReserveSnapshot(context, event.block.timestamp, ethBalance);
|
||||
await recordEthReserveSnapshot(context, ethBalance);
|
||||
|
||||
// Compute 7d growth from ring buffer (slot 0 = ethReserve snapshots)
|
||||
const statsData = await context.db.find(stats, { id: STATS_ID });
|
||||
|
|
|
|||
|
|
@ -291,14 +291,14 @@ describe('updateHourlyData', () => {
|
|||
// Filled slots: i=2..49 from pointer=7 (48 slots × 10n minted / 5n burned).
|
||||
// mintedLastDay: i<24 → i=2..23 = 22 slots × 10n = 220n
|
||||
// mintedLastWeek: 48 × 10n = 480n
|
||||
// mintNextHourProjected = mintedWeek / 7n = 480n / 7n = 68n (BigInt truncation)
|
||||
// burnNextHourProjected = burnedWeek / 7n = 240n / 7n = 34n
|
||||
// mintNextHourProjected = mintedWeek / 168n = 480n / 168n = 2n (BigInt truncation)
|
||||
// burnNextHourProjected = burnedWeek / 168n = 240n / 168n = 1n
|
||||
expect(setArg.mintedLastWeek).toBe(480n);
|
||||
expect(setArg.mintedLastDay).toBe(220n);
|
||||
expect(setArg.burnedLastWeek).toBe(240n);
|
||||
expect(setArg.burnedLastDay).toBe(110n);
|
||||
expect(setArg.mintNextHourProjected).toBe(68n);
|
||||
expect(setArg.burnNextHourProjected).toBe(34n);
|
||||
expect(setArg.mintNextHourProjected).toBe(2n);
|
||||
expect(setArg.burnNextHourProjected).toBe(1n);
|
||||
expect(setArg.netSupplyChangeDay).toBe(110n);
|
||||
expect(setArg.netSupplyChangeWeek).toBe(240n);
|
||||
});
|
||||
|
|
@ -399,7 +399,7 @@ describe('updateHourlyData', () => {
|
|||
describe('recordEthReserveSnapshot', () => {
|
||||
it('returns early when no stats row exists', async () => {
|
||||
const ctx = createMockContext(null);
|
||||
await recordEthReserveSnapshot(ctx, 1000n, 500n);
|
||||
await recordEthReserveSnapshot(ctx, 500n);
|
||||
expect((ctx as unknown as { db: { update: ReturnType<typeof vi.fn> } }).db.update).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
|
|
@ -409,7 +409,7 @@ describe('recordEthReserveSnapshot', () => {
|
|||
const ctx = createMockContext(row);
|
||||
const ethBalance = 12345678n;
|
||||
|
||||
await recordEthReserveSnapshot(ctx, 1000n, ethBalance);
|
||||
await recordEthReserveSnapshot(ctx, ethBalance);
|
||||
|
||||
const dbMock = ctx as unknown as { db: { update: ReturnType<typeof vi.fn> } };
|
||||
const setArg = (dbMock.db.update as ReturnType<typeof vi.fn>).mock.results[0].value.set.mock.calls[0][0];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue