1
+ require ( "dotenv" ) . config ( ) ;
2
+
1
3
import fetch from "isomorphic-fetch" ;
2
- import { Jupiter , TOKEN_LIST_URL } from "@jup-ag/core" ;
4
+ import { Jupiter , TOKEN_LIST_URL , SwapMode } from "@jup-ag/core" ;
3
5
import { PublicKey , Connection } from "@solana/web3.js" ;
4
6
import * as cron from "node-cron" ;
5
7
import cronstrue from "cronstrue" ;
6
- import { Token , MINT_ADDRESSES , USER_KEYPAIR , SOLANA_RPC_ENDPOINT } from "./constants" ;
8
+ import { Token , MINT_ADDRESSES , USER_KEYPAIR , SOLANA_RPC_ENDPOINT , WRAP_UNWRAP_SOL } from "./constants" ;
7
9
import { dcaconfig } from './dcaconfig'
10
+ import JSBI from 'jsbi' ;
8
11
9
12
const jupiterSwap = async ( {
10
13
jupiter,
@@ -24,16 +27,22 @@ const jupiterSwap = async ({
24
27
return null ;
25
28
}
26
29
27
- const inputAmountInSmallestUnits = inputToken
28
- ? Math . round ( inputAmount * 10 ** inputToken . decimals )
29
- : 0 ;
30
+ const inputAmountInSmallestUnits = inputToken
31
+ ? JSBI . BigInt ( Math . round ( inputAmount * 10 ** inputToken . decimals ) )
32
+ : JSBI . BigInt ( 0 ) ;
33
+
30
34
const routes = inputToken && outputToken
31
35
? await jupiter . computeRoutes ( {
32
36
inputMint : new PublicKey ( inputToken . address ) ,
33
37
outputMint : new PublicKey ( outputToken . address ) ,
34
- inputAmount : inputAmountInSmallestUnits , // raw input amount of tokens
35
- slippage,
38
+ amount : inputAmountInSmallestUnits ,
39
+ slippageBps : slippage ,
40
+ feeBps : 0 ,
36
41
forceFetch : true ,
42
+ onlyDirectRoutes : false ,
43
+ filterTopNResult : 2 ,
44
+ enforceSingleTx : false ,
45
+ swapMode : SwapMode . ExactIn ,
37
46
} )
38
47
: null ;
39
48
@@ -54,7 +63,7 @@ const jupiterSwap = async ({
54
63
) ;
55
64
process . stdout . write ( `${ inputToken . symbol } -> ` ) ;
56
65
process . stdout . write (
57
- `${ swapResult . outputAmount / ( 10 ** inputToken . decimals ) } `
66
+ `${ swapResult . outputAmount / ( 10 ** outputToken . decimals ) } `
58
67
) ;
59
68
process . stdout . write ( `${ outputToken . symbol } : ` ) ;
60
69
console . log ( `https://solscan.io/tx/${ swapResult . txid } ` ) ;
@@ -77,12 +86,38 @@ const main = async () => {
77
86
connection,
78
87
cluster : cluster ,
79
88
user : USER_KEYPAIR ,
89
+ restrictIntermediateTokens : true ,
90
+ shouldLoadSerumOpenOrders : false ,
91
+ wrapUnwrapSOL : WRAP_UNWRAP_SOL ,
92
+ ammsToExclude : {
93
+ Lifinity : false ,
94
+ GooseFX : true ,
95
+ 'Raydium CLMM' : false ,
96
+ Serum : true ,
97
+ Cropper : false ,
98
+ Cykura : false ,
99
+ Invariant : false ,
100
+ 'Marco Polo' : false ,
101
+ Openbook : false ,
102
+ Balansol : false ,
103
+ DeltaFi : false ,
104
+ Meteora : false ,
105
+ Crema : true ,
106
+ Step : false ,
107
+ Saber : false ,
108
+ Sencha : false ,
109
+ Raydium : false ,
110
+ Mercurial : false ,
111
+ Aldrin : false ,
112
+ Dradex : true ,
113
+ 'Lifinity V2' : false ,
114
+ }
80
115
} ) ;
81
116
82
117
// Fetch token list from Jupiter API
83
118
const tokens : Token [ ] = await ( await fetch ( TOKEN_LIST_URL [ cluster ] ) ) . json ( ) ;
84
119
85
- console . log ( "Warning! dcaconfig entries may be excluded due to :" ) ;
120
+ console . log ( "Warning! dcaconfig entries may be excluded if there are errors with the :" ) ;
86
121
console . log ( "- invalid cron expression" ) ;
87
122
console . log ( "- inputToken or outputToken does not exist in MINT_ADDRESSES" ) ;
88
123
console . log ( "Validating dcaconfig.ts ..." ) ;
0 commit comments