Machine Precision
- Machine precision tests for solidity vetting
- To download notebook to this tutorial, see here
from uniswappy import *fee = UniV3Utils.FeeAmount.MEDIUMtick_spacing = UniV3Utils.TICK_SPACINGS[fee]lwr_tick = UniV3Utils.getMinTick(tick_spacing)upr_tick = UniV3Utils.getMaxTick(tick_spacing)user_nm = 'user_machine_check'eth_amount = UniV3Helper().dec2gwei(1000)dai_amount = UniV3Helper().dec2gwei(100000)1. Check abstract interface
Section titled “1. Check abstract interface”dai = ERC20("DAI", "0x111")eth = ERC20("ETH", "0x09")
exchg_data = UniswapExchangeData(tkn0 = eth, tkn1 = dai, symbol="LP", address="0x011", version = 'V3', tick_spacing = tick_spacing, precision = UniswapExchangeData.TYPE_GWEI, fee = fee)
factory = UniswapFactory("ETH pool factory", "0x2")lp = factory.deploy(exchg_data)
out_v3 = Join().apply(lp, user_nm, eth_amount, dai_amount, lwr_tick, upr_tick)lp.summary()Exchange ETH-DAI (LP)
Real Reserves: ETH = 999999999999999999457, DAI = 99999999999999999999457
Gross Liquidity: 10000000000000000000000
dai = ERC20("DAI", "0x111")eth = ERC20("ETH", "0x09")
exchg_data = UniswapExchangeData(tkn0 = eth, tkn1 = dai, symbol="LP", address="0x011", version = 'V3', tick_spacing = tick_spacing, precision = UniswapExchangeData.TYPE_GWEI, fee = fee)
factory = UniswapFactory("ETH pool factory", "0x2")lp = factory.deploy(exchg_data)
Join().apply(lp, user_nm, eth_amount, dai_amount, lwr_tick, upr_tick)lp.summary()
AddLiquidity().apply(lp, eth, user_nm, UniV3Helper().dec2gwei(10), lwr_tick, upr_tick)lp.summary()Exchange ETH-DAI (LP)
Real Reserves: ETH = 999999999999999999457, DAI = 99999999999999999999457
Gross Liquidity: 10000000000000000000000
Exchange ETH-DAI (LP)
Real Reserves: ETH = 1009999999999999999452, DAI = 100999999999999999999452
Gross Liquidity: 10100000000000000000000
dai = ERC20("DAI", "0x111")eth = ERC20("ETH", "0x09")
exchg_data = UniswapExchangeData(tkn0 = eth, tkn1 = dai, symbol="LP", address="0x011", version = 'V3', tick_spacing = tick_spacing, precision = UniswapExchangeData.TYPE_GWEI, fee = fee)
factory = UniswapFactory("ETH pool factory", "0x2")lp = factory.deploy(exchg_data)
Join().apply(lp, user_nm, eth_amount, dai_amount, lwr_tick, upr_tick)lp.summary()
RemoveLiquidity().apply(lp, eth, user_nm, UniV3Helper().dec2gwei(100), lwr_tick, upr_tick)lp.summary()Exchange ETH-DAI (LP)
Real Reserves: ETH = 999999999999999999457, DAI = 99999999999999999999457
Gross Liquidity: 10000000000000000000000
Exchange ETH-DAI (LP)
Real Reserves: ETH = 899999999999999999512, DAI = 89999999999999999999512
Gross Liquidity: 9000000000000000000000
dai = ERC20("DAI", "0x111")eth = ERC20("ETH", "0x09")
exchg_data = UniswapExchangeData(tkn0 = eth, tkn1 = dai, symbol="LP", address="0x011", version = 'V3', tick_spacing = tick_spacing, precision = UniswapExchangeData.TYPE_GWEI, fee = fee)
factory = UniswapFactory("ETH pool factory", "0x2")lp = factory.deploy(exchg_data)
Join().apply(lp, user_nm, eth_amount, dai_amount, lwr_tick, upr_tick)lp.summary()
Swap().apply(lp, dai, user_nm, UniV3Helper().dec2gwei(1000))lp.summary()Exchange ETH-DAI (LP)
Real Reserves: ETH = 999999999999999999457, DAI = 99999999999999999999457
Gross Liquidity: 10000000000000000000000
Exchange ETH-DAI (LP)
Real Reserves: ETH = 990128419656029386469, DAI = 100999999999999999999457
Gross Liquidity: 10000000000000000000000
dai = ERC20("DAI", "0x111")eth = ERC20("ETH", "0x09")
exchg_data = UniswapExchangeData(tkn0 = eth, tkn1 = dai, symbol="LP", address="0x011", version = 'V3', tick_spacing = tick_spacing, precision = UniswapExchangeData.TYPE_GWEI, fee = fee)
factory = UniswapFactory("ETH pool factory", "0x2")lp = factory.deploy(exchg_data)
Join().apply(lp, user_nm, eth_amount, dai_amount, lwr_tick, upr_tick)lp.summary()
WithdrawSwap().apply(lp, eth, user_nm, UniV3Helper().dec2gwei(10), lwr_tick, upr_tick)lp.summary()Exchange ETH-DAI (LP)
Real Reserves: ETH = 999999999999999999457, DAI = 99999999999999999999457
Gross Liquidity: 10000000000000000000000
Exchange ETH-DAI (LP)
Real Reserves: ETH = 989999999999999967775, DAI = 99999999999999999999457
Gross Liquidity: 9949799447405356417024
2. Check quotes
Section titled “2. Check quotes”dai = ERC20("DAI", "0x111")eth = ERC20("ETH", "0x09")
exchg_data = UniswapExchangeData(tkn0 = eth, tkn1 = dai, symbol="LP", address="0x011", version = 'V3', tick_spacing = tick_spacing, precision = UniswapExchangeData.TYPE_GWEI, fee = fee)
factory = UniswapFactory("ETH pool factory", "0x2")lp = factory.deploy(exchg_data)
Join().apply(lp, user_nm, eth_amount, dai_amount, lwr_tick, upr_tick)lp.summary()Exchange ETH-DAI (LP)
Real Reserves: ETH = 999999999999999999457, DAI = 99999999999999999999457
Gross Liquidity: 10000000000000000000000
p_eth = LPQuote().get_price(lp, eth)p_dai = LPQuote().get_price(lp, dai)print(f'The price of {eth.token_name} in {dai.token_name} is {p_eth}')print(f'The price of {dai.token_name} in {eth.token_name} is {p_dai}')The price of ETH in DAI is 99.99999999999999
The price of DAI in ETH is 0.01
amt_eth = LPQuote(include_fee = True).get_amount(lp, eth, UniV3Helper().dec2gwei(1), lwr_tick, upr_tick)amt_dai = LPQuote(include_fee = True).get_amount(lp, dai, UniV3Helper().dec2gwei(1), lwr_tick, upr_tick)print(f'{UniV3Helper().dec2gwei(1)} {eth.token_name} token is worth {amt_dai} {dai.token_name} after swap fees')print(f'{UniV3Helper().dec2gwei(1)} {dai.token_name} token is worth {amt_eth} {eth.token_name} after swap fees')1000000000000000000 ETH token is worth 9969900600093062.0 DAI after swap fees
1000000000000000000 DAI token is worth 9.960069810398763e+19 ETH after swap fees
amt_eth = LPQuote(False).get_amount_from_lp(lp, eth, UniV3Helper().dec2gwei(1), lwr_tick, upr_tick)amt_dai = LPQuote().get_amount_from_lp(lp, eth, UniV3Helper().dec2gwei(1), lwr_tick, upr_tick)print(f'{UniV3Helper().dec2gwei(1)} LP token is worth {amt_eth} {eth.token_name}')print(f'{UniV3Helper().dec2gwei(1)} LP token is worth {amt_dai} {dai.token_name}')1000000000000000000 LP token is worth 1.9969005990709152e+17 ETH
1000000000000000000 LP token is worth 1.9905136039497507e+19 DAI