gauss314
defi
Python

Tools for use in DeFi. Impermanent Loss calculations, staking and farming strategies, coingecko and pancakeswap API queries, liquidity pools and more

Last updated Jul 3, 2026
607
Stars
148
Forks
15
Issues
0
Stars/day
Attention Score
78
Language breakdown
Python 100.0%
Files click to expand
README


DeFi open source tools

Downloads License Twitter Update Update


Get Started

General Tools

CoinGecko API

PancakeSwap API



Get started


Instalation

pip install defi


Impermanent Loss

import defi.defi_tools as dft

Impermanent loss for stableCoin & -20% return token

dft.iloss(0.8)
-0.62%
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

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, varA=0, varB=150, rwpoolA=0.01, rwpoolB=0.05, rwpoolAB=0.2, fees_AB=0.01)
{
 "buy_hold": "75.00%",
 "stake": "75.60%",
 "farm": "71.96%",
 "Best": "Stake"
}


DeFi protocols

import defi.defi_tools as dft

metadata, df = dft.getProtocol('Uniswap') metadata

{
 "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

import defi.defi_tools as dft
import matplotlib.pyplot as plt

df = 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

import defi.defi_tools as dft
import pandas as pd

exchanges = ['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 = exchanges

df.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

import defi.defi_tools as dft

ids = dft.getGeckoIDs() ids[:10]

 ['bitcoin',  'ethereum',  'binancecoin',  'tether',  'solana',  'cardano',  'ripple',  'polkadot',  'shiba-inu',  'dogecoin'] 

CoinGecko - Get price for coins at diferent currencies

import defi.defi_tools as dft

dft.geckoPrice("bitcoin,ethereum", "usd,eur,brl")

{"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

import defi.defi_tools as dft

df = dft.geckoMarkets("ethereum") print(df.info())

returns top 100 ethereum quotes by volume

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: datetime64ns, UTC, float64(5), object(3) memory usage: 7.8+ KB


CoinGecko - historical prices for a coin

import defi.defi_tools as dft

df = dft.geckoHistorical('cardano') print(df)

                         price   marketcaps  totalvolumes 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

import defi.defi_tools as dft

pair = ['huobi-token','tether'] apr = 45

dft.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

import defi.defi_tools as dft

df = dft.pcsTokens() print(df)

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

import defi.defi_tools as dft

pairs = dft.pcsPairs(as_df=False) print(pairs)

{"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

import defi.defi_tools as dft
dft.pcsTokenInfo('cake')
{"name": "PancakeSwap Token",
 "symbol": "Cake",
 "price": "24.03353223898417117634582253598019",
 "price_BNB": "0.04503467915973850237292527741402623"
}


PancakeSwap - Get pair info

import defi.defi_tools as dft
dft.pcsPairInfo('cake','bnb')
{"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

import defi.defi_tools as dft
dft.valuef, iloss = dft.ilosssimulate('cake','bnb', value=1000, basepctchg=50, quotepctchg=-25)


About

© 2026 GitRepoTrend · gauss314/defi · Updated daily from GitHub