From 2b1a3ba6af3be1b1fb3cfe14f2b71ab5cfcc166b Mon Sep 17 00:00:00 2001 From: defiQUG Date: Sat, 27 Jun 2026 21:11:12 -0700 Subject: [PATCH] fix(token-aggregation): use live Chain 138 RPC and vacuous HO coverage Point server-side RPC default at 192.168.11.235:8545 and treat zero issued c* with funded reserves as sufficient for institutional smoke. Co-authored-by: Cursor --- services/token-aggregation/src/config/chain138-rpc.ts | 2 +- .../src/services/chain138-ho-reserve-coverage.test.ts | 11 +++++++++++ .../src/services/chain138-ho-reserve-coverage.ts | 8 +++++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/services/token-aggregation/src/config/chain138-rpc.ts b/services/token-aggregation/src/config/chain138-rpc.ts index a153ee2..6121864 100644 --- a/services/token-aggregation/src/config/chain138-rpc.ts +++ b/services/token-aggregation/src/config/chain138-rpc.ts @@ -6,7 +6,7 @@ export const CHAIN138_PUBLIC_RPC_URLS = [ ] as const; const DEFAULT_CHAIN138_PUBLIC_RPC_URL = CHAIN138_PUBLIC_RPC_URLS[0]; -const DEFAULT_CHAIN138_SERVER_RPC_URL = 'http://192.168.11.221:8545'; +const DEFAULT_CHAIN138_SERVER_RPC_URL = 'http://192.168.11.235:8545'; /** HTTPS FQDN for wallets, MetaMask, and browser JSON-RPC (same on LAN and external). */ export function resolveChain138PublicRpcUrl(): string { diff --git a/services/token-aggregation/src/services/chain138-ho-reserve-coverage.test.ts b/services/token-aggregation/src/services/chain138-ho-reserve-coverage.test.ts index d4ea935..a18cab9 100644 --- a/services/token-aggregation/src/services/chain138-ho-reserve-coverage.test.ts +++ b/services/token-aggregation/src/services/chain138-ho-reserve-coverage.test.ts @@ -34,6 +34,17 @@ describe('evaluateHoReserveCoverage', () => { expect(row.coverageRatio).toBeCloseTo(2.78, 2); }); + it('marks sufficient with vacuous coverage when no c* is issued but reserve GL is funded', () => { + const row = evaluateHoReserveCoverage({ + reserveAssetsUsd: 1_150_000_000_000, + issuedCStarUsd: 0, + multiplier: 1.2, + }); + + expect(row.status).toBe('sufficient'); + expect(row.coverageRatio).toBeGreaterThanOrEqual(1); + }); + it('marks insufficient when reserve assets fall below 1.2× issued c* USD', () => { const row = evaluateHoReserveCoverage({ reserveAssetsUsd: 400_000_000_000, diff --git a/services/token-aggregation/src/services/chain138-ho-reserve-coverage.ts b/services/token-aggregation/src/services/chain138-ho-reserve-coverage.ts index 14f1258..84d43a6 100644 --- a/services/token-aggregation/src/services/chain138-ho-reserve-coverage.ts +++ b/services/token-aggregation/src/services/chain138-ho-reserve-coverage.ts @@ -116,15 +116,17 @@ export function evaluateHoReserveCoverage(input: { const formula = `coverageRatio = reserveAssetsUsd / (${multiplier} × issuedCStarUsd)`; if (input.issuedCStarUsd == null || !(input.issuedCStarUsd > 0)) { + const reserveAssetsUsd = input.reserveAssetsUsd ?? 0; + const vacuousCoverage = reserveAssetsUsd > 0; return { - status: 'pending', + status: vacuousCoverage ? 'sufficient' : 'pending', multiplier, headOfficeId, reserveAssetGlCodes, - reserveAssetsUsd: input.reserveAssetsUsd ?? 0, + reserveAssetsUsd, issuedCStarUsd: input.issuedCStarUsd ?? 0, requiredReserveUsd: 0, - coverageRatio: 0, + coverageRatio: vacuousCoverage ? 999 : 0, formula, policyId: policy.policyId, policyRef: policy.policyRef,