Abstract Interfaceο
π Join: joins X and Y amounts to pool
π Swap: swaps X for Y (and vice verse) via out-given-in or in-given-out
π AddLiquidity: adds liquidity using token or share amounts
π RemoveLiquidity: removes liquidity using token or share amounts
To download notebook to this tutorial, see here
[2]:
from defipy import *
[3]:
user_nm = 'user_test'
amt_dai = 10000000
denorm_wt_dai = 10
amt_eth = 67738.6361731024
denorm_wt_eth = 40
init_pool_shares = 100
dai = ERC20("DAI", "0x111")
dai.deposit(None, amt_dai)
weth = ERC20("WETH", "0x09")
weth.deposit(None, amt_eth)
bgrp = BalancerVault()
bgrp.add_token(dai, denorm_wt_dai)
bgrp.add_token(weth, denorm_wt_eth)
π Joinο
Class: π
defipy.process.JoinPurpose: Simplifies initial liquidity addition to Balancer pools.
Methods:
apply(pool, user: str, amount_shares: float)Parameters:
pool: Pool instance (e.g., created via Primitive Interface).user: User address.amount_shares: Amount of initial pool shares.
Output: Liquidity added to the pool.
[4]:
bfactory = BalancerFactory("WETH pool factory", "0x2")
exchg_data = BalancerExchangeData(vault = bgrp, symbol="LP", address="0x011")
lp = bfactory.deploy(exchg_data)
Join().apply(lp, user_nm, init_pool_shares)
lp.summary()
Balancer Exchange: DAI-WETH (LP)
Reserves: DAI = 10000000, WETH = 67738.6361731024
Weights: DAI = 0.2, WETH = 0.8
Pool Shares: 100
π Swap (out-given-in)ο
Class: π
defipy.process.SwapPurpose: Facilitates token swaps on Balancer pools.
Methods:
apply(pool, token_in: ERC20, token_out: ERC20, user: str, amount_tkn_in: float)Parameters:
pool: Pool instance to perform the swap on.token_in: ERC20 token to swap in.token_out: ERC20 token to swap out.user: User address (string) executing the swap.amount_tkn_in: Amount oftoken_into swap.
Output: Executes the swap from
token_intotoken_outfor the user
[5]:
amt_tkn_in = 10000
tkn_in = dai
tkn_out = weth
res = Swap(Proc.SWAPOUT).apply(lp, tkn_in, tkn_out, user_nm, amt_tkn_in)
lp.summary()
print(f"{amt_tkn_in} {tkn_in.token_name} was swapped into {res['tkn_out_amt']} {tkn_out.token_name}")
Balancer Exchange: DAI-WETH (LP)
Reserves: DAI = 10010000, WETH = 67721.75437414162
Weights: DAI = 0.2, WETH = 0.8
Pool Shares: 100
10000 DAI was swapped into 16.881798960778035 WETH
π Swap (in-given-out)ο
Class: π
defipy.process.SwapPurpose: Facilitates token swaps on Balancer pools.
Methods:
apply(pool, token_in: ERC20, token_out: ERC20, user: str, amount_tkn_in: float)Parameters:
pool: Pool instance to perform the swap on.token_in: ERC20 token to swap in.token_out: ERC20 token to swap out.user: User address (string) executing the swap.amount_tkn_out: Amount oftoken_outto swap.
Output: Executes the swap from
token_outtotoken_infor the user
[6]:
amt_tkn_out = 20
tkn_out = weth
tkn_in = dai
res = Swap(Proc.SWAPIN).apply(lp, tkn_in, tkn_out, user_nm, amt_tkn_out)
lp.summary()
print(f"{amt_tkn_out} {tkn_out.token_name} was swapped into {res['tkn_in_amt']} {tkn_in.token_name}")
Balancer Exchange: DAI-WETH (LP)
Reserves: DAI = 9998136.750149786, WETH = 67741.75437414162
Weights: DAI = 0.2, WETH = 0.8
Pool Shares: 100
20 WETH was swapped into 11863.249850213939 DAI
π AddLiquidity (based on token amounts)ο
Class: π
defipy.process.AddLiquidityPurpose: Adds liquidity to existing Balancer pools, handling token amounts and liquidity tokens minting.
Methods:
apply(pool, token_in: ERC20, user: str, amount_in: float)Parameters:
pool: Pool instance to perform the swap on.token_in: ERC20 token to swap from.user: User address (string) providing liquidity.amount_in: Amount oftoken_into swap.
Output: Adds the specified token amounts to the pool and mints liquidity tokens to the user.
[7]:
tkn_in = weth
amt_tkn_in = 25
res = AddLiquidity(Proc.ADDTKN).apply(lp, tkn_in, user_nm, amt_tkn_in)
lp.summary()
print(f"{amt_tkn_in} {tkn_in.token_name} was added resulting in anadditional {res['shares_in_amt']} LP shares")
Balancer Exchange: DAI-WETH (LP)
Reserves: DAI = 9998136.750149786, WETH = 67766.75437414162
Weights: DAI = 0.2, WETH = 0.8
Pool Shares: 100.0295080381873
25 WETH was added resulting in anadditional 0.029508038187306896 LP shares