@@ -20,93 +20,101 @@ export const addLiquidity = async (
20
20
params : AddLiquidityParams ,
21
21
privateKey : string ,
22
22
) => {
23
- const { wallet, provider } = await setupWallet ( privateKey ) ;
24
- const assets = await getAllVerifiedFuelAssets ( ) ;
25
-
26
- const asset0 = assets . find ( ( asset ) => asset . symbol === params . asset0Symbol ) ;
27
- const asset1 = assets . find ( ( asset ) => asset . symbol === params . asset1Symbol ) ;
28
-
29
- if ( ! asset0 || ! asset1 ) {
30
- throw new Error (
31
- `Asset ${ params . asset0Symbol } or ${ params . asset1Symbol } not found` ,
23
+ try {
24
+ const { wallet, provider } = await setupWallet ( privateKey ) ;
25
+ const assets = await getAllVerifiedFuelAssets ( ) ;
26
+
27
+ const asset0 = assets . find ( ( asset ) => asset . symbol === params . asset0Symbol ) ;
28
+ const asset1 = assets . find ( ( asset ) => asset . symbol === params . asset1Symbol ) ;
29
+
30
+ if ( ! asset0 || ! asset1 ) {
31
+ throw new Error (
32
+ `Asset ${ params . asset0Symbol } or ${ params . asset1Symbol } not found` ,
33
+ ) ;
34
+ }
35
+
36
+ let isStable =
37
+ asset0 . symbol . includes ( 'USD' ) && asset1 . symbol . includes ( 'USD' ) ;
38
+ const asset0Id = asset0 . assetId ;
39
+ const asset1Id = asset1 . assetId ;
40
+
41
+ if ( ! asset0Id || ! asset1Id ) {
42
+ throw new Error ( 'Invalid asset IDs' ) ;
43
+ }
44
+
45
+ const asset0Decimals = asset0 . decimals ;
46
+ const asset1Decimals = asset1 . decimals ;
47
+
48
+ if (
49
+ typeof asset0Decimals !== 'number' ||
50
+ typeof asset1Decimals !== 'number'
51
+ ) {
52
+ throw new Error ( 'Invalid asset decimals' ) ;
53
+ }
54
+
55
+ const amount0InWei = bn . parseUnits ( params . amount0 , asset0Decimals ) ;
56
+
57
+ const poolId = buildPoolId ( asset0Id , asset1Id , isStable ) ;
58
+
59
+ const miraAmm = new MiraAmm ( wallet ) ;
60
+ const miraAmmReader = new ReadonlyMiraAmm ( provider ) ;
61
+ const deadline = await futureDeadline ( provider ) ;
62
+
63
+ // Calculate the required amount1 based on amount0
64
+ const result = await miraAmmReader . getAmountsOut (
65
+ { bits : asset0Id } ,
66
+ amount0InWei ,
67
+ [ poolId ] ,
32
68
) ;
33
- }
34
-
35
- let isStable = asset0 . symbol . includes ( 'USD' ) && asset1 . symbol . includes ( 'USD' ) ;
36
- const asset0Id = asset0 . assetId ;
37
- const asset1Id = asset1 . assetId ;
38
-
39
- if ( ! asset0Id || ! asset1Id ) {
40
- throw new Error ( 'Invalid asset IDs' ) ;
41
- }
42
-
43
- const asset0Decimals = asset0 . decimals ;
44
- const asset1Decimals = asset1 . decimals ;
45
-
46
- if (
47
- typeof asset0Decimals !== 'number' ||
48
- typeof asset1Decimals !== 'number'
49
- ) {
50
- throw new Error ( 'Invalid asset decimals' ) ;
51
- }
52
-
53
- const amount0InWei = bn . parseUnits ( params . amount0 , asset0Decimals ) ;
54
-
55
- const poolId = buildPoolId ( asset0Id , asset1Id , isStable ) ;
56
-
57
- const miraAmm = new MiraAmm ( wallet ) ;
58
- const miraAmmReader = new ReadonlyMiraAmm ( provider ) ;
59
- const deadline = await futureDeadline ( provider ) ;
60
69
61
- // Calculate the required amount1 based on amount0
62
- const result = await miraAmmReader . getAmountsOut (
63
- { bits : asset0Id } ,
64
- amount0InWei ,
65
- [ poolId ] ,
66
- ) ;
70
+ if ( ! result || result . length === 0 || ! result [ 0 ] || result [ 0 ] . length < 2 ) {
71
+ throw new Error ( 'Failed to calculate amount1' ) ;
72
+ }
73
+
74
+ let amount1InWei ;
75
+ if ( result [ 1 ] && result [ 1 ] [ 0 ] . bits === asset1Id ) {
76
+ amount1InWei = result [ 1 ] [ 1 ] ;
77
+ } else if ( result [ 0 ] [ 0 ] . bits === asset1Id ) {
78
+ amount1InWei = result [ 0 ] [ 1 ] ;
79
+ }
80
+
81
+ if ( ! amount1InWei ) {
82
+ throw new Error ( 'Failed to calculate amount1' ) ;
83
+ }
84
+
85
+ // Calculate minimum amounts with slippage
86
+ const minAmount0 = amount0InWei
87
+ . mul ( bn ( 100 - Math . floor ( ( params . slippage || DEFAULT_SLIPPAGE ) * 100 ) ) )
88
+ . div ( bn ( 100 ) ) ;
89
+ const minAmount1 = amount1InWei
90
+ . mul ( bn ( 100 - Math . floor ( ( params . slippage || DEFAULT_SLIPPAGE ) * 100 ) ) )
91
+ . div ( bn ( 100 ) ) ;
92
+
93
+ const req = await miraAmm . addLiquidity (
94
+ poolId ,
95
+ amount0InWei ,
96
+ amount1InWei ,
97
+ minAmount0 ,
98
+ minAmount1 ,
99
+ deadline ,
100
+ {
101
+ gasLimit : 1000000 ,
102
+ maxFee : 1000000 ,
103
+ } ,
104
+ ) ;
67
105
68
- if ( ! result || result . length === 0 || ! result [ 0 ] || result [ 0 ] . length < 2 ) {
69
- throw new Error ( 'Failed to calculate amount1' ) ;
70
- }
106
+ const tx = await wallet . sendTransaction ( req ) ;
71
107
72
- let amount1InWei ;
73
- if ( result [ 1 ] && result [ 1 ] [ 0 ] . bits === asset1Id ) {
74
- amount1InWei = result [ 1 ] [ 1 ] ;
75
- } else if ( result [ 0 ] [ 0 ] . bits === asset1Id ) {
76
- amount1InWei = result [ 0 ] [ 1 ] ;
77
- }
108
+ const { id, status } = await tx . waitForResult ( ) ;
78
109
79
- if ( ! amount1InWei ) {
80
- throw new Error ( 'Failed to calculate amount1' ) ;
110
+ return {
111
+ status,
112
+ id,
113
+ } ;
114
+ } catch ( error ) {
115
+ return JSON . stringify ( {
116
+ status : 'failure' ,
117
+ error : error instanceof Error ? error . message : 'Unknown error' ,
118
+ } ) ;
81
119
}
82
-
83
- // Calculate minimum amounts with slippage
84
- const minAmount0 = amount0InWei
85
- . mul ( bn ( 100 - Math . floor ( ( params . slippage || DEFAULT_SLIPPAGE ) * 100 ) ) )
86
- . div ( bn ( 100 ) ) ;
87
- const minAmount1 = amount1InWei
88
- . mul ( bn ( 100 - Math . floor ( ( params . slippage || DEFAULT_SLIPPAGE ) * 100 ) ) )
89
- . div ( bn ( 100 ) ) ;
90
-
91
- const req = await miraAmm . addLiquidity (
92
- poolId ,
93
- amount0InWei ,
94
- amount1InWei ,
95
- minAmount0 ,
96
- minAmount1 ,
97
- deadline ,
98
- {
99
- gasLimit : 1000000 ,
100
- maxFee : 1000000 ,
101
- } ,
102
- ) ;
103
-
104
- const tx = await wallet . sendTransaction ( req ) ;
105
-
106
- const { id, status } = await tx . waitForResult ( ) ;
107
-
108
- return {
109
- status,
110
- id,
111
- } ;
112
120
} ;
0 commit comments