forked from wizzybrown/paraswap-dex-lib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsmoothy.ts
99 lines (89 loc) · 2.24 KB
/
smoothy.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import { Interface } from '@ethersproject/abi';
import { Provider } from '@ethersproject/providers';
import { SwapSide } from '../constants';
import {
AdapterExchangeParam,
Address,
NumberAsString,
SimpleExchangeParam,
} from '../types';
import { IDexTxBuilder } from './idex';
import { SimpleExchange } from './simple-exchange';
import SmoothyABI from '../abi/Smoothy.json';
import Web3 from 'web3';
import { IDexHelper } from '../dex-helper';
type SmoothyData = {
exchange: string;
i: string;
j: string;
};
type SmoothyParam = [
bTokenIdxIn: NumberAsString,
bTokenIdxOut: NumberAsString,
bTokenInAmount: NumberAsString,
bTokenOutMin: NumberAsString,
];
enum SmoothyFunctions {
swap = 'swap',
}
export class Smoothy
extends SimpleExchange
implements IDexTxBuilder<SmoothyData, SmoothyParam>
{
static dexKeys = ['smoothy'];
exchangeRouterInterface: Interface;
minConversionRate = '1';
constructor(dexHelper: IDexHelper) {
super(dexHelper, 'smoothy');
this.exchangeRouterInterface = new Interface(SmoothyABI);
}
getAdapterParam(
srcToken: string,
destToken: string,
srcAmount: string,
destAmount: string,
data: SmoothyData,
side: SwapSide,
): AdapterExchangeParam {
if (side === SwapSide.BUY) throw new Error(`Buy not supported`);
const { i, j } = data;
const payload = this.abiCoder.encodeParameter(
{
ParentStruct: {
i: 'int128',
j: 'int128',
},
},
{ i, j },
);
return {
targetExchange: data.exchange,
payload,
networkFee: '0',
};
}
async getSimpleParam(
srcToken: string,
destToken: string,
srcAmount: string,
destAmount: string,
data: SmoothyData,
side: SwapSide,
): Promise<SimpleExchangeParam> {
if (side === SwapSide.BUY) throw new Error(`Buy not supported`);
const { exchange, i, j } = data;
const swapFunctionParams: SmoothyParam = [i, j, srcAmount, destAmount];
const swapData = this.exchangeRouterInterface.encodeFunctionData(
SmoothyFunctions.swap,
swapFunctionParams,
);
return this.buildSimpleParamWithoutWETHConversion(
srcToken,
srcAmount,
destToken,
destAmount,
swapData,
exchange,
);
}
}