@w3lib/solana-batch-call 0.5.0 → 0.7.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/CHANGELOG.md +47 -0
- package/README.md +129 -9
- package/dist/accountReader.d.ts +57 -0
- package/dist/accountReader.d.ts.map +1 -0
- package/dist/accountReader.js +149 -0
- package/dist/accountReader.js.map +1 -0
- package/dist/address.d.ts +9 -0
- package/dist/address.d.ts.map +1 -1
- package/dist/address.js +36 -6
- package/dist/address.js.map +1 -1
- package/dist/approvals.d.ts +5 -3
- package/dist/approvals.d.ts.map +1 -1
- package/dist/approvals.js +25 -36
- package/dist/approvals.js.map +1 -1
- package/dist/balances.d.ts +178 -0
- package/dist/balances.d.ts.map +1 -0
- package/dist/balances.js +524 -0
- package/dist/balances.js.map +1 -0
- package/dist/batchPlan.d.ts +52 -0
- package/dist/batchPlan.d.ts.map +1 -0
- package/dist/batchPlan.js +64 -0
- package/dist/batchPlan.js.map +1 -0
- package/dist/bytes.d.ts +31 -0
- package/dist/bytes.d.ts.map +1 -0
- package/dist/bytes.js +74 -0
- package/dist/bytes.js.map +1 -0
- package/dist/claim.d.ts +163 -0
- package/dist/claim.d.ts.map +1 -0
- package/dist/claim.js +197 -0
- package/dist/claim.js.map +1 -0
- package/dist/client.d.ts +26 -41
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +41 -986
- package/dist/client.js.map +1 -1
- package/dist/clientConfig.d.ts +11 -0
- package/dist/clientConfig.d.ts.map +1 -0
- package/dist/clientConfig.js +3 -0
- package/dist/clientConfig.js.map +1 -0
- package/dist/decode.d.ts +22 -0
- package/dist/decode.d.ts.map +1 -0
- package/dist/decode.js +160 -0
- package/dist/decode.js.map +1 -0
- package/dist/describe.d.ts +26 -0
- package/dist/describe.d.ts.map +1 -0
- package/dist/describe.js +58 -0
- package/dist/describe.js.map +1 -0
- package/dist/fees.d.ts.map +1 -1
- package/dist/fees.js +2 -12
- package/dist/fees.js.map +1 -1
- package/dist/history.d.ts +125 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +220 -0
- package/dist/history.js.map +1 -0
- package/dist/historyHelius.d.ts +52 -0
- package/dist/historyHelius.d.ts.map +1 -0
- package/dist/historyHelius.js +125 -0
- package/dist/historyHelius.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/layout.d.ts +21 -0
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +50 -69
- package/dist/layout.js.map +1 -1
- package/dist/liquidity/common.js +2 -2
- package/dist/liquidity/common.js.map +1 -1
- package/dist/liquidity/orca.d.ts +6 -0
- package/dist/liquidity/orca.d.ts.map +1 -1
- package/dist/liquidity/orca.js +14 -3
- package/dist/liquidity/orca.js.map +1 -1
- package/dist/liquidity/raydiumClmm.d.ts +6 -0
- package/dist/liquidity/raydiumClmm.d.ts.map +1 -1
- package/dist/liquidity/raydiumClmm.js +12 -5
- package/dist/liquidity/raydiumClmm.js.map +1 -1
- package/dist/lp.d.ts +55 -12
- package/dist/lp.d.ts.map +1 -1
- package/dist/lp.js +158 -70
- package/dist/lp.js.map +1 -1
- package/dist/lpMath.d.ts +22 -0
- package/dist/lpMath.d.ts.map +1 -1
- package/dist/lpMath.js +21 -0
- package/dist/lpMath.js.map +1 -1
- package/dist/portfolio.d.ts.map +1 -1
- package/dist/portfolio.js +3 -8
- package/dist/portfolio.js.map +1 -1
- package/dist/programs.d.ts +19 -0
- package/dist/programs.d.ts.map +1 -0
- package/dist/programs.js +175 -0
- package/dist/programs.js.map +1 -0
- package/dist/reclaim.d.ts +192 -0
- package/dist/reclaim.d.ts.map +1 -0
- package/dist/reclaim.js +399 -0
- package/dist/reclaim.js.map +1 -0
- package/dist/risk.js +2 -2
- package/dist/risk.js.map +1 -1
- package/dist/rpc.d.ts +30 -7
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +404 -111
- package/dist/rpc.js.map +1 -1
- package/dist/simulate.d.ts +106 -0
- package/dist/simulate.d.ts.map +1 -0
- package/dist/simulate.js +395 -0
- package/dist/simulate.js.map +1 -0
- package/dist/source.d.ts +8 -4
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +11 -4
- package/dist/source.js.map +1 -1
- package/dist/subpaths/approvals.d.ts +3 -3
- package/dist/subpaths/approvals.d.ts.map +1 -1
- package/dist/subpaths/approvals.js.map +1 -1
- package/dist/subpaths/claim.d.ts +31 -0
- package/dist/subpaths/claim.d.ts.map +1 -0
- package/dist/subpaths/claim.js +31 -0
- package/dist/subpaths/claim.js.map +1 -0
- package/dist/subpaths/history.d.ts +21 -0
- package/dist/subpaths/history.d.ts.map +1 -0
- package/dist/subpaths/history.js +22 -0
- package/dist/subpaths/history.js.map +1 -0
- package/dist/subpaths/lp.d.ts +2 -2
- package/dist/subpaths/lp.d.ts.map +1 -1
- package/dist/subpaths/lp.js +2 -2
- package/dist/subpaths/lp.js.map +1 -1
- package/dist/subpaths/reclaim.d.ts +34 -0
- package/dist/subpaths/reclaim.d.ts.map +1 -0
- package/dist/subpaths/reclaim.js +34 -0
- package/dist/subpaths/reclaim.js.map +1 -0
- package/dist/subpaths/simulate.d.ts +22 -0
- package/dist/subpaths/simulate.d.ts.map +1 -0
- package/dist/subpaths/simulate.js +23 -0
- package/dist/subpaths/simulate.js.map +1 -0
- package/dist/swap/index.js +3 -3
- package/dist/swap/index.js.map +1 -1
- package/dist/tokenDetails.d.ts +12 -0
- package/dist/tokenDetails.d.ts.map +1 -0
- package/dist/tokenDetails.js +196 -0
- package/dist/tokenDetails.js.map +1 -0
- package/dist/tokenMeta.d.ts +63 -0
- package/dist/tokenMeta.d.ts.map +1 -0
- package/dist/tokenMeta.js +226 -0
- package/dist/tokenMeta.js.map +1 -0
- package/dist/tradeCheck.js +3 -3
- package/dist/tradeCheck.js.map +1 -1
- package/dist/util.d.ts +22 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +107 -0
- package/dist/util.js.map +1 -0
- package/dist/write/chain.d.ts +51 -0
- package/dist/write/chain.d.ts.map +1 -0
- package/dist/write/chain.js +184 -0
- package/dist/write/chain.js.map +1 -0
- package/dist/write/collect.js +2 -2
- package/dist/write/collect.js.map +1 -1
- package/dist/write/errors.d.ts +10 -0
- package/dist/write/errors.d.ts.map +1 -0
- package/dist/write/errors.js +77 -0
- package/dist/write/errors.js.map +1 -0
- package/dist/write/instructions.d.ts +2 -0
- package/dist/write/instructions.d.ts.map +1 -1
- package/dist/write/instructions.js +16 -0
- package/dist/write/instructions.js.map +1 -1
- package/dist/write/pack.d.ts +28 -0
- package/dist/write/pack.d.ts.map +1 -0
- package/dist/write/pack.js +125 -0
- package/dist/write/pack.js.map +1 -0
- package/dist/write/send.d.ts +23 -9
- package/dist/write/send.d.ts.map +1 -1
- package/dist/write/send.js +53 -351
- package/dist/write/send.js.map +1 -1
- package/dist/write/tracker.d.ts +24 -0
- package/dist/write/tracker.d.ts.map +1 -0
- package/dist/write/tracker.js +129 -0
- package/dist/write/tracker.js.map +1 -0
- package/package.json +21 -1
- package/src/accountReader.ts +187 -0
- package/src/address.ts +41 -6
- package/src/approvals.ts +36 -44
- package/src/balances.ts +678 -0
- package/src/batchPlan.ts +117 -0
- package/src/bytes.ts +89 -0
- package/src/claim.ts +327 -0
- package/src/client.ts +59 -1239
- package/src/clientConfig.ts +12 -0
- package/src/decode.ts +176 -0
- package/src/describe.ts +77 -0
- package/src/fees.ts +2 -9
- package/src/history.ts +325 -0
- package/src/historyHelius.ts +136 -0
- package/src/index.ts +13 -1
- package/src/layout.ts +63 -82
- package/src/liquidity/common.ts +2 -2
- package/src/liquidity/orca.ts +15 -5
- package/src/liquidity/raydiumClmm.ts +13 -5
- package/src/lp.ts +226 -75
- package/src/lpMath.ts +38 -0
- package/src/portfolio.ts +8 -11
- package/src/programs.ts +216 -0
- package/src/reclaim.ts +550 -0
- package/src/risk.ts +2 -2
- package/src/rpc.ts +476 -118
- package/src/simulate.ts +517 -0
- package/src/source.ts +14 -5
- package/src/subpaths/approvals.ts +3 -2
- package/src/subpaths/claim.ts +54 -0
- package/src/subpaths/history.ts +38 -0
- package/src/subpaths/lp.ts +5 -1
- package/src/subpaths/reclaim.ts +58 -0
- package/src/subpaths/simulate.ts +37 -0
- package/src/swap/index.ts +3 -3
- package/src/tokenDetails.ts +240 -0
- package/src/tokenMeta.ts +270 -0
- package/src/tradeCheck.ts +3 -3
- package/src/util.ts +110 -0
- package/src/write/chain.ts +218 -0
- package/src/write/collect.ts +2 -2
- package/src/write/errors.ts +82 -0
- package/src/write/instructions.ts +17 -0
- package/src/write/pack.ts +142 -0
- package/src/write/send.ts +74 -407
- package/src/write/tracker.ts +152 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { InvalidAddressError, isAddress } from './address.js';
|
|
2
|
+
import { packUnits } from './write/pack.js';
|
|
3
|
+
/** 把调用按顺序打包成交易,返回每笔交易包含的调用下标。单个调用放不进一笔交易时自己成一笔(发送时会报“transaction too large”);规则同 batchCall(packUnits) */
|
|
4
|
+
export function packCalls(payer, calls, batchSize = Number.POSITIVE_INFINITY) {
|
|
5
|
+
return packUnits(payer, calls, { batchSize }).map((pack) => pack.indices);
|
|
6
|
+
}
|
|
7
|
+
/** 打包后逐笔用 /simulate 模拟(不签名、不发送);失败的交易逐个调用重新模拟,找出是哪些调用失败 */
|
|
8
|
+
export async function simulatePlan(client, calls, options = {}) {
|
|
9
|
+
const first = calls[0];
|
|
10
|
+
if (!first) {
|
|
11
|
+
return { success: true, transactions: [], failed: [], fee: '0', payerNativeDelta: '0' };
|
|
12
|
+
}
|
|
13
|
+
const payer = options.feePayer ?? first.owner;
|
|
14
|
+
if (!isAddress(payer)) {
|
|
15
|
+
throw new InvalidAddressError(`Invalid fee payer: ${payer}`, payer);
|
|
16
|
+
}
|
|
17
|
+
const { simulate } = await import('./simulate.js');
|
|
18
|
+
const run = (list) => simulate(client, { feePayer: payer, instructions: list.flatMap((c) => c.instructions) }, { signers: [...new Set(list.map((c) => c.owner))], watch: options.watch, signal: options.signal, prices: options.prices, fetch: options.fetch });
|
|
19
|
+
const packs = packCalls(payer, calls, options.batchSize);
|
|
20
|
+
const transactions = [];
|
|
21
|
+
const failed = [];
|
|
22
|
+
for (const pack of packs) {
|
|
23
|
+
const simulation = await run(pack.map((i) => calls[i]));
|
|
24
|
+
transactions.push({ calls: pack, simulation });
|
|
25
|
+
if (!simulation.success) {
|
|
26
|
+
if (pack.length === 1) {
|
|
27
|
+
failed.push({ index: pack[0], error: simulation.error ?? 'simulation failed' });
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
for (const i of pack) {
|
|
31
|
+
const single = await run([calls[i]]);
|
|
32
|
+
if (!single.success) {
|
|
33
|
+
failed.push({ index: i, error: single.error ?? 'simulation failed' });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
let fee = 0n;
|
|
39
|
+
let delta = 0n;
|
|
40
|
+
for (const { simulation } of transactions) {
|
|
41
|
+
fee += BigInt(simulation.fee ?? '0');
|
|
42
|
+
for (const change of simulation.balanceChanges) {
|
|
43
|
+
if (change.address === payer && change.asset === 'native') {
|
|
44
|
+
delta += BigInt(change.delta);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return { success: transactions.every((t) => t.simulation.success), transactions, failed, fee: fee.toString(), payerNativeDelta: delta.toString() };
|
|
49
|
+
}
|
|
50
|
+
/** 用 from 签名发送:调用的 owner 都必须是签名者本人;一个调用失败不影响后面的(continueOnError),feePayer 可以替 owner 付手续费 */
|
|
51
|
+
export async function sendCalls(client, from, calls, options = {}) {
|
|
52
|
+
if (!calls.length) {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
// 发送的代码按需加载:只查询、模拟时打包不会带上
|
|
56
|
+
const [{ batchCall }, { resolveSigner }] = await Promise.all([import('./write/batch.js'), import('./write/signer.js')]);
|
|
57
|
+
const { address } = await resolveSigner(from);
|
|
58
|
+
const other = calls.find((c) => c.owner !== address);
|
|
59
|
+
if (other) {
|
|
60
|
+
throw new Error(`The account belongs to ${other.owner}, not the signer ${address}`);
|
|
61
|
+
}
|
|
62
|
+
return batchCall(client, calls.map((c) => ({ from, instructions: c.instructions })), { continueOnError: true, ...options });
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=batchPlan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batchPlan.js","sourceRoot":"","sources":["../src/batchPlan.ts"],"names":[],"mappings":"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"}
|
package/dist/bytes.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 小端读取二进制数据(账户数据、指令数据共用)。两种用法:
|
|
3
|
+
* - 传偏移量:按绝对位置读,不移动游标(如 `b.u64(333)`)
|
|
4
|
+
* - 不传:从游标处顺序读并前进(如 `r.u32(); r.pubkey()`)
|
|
5
|
+
* 越界时抛 RangeError
|
|
6
|
+
*/
|
|
7
|
+
export declare class Bytes {
|
|
8
|
+
#private;
|
|
9
|
+
readonly data: Uint8Array;
|
|
10
|
+
readonly view: DataView;
|
|
11
|
+
/** 顺序读取的游标 */
|
|
12
|
+
offset: number;
|
|
13
|
+
constructor(data: Uint8Array, offset?: number);
|
|
14
|
+
get bytes(): Uint8Array;
|
|
15
|
+
skip(n: number): void;
|
|
16
|
+
u8(at?: number): number;
|
|
17
|
+
u16(at?: number): number;
|
|
18
|
+
u32(at?: number): number;
|
|
19
|
+
i32(at?: number): number;
|
|
20
|
+
u64(at?: number): bigint;
|
|
21
|
+
u128(at?: number): bigint;
|
|
22
|
+
/** 32 字节地址(base58) */
|
|
23
|
+
key(at?: number): string;
|
|
24
|
+
/** 同 key(顺序读取时的习惯叫法) */
|
|
25
|
+
pubkey(at?: number): string;
|
|
26
|
+
/** borsh string:u32 长度 + UTF-8;去掉 Metaplex 用来补齐长度的 \0 */
|
|
27
|
+
string(): string;
|
|
28
|
+
/** borsh Option:u8 标记(1 有)+ 值 */
|
|
29
|
+
option<T>(read: () => T): T | null;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=bytes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../src/bytes.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,qBAAa,KAAK;;IAMd,QAAQ,CAAC,IAAI,EAAE,UAAU;IAL3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,cAAc;IACd,MAAM,EAAE,MAAM,CAAA;gBAGH,IAAI,EAAE,UAAU,EACzB,MAAM,SAAI;IAMZ,IAAI,KAAK,IAAI,UAAU,CAEtB;IAcD,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIrB,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIvB,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIxB,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIxB,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIxB,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIxB,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAKzB,sBAAsB;IACtB,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAKxB,wBAAwB;IACxB,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAI3B,yDAAyD;IACzD,MAAM,IAAI,MAAM;IAMhB,iCAAiC;IACjC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI;CAGnC"}
|
package/dist/bytes.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { encodeAddress } from './address.js';
|
|
2
|
+
/**
|
|
3
|
+
* 小端读取二进制数据(账户数据、指令数据共用)。两种用法:
|
|
4
|
+
* - 传偏移量:按绝对位置读,不移动游标(如 `b.u64(333)`)
|
|
5
|
+
* - 不传:从游标处顺序读并前进(如 `r.u32(); r.pubkey()`)
|
|
6
|
+
* 越界时抛 RangeError
|
|
7
|
+
*/
|
|
8
|
+
export class Bytes {
|
|
9
|
+
data;
|
|
10
|
+
view;
|
|
11
|
+
/** 顺序读取的游标 */
|
|
12
|
+
offset;
|
|
13
|
+
constructor(data, offset = 0) {
|
|
14
|
+
this.data = data;
|
|
15
|
+
this.view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
16
|
+
this.offset = offset;
|
|
17
|
+
}
|
|
18
|
+
get bytes() {
|
|
19
|
+
return this.data;
|
|
20
|
+
}
|
|
21
|
+
/** 要读的位置:传了 at 用它,否则用游标并前进 n 字节;检查越界 */
|
|
22
|
+
#pos(at, n) {
|
|
23
|
+
const pos = at ?? this.offset;
|
|
24
|
+
if (pos < 0 || pos + n > this.data.length) {
|
|
25
|
+
throw new RangeError('Account data is shorter than expected');
|
|
26
|
+
}
|
|
27
|
+
if (at === undefined) {
|
|
28
|
+
this.offset += n;
|
|
29
|
+
}
|
|
30
|
+
return pos;
|
|
31
|
+
}
|
|
32
|
+
skip(n) {
|
|
33
|
+
this.#pos(undefined, n);
|
|
34
|
+
}
|
|
35
|
+
u8(at) {
|
|
36
|
+
return this.data[this.#pos(at, 1)];
|
|
37
|
+
}
|
|
38
|
+
u16(at) {
|
|
39
|
+
return this.view.getUint16(this.#pos(at, 2), true);
|
|
40
|
+
}
|
|
41
|
+
u32(at) {
|
|
42
|
+
return this.view.getUint32(this.#pos(at, 4), true);
|
|
43
|
+
}
|
|
44
|
+
i32(at) {
|
|
45
|
+
return this.view.getInt32(this.#pos(at, 4), true);
|
|
46
|
+
}
|
|
47
|
+
u64(at) {
|
|
48
|
+
return this.view.getBigUint64(this.#pos(at, 8), true);
|
|
49
|
+
}
|
|
50
|
+
u128(at) {
|
|
51
|
+
const pos = this.#pos(at, 16);
|
|
52
|
+
return (this.view.getBigUint64(pos + 8, true) << 64n) | this.view.getBigUint64(pos, true);
|
|
53
|
+
}
|
|
54
|
+
/** 32 字节地址(base58) */
|
|
55
|
+
key(at) {
|
|
56
|
+
const pos = this.#pos(at, 32);
|
|
57
|
+
return encodeAddress(this.data.subarray(pos, pos + 32));
|
|
58
|
+
}
|
|
59
|
+
/** 同 key(顺序读取时的习惯叫法) */
|
|
60
|
+
pubkey(at) {
|
|
61
|
+
return this.key(at);
|
|
62
|
+
}
|
|
63
|
+
/** borsh string:u32 长度 + UTF-8;去掉 Metaplex 用来补齐长度的 \0 */
|
|
64
|
+
string() {
|
|
65
|
+
const len = this.u32();
|
|
66
|
+
const pos = this.#pos(undefined, len);
|
|
67
|
+
return new TextDecoder().decode(this.data.subarray(pos, pos + len)).replace(/\0+$/, '').trim();
|
|
68
|
+
}
|
|
69
|
+
/** borsh Option:u8 标记(1 有)+ 值 */
|
|
70
|
+
option(read) {
|
|
71
|
+
return this.u8() === 1 ? read() : null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=bytes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../src/bytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C;;;;;GAKG;AACH,MAAM,OAAO,KAAK;IAML;IALF,IAAI,CAAU;IACvB,cAAc;IACd,MAAM,CAAQ;IAEd,YACW,IAAgB,EACzB,MAAM,GAAG,CAAC;QADD,SAAI,GAAJ,IAAI,CAAY;QAGzB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACvE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC,EAAsB,EAAE,CAAS;QACpC,MAAM,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,CAAA;QAC7B,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,MAAM,IAAI,UAAU,CAAC,uCAAuC,CAAC,CAAA;QAC/D,CAAC;QACD,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;QAClB,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI,CAAC,CAAS;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACzB,CAAC;IAED,EAAE,CAAC,EAAW;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAW,CAAA;IAC9C,CAAC;IAED,GAAG,CAAC,EAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IACpD,CAAC;IAED,GAAG,CAAC,EAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IACpD,CAAC;IAED,GAAG,CAAC,EAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IACnD,CAAC;IAED,GAAG,CAAC,EAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IACvD,CAAC;IAED,IAAI,CAAC,EAAW;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC3F,CAAC;IAED,sBAAsB;IACtB,GAAG,CAAC,EAAW;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAC7B,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,wBAAwB;IACxB,MAAM,CAAC,EAAW;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACrB,CAAC;IAED,yDAAyD;IACzD,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QACrC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAChG,CAAC;IAED,iCAAiC;IACjC,MAAM,CAAI,IAAa;QACrB,OAAO,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACxC,CAAC;CACF"}
|
package/dist/claim.d.ts
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 批量领取(子路径 `@w3lib/solana-batch-call/claim`):Orca Whirlpool、Raydium CLMM 仓位的未领取手续费和挖矿奖励(Orca 的奖励 slot、Raydium 的农场奖励)。
|
|
3
|
+
* 先只读预览(每个仓位能领多少、美元价值),再把全部(或选中的)仓位的领取指令打包成交易,发送前用 /simulate 模拟。
|
|
4
|
+
* 领取的指令就是 /liquidity 的 collectFees(手续费 + 全部奖励,SOL 自动解包、缺少的代币账户自动创建),这里只做批量和打包
|
|
5
|
+
*/
|
|
6
|
+
import type { RequestOptions, SolanaClient } from './client.js';
|
|
7
|
+
import type { SolanaLiquidityPlan } from './liquidity/types.js';
|
|
8
|
+
import { type SolanaLpProtocol, type SolanaLpToken } from './lp.js';
|
|
9
|
+
import { type SolanaPriceSource } from './price.js';
|
|
10
|
+
import { type PlanSimulation, type PlanSimulationOptions, type PlannedCall } from './batchPlan.js';
|
|
11
|
+
import type { BatchCallOptions } from './write/batch.js';
|
|
12
|
+
import type { WriteResult } from './write/send.js';
|
|
13
|
+
import type { SignerInput } from './write/signer.js';
|
|
14
|
+
export type ClaimProtocol = Extract<SolanaLpProtocol, 'orca-whirlpool' | 'raydium-clmm'>;
|
|
15
|
+
/** 一项能领取的东西:手续费或挖矿奖励 */
|
|
16
|
+
export interface ClaimableAmount {
|
|
17
|
+
mint: string;
|
|
18
|
+
symbol: string | null;
|
|
19
|
+
decimals: number | null;
|
|
20
|
+
/** 数量(最小单位);读不到两端的 tick 数据时为 null */
|
|
21
|
+
amount: string | null;
|
|
22
|
+
formatted: string | null;
|
|
23
|
+
/** 美元价值(查到价格时;没有价格为 null;数量为 0 时为 0) */
|
|
24
|
+
usd: number | null;
|
|
25
|
+
/** 只在按代币汇总(`Claimable.tokens`)里:true 表示有仓位的数量读不到,`amount` 只是已读到部分的合计(偏低),`usd` 为 null */
|
|
26
|
+
incomplete?: true;
|
|
27
|
+
}
|
|
28
|
+
export interface ClaimablePosition {
|
|
29
|
+
protocol: ClaimProtocol;
|
|
30
|
+
protocolName: string;
|
|
31
|
+
/** 仓位 NFT 的 mint 和仓位账户 */
|
|
32
|
+
positionMint: string;
|
|
33
|
+
position: string;
|
|
34
|
+
pool: string;
|
|
35
|
+
token0: SolanaLpToken;
|
|
36
|
+
token1: SolanaLpToken;
|
|
37
|
+
liquidity: string;
|
|
38
|
+
inRange: boolean;
|
|
39
|
+
/** token0 / token1 的未领取手续费 */
|
|
40
|
+
fees: [ClaimableAmount, ClaimableAmount];
|
|
41
|
+
/** 池子里已初始化的挖矿奖励(Orca 的奖励 slot / Raydium 的 reward_infos),数量按程序的方式结算到当前时间 */
|
|
42
|
+
rewards: Array<ClaimableAmount & {
|
|
43
|
+
index: number;
|
|
44
|
+
}>;
|
|
45
|
+
feesUsd: number | null;
|
|
46
|
+
rewardsUsd: number | null;
|
|
47
|
+
/** 手续费 + 奖励的美元价值:有数量的项缺价格或读不到时为 null */
|
|
48
|
+
totalUsd: number | null;
|
|
49
|
+
}
|
|
50
|
+
export interface Claimable {
|
|
51
|
+
owner: string;
|
|
52
|
+
/** 有手续费或奖励可领的仓位(没有流动性也没有可领的不在内),按美元价值从大到小 */
|
|
53
|
+
positions: ClaimablePosition[];
|
|
54
|
+
/** 按代币汇总:手续费 + 奖励,所有仓位合计 */
|
|
55
|
+
tokens: ClaimableAmount[];
|
|
56
|
+
/** true:有仓位的数量读不到(tick 数据读不到),`tokens` 的数量和各项合计都可能偏低 */
|
|
57
|
+
incomplete: boolean;
|
|
58
|
+
feesUsd: number | null;
|
|
59
|
+
rewardsUsd: number | null;
|
|
60
|
+
totalUsd: number | null;
|
|
61
|
+
warnings: string[];
|
|
62
|
+
}
|
|
63
|
+
export interface ClaimableOptions extends RequestOptions {
|
|
64
|
+
/** 只看这些仓位 NFT 的 mint(读 ATA,免费公共节点也能用);不传时列出全部代币账户(getTokenAccountsByOwner,需要支持它的节点) */
|
|
65
|
+
mints?: readonly string[];
|
|
66
|
+
/** 协议,默认两个都查 */
|
|
67
|
+
protocols?: readonly ClaimProtocol[];
|
|
68
|
+
/** 价格:true(默认)用 DefiLlama;false 不查;也可以传自己的价格源(如 combinePrices([defillamaPrices(), onchainPrices()])) */
|
|
69
|
+
prices?: boolean | SolanaPriceSource;
|
|
70
|
+
/** 奖励结算到哪个时刻(unix 秒),默认当前时间 */
|
|
71
|
+
now?: number;
|
|
72
|
+
fetch?: typeof fetch;
|
|
73
|
+
}
|
|
74
|
+
/** @deprecated 改名为 ClaimableOptions(与其他查询的 options 命名统一),旧名保留 */
|
|
75
|
+
export type ClaimQuery = ClaimableOptions;
|
|
76
|
+
/**
|
|
77
|
+
* 预览能领取的手续费和挖矿奖励(只读取,不构建交易):每个仓位的两种手续费、每个奖励的数量和美元价值,以及按代币汇总。
|
|
78
|
+
* 奖励照搬程序的结算:池子的奖励增长按时间摊给当前流动性,再按仓位区间内的增长计算
|
|
79
|
+
*
|
|
80
|
+
* ```ts
|
|
81
|
+
* const c = await claimable(client, owner)
|
|
82
|
+
* c.totalUsd // 全部能领的美元价值
|
|
83
|
+
* c.positions[0].rewards // [{ index: 0, symbol: 'RAY', formatted: '0.042698', usd: 0.083 }]
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export declare function claimable(client: SolanaClient, owner: string, options?: ClaimableOptions): Promise<Claimable>;
|
|
87
|
+
/** 要领取的仓位:claimable 的结果,或只给协议 + 仓位 NFT 的 mint(getLpPositions 的结果也可以) */
|
|
88
|
+
export type ClaimTarget = Pick<ClaimablePosition, 'protocol' | 'positionMint'> & {
|
|
89
|
+
pool?: string;
|
|
90
|
+
};
|
|
91
|
+
export interface BuildClaimOptions extends RequestOptions {
|
|
92
|
+
/** wSOL(池子的一边或奖励)原来没有账户时用完关闭、换回 SOL,默认 true(同 /liquidity) */
|
|
93
|
+
native?: boolean;
|
|
94
|
+
/** 同时构建几个仓位(每个要读几次账户),默认 4 */
|
|
95
|
+
concurrency?: number;
|
|
96
|
+
}
|
|
97
|
+
export interface ClaimCall extends PlannedCall {
|
|
98
|
+
protocol: ClaimProtocol;
|
|
99
|
+
positionMint: string;
|
|
100
|
+
/** /liquidity 的领取计划(预计的手续费、奖励的代币、步骤) */
|
|
101
|
+
plan: SolanaLiquidityPlan;
|
|
102
|
+
}
|
|
103
|
+
export interface ClaimPlan {
|
|
104
|
+
owner: string;
|
|
105
|
+
/** 每个仓位一个调用(创建缺少的代币账户 + 领取手续费 + 领取每个奖励,原子执行) */
|
|
106
|
+
calls: ClaimCall[];
|
|
107
|
+
/** 构建失败的仓位:仓位不在 owner 名下、不支持的代币(带转账手续费的 Token-2022 池子)等 */
|
|
108
|
+
failed: Array<{
|
|
109
|
+
position: ClaimTarget;
|
|
110
|
+
error: string;
|
|
111
|
+
}>;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 构建批量领取(只读取、不签名):每个仓位一个调用,指令来自 /liquidity 的 buildCollectFees,构建时重新读取仓位。
|
|
115
|
+
* 打包成交易由 simulateClaim / claimAll(batchCall)完成
|
|
116
|
+
*
|
|
117
|
+
* ```ts
|
|
118
|
+
* const c = await claimable(client, owner)
|
|
119
|
+
* const plan = await buildClaimAll(client, owner, c.positions)
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export declare function buildClaimAll(client: SolanaClient, owner: string, positions: readonly ClaimTarget[], options?: BuildClaimOptions): Promise<ClaimPlan>;
|
|
123
|
+
export interface ClaimSimulation extends PlanSimulation {
|
|
124
|
+
/** 模拟里收到的代币合计(手续费支付者 / owner 的余额变化,按资产汇总;SOL 为 'native') */
|
|
125
|
+
received: Array<{
|
|
126
|
+
asset: string;
|
|
127
|
+
symbol: string;
|
|
128
|
+
decimals: number;
|
|
129
|
+
delta: string;
|
|
130
|
+
formatted: string;
|
|
131
|
+
usd?: number | null;
|
|
132
|
+
}>;
|
|
133
|
+
}
|
|
134
|
+
/** 用 /simulate 模拟构建好的批量领取(不签名、不发送):逐笔交易的结果、哪些仓位会失败、收到的代币合计 */
|
|
135
|
+
export declare function simulateClaim(client: SolanaClient, plan: ClaimPlan, options?: Omit<PlanSimulationOptions, 'watch'>): Promise<ClaimSimulation>;
|
|
136
|
+
export interface ClaimOptions extends BatchCallOptions, BuildClaimOptions {
|
|
137
|
+
/** 发送前先用 /simulate 模拟,模拟失败的仓位不发送,默认 true */
|
|
138
|
+
simulate?: boolean;
|
|
139
|
+
/** 只领取预计价值不低于它的仓位(美元);没有价格的仓位照常领取。默认 0 */
|
|
140
|
+
minUsd?: number;
|
|
141
|
+
}
|
|
142
|
+
export interface ClaimCallResult extends WriteResult {
|
|
143
|
+
protocol: ClaimProtocol;
|
|
144
|
+
positionMint: string;
|
|
145
|
+
}
|
|
146
|
+
export interface ClaimResult {
|
|
147
|
+
plan: ClaimPlan;
|
|
148
|
+
/** 发送前的模拟(simulate: false 时为 null) */
|
|
149
|
+
simulation: ClaimSimulation | null;
|
|
150
|
+
/** 与 plan.calls 一一对应;dryRun 时 status 为 'simulated' / 'failed',没有签名 */
|
|
151
|
+
results: ClaimCallResult[];
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 批量领取:构建 → 模拟 → 用 from 签名发送(钱包同 /write 的 batchCall,多个仓位打包进同一笔交易,feePayer 可以替 owner 付手续费)。
|
|
155
|
+
* positions 不传时先预览、领取全部有东西可领的仓位;一个仓位失败不影响其他的。dryRun: true 只构建和模拟(不签名,from 只用来取地址)
|
|
156
|
+
*
|
|
157
|
+
* ```ts
|
|
158
|
+
* await claimAll(client, key) // 全部
|
|
159
|
+
* await claimAll(client, key, c.positions.slice(0, 5), { dryRun: true })
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
export declare function claimAll(client: SolanaClient, from: SignerInput, positions?: readonly (ClaimTarget & Partial<Pick<ClaimablePosition, 'totalUsd'>>)[], options?: ClaimOptions): Promise<ClaimResult>;
|
|
163
|
+
//# sourceMappingURL=claim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../src/claim.ts"],"names":[],"mappings":"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"}
|
package/dist/claim.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { InvalidAddressError, isAddress } from './address.js';
|
|
2
|
+
import { buildCollectFees } from './liquidity/index.js';
|
|
3
|
+
import { lpPositions } from './lp.js';
|
|
4
|
+
import { defillamaPrices } from './price.js';
|
|
5
|
+
import { simulatePlan, sendCalls } from './batchPlan.js';
|
|
6
|
+
import { formatUnits } from './layout.js';
|
|
7
|
+
import { mapPool } from './util.js';
|
|
8
|
+
const MAX_ERROR = 200;
|
|
9
|
+
/**
|
|
10
|
+
* 预览能领取的手续费和挖矿奖励(只读取,不构建交易):每个仓位的两种手续费、每个奖励的数量和美元价值,以及按代币汇总。
|
|
11
|
+
* 奖励照搬程序的结算:池子的奖励增长按时间摊给当前流动性,再按仓位区间内的增长计算
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* const c = await claimable(client, owner)
|
|
15
|
+
* c.totalUsd // 全部能领的美元价值
|
|
16
|
+
* c.positions[0].rewards // [{ index: 0, symbol: 'RAY', formatted: '0.042698', usd: 0.083 }]
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export async function claimable(client, owner, options = {}) {
|
|
20
|
+
if (!isAddress(owner)) {
|
|
21
|
+
throw new InvalidAddressError(`Invalid owner address: ${owner}`, owner);
|
|
22
|
+
}
|
|
23
|
+
const { signal } = options;
|
|
24
|
+
const protocols = options.protocols ? [...options.protocols] : ['orca-whirlpool', 'raydium-clmm'];
|
|
25
|
+
const list = (await lpPositions(client, owner, { protocols, mints: options.mints, rewards: true, now: options.now, signal })).filter((p) => p.type === 'clmm');
|
|
26
|
+
const warnings = [];
|
|
27
|
+
const mints = [...new Set(list.flatMap((p) => [p.token0.mint, p.token1.mint, ...(p.rewards ?? []).map((r) => r.mint)]))];
|
|
28
|
+
const source = options.prices === false ? null : options.prices && options.prices !== true ? options.prices : defillamaPrices();
|
|
29
|
+
let priceMap = new Map();
|
|
30
|
+
if (source && mints.length) {
|
|
31
|
+
try {
|
|
32
|
+
priceMap = await source.prices({ mints, fetch: options.fetch ?? ((...args) => fetch(...args)), signal, client });
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (signal?.aborted)
|
|
36
|
+
throw err;
|
|
37
|
+
warnings.push(`Price lookup failed (${(err instanceof Error ? err.message : String(err)).slice(0, MAX_ERROR)}): usd values are null`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const amountOf = (token, amount) => {
|
|
41
|
+
const formatted = amount === null || token.decimals === null ? null : formatUnits(amount, token.decimals);
|
|
42
|
+
const price = priceMap.get(token.mint);
|
|
43
|
+
// 数量为 0 的不需要价格
|
|
44
|
+
const usd = amount === 0n ? 0 : formatted === null || price === undefined || !source ? null : Number(formatted) * price;
|
|
45
|
+
return { mint: token.mint, symbol: token.symbol, decimals: token.decimals, amount: amount === null ? null : amount.toString(), formatted, usd };
|
|
46
|
+
};
|
|
47
|
+
const sum = (items) => (items.some((i) => i.usd === null) ? null : items.reduce((acc, i) => acc + i.usd, 0));
|
|
48
|
+
const positions = [];
|
|
49
|
+
for (const p of list) {
|
|
50
|
+
const fees = [amountOf(p.token0, p.fees0 === null ? null : BigInt(p.fees0)), amountOf(p.token1, p.fees1 === null ? null : BigInt(p.fees1))];
|
|
51
|
+
const rewards = (p.rewards ?? []).map((r) => ({ ...amountOf(r, r.amount === null ? null : BigInt(r.amount)), index: r.index }));
|
|
52
|
+
const unknown = [...fees, ...rewards].some((x) => x.amount === null);
|
|
53
|
+
if (!unknown && [...fees, ...rewards].every((x) => x.amount === '0'))
|
|
54
|
+
continue;
|
|
55
|
+
positions.push({
|
|
56
|
+
protocol: p.protocol,
|
|
57
|
+
protocolName: p.protocolName,
|
|
58
|
+
positionMint: p.positionMint,
|
|
59
|
+
position: p.position,
|
|
60
|
+
pool: p.pool,
|
|
61
|
+
token0: p.token0,
|
|
62
|
+
token1: p.token1,
|
|
63
|
+
liquidity: p.liquidity,
|
|
64
|
+
inRange: p.inRange,
|
|
65
|
+
fees,
|
|
66
|
+
rewards,
|
|
67
|
+
feesUsd: sum(fees),
|
|
68
|
+
rewardsUsd: sum(rewards),
|
|
69
|
+
totalUsd: sum([...fees, ...rewards]),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
positions.sort((a, b) => (b.totalUsd ?? -1) - (a.totalUsd ?? -1));
|
|
73
|
+
if (positions.some((p) => [...p.fees, ...p.rewards].some((x) => x.amount === null))) {
|
|
74
|
+
warnings.push("Some positions' tick arrays could not be read: their amounts are null (they are still included)");
|
|
75
|
+
}
|
|
76
|
+
// 按代币汇总
|
|
77
|
+
const byMint = new Map();
|
|
78
|
+
for (const item of positions.flatMap((p) => [...p.fees, ...p.rewards])) {
|
|
79
|
+
const entry = byMint.get(item.mint) ?? { token: item, amount: 0n, unknown: false };
|
|
80
|
+
entry.amount += BigInt(item.amount ?? 0);
|
|
81
|
+
entry.unknown ||= item.amount === null;
|
|
82
|
+
byMint.set(item.mint, entry);
|
|
83
|
+
}
|
|
84
|
+
// 有读不到的数量时保留该代币(即使已读到的部分为 0),标记 incomplete,美元价值为 null
|
|
85
|
+
const tokens = [...byMint.values()]
|
|
86
|
+
.filter((e) => e.unknown || e.amount !== 0n)
|
|
87
|
+
.map((e) => (e.unknown ? { ...amountOf(e.token, e.amount), usd: null, incomplete: true } : amountOf(e.token, e.amount)));
|
|
88
|
+
const sumKnown = (items) => (items.some((x) => x === null) ? null : items.reduce((acc, x) => acc + x, 0));
|
|
89
|
+
return {
|
|
90
|
+
owner,
|
|
91
|
+
positions,
|
|
92
|
+
tokens,
|
|
93
|
+
incomplete: tokens.some((t) => t.incomplete),
|
|
94
|
+
feesUsd: sumKnown(positions.map((p) => p.feesUsd)),
|
|
95
|
+
rewardsUsd: sumKnown(positions.map((p) => p.rewardsUsd)),
|
|
96
|
+
totalUsd: sumKnown(positions.map((p) => p.totalUsd)),
|
|
97
|
+
warnings,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* 构建批量领取(只读取、不签名):每个仓位一个调用,指令来自 /liquidity 的 buildCollectFees,构建时重新读取仓位。
|
|
102
|
+
* 打包成交易由 simulateClaim / claimAll(batchCall)完成
|
|
103
|
+
*
|
|
104
|
+
* ```ts
|
|
105
|
+
* const c = await claimable(client, owner)
|
|
106
|
+
* const plan = await buildClaimAll(client, owner, c.positions)
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export async function buildClaimAll(client, owner, positions, options = {}) {
|
|
110
|
+
if (!isAddress(owner)) {
|
|
111
|
+
throw new InvalidAddressError(`Invalid owner address: ${owner}`, owner);
|
|
112
|
+
}
|
|
113
|
+
const unique = [...new Map(positions.map((p) => [p.positionMint, p])).values()];
|
|
114
|
+
const calls = [];
|
|
115
|
+
const failed = [];
|
|
116
|
+
const built = await mapPool(unique, options.concurrency ?? 4, async (position) => {
|
|
117
|
+
try {
|
|
118
|
+
const plan = await buildCollectFees(client, owner, { position: { protocol: position.protocol, positionMint: position.positionMint, pool: position.pool } }, { native: options.native, signal: options.signal });
|
|
119
|
+
return { position, plan, error: null };
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
if (options.signal?.aborted)
|
|
123
|
+
throw err;
|
|
124
|
+
return { position, plan: null, error: (err instanceof Error ? err.message : String(err)).slice(0, MAX_ERROR) };
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
for (const item of built) {
|
|
128
|
+
if (item.plan === null) {
|
|
129
|
+
failed.push({ position: item.position, error: item.error });
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
calls.push({ owner, protocol: item.position.protocol, positionMint: item.position.positionMint, plan: item.plan, instructions: item.plan.steps.flatMap((s) => s.instructions) });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return { owner, calls, failed };
|
|
136
|
+
}
|
|
137
|
+
/** 用 /simulate 模拟构建好的批量领取(不签名、不发送):逐笔交易的结果、哪些仓位会失败、收到的代币合计 */
|
|
138
|
+
export async function simulateClaim(client, plan, options = {}) {
|
|
139
|
+
const sim = await simulatePlan(client, plan.calls, options);
|
|
140
|
+
const totals = new Map();
|
|
141
|
+
const payer = options.feePayer ?? plan.owner;
|
|
142
|
+
for (const { simulation } of sim.transactions) {
|
|
143
|
+
for (const change of simulation.balanceChanges) {
|
|
144
|
+
if (change.address !== payer && change.address !== plan.owner)
|
|
145
|
+
continue;
|
|
146
|
+
const entry = totals.get(change.asset) ?? { change, delta: 0n, usd: undefined };
|
|
147
|
+
entry.delta += BigInt(change.delta);
|
|
148
|
+
// 美元价值是所有变化的合计(任何一笔没有价格就是 null);都没有 usd 字段时不给
|
|
149
|
+
if (change.usd !== undefined)
|
|
150
|
+
entry.usd = entry.usd === null || change.usd === null ? null : (entry.usd ?? 0) + change.usd;
|
|
151
|
+
totals.set(change.asset, entry);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const received = [...totals.values()]
|
|
155
|
+
.filter((e) => e.delta !== 0n)
|
|
156
|
+
.map((e) => ({
|
|
157
|
+
asset: e.change.asset,
|
|
158
|
+
symbol: e.change.symbol,
|
|
159
|
+
decimals: e.change.decimals,
|
|
160
|
+
delta: e.delta.toString(),
|
|
161
|
+
formatted: `${e.delta < 0n ? '-' : ''}${formatUnits(e.delta < 0n ? -e.delta : e.delta, e.change.decimals)}`,
|
|
162
|
+
...(e.usd !== undefined ? { usd: e.usd } : {}),
|
|
163
|
+
}));
|
|
164
|
+
return { ...sim, received };
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* 批量领取:构建 → 模拟 → 用 from 签名发送(钱包同 /write 的 batchCall,多个仓位打包进同一笔交易,feePayer 可以替 owner 付手续费)。
|
|
168
|
+
* positions 不传时先预览、领取全部有东西可领的仓位;一个仓位失败不影响其他的。dryRun: true 只构建和模拟(不签名,from 只用来取地址)
|
|
169
|
+
*
|
|
170
|
+
* ```ts
|
|
171
|
+
* await claimAll(client, key) // 全部
|
|
172
|
+
* await claimAll(client, key, c.positions.slice(0, 5), { dryRun: true })
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
export async function claimAll(client, from, positions, options = {}) {
|
|
176
|
+
const { resolveSigner } = await import('./write/signer.js');
|
|
177
|
+
const owner = (await resolveSigner(from)).address;
|
|
178
|
+
const minUsd = options.minUsd ?? 0;
|
|
179
|
+
const targets = (positions ?? (await claimable(client, owner, { signal: options.signal })).positions).filter((p) => p.totalUsd === undefined || p.totalUsd === null || p.totalUsd >= minUsd);
|
|
180
|
+
const plan = await buildClaimAll(client, owner, targets, options);
|
|
181
|
+
const feePayer = options.feePayer === undefined ? undefined : (await resolveSigner(options.feePayer)).address;
|
|
182
|
+
const simulation = options.simulate === false && !options.dryRun ? null : await simulateClaim(client, plan, { feePayer, signal: options.signal, batchSize: (options.mode ?? 'pack') === 'tx' ? 1 : options.batchSize });
|
|
183
|
+
const failed = new Map(simulation?.failed.map((f) => [f.index, f.error]));
|
|
184
|
+
const sent = options.dryRun ? [] : await sendCalls(client, from, plan.calls.filter((_, i) => !failed.has(i)), options);
|
|
185
|
+
let next = 0;
|
|
186
|
+
const results = plan.calls.map((call, index) => {
|
|
187
|
+
const base = { protocol: call.protocol, positionMint: call.positionMint };
|
|
188
|
+
const error = failed.get(index);
|
|
189
|
+
if (error !== undefined)
|
|
190
|
+
return { index, from: owner, status: 'failed', signature: null, slot: null, fee: null, computeUnits: null, error, ...base };
|
|
191
|
+
if (options.dryRun)
|
|
192
|
+
return { index, from: owner, status: 'simulated', signature: null, slot: null, fee: null, computeUnits: null, error: null, ...base };
|
|
193
|
+
return { ...sent[next++], index, ...base };
|
|
194
|
+
});
|
|
195
|
+
return { plan, simulation, results };
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=claim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim.js","sourceRoot":"","sources":["../src/claim.ts"],"names":[],"mappings":"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"}
|