Skip to content

Commit

Permalink
Merge pull request #53 from IndexCoop/feat/add-token-data-utils
Browse files Browse the repository at this point in the history
feat: add get index token data by address
  • Loading branch information
janndriessen authored Jun 11, 2024
2 parents 2562d2c + c885756 commit 4d7b8a4
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 7 deletions.
39 changes: 38 additions & 1 deletion src/__tests__/utils.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {getIndexTokenData} from '../utils';
import {getIndexTokenData, getIndexTokenDataByAddress} from '../utils';

describe('getIndexTokenData', () => {
test('returns token data for mainnet', async () => {
Expand All @@ -24,3 +24,40 @@ describe('getIndexTokenData', () => {
expect(data).toBeNull();
});
});

describe('getIndexTokenDataByAddress', () => {
test('returns token data for mainnet', async () => {
const data = getIndexTokenDataByAddress(
'0xc4506022fb8090774e8a628d5084eed61d9b99ee',
1
);
expect(data).not.toBeNull();
expect(data?.symbol).toBe('hyETH');
});

test('returns token data for arbitrum', async () => {
const data = getIndexTokenDataByAddress(
'0x26d7D3728C6bb762a5043a1d0CeF660988Bca43C',
42161
);
expect(data).not.toBeNull();
expect(data?.address).toBe('0x26d7D3728C6bb762a5043a1d0CeF660988Bca43C');
expect(data?.symbol).toBe('ETH2X');
});

test('returns null for an unsupported chain', async () => {
const data = getIndexTokenData(
'0x26d7D3728C6bb762a5043a1d0CeF660988Bca43C',
11155111
);
expect(data).toBeNull();
});

test('returns null for non existent token', async () => {
const data = getIndexTokenDataByAddress(
'0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
1
);
expect(data).toBeNull();
});
});
33 changes: 27 additions & 6 deletions src/utils/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import {IndexCoopArbitrumTokens, IndexCoopMainnetTokens, TokenData} from '..';

export function getIndexTokenData(
symbol: string,
chainId = 1
): TokenData | null {
function isSameAddress(address1: string, address2: string): boolean {
return address1.toLowerCase() === address2.toLowerCase();
}

function getTokenList(chainId: number) {
let tokenlist: TokenData[] | null = null;
switch (chainId) {
case 1:
Expand All @@ -13,9 +14,29 @@ export function getIndexTokenData(
tokenlist = IndexCoopArbitrumTokens;
break;
}
return tokenlist;
}

export function getIndexTokenData(
symbol: string,
chainId = 1
): TokenData | null {
const tokenlist = getTokenList(chainId);
if (tokenlist === null) return null;
const tokenData = tokenlist.filter(
const tokenData = tokenlist.find(
token => token.symbol.toLowerCase() === symbol.toLowerCase()
);
return tokenData[0] ?? null;
return tokenData ?? null;
}

export function getIndexTokenDataByAddress(
address: string,
chainId: number
): TokenData | null {
const tokenlist = getTokenList(chainId);
if (tokenlist === null) return null;
const tokenData = tokenlist.find(token =>
isSameAddress(token.address, address)
);
return tokenData ?? null;
}

0 comments on commit 4d7b8a4

Please sign in to comment.