Sub-Adapters 1
Preview and test each sub adapter.
Compound (compound)
Metadata
- ID
- compound
- name
- "Compound" 
- icon
Queries
Adapter Code
Check the entire code written for the Adapter.
Source code
Showing TS source. 
1export const name = 'Compound Lending Rates';
2export const version = '0.1.0';
3export const license = 'MIT';
4
5const CTOKEN_ABI = [
6  'function supplyRatePerBlock() external view returns (uint)',
7  'function exchangeRateCurrent() external view returns (uint256)',
8];
9
10const blocksPerDay = 6570; // (13.15 seconds per block)
11const daysPerYear = 365;
12
13const MS_PER_YEAR = 365 * 24 * 60 * 60 * 1000;
14
15const markets: { [underlying: string]: string } = {
16  '0x6b175474e89094c44da98b954eedeac495271d0f': '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', // Dai
17  '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': '0x39aa39c021dfbae8fac545936693ac917d5e7563', // USDC
18  '0xdac17f958d2ee523a2206206994597c13d831ec7': '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9', // USDT
19}
20
21export function setup(sdk: Context) {
22  const getInterestRate = async (assetAddress: string): Promise<number> => {
23    const cToken = markets[assetAddress.toLowerCase()];
24    if (!cToken) {
25      return 0;
26    }
27
28    const contract = sdk.ethers.getContract(cToken, CTOKEN_ABI);
29
30    const supplyRate = await contract.supplyRatePerBlock();
31
32    const mantissa = 10 ** 18 // TODO: decimals
33
34    const apy = (Math.pow((supplyRate.toString() / mantissa * blocksPerDay + 1), daysPerYear)) - 1;
35
36    return apy;
37  }
38
39  const getInterestRateOverDateRange = async (assetAddress: string, startDate: string, endDate: string): Promise<number> => {
40    const cToken = markets[assetAddress.toLowerCase()];
41    if (!cToken) {
42      return 0;
43    }
44
45    const contract = sdk.ethers.getContract(cToken, CTOKEN_ABI);
46
47    const [startPrice, endPrice] = await Promise.all([
48      contract.exchangeRateCurrent({ blockTag: startDate }),
49      contract.exchangeRateCurrent({ blockTag: endDate }),
50    ]);
51
52    const percentOfYear = MS_PER_YEAR / (new Date(endDate).getTime() - new Date(startDate).getTime());
53
54    const apy = Math.pow(endPrice / startPrice, percentOfYear) - 1;
55
56    return apy;
57  }
58
59  sdk.register({
60    id: 'compound',
61    queries: {
62      apyCurrent: getInterestRate,
63      apyOverDateRange: getInterestRateOverDateRange,
64    },
65    metadata: {
66      name: 'Compound',
67      icon: sdk.ipfs.getDataURILoader('QmZpZsg829EnBxE2MPZykZpAfsxyRsu6EuGbtfTkf2EFNj', 'image/svg+xml'),
68    },
69  });
70}
71
It's something off?
Report it to the discussion board on Discord, we will take care of it.