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,546 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Fusion AMM — IDexAdapter Implementation
|
|
4
|
+
*
|
|
5
|
+
* Wraps the @crypticdot/fusionamm-client and @crypticdot/fusionamm-core SDKs
|
|
6
|
+
* for buy/snipe/findPool/getPrice/buildSwapIxs on Fusion AMM pools.
|
|
7
|
+
*
|
|
8
|
+
* Key details:
|
|
9
|
+
* - Uses @solana/kit types (IInstruction, Address) — converted to @solana/web3.js
|
|
10
|
+
* TransactionInstruction via convertInstruction().
|
|
11
|
+
* - Token-2022 transfer fee awareness — reads mint extensions to detect fees.
|
|
12
|
+
* - Tick array handling — fetches or creates uninitialized tick arrays for swap quotes.
|
|
13
|
+
* - WSOL wrapping/unwrapping handled automatically for SOL-based swaps.
|
|
14
|
+
*
|
|
15
|
+
* Source: 100x-algo-bots/trading-modules/fusion-amm/
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.FusionAmmAdapter = void 0;
|
|
52
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
53
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
54
|
+
const kit_1 = require("@solana/kit");
|
|
55
|
+
const kit_2 = require("@solana/kit");
|
|
56
|
+
// @ts-ignore — fusionamm-client may not be installed
|
|
57
|
+
const fusionamm_client_1 = require("@crypticdot/fusionamm-client");
|
|
58
|
+
// @ts-ignore — fusionamm-core may not be installed
|
|
59
|
+
const fusionamm_core_1 = require("@crypticdot/fusionamm-core");
|
|
60
|
+
const token_2022_1 = require("@solana-program/token-2022");
|
|
61
|
+
const memo_1 = require("@solana-program/memo");
|
|
62
|
+
const config_1 = require("../helpers/config");
|
|
63
|
+
const landing_1 = require("../transactions/landing");
|
|
64
|
+
const send_rpc_1 = require("../transactions/send-rpc");
|
|
65
|
+
const types_1 = require("./types");
|
|
66
|
+
const index_1 = require("./index");
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
// Constants
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
const USD1_MINT = "USD1ttGY1N17NEEHLmELoaybftRBUSErhqYiQzvEmuB";
|
|
71
|
+
const SIX_DECIMAL_MINTS = new Set([
|
|
72
|
+
types_1.USDC_MINT,
|
|
73
|
+
types_1.USDT_MINT,
|
|
74
|
+
USD1_MINT,
|
|
75
|
+
]);
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// @solana/kit → @solana/web3.js instruction conversion
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
function convertInstruction(ix) {
|
|
80
|
+
const accounts = ix.accounts.map((acc) => {
|
|
81
|
+
const pubkey = new web3_js_1.PublicKey(acc.address);
|
|
82
|
+
let isWritable = false;
|
|
83
|
+
let isSigner = false;
|
|
84
|
+
if ("role" in acc) {
|
|
85
|
+
isWritable =
|
|
86
|
+
acc.role === kit_1.AccountRole.WRITABLE ||
|
|
87
|
+
acc.role === kit_1.AccountRole.WRITABLE_SIGNER;
|
|
88
|
+
isSigner =
|
|
89
|
+
acc.role === kit_1.AccountRole.READONLY_SIGNER ||
|
|
90
|
+
acc.role === kit_1.AccountRole.WRITABLE_SIGNER;
|
|
91
|
+
}
|
|
92
|
+
else if ("isWritable" in acc || "isSigner" in acc) {
|
|
93
|
+
isWritable = acc.isWritable || false;
|
|
94
|
+
isSigner = acc.isSigner || false;
|
|
95
|
+
}
|
|
96
|
+
return { pubkey, isSigner, isWritable };
|
|
97
|
+
});
|
|
98
|
+
return new web3_js_1.TransactionInstruction({
|
|
99
|
+
programId: new web3_js_1.PublicKey(ix.programAddress),
|
|
100
|
+
keys: accounts,
|
|
101
|
+
data: Buffer.from(ix.data),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
function convertInstructions(ixs) {
|
|
105
|
+
return ixs.map(convertInstruction);
|
|
106
|
+
}
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
// Helpers
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
function quoteDecimals(quoteMintStr) {
|
|
111
|
+
return SIX_DECIMAL_MINTS.has(quoteMintStr) ? 6 : 9;
|
|
112
|
+
}
|
|
113
|
+
function amountToSmallestUnit(amount, quoteMintStr) {
|
|
114
|
+
const decimals = quoteDecimals(quoteMintStr);
|
|
115
|
+
return BigInt(Math.floor(amount * Math.pow(10, decimals)));
|
|
116
|
+
}
|
|
117
|
+
/** Retry RPC calls with bounded retries and exponential backoff. */
|
|
118
|
+
async function retryRpcCall(fn, maxRetries = 5, delayMs = 200) {
|
|
119
|
+
let lastError;
|
|
120
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
121
|
+
try {
|
|
122
|
+
return await fn();
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
lastError = error;
|
|
126
|
+
const isRetryable = error?.context?.statusCode === 429 ||
|
|
127
|
+
error?.__code === 8100002 ||
|
|
128
|
+
error?.message?.includes("429") ||
|
|
129
|
+
error?.message?.includes("Too Many Requests");
|
|
130
|
+
if (isRetryable && attempt < maxRetries - 1) {
|
|
131
|
+
await new Promise((r) => setTimeout(r, delayMs * (attempt + 1)));
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
throw lastError;
|
|
138
|
+
}
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
// Tick array helpers
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
function createUninitializedTickArray(addr, startTickIndex, programAddress) {
|
|
143
|
+
return {
|
|
144
|
+
address: addr,
|
|
145
|
+
data: {
|
|
146
|
+
startTickIndex,
|
|
147
|
+
ticks: Array((0, fusionamm_core_1._TICK_ARRAY_SIZE)()).fill({
|
|
148
|
+
initialized: false,
|
|
149
|
+
liquidityNet: 0n,
|
|
150
|
+
liquidityGross: 0n,
|
|
151
|
+
feeGrowthOutsideA: 0n,
|
|
152
|
+
feeGrowthOutsideB: 0n,
|
|
153
|
+
age: 0n,
|
|
154
|
+
openOrdersInput: 0n,
|
|
155
|
+
partFilledOrdersInput: 0n,
|
|
156
|
+
partFilledOrdersRemainingInput: 0n,
|
|
157
|
+
fulfilledAToBOrdersInput: 0n,
|
|
158
|
+
fulfilledBToAOrdersInput: 0n,
|
|
159
|
+
}),
|
|
160
|
+
},
|
|
161
|
+
space: 0n,
|
|
162
|
+
executable: false,
|
|
163
|
+
lamports: (0, kit_1.lamports)(0n),
|
|
164
|
+
programAddress,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
async function fetchTickArrayOrDefault(rpc, fusionPool) {
|
|
168
|
+
const tickArrayStartIndex = (0, fusionamm_core_1.getTickArrayStartTickIndex)(fusionPool.data.tickCurrentIndex, fusionPool.data.tickSpacing);
|
|
169
|
+
const offset = fusionPool.data.tickSpacing * (0, fusionamm_core_1._TICK_ARRAY_SIZE)();
|
|
170
|
+
const tickArrayIndexes = [
|
|
171
|
+
tickArrayStartIndex,
|
|
172
|
+
tickArrayStartIndex + offset,
|
|
173
|
+
tickArrayStartIndex + offset * 2,
|
|
174
|
+
tickArrayStartIndex - offset,
|
|
175
|
+
tickArrayStartIndex - offset * 2,
|
|
176
|
+
];
|
|
177
|
+
const tickArrayAddresses = await Promise.all(tickArrayIndexes.map((startIndex) => (0, fusionamm_client_1.getTickArrayAddress)(fusionPool.address, startIndex).then((x) => x[0])));
|
|
178
|
+
const maybeTickArrays = (await retryRpcCall(() => (0, fusionamm_client_1.fetchAllMaybeTickArray)(rpc, tickArrayAddresses)));
|
|
179
|
+
const tickArrays = [];
|
|
180
|
+
for (let i = 0; i < maybeTickArrays.length; i++) {
|
|
181
|
+
const maybe = maybeTickArrays[i];
|
|
182
|
+
if (maybe.exists) {
|
|
183
|
+
tickArrays.push(maybe);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
tickArrays.push(createUninitializedTickArray(tickArrayAddresses[i], tickArrayIndexes[i], fusionPool.programAddress));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return tickArrays;
|
|
190
|
+
}
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
// Token-2022 transfer fee helper
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
function getCurrentTransferFee(mint, currentEpoch) {
|
|
195
|
+
if (mint == null ||
|
|
196
|
+
("exists" in mint && !mint.exists) ||
|
|
197
|
+
mint.data.extensions?.__option === "None") {
|
|
198
|
+
return undefined;
|
|
199
|
+
}
|
|
200
|
+
const feeConfig = mint.data.extensions?.value?.find((x) => x.__kind === "TransferFeeConfig");
|
|
201
|
+
if (feeConfig == null)
|
|
202
|
+
return undefined;
|
|
203
|
+
const transferFee = currentEpoch >= feeConfig.newerTransferFee.epoch
|
|
204
|
+
? feeConfig.newerTransferFee
|
|
205
|
+
: feeConfig.olderTransferFee;
|
|
206
|
+
return {
|
|
207
|
+
feeBps: transferFee.transferFeeBasisPoints,
|
|
208
|
+
maxFee: transferFee.maximumFee,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
// ---------------------------------------------------------------------------
|
|
212
|
+
// Core: build swap instructions via FusionAMM SDK
|
|
213
|
+
// ---------------------------------------------------------------------------
|
|
214
|
+
async function buildFusionSwapInstructions(rpc, poolAddress, inputAmount, quoteMint, slippageToleranceBps, signer) {
|
|
215
|
+
const fusionPool = (await retryRpcCall(() => (0, fusionamm_client_1.fetchFusionPool)(rpc, poolAddress)));
|
|
216
|
+
const [tokenA, tokenB] = await retryRpcCall(() => (0, token_2022_1.fetchAllMint)(rpc, [fusionPool.data.tokenMintA, fusionPool.data.tokenMintB]));
|
|
217
|
+
const specifiedTokenA = quoteMint === fusionPool.data.tokenMintA;
|
|
218
|
+
const tickArrays = (await retryRpcCall(() => fetchTickArrayOrDefault(rpc, fusionPool)));
|
|
219
|
+
const currentEpoch = (await retryRpcCall(() => rpc.getEpochInfo().send()));
|
|
220
|
+
const transferFeeA = getCurrentTransferFee(tokenA, currentEpoch.epoch);
|
|
221
|
+
const transferFeeB = getCurrentTransferFee(tokenB, currentEpoch.epoch);
|
|
222
|
+
// Get swap quote
|
|
223
|
+
const quote = (0, fusionamm_core_1.swapQuoteByInputToken)(inputAmount, specifiedTokenA, slippageToleranceBps, fusionPool.data, tickArrays.map((x) => x.data), transferFeeA, transferFeeB);
|
|
224
|
+
const aToB = specifiedTokenA;
|
|
225
|
+
// Derive ATAs
|
|
226
|
+
const { findAssociatedTokenPda } = await Promise.resolve().then(() => __importStar(require("@solana-program/token")));
|
|
227
|
+
const tokenAccountAddresses = {};
|
|
228
|
+
const tokenAccountA = await findAssociatedTokenPda({
|
|
229
|
+
owner: signer.address,
|
|
230
|
+
mint: fusionPool.data.tokenMintA,
|
|
231
|
+
tokenProgram: tokenA.programAddress,
|
|
232
|
+
});
|
|
233
|
+
tokenAccountAddresses[fusionPool.data.tokenMintA] = tokenAccountA[0];
|
|
234
|
+
const tokenAccountB = await findAssociatedTokenPda({
|
|
235
|
+
owner: signer.address,
|
|
236
|
+
mint: fusionPool.data.tokenMintB,
|
|
237
|
+
tokenProgram: tokenB.programAddress,
|
|
238
|
+
});
|
|
239
|
+
tokenAccountAddresses[fusionPool.data.tokenMintB] = tokenAccountB[0];
|
|
240
|
+
const swapInstruction = (0, fusionamm_client_1.getSwapInstruction)({
|
|
241
|
+
tokenProgramA: tokenA.programAddress,
|
|
242
|
+
tokenProgramB: tokenB.programAddress,
|
|
243
|
+
memoProgram: memo_1.MEMO_PROGRAM_ADDRESS,
|
|
244
|
+
tokenAuthority: signer,
|
|
245
|
+
fusionPool: fusionPool.address,
|
|
246
|
+
tokenMintA: fusionPool.data.tokenMintA,
|
|
247
|
+
tokenMintB: fusionPool.data.tokenMintB,
|
|
248
|
+
tokenOwnerAccountA: tokenAccountAddresses[fusionPool.data.tokenMintA],
|
|
249
|
+
tokenOwnerAccountB: tokenAccountAddresses[fusionPool.data.tokenMintB],
|
|
250
|
+
tokenVaultA: fusionPool.data.tokenVaultA,
|
|
251
|
+
tokenVaultB: fusionPool.data.tokenVaultB,
|
|
252
|
+
tickArray0: tickArrays[0].address,
|
|
253
|
+
tickArray1: tickArrays[1].address,
|
|
254
|
+
tickArray2: tickArrays[2].address,
|
|
255
|
+
amount: inputAmount,
|
|
256
|
+
otherAmountThreshold: quote.tokenMinOut,
|
|
257
|
+
sqrtPriceLimit: 0,
|
|
258
|
+
amountSpecifiedIsInput: true,
|
|
259
|
+
aToB,
|
|
260
|
+
remainingAccountsInfo: {
|
|
261
|
+
slices: [{ accountsType: fusionamm_client_1.AccountsType.SupplementalTickArrays, length: 2 }],
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
// Append supplemental tick arrays
|
|
265
|
+
swapInstruction.accounts.push({ address: tickArrays[3].address, role: kit_1.AccountRole.WRITABLE }, { address: tickArrays[4].address, role: kit_1.AccountRole.WRITABLE });
|
|
266
|
+
return [swapInstruction];
|
|
267
|
+
}
|
|
268
|
+
// ---------------------------------------------------------------------------
|
|
269
|
+
// Adapter
|
|
270
|
+
// ---------------------------------------------------------------------------
|
|
271
|
+
class FusionAmmAdapter {
|
|
272
|
+
name = "fusion-amm";
|
|
273
|
+
protocol = "fusion-amm";
|
|
274
|
+
capabilities = (0, types_1.defaultCapabilities)({
|
|
275
|
+
canBuy: true,
|
|
276
|
+
canSell: true,
|
|
277
|
+
canSnipe: true,
|
|
278
|
+
canFindPool: false, // Requires off-chain indexing
|
|
279
|
+
canGetPrice: true,
|
|
280
|
+
});
|
|
281
|
+
// ---- Core: buy ----
|
|
282
|
+
async buy(params) {
|
|
283
|
+
const tokenMint = (0, types_1.requireTokenMint)(params, this.name);
|
|
284
|
+
const { amountSol, quoteMint: quoteMintParam, poolAddress, opts } = params;
|
|
285
|
+
const connection = (0, config_1.getConnection)();
|
|
286
|
+
const wallet = (0, config_1.getWallet)();
|
|
287
|
+
const quoteMintStr = quoteMintParam ?? types_1.WSOL_MINT;
|
|
288
|
+
if (!poolAddress) {
|
|
289
|
+
throw new Error("fusion-amm: poolAddress is required (auto-discovery not yet supported)");
|
|
290
|
+
}
|
|
291
|
+
const { instructions: swapIxs, signers } = await this.doBuildSwapIxs(tokenMint, amountSol, quoteMintStr, poolAddress, opts?.slippageBps ?? types_1.DEFAULT_SLIPPAGE_BPS);
|
|
292
|
+
// Add WSOL wrapping instructions if needed
|
|
293
|
+
const allIxs = await this.wrapInstructionsWithWSOL(swapIxs, quoteMintStr, amountSol, wallet, opts);
|
|
294
|
+
// Submit via RPC send+confirm
|
|
295
|
+
const result = await (0, send_rpc_1.sendAndConfirmVtx)(connection, allIxs, wallet);
|
|
296
|
+
return {
|
|
297
|
+
txSignature: result.txSignature,
|
|
298
|
+
confirmed: result.confirmed,
|
|
299
|
+
amountIn: amountSol,
|
|
300
|
+
amountInToken: quoteMintStr,
|
|
301
|
+
dex: this.name,
|
|
302
|
+
poolAddress,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
// ---- Core: sell ----
|
|
306
|
+
async sell(params) {
|
|
307
|
+
const tokenMint = (0, types_1.requireTokenMint)(params, this.name);
|
|
308
|
+
const { percentage, quoteMint: quoteMintParam, poolAddress, opts } = params;
|
|
309
|
+
const connection = (0, config_1.getConnection)();
|
|
310
|
+
const wallet = (0, config_1.getWallet)();
|
|
311
|
+
const quoteMintStr = quoteMintParam ?? types_1.WSOL_MINT;
|
|
312
|
+
if (!poolAddress) {
|
|
313
|
+
throw new Error("fusion-amm: poolAddress is required (auto-discovery not yet supported)");
|
|
314
|
+
}
|
|
315
|
+
// 1. Get balance of the token being sold
|
|
316
|
+
const baseMintPk = new web3_js_1.PublicKey(tokenMint);
|
|
317
|
+
const baseMintTokenProgram = await this.getTokenProgramForMint(connection, baseMintPk);
|
|
318
|
+
const baseAta = await (0, spl_token_1.getAssociatedTokenAddress)(baseMintPk, wallet.publicKey, false, baseMintTokenProgram);
|
|
319
|
+
let balance;
|
|
320
|
+
try {
|
|
321
|
+
const res = await connection.getTokenAccountBalance(baseAta);
|
|
322
|
+
balance = { amount: BigInt(res.value.amount), decimals: res.value.decimals };
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
balance = { amount: 0n, decimals: 0 };
|
|
326
|
+
}
|
|
327
|
+
// 2. Calculate sell amount from percentage
|
|
328
|
+
const sellAmount = (balance.amount * BigInt(Math.floor(percentage))) / 100n;
|
|
329
|
+
if (sellAmount === 0n) {
|
|
330
|
+
return {
|
|
331
|
+
txSignature: "",
|
|
332
|
+
confirmed: false,
|
|
333
|
+
amountIn: 0,
|
|
334
|
+
amountInToken: tokenMint,
|
|
335
|
+
dex: this.name,
|
|
336
|
+
poolAddress,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
// 3. Build swap IXs — pass tokenMint as the "quote" (input) to buildFusionSwapInstructions
|
|
340
|
+
// since it determines direction via `specifiedTokenA = quoteMint === fusionPool.data.tokenMintA`
|
|
341
|
+
const { instructions: swapIxs } = await this.doBuildSwapIxs(quoteMintStr, // "tokenMint" param (output)
|
|
342
|
+
0, // amountSol unused — we override inputAmount
|
|
343
|
+
tokenMint, // "quoteMint" param (input = token being sold)
|
|
344
|
+
poolAddress, opts?.slippageBps ?? types_1.DEFAULT_SLIPPAGE_BPS, sellAmount);
|
|
345
|
+
// 4. Wrap with WSOL handling for output
|
|
346
|
+
const allIxs = await this.wrapSellInstructionsWithWSOL(swapIxs, quoteMintStr, wallet, opts);
|
|
347
|
+
// 5. Submit via RPC send+confirm
|
|
348
|
+
const result = await (0, send_rpc_1.sendAndConfirmVtx)(connection, allIxs, wallet);
|
|
349
|
+
const humanSellAmount = Number(sellAmount) / 10 ** balance.decimals;
|
|
350
|
+
return {
|
|
351
|
+
txSignature: result.txSignature,
|
|
352
|
+
confirmed: result.confirmed,
|
|
353
|
+
amountIn: humanSellAmount,
|
|
354
|
+
amountInToken: tokenMint,
|
|
355
|
+
dex: this.name,
|
|
356
|
+
poolAddress,
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
// ---- Snipe ----
|
|
360
|
+
async snipe(params) {
|
|
361
|
+
const { tokenMint, amountSol, poolAddress, quoteMint: quoteMintParam, tipSol, opts } = params;
|
|
362
|
+
const connection = (0, config_1.getConnection)();
|
|
363
|
+
const wallet = (0, config_1.getWallet)();
|
|
364
|
+
const quoteMintStr = quoteMintParam ?? types_1.WSOL_MINT;
|
|
365
|
+
const { instructions: swapIxs } = await this.doBuildSwapIxs(tokenMint, amountSol, quoteMintStr, poolAddress, opts?.slippageBps ?? 1000);
|
|
366
|
+
// Add WSOL wrapping instructions if needed
|
|
367
|
+
const allIxs = await this.wrapInstructionsWithWSOL(swapIxs, quoteMintStr, amountSol, wallet, opts);
|
|
368
|
+
const blockhash = await connection.getLatestBlockhash();
|
|
369
|
+
const results = await (0, landing_1.landTransaction)(allIxs, wallet, blockhash, {
|
|
370
|
+
dex: this.name,
|
|
371
|
+
operation: "snipe",
|
|
372
|
+
tipSol,
|
|
373
|
+
});
|
|
374
|
+
const accepted = results.find((r) => r.accepted);
|
|
375
|
+
return {
|
|
376
|
+
txSignature: accepted?.signature ?? "",
|
|
377
|
+
confirmed: !!accepted,
|
|
378
|
+
amountIn: amountSol,
|
|
379
|
+
amountInToken: quoteMintStr,
|
|
380
|
+
dex: this.name,
|
|
381
|
+
poolAddress,
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
// ---- buildSwapIxs ----
|
|
385
|
+
async buildSwapIxs(params) {
|
|
386
|
+
const tokenMint = (0, types_1.requireTokenMint)(params, this.name);
|
|
387
|
+
if ("percentage" in params) {
|
|
388
|
+
// Sell path
|
|
389
|
+
const { percentage, quoteMint: quoteMintParam, poolAddress, opts } = params;
|
|
390
|
+
const quoteMintStr = quoteMintParam ?? types_1.WSOL_MINT;
|
|
391
|
+
if (!poolAddress) {
|
|
392
|
+
throw new Error("fusion-amm: poolAddress is required for buildSwapIxs");
|
|
393
|
+
}
|
|
394
|
+
const connection = (0, config_1.getConnection)();
|
|
395
|
+
const wallet = (0, config_1.getWallet)();
|
|
396
|
+
const baseMintPk = new web3_js_1.PublicKey(tokenMint);
|
|
397
|
+
const baseMintTokenProgram = await this.getTokenProgramForMint(connection, baseMintPk);
|
|
398
|
+
const baseAta = await (0, spl_token_1.getAssociatedTokenAddress)(baseMintPk, wallet.publicKey, false, baseMintTokenProgram);
|
|
399
|
+
let balance;
|
|
400
|
+
try {
|
|
401
|
+
const res = await connection.getTokenAccountBalance(baseAta);
|
|
402
|
+
balance = { amount: BigInt(res.value.amount), decimals: res.value.decimals };
|
|
403
|
+
}
|
|
404
|
+
catch {
|
|
405
|
+
balance = { amount: 0n, decimals: 0 };
|
|
406
|
+
}
|
|
407
|
+
const sellAmount = (balance.amount * BigInt(Math.floor(percentage))) / 100n;
|
|
408
|
+
// For sell: tokenMint is input, quoteMint is output
|
|
409
|
+
return this.doBuildSwapIxs(quoteMintStr, 0, tokenMint, poolAddress, opts?.slippageBps ?? types_1.DEFAULT_SLIPPAGE_BPS, sellAmount);
|
|
410
|
+
}
|
|
411
|
+
const { amountSol, quoteMint: quoteMintParam, poolAddress, opts } = params;
|
|
412
|
+
const quoteMintStr = quoteMintParam ?? types_1.WSOL_MINT;
|
|
413
|
+
if (!poolAddress) {
|
|
414
|
+
throw new Error("fusion-amm: poolAddress is required for buildSwapIxs");
|
|
415
|
+
}
|
|
416
|
+
return this.doBuildSwapIxs(tokenMint, amountSol, quoteMintStr, poolAddress, opts?.slippageBps ?? types_1.DEFAULT_SLIPPAGE_BPS);
|
|
417
|
+
}
|
|
418
|
+
// ---- findPool (stub — requires external discovery) ----
|
|
419
|
+
async findPool(baseMint, quoteMint) {
|
|
420
|
+
// Fusion AMM pool discovery requires off-chain indexing.
|
|
421
|
+
// Return null — callers should provide poolAddress directly.
|
|
422
|
+
return null;
|
|
423
|
+
}
|
|
424
|
+
// ---- getPrice ----
|
|
425
|
+
async getPrice(poolAddress) {
|
|
426
|
+
const rpc = (0, kit_2.createSolanaRpc)(config_1.main_endpoint);
|
|
427
|
+
const poolAddr = (0, kit_2.address)(poolAddress);
|
|
428
|
+
const fusionPool = (await retryRpcCall(() => (0, fusionamm_client_1.fetchFusionPool)(rpc, poolAddr)));
|
|
429
|
+
// We need mint decimals — fetch from on-chain
|
|
430
|
+
const [tokenA, tokenB] = await retryRpcCall(() => (0, token_2022_1.fetchAllMint)(rpc, [fusionPool.data.tokenMintA, fusionPool.data.tokenMintB]));
|
|
431
|
+
const decimalsA = tokenA.data.decimals;
|
|
432
|
+
const decimalsB = tokenB.data.decimals;
|
|
433
|
+
const price = (0, fusionamm_core_1.sqrtPriceToPrice)(fusionPool.data.sqrtPrice, decimalsA, decimalsB);
|
|
434
|
+
return {
|
|
435
|
+
price,
|
|
436
|
+
baseMint: String(fusionPool.data.tokenMintA),
|
|
437
|
+
quoteMint: String(fusionPool.data.tokenMintB),
|
|
438
|
+
source: "on-chain",
|
|
439
|
+
poolAddress,
|
|
440
|
+
timestamp: Date.now(),
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
// ---- Internal helpers ----
|
|
444
|
+
async doBuildSwapIxs(tokenMint, amountSol, quoteMintStr, poolAddress, slippageBps, rawInputAmount) {
|
|
445
|
+
const connection = (0, config_1.getConnection)();
|
|
446
|
+
const wallet = (0, config_1.getWallet)();
|
|
447
|
+
const rpc = (0, kit_2.createSolanaRpc)(config_1.main_endpoint);
|
|
448
|
+
const poolAddr = (0, kit_2.address)(poolAddress);
|
|
449
|
+
const inputAmount = rawInputAmount ?? amountToSmallestUnit(amountSol, quoteMintStr);
|
|
450
|
+
const signer = await (0, kit_1.createKeyPairSignerFromBytes)(new Uint8Array(wallet.secretKey));
|
|
451
|
+
// Fetch pool to get both token mints and their programs
|
|
452
|
+
const fusionPool = (await retryRpcCall(() => (0, fusionamm_client_1.fetchFusionPool)(rpc, poolAddr)));
|
|
453
|
+
const [tokenA, tokenB] = await retryRpcCall(() => (0, token_2022_1.fetchAllMint)(rpc, [fusionPool.data.tokenMintA, fusionPool.data.tokenMintB]));
|
|
454
|
+
// Build ATA creation instructions for both sides
|
|
455
|
+
const mintAPk = new web3_js_1.PublicKey(String(fusionPool.data.tokenMintA));
|
|
456
|
+
const mintBPk = new web3_js_1.PublicKey(String(fusionPool.data.tokenMintB));
|
|
457
|
+
const progAPk = new web3_js_1.PublicKey(String(tokenA.programAddress));
|
|
458
|
+
const progBPk = new web3_js_1.PublicKey(String(tokenB.programAddress));
|
|
459
|
+
const ataA = await (0, spl_token_1.getAssociatedTokenAddress)(mintAPk, wallet.publicKey, false, progAPk);
|
|
460
|
+
const ataB = await (0, spl_token_1.getAssociatedTokenAddress)(mintBPk, wallet.publicKey, false, progBPk);
|
|
461
|
+
const createAtaIxs = [
|
|
462
|
+
(0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(wallet.publicKey, ataA, wallet.publicKey, mintAPk, progAPk),
|
|
463
|
+
(0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(wallet.publicKey, ataB, wallet.publicKey, mintBPk, progBPk),
|
|
464
|
+
];
|
|
465
|
+
const kitInstructions = await buildFusionSwapInstructions(rpc, poolAddr, inputAmount, (0, kit_2.address)(quoteMintStr), slippageBps, signer);
|
|
466
|
+
const web3Instructions = convertInstructions(kitInstructions);
|
|
467
|
+
return {
|
|
468
|
+
instructions: [...createAtaIxs, ...web3Instructions],
|
|
469
|
+
signers: [],
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Wrap swap instructions with WSOL create/transfer/sync/close if quote is SOL.
|
|
474
|
+
* Also prepends compute budget instructions.
|
|
475
|
+
*/
|
|
476
|
+
async wrapInstructionsWithWSOL(swapIxs, quoteMintStr, amount, wallet, opts) {
|
|
477
|
+
const isWSol = quoteMintStr === types_1.WSOL_MINT;
|
|
478
|
+
const cuLimit = opts?.computeUnitLimit ?? types_1.DEFAULT_COMPUTE_UNIT_LIMIT;
|
|
479
|
+
const cuPrice = opts?.priorityFeeMicroLamports ?? types_1.DEFAULT_PRIORITY_FEE_MICRO_LAMPORTS;
|
|
480
|
+
const preIxs = [
|
|
481
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: cuLimit }),
|
|
482
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: cuPrice }),
|
|
483
|
+
];
|
|
484
|
+
if (isWSol) {
|
|
485
|
+
const connection = (0, config_1.getConnection)();
|
|
486
|
+
const quoteMintPk = new web3_js_1.PublicKey(quoteMintStr);
|
|
487
|
+
const inputAta = await (0, spl_token_1.getAssociatedTokenAddress)(quoteMintPk, wallet.publicKey, false, spl_token_1.TOKEN_PROGRAM_ID);
|
|
488
|
+
// Detect base token program for output ATA
|
|
489
|
+
// (We don't have baseMint here, so the swap IX's ATAs are already correct
|
|
490
|
+
// from buildFusionSwapInstructions. We only need WSOL wrapping.)
|
|
491
|
+
preIxs.push((0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(wallet.publicKey, inputAta, wallet.publicKey, quoteMintPk, spl_token_1.TOKEN_PROGRAM_ID), web3_js_1.SystemProgram.transfer({
|
|
492
|
+
fromPubkey: wallet.publicKey,
|
|
493
|
+
toPubkey: inputAta,
|
|
494
|
+
lamports: Math.floor(amount * web3_js_1.LAMPORTS_PER_SOL),
|
|
495
|
+
}), (0, spl_token_1.createSyncNativeInstruction)(inputAta, spl_token_1.TOKEN_PROGRAM_ID));
|
|
496
|
+
const postIxs = [
|
|
497
|
+
(0, spl_token_1.createCloseAccountInstruction)(inputAta, wallet.publicKey, wallet.publicKey, [], spl_token_1.TOKEN_PROGRAM_ID),
|
|
498
|
+
];
|
|
499
|
+
return [...preIxs, ...swapIxs, ...postIxs];
|
|
500
|
+
}
|
|
501
|
+
return [...preIxs, ...swapIxs];
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Wrap sell swap instructions with WSOL output handling + compute budget.
|
|
505
|
+
* For sell: we're selling a token and receiving quote (potentially WSOL).
|
|
506
|
+
* If output is WSOL, create the WSOL ATA, swap, then close it to unwrap SOL.
|
|
507
|
+
*/
|
|
508
|
+
async wrapSellInstructionsWithWSOL(swapIxs, quoteMintStr, wallet, opts) {
|
|
509
|
+
const isWsolOutput = quoteMintStr === types_1.WSOL_MINT;
|
|
510
|
+
const cuLimit = opts?.computeUnitLimit ?? types_1.DEFAULT_COMPUTE_UNIT_LIMIT;
|
|
511
|
+
const cuPrice = opts?.priorityFeeMicroLamports ?? types_1.DEFAULT_PRIORITY_FEE_MICRO_LAMPORTS;
|
|
512
|
+
const preIxs = [
|
|
513
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: cuLimit }),
|
|
514
|
+
web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: cuPrice }),
|
|
515
|
+
];
|
|
516
|
+
if (isWsolOutput) {
|
|
517
|
+
const quoteMintPk = new web3_js_1.PublicKey(quoteMintStr);
|
|
518
|
+
const outputAta = await (0, spl_token_1.getAssociatedTokenAddress)(quoteMintPk, wallet.publicKey, false, spl_token_1.TOKEN_PROGRAM_ID);
|
|
519
|
+
// Ensure the WSOL output ATA exists
|
|
520
|
+
preIxs.push((0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(wallet.publicKey, outputAta, wallet.publicKey, quoteMintPk, spl_token_1.TOKEN_PROGRAM_ID));
|
|
521
|
+
// After swap, close WSOL ATA to unwrap SOL back to wallet
|
|
522
|
+
const postIxs = [
|
|
523
|
+
(0, spl_token_1.createCloseAccountInstruction)(outputAta, wallet.publicKey, wallet.publicKey, [], spl_token_1.TOKEN_PROGRAM_ID),
|
|
524
|
+
];
|
|
525
|
+
return [...preIxs, ...swapIxs, ...postIxs];
|
|
526
|
+
}
|
|
527
|
+
return [...preIxs, ...swapIxs];
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Detect whether a mint uses Token-2022 or the standard Token program.
|
|
531
|
+
*/
|
|
532
|
+
async getTokenProgramForMint(connection, mint) {
|
|
533
|
+
const info = await connection.getAccountInfo(mint);
|
|
534
|
+
if (!info)
|
|
535
|
+
throw new Error(`Mint account not found: ${mint.toBase58()}`);
|
|
536
|
+
return info.owner.equals(spl_token_1.TOKEN_2022_PROGRAM_ID)
|
|
537
|
+
? spl_token_1.TOKEN_2022_PROGRAM_ID
|
|
538
|
+
: spl_token_1.TOKEN_PROGRAM_ID;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
exports.FusionAmmAdapter = FusionAmmAdapter;
|
|
542
|
+
// ---------------------------------------------------------------------------
|
|
543
|
+
// Auto-register
|
|
544
|
+
// ---------------------------------------------------------------------------
|
|
545
|
+
(0, index_1.registerAdapter)(new FusionAmmAdapter());
|
|
546
|
+
//# sourceMappingURL=fusion-amm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fusion-amm.js","sourceRoot":"","sources":["../../src/dex/fusion-amm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Futarchy AMM — IDexAdapter Implementation
|
|
3
|
+
*
|
|
4
|
+
* Anchor-based DEX using the Futarchy protocol's on-chain AMM.
|
|
5
|
+
* Pools are "DAOs" that embed an AMM with spot/futarchy pool states.
|
|
6
|
+
*
|
|
7
|
+
* Flow:
|
|
8
|
+
* 1. Create Anchor provider + FutarchyAmmSDK
|
|
9
|
+
* 2. Fetch DAO account to get pool state (reserves, mints)
|
|
10
|
+
* 3. Build spotSwap instructions via the SDK
|
|
11
|
+
* 4. Submit via landing layer
|
|
12
|
+
*
|
|
13
|
+
* No sell in source module — only buy/snipe are supported.
|
|
14
|
+
* getPrice reads spot pool reserves from the DAO account.
|
|
15
|
+
*
|
|
16
|
+
* Source: 100x-algo-bots/trading-modules/futarchy-amm/
|
|
17
|
+
*
|
|
18
|
+
* Capabilities: canBuy, canSnipe, canGetPrice
|
|
19
|
+
* Requires: @coral-xyz/anchor
|
|
20
|
+
*/
|
|
21
|
+
import { IDexAdapter, DexCapabilities, BuyParams, SellParams, SnipeParams, SwapResult, PriceInfo, BuildSwapIxsResult } from "./types";
|
|
22
|
+
export declare class FutarchyAmmAdapter implements IDexAdapter {
|
|
23
|
+
readonly name = "futarchy-amm";
|
|
24
|
+
readonly protocol = "futarchy";
|
|
25
|
+
readonly capabilities: DexCapabilities;
|
|
26
|
+
buy(params: BuyParams): Promise<SwapResult>;
|
|
27
|
+
sell(params: SellParams): Promise<SwapResult>;
|
|
28
|
+
snipe(params: SnipeParams): Promise<SwapResult>;
|
|
29
|
+
buildSwapIxs(params: BuyParams | SellParams): Promise<BuildSwapIxsResult>;
|
|
30
|
+
getPrice(poolAddress: string): Promise<PriceInfo>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=futarchy-amm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"futarchy-amm.d.ts","sourceRoot":"","sources":["../../src/dex/futarchy-amm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AA6BH,OAAO,EACL,WAAW,EACX,eAAe,EAEf,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EAEV,SAAS,EACT,kBAAkB,EAQnB,MAAM,SAAS,CAAC;AAoJjB,qBAAa,kBAAmB,YAAW,WAAW;IACpD,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,QAAQ,cAAc;IAC/B,QAAQ,CAAC,YAAY,EAAE,eAAe,CAKnC;IAIG,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IA4F3C,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAmG7C,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAiF/C,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkEzE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAuDxD"}
|