@w3lib/solana-batch-call 0.4.0 → 0.5.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 +31 -0
- package/README.md +231 -3
- package/dist/approvals.d.ts +129 -0
- package/dist/approvals.d.ts.map +1 -0
- package/dist/approvals.js +221 -0
- package/dist/approvals.js.map +1 -0
- package/dist/fees.d.ts +89 -0
- package/dist/fees.d.ts.map +1 -0
- package/dist/fees.js +166 -0
- package/dist/fees.js.map +1 -0
- package/dist/layout.d.ts +2 -0
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +2 -2
- package/dist/layout.js.map +1 -1
- package/dist/lp.d.ts +8 -15
- package/dist/lp.d.ts.map +1 -1
- package/dist/lp.js +7 -31
- package/dist/lp.js.map +1 -1
- package/dist/names.d.ts +68 -0
- package/dist/names.d.ts.map +1 -0
- package/dist/names.js +257 -0
- package/dist/names.js.map +1 -0
- package/dist/pools.d.ts +9 -0
- package/dist/pools.d.ts.map +1 -0
- package/dist/pools.js +45 -0
- package/dist/pools.js.map +1 -0
- package/dist/portfolio.d.ts +64 -0
- package/dist/portfolio.d.ts.map +1 -0
- package/dist/portfolio.js +57 -0
- package/dist/portfolio.js.map +1 -0
- package/dist/price.d.ts +90 -0
- package/dist/price.d.ts.map +1 -0
- package/dist/price.js +287 -0
- package/dist/price.js.map +1 -0
- package/dist/risk.d.ts +84 -0
- package/dist/risk.d.ts.map +1 -0
- package/dist/risk.js +211 -0
- package/dist/risk.js.map +1 -0
- package/dist/rpc.d.ts +2 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +33 -9
- package/dist/rpc.js.map +1 -1
- package/dist/subpaths/approvals.d.ts +29 -0
- package/dist/subpaths/approvals.d.ts.map +1 -0
- package/dist/subpaths/approvals.js +30 -0
- package/dist/subpaths/approvals.js.map +1 -0
- package/dist/subpaths/fees.d.ts +23 -0
- package/dist/subpaths/fees.d.ts.map +1 -0
- package/dist/subpaths/fees.js +25 -0
- package/dist/subpaths/fees.js.map +1 -0
- package/dist/subpaths/names.d.ts +37 -0
- package/dist/subpaths/names.d.ts.map +1 -0
- package/dist/subpaths/names.js +27 -0
- package/dist/subpaths/names.js.map +1 -0
- package/dist/subpaths/price.d.ts +40 -0
- package/dist/subpaths/price.d.ts.map +1 -0
- package/dist/subpaths/price.js +43 -0
- package/dist/subpaths/price.js.map +1 -0
- package/dist/subpaths/risk.d.ts +28 -0
- package/dist/subpaths/risk.d.ts.map +1 -0
- package/dist/subpaths/risk.js +30 -0
- package/dist/subpaths/risk.js.map +1 -0
- package/dist/subpaths/swap.d.ts +22 -0
- package/dist/subpaths/swap.d.ts.map +1 -0
- package/dist/subpaths/swap.js +21 -0
- package/dist/subpaths/swap.js.map +1 -0
- package/dist/subpaths/write.d.ts +1 -1
- package/dist/subpaths/write.d.ts.map +1 -1
- package/dist/subpaths/write.js +1 -1
- package/dist/subpaths/write.js.map +1 -1
- package/dist/swap/amm.d.ts +20 -0
- package/dist/swap/amm.d.ts.map +1 -0
- package/dist/swap/amm.js +77 -0
- package/dist/swap/amm.js.map +1 -0
- package/dist/swap/clmmMath.d.ts +24 -0
- package/dist/swap/clmmMath.d.ts.map +1 -0
- package/dist/swap/clmmMath.js +82 -0
- package/dist/swap/clmmMath.js.map +1 -0
- package/dist/swap/common.d.ts +68 -0
- package/dist/swap/common.d.ts.map +1 -0
- package/dist/swap/common.js +65 -0
- package/dist/swap/common.js.map +1 -0
- package/dist/swap/cpmm.d.ts +28 -0
- package/dist/swap/cpmm.d.ts.map +1 -0
- package/dist/swap/cpmm.js +113 -0
- package/dist/swap/cpmm.js.map +1 -0
- package/dist/swap/index.d.ts +145 -0
- package/dist/swap/index.d.ts.map +1 -0
- package/dist/swap/index.js +349 -0
- package/dist/swap/index.js.map +1 -0
- package/dist/swap/orca.d.ts +50 -0
- package/dist/swap/orca.d.ts.map +1 -0
- package/dist/swap/orca.js +382 -0
- package/dist/swap/orca.js.map +1 -0
- package/dist/swap/raydiumClmm.d.ts +62 -0
- package/dist/swap/raydiumClmm.d.ts.map +1 -0
- package/dist/swap/raydiumClmm.js +447 -0
- package/dist/swap/raydiumClmm.js.map +1 -0
- package/dist/tradeCheck.d.ts +45 -0
- package/dist/tradeCheck.d.ts.map +1 -0
- package/dist/tradeCheck.js +131 -0
- package/dist/tradeCheck.js.map +1 -0
- package/dist/write/instructions.d.ts +7 -0
- package/dist/write/instructions.d.ts.map +1 -1
- package/dist/write/instructions.js +24 -1
- package/dist/write/instructions.js.map +1 -1
- package/dist/write/transaction.d.ts +23 -0
- package/dist/write/transaction.d.ts.map +1 -1
- package/dist/write/transaction.js +50 -0
- package/dist/write/transaction.js.map +1 -1
- package/package.json +46 -14
- package/src/approvals.ts +358 -0
- package/src/fees.ts +259 -0
- package/src/layout.ts +2 -2
- package/src/lp.ts +8 -44
- package/src/names.ts +329 -0
- package/src/pools.ts +43 -0
- package/src/portfolio.ts +124 -0
- package/src/price.ts +366 -0
- package/src/risk.ts +243 -0
- package/src/rpc.ts +36 -9
- package/src/subpaths/approvals.ts +47 -0
- package/src/subpaths/fees.ts +41 -0
- package/src/subpaths/names.ts +45 -0
- package/src/subpaths/price.ts +62 -0
- package/src/subpaths/risk.ts +36 -0
- package/src/subpaths/swap.ts +41 -0
- package/src/subpaths/write.ts +2 -0
- package/src/swap/amm.ts +88 -0
- package/src/swap/clmmMath.ts +96 -0
- package/src/swap/common.ts +113 -0
- package/src/swap/cpmm.ts +132 -0
- package/src/swap/index.ts +467 -0
- package/src/swap/orca.ts +397 -0
- package/src/swap/raydiumClmm.ts +464 -0
- package/src/tradeCheck.ts +166 -0
- package/src/write/instructions.ts +26 -1
- package/src/write/transaction.ts +62 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 授权管理(子路径 `@w3lib/solana-batch-call/approvals`):Solana 上的“授权”是代币账户的 delegate(Approve 设置,可以转走 delegatedAmount 以内的代币)。
|
|
3
|
+
* 批量查一个地址的代币账户给出的授权、可以关闭回收租金的空账户;批量撤销(Revoke)、关闭(CloseAccount,租金退回)
|
|
4
|
+
*/
|
|
5
|
+
import { base64 } from '@scure/base';
|
|
6
|
+
import { encodeAddress, getAssociatedTokenAddress, getMetadataAddress, isAddress } from './address.js';
|
|
7
|
+
import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from './constants.js';
|
|
8
|
+
import { findExtension, formatUnits, parseMetaplexMetadata, parseMint } from './layout.js';
|
|
9
|
+
import { methodUnavailable } from './lp.js';
|
|
10
|
+
import { closeAccount, harvestWithheldTokensToMint, revoke } from './write/instructions.js';
|
|
11
|
+
const ACCOUNT_SIZE = 165;
|
|
12
|
+
const ACCOUNT_TYPE_ACCOUNT = 2;
|
|
13
|
+
const EXT_TRANSFER_FEE_AMOUNT = 2;
|
|
14
|
+
const EXT_CONFIDENTIAL_TRANSFER_ACCOUNT = 5;
|
|
15
|
+
const EXT_PERMANENT_DELEGATE = 12;
|
|
16
|
+
const EXT_CONFIDENTIAL_TRANSFER_FEE_AMOUNT = 17;
|
|
17
|
+
const ZERO_PUBKEY = '11111111111111111111111111111111';
|
|
18
|
+
/** 解析代币账户;不是已初始化的代币账户时为 null */
|
|
19
|
+
export function parseTokenAccountState(data) {
|
|
20
|
+
if (data.length !== ACCOUNT_SIZE && !(data.length > ACCOUNT_SIZE && data[ACCOUNT_SIZE] === ACCOUNT_TYPE_ACCOUNT)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
24
|
+
const pubkey = (offset) => encodeAddress(data.slice(offset, offset + 32));
|
|
25
|
+
// COption:u32 标记(1 有、0 没有)+ 值
|
|
26
|
+
const option = (offset) => view.getUint32(offset, true) === 1;
|
|
27
|
+
const state = data[108];
|
|
28
|
+
if (state === 0) {
|
|
29
|
+
return null; // 未初始化
|
|
30
|
+
}
|
|
31
|
+
const withheld = findExtension(data, EXT_TRANSFER_FEE_AMOUNT);
|
|
32
|
+
// 机密转账:待入账(lo / hi)和可用余额的密文全为 0 才能关闭;手续费扩展同理(Token-2022 的 closable 检查)
|
|
33
|
+
const confidential = findExtension(data, EXT_CONFIDENTIAL_TRANSFER_ACCOUNT);
|
|
34
|
+
const confidentialFee = findExtension(data, EXT_CONFIDENTIAL_TRANSFER_FEE_AMOUNT);
|
|
35
|
+
const nonZero = (bytes, from, to) => !!bytes && bytes.slice(from, to).some((b) => b !== 0);
|
|
36
|
+
return {
|
|
37
|
+
mint: pubkey(0),
|
|
38
|
+
owner: pubkey(32),
|
|
39
|
+
amount: view.getBigUint64(64, true),
|
|
40
|
+
delegate: option(72) ? pubkey(76) : null,
|
|
41
|
+
frozen: state === 2,
|
|
42
|
+
native: option(109),
|
|
43
|
+
delegatedAmount: view.getBigUint64(121, true),
|
|
44
|
+
closeAuthority: option(129) ? pubkey(133) : null,
|
|
45
|
+
withheldAmount: withheld && withheld.length >= 8 ? new DataView(withheld.buffer, withheld.byteOffset).getBigUint64(0, true) : 0n,
|
|
46
|
+
confidentialBalance: nonZero(confidential, 33, 225) || nonZero(confidentialFee, 0, 64),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 查一个地址的代币账户给出的授权,和可以关闭回收租金的空账户(结果按账户,同一账户的授权和关闭状态在一起)。
|
|
51
|
+
* 传 mints 时读这些代币的 ATA(一次 getMultipleAccounts,免费公共节点也能用);不传时列出全部代币账户(需要支持 getTokenAccountsByOwner 的节点)
|
|
52
|
+
*
|
|
53
|
+
* ```ts
|
|
54
|
+
* await approvals(client, owner, { mints: [USDC, BONK] })
|
|
55
|
+
* // [{ account: '…', mint: USDC, delegate: 'JUP…', delegatedAmount: '1000000', revocable: true, closable: false, closeBlocker: 'balance', … }]
|
|
56
|
+
* await approvals(new SolanaClient('https://my-rpc…'), owner) // 全部代币账户
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export async function approvals(client, owner, query = {}) {
|
|
60
|
+
if (!isAddress(owner)) {
|
|
61
|
+
throw new Error(`Invalid owner address: ${owner}`);
|
|
62
|
+
}
|
|
63
|
+
const { signal } = query;
|
|
64
|
+
const found = query.mints ? await ataAccounts(client, owner, query.mints, signal) : await listAccounts(client, owner, signal);
|
|
65
|
+
// 只看 owner 自己的账户(ATA 的 owner 可能被改过:SPL Token 的 ATA 能 SetAuthority 换 owner)
|
|
66
|
+
const mine = found.filter((f) => f.parsed.owner === owner);
|
|
67
|
+
const mints = [...new Set(mine.map((f) => f.parsed.mint))];
|
|
68
|
+
const metaAddresses = mints.flatMap((m) => [m, getMetadataAddress(m)]);
|
|
69
|
+
const metaAccounts = metaAddresses.length ? await client.accounts(metaAddresses, { signal }) : [];
|
|
70
|
+
const meta = new Map(mints.map((mint, i) => [mint, mintMeta(metaAccounts[2 * i] ?? null, metaAccounts[2 * i + 1] ?? null)]));
|
|
71
|
+
const list = mine.map((f) => {
|
|
72
|
+
const p = f.parsed;
|
|
73
|
+
const m = meta.get(p.mint) ?? { decimals: null, symbol: null, permanentDelegate: null };
|
|
74
|
+
const format = (v) => (m.decimals === null ? null : formatUnits(v, m.decimals));
|
|
75
|
+
const closeBlocker = p.closeAuthority !== null && p.closeAuthority !== owner ? 'close-authority' : !p.native && p.amount > 0n ? 'balance' : p.confidentialBalance ? 'confidential-balance' : null;
|
|
76
|
+
return {
|
|
77
|
+
account: f.address,
|
|
78
|
+
mint: p.mint,
|
|
79
|
+
owner: p.owner,
|
|
80
|
+
tokenProgram: f.program,
|
|
81
|
+
ata: getAssociatedTokenAddress(owner, p.mint, f.program) === f.address,
|
|
82
|
+
native: p.native,
|
|
83
|
+
symbol: m.symbol,
|
|
84
|
+
decimals: m.decimals,
|
|
85
|
+
amount: p.amount.toString(),
|
|
86
|
+
formatted: format(p.amount),
|
|
87
|
+
delegate: p.delegate,
|
|
88
|
+
delegatedAmount: p.delegatedAmount.toString(),
|
|
89
|
+
delegatedFormatted: format(p.delegatedAmount),
|
|
90
|
+
closeAuthority: p.closeAuthority,
|
|
91
|
+
permanentDelegate: m.permanentDelegate,
|
|
92
|
+
frozen: p.frozen,
|
|
93
|
+
lamports: f.lamports.toString(),
|
|
94
|
+
withheldAmount: p.withheldAmount.toString(),
|
|
95
|
+
revocable: p.delegate !== null && !p.frozen,
|
|
96
|
+
closable: closeBlocker === null,
|
|
97
|
+
closeBlocker,
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
return query.all ? list : list.filter((a) => a.delegate !== null || a.closeBlocker === 'close-authority' || BigInt(a.amount) === 0n);
|
|
101
|
+
}
|
|
102
|
+
/** 指定 mints:两个程序的 ATA 都读(mint 所属程序未知时只有一个存在) */
|
|
103
|
+
async function ataAccounts(client, owner, mints, signal) {
|
|
104
|
+
const targets = [...new Set(mints.filter((m) => isAddress(m)))].flatMap((mint) => [TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID].map((program) => ({ program, address: getAssociatedTokenAddress(owner, mint, program) })));
|
|
105
|
+
const accounts = targets.length ? await client.accounts(targets.map((t) => t.address), { signal }) : [];
|
|
106
|
+
return targets.flatMap((t, i) => {
|
|
107
|
+
const account = accounts[i];
|
|
108
|
+
const parsed = account && account.owner === t.program ? parseTokenAccountState(account.data) : null;
|
|
109
|
+
return parsed && account ? [{ address: t.address, program: t.program, lamports: account.lamports, parsed }] : [];
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/** 不传 mints:用 getTokenAccountsByOwner 列出两个程序的全部代币账户(base64,自己解析扩展) */
|
|
113
|
+
async function listAccounts(client, owner, signal) {
|
|
114
|
+
const lists = await Promise.all([TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID].map((programId) => client.request('getTokenAccountsByOwner', [owner, { programId }, { encoding: 'base64', commitment: client.commitment }], { signal }).then((res) => ({ programId, value: res.value ?? [] })))).catch((err) => {
|
|
115
|
+
if (signal?.aborted || !methodUnavailable(err)) {
|
|
116
|
+
throw err; // 取消、限频、超时等原样抛出(保留错误类型)
|
|
117
|
+
}
|
|
118
|
+
throw new Error(`Listing the token accounts of ${owner} failed (${err instanceof Error ? err.message : String(err)}). ` +
|
|
119
|
+
'Listing needs getTokenAccountsByOwner (most free public nodes do not support it): pass the mints in `mints`, or use a node that supports it', { cause: err });
|
|
120
|
+
});
|
|
121
|
+
return lists.flatMap(({ programId, value }) => value.flatMap((entry) => {
|
|
122
|
+
const parsed = entry.account.owner === programId ? parseTokenAccountState(base64.decode(entry.account.data[0])) : null;
|
|
123
|
+
return parsed ? [{ address: entry.pubkey, program: programId, lamports: BigInt(entry.account.lamports), parsed }] : [];
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
/** mint 的精度、symbol(Token-2022 TokenMetadata 扩展或 Metaplex 元数据)、永久授权 */
|
|
127
|
+
function mintMeta(mint, metadata) {
|
|
128
|
+
if (!mint) {
|
|
129
|
+
return { decimals: null, symbol: null, permanentDelegate: null };
|
|
130
|
+
}
|
|
131
|
+
let decimals = null;
|
|
132
|
+
let symbol = null;
|
|
133
|
+
try {
|
|
134
|
+
const info = parseMint(mint.data);
|
|
135
|
+
decimals = info.decimals;
|
|
136
|
+
symbol = info.metadata?.symbol || null;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// 不是 mint
|
|
140
|
+
}
|
|
141
|
+
if (!symbol && metadata) {
|
|
142
|
+
try {
|
|
143
|
+
symbol = parseMetaplexMetadata(metadata.data).symbol || null;
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// 元数据格式不对
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const ext = findExtension(mint.data, EXT_PERMANENT_DELEGATE);
|
|
150
|
+
const delegate = ext && ext.length >= 32 ? encodeAddress(ext.slice(0, 32)) : null;
|
|
151
|
+
return { decimals, symbol, permanentDelegate: delegate && delegate !== ZERO_PUBKEY ? delegate : null };
|
|
152
|
+
}
|
|
153
|
+
/** 撤销授权的指令:每个有 delegate、没有冻结的账户一条 Revoke;其他的跳过 */
|
|
154
|
+
export function buildRevokes(list) {
|
|
155
|
+
return list
|
|
156
|
+
.filter((a) => a.revocable)
|
|
157
|
+
.map((a) => ({ kind: 'revoke', account: a.account, owner: a.owner, instructions: [revoke(a.account, a.owner, a.tokenProgram)], approval: a }));
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* 关闭账户的指令:每个 closable 的账户一条 CloseAccount(关闭同时去掉授权);Token-2022 账户里有暂存的转账手续费时,
|
|
161
|
+
* 先加一条 HarvestWithheldTokensToMint(不需要签名)。关不掉的跳过。
|
|
162
|
+
* 注意 Wrapped SOL 账户有余额时也能关闭(余额作为 SOL 退回 destination):只想回收空账户时先按 amount 过滤
|
|
163
|
+
*/
|
|
164
|
+
export function buildCloses(list, options = {}) {
|
|
165
|
+
if (options.destination !== undefined && !isAddress(options.destination)) {
|
|
166
|
+
throw new Error(`Invalid destination: ${options.destination}`);
|
|
167
|
+
}
|
|
168
|
+
return list
|
|
169
|
+
.filter((a) => a.closable)
|
|
170
|
+
.map((a) => ({
|
|
171
|
+
kind: 'close',
|
|
172
|
+
account: a.account,
|
|
173
|
+
owner: a.owner,
|
|
174
|
+
instructions: [
|
|
175
|
+
...(a.tokenProgram === TOKEN_2022_PROGRAM_ID && BigInt(a.withheldAmount) > 0n ? [harvestWithheldTokensToMint(a.mint, [a.account])] : []),
|
|
176
|
+
closeAccount(a.account, options.destination ?? a.owner, a.owner, a.tokenProgram),
|
|
177
|
+
],
|
|
178
|
+
approval: a,
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 撤销授权:构建(同 buildRevokes)后用 owner 签名发送,钱包和选项同 batchCall(多个账户打包进同一笔交易,feePayer 可以替 owner 付手续费)。
|
|
183
|
+
* 默认一个失败不影响后面的(continueOnError: true);结果与构建出的调用一一对应
|
|
184
|
+
*
|
|
185
|
+
* ```ts
|
|
186
|
+
* const list = await approvals(client, owner, { mints })
|
|
187
|
+
* await revokeApprovals(client, key, list)
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
export function revokeApprovals(client, from, list, options = {}) {
|
|
191
|
+
return send(client, from, buildRevokes(list), options);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* 关闭代币账户回收租金(同 buildCloses),发送同 revokeApprovals。
|
|
195
|
+
*
|
|
196
|
+
* ```ts
|
|
197
|
+
* const empty = (await approvals(client, owner, { mints })).filter((a) => a.amount === '0')
|
|
198
|
+
* await closeTokenAccounts(client, key, empty) // 租金退回 owner
|
|
199
|
+
* ```
|
|
200
|
+
*/
|
|
201
|
+
export function closeTokenAccounts(client, from, list, options = {}) {
|
|
202
|
+
const { destination, ...rest } = options;
|
|
203
|
+
return send(client, from, buildCloses(list, { destination }), rest);
|
|
204
|
+
}
|
|
205
|
+
async function send(client, from, calls, options) {
|
|
206
|
+
if (!calls.length)
|
|
207
|
+
return [];
|
|
208
|
+
// 发送的代码按需加载:只查授权时打包不会带上
|
|
209
|
+
const [{ batchCall }, { resolveSigner }] = await Promise.all([import('./write/batch.js'), import('./write/signer.js')]);
|
|
210
|
+
const { address } = await resolveSigner(from);
|
|
211
|
+
const other = calls.find((c) => c.owner !== address);
|
|
212
|
+
if (other) {
|
|
213
|
+
throw new Error(`Token account ${other.account} belongs to ${other.owner}, not the signer ${address}`);
|
|
214
|
+
}
|
|
215
|
+
const results = await batchCall(client, calls.map((c) => ({ from, instructions: c.instructions })), { continueOnError: true, ...options });
|
|
216
|
+
return results.map((r, i) => {
|
|
217
|
+
const call = calls[i];
|
|
218
|
+
return { ...r, kind: call.kind, account: call.account, approval: call.approval };
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=approvals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals.js","sourceRoot":"","sources":["../src/approvals.ts"],"names":[],"mappings":"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"}
|
package/dist/fees.d.ts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { RequestOptions, SolanaClient } from './client.js';
|
|
2
|
+
import type { InstructionInput } from './write/transaction.js';
|
|
3
|
+
export type FeeLevel = 'slow' | 'normal' | 'fast';
|
|
4
|
+
/** 三档优先费单价(每个计算单元多少 micro-lamports,十进制字符串) */
|
|
5
|
+
export interface PriorityFeeEstimate {
|
|
6
|
+
slow: string;
|
|
7
|
+
normal: string;
|
|
8
|
+
fast: string;
|
|
9
|
+
/** 统计了多少个 slot(节点返回最近 150 个) */
|
|
10
|
+
slots: number;
|
|
11
|
+
}
|
|
12
|
+
export interface EstimateFeesOptions extends RequestOptions {
|
|
13
|
+
/** 只看会写这些账户的交易(如交易的可写账户,最多 128 个);不传时看全网 */
|
|
14
|
+
accounts?: readonly string[];
|
|
15
|
+
/** 三档取各 slot 最低落块费用的百分位,默认 [50, 75, 90](normal 与 /write 的 priorityFee: 'auto' 相同) */
|
|
16
|
+
percentiles?: readonly [number, number, number];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 当前的优先费建议:getRecentPrioritizationFees 返回最近 150 个 slot 里(会写这些账户的)落块交易的最低单价,三档取它们的百分位。
|
|
20
|
+
* 不传 accounts 时大多是 0(每个区块总有不加优先费的交易),要估某笔交易时传它的可写账户(estimateCost 自动这样做)
|
|
21
|
+
*
|
|
22
|
+
* ```ts
|
|
23
|
+
* await estimateFees(client, { accounts: [poolAddress] }) // { slow: '0', normal: '12000', fast: '150000', slots: 150 }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function estimateFees(client: SolanaClient, options?: EstimateFeesOptions): Promise<PriorityFeeEstimate>;
|
|
27
|
+
/**
|
|
28
|
+
* 要估算的交易:
|
|
29
|
+
* - 指令 + 手续费支付者:按 /write 的方式发送时的花费(计算单元上限 = 模拟值 × 1.1 + 1000,单价按这一档)。指令里自带的计算预算指令会被去掉
|
|
30
|
+
* - 已经构建好的交易(序列化的字节或 base64,legacy / v0,签名可以是空的):按交易自带的计算预算指令算(没有 SetComputeUnitPrice 时优先费为 0)
|
|
31
|
+
*/
|
|
32
|
+
export type CostInput = {
|
|
33
|
+
feePayer: string;
|
|
34
|
+
instructions: InstructionInput | readonly InstructionInput[];
|
|
35
|
+
} | {
|
|
36
|
+
transaction: Uint8Array | string;
|
|
37
|
+
};
|
|
38
|
+
export interface EstimateCostOptions extends Omit<EstimateFeesOptions, 'accounts'> {
|
|
39
|
+
/** 用哪一档优先费,默认 'normal'(只对指令有效) */
|
|
40
|
+
level?: FeeLevel;
|
|
41
|
+
/** 直接指定优先费单价(micro-lamports / 计算单元),不查建议(只对指令有效) */
|
|
42
|
+
priorityFee?: number | bigint;
|
|
43
|
+
/** 已经查好的费用建议(多笔交易共用);不传时按交易的可写账户查 */
|
|
44
|
+
fees?: PriorityFeeEstimate;
|
|
45
|
+
}
|
|
46
|
+
export interface CreatedAccount {
|
|
47
|
+
address: string;
|
|
48
|
+
/** 所属程序 */
|
|
49
|
+
owner: string;
|
|
50
|
+
/** 数据大小(字节) */
|
|
51
|
+
space: number;
|
|
52
|
+
/** 免租押金(lamports) */
|
|
53
|
+
rent: string;
|
|
54
|
+
}
|
|
55
|
+
export interface CostEstimate {
|
|
56
|
+
/** 模拟消耗的计算单元 */
|
|
57
|
+
computeUnits: number;
|
|
58
|
+
/** 计算单元上限(优先费按它收) */
|
|
59
|
+
computeUnitLimit: number;
|
|
60
|
+
/** 优先费单价(micro-lamports / 计算单元) */
|
|
61
|
+
priorityFee: string;
|
|
62
|
+
signatures: number;
|
|
63
|
+
/** 基础费:每个签名 5000 lamports */
|
|
64
|
+
baseFee: string;
|
|
65
|
+
/** 优先费:单价 × 上限(lamports,向上取整) */
|
|
66
|
+
priorityFeeLamports: string;
|
|
67
|
+
/** 手续费:baseFee + priorityFeeLamports(lamports) */
|
|
68
|
+
fee: string;
|
|
69
|
+
/** 新建账户的免租押金合计(lamports,关闭账户时退回) */
|
|
70
|
+
rent: string;
|
|
71
|
+
createdAccounts: CreatedAccount[];
|
|
72
|
+
/** fee + rent(lamports)和按 SOL 换算的值 */
|
|
73
|
+
total: string;
|
|
74
|
+
totalFormatted: string;
|
|
75
|
+
symbol: 'SOL';
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 估算一笔交易的花费(模拟一次,sigVerify: false,不需要签名、不会发送)。模拟失败时抛出(带程序日志里的原因)。
|
|
79
|
+
* 新建账户:交易前不存在(lamports 为 0)、模拟后存在、有数据或不归 System Program 的可写账户,押金按 getMinimumBalanceForRentExemption 算;
|
|
80
|
+
* 普通转账给新地址(System 账户、没有数据)不算押金
|
|
81
|
+
*
|
|
82
|
+
* ```ts
|
|
83
|
+
* await estimateCost(client, { feePayer: owner, instructions: [ix1, ix2] })
|
|
84
|
+
* // { computeUnits: 41230, computeUnitLimit: 46353, priorityFee: '12000', fee: '5557', rent: '1488440', totalFormatted: '0.001493997', … }
|
|
85
|
+
* await estimateCost(client, { transaction: base64FromJupiter })
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export declare function estimateCost(client: SolanaClient, input: CostInput, options?: EstimateCostOptions): Promise<CostEstimate>;
|
|
89
|
+
//# sourceMappingURL=fees.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fees.d.ts","sourceRoot":"","sources":["../src/fees.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEjD,8CAA8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,qFAAqF;IACrF,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAChD;AAOD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAWxH;AAED;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,gBAAgB,GAAG,SAAS,gBAAgB,EAAE,CAAA;CAAE,GAAG;IAAE,WAAW,EAAE,UAAU,GAAG,MAAM,CAAA;CAAE,CAAA;AAEjJ,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC;IAChF,kCAAkC;IAClC,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,qCAAqC;IACrC,IAAI,CAAC,EAAE,mBAAmB,CAAA;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW;IACX,KAAK,EAAE,MAAM,CAAA;IACb,eAAe;IACf,KAAK,EAAE,MAAM,CAAA;IACb,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,qBAAqB;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,iCAAiC;IACjC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAA;IACX,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,KAAK,CAAA;CACd;AAoBD;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC,CA0GnI"}
|
package/dist/fees.js
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 手续费估算(子路径 `@w3lib/solana-batch-call/fees`):三档优先费(getRecentPrioritizationFees 的百分位,可以只看交易会写的账户),
|
|
3
|
+
* 一笔交易的花费:基础费(每个签名 5000 lamports)+ 优先费(模拟得到的计算单元上限 × 单价)+ 新建账户的免租押金
|
|
4
|
+
*/
|
|
5
|
+
import { base64 } from '@scure/base';
|
|
6
|
+
import { encodeAddress } from './address.js';
|
|
7
|
+
import { SOL_DECIMALS, SYSTEM_PROGRAM_ID } from './constants.js';
|
|
8
|
+
import { formatUnits } from './layout.js';
|
|
9
|
+
/**
|
|
10
|
+
* 当前的优先费建议:getRecentPrioritizationFees 返回最近 150 个 slot 里(会写这些账户的)落块交易的最低单价,三档取它们的百分位。
|
|
11
|
+
* 不传 accounts 时大多是 0(每个区块总有不加优先费的交易),要估某笔交易时传它的可写账户(estimateCost 自动这样做)
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* await estimateFees(client, { accounts: [poolAddress] }) // { slow: '0', normal: '12000', fast: '150000', slots: 150 }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export async function estimateFees(client, options = {}) {
|
|
18
|
+
const [p1, p2, p3] = options.percentiles ?? [50, 75, 90];
|
|
19
|
+
const accounts = [...new Set(options.accounts ?? [])].slice(0, 128);
|
|
20
|
+
const list = await client.request('getRecentPrioritizationFees', accounts.length ? [accounts] : [], { signal: options.signal });
|
|
21
|
+
const fees = list.map((f) => BigInt(f.prioritizationFee)).sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
22
|
+
// 与 /write 的 'auto' 相同的取法:排序后第 ⌊n × p⌋ 个
|
|
23
|
+
const pick = (p) => (fees.length ? fees[Math.min(fees.length - 1, Math.max(0, Math.floor((fees.length * p) / 100)))] : 0n);
|
|
24
|
+
const slow = pick(p1);
|
|
25
|
+
const normal = pick(p2) > slow ? pick(p2) : slow;
|
|
26
|
+
const fast = pick(p3) > normal ? pick(p3) : normal;
|
|
27
|
+
return { slow: slow.toString(), normal: normal.toString(), fast: fast.toString(), slots: list.length };
|
|
28
|
+
}
|
|
29
|
+
/** 没有 SetComputeUnitLimit 时每条(非计算预算)指令的默认上限 */
|
|
30
|
+
const DEFAULT_UNITS_PER_INSTRUCTION = 200_000;
|
|
31
|
+
/** 地址查找表账户的头部大小,之后每 32 字节一个地址 */
|
|
32
|
+
const LOOKUP_TABLE_META_SIZE = 56;
|
|
33
|
+
/**
|
|
34
|
+
* 估算一笔交易的花费(模拟一次,sigVerify: false,不需要签名、不会发送)。模拟失败时抛出(带程序日志里的原因)。
|
|
35
|
+
* 新建账户:交易前不存在(lamports 为 0)、模拟后存在、有数据或不归 System Program 的可写账户,押金按 getMinimumBalanceForRentExemption 算;
|
|
36
|
+
* 普通转账给新地址(System 账户、没有数据)不算押金
|
|
37
|
+
*
|
|
38
|
+
* ```ts
|
|
39
|
+
* await estimateCost(client, { feePayer: owner, instructions: [ix1, ix2] })
|
|
40
|
+
* // { computeUnits: 41230, computeUnitLimit: 46353, priorityFee: '12000', fee: '5557', rent: '1488440', totalFormatted: '0.001493997', … }
|
|
41
|
+
* await estimateCost(client, { transaction: base64FromJupiter })
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export async function estimateCost(client, input, options = {}) {
|
|
45
|
+
const { signal } = options;
|
|
46
|
+
// 构建交易的代码按需加载:只查费用建议时打包不会带上
|
|
47
|
+
const [{ MAX_COMPUTE_UNITS, COMPUTE_BUDGET_PROGRAM_ID, setComputeUnitLimit, setComputeUnitPrice }, tx, { transactionErrorText, transactionFee }] = await Promise.all([
|
|
48
|
+
import('./write/instructions.js'),
|
|
49
|
+
import('./write/transaction.js'),
|
|
50
|
+
import('./write/send.js'),
|
|
51
|
+
]);
|
|
52
|
+
let raw;
|
|
53
|
+
let signatures;
|
|
54
|
+
let writable;
|
|
55
|
+
/** 交易自带的计算预算(只对构建好的交易) */
|
|
56
|
+
let budget = null;
|
|
57
|
+
if ('transaction' in input) {
|
|
58
|
+
const bytes = typeof input.transaction === 'string' ? base64.decode(input.transaction) : input.transaction;
|
|
59
|
+
// legacy / v0 的交易以签名数(compact-u16,不会超过 127)开头;v1 等新格式以版本字节(0x80 | 版本)开头,布局不同
|
|
60
|
+
if (((bytes[0] ?? 0) & 0x80) !== 0) {
|
|
61
|
+
throw new Error(`Unsupported transaction format (version ${bytes[0] & 0x7f}); only legacy and v0 transactions can be estimated, pass the instructions instead`);
|
|
62
|
+
}
|
|
63
|
+
const message = tx.parseMessage(tx.splitTransaction(bytes).message);
|
|
64
|
+
raw = base64.encode(bytes);
|
|
65
|
+
signatures = message.signatures;
|
|
66
|
+
writable = [...message.writable, ...(await lookupWritable(client, message.lookups, signal))];
|
|
67
|
+
let limit = null;
|
|
68
|
+
let price = 0n;
|
|
69
|
+
for (const ix of message.instructions) {
|
|
70
|
+
if (ix.programId !== COMPUTE_BUDGET_PROGRAM_ID)
|
|
71
|
+
continue;
|
|
72
|
+
const view = new DataView(ix.data.buffer, ix.data.byteOffset, ix.data.byteLength);
|
|
73
|
+
if (ix.data[0] === 2 && ix.data.length >= 5)
|
|
74
|
+
limit = view.getUint32(1, true);
|
|
75
|
+
if (ix.data[0] === 3 && ix.data.length >= 9)
|
|
76
|
+
price = view.getBigUint64(1, true);
|
|
77
|
+
}
|
|
78
|
+
const others = message.instructions.filter((ix) => ix.programId !== COMPUTE_BUDGET_PROGRAM_ID).length;
|
|
79
|
+
budget = { limit: Math.min(MAX_COMPUTE_UNITS, limit ?? DEFAULT_UNITS_PER_INSTRUCTION * others), price };
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const list = Array.isArray(input.instructions) ? input.instructions : [input.instructions];
|
|
83
|
+
// 和 batchCall 一样:去掉自带的计算单元上限 / 单价指令,模拟时上限取最大、单价为 0
|
|
84
|
+
const instructions = list.map(tx.normalizeInstruction).filter((ix) => !(ix.programId === COMPUTE_BUDGET_PROGRAM_ID && (ix.data[0] === 2 || ix.data[0] === 3)));
|
|
85
|
+
const message = tx.compileMessage(input.feePayer, [setComputeUnitLimit(MAX_COMPUTE_UNITS), setComputeUnitPrice(0n), ...instructions], SYSTEM_PROGRAM_ID);
|
|
86
|
+
raw = base64.encode(tx.serializeTransaction(message, message.signers.map(() => null)));
|
|
87
|
+
signatures = message.signers.length;
|
|
88
|
+
writable = message.writable;
|
|
89
|
+
}
|
|
90
|
+
// 交易前不存在的可写账户:模拟后读回它们的状态,判断是否新建
|
|
91
|
+
const before = writable.length ? await client.solBalances(writable, { signal }) : [];
|
|
92
|
+
const fresh = writable.filter((_, i) => before[i]?.balance === '0');
|
|
93
|
+
const priceFor = async () => {
|
|
94
|
+
if (budget)
|
|
95
|
+
return budget.price;
|
|
96
|
+
if (options.priorityFee !== undefined)
|
|
97
|
+
return BigInt(options.priorityFee);
|
|
98
|
+
const fees = options.fees ?? (await estimateFees(client, { accounts: writable, percentiles: options.percentiles, signal }));
|
|
99
|
+
return BigInt(fees[options.level ?? 'normal']);
|
|
100
|
+
};
|
|
101
|
+
const [simulation, price] = await Promise.all([
|
|
102
|
+
client.request('simulateTransaction', [
|
|
103
|
+
raw,
|
|
104
|
+
{
|
|
105
|
+
encoding: 'base64',
|
|
106
|
+
sigVerify: false,
|
|
107
|
+
replaceRecentBlockhash: true,
|
|
108
|
+
commitment: 'confirmed',
|
|
109
|
+
...(fresh.length ? { accounts: { encoding: 'base64', addresses: fresh } } : {}),
|
|
110
|
+
},
|
|
111
|
+
], { signal }),
|
|
112
|
+
priceFor(),
|
|
113
|
+
]);
|
|
114
|
+
const sim = simulation.value;
|
|
115
|
+
if (sim.err) {
|
|
116
|
+
throw new Error(`Simulation failed: ${transactionErrorText(sim.err, sim.logs)}`);
|
|
117
|
+
}
|
|
118
|
+
const consumed = sim.unitsConsumed ?? 0;
|
|
119
|
+
const limit = budget?.limit ?? Math.min(MAX_COMPUTE_UNITS, Math.ceil(consumed * 1.1) + 1000);
|
|
120
|
+
const created = fresh.flatMap((address, i) => {
|
|
121
|
+
const a = sim.accounts?.[i];
|
|
122
|
+
if (!a || !(a.lamports > 0))
|
|
123
|
+
return [];
|
|
124
|
+
const space = base64.decode(a.data[0]).length;
|
|
125
|
+
return space > 0 || a.owner !== SYSTEM_PROGRAM_ID ? [{ address, owner: a.owner, space }] : [];
|
|
126
|
+
});
|
|
127
|
+
const sizes = [...new Set(created.map((c) => c.space))];
|
|
128
|
+
const rents = await Promise.all(sizes.map((size) => client.request('getMinimumBalanceForRentExemption', [size], { signal })));
|
|
129
|
+
const rentOf = new Map(sizes.map((size, i) => [size, BigInt(rents[i])]));
|
|
130
|
+
const createdAccounts = created.map((c) => ({ ...c, rent: rentOf.get(c.space).toString() }));
|
|
131
|
+
const rent = createdAccounts.reduce((sum, c) => sum + BigInt(c.rent), 0n);
|
|
132
|
+
const fee = transactionFee(signatures, limit, price);
|
|
133
|
+
const baseFee = 5000n * BigInt(signatures);
|
|
134
|
+
const total = fee + rent;
|
|
135
|
+
return {
|
|
136
|
+
computeUnits: consumed,
|
|
137
|
+
computeUnitLimit: limit,
|
|
138
|
+
priorityFee: price.toString(),
|
|
139
|
+
signatures,
|
|
140
|
+
baseFee: baseFee.toString(),
|
|
141
|
+
priorityFeeLamports: (fee - baseFee).toString(),
|
|
142
|
+
fee: fee.toString(),
|
|
143
|
+
rent: rent.toString(),
|
|
144
|
+
createdAccounts,
|
|
145
|
+
total: total.toString(),
|
|
146
|
+
totalFormatted: formatUnits(total, SOL_DECIMALS),
|
|
147
|
+
symbol: 'SOL',
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/** v0 交易的地址查找表里要写的账户(读查找表账户:56 字节头部之后每 32 字节一个地址);表读不到时跳过 */
|
|
151
|
+
async function lookupWritable(client, lookups, signal) {
|
|
152
|
+
const used = lookups.filter((l) => l.writable.length);
|
|
153
|
+
if (!used.length)
|
|
154
|
+
return [];
|
|
155
|
+
const tables = await client.accounts(used.map((l) => l.table), { signal });
|
|
156
|
+
return used.flatMap((l, i) => {
|
|
157
|
+
const data = tables[i]?.data;
|
|
158
|
+
if (!data)
|
|
159
|
+
return [];
|
|
160
|
+
return l.writable.flatMap((index) => {
|
|
161
|
+
const start = LOOKUP_TABLE_META_SIZE + 32 * index;
|
|
162
|
+
return start + 32 <= data.length ? [encodeAddress(data.slice(start, start + 32))] : [];
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=fees.js.map
|
package/dist/fees.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fees.js","sourceRoot":"","sources":["../src/fees.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AA0BzC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAoB,EAAE,UAA+B,EAAE;IACxF,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IACxD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACnE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAsB,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACpJ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtG,yCAAyC;IACzC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC9I,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAA;IACrB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAClD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;AACxG,CAAC;AAgED,+CAA+C;AAC/C,MAAM,6BAA6B,GAAG,OAAO,CAAA;AAC7C,iCAAiC;AACjC,MAAM,sBAAsB,GAAG,EAAE,CAAA;AAEjC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAoB,EAAE,KAAgB,EAAE,UAA+B,EAAE;IAC1G,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAC1B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,cAAc,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACnK,MAAM,CAAC,yBAAyB,CAAC;QACjC,MAAM,CAAC,wBAAwB,CAAC;QAChC,MAAM,CAAC,iBAAiB,CAAC;KAC1B,CAAC,CAAA;IAEF,IAAI,GAAW,CAAA;IACf,IAAI,UAAkB,CAAA;IACtB,IAAI,QAAkB,CAAA;IACtB,0BAA0B;IAC1B,IAAI,MAAM,GAA4C,IAAI,CAAA;IAC1D,IAAI,aAAa,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAA;QAC1G,6EAA6E;QAC7E,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,2CAA4C,KAAK,CAAC,CAAC,CAAY,GAAG,IAAI,oFAAoF,CAAC,CAAA;QAC7K,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAA;QACnE,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1B,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;QAC/B,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QAC5F,IAAI,KAAK,GAAkB,IAAI,CAAA;QAC/B,IAAI,KAAK,GAAG,EAAE,CAAA;QACd,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACtC,IAAI,EAAE,CAAC,SAAS,KAAK,yBAAyB;gBAAE,SAAQ;YACxD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACjF,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC;gBAAE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;YAC5E,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC;gBAAE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QACjF,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,KAAK,yBAAyB,CAAC,CAAC,MAAM,CAAA;QACrG,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,IAAI,6BAA6B,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;IACzG,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,YAA4C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAgC,CAAC,CAAA;QAC/I,mDAAmD;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,yBAAyB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9J,MAAM,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC,EAAE,iBAAiB,CAAC,CAAA;QACxJ,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACtF,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAA;QACnC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IAC7B,CAAC;IAED,gCAAgC;IAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACpF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,GAAG,CAAC,CAAA;IACnE,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC,KAAK,CAAA;QAC/B,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACzE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QAC3H,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAA;IAChD,CAAC,CAAA;IACD,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC5C,MAAM,CAAC,OAAO,CACZ,qBAAqB,EACrB;YACE,GAAG;YACH;gBACE,QAAQ,EAAE,QAAQ;gBAClB,SAAS,EAAE,KAAK;gBAChB,sBAAsB,EAAE,IAAI;gBAC5B,UAAU,EAAE,WAAW;gBACvB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChF;SACF,EACD,EAAE,MAAM,EAAE,CACX;QACD,QAAQ,EAAE;KACX,CAAC,CAAA;IACF,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAA;IAC5B,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,sBAAsB,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,IAAI,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IAE5F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;YAAE,OAAO,EAAE,CAAA;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;QAC7C,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/F,CAAC,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACvD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAS,mCAAmC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IACrI,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IAClF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAA;IACxG,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAEzE,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;IAC1C,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAA;IACxB,OAAO;QACL,YAAY,EAAE,QAAQ;QACtB,gBAAgB,EAAE,KAAK;QACvB,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE;QAC7B,UAAU;QACV,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;QAC3B,mBAAmB,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE;QAC/C,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;QACnB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;QACrB,eAAe;QACf,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;QACvB,cAAc,EAAE,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC;QAChD,MAAM,EAAE,KAAK;KACd,CAAA;AACH,CAAC;AAED,6DAA6D;AAC7D,KAAK,UAAU,cAAc,CAAC,MAAoB,EAAE,OAA6D,EAAE,MAA+B;IAChJ,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACrD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAClC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EACxB,EAAE,MAAM,EAAE,CACX,CAAA;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAA;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAA;QACpB,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,sBAAsB,GAAG,EAAE,GAAG,KAAK,CAAA;YACjD,OAAO,KAAK,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACxF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/layout.d.ts
CHANGED
|
@@ -23,6 +23,8 @@ export interface TokenMetadata {
|
|
|
23
23
|
}
|
|
24
24
|
/** 解析 Mint 账户(SPL Token / Token-2022 通用,Token-2022 额外解析 TokenMetadata 扩展) */
|
|
25
25
|
export declare function parseMint(data: Uint8Array): MintInfo;
|
|
26
|
+
/** 在 Token-2022 账户的扩展(TLV:u16 类型 + u16 长度 + 数据)里找指定类型,返回其数据;没有或数据不完整时为 null(包内使用,不从主入口导出) */
|
|
27
|
+
export declare function findExtension(data: Uint8Array, extensionType: number): Uint8Array | null;
|
|
26
28
|
/** Token-2022 转账手续费的一套配置:从 epoch 开始生效,费率 basisPoints(万分比),单笔最多 maximumFee(最小单位) */
|
|
27
29
|
export interface TransferFeeInfo {
|
|
28
30
|
epoch: bigint;
|
package/dist/layout.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAEA,iCAAiC;AACjC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;CACpB;AA4ED,MAAM,WAAW,QAAQ;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,OAAO,CAAA;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,sCAAsC;IACtC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAA;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACZ;AAYD,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAqBpD;
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAEA,iCAAiC;AACjC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;CACpB;AA4ED,MAAM,WAAW,QAAQ;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,OAAO,CAAA;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,sCAAsC;IACtC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAA;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACZ;AAYD,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAqBpD;AAED,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAwBxF;AAiBD,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,sCAAsC;AACtC,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAA;IACxC,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,qCAAqC;IACrC,KAAK,EAAE,eAAe,CAAA;IACtB,4BAA4B;IAC5B,KAAK,EAAE,eAAe,CAAA;CACvB;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,qBAAqB,GAAG,IAAI,CA2BrF;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,+CAA+C;AAC/C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAMpE;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB,EAAE,MAAM,CAAA;IAC5B,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtE,mBAAmB,EAAE,OAAO,CAAA;IAC5B,SAAS,EAAE,OAAO,CAAA;IAClB,+HAA+H;IAC/H,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAA;CAC1D;AAED,2DAA2D;AAC3D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,CA0CxE;AAED,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWlE;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,oBAAc,CAAA"}
|
package/dist/layout.js
CHANGED
|
@@ -92,8 +92,8 @@ export function parseMint(data) {
|
|
|
92
92
|
metadata: data.length > EXTENSIONS_OFFSET ? parseTokenMetadataExtension(data) : null,
|
|
93
93
|
};
|
|
94
94
|
}
|
|
95
|
-
/** 在 Token-2022 账户的扩展(TLV:u16 类型 + u16 长度 + 数据)里找指定类型,返回其数据;没有或数据不完整时为 null */
|
|
96
|
-
function findExtension(data, extensionType) {
|
|
95
|
+
/** 在 Token-2022 账户的扩展(TLV:u16 类型 + u16 长度 + 数据)里找指定类型,返回其数据;没有或数据不完整时为 null(包内使用,不从主入口导出) */
|
|
96
|
+
export function findExtension(data, extensionType) {
|
|
97
97
|
if (data.length <= EXTENSIONS_OFFSET) {
|
|
98
98
|
return null;
|
|
99
99
|
}
|
package/dist/layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAY5C,MAAM,MAAM;IAKC;IAJX,OAAO,CAAQ;IACN,KAAK,CAAU;IAExB,YACW,KAAiB,EAC1B,MAAM,GAAG,CAAC;QADD,UAAK,GAAL,KAAK,CAAY;QAG1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IAC7E,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,CAAS;QACb,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,IAAI,UAAU,CAAC,uCAAuC,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,CAAS;QACZ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACb,IAAI,CAAC,OAAO,IAAI,CAAC,CAAA;IACnB,CAAC;IAED,EAAE;QACA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAW,CAAA;IAC7C,CAAC;IAED,GAAG;QACD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAClD,IAAI,CAAC,OAAO,IAAI,CAAC,CAAA;QACjB,OAAO,CAAC,CAAA;IACV,CAAC;IAED,GAAG;QACD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAClD,IAAI,CAAC,OAAO,IAAI,CAAC,CAAA;QACjB,OAAO,CAAC,CAAA;IACV,CAAC;IAED,GAAG;QACD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACrD,IAAI,CAAC,OAAO,IAAI,CAAC,CAAA;QACjB,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACd,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAA;QAC1E,IAAI,CAAC,OAAO,IAAI,EAAE,CAAA;QAClB,OAAO,CAAC,CAAA;IACV,CAAC;IAED,yDAAyD;IACzD,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACf,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAA;QACtF,IAAI,CAAC,OAAO,IAAI,GAAG,CAAA;QACnB,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACrC,CAAC;IAED,MAAM,CAAI,IAAa;QACrB,OAAO,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACxC,CAAC;CACF;AAkBD,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,YAAY,GAAG,GAAG,CAAA;AACxB,qEAAqE;AACrE,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAC/B,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAC7B,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAC3B,MAAM,oBAAoB,GAAG,CAAC,CAAA;AAC9B,MAAM,6BAA6B,GAAG,CAAC,CAAA;AACvC,MAAM,wBAAwB,GAAG,EAAE,CAAA;AAEnC,6EAA6E;AAC7E,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,oFAAoF;IACpF,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,iBAAiB,CAAC,EAAE,CAAC;QACzH,MAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC,CAAA;IAC5C,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1B,MAAM,gBAAgB,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACtC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,CAAA;IACvB,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;IAClC,MAAM,kBAAkB,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACxC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;IAClC,OAAO;QACL,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;QACtD,MAAM;QACN,QAAQ;QACR,aAAa;QACb,eAAe,EAAE,kBAAkB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;QAC5D,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;KACrF,CAAA;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
|