Skip to content

Commit 104fa71

Browse files
committed
add loop forever
1 parent c8b8951 commit 104fa71

File tree

2 files changed

+20
-51
lines changed

2 files changed

+20
-51
lines changed

src/constants/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ export const OUTPUT_MINT_ADDRESS =
3030
? "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM
3131
: "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"; // USDT
3232

33+
export const SWAP_INTERVAL_MS = 5000;
34+
3335
// Interface
3436
export interface Token {
3537
chainId: number; // 101,

src/index.ts

Lines changed: 18 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -7,41 +7,11 @@ import {
77
INPUT_MINT_ADDRESS,
88
OUTPUT_MINT_ADDRESS,
99
SOLANA_RPC_ENDPOINT,
10+
SWAP_INTERVAL_MS,
1011
Token,
1112
USER_KEYPAIR,
1213
} from "./constants";
1314

14-
const getPossiblePairsTokenInfo = ({
15-
tokens,
16-
routeMap,
17-
inputToken,
18-
}: {
19-
tokens: Token[];
20-
routeMap: Map<string, string[]>;
21-
inputToken?: Token;
22-
}) => {
23-
try {
24-
if (!inputToken) {
25-
return {};
26-
}
27-
28-
const possiblePairs = inputToken
29-
? routeMap.get(inputToken.address) || []
30-
: []; // return an array of token mints that can be swapped with SOL
31-
const possiblePairsTokenInfo: { [key: string]: Token | undefined } = {};
32-
possiblePairs.forEach((address) => {
33-
possiblePairsTokenInfo[address] = tokens.find((t) => {
34-
return t.address == address;
35-
});
36-
});
37-
// Perform your conditionals here to use other outputToken
38-
// const alternativeOutputToken = possiblePairsTokenInfo[USDT_MINT_ADDRESS]
39-
return possiblePairsTokenInfo;
40-
} catch (error) {
41-
throw error;
42-
}
43-
};
44-
4515
const getRoutes = async ({
4616
jupiter,
4717
inputToken,
@@ -125,6 +95,10 @@ const executeSwap = async ({
12595
}
12696
};
12797

98+
function delay(ms: number) {
99+
return new Promise(resolve => setTimeout(resolve, ms))
100+
}
101+
128102
const main = async () => {
129103
try {
130104
const connection = new Connection(SOLANA_RPC_ENDPOINT); // Setup Solana RPC connection
@@ -137,30 +111,23 @@ const main = async () => {
137111
user: USER_KEYPAIR, // or public key
138112
});
139113

140-
// Get routeMap, which maps each tokenMint and their respective tokenMints that are swappable
141-
const routeMap = jupiter.getRouteMap();
142-
143114
// If you know which input/output pair you want
144115
const inputToken = tokens.find((t) => t.address == INPUT_MINT_ADDRESS); // USDC Mint Info
145116
const outputToken = tokens.find((t) => t.address == OUTPUT_MINT_ADDRESS); // USDT Mint Info
146117

147-
// Alternatively, find all possible outputToken based on your inputToken
148-
const possiblePairsTokenInfo = await getPossiblePairsTokenInfo({
149-
tokens,
150-
routeMap,
151-
inputToken,
152-
});
153-
154-
const routes = await getRoutes({
155-
jupiter,
156-
inputToken,
157-
outputToken,
158-
inputAmount: .01, // 1 unit in UI
159-
slippage: 1, // 1% slippage
160-
});
161-
162-
// Routes are sorted based on outputAmount, so ideally the first route is the best.
163-
await executeSwap({ jupiter, route: routes!.routesInfos[0] });
118+
while (true) {
119+
/* code to wait on goes here (sync or async) */
120+
const routes = await getRoutes({
121+
jupiter,
122+
inputToken,
123+
outputToken,
124+
inputAmount: .01, // 1 unit in UI
125+
slippage: 1, // % slippage
126+
});
127+
// Routes are sorted based on outputAmount, so ideally the first route is the best.
128+
await executeSwap({ jupiter, route: routes!.routesInfos[0] });
129+
await delay(SWAP_INTERVAL_MS);
130+
}
164131
} catch (error) {
165132
console.log({ error });
166133
}

0 commit comments

Comments
 (0)