def is_uniswap(address): try: pair = interface.UniswapPair(address) assert pair.factory() == UNISWAP_FACTORY print(f'{address} is a uniswap pool') except (AssertionError, ValueError): return False return True
def TOKEN_PRICES(): SUSHI_USDC_ETH = interface.UniswapPair( "0x905dfcd5649217c42684f23958568e533c711aa3") SUSHI_USDT_ETH = interface.UniswapPair( "0xcb0e5bfa72bbb4d16ab5aa0c60601c438f04b4ad") SUSHI_MIM_ETH = interface.UniswapPair( "0xb6dd51d5425861c808fd60827ab6cfbffe604959") return { "Sushi-Arbitrum": (SUSHISWAP_ROUTER, [ ("ETH", ETH), ("BTC", BTC), ("MIM", MIM), ("USDC_ETH", SUSHI_USDC_ETH), ("USDT_ETH", SUSHI_USDT_ETH), ("MIM_ETH", SUSHI_MIM_ETH), ]), }
def TOKEN_PRICES(): HUSD_USDT = interface.UniswapPair( "0xdff86b408284dff30a7cad7688fedb465734501c") return { "MDex": (MDEX_ROUTER, [ ("HUSD_USDT", HUSD_USDT), ]) }
def uniswap_lp_price(address): """ Get Uniswap LP token price. """ pair = interface.UniswapPair(address) router = FACTORY_TO_ROUTER[pair.factory()] tokens = [interface.ERC20(token) for token in [pair.token0(), pair.token1()]] scales = [10 ** token.decimals() for token in tokens] prices = [price_router(token, router=router) for token in tokens] supply = pair.totalSupply() / 1e18 return sum(reserve / scale * price for reserve, scale, price in zip(pair.getReserves(), scales, prices)) / supply
def price_direct(token_in, token_out): """ Calculate a price based on Uniswap Pair reserves. Only supports direct pairs. """ pair = interface.UniswapPair(factory.getPair(token_in, token_out)) reserves = dict(zip([pair.token0(), pair.token1()], pair.getReserves())) reserves_in = reserves[token_in] / 10 ** interface.ERC20(token_in).decimals() reserves_out = reserves[token_out] / 10 ** interface.ERC20(token_out).decimals() return reserves_out / reserves_in
def fetch_farm_info(stacking_contract, router_address): reward_token = interface.IERC20(stacking_contract.rewardsToken()) reward_token_price = priceOf(reward_token, router_address) reward_per_day = stacking_contract.rewardRate( ) * ONE_DAY / 10**reward_token.decimals() stake_token = interface.UniswapPair(stacking_contract.stakingToken()) stake_token_price = priceOfUniPair(stake_token, router_address) tvl = stake_token_price * stake_token.balanceOf( stacking_contract) / 10**stake_token.decimals() apr = reward_per_day * 365 * reward_token_price / tvl return (tvl, apr)
def homoraV2PositionSize(pos_id: int, bank_address: str, router_address: str) -> float: bank = interface.HomoraBank(bank_address) (_owner, coll_token, coll_id, coll_size) = bank.getPositionInfo(pos_id) coll = interface.WMasterChef(coll_token) underlying_lp_token = interface.UniswapPair( coll.getUnderlyingToken(coll_id)) position_size = priceOfUniPair( underlying_lp_token, router_address) * coll_size / 10**underlying_lp_token.decimals() debts = bank.getPositionDebts(pos_id) total_debt = 0 for (debt_token, debt_size) in zip(*debts): debt_token = interface.ERC20(debt_token) total_debt += priceOf( debt_token, router_address) * debt_size / 10**debt_token.decimals() return position_size - total_debt
def getPair(factory, token0, token1): return interface.UniswapPair(factory.getPair(token0, token1))
def subgraph_for(pair_address): pair = interface.UniswapPair(pair_address) factory = pair.factory() return SUBGRAPHS_FROM_FACTORY.get(str(factory).lower(), None)
ETH = interface.IERC20("0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2") BTC = interface.IERC20("0x2260fac5e5542a773aa44fbcfedf7c193bc2c599") UNI = interface.IERC20("0x1f9840a85d5af5bf1d1762f925bdaddc4201f984") SUSHI = interface.IERC20("0x6b3595068778dd592e39a122f4f5a5cf09c90fe2") ONE_INCH = interface.IERC20("0x111111111117dc0aa78b770fa6a738034120c302") YFI = interface.IERC20("0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e") DAI = interface.IERC20("0x6b175474e89094c44da98b954eedeac495271d0f") USDC = interface.IERC20("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48") USDT = interface.IERC20("0xdac17f958d2ee523a2206206994597c13d831ec7") BUSD = interface.IERC20("0x4fabb145d64652a948d72533023f6e7a623c7c53") UWL = interface.IERC20("0xdbdd6f355a37b94e6c7d32fef548e98a280b8df5") COMP = interface.IERC20("0xc00e94cb662c3520282e6f5717214004a7f26888") LRC = interface.IERC20("0xbbbbca6a901c926f240b89eacb641d8aec7aeafd") AAVE = interface.IERC20("0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9") UNI_USDT_ETH = interface.UniswapPair( "0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852") UNI_DAI_ETH = interface.UniswapPair( "0xa478c2975ab1ea89e8196811f51a7b7ade33eb11") UNI_ALPHA_ETH = interface.UniswapPair( "0x411a9b902f364817a0f9c4261ce28b5566a42875") SUSHI_ALPHA_ibETHv2 = interface.UniswapPair( "0xf79a07cd3488bbafb86df1bad09a6168d935c017") SUSHI_ALCX = interface.IERC20("0xdbdb4d16eda451d0503b854cf79d55697f90c8df") TOKEN_PRICES = { "Uniswap": (UNISWAP_ROUTER, [ ("ETH", ETH), ("BTC", BTC), ("UNI", UNI), ("SUSHI", SUSHI),
from brownie import interface VIKING_MASTER_CHEF = interface.VikingMasterChef( "0xEf6e807fD2c0Ef5883A03Ed1b962333E8C9b725f") OATSWAP_MASTER_CHEF = interface.OatMasterChef( "0x96aA7C001576a7C581Ef01655f34B674d4D17de1") ICECREAM_MASTER_CHEF = interface.IceCreamMasterChef( "0xC26316b19117495E89c187339Ddb6E86f1e39f0c") GOOSE_MASTER_CHEF = interface.GooseMasterChef( "0xe70E9185F5ea7Ba3C5d63705784D8563017f2E57") SLIME_MASTER_CHEF = interface.SlimeMasterChef( "0x4B0073A79f2b46Ff5a62fA1458AAc86Ed918C80C") PANCAKE_USDT_BUSD = interface.UniswapPair( "0xc15fa3e22c912a276550f3e5fe3b0deb87b55acd") PANCAKE_DAI_BUSD = interface.UniswapPair( "0x3ab77e40340ab084c3e23be8e5a6f7afed9d41dc") PANCAKE_USDC_BUSD = interface.UniswapPair( "0x680dd100e4b394bda26a59dd5c119a391e747d18") PANCAKE_VAI_BUSD = interface.UniswapPair( "0xff17ff314925dff772b71abdff2782bc913b3575") PANCAKE_UST_BUSD = interface.UniswapPair( "0xd1f12370b2ba1c79838337648f820a87edf5e1e6") PANCAKE_BNB_BUSD = interface.UniswapPair( "0x1b96b92314c44b159149f7e0303511fb2fc4774f") PANCAKE_BNB_BTC = interface.UniswapPair( "0x7561eee90e24f3b348e1087a005f78b4c8453524") PANCAKE_BNB_ETH = interface.UniswapPair( "0x70d8929d04b60af4fb9b58713ebcf18765ade422") PANCAKE_OAT_BUSD = interface.UniswapPair(
def is_uniswap_pool(address): try: return interface.UniswapPair(address).factory() in FACTORY_TO_ROUTER except (ValueError, OverflowError): pass return False
QUICKSWAP_ROUTER = "0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff" USDC_WETH_STAKING = interface.StakingRewards("0x9732E1cC876d8D0B61389385fC1FC756920404fd") DAI_WETH_STAKING = interface.StakingRewards("0xDFc1b89b6184DfCC7371E3dd898377ECBFEf7058") USDC_maUSDC_STAKING = interface.StakingRewards("0x68910d18332fFDc1D11caEA4fE93C94Ccd540732") ETH_wBTC_STAKING = interface.StakingRewards("0x74aF83811468d7a51452128727AB14507B7DC57E") maUSDC_maTUSD_STAKING = interface.StakingRewards("0x5AE1e3Af79270e600D0e86609bB56B6c6CE23Ee8") maUSDC_maUSDT_STAKING = interface.StakingRewards("0x66aCCDc838F563D36D0695539c5A01E651eAAEC9") maUSDC_maDAI_STAKING = interface.StakingRewards("0x0A8E11C2C9B89285e810A206D391CE480dbA7562") MATIC_ETH = interface.IERC20("0x7ceb23fd6bc0add59e62ac25578270cff1b9f619") MATIC_BTC = interface.IERC20("0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6") MATIC_QUICK = interface.IERC20("0x831753dd7087cac61ab5644b308642cc1c33dc13") MATIC_MATIC = interface.IERC20("0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270") QUICK_ETH_USDC = interface.UniswapPair("0x853ee4b2a13f8a742d64c8f088be7ba2131f670d") QUICK_ETH_DAI = interface.UniswapPair("0x4a35582a710e1f4b2030a3f826da20bfb6703c09") TOKEN_PRICES = { "Quickswap": ( QUICKSWAP_ROUTER, [ ("ETH", MATIC_ETH), ("BTC", MATIC_BTC), ("QUICK", MATIC_QUICK), ("MATIC", MATIC_MATIC), ("ETH_USDC", QUICK_ETH_USDC), ("ETH_DAI", QUICK_ETH_DAI), ] ) }
from functools import lru_cache from brownie import interface PANCAKEV2_ETH_USDC = interface.UniswapPair( "0xEa26B78255Df2bBC31C1eBf60010D78670185bD0") PANCAKEV2_ETH_BTCB = interface.UniswapPair( "0xD171B26E4484402de70e3Ea256bE5A2630d7e88D") PANCAKEV2_BTCB_BUSD = interface.UniswapPair( "0xf45cd219aef8618a92baa7ad848364a158a24f33") PANCAKESWAPV2_ROUTER = "0x10ED43C718714eb63d5aA57B78B54704E256024E" BSC_DAI = interface.IERC20("0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3") BSC_BUSD = interface.IERC20("0xe9e7cea3dedca5984780bafc599bd69add087d56") BSC_USDT = interface.IERC20("0x55d398326f99059ff775485246999027b3197955") BSC_USDC = interface.IERC20("0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d") BSC_VAI = interface.IERC20("0x4bd17003473389a42daf6a0a729f6fdb328bbbd7") BSC_ETH = interface.IERC20("0x2170ed0880ac9a755fd29b2688956bd959f933f8") BSC_BTC = interface.IERC20("0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c") BSC_BNB = interface.IERC20("0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c") @lru_cache def TOKEN_PRICES(): return { "PancakeSwapV2": (PANCAKESWAPV2_ROUTER, [ ("ETH", BSC_ETH), ("BTC", BSC_BTC), ("BNB", BSC_BNB), ("ETH_USDC", PANCAKEV2_ETH_USDC), ("ETH_BTCB", PANCAKEV2_ETH_BTCB),
def TOKEN_PRICES(): ONE_INCH = interface.IERC20("0x111111111117dc0aa78b770fa6a738034120c302") DAI = interface.IERC20("0x6b175474e89094c44da98b954eedeac495271d0f") BUSD = interface.IERC20("0x4fabb145d64652a948d72533023f6e7a623c7c53") UWL = interface.IERC20("0xdbdd6f355a37b94e6c7d32fef548e98a280b8df5") COMP = interface.IERC20("0xc00e94cb662c3520282e6f5717214004a7f26888") LRC = interface.IERC20("0xbbbbca6a901c926f240b89eacb641d8aec7aeafd") LQTY = interface.IERC20("0x6dea81c8171d0ba574754ef6f8b412f2ed88c54d") LUSD = interface.IERC20("0x5f98805a4e8be255a32880fdec7f6728c6568ba0") DOG = interface.IERC20("0xbaac2b4491727d78d2b78815144570b9f2fe8899") UNI_FRAX_ETH = interface.UniswapPair( "0xFD0A40Bc83C5faE4203DEc7e5929B446b07d1C76") UNI_LUSD_ETH = interface.UniswapPair( "0xf20ef17b889b437c151eb5ba15a47bfc62bff469") UNI_USDT_ETH = interface.UniswapPair( "0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852") UNI_USDC_ETH = interface.UniswapPair( "0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc") SUSHI_ALCX_ETH = interface.UniswapPair( "0xc3f279090a47e80990fe3a9c30d24cb117ef91a8") SUSHI_bDPI_ETH = interface.UniswapPair( "0x8d782C5806607E9AAFB2AC38c1DA3838Edf8BD03") SUSHI_USDC_ETH = interface.UniswapPair( "0x397ff1542f962076d0bfe58ea045ffa2d347aca0") SUSHI_USDT_ETH = interface.UniswapPair( "0x06da0fd433c1a5d7a4faa01111c044910a184553") SUSHI_ALCX = interface.IERC20("0xdbdb4d16eda451d0503b854cf79d55697f90c8df") SUSHI_ANY = interface.IERC20("0xf99d58e463a2e07e5692127302c20a191861b4d6") CRV_TRICRYPTO = interface.CurveLPToken( "0xca3d75ac011bf5ad07a98d02f18225f9bd9a6bdf") CRV_TRICRYPTO2 = interface.CurveLPToken( "0xc4AD29ba4B3c580e6D59105FFf484999997675Ff") CRV_MIM = interface.CurvePool("0x5a6a4d54456819380173272a5e8e9b9904bdf41b") return { "Uniswap": (UNISWAP_ROUTER, [ ("ETH", ETH), ("BTC", BTC), ("UNI", UNI), ("SUSHI", SUSHI), ("1INCH", ONE_INCH), ("YFI", YFI), ("DAI", DAI), ("USDC", USDC), ("USDT", USDT), ("BUSD", BUSD), ("LUSD", LUSD), ("UWL", UWL), ("COMP", COMP), ("LRC", LRC), ("AAVE", AAVE), ("LQTY", LQTY), ("FRAX_ETH", UNI_FRAX_ETH), ("LUSD_ETH", UNI_LUSD_ETH), ("USDT_ETH", UNI_USDT_ETH), ("USDC_ETH", UNI_USDC_ETH), ("crvTricrypto", CRV_TRICRYPTO), ("crvTricrypto2", CRV_TRICRYPTO2), ("crvMIM", CRV_MIM), ]), "SushiSwap": (SUSHISWAP_ROUTER, [ ("ALCX", SUSHI_ALCX), ("ANY", SUSHI_ANY), ("DOG", DOG), ("ALCX_ETH", SUSHI_ALCX_ETH), ("bDPI_ETH", SUSHI_bDPI_ETH), ("USDC_ETH", SUSHI_USDC_ETH), ("USDT_ETH", SUSHI_USDT_ETH), ]), }