Skip to content

Commit 1ad4cac

Browse files
ncomercilgalende
andauthored
Examples: Update slippage calculation examples (#27)
Co-authored-by: lgalende <lau@mimic.fi>
1 parent cc694b7 commit 1ad4cac

5 files changed

Lines changed: 8 additions & 16 deletions

File tree

examples/09-subgraph-query/src/task.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Address, BigInt, environment, ERC20Token, Swap } from '@mimicprotocol/lib-ts'
1+
import { Address, BigInt, environment, ERC20Token, Swap, TokenAmount } from '@mimicprotocol/lib-ts'
22
import { JSON } from 'json-as/assembly'
33

44
import { ERC20 } from './types/ERC20'
@@ -18,11 +18,9 @@ class UniswapPoolsData {
1818
}
1919

2020
const PRICE_PRECISION: u8 = 40
21-
const BPS_DENOMINATOR = BigInt.fromI32(10_000)
2221

2322
export 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

4341
function getTokenPrice(chainId: i32, subgraphId: string, tokenIn: Address, tokenOut: Address): BigInt {

examples/10-rebalancing-tokens/src/task.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,14 @@ export default function main(): void {
9191
const tokenInAmount = movedUSD.toTokenAmount(tokensMetadata[surplusTokenIndex]).unwrap()
9292
const expectedTokenOutAmount = movedUSD.toTokenAmount(tokensMetadata[deficitTokenIndex]).unwrap()
9393

94-
const slippageFactor = BPS_DENOMINATOR.minus(BigInt.fromI32(inputs.slippageBps as i32))
95-
const minAmountOut = expectedTokenOutAmount.amount.times(slippageFactor).div(BPS_DENOMINATOR)
94+
const minAmountOut = expectedTokenOutAmount.applySlippageBps(inputs.slippageBps as i32)
9695

9796
Swap.create(
9897
inputs.chainId,
9998
tokensMetadata[surplusTokenIndex],
10099
tokenInAmount.amount,
101100
tokensMetadata[deficitTokenIndex],
102-
minAmountOut
101+
minAmountOut.amount
103102
).send()
104103

105104
surpluses[surplusIndex].amountUSD = surpluses[surplusIndex].amountUSD.minus(movedUSD)

examples/11-automated-refunds/manifest.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ description: Refunds clients based on past orders
44
inputs:
55
- chainId: uint32
66
- token: string
7-
- amount: string # Amount in wei (as string)
7+
- amount: string # e.g., '1.5' = 1.5 of the given token
88
- recipient: address
99
- maxFee: string # e.g., '0.01' = 0.01 of the given token

examples/14-fee-collection/manifest.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,5 @@ name: Collect Task
33
description: Swaps all user tokens for USDC and sends the USDC to a recipient
44
inputs:
55
- chainId: int32
6-
- tokensCsv: string
76
- slippageBps: uint16 # e.g., 50 = 0.50%
87
- recipient: address

examples/14-fee-collection/src/task.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {
22
Arbitrum,
33
Base,
4-
BigInt,
54
ChainId,
65
environment,
76
ListType,
@@ -14,8 +13,6 @@ import {
1413

1514
import { inputs } from './types'
1615

17-
const BPS_DENOMINATOR = BigInt.fromI32(10_000)
18-
1916
export default function main(): void {
2017
const chainId = inputs.chainId
2118
const context = environment.getContext()
@@ -28,12 +25,11 @@ export default function main(): void {
2825
}
2926

3027
const USDC = getUsdc(chainId)
31-
const slippageFactor = BPS_DENOMINATOR.minus(BigInt.fromI32(inputs.slippageBps as i32))
3228

3329
for (let i = 0; i < amountsIn.length; i++) {
3430
const amountIn = amountsIn[i]
3531
const amountOut = amountIn.toTokenAmount(USDC).unwrap()
36-
const minAmountOut = amountOut.times(slippageFactor).div(BPS_DENOMINATOR)
32+
const minAmountOut = amountOut.applySlippageBps(inputs.slippageBps as i32)
3733

3834
// Note that the recipient will receive the USDC
3935
SwapBuilder.forChain(chainId)

0 commit comments

Comments
 (0)