@@ -4,6 +4,7 @@ import { PublicKey, Connection } from "@solana/web3.js";
4
4
import * as cron from "node-cron" ;
5
5
import {
6
6
ENV ,
7
+ MINT_ADDRESSES ,
7
8
SOLANA_RPC_ENDPOINT ,
8
9
Token ,
9
10
USER_KEYPAIR ,
@@ -28,30 +29,20 @@ const jupiterSwap = async ({
28
29
return null ;
29
30
}
30
31
31
- console . log (
32
- `Getting routes for ${ inputAmount } ${ inputToken . symbol } -> ${ outputToken . symbol } ...`
33
- ) ;
34
- const inputAmountInSmallestUnits = inputToken
35
- ? Math . round ( inputAmount * 10 ** inputToken . decimals )
36
- : 0 ;
37
- const routes =
38
- inputToken && outputToken
39
- ? await jupiter . computeRoutes ( {
40
- inputMint : new PublicKey ( inputToken . address ) ,
41
- outputMint : new PublicKey ( outputToken . address ) ,
42
- inputAmount : inputAmountInSmallestUnits , // raw input amount of tokens
43
- slippage,
44
- forceFetch : true ,
45
- } )
46
- : null ;
32
+ const inputAmountInSmallestUnits = inputToken
33
+ ? Math . round ( inputAmount * 10 ** inputToken . decimals )
34
+ : 0 ;
35
+ const routes = inputToken && outputToken
36
+ ? await jupiter . computeRoutes ( {
37
+ inputMint : new PublicKey ( inputToken . address ) ,
38
+ outputMint : new PublicKey ( outputToken . address ) ,
39
+ inputAmount : inputAmountInSmallestUnits , // raw input amount of tokens
40
+ slippage,
41
+ forceFetch : true ,
42
+ } )
43
+ : null ;
47
44
48
45
if ( routes && routes . routesInfos ) {
49
- console . log ( "Possible number of routes:" , routes . routesInfos . length ) ;
50
- console . log (
51
- "Best quote: " ,
52
- routes . routesInfos [ 0 ] . outAmount / 10 ** outputToken . decimals ,
53
- `(${ outputToken . symbol } )`
54
- ) ;
55
46
// Prepare execute exchange
56
47
const { execute } = await jupiter . exchange ( {
57
48
routeInfo : routes ! . routesInfos [ 0 ] ,
@@ -61,15 +52,14 @@ const jupiterSwap = async ({
61
52
const swapResult : any = await execute ( ) ;
62
53
if ( swapResult . error ) {
63
54
console . log ( swapResult . error ) ;
64
- return null ;
65
55
} else {
66
- console . log ( `https://explorer.solana.com/tx/${ swapResult . txid } ` ) ;
67
56
console . log (
68
- `inputAmount=${ swapResult . inputAmount } outputAmount=${ swapResult . outputAmount } `
69
- ) ;
57
+ `${
58
+ swapResult . inputAmount / ( 10 ** inputToken . decimals ) } ${ inputToken . symbol } -> ${ swapResult . outputAmount / ( 10 ** inputToken . decimals ) } ${ outputToken . symbol } - https://solscan.io/tx/${ swapResult . txid } `
59
+ ) ;
70
60
}
71
61
} else {
72
- return null ;
62
+ console . log ( "Error: Jupiter couldn't route." ) ;
73
63
}
74
64
} catch ( error ) {
75
65
throw error ;
@@ -88,31 +78,37 @@ const main = async () => {
88
78
// Fetch token list from Jupiter API
89
79
const tokens : Token [ ] = await ( await fetch ( TOKEN_LIST_URL [ ENV ] ) ) . json ( ) ;
90
80
91
- const filteredJobs = dcaconfig . filter ( dcajob => {
92
- return cron . validate ( dcajob . cron ) ;
81
+ console . log ( "Validating dcaconfig. Jobs may not be included if the cron expression is invalid or chosen token strings do not exist in the MINT_ADDRESSES object." ) ;
82
+ const filteredJobs = dcaconfig . filter ( job => {
83
+ return ( cron . validate ( job . cron )
84
+ && job . inputToken in MINT_ADDRESSES
85
+ && job . outputToken in MINT_ADDRESSES
86
+ ) ;
93
87
} ) ;
88
+
89
+ console . log ( "Scheduling the following jobs: " ) ;
90
+ filteredJobs . map ( job => {
91
+ console . log ( `${ job . amount } ${ job . inputToken } -> ${ job . outputToken } . cron: ${ job . cron } ` ) ;
92
+ } ) ;
93
+
94
+ const scheduledJobs = filteredJobs . map ( job => {
95
+ const inputToken = tokens . find ( ( t ) =>
96
+ t . address == MINT_ADDRESSES [ job . inputToken ]
97
+ ) ;
98
+ const outputToken = tokens . find ( ( t ) =>
99
+ t . address == MINT_ADDRESSES [ job . outputToken ]
100
+ ) ;
94
101
95
- console . log ( "Valid jobs to be scheduled: " , filteredJobs . map ( job => {
96
- return job . name ;
97
- } ) ) ;
98
-
99
- const scheduledJobs = filteredJobs . map ( dcajob => {
100
- const inputToken = tokens . find ( ( t ) => t . address == dcajob . inputMint ) ;
101
- const outputToken = tokens . find ( ( t ) => t . address == dcajob . outputMint ) ;
102
-
103
- return cron . schedule ( dcajob . cron , async ( ) => {
104
- console . log ( 'SWAPPING @!!!!!' ) ;
105
- const routes = await jupiterSwap ( {
102
+ return cron . schedule ( job . cron , async ( ) => {
103
+ await jupiterSwap ( {
106
104
jupiter,
107
105
inputToken,
108
106
outputToken,
109
- inputAmount : dcajob . amount ,
110
- slippage : dcajob . slippage , // % slippage
107
+ inputAmount : job . amount ,
108
+ slippage : job . slippage , // % slippage
111
109
} ) ;
112
110
} ) ;
113
111
} ) ;
114
-
115
- console . log ( 'started!!!' ) ;
116
112
} catch ( error ) {
117
113
console . log ( { error } ) ;
118
114
}
0 commit comments