diff --git a/core/src/exchanges/myriad/normalizer.ts b/core/src/exchanges/myriad/normalizer.ts index 60513406..88b8dea9 100644 --- a/core/src/exchanges/myriad/normalizer.ts +++ b/core/src/exchanges/myriad/normalizer.ts @@ -19,6 +19,14 @@ const MYRIAD_PROMOTED_EVENT_KEYS = [ 'id', 'title', 'markets', ] as const; +const WEI_SCALE = BigInt('1000000000000000000'); +const PRECISION_SCALE = BigInt('1000000000000'); + +function weiStringToNumber(value: string): number { + const scaled = (BigInt(value) * PRECISION_SCALE) / WEI_SCALE; + return Number(scaled) / Number(PRECISION_SCALE); +} + function selectTimeframe(interval: CandleInterval): string { switch (interval) { case '1m': @@ -213,15 +221,14 @@ export class MyriadNormalizer implements IExchangeNormalizer ({ - price: Number(priceWei) / WEI, - size: Number(sizeWei) / WEI, + price: weiStringToNumber(priceWei), + size: weiStringToNumber(sizeWei), })), asks: raw.asks.map(([priceWei, sizeWei]) => ({ - price: Number(priceWei) / WEI, - size: Number(sizeWei) / WEI, + price: weiStringToNumber(priceWei), + size: weiStringToNumber(sizeWei), })), timestamp: Date.now(), }; diff --git a/core/test/normalizers/exchange-normalizers-2.test.ts b/core/test/normalizers/exchange-normalizers-2.test.ts index 19f07bd0..17b3bf0f 100644 --- a/core/test/normalizers/exchange-normalizers-2.test.ts +++ b/core/test/normalizers/exchange-normalizers-2.test.ts @@ -565,6 +565,17 @@ describe('MyriadNormalizer', () => { const result = normalizer.normalizeMarket(noExpiry)!; expect(result.resolutionDate.getTime()).toBe(0); }); + + it('preserves sub-1 wei prices without rounding to 1', () => { + const result = normalizer.normalizeClobOrderBook({ + bids: [['999999999999999999', '250000000000000000'], ['100000000000000000', '1']], + asks: [['500000000000000000', '1000000000000000000']], + }); + + expect(result.bids[0].price).toBeLessThan(1); + expect(result.bids[0].price).toBeCloseTo(0.999999999999); + expect(result.bids[0].size).toBeCloseTo(0.25); + }); }); // -----------------------------------------------------------------------