@indexcoop/analytics-sdk
Version:
The AnalyticsSDK of the Index Coop.
113 lines (79 loc) • 3.01 kB
Markdown
# AnalyticsSDK
Pricing data is powered by [CoinGecko](https://www.coingecko.com).
## Setup
0. Make sure to use Node.js 18+
1. `npm install`
2. `cp .env.example .env`
## Development
```
npm test:watch
```
### Releasing a new index token
When releasing a new index token make sure to add it to the [tvl provider](./src/providers/tvl/provider.ts). So that the provider reflects the total TVL over all Index's products.
### New components for an index token
Make sure to check the different custom providers for necessary changes e.g.
- add/update components for ic21 in the [nav provider](./src/providers/nav/ic21.ts)
## Examples
Each indicator has its own [provider](./src/providers/). The following indicators are currently provided and return the according data for an Index token.
- Market Cap (NAV \* supply)
- Market Price
- Net Asset Value (NAV)
- (Current) Supply
- TVL (for all Index products)
- (24h) Volume
With just a few lines you can setup any of the providers and fetch the required data.
The first example shows a full example with imports etc. Those are left out for all following ones.
### MarketCap
```typescript
import { providers } from "ethers"
import {
CoinGeckoService,
IndexMarketCapProvider,
} from "@indexcoop/analytics-sdk"
const index = "0x7C07F7aBe10CE8e33DC6C5aD68FE033085256A84" // icETH
const rpcProvider = new providers.JsonRpcProvider(url)
const coingecko = new CoinGeckoService(coingeckoApiKey)
const provider = new IndexMarketCapProvider(rpcProvider, coingecko)
const marketCap = await provider.getMarketCap(index)
```
### Markt Price
```typescript
const coingecko = new CoinGeckoService(coingeckoApiKey)
const provider = new IndexPriceProvider(coingecko)
const price = await provider.getPrice(index, chainId)
```
### NAV
```typescript
const coingecko = new CoinGeckoService(coingeckoApiKey)
const provider = new IndexNavProvider(rpcProvider, coingecko)
const nav = await provider.getNav(index)
```
### Supply
```typescript
const provider = new IndexSupplyProvider(rpcProvider)
const supply = await provider.getSupply(index)
```
### 24h Volume
```typescript
import { CoinGeckoService, IndexVolumeProvider } from "@indexcoop/analytics-sdk"
const chainId = 1
const index = "0x7C07F7aBe10CE8e33DC6C5aD68FE033085256A84" // icETH
const coingecko = new CoinGeckoService(coingeckoApiKey)
const provider = new IndexVolumeProvider(coingecko)
const volume = await provider.get24hVolume(index, chainId)
```
## AnalyticsProvider
To fetch all analytics data for a token at once use the `IndexAnalyticsProvider`.
```typescript
const address = "0x7C07F7aBe10CE8e33DC6C5aD68FE033085256A84" // icETH
const provider = new IndexAnalyticsProvider(rpcProvider, coingeckoService)
const analyticsData = await provider.getAnalytics(address)
```
### TVL
Returns TVL for all of the Index products combined.
```typescript
const provider = new IndexTvlProvider(rpcProvider, coingeckoService)
const supply = await provider.getTvl()
```
## License
[MIT](./LICENSE)