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,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batch Swap 实现
|
|
3
|
+
* 单交易 + ALT + 多钱包 Swap
|
|
4
|
+
* @module sol/utils/batch-swap
|
|
5
|
+
*/
|
|
6
|
+
import { Connection } from '@solana/web3.js';
|
|
7
|
+
import type { AtomicBatchSwapParams, BatchSwapResult } from './batch-types.js';
|
|
8
|
+
/**
|
|
9
|
+
* 执行 Batch Swap (Pump.fun)
|
|
10
|
+
* 使用单交易 + ALT 实现多钱包原子性 Swap
|
|
11
|
+
*
|
|
12
|
+
* 返回两个交易,用户需要按顺序广播:
|
|
13
|
+
* 1. altCreateTx - ALT 创建交易
|
|
14
|
+
* 2. swapTx - 主 Swap 交易 (需等待 ALT 激活后再发送)
|
|
15
|
+
*
|
|
16
|
+
* @param connection Solana 连接
|
|
17
|
+
* @param params Batch Swap 参数
|
|
18
|
+
* @returns Batch Swap 结果 (包含两个交易)
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* const result = await batchSwapPump(connection, {
|
|
23
|
+
* mint: 'TOKEN_MINT',
|
|
24
|
+
* isBuy: true,
|
|
25
|
+
* swaps: [
|
|
26
|
+
* { wallet: wallet1, solAmount: 100_000_000n }, // 0.1 SOL
|
|
27
|
+
* { wallet: wallet2, solAmount: 200_000_000n }, // 0.2 SOL
|
|
28
|
+
* ],
|
|
29
|
+
* slippageBps: 100,
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* if (result.success) {
|
|
33
|
+
* // 步骤 1: 发送 ALT 创建交易
|
|
34
|
+
* await connection.sendTransaction(result.altCreateTx!);
|
|
35
|
+
*
|
|
36
|
+
* // 步骤 2: 等待 ALT 激活 (约 1 slot)
|
|
37
|
+
* await waitForALTActivation(connection, result.altInfo!.publicKey);
|
|
38
|
+
*
|
|
39
|
+
* // 步骤 3: 发送 Swap 交易
|
|
40
|
+
* await connection.sendTransaction(result.swapTx!);
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function batchSwapPump(connection: Connection, params: AtomicBatchSwapParams): Promise<BatchSwapResult>;
|
|
45
|
+
/**
|
|
46
|
+
* 快速 Batch Swap (不创建 ALT,仅适用于少量钱包)
|
|
47
|
+
* 适用于 3-5 个钱包的情况,不需要 ALT
|
|
48
|
+
*
|
|
49
|
+
* @returns 只返回 swapTx,无需 ALT 创建
|
|
50
|
+
*/
|
|
51
|
+
export declare function quickBatchSwapPump(connection: Connection, params: AtomicBatchSwapParams): Promise<BatchSwapResult>;
|
|
52
|
+
//# sourceMappingURL=batch-swap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-swap.d.ts","sourceRoot":"","sources":["../../src/utils/batch-swap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,UAAU,EAMb,MAAM,iBAAiB,CAAC;AAiBzB,OAAO,KAAK,EACR,qBAAqB,EACrB,eAAe,EAGlB,MAAM,kBAAkB,CAAC;AA0I1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,aAAa,CAC/B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,qBAAqB,GAC9B,OAAO,CAAC,eAAe,CAAC,CAoH1B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACpC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,qBAAqB,GAC9B,OAAO,CAAC,eAAe,CAAC,CAgE1B"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batch Swap 实现
|
|
3
|
+
* 单交易 + ALT + 多钱包 Swap
|
|
4
|
+
* @module sol/utils/batch-swap
|
|
5
|
+
*/
|
|
6
|
+
import { PublicKey, ComputeBudgetProgram, } from '@solana/web3.js';
|
|
7
|
+
import BN from 'bn.js';
|
|
8
|
+
import { OnlinePumpSdk, PUMP_SDK, getBuyTokenAmountFromSolAmount, getSellSolAmountFromTokenAmount, } from '@pump-fun/pump-sdk';
|
|
9
|
+
import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
|
|
10
|
+
import { createAddressLookupTable, collectAddressesFromInstructions, buildVersionedTransaction, estimateTransactionSize, } from './alt.js';
|
|
11
|
+
import { NOZOMI_CONFIG } from '../constants.js';
|
|
12
|
+
import { buildNozomiTipInstruction, getRandomNozomiTipAccount } from '../nozomi/tip.js';
|
|
13
|
+
/**
|
|
14
|
+
* 构建单个 Pump Buy 的指令
|
|
15
|
+
*/
|
|
16
|
+
async function buildPumpBuyInstructions(connection, mint, buyer, solAmount, slippageBps) {
|
|
17
|
+
const onlineSdk = new OnlinePumpSdk(connection);
|
|
18
|
+
const global = await onlineSdk.fetchGlobal();
|
|
19
|
+
const { bondingCurveAccountInfo, bondingCurve, associatedUserAccountInfo } = await onlineSdk.fetchBuyState(mint, buyer.publicKey);
|
|
20
|
+
const solAmountBN = new BN(solAmount.toString());
|
|
21
|
+
const tokenAmount = getBuyTokenAmountFromSolAmount({
|
|
22
|
+
global,
|
|
23
|
+
feeConfig: null,
|
|
24
|
+
mintSupply: bondingCurve.tokenTotalSupply,
|
|
25
|
+
bondingCurve,
|
|
26
|
+
amount: solAmountBN,
|
|
27
|
+
});
|
|
28
|
+
return PUMP_SDK.buyInstructions({
|
|
29
|
+
global,
|
|
30
|
+
bondingCurveAccountInfo,
|
|
31
|
+
bondingCurve,
|
|
32
|
+
associatedUserAccountInfo,
|
|
33
|
+
mint,
|
|
34
|
+
user: buyer.publicKey,
|
|
35
|
+
amount: tokenAmount,
|
|
36
|
+
solAmount: solAmountBN,
|
|
37
|
+
slippage: slippageBps / 100,
|
|
38
|
+
tokenProgram: TOKEN_PROGRAM_ID,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 构建单个 Pump Sell 的指令
|
|
43
|
+
*/
|
|
44
|
+
async function buildPumpSellInstructions(connection, mint, seller, tokenAmount, slippageBps) {
|
|
45
|
+
const onlineSdk = new OnlinePumpSdk(connection);
|
|
46
|
+
const global = await onlineSdk.fetchGlobal();
|
|
47
|
+
const { bondingCurveAccountInfo, bondingCurve } = await onlineSdk.fetchSellState(mint, seller.publicKey);
|
|
48
|
+
const tokenAmountBN = new BN(tokenAmount.toString());
|
|
49
|
+
const solAmount = getSellSolAmountFromTokenAmount({
|
|
50
|
+
global,
|
|
51
|
+
feeConfig: null,
|
|
52
|
+
mintSupply: bondingCurve.tokenTotalSupply,
|
|
53
|
+
bondingCurve,
|
|
54
|
+
amount: tokenAmountBN,
|
|
55
|
+
});
|
|
56
|
+
return PUMP_SDK.sellInstructions({
|
|
57
|
+
global,
|
|
58
|
+
bondingCurveAccountInfo,
|
|
59
|
+
bondingCurve,
|
|
60
|
+
mint,
|
|
61
|
+
user: seller.publicKey,
|
|
62
|
+
amount: tokenAmountBN,
|
|
63
|
+
solAmount,
|
|
64
|
+
slippage: slippageBps / 100,
|
|
65
|
+
tokenProgram: TOKEN_PROGRAM_ID,
|
|
66
|
+
mayhemMode: false,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 批量构建 Swap 指令
|
|
71
|
+
*/
|
|
72
|
+
async function buildBatchSwapInstructions(connection, params) {
|
|
73
|
+
const { mint, isBuy, swaps, slippageBps = 100 } = params;
|
|
74
|
+
const mintPubkey = new PublicKey(mint);
|
|
75
|
+
const allInstructions = [];
|
|
76
|
+
const signers = [];
|
|
77
|
+
// 并行获取所有钱包的买入指令
|
|
78
|
+
const instructionPromises = swaps.map(async (swap) => {
|
|
79
|
+
if (isBuy) {
|
|
80
|
+
if (!swap.solAmount) {
|
|
81
|
+
throw new Error('solAmount required for buy');
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
instructions: await buildPumpBuyInstructions(connection, mintPubkey, swap.wallet, swap.solAmount, slippageBps),
|
|
85
|
+
signer: swap.wallet,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
if (!swap.tokenAmount) {
|
|
90
|
+
throw new Error('tokenAmount required for sell');
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
instructions: await buildPumpSellInstructions(connection, mintPubkey, swap.wallet, swap.tokenAmount, slippageBps),
|
|
94
|
+
signer: swap.wallet,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
const results = await Promise.all(instructionPromises);
|
|
99
|
+
for (const result of results) {
|
|
100
|
+
allInstructions.push(...result.instructions);
|
|
101
|
+
signers.push(result.signer);
|
|
102
|
+
}
|
|
103
|
+
return { instructions: allInstructions, signers };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 执行 Batch Swap (Pump.fun)
|
|
107
|
+
* 使用单交易 + ALT 实现多钱包原子性 Swap
|
|
108
|
+
*
|
|
109
|
+
* 返回两个交易,用户需要按顺序广播:
|
|
110
|
+
* 1. altCreateTx - ALT 创建交易
|
|
111
|
+
* 2. swapTx - 主 Swap 交易 (需等待 ALT 激活后再发送)
|
|
112
|
+
*
|
|
113
|
+
* @param connection Solana 连接
|
|
114
|
+
* @param params Batch Swap 参数
|
|
115
|
+
* @returns Batch Swap 结果 (包含两个交易)
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```ts
|
|
119
|
+
* const result = await batchSwapPump(connection, {
|
|
120
|
+
* mint: 'TOKEN_MINT',
|
|
121
|
+
* isBuy: true,
|
|
122
|
+
* swaps: [
|
|
123
|
+
* { wallet: wallet1, solAmount: 100_000_000n }, // 0.1 SOL
|
|
124
|
+
* { wallet: wallet2, solAmount: 200_000_000n }, // 0.2 SOL
|
|
125
|
+
* ],
|
|
126
|
+
* slippageBps: 100,
|
|
127
|
+
* });
|
|
128
|
+
*
|
|
129
|
+
* if (result.success) {
|
|
130
|
+
* // 步骤 1: 发送 ALT 创建交易
|
|
131
|
+
* await connection.sendTransaction(result.altCreateTx!);
|
|
132
|
+
*
|
|
133
|
+
* // 步骤 2: 等待 ALT 激活 (约 1 slot)
|
|
134
|
+
* await waitForALTActivation(connection, result.altInfo!.publicKey);
|
|
135
|
+
*
|
|
136
|
+
* // 步骤 3: 发送 Swap 交易
|
|
137
|
+
* await connection.sendTransaction(result.swapTx!);
|
|
138
|
+
* }
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
export async function batchSwapPump(connection, params) {
|
|
142
|
+
try {
|
|
143
|
+
const { swaps, useNozomi, nozomiTipLamports } = params;
|
|
144
|
+
if (swaps.length === 0) {
|
|
145
|
+
return { success: false, error: 'No swaps provided' };
|
|
146
|
+
}
|
|
147
|
+
if (swaps.length > 15) {
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
error: `Too many swaps (${swaps.length}). Max recommended: 15. Consider using multiple transactions.`
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// 1. 构建所有 swap 指令
|
|
154
|
+
const { instructions: swapInstructions, signers } = await buildBatchSwapInstructions(connection, params);
|
|
155
|
+
// 2. 添加 Compute Budget
|
|
156
|
+
const computeBudgetIxs = [
|
|
157
|
+
ComputeBudgetProgram.setComputeUnitLimit({
|
|
158
|
+
units: 200000 * swaps.length, // 每个 swap ~200k CU
|
|
159
|
+
}),
|
|
160
|
+
ComputeBudgetProgram.setComputeUnitPrice({
|
|
161
|
+
microLamports: 100000, // Priority fee
|
|
162
|
+
}),
|
|
163
|
+
];
|
|
164
|
+
// 3. 添加 Tip (Nozomi)
|
|
165
|
+
const tipInstructions = [];
|
|
166
|
+
const payer = signers[0]; // 第一个钱包作为 payer
|
|
167
|
+
if (useNozomi) {
|
|
168
|
+
const tipAmount = nozomiTipLamports || BigInt(NOZOMI_CONFIG.DEFAULT_TIP_LAMPORTS);
|
|
169
|
+
tipInstructions.push(buildNozomiTipInstruction(payer.publicKey, tipAmount, getRandomNozomiTipAccount()));
|
|
170
|
+
}
|
|
171
|
+
// 4. 组装所有指令
|
|
172
|
+
const allInstructions = [
|
|
173
|
+
...computeBudgetIxs,
|
|
174
|
+
...tipInstructions,
|
|
175
|
+
...swapInstructions,
|
|
176
|
+
];
|
|
177
|
+
// 5. 收集地址用于 ALT
|
|
178
|
+
const addresses = collectAddressesFromInstructions(allInstructions);
|
|
179
|
+
// 6. 创建 ALT 交易 (不发送)
|
|
180
|
+
const { altAddress, createTx: altCreateTx } = await createAddressLookupTable(connection, payer, addresses);
|
|
181
|
+
// 7. 预先构建 Swap 交易 (使用预期的 ALT 结构)
|
|
182
|
+
// 注意:此交易假设 ALT 已激活,用户需确保 ALT 激活后再发送
|
|
183
|
+
const mockAltAccount = {
|
|
184
|
+
key: altAddress,
|
|
185
|
+
state: {
|
|
186
|
+
addresses: addresses,
|
|
187
|
+
authority: payer.publicKey,
|
|
188
|
+
deactivationSlot: BigInt('18446744073709551615'), // u64::MAX
|
|
189
|
+
lastExtendedSlot: 0,
|
|
190
|
+
lastExtendedSlotStartIndex: 0,
|
|
191
|
+
},
|
|
192
|
+
isActive: () => true,
|
|
193
|
+
};
|
|
194
|
+
const swapTx = await buildVersionedTransaction(connection, payer.publicKey, allInstructions, signers, [mockAltAccount]);
|
|
195
|
+
const txSize = estimateTransactionSize(swapTx);
|
|
196
|
+
if (txSize > 1232) {
|
|
197
|
+
return {
|
|
198
|
+
success: false,
|
|
199
|
+
error: `Transaction too large: ${txSize} bytes. Reduce number of swaps.`,
|
|
200
|
+
estimatedSize: txSize,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
success: true,
|
|
205
|
+
// ALT 创建交易
|
|
206
|
+
altCreateTx,
|
|
207
|
+
altCreateTxSerialized: Buffer.from(altCreateTx.serialize()).toString('base64'),
|
|
208
|
+
altInfo: {
|
|
209
|
+
address: altAddress.toBase58(),
|
|
210
|
+
publicKey: altAddress,
|
|
211
|
+
addresses: addresses.map(a => a.toBase58()),
|
|
212
|
+
},
|
|
213
|
+
// Swap 交易
|
|
214
|
+
swapTx,
|
|
215
|
+
swapTxSerialized: Buffer.from(swapTx.serialize()).toString('base64'),
|
|
216
|
+
// 原始指令 (高级用户)
|
|
217
|
+
instructions: allInstructions,
|
|
218
|
+
signers,
|
|
219
|
+
swapCount: swaps.length,
|
|
220
|
+
estimatedSize: txSize,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
return {
|
|
225
|
+
success: false,
|
|
226
|
+
error: error.message,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* 快速 Batch Swap (不创建 ALT,仅适用于少量钱包)
|
|
232
|
+
* 适用于 3-5 个钱包的情况,不需要 ALT
|
|
233
|
+
*
|
|
234
|
+
* @returns 只返回 swapTx,无需 ALT 创建
|
|
235
|
+
*/
|
|
236
|
+
export async function quickBatchSwapPump(connection, params) {
|
|
237
|
+
try {
|
|
238
|
+
const { swaps } = params;
|
|
239
|
+
if (swaps.length > 5) {
|
|
240
|
+
return {
|
|
241
|
+
success: false,
|
|
242
|
+
error: `quickBatchSwap only supports up to 5 wallets. Use batchSwapPump for more.`
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
// 1. 构建所有 swap 指令
|
|
246
|
+
const { instructions: swapInstructions, signers } = await buildBatchSwapInstructions(connection, params);
|
|
247
|
+
// 2. 添加 Compute Budget
|
|
248
|
+
const computeBudgetIxs = [
|
|
249
|
+
ComputeBudgetProgram.setComputeUnitLimit({
|
|
250
|
+
units: 200000 * swaps.length,
|
|
251
|
+
}),
|
|
252
|
+
ComputeBudgetProgram.setComputeUnitPrice({
|
|
253
|
+
microLamports: 100000,
|
|
254
|
+
}),
|
|
255
|
+
];
|
|
256
|
+
const allInstructions = [...computeBudgetIxs, ...swapInstructions];
|
|
257
|
+
const payer = signers[0];
|
|
258
|
+
// 3. 直接构建 Versioned Transaction (无 ALT)
|
|
259
|
+
const swapTx = await buildVersionedTransaction(connection, payer.publicKey, allInstructions, signers);
|
|
260
|
+
const txSize = estimateTransactionSize(swapTx);
|
|
261
|
+
if (txSize > 1232) {
|
|
262
|
+
return {
|
|
263
|
+
success: false,
|
|
264
|
+
error: `Transaction too large: ${txSize} bytes. Use batchSwapPump with ALT.`,
|
|
265
|
+
estimatedSize: txSize,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
success: true,
|
|
270
|
+
// 无需 ALT
|
|
271
|
+
swapTx,
|
|
272
|
+
swapTxSerialized: Buffer.from(swapTx.serialize()).toString('base64'),
|
|
273
|
+
instructions: allInstructions,
|
|
274
|
+
signers,
|
|
275
|
+
swapCount: swaps.length,
|
|
276
|
+
estimatedSize: txSize,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
return {
|
|
281
|
+
success: false,
|
|
282
|
+
error: error.message,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=batch-swap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-swap.js","sourceRoot":"","sources":["../../src/utils/batch-swap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batch Swap 类型定义
|
|
3
|
+
* 支持单交易 + ALT + 多钱包 Swap
|
|
4
|
+
* @module sol/utils/batch-types
|
|
5
|
+
*/
|
|
6
|
+
import { Keypair, PublicKey, TransactionInstruction, VersionedTransaction } from '@solana/web3.js';
|
|
7
|
+
/**
|
|
8
|
+
* 单个 Swap 参数
|
|
9
|
+
*/
|
|
10
|
+
export interface SingleSwapInput {
|
|
11
|
+
/** 钱包 */
|
|
12
|
+
wallet: Keypair;
|
|
13
|
+
/** SOL 数量 (lamports) - 买入时使用 */
|
|
14
|
+
solAmount?: bigint;
|
|
15
|
+
/** Token 数量 - 卖出时使用 */
|
|
16
|
+
tokenAmount?: bigint;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Batch Swap 参数
|
|
20
|
+
*/
|
|
21
|
+
export interface AtomicBatchSwapParams {
|
|
22
|
+
/** Token Mint 地址 */
|
|
23
|
+
mint: string;
|
|
24
|
+
/** 是否买入 */
|
|
25
|
+
isBuy: boolean;
|
|
26
|
+
/** 钱包和金额列表 */
|
|
27
|
+
swaps: SingleSwapInput[];
|
|
28
|
+
/** 滑点 (bps), 默认 100 = 1% */
|
|
29
|
+
slippageBps?: number;
|
|
30
|
+
/** 使用 Nozomi 加速 */
|
|
31
|
+
useNozomi?: boolean;
|
|
32
|
+
/** Nozomi Tip (lamports) */
|
|
33
|
+
nozomiTipLamports?: bigint;
|
|
34
|
+
/** 使用 Jito */
|
|
35
|
+
useJito?: boolean;
|
|
36
|
+
/** Jito Tip (lamports) */
|
|
37
|
+
jitoTipLamports?: bigint;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* ALT 信息
|
|
41
|
+
*/
|
|
42
|
+
export interface ALTInfo {
|
|
43
|
+
/** ALT 地址 */
|
|
44
|
+
address: string;
|
|
45
|
+
/** ALT PublicKey */
|
|
46
|
+
publicKey: PublicKey;
|
|
47
|
+
/** 包含的地址列表 */
|
|
48
|
+
addresses: string[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Batch Swap 结果
|
|
52
|
+
* 返回所有必要的交易和信息,由用户自己决定如何广播
|
|
53
|
+
*/
|
|
54
|
+
export interface BatchSwapResult {
|
|
55
|
+
success: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* 步骤 1: ALT 创建交易 (已签名)
|
|
58
|
+
* 用户需要先广播此交易并等待确认
|
|
59
|
+
*/
|
|
60
|
+
altCreateTx?: VersionedTransaction;
|
|
61
|
+
/** ALT 创建交易序列化 (base64) */
|
|
62
|
+
altCreateTxSerialized?: string;
|
|
63
|
+
/** ALT 信息 */
|
|
64
|
+
altInfo?: ALTInfo;
|
|
65
|
+
/**
|
|
66
|
+
* 步骤 2: 主 Swap 交易 (已签名)
|
|
67
|
+
* ALT 激活后 (等待 1 slot),广播此交易
|
|
68
|
+
*/
|
|
69
|
+
swapTx?: VersionedTransaction;
|
|
70
|
+
/** Swap 交易序列化 (base64) */
|
|
71
|
+
swapTxSerialized?: string;
|
|
72
|
+
/** 所有 Swap 指令 (未签名,高级用户可自行组装) */
|
|
73
|
+
instructions?: TransactionInstruction[];
|
|
74
|
+
/** 签名者列表 */
|
|
75
|
+
signers?: Keypair[];
|
|
76
|
+
/** 包含的 swap 数量 */
|
|
77
|
+
swapCount?: number;
|
|
78
|
+
/** 预估交易大小 (bytes) */
|
|
79
|
+
estimatedSize?: number;
|
|
80
|
+
/** 错误信息 */
|
|
81
|
+
error?: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 指令构建结果
|
|
85
|
+
*/
|
|
86
|
+
export interface SwapInstructionsResult {
|
|
87
|
+
instructions: TransactionInstruction[];
|
|
88
|
+
signers: Keypair[];
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=batch-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-types.d.ts","sourceRoot":"","sources":["../../src/utils/batch-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEnG;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,SAAS;IACT,MAAM,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,KAAK,EAAE,OAAO,CAAC;IACf,cAAc;IACd,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4BAA4B;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,aAAa;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,2BAA2B;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,0BAA0B;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,iCAAiC;IACjC,YAAY,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACxC,YAAY;IACZ,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IAEpB,kBAAkB;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,OAAO,EAAE,OAAO,EAAE,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-types.js","sourceRoot":"","sources":["../../src/utils/batch-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solana RPC 连接管理
|
|
3
|
+
* @module sol/utils/connection
|
|
4
|
+
*/
|
|
5
|
+
import { Connection, Commitment } from '@solana/web3.js';
|
|
6
|
+
/**
|
|
7
|
+
* 创建 Solana 连接
|
|
8
|
+
*
|
|
9
|
+
* 重要:必须传入用户选择的 RPC URL,SDK 不提供默认 RPC
|
|
10
|
+
* 前端应从 RPC 设置中获取用户配置的节点
|
|
11
|
+
*
|
|
12
|
+
* @param rpcUrl RPC URL(必填)
|
|
13
|
+
* @param commitment Commitment 级别(可选,默认 confirmed)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* const connection = createConnection('https://user-selected-rpc.com')
|
|
17
|
+
*
|
|
18
|
+
* @throws Error 如果没有传入 rpcUrl
|
|
19
|
+
*/
|
|
20
|
+
export declare function createConnection(rpcUrl: string, commitment?: Commitment): Connection;
|
|
21
|
+
/**
|
|
22
|
+
* 获取账户 SOL 余额
|
|
23
|
+
* @param connection Solana 连接
|
|
24
|
+
* @param address 账户地址
|
|
25
|
+
* @returns 余额(lamports)
|
|
26
|
+
*/
|
|
27
|
+
export declare function getBalance(connection: Connection, address: string): Promise<bigint>;
|
|
28
|
+
/**
|
|
29
|
+
* 获取账户 SOL 余额(格式化)
|
|
30
|
+
* @param connection Solana 连接
|
|
31
|
+
* @param address 账户地址
|
|
32
|
+
* @returns 余额(SOL)
|
|
33
|
+
*/
|
|
34
|
+
export declare function getBalanceInSol(connection: Connection, address: string): Promise<number>;
|
|
35
|
+
/**
|
|
36
|
+
* 获取最新 blockhash
|
|
37
|
+
* @param connection Solana 连接
|
|
38
|
+
*/
|
|
39
|
+
export declare function getLatestBlockhash(connection: Connection): Promise<{
|
|
40
|
+
blockhash: string;
|
|
41
|
+
lastValidBlockHeight: number;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* 获取当前 slot
|
|
45
|
+
* @param connection Solana 连接
|
|
46
|
+
*/
|
|
47
|
+
export declare function getCurrentSlot(connection: Connection): Promise<number>;
|
|
48
|
+
/**
|
|
49
|
+
* 检查账户是否存在
|
|
50
|
+
* @param connection Solana 连接
|
|
51
|
+
* @param address 账户地址
|
|
52
|
+
*/
|
|
53
|
+
export declare function accountExists(connection: Connection, address: string): Promise<boolean>;
|
|
54
|
+
/**
|
|
55
|
+
* 获取账户信息
|
|
56
|
+
* @param connection Solana 连接
|
|
57
|
+
* @param address 账户地址
|
|
58
|
+
*/
|
|
59
|
+
export declare function getAccountInfo(connection: Connection, address: string): Promise<import("@solana/web3.js").AccountInfo<Buffer<ArrayBufferLike>> | null>;
|
|
60
|
+
/**
|
|
61
|
+
* 获取最小租金豁免余额
|
|
62
|
+
* @param connection Solana 连接
|
|
63
|
+
* @param dataSize 账户数据大小
|
|
64
|
+
*/
|
|
65
|
+
export declare function getMinimumBalanceForRentExemption(connection: Connection, dataSize: number): Promise<bigint>;
|
|
66
|
+
/**
|
|
67
|
+
* 等待交易确认
|
|
68
|
+
* @param connection Solana 连接
|
|
69
|
+
* @param signature 交易签名
|
|
70
|
+
* @param timeout 超时时间(毫秒)
|
|
71
|
+
*/
|
|
72
|
+
export declare function waitForConfirmation(connection: Connection, signature: string, timeout?: number): Promise<boolean>;
|
|
73
|
+
/**
|
|
74
|
+
* 获取交易状态
|
|
75
|
+
* @param connection Solana 连接
|
|
76
|
+
* @param signature 交易签名
|
|
77
|
+
*/
|
|
78
|
+
export declare function getTransactionStatus(connection: Connection, signature: string): Promise<'pending' | 'confirmed' | 'failed'>;
|
|
79
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/utils/connection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAa,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGpE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,UAAyC,GACpD,UAAU,CAQZ;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;IACxE,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC,CAUD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAM5E;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,kFAQhB;AAED;;;;GAIG;AACH,wBAAsB,iCAAiC,CACrD,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,MAAuC,GAC/C,OAAO,CAAC,OAAO,CAAC,CAelB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC,CAa7C"}
|