@w3lib/solana-batch-call 0.6.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 +33 -0
- package/README.md +16 -8
- 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 +2 -2
- package/dist/batchPlan.d.ts.map +1 -1
- package/dist/batchPlan.js +5 -26
- package/dist/batchPlan.js.map +1 -1
- 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 +5 -3
- package/dist/claim.d.ts.map +1 -1
- package/dist/claim.js +10 -10
- package/dist/claim.js.map +1 -1
- 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.map +1 -1
- package/dist/decode.js +2 -29
- package/dist/decode.js.map +1 -1
- 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.map +1 -1
- package/dist/history.js +4 -15
- package/dist/history.js.map +1 -1
- 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/lp.d.ts +9 -13
- package/dist/lp.d.ts.map +1 -1
- package/dist/lp.js +67 -55
- package/dist/lp.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/reclaim.d.ts +4 -2
- package/dist/reclaim.d.ts.map +1 -1
- package/dist/reclaim.js +16 -16
- package/dist/reclaim.js.map +1 -1
- 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 +400 -109
- package/dist/rpc.js.map +1 -1
- package/dist/simulate.d.ts.map +1 -1
- package/dist/simulate.js +3 -26
- package/dist/simulate.js.map +1 -1
- 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 +3 -3
- package/dist/subpaths/claim.d.ts.map +1 -1
- package/dist/subpaths/claim.js.map +1 -1
- package/dist/subpaths/reclaim.d.ts +3 -3
- package/dist/subpaths/reclaim.d.ts.map +1 -1
- package/dist/subpaths/reclaim.js.map +1 -1
- 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/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 +1 -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 +6 -26
- package/src/bytes.ts +89 -0
- package/src/claim.ts +15 -11
- package/src/client.ts +59 -1239
- package/src/clientConfig.ts +12 -0
- package/src/decode.ts +4 -30
- package/src/fees.ts +2 -9
- package/src/history.ts +4 -15
- package/src/index.ts +13 -1
- package/src/layout.ts +63 -82
- package/src/liquidity/common.ts +2 -2
- package/src/lp.ts +86 -60
- package/src/portfolio.ts +8 -11
- package/src/reclaim.ts +20 -17
- package/src/risk.ts +2 -2
- package/src/rpc.ts +472 -116
- package/src/simulate.ts +3 -21
- package/src/source.ts +14 -5
- package/src/subpaths/approvals.ts +3 -2
- package/src/subpaths/claim.ts +3 -2
- package/src/subpaths/reclaim.ts +3 -2
- 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/pack.ts +142 -0
- package/src/write/send.ts +74 -407
- package/src/write/tracker.ts +152 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { SYSTEM_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from '../constants.js';
|
|
2
|
+
// 交易错误的可读说明(发送、/swap 的交易检查、/fees 共用)
|
|
3
|
+
export function errorText(err) {
|
|
4
|
+
return err instanceof Error ? err.message : String(err);
|
|
5
|
+
}
|
|
6
|
+
// ---- 交易错误 ----
|
|
7
|
+
const TX_ERRORS = {
|
|
8
|
+
InsufficientFundsForFee: 'insufficient SOL for the transaction fee',
|
|
9
|
+
AccountNotFound: 'fee payer account not found (it has no SOL)',
|
|
10
|
+
BlockhashNotFound: 'blockhash not found',
|
|
11
|
+
AlreadyProcessed: 'transaction already processed',
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* 日志里最有用的一行:程序打印的 “Program log: Error: …”,其次是系统程序直接打印的说明(如 “Transfer: insufficient lamports …”,
|
|
15
|
+
* 不以 “Program ” 开头),最后才是运行时的 “Program … failed: custom program error: 0x1”
|
|
16
|
+
*/
|
|
17
|
+
function logDetail(logs) {
|
|
18
|
+
const reversed = [...logs].reverse();
|
|
19
|
+
const programError = reversed.find((line) => /^Program log: (Error|error)/.test(line));
|
|
20
|
+
if (programError)
|
|
21
|
+
return programError.replace(/^Program log: /, '');
|
|
22
|
+
const plain = reversed.find((line) => !line.startsWith('Program '));
|
|
23
|
+
if (plain)
|
|
24
|
+
return plain;
|
|
25
|
+
return reversed.find((line) => / failed: /.test(line))?.replace(/^Program \w+ failed: /, '');
|
|
26
|
+
}
|
|
27
|
+
// 常见程序的自定义错误码(上链失败时没有日志,只有错误码)
|
|
28
|
+
const SYSTEM_ERRORS = ['account already in use', 'insufficient lamports', 'invalid program id', 'invalid account data length'];
|
|
29
|
+
const TOKEN_ERRORS = {
|
|
30
|
+
0: 'account not rent-exempt',
|
|
31
|
+
1: 'insufficient funds',
|
|
32
|
+
2: 'invalid mint',
|
|
33
|
+
3: 'account not associated with this mint',
|
|
34
|
+
4: 'owner does not match',
|
|
35
|
+
9: 'account is not initialized',
|
|
36
|
+
11: 'non-native account can only be closed if its balance is zero',
|
|
37
|
+
17: 'account is frozen',
|
|
38
|
+
18: 'mint decimals mismatch',
|
|
39
|
+
};
|
|
40
|
+
function customErrorText(program, code) {
|
|
41
|
+
if (program === SYSTEM_PROGRAM_ID)
|
|
42
|
+
return SYSTEM_ERRORS[code];
|
|
43
|
+
if (program === TOKEN_PROGRAM_ID || program === TOKEN_2022_PROGRAM_ID)
|
|
44
|
+
return TOKEN_ERRORS[code];
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 交易错误的可读说明:优先取日志(见 logDetail),否则按错误类型;
|
|
49
|
+
* programs 是每条指令的程序(按下标),用来翻译常见程序的自定义错误码
|
|
50
|
+
*/
|
|
51
|
+
export function transactionErrorText(err, logs, programs) {
|
|
52
|
+
const detail = logDetail(logs ?? []);
|
|
53
|
+
if (typeof err === 'string') {
|
|
54
|
+
return TX_ERRORS[err] ?? err;
|
|
55
|
+
}
|
|
56
|
+
const instruction = err?.InstructionError;
|
|
57
|
+
if (instruction) {
|
|
58
|
+
const [index, reason] = instruction;
|
|
59
|
+
const custom = reason?.Custom;
|
|
60
|
+
const known = custom === undefined ? undefined : customErrorText(programs?.[index], custom);
|
|
61
|
+
return detail ?? known ?? (typeof reason === 'string' ? reason : JSON.stringify(reason));
|
|
62
|
+
}
|
|
63
|
+
if (err?.InsufficientFundsForRent) {
|
|
64
|
+
return 'account would be left with less SOL than the rent-exempt minimum';
|
|
65
|
+
}
|
|
66
|
+
return detail ?? JSON.stringify(err);
|
|
67
|
+
}
|
|
68
|
+
export function isBudgetExceeded(err, logs) {
|
|
69
|
+
const reason = err?.InstructionError?.[1];
|
|
70
|
+
return reason === 'ComputationalBudgetExceeded' || (logs ?? []).some((l) => /exceeded CUs meter|compute units/i.test(l) && /exceed/i.test(l));
|
|
71
|
+
}
|
|
72
|
+
/** 用户在钱包里拒绝签名 */
|
|
73
|
+
export function isRejection(err) {
|
|
74
|
+
const e = err;
|
|
75
|
+
return e?.code === 4001 || /reject|denied|cancel|declined/i.test(`${String(e?.name ?? '')} ${String(e?.message ?? '')}`);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/write/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Instruction } from './transaction.js';
|
|
2
|
+
/** 打包用的占位 blockhash(大小与真实值相同) */
|
|
3
|
+
export declare const PLACEHOLDER_BLOCKHASH = "11111111111111111111111111111111";
|
|
4
|
+
/** 计算预算指令(上限 + 单价):发送时排在最前面 */
|
|
5
|
+
export declare function budgetInstructions(units: number, price: bigint): Instruction[];
|
|
6
|
+
/** 加上计算预算指令后,这些指令能否放进一笔交易(完整编译一次;不超过 1232 字节和 64 个账户) */
|
|
7
|
+
export declare function fitsInTransaction(payer: string, instructions: readonly Instruction[]): boolean;
|
|
8
|
+
export interface PackOptions {
|
|
9
|
+
/** 每笔交易最多几个调用,默认不限(只受交易大小 / 账户数限制) */
|
|
10
|
+
batchSize?: number;
|
|
11
|
+
/** 只能单独成一笔交易的调用(如计算单元和优先费用固定的扫空转账) */
|
|
12
|
+
alone?: (index: number) => boolean;
|
|
13
|
+
}
|
|
14
|
+
/** 打包结果的一笔交易:包含的调用下标;tooLarge 为 true 时是单个调用自己就放不进一笔交易 */
|
|
15
|
+
export interface Pack {
|
|
16
|
+
indices: number[];
|
|
17
|
+
tooLarge: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 把调用按顺序打包成交易(batchCall / batchTransfer / batchCollect 的发送和 /reclaim、/claim 的批量计划共用):
|
|
21
|
+
* 相邻的调用放进同一笔,直到加上计算预算指令后超过 1232 字节或 64 个账户、或达到 batchSize;alone 的调用单独成一笔;
|
|
22
|
+
* 单个调用自己就放不进的单独成一笔并标记 tooLarge。
|
|
23
|
+
* 大小按累计的账户集合和指令字节增量估算(每加一个调用只看它自己的指令),每笔打完再完整编译校验一次
|
|
24
|
+
*/
|
|
25
|
+
export declare function packUnits(payer: string, units: ReadonlyArray<{
|
|
26
|
+
instructions: readonly Instruction[];
|
|
27
|
+
}>, options?: PackOptions): Pack[];
|
|
28
|
+
//# sourceMappingURL=pack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../../src/write/pack.ts"],"names":[],"mappings":"AACA,OAAO,EAAwE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEzH,iCAAiC;AACjC,eAAO,MAAM,qBAAqB,qCAAqC,CAAA;AAEvE,+BAA+B;AAC/B,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAE9E;AAED,yDAAyD;AACzD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAG9F;AA4ED,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sCAAsC;IACtC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;CACnC;AAED,yDAAyD;AACzD,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC;IAAE,YAAY,EAAE,SAAS,WAAW,EAAE,CAAA;CAAE,CAAC,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI,EAAE,CA+B1I"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { MAX_COMPUTE_UNITS, setComputeUnitLimit, setComputeUnitPrice } from './instructions.js';
|
|
2
|
+
import { MAX_ACCOUNT_LOCKS, PACKET_DATA_SIZE, compileMessage, transactionSize } from './transaction.js';
|
|
3
|
+
/** 打包用的占位 blockhash(大小与真实值相同) */
|
|
4
|
+
export const PLACEHOLDER_BLOCKHASH = '11111111111111111111111111111111';
|
|
5
|
+
/** 计算预算指令(上限 + 单价):发送时排在最前面 */
|
|
6
|
+
export function budgetInstructions(units, price) {
|
|
7
|
+
return [setComputeUnitLimit(units), setComputeUnitPrice(price)];
|
|
8
|
+
}
|
|
9
|
+
/** 加上计算预算指令后,这些指令能否放进一笔交易(完整编译一次;不超过 1232 字节和 64 个账户) */
|
|
10
|
+
export function fitsInTransaction(payer, instructions) {
|
|
11
|
+
const message = compileMessage(payer, [...budgetInstructions(MAX_COMPUTE_UNITS, 0n), ...instructions], PLACEHOLDER_BLOCKHASH);
|
|
12
|
+
return transactionSize(message) <= PACKET_DATA_SIZE && message.accountKeys.length <= MAX_ACCOUNT_LOCKS;
|
|
13
|
+
}
|
|
14
|
+
function compactLength(n) {
|
|
15
|
+
return n < 0x80 ? 1 : n < 0x4000 ? 2 : 3;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 增量估算 legacy 交易的大小(与 compileMessage + transactionSize 的结果相同):
|
|
19
|
+
* 签名数 + 64 × 签名数 + 3 字节头 + 账户数 + 32 × 账户数 + 32 字节 blockhash + 指令数 + 各指令(程序下标 1 + 账户数 + 账户下标 + 数据长度 + 数据)。
|
|
20
|
+
* 只记累计的账户集合(是否签名者)和指令字节,加一个调用只看它自己的指令
|
|
21
|
+
*/
|
|
22
|
+
class SizeEstimate {
|
|
23
|
+
/** 账户 → 是否签名者 */
|
|
24
|
+
#signer = new Map();
|
|
25
|
+
#signers = 0;
|
|
26
|
+
#instructions = 0;
|
|
27
|
+
#instructionBytes = 0;
|
|
28
|
+
constructor(payer) {
|
|
29
|
+
this.#signer.set(payer, true);
|
|
30
|
+
this.#signers = 1;
|
|
31
|
+
this.add(budgetInstructions(MAX_COMPUTE_UNITS, 0n));
|
|
32
|
+
}
|
|
33
|
+
/** 加入这些指令后的大小和账户数(不修改状态) */
|
|
34
|
+
probe(instructions) {
|
|
35
|
+
let accounts = this.#signer.size;
|
|
36
|
+
let signers = this.#signers;
|
|
37
|
+
let bytes = this.#instructionBytes;
|
|
38
|
+
const added = new Map();
|
|
39
|
+
const touch = (pubkey, isSigner) => {
|
|
40
|
+
// 本次已经加过 / 升级过的以 added 为准(累计集合里是非签名者 false 时,?? 不会回落,不能先查累计集合)
|
|
41
|
+
const known = added.has(pubkey) ? added.get(pubkey) : this.#signer.get(pubkey);
|
|
42
|
+
if (known === undefined) {
|
|
43
|
+
accounts++;
|
|
44
|
+
if (isSigner)
|
|
45
|
+
signers++;
|
|
46
|
+
added.set(pubkey, isSigner);
|
|
47
|
+
}
|
|
48
|
+
else if (isSigner && !known) {
|
|
49
|
+
signers++;
|
|
50
|
+
added.set(pubkey, true);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
for (const ix of instructions) {
|
|
54
|
+
ix.keys.forEach((k) => touch(k.pubkey, k.isSigner));
|
|
55
|
+
touch(ix.programId, false);
|
|
56
|
+
bytes += 1 + compactLength(ix.keys.length) + ix.keys.length + compactLength(ix.data.length) + ix.data.length;
|
|
57
|
+
}
|
|
58
|
+
const count = this.#instructions + instructions.length;
|
|
59
|
+
const size = compactLength(signers) + 64 * signers + 3 + compactLength(accounts) + 32 * accounts + 32 + compactLength(count) + bytes;
|
|
60
|
+
return { size, accounts };
|
|
61
|
+
}
|
|
62
|
+
fits(instructions) {
|
|
63
|
+
const { size, accounts } = this.probe(instructions);
|
|
64
|
+
return size <= PACKET_DATA_SIZE && accounts <= MAX_ACCOUNT_LOCKS;
|
|
65
|
+
}
|
|
66
|
+
add(instructions) {
|
|
67
|
+
for (const ix of instructions) {
|
|
68
|
+
for (const k of [...ix.keys.map((key) => [key.pubkey, key.isSigner]), [ix.programId, false]]) {
|
|
69
|
+
const [pubkey, isSigner] = k;
|
|
70
|
+
const known = this.#signer.get(pubkey);
|
|
71
|
+
if (known === undefined) {
|
|
72
|
+
this.#signer.set(pubkey, isSigner);
|
|
73
|
+
if (isSigner)
|
|
74
|
+
this.#signers++;
|
|
75
|
+
}
|
|
76
|
+
else if (isSigner && !known) {
|
|
77
|
+
this.#signer.set(pubkey, true);
|
|
78
|
+
this.#signers++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
this.#instructionBytes += 1 + compactLength(ix.keys.length) + ix.keys.length + compactLength(ix.data.length) + ix.data.length;
|
|
82
|
+
this.#instructions++;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 把调用按顺序打包成交易(batchCall / batchTransfer / batchCollect 的发送和 /reclaim、/claim 的批量计划共用):
|
|
88
|
+
* 相邻的调用放进同一笔,直到加上计算预算指令后超过 1232 字节或 64 个账户、或达到 batchSize;alone 的调用单独成一笔;
|
|
89
|
+
* 单个调用自己就放不进的单独成一笔并标记 tooLarge。
|
|
90
|
+
* 大小按累计的账户集合和指令字节增量估算(每加一个调用只看它自己的指令),每笔打完再完整编译校验一次
|
|
91
|
+
*/
|
|
92
|
+
export function packUnits(payer, units, options = {}) {
|
|
93
|
+
const batchSize = options.batchSize ?? Number.POSITIVE_INFINITY;
|
|
94
|
+
const alone = options.alone ?? (() => false);
|
|
95
|
+
const packs = [];
|
|
96
|
+
let i = 0;
|
|
97
|
+
while (i < units.length) {
|
|
98
|
+
const estimate = new SizeEstimate(payer);
|
|
99
|
+
const first = units[i].instructions;
|
|
100
|
+
if (!estimate.fits(first)) {
|
|
101
|
+
packs.push({ indices: [i], tooLarge: true });
|
|
102
|
+
i++;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
estimate.add(first);
|
|
106
|
+
const indices = [i++];
|
|
107
|
+
if (!alone(indices[0])) {
|
|
108
|
+
while (i < units.length && indices.length < batchSize && !alone(i)) {
|
|
109
|
+
const next = units[i].instructions;
|
|
110
|
+
if (!estimate.fits(next))
|
|
111
|
+
break;
|
|
112
|
+
estimate.add(next);
|
|
113
|
+
indices.push(i++);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// 完整编译校验一次(估算与编译结果应当一致;万一不一致,去掉末尾的调用直到放得下,去掉的留给下一笔)
|
|
117
|
+
while (indices.length > 1 && !fitsInTransaction(payer, indices.flatMap((k) => units[k].instructions))) {
|
|
118
|
+
indices.pop();
|
|
119
|
+
i--;
|
|
120
|
+
}
|
|
121
|
+
packs.push({ indices, tooLarge: false });
|
|
122
|
+
}
|
|
123
|
+
return packs;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=pack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/write/pack.ts"],"names":[],"mappings":"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"}
|
package/dist/write/send.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { SolanaClient } from '../client.js';
|
|
2
|
+
import type { RpcSource } from '../source.js';
|
|
2
3
|
import type { ResolvedSigner, SignerInput } from './signer.js';
|
|
3
4
|
import { type Instruction } from './transaction.js';
|
|
5
|
+
export { priorityFeeFor } from './chain.js';
|
|
6
|
+
export { transactionErrorText } from './errors.js';
|
|
4
7
|
/**
|
|
5
8
|
* 每个调用的状态:
|
|
6
9
|
* - confirmed:已上链且执行成功
|
|
@@ -44,6 +47,26 @@ export interface SendOptions {
|
|
|
44
47
|
signal?: AbortSignal;
|
|
45
48
|
/** 每个结果状态变化时回调,用于展示进度 */
|
|
46
49
|
onUpdate?: (result: WriteResult) => void;
|
|
50
|
+
/**
|
|
51
|
+
* 发送交易用的节点(如专门的发送服务、质押连接的节点):URL、URL 数组、web3.js Connection 或自定义传输。
|
|
52
|
+
* 不传时用 client 的节点;模拟、查确认状态仍用 client
|
|
53
|
+
*/
|
|
54
|
+
sendRpc?: RpcSource | readonly RpcSource[];
|
|
55
|
+
/**
|
|
56
|
+
* 广播给哪些节点(sendRpc,不传时 client 的节点):
|
|
57
|
+
* - 'first'(默认):按故障切换顺序只发给第一个可用的节点
|
|
58
|
+
* - 'all':同时发给所有节点,任一接受即可(多个节点各自转发给出块节点,拥堵时更容易上链;等待确认期间的重发也会发给所有节点)。
|
|
59
|
+
* 默认 'first':公共节点对 sendTransaction 限频严,每两次轮询就重发一次时,全部广播会成倍增加请求;官方节点在浏览器里总是 403,发给它只是白费请求
|
|
60
|
+
*/
|
|
61
|
+
broadcast?: 'first' | 'all';
|
|
62
|
+
/**
|
|
63
|
+
* 计算单元上限 = 模拟消耗 × ratio + extra(默认 ratio 1.1、extra 1000),不超过 140 万。
|
|
64
|
+
* 消耗会随链上状态变化的调用(如兑换穿过的 tick 数不同)可以调大,避免上链时超出上限失败;固定手续费的调用(扫空 SOL)不受影响
|
|
65
|
+
*/
|
|
66
|
+
computeUnitMargin?: {
|
|
67
|
+
ratio?: number;
|
|
68
|
+
extra?: number;
|
|
69
|
+
};
|
|
47
70
|
}
|
|
48
71
|
/** 每个调用的结果,都是字符串 / 数字 / null,可以直接 JSON.stringify */
|
|
49
72
|
export interface WriteResult {
|
|
@@ -89,19 +112,10 @@ export interface Unit {
|
|
|
89
112
|
}
|
|
90
113
|
export declare function emptyOutcome(status: WriteStatus, error?: string | null): TxOutcome;
|
|
91
114
|
export declare function toWriteResult(index: number, from: string, outcome: TxOutcome): WriteResult;
|
|
92
|
-
/** 并发数为 limit 的 map,结果按输入顺序 */
|
|
93
|
-
export declare function mapPool<T, R>(items: readonly T[], limit: number, fn: (item: T, index: number) => Promise<R>): Promise<R[]>;
|
|
94
115
|
/** 每个签名的基础手续费(lamports) */
|
|
95
116
|
export declare const LAMPORTS_PER_SIGNATURE = 5000n;
|
|
96
117
|
/** 交易手续费:签名数 × 5000 + 优先费用(单价 × 计算单元上限,向上取整) */
|
|
97
118
|
export declare function transactionFee(signatures: number, computeUnits: number, price: bigint): bigint;
|
|
98
|
-
/**
|
|
99
|
-
* 交易错误的可读说明:优先取日志(见 logDetail),否则按错误类型;
|
|
100
|
-
* programs 是每条指令的程序(按下标),用来翻译常见程序的自定义错误码
|
|
101
|
-
*/
|
|
102
|
-
export declare function transactionErrorText(err: unknown, logs?: readonly string[] | null, programs?: readonly string[]): string;
|
|
103
|
-
/** 按 SendOptions 取优先费用单价(micro-lamports / 计算单元);writable 是交易里的可写账户 */
|
|
104
|
-
export declare function priorityFeeFor(client: SolanaClient, options: SendOptions, writable: readonly string[]): Promise<bigint>;
|
|
105
119
|
export interface SendUnitsOptions {
|
|
106
120
|
/** 每笔交易最多打包几个调用,默认不限(按交易大小 1232 字节和 64 个账户的上限) */
|
|
107
121
|
batchSize?: number;
|
package/dist/write/send.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/write/send.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/write/send.ts"],"names":[],"mappings":"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"}
|