Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gauss314/defi
Tools for use in DeFi. Impermanent Loss calculations, staking and farming strategies, coingecko and pancakeswap API queries, liquidity pools and more
https://github.com/gauss314/defi
api blockchain cex coingecko crypto cryptocurrency dapp defi dex exchanges farming impermanent-loss pancakeswap stake
Last synced: about 2 months ago
JSON representation
Tools for use in DeFi. Impermanent Loss calculations, staking and farming strategies, coingecko and pancakeswap API queries, liquidity pools and more
- Host: GitHub
- URL: https://github.com/gauss314/defi
- Owner: gauss314
- License: mit
- Created: 2021-04-11T20:32:54.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-03-02T14:31:12.000Z (11 months ago)
- Last Synced: 2024-11-10T02:57:10.836Z (2 months ago)
- Topics: api, blockchain, cex, coingecko, crypto, cryptocurrency, dapp, defi, dex, exchanges, farming, impermanent-loss, pancakeswap, stake
- Language: Python
- Homepage:
- Size: 2.5 MB
- Stars: 556
- Watchers: 12
- Forks: 143
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
- Library-of-Ethereum - DeFi Open Source Tools - Tools for use in DeFi. Impermanent Loss calculations, staking and farming strategies, coingecko and pancakeswap API queries, liquidity pools and more (DeFi / Cairo)
- awesome-web3-tools-and-dapps - DeFi Tools - Our DeFi tool suite provides various features such as calculators to determine impermanent loss, as well as strategies for staking and farming. (dApps directory / Gas Tools)
README
# DeFi open source tools
[![Downloads](https://pepy.tech/badge/defi)](https://pepy.tech/project/defi)
[![License](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/gauss314/defi/blob/main/LICENSE.txt)
[![Twitter](https://img.shields.io/twitter/follow/JohnGalt_is_www?color=blue&style=flat-square)](https://twitter.com/JohnGalt_is_www)
[![Update](https://img.shields.io/github/last-commit/gauss314/defi)](https://github.com/gauss314/defi)
[![Update](https://img.shields.io/pypi/pyversions/defi?color=green&label=python)](https://pypi.org/project/defi/)
## Get Started
* [Instalation](#instalation)## General Tools
* [Impermanent Loss, simple calculation](#impermanent-loss)
* [Compare Buy & Hold with Staking and Farming](#buyhold-vs-stake--farming-strategy)
* [Complete list for DeFi protocols TVL, volume and more](#defi-protocols)
* [Example listing top20 DeFi dapps by TVL](#top-20-dapps-tvl-by-chain)
* [Example show historical TVL for one or more protocols ](#historical-tvl)## CoinGecko API
* [API endpoints](#coingecko-api)
* [Get IDs list](#coingecko---ids-list)
* [Live prices](#coingecko---get-price-for-coins-at-diferent-currencies)
* [All exchanges and prices for each coin](#coingecko---get-main-exchanges-for-a-coin-or-token)
* [Historial prices por each coin](#coingecko---historical-prices-for-a-coin)
* [Simulate Farming Strategy](#coingecko---farming-simulate)## PancakeSwap API
* [All token prices real time](#pancakeswap---get-tokens-prices-in-real-time)
* [All pairs liquidity, volume and more](#pancakeswap---get-pairs-liquidity-and-more)
* [Get data in real time for one token](#pancakeswap---get-token-info)
* [Get data in real time for one pair](#pancakeswap---get-pair-info)
* [Simulate invest in LP considering impermanent loss, 3D graph](#pancakeswap---simulate-lp-invest)
## Get started
### Instalation
```sh
pip install defi
```
### Impermanent Loss
```python
import defi.defi_tools as dft# Impermanent loss for stableCoin & -20% return token
dft.iloss(0.8)
```
> -0.62%```python
import defi.defi_tools as dft# Impermanent loss for stableCoin & +60% return token
dft.iloss(1.6, numerical=True)```
> 0.027 # Same as 2.7%
### Buy&Hold vs Stake & Farming strategy
```python
import defi.defi_tools as dft# Exercise: Get returns after 20 days, assuming token A is a stablecoin, token B perform + 150%
# individual staking pools for both = 0.01% & 0.05% daily
# liquidity-pool farming rewards =0.2% daily & Earn by fees/day = 0.01%
dft.compare(days=20, var_A=0, var_B=150, rw_pool_A=0.01, rw_pool_B=0.05, rw_pool_AB=0.2, fees_AB=0.01)
``````json
{
"buy_hold": "75.00%",
"stake": "75.60%",
"farm": "71.96%",
"Best": "Stake"
}
```
### DeFi protocols
```python
import defi.defi_tools as dftmetadata, df = dft.getProtocol('Uniswap')
metadata
``````json
{
"id": "1",
"name": "Uniswap",
"address": "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
"symbol": "UNI",
"url": "https://info.uniswap.org/",
"description": "A fully decentralized protocol for automated liquidity provision on Ethereum.\r\n",
"chain": "Ethereum",
"logo": "None",
"audits": "2",
"audit_note": "None",
"gecko_id": "uniswap",
"cmcId": "7083",
"category": "Dexes",
"chains": ["Ethereum"],
"module": "uniswap.js"
}
```
### Top 20 dapps TVL by chain
```python
import defi.defi_tools as dft
import matplotlib.pyplot as pltdf = dft.getProtocols()
fig, ax = plt.subplots(figsize=(12,6))n = 50 # quantity to show
top = df.sort_values('tvl', ascending=False).head(n)chains = top.groupby('chain').size().index.values.tolist()
for chain in chains:
filtro = top.loc[top.chain==chain]
ax.bar(filtro.index, filtro.tvl, label=chain)ax.set_title(f'Top {n} dApp TVL, groupBy dApp main Chain', fontsize=14)
ax.grid(alpha=0.5)
plt.legend()
plt.xticks(rotation=90)
plt.show()
```
### Historical TVL```python
import defi.defi_tools as dft
import pandas as pdexchanges = ['pancakeswap', 'curve', 'makerdao', 'uniswap','Compound', 'AAVE','sushiswap','anchor']
hist = [dft.getProtocol(exchange)[1] for exchange in exchanges]
df = pd.concat(hist, axis=1)
df.columns = exchangesdf.plot(figsize=(12,6))
```
### CoinGecko API
Endpoints available, some examples:
* dft.getGeckoIDs()
# coinGecko first 5000 ids* dft.geckoPrice("bitcoin,ethereum", "usd,eur,brl")
# coinGecko quotes* dft.geckoList(page=1, per_page=250)
# full coinGecko cyptocurrency list* dft.geckoMarkets("ethereum")
# top 100 liquidity markets, prices, and more, for eth or other coin* dft.geckoHistorical('cardano')
# full history containing price, market cap and volume* dft.farmSimulate(['huobi-token','tether'], apr=45)
# Simulate farming strategy with apr=45%### CoinGecko - ids list
```python
import defi.defi_tools as dftids = dft.getGeckoIDs()
ids[:10]
```
['bitcoin',
'ethereum',
'binancecoin',
'tether',
'solana',
'cardano',
'ripple',
'polkadot',
'shiba-inu',
'dogecoin']### CoinGecko - Get price for coins at diferent currencies
```python
import defi.defi_tools as dftdft.geckoPrice("bitcoin,ethereum", "usd,eur,brl")
``````json
{"ethereum": {"usd": 2149.85, "eur": 1807.58, "brl": 12208.77},
"bitcoin": {"usd": 60188, "eur": 50606, "brl": 341802}}
```
### CoinGecko - Get main exchanges for a coin or token
```python
import defi.defi_tools as dftdf = dft.geckoMarkets("ethereum")
print(df.info())
# returns top 100 ethereum quotes by volume
```
```text
Index: 100 entries, IDCM to FTX.US
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 base 100 non-null object
1 target 100 non-null object
2 last 100 non-null float64
3 volume 100 non-null float64
4 spread 100 non-null float64
5 timestamp 100 non-null datetime64[ns, UTC]
6 volume_usd 100 non-null float64
7 price_usd 100 non-null float64
8 trust_score 100 non-null object
dtypes: datetime64[ns, UTC](1), float64(5), object(3)
memory usage: 7.8+ KB
```
### CoinGecko - historical prices for a coin
```python
import defi.defi_tools as dftdf = dft.geckoHistorical('cardano')
print(df)
```
price market_caps total_volumes
date
2017-10-18 00:00:00 0.026845 6.960214e+08 2.351678e+06
2017-10-19 00:00:00 0.026830 6.956220e+08 2.815156e+06
2017-10-20 00:00:00 0.030300 7.855800e+08 8.883473e+06
2017-10-21 00:00:00 0.028588 7.412021e+08 5.308857e+06
2017-10-22 00:00:00 0.027796 7.206698e+08 2.901876e+06
... ... ... ...
2021-04-13 00:00:00 1.319790 4.223483e+10 5.005258e+09
2021-04-14 00:00:00 1.422447 4.565529e+10 5.693373e+09
2021-04-15 00:00:00 1.456105 4.676570e+10 8.920293e+09
2021-04-16 00:00:00 1.478071 4.730118e+10 5.151595e+09
2021-04-17 03:47:55 1.433489 4.595961e+10 5.152747e+09[1278 rows x 3 columns]
### CoinGecko - Farming Simulate
```python
import defi.defi_tools as dftpair = ['huobi-token','tether']
apr = 45dft.farmSimulate(pair, apr, start='2021-01-01')
```
Downloading huobi-token
Downloading tether
{'Token 1': 'huobi-token',
'Token 2': 'tether',
'start': '2021-01-01',
'fixed APR': '45%',
'Buy & Hold': '68.90%',
'Impermanent Loss': '-8.66%',
'Farming Rewards': '75.45%',
'Farming + Rewards - IL': '153.02%'}
### PancakeSwap - Get tokens prices in real time
```python
import defi.defi_tools as dftdf = dft.pcsTokens()
print(df)
```
```text
name symbol price price_BNB updated
0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82 PancakeSwap Token Cake 24.0636 0.0450 2021-04-17 04:29:08.332
0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c Wrapped BNB WBNB 534.2575 1.0000 2021-04-17 04:29:08.332
0x0F9E4D49f25de22c2202aF916B681FBB3790497B Perlin PRL 0.2091 0.0004 2021-04-17 04:29:08.332
0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56 BUSD Token BUSD 1.0000 0.0019 2021-04-17 04:29:08.332
0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c BTCB Token BTCB 62166.5517 116.3604 2021-04-17 04:29:08.332
... ... ... ... ... ...
0xB6802C06A441BA63624751C53C7c0708b75F06EC FinalMoon FINALMOON 0.0651 0.0001 2021-04-17 04:29:08.332
0x2cF0DA1EB4165d73156CE1E32450e4A0E1c1791b FairUnicorn FUni 0.0000 0.0000 2021-04-17 04:29:08.332
0x5CeD26185f82B07E1516d0B013c54CcBD252A4Ad Peaches PEACH 0.1130 0.0002 2021-04-17 04:29:08.332
0x2bA64EFB7A4Ec8983E22A49c81fa216AC33f383A Wrapped BGL WBGL 0.1000 0.0002 2021-04-17 04:29:08.332
0x019bE1796178516e060072004F267B59a49A0801 Pepper Finance PEPR 0.1819 0.0003 2021-04-17 04:29:08.332[854 rows x 5 columns]
```
### PancakeSwap - Get pairs, liquidity, and more
```python
import defi.defi_tools as dftpairs = dft.pcsPairs(as_df=False)
print(pairs)
``````json
{"updated_at": 1618645355351,
"data": {"0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82_0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c":
{"pair_address": "0xA527a61703D82139F8a06Bc30097cC9CAA2df5A6",
"base_name": "PancakeSwap Token",
"base_symbol": "Cake",
"base_address": "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82",
"quote_name": "Wrapped BNB",
"quote_symbol": "WBNB",
"quote_address": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
"price": "0.04503969270521829587",
"base_volume": "5473068.824002232134035221",
"quote_volume": "239997.1228321299572591638",
"liquidity": "1076144814.0632013827775993748053",
"liquidity_BNB": "2007551.221740467021401314"
},
}
```
### PancakeSwap - Get token info
```python
import defi.defi_tools as dft
dft.pcsTokenInfo('cake')
```
```json
{"name": "PancakeSwap Token",
"symbol": "Cake",
"price": "24.03353223898417117634582253598019",
"price_BNB": "0.04503467915973850237292527741402623"
}
```
### PancakeSwap - Get pair info
```python
import defi.defi_tools as dft
dft.pcsPairInfo('cake','bnb')
``````json
{"pair_address": "0xA527a61703D82139F8a06Bc30097cC9CAA2df5A6",
"base_name": "PancakeSwap Token",
"base_symbol": "Cake",
"base_address": "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82",
"quote_name": "Wrapped BNB",
"quote_symbol": "WBNB",
"quote_address": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
"price": "0.04503969270521829587",
"base_volume": "5473068.824002232134035221",
"quote_volume": "239997.1228321299572591638",
"liquidity": "1076144814.0632013827775993748053",
"liquidity_BNB": "2007551.221740467021401314"
}
```
### PancakeSwap - Simulate LP invest
```python
import defi.defi_tools as dft
dft.value_f, iloss = dft.iloss_simulate('cake','bnb', value=1000, base_pct_chg=50, quote_pct_chg=-25)
```
### About
- twitter user [@JohnGalt_is_www](https://twitter.com/JohnGalt_is_www)