solana-meme-sdk 1.0.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/README.md +160 -0
- package/dist/batch-executor/accounts.d.ts +141 -0
- package/dist/batch-executor/accounts.d.ts.map +1 -0
- package/dist/batch-executor/accounts.js +98 -0
- package/dist/batch-executor/accounts.js.map +1 -0
- package/dist/batch-executor/batch-executor.d.ts +27 -0
- package/dist/batch-executor/batch-executor.d.ts.map +1 -0
- package/dist/batch-executor/batch-executor.js +286 -0
- package/dist/batch-executor/batch-executor.js.map +1 -0
- package/dist/batch-executor/index.d.ts +4 -0
- package/dist/batch-executor/index.d.ts.map +1 -0
- package/dist/batch-executor/index.js +6 -0
- package/dist/batch-executor/index.js.map +1 -0
- package/dist/batch-executor/types.d.ts +87 -0
- package/dist/batch-executor/types.d.ts.map +1 -0
- package/dist/batch-executor/types.js +42 -0
- package/dist/batch-executor/types.js.map +1 -0
- package/dist/constants.d.ts +151 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +189 -0
- package/dist/constants.js.map +1 -0
- package/dist/dex/blockrazor/client.d.ts +52 -0
- package/dist/dex/blockrazor/client.d.ts.map +1 -0
- package/dist/dex/blockrazor/client.js +97 -0
- package/dist/dex/blockrazor/client.js.map +1 -0
- package/dist/dex/blockrazor/constants.d.ts +35 -0
- package/dist/dex/blockrazor/constants.d.ts.map +1 -0
- package/dist/dex/blockrazor/constants.js +56 -0
- package/dist/dex/blockrazor/constants.js.map +1 -0
- package/dist/dex/blockrazor/geyser.d.ts +129 -0
- package/dist/dex/blockrazor/geyser.d.ts.map +1 -0
- package/dist/dex/blockrazor/geyser.js +531 -0
- package/dist/dex/blockrazor/geyser.js.map +1 -0
- package/dist/dex/blockrazor/index.d.ts +19 -0
- package/dist/dex/blockrazor/index.d.ts.map +1 -0
- package/dist/dex/blockrazor/index.js +24 -0
- package/dist/dex/blockrazor/index.js.map +1 -0
- package/dist/dex/blockrazor/send.d.ts +136 -0
- package/dist/dex/blockrazor/send.d.ts.map +1 -0
- package/dist/dex/blockrazor/send.js +255 -0
- package/dist/dex/blockrazor/send.js.map +1 -0
- package/dist/dex/blockrazor/types.d.ts +192 -0
- package/dist/dex/blockrazor/types.d.ts.map +1 -0
- package/dist/dex/blockrazor/types.js +6 -0
- package/dist/dex/blockrazor/types.js.map +1 -0
- package/dist/dex/index.d.ts +11 -0
- package/dist/dex/index.d.ts.map +1 -0
- package/dist/dex/index.js +17 -0
- package/dist/dex/index.js.map +1 -0
- package/dist/dex/jup/client.d.ts +34 -0
- package/dist/dex/jup/client.d.ts.map +1 -0
- package/dist/dex/jup/client.js +111 -0
- package/dist/dex/jup/client.js.map +1 -0
- package/dist/dex/jup/index.d.ts +17 -0
- package/dist/dex/jup/index.d.ts.map +1 -0
- package/dist/dex/jup/index.js +149 -0
- package/dist/dex/jup/index.js.map +1 -0
- package/dist/dex/jup/legacy.d.ts +624 -0
- package/dist/dex/jup/legacy.d.ts.map +1 -0
- package/dist/dex/jup/legacy.js +417 -0
- package/dist/dex/jup/legacy.js.map +1 -0
- package/dist/dex/jup/lend.d.ts +641 -0
- package/dist/dex/jup/lend.d.ts.map +1 -0
- package/dist/dex/jup/lend.js +604 -0
- package/dist/dex/jup/lend.js.map +1 -0
- package/dist/dex/jup/portfolio.d.ts +363 -0
- package/dist/dex/jup/portfolio.d.ts.map +1 -0
- package/dist/dex/jup/portfolio.js +368 -0
- package/dist/dex/jup/portfolio.js.map +1 -0
- package/dist/dex/jup/price.d.ts +174 -0
- package/dist/dex/jup/price.d.ts.map +1 -0
- package/dist/dex/jup/price.js +226 -0
- package/dist/dex/jup/price.js.map +1 -0
- package/dist/dex/jup/recurring.d.ts +438 -0
- package/dist/dex/jup/recurring.d.ts.map +1 -0
- package/dist/dex/jup/recurring.js +321 -0
- package/dist/dex/jup/recurring.js.map +1 -0
- package/dist/dex/jup/send.d.ts +283 -0
- package/dist/dex/jup/send.d.ts.map +1 -0
- package/dist/dex/jup/send.js +296 -0
- package/dist/dex/jup/send.js.map +1 -0
- package/dist/dex/jup/studio.d.ts +458 -0
- package/dist/dex/jup/studio.d.ts.map +1 -0
- package/dist/dex/jup/studio.js +489 -0
- package/dist/dex/jup/studio.js.map +1 -0
- package/dist/dex/jup/tokens.d.ts +768 -0
- package/dist/dex/jup/tokens.d.ts.map +1 -0
- package/dist/dex/jup/tokens.js +698 -0
- package/dist/dex/jup/tokens.js.map +1 -0
- package/dist/dex/jup/trigger.d.ts +512 -0
- package/dist/dex/jup/trigger.d.ts.map +1 -0
- package/dist/dex/jup/trigger.js +398 -0
- package/dist/dex/jup/trigger.js.map +1 -0
- package/dist/dex/jup/types.d.ts +434 -0
- package/dist/dex/jup/types.d.ts.map +1 -0
- package/dist/dex/jup/types.js +6 -0
- package/dist/dex/jup/types.js.map +1 -0
- package/dist/dex/jup/ultra.d.ts +647 -0
- package/dist/dex/jup/ultra.d.ts.map +1 -0
- package/dist/dex/jup/ultra.js +854 -0
- package/dist/dex/jup/ultra.js.map +1 -0
- package/dist/dex/meteora/client.d.ts +77 -0
- package/dist/dex/meteora/client.d.ts.map +1 -0
- package/dist/dex/meteora/client.js +220 -0
- package/dist/dex/meteora/client.js.map +1 -0
- package/dist/dex/meteora/damm-v1-bundle.d.ts +62 -0
- package/dist/dex/meteora/damm-v1-bundle.d.ts.map +1 -0
- package/dist/dex/meteora/damm-v1-bundle.js +113 -0
- package/dist/dex/meteora/damm-v1-bundle.js.map +1 -0
- package/dist/dex/meteora/damm-v1.d.ts +119 -0
- package/dist/dex/meteora/damm-v1.d.ts.map +1 -0
- package/dist/dex/meteora/damm-v1.js +316 -0
- package/dist/dex/meteora/damm-v1.js.map +1 -0
- package/dist/dex/meteora/damm-v2-bundle.d.ts +83 -0
- package/dist/dex/meteora/damm-v2-bundle.d.ts.map +1 -0
- package/dist/dex/meteora/damm-v2-bundle.js +243 -0
- package/dist/dex/meteora/damm-v2-bundle.js.map +1 -0
- package/dist/dex/meteora/damm-v2.d.ts +173 -0
- package/dist/dex/meteora/damm-v2.d.ts.map +1 -0
- package/dist/dex/meteora/damm-v2.js +633 -0
- package/dist/dex/meteora/damm-v2.js.map +1 -0
- package/dist/dex/meteora/dbc-bundle.d.ts +124 -0
- package/dist/dex/meteora/dbc-bundle.d.ts.map +1 -0
- package/dist/dex/meteora/dbc-bundle.js +305 -0
- package/dist/dex/meteora/dbc-bundle.js.map +1 -0
- package/dist/dex/meteora/dbc.d.ts +193 -0
- package/dist/dex/meteora/dbc.d.ts.map +1 -0
- package/dist/dex/meteora/dbc.js +620 -0
- package/dist/dex/meteora/dbc.js.map +1 -0
- package/dist/dex/meteora/dlmm-bundle.d.ts +40 -0
- package/dist/dex/meteora/dlmm-bundle.d.ts.map +1 -0
- package/dist/dex/meteora/dlmm-bundle.js +190 -0
- package/dist/dex/meteora/dlmm-bundle.js.map +1 -0
- package/dist/dex/meteora/dlmm.d.ts +158 -0
- package/dist/dex/meteora/dlmm.d.ts.map +1 -0
- package/dist/dex/meteora/dlmm.js +672 -0
- package/dist/dex/meteora/dlmm.js.map +1 -0
- package/dist/dex/meteora/index.d.ts +26 -0
- package/dist/dex/meteora/index.d.ts.map +1 -0
- package/dist/dex/meteora/index.js +66 -0
- package/dist/dex/meteora/index.js.map +1 -0
- package/dist/dex/meteora/types.d.ts +788 -0
- package/dist/dex/meteora/types.d.ts.map +1 -0
- package/dist/dex/meteora/types.js +111 -0
- package/dist/dex/meteora/types.js.map +1 -0
- package/dist/dex/orca/index.d.ts +11 -0
- package/dist/dex/orca/index.d.ts.map +1 -0
- package/dist/dex/orca/index.js +17 -0
- package/dist/dex/orca/index.js.map +1 -0
- package/dist/dex/orca/orca-bundle.d.ts +42 -0
- package/dist/dex/orca/orca-bundle.d.ts.map +1 -0
- package/dist/dex/orca/orca-bundle.js +174 -0
- package/dist/dex/orca/orca-bundle.js.map +1 -0
- package/dist/dex/orca/orca.d.ts +66 -0
- package/dist/dex/orca/orca.d.ts.map +1 -0
- package/dist/dex/orca/orca.js +475 -0
- package/dist/dex/orca/orca.js.map +1 -0
- package/dist/dex/orca/types.d.ts +264 -0
- package/dist/dex/orca/types.d.ts.map +1 -0
- package/dist/dex/orca/types.js +39 -0
- package/dist/dex/orca/types.js.map +1 -0
- package/dist/dex/orca/wavebreak-bundle.d.ts +35 -0
- package/dist/dex/orca/wavebreak-bundle.d.ts.map +1 -0
- package/dist/dex/orca/wavebreak-bundle.js +199 -0
- package/dist/dex/orca/wavebreak-bundle.js.map +1 -0
- package/dist/dex/orca/wavebreak-types.d.ts +228 -0
- package/dist/dex/orca/wavebreak-types.d.ts.map +1 -0
- package/dist/dex/orca/wavebreak-types.js +24 -0
- package/dist/dex/orca/wavebreak-types.js.map +1 -0
- package/dist/dex/orca/wavebreak.d.ts +79 -0
- package/dist/dex/orca/wavebreak.d.ts.map +1 -0
- package/dist/dex/orca/wavebreak.js +498 -0
- package/dist/dex/orca/wavebreak.js.map +1 -0
- package/dist/dex/pump/index.d.ts +10 -0
- package/dist/dex/pump/index.d.ts.map +1 -0
- package/dist/dex/pump/index.js +15 -0
- package/dist/dex/pump/index.js.map +1 -0
- package/dist/dex/pump/pump-bundle.d.ts +93 -0
- package/dist/dex/pump/pump-bundle.d.ts.map +1 -0
- package/dist/dex/pump/pump-bundle.js +384 -0
- package/dist/dex/pump/pump-bundle.js.map +1 -0
- package/dist/dex/pump/pump-swap-bundle.d.ts +104 -0
- package/dist/dex/pump/pump-swap-bundle.d.ts.map +1 -0
- package/dist/dex/pump/pump-swap-bundle.js +381 -0
- package/dist/dex/pump/pump-swap-bundle.js.map +1 -0
- package/dist/dex/pump/pump-swap.d.ts +47 -0
- package/dist/dex/pump/pump-swap.d.ts.map +1 -0
- package/dist/dex/pump/pump-swap.js +200 -0
- package/dist/dex/pump/pump-swap.js.map +1 -0
- package/dist/dex/pump/pump.d.ts +36 -0
- package/dist/dex/pump/pump.d.ts.map +1 -0
- package/dist/dex/pump/pump.js +353 -0
- package/dist/dex/pump/pump.js.map +1 -0
- package/dist/dex/pump/types.d.ts +216 -0
- package/dist/dex/pump/types.d.ts.map +1 -0
- package/dist/dex/pump/types.js +6 -0
- package/dist/dex/pump/types.js.map +1 -0
- package/dist/dex/raydium/index.d.ts +9 -0
- package/dist/dex/raydium/index.d.ts.map +1 -0
- package/dist/dex/raydium/index.js +13 -0
- package/dist/dex/raydium/index.js.map +1 -0
- package/dist/dex/raydium/launchlab.d.ts +69 -0
- package/dist/dex/raydium/launchlab.d.ts.map +1 -0
- package/dist/dex/raydium/launchlab.js +211 -0
- package/dist/dex/raydium/launchlab.js.map +1 -0
- package/dist/dex/raydium/raydium-bundle.d.ts +65 -0
- package/dist/dex/raydium/raydium-bundle.d.ts.map +1 -0
- package/dist/dex/raydium/raydium-bundle.js +325 -0
- package/dist/dex/raydium/raydium-bundle.js.map +1 -0
- package/dist/dex/raydium/raydium.d.ts +41 -0
- package/dist/dex/raydium/raydium.d.ts.map +1 -0
- package/dist/dex/raydium/raydium.js +367 -0
- package/dist/dex/raydium/raydium.js.map +1 -0
- package/dist/dex/raydium/types.d.ts +241 -0
- package/dist/dex/raydium/types.d.ts.map +1 -0
- package/dist/dex/raydium/types.js +6 -0
- package/dist/dex/raydium/types.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/jito/bundle.d.ts +91 -0
- package/dist/jito/bundle.d.ts.map +1 -0
- package/dist/jito/bundle.js +267 -0
- package/dist/jito/bundle.js.map +1 -0
- package/dist/jito/index.d.ts +8 -0
- package/dist/jito/index.d.ts.map +1 -0
- package/dist/jito/index.js +8 -0
- package/dist/jito/index.js.map +1 -0
- package/dist/jito/tip.d.ts +52 -0
- package/dist/jito/tip.d.ts.map +1 -0
- package/dist/jito/tip.js +84 -0
- package/dist/jito/tip.js.map +1 -0
- package/dist/jito/types.d.ts +101 -0
- package/dist/jito/types.d.ts.map +1 -0
- package/dist/jito/types.js +6 -0
- package/dist/jito/types.js.map +1 -0
- package/dist/nozomi/client.d.ts +64 -0
- package/dist/nozomi/client.d.ts.map +1 -0
- package/dist/nozomi/client.js +228 -0
- package/dist/nozomi/client.js.map +1 -0
- package/dist/nozomi/index.d.ts +9 -0
- package/dist/nozomi/index.d.ts.map +1 -0
- package/dist/nozomi/index.js +9 -0
- package/dist/nozomi/index.js.map +1 -0
- package/dist/nozomi/tip.d.ts +51 -0
- package/dist/nozomi/tip.d.ts.map +1 -0
- package/dist/nozomi/tip.js +81 -0
- package/dist/nozomi/tip.js.map +1 -0
- package/dist/nozomi/types.d.ts +97 -0
- package/dist/nozomi/types.d.ts.map +1 -0
- package/dist/nozomi/types.js +6 -0
- package/dist/nozomi/types.js.map +1 -0
- package/dist/token/create-complete.d.ts +116 -0
- package/dist/token/create-complete.d.ts.map +1 -0
- package/dist/token/create-complete.js +236 -0
- package/dist/token/create-complete.js.map +1 -0
- package/dist/token/create-token.d.ts +58 -0
- package/dist/token/create-token.d.ts.map +1 -0
- package/dist/token/create-token.js +231 -0
- package/dist/token/create-token.js.map +1 -0
- package/dist/token/index.d.ts +10 -0
- package/dist/token/index.d.ts.map +1 -0
- package/dist/token/index.js +15 -0
- package/dist/token/index.js.map +1 -0
- package/dist/token/metadata-upload.d.ts +87 -0
- package/dist/token/metadata-upload.d.ts.map +1 -0
- package/dist/token/metadata-upload.js +176 -0
- package/dist/token/metadata-upload.js.map +1 -0
- package/dist/token/metadata.d.ts +93 -0
- package/dist/token/metadata.d.ts.map +1 -0
- package/dist/token/metadata.js +275 -0
- package/dist/token/metadata.js.map +1 -0
- package/dist/token/types.d.ts +154 -0
- package/dist/token/types.d.ts.map +1 -0
- package/dist/token/types.js +6 -0
- package/dist/token/types.js.map +1 -0
- package/dist/types.d.ts +177 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/alt.d.ts +58 -0
- package/dist/utils/alt.d.ts.map +1 -0
- package/dist/utils/alt.js +125 -0
- package/dist/utils/alt.js.map +1 -0
- package/dist/utils/balance.d.ts +161 -0
- package/dist/utils/balance.d.ts.map +1 -0
- package/dist/utils/balance.js +639 -0
- package/dist/utils/balance.js.map +1 -0
- package/dist/utils/batch-swap.d.ts +52 -0
- package/dist/utils/batch-swap.d.ts.map +1 -0
- package/dist/utils/batch-swap.js +286 -0
- package/dist/utils/batch-swap.js.map +1 -0
- package/dist/utils/batch-types.d.ts +90 -0
- package/dist/utils/batch-types.d.ts.map +1 -0
- package/dist/utils/batch-types.js +7 -0
- package/dist/utils/batch-types.js.map +1 -0
- package/dist/utils/connection.d.ts +79 -0
- package/dist/utils/connection.d.ts.map +1 -0
- package/dist/utils/connection.js +169 -0
- package/dist/utils/connection.js.map +1 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +14 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/lp-inspect.d.ts +81 -0
- package/dist/utils/lp-inspect.d.ts.map +1 -0
- package/dist/utils/lp-inspect.js +265 -0
- package/dist/utils/lp-inspect.js.map +1 -0
- package/dist/utils/transfer.d.ts +197 -0
- package/dist/utils/transfer.d.ts.map +1 -0
- package/dist/utils/transfer.js +308 -0
- package/dist/utils/transfer.js.map +1 -0
- package/dist/utils/wallet.d.ts +108 -0
- package/dist/utils/wallet.d.ts.map +1 -0
- package/dist/utils/wallet.js +211 -0
- package/dist/utils/wallet.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solana RPC 连接管理
|
|
3
|
+
* @module sol/utils/connection
|
|
4
|
+
*/
|
|
5
|
+
import { Connection, PublicKey } from '@solana/web3.js';
|
|
6
|
+
import { TX_CONFIG, lamportsToSol } from '../constants.js';
|
|
7
|
+
/**
|
|
8
|
+
* 创建 Solana 连接
|
|
9
|
+
*
|
|
10
|
+
* 重要:必须传入用户选择的 RPC URL,SDK 不提供默认 RPC
|
|
11
|
+
* 前端应从 RPC 设置中获取用户配置的节点
|
|
12
|
+
*
|
|
13
|
+
* @param rpcUrl RPC URL(必填)
|
|
14
|
+
* @param commitment Commitment 级别(可选,默认 confirmed)
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const connection = createConnection('https://user-selected-rpc.com')
|
|
18
|
+
*
|
|
19
|
+
* @throws Error 如果没有传入 rpcUrl
|
|
20
|
+
*/
|
|
21
|
+
export function createConnection(rpcUrl, commitment = TX_CONFIG.DEFAULT_COMMITMENT) {
|
|
22
|
+
if (!rpcUrl) {
|
|
23
|
+
throw new Error('RPC URL is required. Please pass the user-configured RPC URL from frontend settings.');
|
|
24
|
+
}
|
|
25
|
+
return new Connection(rpcUrl, {
|
|
26
|
+
commitment,
|
|
27
|
+
confirmTransactionInitialTimeout: TX_CONFIG.CONFIRMATION_TIMEOUT,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 获取账户 SOL 余额
|
|
32
|
+
* @param connection Solana 连接
|
|
33
|
+
* @param address 账户地址
|
|
34
|
+
* @returns 余额(lamports)
|
|
35
|
+
*/
|
|
36
|
+
export async function getBalance(connection, address) {
|
|
37
|
+
try {
|
|
38
|
+
const publicKey = new PublicKey(address);
|
|
39
|
+
const balance = await connection.getBalance(publicKey);
|
|
40
|
+
return BigInt(balance);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
throw new Error(`Failed to get balance: ${error.message}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 获取账户 SOL 余额(格式化)
|
|
48
|
+
* @param connection Solana 连接
|
|
49
|
+
* @param address 账户地址
|
|
50
|
+
* @returns 余额(SOL)
|
|
51
|
+
*/
|
|
52
|
+
export async function getBalanceInSol(connection, address) {
|
|
53
|
+
const lamports = await getBalance(connection, address);
|
|
54
|
+
return lamportsToSol(lamports);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 获取最新 blockhash
|
|
58
|
+
* @param connection Solana 连接
|
|
59
|
+
*/
|
|
60
|
+
export async function getLatestBlockhash(connection) {
|
|
61
|
+
try {
|
|
62
|
+
const result = await connection.getLatestBlockhash('finalized');
|
|
63
|
+
return {
|
|
64
|
+
blockhash: result.blockhash,
|
|
65
|
+
lastValidBlockHeight: result.lastValidBlockHeight,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
throw new Error(`Failed to get blockhash: ${error.message}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 获取当前 slot
|
|
74
|
+
* @param connection Solana 连接
|
|
75
|
+
*/
|
|
76
|
+
export async function getCurrentSlot(connection) {
|
|
77
|
+
try {
|
|
78
|
+
return await connection.getSlot();
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
throw new Error(`Failed to get slot: ${error.message}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 检查账户是否存在
|
|
86
|
+
* @param connection Solana 连接
|
|
87
|
+
* @param address 账户地址
|
|
88
|
+
*/
|
|
89
|
+
export async function accountExists(connection, address) {
|
|
90
|
+
try {
|
|
91
|
+
const publicKey = new PublicKey(address);
|
|
92
|
+
const accountInfo = await connection.getAccountInfo(publicKey);
|
|
93
|
+
return accountInfo !== null;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 获取账户信息
|
|
101
|
+
* @param connection Solana 连接
|
|
102
|
+
* @param address 账户地址
|
|
103
|
+
*/
|
|
104
|
+
export async function getAccountInfo(connection, address) {
|
|
105
|
+
try {
|
|
106
|
+
const publicKey = new PublicKey(address);
|
|
107
|
+
return await connection.getAccountInfo(publicKey);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
throw new Error(`Failed to get account info: ${error.message}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 获取最小租金豁免余额
|
|
115
|
+
* @param connection Solana 连接
|
|
116
|
+
* @param dataSize 账户数据大小
|
|
117
|
+
*/
|
|
118
|
+
export async function getMinimumBalanceForRentExemption(connection, dataSize) {
|
|
119
|
+
try {
|
|
120
|
+
const lamports = await connection.getMinimumBalanceForRentExemption(dataSize);
|
|
121
|
+
return BigInt(lamports);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
throw new Error(`Failed to get rent exemption: ${error.message}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* 等待交易确认
|
|
129
|
+
* @param connection Solana 连接
|
|
130
|
+
* @param signature 交易签名
|
|
131
|
+
* @param timeout 超时时间(毫秒)
|
|
132
|
+
*/
|
|
133
|
+
export async function waitForConfirmation(connection, signature, timeout = TX_CONFIG.CONFIRMATION_TIMEOUT) {
|
|
134
|
+
try {
|
|
135
|
+
const result = await connection.confirmTransaction({
|
|
136
|
+
signature,
|
|
137
|
+
blockhash: (await getLatestBlockhash(connection)).blockhash,
|
|
138
|
+
lastValidBlockHeight: (await getLatestBlockhash(connection)).lastValidBlockHeight,
|
|
139
|
+
}, 'confirmed');
|
|
140
|
+
return !result.value.err;
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
console.error(`Transaction confirmation failed: ${error.message}`);
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 获取交易状态
|
|
149
|
+
* @param connection Solana 连接
|
|
150
|
+
* @param signature 交易签名
|
|
151
|
+
*/
|
|
152
|
+
export async function getTransactionStatus(connection, signature) {
|
|
153
|
+
try {
|
|
154
|
+
const status = await connection.getSignatureStatus(signature);
|
|
155
|
+
if (!status.value)
|
|
156
|
+
return 'pending';
|
|
157
|
+
if (status.value.err)
|
|
158
|
+
return 'failed';
|
|
159
|
+
if (status.value.confirmationStatus === 'confirmed' ||
|
|
160
|
+
status.value.confirmationStatus === 'finalized') {
|
|
161
|
+
return 'confirmed';
|
|
162
|
+
}
|
|
163
|
+
return 'pending';
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return 'pending';
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/utils/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solana 工具函数导出
|
|
3
|
+
* @module sol/utils
|
|
4
|
+
*/
|
|
5
|
+
export * from './connection.js';
|
|
6
|
+
export * from './wallet.js';
|
|
7
|
+
export * from './transfer.js';
|
|
8
|
+
export * from './balance.js';
|
|
9
|
+
export * from './lp-inspect.js';
|
|
10
|
+
export * from './alt.js';
|
|
11
|
+
export * from './batch-types.js';
|
|
12
|
+
export * from './batch-swap.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solana 工具函数导出
|
|
3
|
+
* @module sol/utils
|
|
4
|
+
*/
|
|
5
|
+
export * from './connection.js';
|
|
6
|
+
export * from './wallet.js';
|
|
7
|
+
export * from './transfer.js';
|
|
8
|
+
export * from './balance.js';
|
|
9
|
+
export * from './lp-inspect.js';
|
|
10
|
+
// Batch Swap + ALT
|
|
11
|
+
export * from './alt.js';
|
|
12
|
+
export * from './batch-types.js';
|
|
13
|
+
export * from './batch-swap.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAEhC,mBAAmB;AACnB,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solana LP 检测工具
|
|
3
|
+
* 自动判断代币在哪个平台(内盘/外盘)
|
|
4
|
+
* @module sol/utils/lp-inspect
|
|
5
|
+
*/
|
|
6
|
+
import { Connection } from '@solana/web3.js';
|
|
7
|
+
/** Solana LP 平台类型 */
|
|
8
|
+
export type SolanaLPPlatform = 'PUMP_BONDING_CURVE' | 'METEORA_DBC' | 'RAYDIUM_LAUNCHLAB' | 'JUPITER_AGGREGATED' | 'PUMP_SWAP' | 'MULTI_POOL' | 'UNKNOWN';
|
|
9
|
+
/** 内盘(Bonding Curve)信息 */
|
|
10
|
+
export interface SolanaBondingCurveInfo {
|
|
11
|
+
type: 'pump' | 'meteora_dbc' | 'raydium_launchlab';
|
|
12
|
+
address: string;
|
|
13
|
+
complete: boolean;
|
|
14
|
+
reserveQuote: string;
|
|
15
|
+
reserveQuoteRaw: bigint;
|
|
16
|
+
reserveToken: string;
|
|
17
|
+
reserveTokenRaw: bigint;
|
|
18
|
+
realQuoteReserve?: string;
|
|
19
|
+
realQuoteReserveRaw?: bigint;
|
|
20
|
+
realTokenReserve?: string;
|
|
21
|
+
realTokenReserveRaw?: bigint;
|
|
22
|
+
liquidity?: number;
|
|
23
|
+
price?: number;
|
|
24
|
+
progress?: number;
|
|
25
|
+
creator?: string;
|
|
26
|
+
}
|
|
27
|
+
/** 外盘池子信息 (整合 Jupiter 数据) */
|
|
28
|
+
export interface SolanaPoolInfo {
|
|
29
|
+
platform: SolanaLPPlatform;
|
|
30
|
+
poolAddress: string;
|
|
31
|
+
quoteToken: string;
|
|
32
|
+
quoteSymbol: string;
|
|
33
|
+
quoteDecimals: number;
|
|
34
|
+
baseToken: string;
|
|
35
|
+
reserveQuote: string;
|
|
36
|
+
reserveQuoteRaw: bigint;
|
|
37
|
+
price?: number;
|
|
38
|
+
mcap?: number;
|
|
39
|
+
liquidity?: number;
|
|
40
|
+
fdv?: number;
|
|
41
|
+
isVerified?: boolean;
|
|
42
|
+
extra?: Record<string, any>;
|
|
43
|
+
}
|
|
44
|
+
/** Solana LP 检测结果 */
|
|
45
|
+
export interface SolanaLPInfo {
|
|
46
|
+
mint: string;
|
|
47
|
+
platform: SolanaLPPlatform;
|
|
48
|
+
decimals?: number;
|
|
49
|
+
totalSupply?: string;
|
|
50
|
+
totalSupplyRaw?: bigint;
|
|
51
|
+
bondingCurve?: SolanaBondingCurveInfo;
|
|
52
|
+
bestPool?: SolanaPoolInfo;
|
|
53
|
+
pools: SolanaPoolInfo[];
|
|
54
|
+
elapsed?: number;
|
|
55
|
+
}
|
|
56
|
+
/** 检测选项 */
|
|
57
|
+
export interface SolanaInspectOptions {
|
|
58
|
+
rpcUrl?: string;
|
|
59
|
+
connection?: Connection;
|
|
60
|
+
skipBondingCurve?: boolean;
|
|
61
|
+
skipPools?: boolean;
|
|
62
|
+
debug?: boolean;
|
|
63
|
+
timeout?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 检测 Solana 代币的 LP 信息
|
|
67
|
+
*/
|
|
68
|
+
export declare function inspectSolanaTokenLP(mint: string, options?: SolanaInspectOptions): Promise<SolanaLPInfo>;
|
|
69
|
+
/**
|
|
70
|
+
* 快速检测代币是否在内盘
|
|
71
|
+
*/
|
|
72
|
+
export declare function detectBondingCurve(mint: string, options?: SolanaInspectOptions): Promise<SolanaBondingCurveInfo | null>;
|
|
73
|
+
/**
|
|
74
|
+
* 获取代币流动性 (USD)
|
|
75
|
+
*/
|
|
76
|
+
export declare function getTokenLiquidity(mint: string, options?: SolanaInspectOptions): Promise<number>;
|
|
77
|
+
/**
|
|
78
|
+
* 判断代币是否已毕业
|
|
79
|
+
*/
|
|
80
|
+
export declare function isTokenGraduated(mint: string, options?: SolanaInspectOptions): Promise<boolean>;
|
|
81
|
+
//# sourceMappingURL=lp-inspect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lp-inspect.d.ts","sourceRoot":"","sources":["../../src/utils/lp-inspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solana LP 检测工具
|
|
3
|
+
* 自动判断代币在哪个平台(内盘/外盘)
|
|
4
|
+
* @module sol/utils/lp-inspect
|
|
5
|
+
*/
|
|
6
|
+
import { PublicKey } from '@solana/web3.js';
|
|
7
|
+
import { createConnection } from './connection.js';
|
|
8
|
+
import { getTokenInfoV2 } from '../dex/jup/tokens.js';
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// 常量
|
|
11
|
+
// ============================================================================
|
|
12
|
+
const WSOL = 'So11111111111111111111111111111111111111112';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// 内盘检测
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* 检测 Pump.fun Bonding Curve
|
|
18
|
+
*/
|
|
19
|
+
async function detectPumpBondingCurve(mint, connection, debug) {
|
|
20
|
+
try {
|
|
21
|
+
const { getBondingCurveInfo } = await import('../dex/pump/pump.js');
|
|
22
|
+
const info = await getBondingCurveInfo(connection, mint);
|
|
23
|
+
if (!info)
|
|
24
|
+
return null;
|
|
25
|
+
// Pump.fun graduation: bonding curve graduates when 800M tokens are sold.
|
|
26
|
+
// Initial virtual tokens is approx 1,073,000,000. Graduation is at approx 273,000,000.
|
|
27
|
+
// We use a more robust token-based progress calculation which matches industry tools.
|
|
28
|
+
const TOTAL_TOKENS_FOR_SALE = 793100000000000n; // Approx 793M tokens with 6 decimals
|
|
29
|
+
const tokensSold = 1073000000000000n - info.virtualTokenReserves;
|
|
30
|
+
const progress = Math.min(100, Number(tokensSold * 10000n / TOTAL_TOKENS_FOR_SALE) / 100);
|
|
31
|
+
return {
|
|
32
|
+
type: 'pump',
|
|
33
|
+
address: info.bondingCurve,
|
|
34
|
+
complete: info.complete,
|
|
35
|
+
reserveQuote: (Number(info.virtualSolReserves) / 1e9).toFixed(4),
|
|
36
|
+
reserveQuoteRaw: info.virtualSolReserves,
|
|
37
|
+
reserveToken: (Number(info.virtualTokenReserves) / 1e6).toFixed(0),
|
|
38
|
+
reserveTokenRaw: info.virtualTokenReserves,
|
|
39
|
+
realQuoteReserve: (Number(info.realSolReserves) / 1e9).toFixed(4),
|
|
40
|
+
realQuoteReserveRaw: info.realSolReserves,
|
|
41
|
+
realTokenReserve: (Number(info.realTokenReserves) / 1e6).toFixed(0),
|
|
42
|
+
realTokenReserveRaw: info.realTokenReserves,
|
|
43
|
+
price: info.virtualTokenReserves > 0n ? Number(info.virtualSolReserves) / Number(info.virtualTokenReserves) * 1e3 : 0,
|
|
44
|
+
progress,
|
|
45
|
+
creator: info.creator,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (debug)
|
|
50
|
+
console.log('[LP Inspect] Pump bonding curve check failed:', err);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 检测 Meteora DBC
|
|
56
|
+
*/
|
|
57
|
+
async function detectMeteoraDbc(mint, connection, debug) {
|
|
58
|
+
try {
|
|
59
|
+
const { findDbcPoolByBaseMint, getDbcPoolInfo } = await import('../dex/meteora/dbc.js');
|
|
60
|
+
const poolAddress = await findDbcPoolByBaseMint(mint, connection);
|
|
61
|
+
if (!poolAddress)
|
|
62
|
+
return null;
|
|
63
|
+
const poolInfo = await getDbcPoolInfo(poolAddress, connection);
|
|
64
|
+
return {
|
|
65
|
+
type: 'meteora_dbc',
|
|
66
|
+
address: poolAddress,
|
|
67
|
+
complete: poolInfo.isMigrated,
|
|
68
|
+
reserveQuote: poolInfo.quoteReserve,
|
|
69
|
+
reserveQuoteRaw: BigInt(poolInfo.quoteReserve),
|
|
70
|
+
reserveToken: poolInfo.baseReserve,
|
|
71
|
+
reserveTokenRaw: BigInt(poolInfo.baseReserve),
|
|
72
|
+
realQuoteReserve: poolInfo.quoteReserve,
|
|
73
|
+
realQuoteReserveRaw: BigInt(poolInfo.quoteReserve),
|
|
74
|
+
realTokenReserve: poolInfo.baseReserve,
|
|
75
|
+
realTokenReserveRaw: BigInt(poolInfo.baseReserve),
|
|
76
|
+
price: poolInfo.currentPrice,
|
|
77
|
+
progress: poolInfo.progressPercent,
|
|
78
|
+
creator: poolInfo.creator,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
if (debug)
|
|
83
|
+
console.log('[LP Inspect] Meteora DBC check failed:', err);
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 检测 Raydium LaunchLab
|
|
89
|
+
*/
|
|
90
|
+
async function detectRaydiumLaunchLab(mint, connection, debug) {
|
|
91
|
+
try {
|
|
92
|
+
const { LaunchpadPool, LaunchpadConfig, getPdaLaunchpadPoolId, LAUNCHPAD_PROGRAM, Curve, } = await import('@raydium-io/raydium-sdk-v2');
|
|
93
|
+
const { NATIVE_MINT } = await import('@solana/spl-token');
|
|
94
|
+
const poolId = getPdaLaunchpadPoolId(LAUNCHPAD_PROGRAM, new PublicKey(mint), NATIVE_MINT).publicKey;
|
|
95
|
+
const poolAccountInfo = await connection.getAccountInfo(poolId);
|
|
96
|
+
if (!poolAccountInfo)
|
|
97
|
+
return null;
|
|
98
|
+
const poolInfo = LaunchpadPool.decode(poolAccountInfo.data);
|
|
99
|
+
const configAccountInfo = await connection.getAccountInfo(poolInfo.configId);
|
|
100
|
+
if (!configAccountInfo)
|
|
101
|
+
return null;
|
|
102
|
+
const configInfo = LaunchpadConfig.decode(configAccountInfo.data);
|
|
103
|
+
const currentPrice = Curve.getPrice({
|
|
104
|
+
poolInfo,
|
|
105
|
+
curveType: configInfo.curveType,
|
|
106
|
+
decimalA: poolInfo.mintDecimalsA,
|
|
107
|
+
decimalB: poolInfo.mintDecimalsB,
|
|
108
|
+
}).toNumber();
|
|
109
|
+
const isMigrated = poolInfo.status !== undefined && poolInfo.status >= 2;
|
|
110
|
+
// Progress calculation for Raydium LaunchLab
|
|
111
|
+
const target = BigInt(poolInfo.totalFundRaisingB?.toString() || '0');
|
|
112
|
+
const current = BigInt(poolInfo.realB?.toString() || '0');
|
|
113
|
+
const progress = target > 0n ? Math.min(100, Number(current * 10000n / target) / 100) : 0;
|
|
114
|
+
return {
|
|
115
|
+
type: 'raydium_launchlab',
|
|
116
|
+
address: poolId.toBase58(),
|
|
117
|
+
complete: isMigrated,
|
|
118
|
+
reserveQuote: (Number(poolInfo.realB || 0) / 1e9).toFixed(4),
|
|
119
|
+
reserveQuoteRaw: current,
|
|
120
|
+
reserveToken: (Number(poolInfo.realA || 0) / (10 ** poolInfo.mintDecimalsA)).toFixed(0),
|
|
121
|
+
reserveTokenRaw: BigInt(poolInfo.realA?.toString() || '0'),
|
|
122
|
+
realQuoteReserve: (Number(poolInfo.realB || 0) / 1e9).toFixed(4),
|
|
123
|
+
realQuoteReserveRaw: current,
|
|
124
|
+
price: currentPrice,
|
|
125
|
+
progress: progress,
|
|
126
|
+
creator: poolInfo.creator?.toBase58(),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
if (debug)
|
|
131
|
+
console.log('[LP Inspect] Raydium LaunchLab check failed:', err);
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// ============================================================================
|
|
136
|
+
// 外盘检测 (Jupiter API)
|
|
137
|
+
// ============================================================================
|
|
138
|
+
/**
|
|
139
|
+
* 使用 Jupiter API 检测外盘信息
|
|
140
|
+
*/
|
|
141
|
+
async function detectWithJupiter(mint, debug) {
|
|
142
|
+
try {
|
|
143
|
+
const info = await getTokenInfoV2(mint);
|
|
144
|
+
if (!info || !info.liquidity || info.liquidity < 100) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
platform: 'JUPITER_AGGREGATED',
|
|
149
|
+
poolAddress: info.graduatedPool || '',
|
|
150
|
+
quoteToken: WSOL,
|
|
151
|
+
quoteSymbol: 'SOL',
|
|
152
|
+
quoteDecimals: 9,
|
|
153
|
+
baseToken: mint,
|
|
154
|
+
reserveQuote: info.liquidity.toFixed(2),
|
|
155
|
+
reserveQuoteRaw: BigInt(Math.floor(info.liquidity)),
|
|
156
|
+
price: info.usdPrice ?? undefined,
|
|
157
|
+
mcap: info.mcap ?? undefined,
|
|
158
|
+
liquidity: info.liquidity,
|
|
159
|
+
fdv: info.fdv ?? undefined,
|
|
160
|
+
isVerified: info.isVerified ?? false,
|
|
161
|
+
extra: {
|
|
162
|
+
launchpad: info.launchpad,
|
|
163
|
+
organicScore: info.organicScore,
|
|
164
|
+
stats24h: info.stats24h,
|
|
165
|
+
reserveBase: info.liquidity && info.usdPrice ? (info.liquidity / 2 / info.usdPrice).toString() : undefined,
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
if (debug)
|
|
171
|
+
console.log('[LP Inspect] Jupiter check failed:', err);
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// ============================================================================
|
|
176
|
+
// 主函数
|
|
177
|
+
// ============================================================================
|
|
178
|
+
/**
|
|
179
|
+
* 检测 Solana 代币的 LP 信息
|
|
180
|
+
*/
|
|
181
|
+
export async function inspectSolanaTokenLP(mint, options = {}) {
|
|
182
|
+
const startTime = Date.now();
|
|
183
|
+
const connection = options.connection || createConnection(options.rpcUrl);
|
|
184
|
+
const debug = options.debug;
|
|
185
|
+
const result = {
|
|
186
|
+
mint,
|
|
187
|
+
platform: 'UNKNOWN',
|
|
188
|
+
pools: [],
|
|
189
|
+
};
|
|
190
|
+
// 0. 获取代币基本信息
|
|
191
|
+
try {
|
|
192
|
+
const mintInfo = await connection.getParsedAccountInfo(new PublicKey(mint));
|
|
193
|
+
if (mintInfo.value?.data && 'parsed' in mintInfo.value.data) {
|
|
194
|
+
const parsed = mintInfo.value.data.parsed;
|
|
195
|
+
result.decimals = parsed.info.decimals;
|
|
196
|
+
result.totalSupplyRaw = BigInt(parsed.info.supply);
|
|
197
|
+
result.totalSupply = (Number(result.totalSupplyRaw) / Math.pow(10, result.decimals)).toString();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch { }
|
|
201
|
+
// 1. 内盘检测
|
|
202
|
+
if (!options.skipBondingCurve) {
|
|
203
|
+
const [pump, meteora, raydium] = await Promise.all([
|
|
204
|
+
detectPumpBondingCurve(mint, connection, debug),
|
|
205
|
+
detectMeteoraDbc(mint, connection, debug),
|
|
206
|
+
detectRaydiumLaunchLab(mint, connection, debug),
|
|
207
|
+
]);
|
|
208
|
+
const bc = pump || meteora || raydium;
|
|
209
|
+
if (bc && !bc.complete) {
|
|
210
|
+
// 计算内盘估算流动性 (USD)
|
|
211
|
+
try {
|
|
212
|
+
const { getSolPrice } = await import('../dex/jup/price.js');
|
|
213
|
+
const solPrice = await getSolPrice();
|
|
214
|
+
if (solPrice) {
|
|
215
|
+
const realSol = Number(bc.realQuoteReserve || 0);
|
|
216
|
+
bc.liquidity = realSol * solPrice * 2; // 简单估算:SOL价值 * 2
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch { }
|
|
220
|
+
result.bondingCurve = bc;
|
|
221
|
+
result.platform = bc.type === 'pump' ? 'PUMP_BONDING_CURVE' :
|
|
222
|
+
bc.type === 'meteora_dbc' ? 'METEORA_DBC' : 'RAYDIUM_LAUNCHLAB';
|
|
223
|
+
result.elapsed = Date.now() - startTime;
|
|
224
|
+
return result;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// 2. 外盘检测 (Jupiter)
|
|
228
|
+
if (!options.skipPools) {
|
|
229
|
+
const jupPool = await detectWithJupiter(mint, debug);
|
|
230
|
+
if (jupPool) {
|
|
231
|
+
result.bestPool = jupPool;
|
|
232
|
+
result.pools = [jupPool];
|
|
233
|
+
result.platform = jupPool.platform;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
result.elapsed = Date.now() - startTime;
|
|
237
|
+
return result;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* 快速检测代币是否在内盘
|
|
241
|
+
*/
|
|
242
|
+
export async function detectBondingCurve(mint, options = {}) {
|
|
243
|
+
const connection = options.connection || createConnection(options.rpcUrl);
|
|
244
|
+
const results = await Promise.all([
|
|
245
|
+
detectPumpBondingCurve(mint, connection, options.debug),
|
|
246
|
+
detectMeteoraDbc(mint, connection, options.debug),
|
|
247
|
+
detectRaydiumLaunchLab(mint, connection, options.debug),
|
|
248
|
+
]);
|
|
249
|
+
return results.find(r => r && !r.complete) || null;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* 获取代币流动性 (USD)
|
|
253
|
+
*/
|
|
254
|
+
export async function getTokenLiquidity(mint, options = {}) {
|
|
255
|
+
const info = await inspectSolanaTokenLP(mint, options);
|
|
256
|
+
return info.bestPool?.liquidity || 0;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* 判断代币是否已毕业
|
|
260
|
+
*/
|
|
261
|
+
export async function isTokenGraduated(mint, options = {}) {
|
|
262
|
+
const bc = await detectBondingCurve(mint, options);
|
|
263
|
+
return bc === null;
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=lp-inspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lp-inspect.js","sourceRoot":"","sources":["../../src/utils/lp-inspect.ts"],"names":[],"mappings":"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"}
|