1- import { Address , BigInt , environment , ERC20Token , Swap } from '@mimicprotocol/lib-ts'
1+ import { Address , BigInt , environment , ERC20Token , Swap , TokenAmount } from '@mimicprotocol/lib-ts'
22import { JSON } from 'json-as/assembly'
33
44import { ERC20 } from './types/ERC20'
@@ -18,11 +18,9 @@ class UniswapPoolsData {
1818}
1919
2020const PRICE_PRECISION : u8 = 40
21- const BPS_DENOMINATOR = BigInt . fromI32 ( 10_000 )
2221
2322export default function main ( ) : void {
2423 if ( inputs . tokenIn == inputs . tokenOut ) throw new Error ( 'Token in and out must be different' )
25- if ( BigInt . fromI32 ( inputs . slippageBps as i32 ) > BPS_DENOMINATOR ) throw new Error ( 'Slippage must be between 0 and 100' )
2624
2725 const me = environment . getContext ( ) . user
2826 const amountIn = new ERC20 ( inputs . tokenIn , inputs . chainId ) . balanceOf ( me ) . unwrap ( )
@@ -35,9 +33,9 @@ export default function main(): void {
3533 . times ( price )
3634 . upscale ( tokenOut . decimals )
3735 . downscale ( tokenIn . decimals + PRICE_PRECISION )
38- const slippageFactor = BPS_DENOMINATOR . minus ( BigInt . fromI32 ( inputs . slippageBps as i32 ) )
39- const minAmountOut = expectedOut . times ( slippageFactor ) . div ( BPS_DENOMINATOR )
40- Swap . create ( inputs . chainId , tokenIn , amountIn , tokenOut , minAmountOut ) . send ( )
36+ const expectedOutTokenAmount = TokenAmount . fromBigInt ( tokenOut , expectedOut )
37+ const minAmountOut = expectedOutTokenAmount . applySlippageBps ( inputs . slippageBps as i32 )
38+ Swap . create ( inputs . chainId , tokenIn , amountIn , tokenOut , minAmountOut . amount ) . send ( )
4139}
4240
4341function getTokenPrice ( chainId : i32 , subgraphId : string , tokenIn : Address , tokenOut : Address ) : BigInt {
0 commit comments