outsmart 2.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +568 -0
- package/dist/cli.d.ts +44 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1251 -0
- package/dist/cli.js.map +1 -0
- package/dist/dex/byreal-clmm.d.ts +16 -0
- package/dist/dex/byreal-clmm.d.ts.map +1 -0
- package/dist/dex/byreal-clmm.js +39 -0
- package/dist/dex/byreal-clmm.js.map +1 -0
- package/dist/dex/dflow.d.ts +27 -0
- package/dist/dex/dflow.d.ts.map +1 -0
- package/dist/dex/dflow.js +200 -0
- package/dist/dex/dflow.js.map +1 -0
- package/dist/dex/fusion-amm.d.ts +44 -0
- package/dist/dex/fusion-amm.d.ts.map +1 -0
- package/dist/dex/fusion-amm.js +546 -0
- package/dist/dex/fusion-amm.js.map +1 -0
- package/dist/dex/futarchy-amm.d.ts +32 -0
- package/dist/dex/futarchy-amm.d.ts.map +1 -0
- package/dist/dex/futarchy-amm.js +443 -0
- package/dist/dex/futarchy-amm.js.map +1 -0
- package/dist/dex/futarchy-idl.d.ts +2568 -0
- package/dist/dex/futarchy-idl.d.ts.map +1 -0
- package/dist/dex/futarchy-idl.js +2570 -0
- package/dist/dex/futarchy-idl.js.map +1 -0
- package/dist/dex/futarchy-launchpad.d.ts +68 -0
- package/dist/dex/futarchy-launchpad.d.ts.map +1 -0
- package/dist/dex/futarchy-launchpad.js +377 -0
- package/dist/dex/futarchy-launchpad.js.map +1 -0
- package/dist/dex/index.d.ts +88 -0
- package/dist/dex/index.d.ts.map +1 -0
- package/dist/dex/index.js +159 -0
- package/dist/dex/index.js.map +1 -0
- package/dist/dex/jupiter-ultra.d.ts +27 -0
- package/dist/dex/jupiter-ultra.d.ts.map +1 -0
- package/dist/dex/jupiter-ultra.js +369 -0
- package/dist/dex/jupiter-ultra.js.map +1 -0
- package/dist/dex/meteora-damm-v1.d.ts +36 -0
- package/dist/dex/meteora-damm-v1.d.ts.map +1 -0
- package/dist/dex/meteora-damm-v1.js +314 -0
- package/dist/dex/meteora-damm-v1.js.map +1 -0
- package/dist/dex/meteora-damm-v2.d.ts +103 -0
- package/dist/dex/meteora-damm-v2.d.ts.map +1 -0
- package/dist/dex/meteora-damm-v2.js +1146 -0
- package/dist/dex/meteora-damm-v2.js.map +1 -0
- package/dist/dex/meteora-dbc.d.ts +38 -0
- package/dist/dex/meteora-dbc.d.ts.map +1 -0
- package/dist/dex/meteora-dbc.js +374 -0
- package/dist/dex/meteora-dbc.js.map +1 -0
- package/dist/dex/meteora-dlmm.d.ts +79 -0
- package/dist/dex/meteora-dlmm.d.ts.map +1 -0
- package/dist/dex/meteora-dlmm.js +735 -0
- package/dist/dex/meteora-dlmm.js.map +1 -0
- package/dist/dex/orca.d.ts +31 -0
- package/dist/dex/orca.d.ts.map +1 -0
- package/dist/dex/orca.js +536 -0
- package/dist/dex/orca.js.map +1 -0
- package/dist/dex/pancakeswap-clmm.d.ts +16 -0
- package/dist/dex/pancakeswap-clmm.d.ts.map +1 -0
- package/dist/dex/pancakeswap-clmm.js +39 -0
- package/dist/dex/pancakeswap-clmm.js.map +1 -0
- package/dist/dex/pumpfun-amm.d.ts +46 -0
- package/dist/dex/pumpfun-amm.d.ts.map +1 -0
- package/dist/dex/pumpfun-amm.js +692 -0
- package/dist/dex/pumpfun-amm.js.map +1 -0
- package/dist/dex/pumpfun.d.ts +41 -0
- package/dist/dex/pumpfun.d.ts.map +1 -0
- package/dist/dex/pumpfun.js +555 -0
- package/dist/dex/pumpfun.js.map +1 -0
- package/dist/dex/raydium-amm-v4.d.ts +11 -0
- package/dist/dex/raydium-amm-v4.d.ts.map +1 -0
- package/dist/dex/raydium-amm-v4.js +649 -0
- package/dist/dex/raydium-amm-v4.js.map +1 -0
- package/dist/dex/raydium-clmm.d.ts +12 -0
- package/dist/dex/raydium-clmm.d.ts.map +1 -0
- package/dist/dex/raydium-clmm.js +675 -0
- package/dist/dex/raydium-clmm.js.map +1 -0
- package/dist/dex/raydium-cpmm.d.ts +10 -0
- package/dist/dex/raydium-cpmm.d.ts.map +1 -0
- package/dist/dex/raydium-cpmm.js +613 -0
- package/dist/dex/raydium-cpmm.js.map +1 -0
- package/dist/dex/raydium-launchlab.d.ts +12 -0
- package/dist/dex/raydium-launchlab.d.ts.map +1 -0
- package/dist/dex/raydium-launchlab.js +530 -0
- package/dist/dex/raydium-launchlab.js.map +1 -0
- package/dist/dex/shared/clmm-base.d.ts +58 -0
- package/dist/dex/shared/clmm-base.d.ts.map +1 -0
- package/dist/dex/shared/clmm-base.js +891 -0
- package/dist/dex/shared/clmm-base.js.map +1 -0
- package/dist/dex/types.d.ts +601 -0
- package/dist/dex/types.d.ts.map +1 -0
- package/dist/dex/types.js +137 -0
- package/dist/dex/types.js.map +1 -0
- package/dist/dexscreener/index.d.ts +2 -0
- package/dist/dexscreener/index.d.ts.map +1 -0
- package/dist/dexscreener/index.js +18 -0
- package/dist/dexscreener/index.js.map +1 -0
- package/dist/dexscreener/info.d.ts +22 -0
- package/dist/dexscreener/info.d.ts.map +1 -0
- package/dist/dexscreener/info.js +104 -0
- package/dist/dexscreener/info.js.map +1 -0
- package/dist/helpers/check_balance.d.ts +10 -0
- package/dist/helpers/check_balance.d.ts.map +1 -0
- package/dist/helpers/check_balance.js +34 -0
- package/dist/helpers/check_balance.js.map +1 -0
- package/dist/helpers/config.d.ts +51 -0
- package/dist/helpers/config.d.ts.map +1 -0
- package/dist/helpers/config.js +118 -0
- package/dist/helpers/config.js.map +1 -0
- package/dist/helpers/index.d.ts +8 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +29 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/logger.d.ts +27 -0
- package/dist/helpers/logger.d.ts.map +1 -0
- package/dist/helpers/logger.js +39 -0
- package/dist/helpers/logger.js.map +1 -0
- package/dist/helpers/token-2022.d.ts +32 -0
- package/dist/helpers/token-2022.d.ts.map +1 -0
- package/dist/helpers/token-2022.js +48 -0
- package/dist/helpers/token-2022.js.map +1 -0
- package/dist/helpers/unwrap_sol.d.ts +2 -0
- package/dist/helpers/unwrap_sol.d.ts.map +1 -0
- package/dist/helpers/unwrap_sol.js +67 -0
- package/dist/helpers/unwrap_sol.js.map +1 -0
- package/dist/helpers/util.d.ts +698 -0
- package/dist/helpers/util.d.ts.map +1 -0
- package/dist/helpers/util.js +181 -0
- package/dist/helpers/util.js.map +1 -0
- package/dist/helpers/utils.d.ts +10 -0
- package/dist/helpers/utils.d.ts.map +1 -0
- package/dist/helpers/utils.js +97 -0
- package/dist/helpers/utils.js.map +1 -0
- package/dist/helpers/wrap_sol.d.ts +3 -0
- package/dist/helpers/wrap_sol.d.ts.map +1 -0
- package/dist/helpers/wrap_sol.js +88 -0
- package/dist/helpers/wrap_sol.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/transactions/bloXroute_tips_tx_executor.d.ts +4 -0
- package/dist/transactions/bloXroute_tips_tx_executor.d.ts.map +1 -0
- package/dist/transactions/bloXroute_tips_tx_executor.js +70 -0
- package/dist/transactions/bloXroute_tips_tx_executor.js.map +1 -0
- package/dist/transactions/index.d.ts +6 -0
- package/dist/transactions/index.d.ts.map +1 -0
- package/dist/transactions/index.js +30 -0
- package/dist/transactions/index.js.map +1 -0
- package/dist/transactions/jito_tips_tx_executor.d.ts +15 -0
- package/dist/transactions/jito_tips_tx_executor.d.ts.map +1 -0
- package/dist/transactions/jito_tips_tx_executor.js +99 -0
- package/dist/transactions/jito_tips_tx_executor.js.map +1 -0
- package/dist/transactions/landing/index.d.ts +30 -0
- package/dist/transactions/landing/index.d.ts.map +1 -0
- package/dist/transactions/landing/index.js +60 -0
- package/dist/transactions/landing/index.js.map +1 -0
- package/dist/transactions/landing/nonce-manager.d.ts +116 -0
- package/dist/transactions/landing/nonce-manager.d.ts.map +1 -0
- package/dist/transactions/landing/nonce-manager.js +393 -0
- package/dist/transactions/landing/nonce-manager.js.map +1 -0
- package/dist/transactions/landing/orchestrator.d.ts +104 -0
- package/dist/transactions/landing/orchestrator.d.ts.map +1 -0
- package/dist/transactions/landing/orchestrator.js +329 -0
- package/dist/transactions/landing/orchestrator.js.map +1 -0
- package/dist/transactions/landing/providers/astralane.d.ts +12 -0
- package/dist/transactions/landing/providers/astralane.d.ts.map +1 -0
- package/dist/transactions/landing/providers/astralane.js +132 -0
- package/dist/transactions/landing/providers/astralane.js.map +1 -0
- package/dist/transactions/landing/providers/blockrazor.d.ts +11 -0
- package/dist/transactions/landing/providers/blockrazor.d.ts.map +1 -0
- package/dist/transactions/landing/providers/blockrazor.js +134 -0
- package/dist/transactions/landing/providers/blockrazor.js.map +1 -0
- package/dist/transactions/landing/providers/bloxroute.d.ts +12 -0
- package/dist/transactions/landing/providers/bloxroute.d.ts.map +1 -0
- package/dist/transactions/landing/providers/bloxroute.js +102 -0
- package/dist/transactions/landing/providers/bloxroute.js.map +1 -0
- package/dist/transactions/landing/providers/flashblock.d.ts +10 -0
- package/dist/transactions/landing/providers/flashblock.d.ts.map +1 -0
- package/dist/transactions/landing/providers/flashblock.js +102 -0
- package/dist/transactions/landing/providers/flashblock.js.map +1 -0
- package/dist/transactions/landing/providers/helius-sender.d.ts +11 -0
- package/dist/transactions/landing/providers/helius-sender.d.ts.map +1 -0
- package/dist/transactions/landing/providers/helius-sender.js +101 -0
- package/dist/transactions/landing/providers/helius-sender.js.map +1 -0
- package/dist/transactions/landing/providers/jito.d.ts +16 -0
- package/dist/transactions/landing/providers/jito.d.ts.map +1 -0
- package/dist/transactions/landing/providers/jito.js +110 -0
- package/dist/transactions/landing/providers/jito.js.map +1 -0
- package/dist/transactions/landing/providers/nextblock.d.ts +11 -0
- package/dist/transactions/landing/providers/nextblock.d.ts.map +1 -0
- package/dist/transactions/landing/providers/nextblock.js +109 -0
- package/dist/transactions/landing/providers/nextblock.js.map +1 -0
- package/dist/transactions/landing/providers/node1.d.ts +11 -0
- package/dist/transactions/landing/providers/node1.d.ts.map +1 -0
- package/dist/transactions/landing/providers/node1.js +101 -0
- package/dist/transactions/landing/providers/node1.js.map +1 -0
- package/dist/transactions/landing/providers/nozomi.d.ts +11 -0
- package/dist/transactions/landing/providers/nozomi.d.ts.map +1 -0
- package/dist/transactions/landing/providers/nozomi.js +124 -0
- package/dist/transactions/landing/providers/nozomi.js.map +1 -0
- package/dist/transactions/landing/providers/soyas.d.ts +16 -0
- package/dist/transactions/landing/providers/soyas.d.ts.map +1 -0
- package/dist/transactions/landing/providers/soyas.js +192 -0
- package/dist/transactions/landing/providers/soyas.js.map +1 -0
- package/dist/transactions/landing/providers/stellium.d.ts +11 -0
- package/dist/transactions/landing/providers/stellium.d.ts.map +1 -0
- package/dist/transactions/landing/providers/stellium.js +102 -0
- package/dist/transactions/landing/providers/stellium.js.map +1 -0
- package/dist/transactions/landing/providers/zero-slot.d.ts +10 -0
- package/dist/transactions/landing/providers/zero-slot.d.ts.map +1 -0
- package/dist/transactions/landing/providers/zero-slot.js +92 -0
- package/dist/transactions/landing/providers/zero-slot.js.map +1 -0
- package/dist/transactions/landing/tip-accounts.d.ts +22 -0
- package/dist/transactions/landing/tip-accounts.d.ts.map +1 -0
- package/dist/transactions/landing/tip-accounts.js +140 -0
- package/dist/transactions/landing/tip-accounts.js.map +1 -0
- package/dist/transactions/landing/types.d.ts +98 -0
- package/dist/transactions/landing/types.d.ts.map +1 -0
- package/dist/transactions/landing/types.js +30 -0
- package/dist/transactions/landing/types.js.map +1 -0
- package/dist/transactions/nozomi/tx-submission.d.ts +14 -0
- package/dist/transactions/nozomi/tx-submission.d.ts.map +1 -0
- package/dist/transactions/nozomi/tx-submission.js +107 -0
- package/dist/transactions/nozomi/tx-submission.js.map +1 -0
- package/dist/transactions/send-rpc.d.ts +54 -0
- package/dist/transactions/send-rpc.d.ts.map +1 -0
- package/dist/transactions/send-rpc.js +126 -0
- package/dist/transactions/send-rpc.js.map +1 -0
- package/dist/transactions/simple_tx_executor.d.ts +10 -0
- package/dist/transactions/simple_tx_executor.d.ts.map +1 -0
- package/dist/transactions/simple_tx_executor.js +33 -0
- package/dist/transactions/simple_tx_executor.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meteora-dlmm.js","sourceRoot":"","sources":["../../src/dex/meteora-dlmm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orca Whirlpools — IDexAdapter Implementation
|
|
3
|
+
*
|
|
4
|
+
* Wraps the @orca-so/whirlpools v5 SDK (which uses @solana/kit types) for
|
|
5
|
+
* buy/snipe/findPool/getPrice/buildSwapIxs on Orca Whirlpool pools.
|
|
6
|
+
*
|
|
7
|
+
* Key details:
|
|
8
|
+
* - Uses @orca-so/whirlpools swapInstructions() which returns @solana/kit
|
|
9
|
+
* IInstruction[] — converted to @solana/web3.js TransactionInstruction[].
|
|
10
|
+
* - CRITICAL: Manually patches WSOL ATA references in swap instructions.
|
|
11
|
+
* Orca SDK creates its own WSOL ATA via system program transfer, but we
|
|
12
|
+
* want to use the user's WSOL ATA. We detect Orca's auto-created ATA from
|
|
13
|
+
* the system program transfer instruction and replace it in the swap IX.
|
|
14
|
+
* - Lazy initialization of Orca SDK via initializeOrca() on first call.
|
|
15
|
+
* - Whirlpool account layout decoded manually for getPrice().
|
|
16
|
+
*
|
|
17
|
+
* Source: 100x-algo-bots/trading-modules/orca/
|
|
18
|
+
*/
|
|
19
|
+
import { IDexAdapter, DexCapabilities, BuyParams, SellParams, SnipeParams, SwapResult, PoolInfo, PriceInfo, BuildSwapIxsResult } from "./types";
|
|
20
|
+
export declare class OrcaAdapter implements IDexAdapter {
|
|
21
|
+
readonly name = "orca";
|
|
22
|
+
readonly protocol = "whirlpool";
|
|
23
|
+
readonly capabilities: DexCapabilities;
|
|
24
|
+
buy(params: BuyParams): Promise<SwapResult>;
|
|
25
|
+
sell(params: SellParams): Promise<SwapResult>;
|
|
26
|
+
snipe(params: SnipeParams): Promise<SwapResult>;
|
|
27
|
+
buildSwapIxs(params: BuyParams | SellParams): Promise<BuildSwapIxsResult>;
|
|
28
|
+
findPool(baseMint: string, _quoteMint?: string): Promise<PoolInfo | null>;
|
|
29
|
+
getPrice(poolAddress: string): Promise<PriceInfo>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=orca.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orca.d.ts","sourceRoot":"","sources":["../../src/dex/orca.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAsCH,OAAO,EACL,WAAW,EACX,eAAe,EAEf,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,QAAQ,EACR,SAAS,EACT,kBAAkB,EASnB,MAAM,SAAS,CAAC;AAiPjB,qBAAa,WAAY,YAAW,WAAW;IAC7C,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,QAAQ,eAAe;IAChC,QAAQ,CAAC,YAAY,EAAE,eAAe,CAMnC;IAIG,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAgG3C,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAyG7C,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAgK/C,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkDzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAQzE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAiCxD"}
|
package/dist/dex/orca.js
ADDED
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Orca Whirlpools — IDexAdapter Implementation
|
|
4
|
+
*
|
|
5
|
+
* Wraps the @orca-so/whirlpools v5 SDK (which uses @solana/kit types) for
|
|
6
|
+
* buy/snipe/findPool/getPrice/buildSwapIxs on Orca Whirlpool pools.
|
|
7
|
+
*
|
|
8
|
+
* Key details:
|
|
9
|
+
* - Uses @orca-so/whirlpools swapInstructions() which returns @solana/kit
|
|
10
|
+
* IInstruction[] — converted to @solana/web3.js TransactionInstruction[].
|
|
11
|
+
* - CRITICAL: Manually patches WSOL ATA references in swap instructions.
|
|
12
|
+
* Orca SDK creates its own WSOL ATA via system program transfer, but we
|
|
13
|
+
* want to use the user's WSOL ATA. We detect Orca's auto-created ATA from
|
|
14
|
+
* the system program transfer instruction and replace it in the swap IX.
|
|
15
|
+
* - Lazy initialization of Orca SDK via initializeOrca() on first call.
|
|
16
|
+
* - Whirlpool account layout decoded manually for getPrice().
|
|
17
|
+
*
|
|
18
|
+
* Source: 100x-algo-bots/trading-modules/orca/
|
|
19
|
+
*/
|
|
20
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
21
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.OrcaAdapter = void 0;
|
|
25
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
26
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
27
|
+
const bn_js_1 = __importDefault(require("bn.js"));
|
|
28
|
+
const kit_1 = require("@solana/kit");
|
|
29
|
+
const kit_2 = require("@solana/kit");
|
|
30
|
+
// @ts-ignore — @orca-so/whirlpools may not be installed
|
|
31
|
+
const whirlpools_1 = require("@orca-so/whirlpools");
|
|
32
|
+
const config_1 = require("../helpers/config");
|
|
33
|
+
const landing_1 = require("../transactions/landing");
|
|
34
|
+
const send_rpc_1 = require("../transactions/send-rpc");
|
|
35
|
+
const types_1 = require("./types");
|
|
36
|
+
const index_1 = require("./index");
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Constants
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
const WHIRLPOOL_PROGRAM_ID = "whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc";
|
|
41
|
+
const SYSTEM_PROGRAM_ID = "11111111111111111111111111111111";
|
|
42
|
+
const USD1_MINT = "USD1ttGY1N17NEEHLmELoaybftRBUSErhqYiQzvEmuB";
|
|
43
|
+
const SIX_DECIMAL_MINTS = new Set([types_1.USDC_MINT, types_1.USDT_MINT, USD1_MINT]);
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// @solana/kit → @solana/web3.js instruction conversion
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
function convertInstruction(ix) {
|
|
48
|
+
const accounts = ix.accounts.map((acc) => {
|
|
49
|
+
const pubkey = new web3_js_1.PublicKey(acc.address);
|
|
50
|
+
let isWritable = false;
|
|
51
|
+
let isSigner = false;
|
|
52
|
+
if ("role" in acc) {
|
|
53
|
+
isWritable =
|
|
54
|
+
acc.role === kit_1.AccountRole.WRITABLE ||
|
|
55
|
+
acc.role === kit_1.AccountRole.WRITABLE_SIGNER;
|
|
56
|
+
isSigner =
|
|
57
|
+
acc.role === kit_1.AccountRole.READONLY_SIGNER ||
|
|
58
|
+
acc.role === kit_1.AccountRole.WRITABLE_SIGNER;
|
|
59
|
+
}
|
|
60
|
+
else if ("isWritable" in acc || "isSigner" in acc) {
|
|
61
|
+
isWritable = acc.isWritable || false;
|
|
62
|
+
isSigner = acc.isSigner || false;
|
|
63
|
+
}
|
|
64
|
+
return { pubkey, isSigner, isWritable };
|
|
65
|
+
});
|
|
66
|
+
return new web3_js_1.TransactionInstruction({
|
|
67
|
+
programId: new web3_js_1.PublicKey(ix.programAddress),
|
|
68
|
+
keys: accounts,
|
|
69
|
+
data: Buffer.from(ix.data),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
function convertInstructions(ixs) {
|
|
73
|
+
return ixs.map(convertInstruction);
|
|
74
|
+
}
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
// Whirlpool account layout (manual decode for getPrice)
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
/**
|
|
79
|
+
* Decode sqrtPrice from whirlpool account data.
|
|
80
|
+
* Layout: 8-byte discriminator, then fields. sqrtPrice is a u128 at a
|
|
81
|
+
* known offset within the struct.
|
|
82
|
+
*/
|
|
83
|
+
function decodeWhirlpoolSqrtPrice(data) {
|
|
84
|
+
// Whirlpool layout (after 8-byte discriminator):
|
|
85
|
+
// whirlpoolsConfig [32]
|
|
86
|
+
// whirlpoolBump [1]
|
|
87
|
+
// tickSpacing [2]
|
|
88
|
+
// feeTierIndexSeed [2]
|
|
89
|
+
// feeRate [2]
|
|
90
|
+
// protocolFeeRate [2]
|
|
91
|
+
// liquidity [16]
|
|
92
|
+
// sqrtPrice [16] ← offset = 8 + 32 + 1 + 2 + 2 + 2 + 2 + 16 = 65
|
|
93
|
+
const offset = 8 + 32 + 1 + 2 + 2 + 2 + 2 + 16; // = 65
|
|
94
|
+
return new bn_js_1.default(data.subarray(offset, offset + 16), "le");
|
|
95
|
+
}
|
|
96
|
+
function decodeWhirlpoolMints(data) {
|
|
97
|
+
// After sqrtPrice [16] comes:
|
|
98
|
+
// tickCurrentIndex [4]
|
|
99
|
+
// protocolFeeOwedA [8]
|
|
100
|
+
// protocolFeeOwedB [8]
|
|
101
|
+
// tokenMintA [32]
|
|
102
|
+
// Offset = 65 + 16 + 4 + 8 + 8 = 101
|
|
103
|
+
const mintAOffset = 65 + 16 + 4 + 8 + 8;
|
|
104
|
+
const tokenMintA = new web3_js_1.PublicKey(data.subarray(mintAOffset, mintAOffset + 32));
|
|
105
|
+
// tokenVaultA [32], feeGrowthGlobalA [16], tokenMintB [32]
|
|
106
|
+
const mintBOffset = mintAOffset + 32 + 32 + 16;
|
|
107
|
+
const tokenMintB = new web3_js_1.PublicKey(data.subarray(mintBOffset, mintBOffset + 32));
|
|
108
|
+
return { tokenMintA, tokenMintB };
|
|
109
|
+
}
|
|
110
|
+
/** Convert sqrtPrice (Q64.64 fixed-point) to price. */
|
|
111
|
+
function sqrtPriceToPrice(sqrtPrice, decimalsA, decimalsB) {
|
|
112
|
+
const Q64_RESOLUTION = 2 ** 64;
|
|
113
|
+
const power = Math.pow(10, decimalsA - decimalsB);
|
|
114
|
+
const sqrtPriceF64 = Number(sqrtPrice.toString());
|
|
115
|
+
return Math.pow(sqrtPriceF64 / Q64_RESOLUTION, 2.0) * power;
|
|
116
|
+
}
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
// Helpers
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
function quoteDecimals(quoteMintStr) {
|
|
121
|
+
return SIX_DECIMAL_MINTS.has(quoteMintStr) ? 6 : 9;
|
|
122
|
+
}
|
|
123
|
+
function amountToSmallestUnit(amount, quoteMintStr) {
|
|
124
|
+
const decimals = quoteDecimals(quoteMintStr);
|
|
125
|
+
return BigInt(Math.floor(amount * Math.pow(10, decimals)));
|
|
126
|
+
}
|
|
127
|
+
/** Retry RPC calls with bounded retries. */
|
|
128
|
+
async function retryRpcCall(fn, maxRetries = 5, delayMs = 200) {
|
|
129
|
+
let lastError;
|
|
130
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
131
|
+
try {
|
|
132
|
+
return await fn();
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
lastError = error;
|
|
136
|
+
const isRetryable = error?.context?.statusCode === 429 ||
|
|
137
|
+
error?.__code === 8100002 ||
|
|
138
|
+
error?.message?.includes("429") ||
|
|
139
|
+
error?.message?.includes("Too Many Requests");
|
|
140
|
+
if (isRetryable && attempt < maxRetries - 1) {
|
|
141
|
+
await new Promise((r) => setTimeout(r, delayMs * (attempt + 1)));
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
throw lastError;
|
|
148
|
+
}
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
// Lazy Orca SDK initialization
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
let orcaInitialized = false;
|
|
153
|
+
async function initializeOrca() {
|
|
154
|
+
if (orcaInitialized)
|
|
155
|
+
return;
|
|
156
|
+
const wallet = (0, config_1.getWallet)();
|
|
157
|
+
await (0, whirlpools_1.setWhirlpoolsConfig)("solanaMainnet");
|
|
158
|
+
await (0, whirlpools_1.setRpc)((0, kit_1.mainnet)(config_1.main_endpoint));
|
|
159
|
+
await (0, whirlpools_1.setPayerFromBytes)(new Uint8Array(wallet.secretKey));
|
|
160
|
+
orcaInitialized = true;
|
|
161
|
+
}
|
|
162
|
+
// ---------------------------------------------------------------------------
|
|
163
|
+
// WSOL ATA patching
|
|
164
|
+
//
|
|
165
|
+
// Orca SDK's swapInstructions() creates its own WSOL ATA via a system
|
|
166
|
+
// program transfer. For sniping, we replace Orca's auto-created ATA with
|
|
167
|
+
// the user's standard WSOL ATA so that we can manage wrapping ourselves.
|
|
168
|
+
// ---------------------------------------------------------------------------
|
|
169
|
+
function patchOrcaWsolAta(web3Instructions, userWsolAta) {
|
|
170
|
+
// Separate swap IXs (whirlpool program) from non-swap IXs
|
|
171
|
+
const orcaSwapIxs = web3Instructions.filter((ix) => ix.programId.toBase58() === WHIRLPOOL_PROGRAM_ID);
|
|
172
|
+
const systemIxs = web3Instructions.filter((ix) => ix.programId.toBase58() === SYSTEM_PROGRAM_ID);
|
|
173
|
+
const nonSwapIxs = web3Instructions.filter((ix) => ix.programId.toBase58() !== WHIRLPOOL_PROGRAM_ID &&
|
|
174
|
+
ix.programId.toBase58() !== SYSTEM_PROGRAM_ID);
|
|
175
|
+
// Detect Orca's auto-created WSOL ATA from the first system transfer IX
|
|
176
|
+
let orcaWsolAta;
|
|
177
|
+
if (systemIxs.length > 0) {
|
|
178
|
+
const transferIx = systemIxs[0];
|
|
179
|
+
if (transferIx.keys.length >= 2) {
|
|
180
|
+
orcaWsolAta = transferIx.keys[1].pubkey;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Replace Orca's WSOL ATA with user's in swap instructions
|
|
184
|
+
const patchedSwapIxs = [];
|
|
185
|
+
if (orcaWsolAta) {
|
|
186
|
+
for (const swapIx of orcaSwapIxs) {
|
|
187
|
+
const modifiedKeys = swapIx.keys.map((meta) => {
|
|
188
|
+
if (orcaWsolAta && meta.pubkey.equals(orcaWsolAta)) {
|
|
189
|
+
return {
|
|
190
|
+
pubkey: userWsolAta,
|
|
191
|
+
isSigner: meta.isSigner,
|
|
192
|
+
isWritable: meta.isWritable,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
return meta;
|
|
196
|
+
});
|
|
197
|
+
patchedSwapIxs.push(new web3_js_1.TransactionInstruction({
|
|
198
|
+
programId: swapIx.programId,
|
|
199
|
+
keys: modifiedKeys,
|
|
200
|
+
data: swapIx.data,
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
patchedSwapIxs.push(...orcaSwapIxs);
|
|
206
|
+
}
|
|
207
|
+
return { swapIxs: patchedSwapIxs, nonSwapIxs };
|
|
208
|
+
}
|
|
209
|
+
// ---------------------------------------------------------------------------
|
|
210
|
+
// Token program detection
|
|
211
|
+
// ---------------------------------------------------------------------------
|
|
212
|
+
async function getTokenProgramForMint(mint) {
|
|
213
|
+
const connection = (0, config_1.getConnection)();
|
|
214
|
+
const info = await connection.getAccountInfo(mint);
|
|
215
|
+
if (!info)
|
|
216
|
+
throw new Error(`Mint account not found: ${mint.toBase58()}`);
|
|
217
|
+
return info.owner.equals(spl_token_1.TOKEN_2022_PROGRAM_ID)
|
|
218
|
+
? spl_token_1.TOKEN_2022_PROGRAM_ID
|
|
219
|
+
: spl_token_1.TOKEN_PROGRAM_ID;
|
|
220
|
+
}
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
// Adapter
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
class OrcaAdapter {
|
|
225
|
+
name = "orca";
|
|
226
|
+
protocol = "whirlpool";
|
|
227
|
+
capabilities = (0, types_1.defaultCapabilities)({
|
|
228
|
+
canBuy: true,
|
|
229
|
+
canSell: true,
|
|
230
|
+
canSnipe: true,
|
|
231
|
+
canFindPool: false, // Requires off-chain indexing or Orca API
|
|
232
|
+
canGetPrice: true,
|
|
233
|
+
});
|
|
234
|
+
// ---- Core: buy ----
|
|
235
|
+
async buy(params) {
|
|
236
|
+
const tokenMint = (0, types_1.requireTokenMint)(params, this.name);
|
|
237
|
+
const { amountSol, quoteMint: quoteMintParam, poolAddress, opts } = params;
|
|
238
|
+
const connection = (0, config_1.getConnection)();
|
|
239
|
+
const wallet = (0, config_1.getWallet)();
|
|
240
|
+
const quoteMintStr = quoteMintParam ?? types_1.WSOL_MINT;
|
|
241
|
+
const isInputWSOL = quoteMintStr === types_1.WSOL_MINT;
|
|
242
|
+
if (!poolAddress) {
|
|
243
|
+
throw new Error("orca: poolAddress is required (auto-discovery not yet supported)");
|
|
244
|
+
}
|
|
245
|
+
await initializeOrca();
|
|
246
|
+
const rpc = (0, kit_2.createSolanaRpc)(config_1.main_endpoint);
|
|
247
|
+
const walletSigner = await (0, kit_1.createKeyPairSignerFromBytes)(new Uint8Array(wallet.secretKey));
|
|
248
|
+
const inputAmount = amountToSmallestUnit(amountSol, quoteMintStr);
|
|
249
|
+
const slippageBps = opts?.slippageBps ?? types_1.DEFAULT_SLIPPAGE_BPS;
|
|
250
|
+
const { instructions } = await (0, whirlpools_1.swapInstructions)(rpc, { inputAmount, mint: (0, kit_2.address)(quoteMintStr) }, (0, kit_2.address)(poolAddress), slippageBps, walletSigner);
|
|
251
|
+
const web3Instructions = convertInstructions(instructions);
|
|
252
|
+
// Detect output token program
|
|
253
|
+
const outputMintPk = new web3_js_1.PublicKey(tokenMint);
|
|
254
|
+
const outputTokenProgram = await getTokenProgramForMint(outputMintPk);
|
|
255
|
+
const cuLimit = opts?.computeUnitLimit ?? types_1.DEFAULT_COMPUTE_UNIT_LIMIT;
|
|
256
|
+
const cuPrice = opts?.priorityFeeMicroLamports ?? types_1.DEFAULT_PRIORITY_FEE_MICRO_LAMPORTS;
|
|
257
|
+
let allIxs;
|
|
258
|
+
if (isInputWSOL) {
|
|
259
|
+
// Orca SDK creates a temporary keypair for WSOL wrapping that we can't
|
|
260
|
+
// extract (CryptoKey is non-exportable). Handle WSOL wrapping ourselves:
|
|
261
|
+
// create user's WSOL ATA, wrap SOL, patch Orca's swap IX, close ATA.
|
|
262
|
+
const inputAta = (0, spl_token_1.getAssociatedTokenAddressSync)(new web3_js_1.PublicKey(types_1.WSOL_MINT), wallet.publicKey, false, spl_token_1.TOKEN_PROGRAM_ID);
|
|
263
|
+
const outputAta = (0, spl_token_1.getAssociatedTokenAddressSync)(outputMintPk, wallet.publicKey, false, outputTokenProgram);
|
|
264
|
+
const { swapIxs: patchedSwapIxs } = patchOrcaWsolAta(web3Instructions, inputAta);
|
|
265
|
+
allIxs = [
|
|
266
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: cuLimit }),
|
|
267
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: cuPrice }),
|
|
268
|
+
(0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(wallet.publicKey, outputAta, wallet.publicKey, outputMintPk, outputTokenProgram),
|
|
269
|
+
(0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(wallet.publicKey, inputAta, wallet.publicKey, new web3_js_1.PublicKey(types_1.WSOL_MINT), spl_token_1.TOKEN_PROGRAM_ID),
|
|
270
|
+
web3_js_1.SystemProgram.transfer({
|
|
271
|
+
fromPubkey: wallet.publicKey,
|
|
272
|
+
toPubkey: inputAta,
|
|
273
|
+
lamports: Math.floor(amountSol * web3_js_1.LAMPORTS_PER_SOL),
|
|
274
|
+
}),
|
|
275
|
+
(0, spl_token_1.createSyncNativeInstruction)(inputAta, spl_token_1.TOKEN_PROGRAM_ID),
|
|
276
|
+
...patchedSwapIxs,
|
|
277
|
+
(0, spl_token_1.createCloseAccountInstruction)(inputAta, wallet.publicKey, wallet.publicKey, [], spl_token_1.TOKEN_PROGRAM_ID),
|
|
278
|
+
];
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
// Non-WSOL input: use SDK instructions directly (no temp keypair needed)
|
|
282
|
+
allIxs = [
|
|
283
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: cuLimit }),
|
|
284
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: cuPrice }),
|
|
285
|
+
...web3Instructions,
|
|
286
|
+
];
|
|
287
|
+
}
|
|
288
|
+
// Submit via RPC send+confirm
|
|
289
|
+
const result = await (0, send_rpc_1.sendAndConfirmVtx)(connection, allIxs, wallet);
|
|
290
|
+
return {
|
|
291
|
+
txSignature: result.txSignature,
|
|
292
|
+
confirmed: result.confirmed,
|
|
293
|
+
amountIn: amountSol,
|
|
294
|
+
amountInToken: quoteMintStr,
|
|
295
|
+
dex: this.name,
|
|
296
|
+
poolAddress,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
// ---- Core: sell ----
|
|
300
|
+
async sell(params) {
|
|
301
|
+
const tokenMint = (0, types_1.requireTokenMint)(params, this.name);
|
|
302
|
+
const { percentage, quoteMint: quoteMintParam, poolAddress, opts } = params;
|
|
303
|
+
const connection = (0, config_1.getConnection)();
|
|
304
|
+
const wallet = (0, config_1.getWallet)();
|
|
305
|
+
const quoteMintStr = quoteMintParam ?? types_1.WSOL_MINT;
|
|
306
|
+
if (!poolAddress) {
|
|
307
|
+
throw new Error("orca: poolAddress is required (auto-discovery not yet supported)");
|
|
308
|
+
}
|
|
309
|
+
await initializeOrca();
|
|
310
|
+
const baseMintPk = new web3_js_1.PublicKey(tokenMint);
|
|
311
|
+
// Detect base token program
|
|
312
|
+
const baseTokenProgram = await getTokenProgramForMint(baseMintPk);
|
|
313
|
+
// Get token balance
|
|
314
|
+
const ata = await (0, spl_token_1.getAssociatedTokenAddress)(baseMintPk, wallet.publicKey, false, baseTokenProgram);
|
|
315
|
+
const tokenAccount = await (0, spl_token_1.getAccount)(connection, ata, "confirmed", baseTokenProgram);
|
|
316
|
+
const balance = tokenAccount.amount;
|
|
317
|
+
// Calculate sell amount based on percentage
|
|
318
|
+
const sellAmountBigInt = BigInt(Math.floor((Number(balance) * percentage) / 100));
|
|
319
|
+
if (sellAmountBigInt === 0n) {
|
|
320
|
+
throw new Error(`No balance to sell for ${tokenMint}`);
|
|
321
|
+
}
|
|
322
|
+
const rpc = (0, kit_2.createSolanaRpc)(config_1.main_endpoint);
|
|
323
|
+
const walletSigner = await (0, kit_1.createKeyPairSignerFromBytes)(new Uint8Array(wallet.secretKey));
|
|
324
|
+
const slippageBps = opts?.slippageBps ?? types_1.DEFAULT_SLIPPAGE_BPS;
|
|
325
|
+
// Swap with tokenMint as input (selling the base token)
|
|
326
|
+
const { instructions } = await (0, whirlpools_1.swapInstructions)(rpc, { inputAmount: sellAmountBigInt, mint: (0, kit_2.address)(tokenMint) }, (0, kit_2.address)(poolAddress), slippageBps, walletSigner);
|
|
327
|
+
const web3Instructions = convertInstructions(instructions);
|
|
328
|
+
const isOutputWSOL = quoteMintStr === types_1.WSOL_MINT;
|
|
329
|
+
const cuLimit = opts?.computeUnitLimit ?? types_1.DEFAULT_COMPUTE_UNIT_LIMIT;
|
|
330
|
+
const cuPrice = opts?.priorityFeeMicroLamports ?? types_1.DEFAULT_PRIORITY_FEE_MICRO_LAMPORTS;
|
|
331
|
+
let allIxs;
|
|
332
|
+
if (isOutputWSOL) {
|
|
333
|
+
// Orca SDK creates a temp keypair for output WSOL ATA (non-extractable
|
|
334
|
+
// CryptoKey). Handle WSOL output ourselves: create user's WSOL ATA,
|
|
335
|
+
// patch Orca swap IXs, close WSOL ATA after to unwrap SOL.
|
|
336
|
+
const userWsolAta = (0, spl_token_1.getAssociatedTokenAddressSync)(new web3_js_1.PublicKey(types_1.WSOL_MINT), wallet.publicKey, false, spl_token_1.TOKEN_PROGRAM_ID);
|
|
337
|
+
const { swapIxs: patchedSwapIxs } = patchOrcaWsolAta(web3Instructions, userWsolAta);
|
|
338
|
+
allIxs = [
|
|
339
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: cuLimit }),
|
|
340
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: cuPrice }),
|
|
341
|
+
(0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(wallet.publicKey, userWsolAta, wallet.publicKey, new web3_js_1.PublicKey(types_1.WSOL_MINT), spl_token_1.TOKEN_PROGRAM_ID),
|
|
342
|
+
...patchedSwapIxs,
|
|
343
|
+
(0, spl_token_1.createCloseAccountInstruction)(userWsolAta, wallet.publicKey, wallet.publicKey, [], spl_token_1.TOKEN_PROGRAM_ID),
|
|
344
|
+
];
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
// Non-WSOL output: SDK instructions should work as-is
|
|
348
|
+
allIxs = [
|
|
349
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: cuLimit }),
|
|
350
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: cuPrice }),
|
|
351
|
+
...web3Instructions,
|
|
352
|
+
];
|
|
353
|
+
}
|
|
354
|
+
// Submit via RPC send+confirm
|
|
355
|
+
const result = await (0, send_rpc_1.sendAndConfirmVtx)(connection, allIxs, wallet);
|
|
356
|
+
// Human-readable sell amount
|
|
357
|
+
let tokenDecimals = 9;
|
|
358
|
+
try {
|
|
359
|
+
const mintData = await connection.getTokenSupply(baseMintPk);
|
|
360
|
+
tokenDecimals = mintData.value.decimals;
|
|
361
|
+
}
|
|
362
|
+
catch { /* fallback to 9 */ }
|
|
363
|
+
const humanAmount = Number(sellAmountBigInt) / Math.pow(10, tokenDecimals);
|
|
364
|
+
return {
|
|
365
|
+
txSignature: result.txSignature,
|
|
366
|
+
confirmed: result.confirmed,
|
|
367
|
+
amountIn: humanAmount,
|
|
368
|
+
amountInToken: tokenMint,
|
|
369
|
+
dex: this.name,
|
|
370
|
+
poolAddress,
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
// ---- Snipe ----
|
|
374
|
+
async snipe(params) {
|
|
375
|
+
const { tokenMint, amountSol, poolAddress, quoteMint: quoteMintParam, tipSol, opts } = params;
|
|
376
|
+
const connection = (0, config_1.getConnection)();
|
|
377
|
+
const wallet = (0, config_1.getWallet)();
|
|
378
|
+
const quoteMintStr = quoteMintParam ?? types_1.WSOL_MINT;
|
|
379
|
+
const isInputWSOL = quoteMintStr === types_1.WSOL_MINT;
|
|
380
|
+
await initializeOrca();
|
|
381
|
+
// Decode whirlpool to determine swap direction
|
|
382
|
+
const whirlpoolAccountInfo = await connection.getAccountInfo(new web3_js_1.PublicKey(poolAddress));
|
|
383
|
+
if (!whirlpoolAccountInfo) {
|
|
384
|
+
throw new Error(`Whirlpool account not found: ${poolAddress}`);
|
|
385
|
+
}
|
|
386
|
+
const { tokenMintA, tokenMintB } = decodeWhirlpoolMints(whirlpoolAccountInfo.data);
|
|
387
|
+
const quoteMintPk = new web3_js_1.PublicKey(quoteMintStr);
|
|
388
|
+
// Determine which pool token is the input
|
|
389
|
+
let inputMint;
|
|
390
|
+
if (quoteMintPk.equals(tokenMintA)) {
|
|
391
|
+
inputMint = tokenMintA;
|
|
392
|
+
}
|
|
393
|
+
else if (quoteMintPk.equals(tokenMintB)) {
|
|
394
|
+
inputMint = tokenMintB;
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
throw new Error(`Quote mint ${quoteMintStr} does not match either token in the pool. ` +
|
|
398
|
+
`Pool has tokenA: ${tokenMintA.toBase58()}, tokenB: ${tokenMintB.toBase58()}`);
|
|
399
|
+
}
|
|
400
|
+
const outputMint = inputMint.equals(tokenMintA) ? tokenMintB : tokenMintA;
|
|
401
|
+
const inputAmount = amountToSmallestUnit(amountSol, quoteMintStr);
|
|
402
|
+
const rpc = (0, kit_2.createSolanaRpc)(config_1.main_endpoint);
|
|
403
|
+
const walletSigner = await (0, kit_1.createKeyPairSignerFromBytes)(new Uint8Array(wallet.secretKey));
|
|
404
|
+
const { instructions } = await (0, whirlpools_1.swapInstructions)(rpc, { inputAmount, mint: (0, kit_2.address)(inputMint.toBase58()) }, (0, kit_2.address)(poolAddress), 1000, // 10% slippage for sniping
|
|
405
|
+
walletSigner);
|
|
406
|
+
const web3Instructions = convertInstructions(instructions);
|
|
407
|
+
// Detect token programs
|
|
408
|
+
const outputTokenProgram = await getTokenProgramForMint(outputMint);
|
|
409
|
+
const inputTokenProgram = spl_token_1.TOKEN_PROGRAM_ID; // WSOL/USDC always standard
|
|
410
|
+
const inputAta = await (0, spl_token_1.getAssociatedTokenAddress)(inputMint, wallet.publicKey, false, inputTokenProgram);
|
|
411
|
+
const outputAta = await (0, spl_token_1.getAssociatedTokenAddress)(outputMint, wallet.publicKey, false, outputTokenProgram);
|
|
412
|
+
const cuLimit = opts?.computeUnitLimit ?? types_1.DEFAULT_COMPUTE_UNIT_LIMIT;
|
|
413
|
+
const cuPrice = opts?.priorityFeeMicroLamports ?? types_1.DEFAULT_PRIORITY_FEE_MICRO_LAMPORTS;
|
|
414
|
+
let allIxs;
|
|
415
|
+
if (isInputWSOL) {
|
|
416
|
+
// Patch Orca's WSOL ATA with user's
|
|
417
|
+
const { swapIxs: patchedSwapIxs } = patchOrcaWsolAta(web3Instructions, inputAta);
|
|
418
|
+
const createOutputAtaIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(wallet.publicKey, outputAta, wallet.publicKey, outputMint, outputTokenProgram);
|
|
419
|
+
const createInputAtaIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(wallet.publicKey, inputAta, wallet.publicKey, inputMint, inputTokenProgram);
|
|
420
|
+
const transferIx = web3_js_1.SystemProgram.transfer({
|
|
421
|
+
fromPubkey: wallet.publicKey,
|
|
422
|
+
toPubkey: inputAta,
|
|
423
|
+
lamports: Math.floor(amountSol * web3_js_1.LAMPORTS_PER_SOL),
|
|
424
|
+
});
|
|
425
|
+
const syncNativeIx = (0, spl_token_1.createSyncNativeInstruction)(inputAta, spl_token_1.TOKEN_PROGRAM_ID);
|
|
426
|
+
const closeIx = (0, spl_token_1.createCloseAccountInstruction)(inputAta, wallet.publicKey, wallet.publicKey, [], spl_token_1.TOKEN_PROGRAM_ID);
|
|
427
|
+
allIxs = [
|
|
428
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: cuLimit }),
|
|
429
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: cuPrice }),
|
|
430
|
+
createOutputAtaIx,
|
|
431
|
+
createInputAtaIx,
|
|
432
|
+
transferIx,
|
|
433
|
+
syncNativeIx,
|
|
434
|
+
...patchedSwapIxs,
|
|
435
|
+
closeIx,
|
|
436
|
+
];
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
const createOutputAtaIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(wallet.publicKey, outputAta, wallet.publicKey, outputMint, outputTokenProgram);
|
|
440
|
+
// Filter to only whirlpool swap instructions (not Orca's ATA management)
|
|
441
|
+
const orcaSwapOnly = web3Instructions.filter((ix) => ix.programId.toBase58() === WHIRLPOOL_PROGRAM_ID);
|
|
442
|
+
allIxs = [
|
|
443
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: cuLimit }),
|
|
444
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: cuPrice }),
|
|
445
|
+
createOutputAtaIx,
|
|
446
|
+
...orcaSwapOnly,
|
|
447
|
+
];
|
|
448
|
+
}
|
|
449
|
+
const blockhash = await connection.getLatestBlockhash();
|
|
450
|
+
const results = await (0, landing_1.landTransaction)(allIxs, wallet, blockhash, {
|
|
451
|
+
dex: this.name,
|
|
452
|
+
operation: "snipe",
|
|
453
|
+
tipSol,
|
|
454
|
+
});
|
|
455
|
+
const accepted = results.find((r) => r.accepted);
|
|
456
|
+
return {
|
|
457
|
+
txSignature: accepted?.signature ?? "",
|
|
458
|
+
confirmed: !!accepted,
|
|
459
|
+
amountIn: amountSol,
|
|
460
|
+
amountInToken: quoteMintStr,
|
|
461
|
+
dex: this.name,
|
|
462
|
+
poolAddress,
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
// ---- buildSwapIxs ----
|
|
466
|
+
async buildSwapIxs(params) {
|
|
467
|
+
if ("percentage" in params) {
|
|
468
|
+
throw new types_1.UnsupportedOperationError(this.name, "buildSwapIxs(sell)");
|
|
469
|
+
}
|
|
470
|
+
const { amountSol, quoteMint: quoteMintParam, poolAddress, opts } = params;
|
|
471
|
+
const quoteMintStr = quoteMintParam ?? types_1.WSOL_MINT;
|
|
472
|
+
if (!poolAddress) {
|
|
473
|
+
throw new Error("orca: poolAddress is required for buildSwapIxs");
|
|
474
|
+
}
|
|
475
|
+
await initializeOrca();
|
|
476
|
+
const wallet = (0, config_1.getWallet)();
|
|
477
|
+
const rpc = (0, kit_2.createSolanaRpc)(config_1.main_endpoint);
|
|
478
|
+
const walletSigner = await (0, kit_1.createKeyPairSignerFromBytes)(new Uint8Array(wallet.secretKey));
|
|
479
|
+
const inputAmount = amountToSmallestUnit(amountSol, quoteMintStr);
|
|
480
|
+
const slippageBps = opts?.slippageBps ?? types_1.DEFAULT_SLIPPAGE_BPS;
|
|
481
|
+
const { instructions } = await (0, whirlpools_1.swapInstructions)(rpc, { inputAmount, mint: (0, kit_2.address)(quoteMintStr) }, (0, kit_2.address)(poolAddress), slippageBps, walletSigner);
|
|
482
|
+
const web3Instructions = convertInstructions(instructions);
|
|
483
|
+
// If input is WSOL, Orca SDK creates a temp keypair we can't sign with.
|
|
484
|
+
// Return only the patched whirlpool swap IX; caller must handle WSOL wrapping.
|
|
485
|
+
const isInputWSOL = quoteMintStr === types_1.WSOL_MINT;
|
|
486
|
+
if (isInputWSOL) {
|
|
487
|
+
const userWsolAta = (0, spl_token_1.getAssociatedTokenAddressSync)(new web3_js_1.PublicKey(types_1.WSOL_MINT), wallet.publicKey, false, spl_token_1.TOKEN_PROGRAM_ID);
|
|
488
|
+
const { swapIxs } = patchOrcaWsolAta(web3Instructions, userWsolAta);
|
|
489
|
+
return { instructions: swapIxs, signers: [] };
|
|
490
|
+
}
|
|
491
|
+
return {
|
|
492
|
+
instructions: web3Instructions,
|
|
493
|
+
signers: [],
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
// ---- findPool (stub) ----
|
|
497
|
+
async findPool(baseMint, _quoteMint) {
|
|
498
|
+
// Orca pool discovery requires off-chain indexing or Orca API.
|
|
499
|
+
// The legacy code uses PDAUtil.getWhirlpool() which requires knowing tick spacing.
|
|
500
|
+
return null;
|
|
501
|
+
}
|
|
502
|
+
// ---- getPrice ----
|
|
503
|
+
async getPrice(poolAddress) {
|
|
504
|
+
const connection = (0, config_1.getConnection)();
|
|
505
|
+
const poolPk = new web3_js_1.PublicKey(poolAddress);
|
|
506
|
+
const accountInfo = await retryRpcCall(() => connection.getAccountInfo(poolPk));
|
|
507
|
+
if (!accountInfo) {
|
|
508
|
+
throw new Error(`Whirlpool account not found: ${poolAddress}`);
|
|
509
|
+
}
|
|
510
|
+
const sqrtPrice = decodeWhirlpoolSqrtPrice(accountInfo.data);
|
|
511
|
+
const { tokenMintA, tokenMintB } = decodeWhirlpoolMints(accountInfo.data);
|
|
512
|
+
// Get decimals from on-chain mint accounts
|
|
513
|
+
const [mintAInfo, mintBInfo] = await Promise.all([
|
|
514
|
+
connection.getAccountInfo(tokenMintA),
|
|
515
|
+
connection.getAccountInfo(tokenMintB),
|
|
516
|
+
]);
|
|
517
|
+
// Mint decimals are at offset 44 in the mint account data
|
|
518
|
+
const decimalsA = mintAInfo ? mintAInfo.data.readUInt8(44) : 9;
|
|
519
|
+
const decimalsB = mintBInfo ? mintBInfo.data.readUInt8(44) : 9;
|
|
520
|
+
const price = sqrtPriceToPrice(sqrtPrice, decimalsA, decimalsB);
|
|
521
|
+
return {
|
|
522
|
+
price,
|
|
523
|
+
baseMint: tokenMintA.toBase58(),
|
|
524
|
+
quoteMint: tokenMintB.toBase58(),
|
|
525
|
+
source: "on-chain",
|
|
526
|
+
poolAddress,
|
|
527
|
+
timestamp: Date.now(),
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
exports.OrcaAdapter = OrcaAdapter;
|
|
532
|
+
// ---------------------------------------------------------------------------
|
|
533
|
+
// Auto-register
|
|
534
|
+
// ---------------------------------------------------------------------------
|
|
535
|
+
(0, index_1.registerAdapter)(new OrcaAdapter());
|
|
536
|
+
//# sourceMappingURL=orca.js.map
|