Files
smom-dbis-138/services/token-aggregation/src/services/chain138-dodo-liquidity.test.ts

83 lines
3.2 KiB
TypeScript

import { estimateChain138DodoLiquidityUsd } from './chain138-dodo-liquidity';
describe('estimateChain138DodoLiquidityUsd', () => {
it('values Chain 138 stable-to-stable DODO pools with token decimals', () => {
const result = estimateChain138DodoLiquidityUsd({
token0Address: '0xf22258f57794CC8E06237084b353Ab30fFfa640b',
token1Address: '0x71D6687F38b93CCad569Fa6352c876eea967201b',
reserve0: 999_999_997_998n,
reserve1: 999_999_997_998n,
});
expect(result.reserve0Usd).toBeCloseTo(999_999.997998, 6);
expect(result.reserve1Usd).toBeCloseTo(999_999.997998, 6);
expect(result.totalLiquidityUsd).toBeCloseTo(1_999_999.995996, 6);
});
it('values WETH/stable DODO pools with stable decimals and oracle price', () => {
const result = estimateChain138DodoLiquidityUsd({
token0Address: '0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f',
token1Address: '0x004b63A7B5b0E06f6bB6adb4a5F9f590BF3182D1',
reserve0: 50n * 10n ** 18n,
reserve1: 105_830n * 10n ** 6n,
price: 2_100n * 10n ** 18n,
});
expect(result.reserve0Usd).toBe(105_000);
expect(result.reserve1Usd).toBe(105_830);
expect(result.totalLiquidityUsd).toBe(210_830);
});
it('keeps WETH9 on the ETH peg even when live oracle price is unavailable', () => {
const result = estimateChain138DodoLiquidityUsd({
token0Address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
token1Address: '0x004b63A7B5b0E06f6bB6adb4a5F9f590BF3182D1',
reserve0: 10n * 10n ** 18n,
reserve1: 24_900n * 10n ** 6n,
});
expect(result.reserve0Usd).toBe(24_900);
expect(result.reserve1Usd).toBe(24_900);
expect(result.totalLiquidityUsd).toBe(49_800);
});
it('values non-USD canonical pairs from their repo-local peg references', () => {
const result = estimateChain138DodoLiquidityUsd({
token0Address: '0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f',
token1Address: '0x290E52a8819A4fbD0714E517225429aA2B70EC6b',
reserve0: 10n * 10n ** 18n,
reserve1: 5n * 10n ** 6n,
});
expect(result.reserve0Usd).toBe(24_900);
expect(result.reserve1Usd).toBeCloseTo(25_816.700630164178, 6);
expect(result.totalLiquidityUsd).toBeCloseTo(50_716.70063016418, 6);
});
it('values XAU/stable DODO pools from the canonical gold peg', () => {
const result = estimateChain138DodoLiquidityUsd({
token0Address: '0x290E52a8819A4fbD0714E517225429aA2B70EC6b',
token1Address: '0x004b63A7B5b0E06f6bB6adb4a5F9f590BF3182D1',
reserve0: 5n * 10n ** 6n,
reserve1: 25_816n * 10n ** 6n,
});
expect(result.reserve0Usd).toBeCloseTo(25_816.700630164178, 6);
expect(result.reserve1Usd).toBe(25_816);
expect(result.totalLiquidityUsd).toBeCloseTo(51_632.70063016418, 6);
});
it('values cBTC/stable DODO pools using satoshi precision and the BTC fallback price', () => {
const result = estimateChain138DodoLiquidityUsd({
token0Address: '0xcb7c000000000000000000000000000000000138',
token1Address: '0x004b63A7B5b0E06f6bB6adb4a5F9f590BF3182D1',
reserve0: 2n * 10n ** 8n,
reserve1: 181_000n * 10n ** 6n,
});
expect(result.reserve0Usd).toBe(180_000);
expect(result.reserve1Usd).toBe(181_000);
expect(result.totalLiquidityUsd).toBe(361_000);
});
});