@w3lib/solana-batch-call 0.1.0 → 0.2.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 +23 -0
- package/README.md +117 -16
- package/dist/address.d.ts +6 -0
- package/dist/address.d.ts.map +1 -1
- package/dist/address.js +46 -7
- package/dist/address.js.map +1 -1
- package/dist/client.d.ts +115 -21
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +616 -220
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/layout.d.ts +31 -2
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +68 -8
- package/dist/layout.js.map +1 -1
- package/dist/rpc.d.ts +60 -4
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +181 -18
- package/dist/rpc.js.map +1 -1
- package/dist/shortcuts.d.ts +38 -5
- package/dist/shortcuts.d.ts.map +1 -1
- package/dist/shortcuts.js +156 -11
- package/dist/shortcuts.js.map +1 -1
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +2 -4
- package/dist/source.js.map +1 -1
- package/dist/types.d.ts +54 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +13 -10
- package/src/address.ts +49 -7
- package/src/client.ts +783 -238
- package/src/index.ts +47 -3
- package/src/layout.ts +90 -8
- package/src/rpc.ts +218 -18
- package/src/shortcuts.ts +209 -15
- package/src/source.ts +2 -4
- package/src/types.ts +59 -3
package/dist/shortcuts.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SolanaClient } from './client.js';
|
|
1
|
+
import { SolanaClient, } from './client.js';
|
|
2
2
|
// 复用客户端:多次调用共享连接、批量合并与故障切换状态。按 “配置内容” 分组,组内 URL 按字符串、对象按引用(WeakMap)。
|
|
3
3
|
// 配置里有函数(如自定义 fetch)或节点数组含对象时不缓存。
|
|
4
4
|
const MAX_CACHED = 32;
|
|
@@ -34,7 +34,10 @@ function sourceKey(source) {
|
|
|
34
34
|
}
|
|
35
35
|
return source;
|
|
36
36
|
}
|
|
37
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* 拆出节点参数和函数自己的参数(ownKeys),其余作为客户端配置;值为 undefined 的参数忽略。
|
|
39
|
+
* signal 总是作为函数自己的参数(放进客户端配置会让每次调用都新建客户端)
|
|
40
|
+
*/
|
|
38
41
|
function resolve(options, ownKeys = []) {
|
|
39
42
|
const { provider, ...others } = options;
|
|
40
43
|
const own = {};
|
|
@@ -42,7 +45,7 @@ function resolve(options, ownKeys = []) {
|
|
|
42
45
|
for (const [key, value] of Object.entries(others)) {
|
|
43
46
|
if (value !== undefined) {
|
|
44
47
|
;
|
|
45
|
-
(ownKeys.includes(key) ? own : config)[key] = value;
|
|
48
|
+
(ownKeys.includes(key) ? own : key === 'signal' ? {} : config)[key] = value;
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
51
|
return { client: getClient(provider, config), own: own };
|
|
@@ -78,16 +81,31 @@ function getClient(source, config) {
|
|
|
78
81
|
*
|
|
79
82
|
* await getBalances(owner, [NATIVE_MINT, USDC]) // 指定代币:免费公共节点也能用
|
|
80
83
|
* await getBalances(owner, [NATIVE_MINT, USDC], { symbol: true })
|
|
84
|
+
* await getBalances(owner, undefined, { tokenPrograms: ['spl'] }) // 不含 Token-2022 代币
|
|
85
|
+
* await getBalances(owner, [USDC], { accounts: 'all' }) // 算上非 ATA 账户:需要支持 getTokenAccountsByOwner 的节点
|
|
81
86
|
* await getBalances(owner, undefined, { provider: 'https://my-rpc…' }) // 全部持仓:需要支持 getTokenAccountsByOwner 的节点
|
|
82
87
|
* ```
|
|
83
88
|
*/
|
|
84
89
|
export function getBalances(owner, mints, options = {}) {
|
|
85
|
-
const { client, own } = resolve(options,
|
|
90
|
+
const { client, own } = resolve(options, BALANCE_KEYS);
|
|
86
91
|
return client.balances(owner, mints, own);
|
|
87
92
|
}
|
|
93
|
+
const BALANCE_KEYS = ['symbol', 'scan', 'accounts', 'tokenPrograms', 'signal', 'minContextSlot', 'withSlot'];
|
|
94
|
+
/**
|
|
95
|
+
* 多个钱包一次查,结果与 queries 一一对应;ATA 模式下所有钱包合并成一次 getMultipleAccounts。参数同 getBalances。
|
|
96
|
+
*
|
|
97
|
+
* ```ts
|
|
98
|
+
* await getMultiBalances([{ owner: a, mints: [NATIVE_MINT, USDC] }, { owner: b, mints: [USDC] }])
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export function getMultiBalances(queries, options = {}) {
|
|
102
|
+
const { client, own } = resolve(options, BALANCE_KEYS);
|
|
103
|
+
return client.multiBalances(queries, own);
|
|
104
|
+
}
|
|
88
105
|
/** 批量查多个地址的 SOL 余额(一次 getMultipleAccounts) */
|
|
89
106
|
export function getSolBalances(addresses, options = {}) {
|
|
90
|
-
|
|
107
|
+
const { client, own } = resolve(options, ['signal', 'minContextSlot', 'withSlot']);
|
|
108
|
+
return client.solBalances(addresses, own);
|
|
91
109
|
}
|
|
92
110
|
/**
|
|
93
111
|
* 批量查代币详情,字段可选(默认 name / symbol / decimals)。
|
|
@@ -97,20 +115,23 @@ export function getSolBalances(addresses, options = {}) {
|
|
|
97
115
|
* ```
|
|
98
116
|
*/
|
|
99
117
|
export function getTokens(mints, options = {}) {
|
|
100
|
-
const { client, own } = resolve(options, ['fields']);
|
|
101
|
-
return client.tokens(mints,
|
|
118
|
+
const { client, own } = resolve(options, ['fields', 'signal']);
|
|
119
|
+
return client.tokens(mints, own);
|
|
102
120
|
}
|
|
103
121
|
/** 批量查 NFT 元数据(名称、uri、所属集合、版税、创作者等) */
|
|
104
122
|
export function getNfts(mints, options = {}) {
|
|
105
|
-
|
|
123
|
+
const { client, own } = resolve(options, ['signal']);
|
|
124
|
+
return client.nfts(mints, own);
|
|
106
125
|
}
|
|
107
126
|
/** 批量查 NFT 持有人 */
|
|
108
127
|
export function getNftOwners(mints, options = {}) {
|
|
109
|
-
|
|
128
|
+
const { client, own } = resolve(options, ['signal']);
|
|
129
|
+
return client.nftOwners(mints, own);
|
|
110
130
|
}
|
|
111
131
|
/** 查某地址持有的全部 NFT(需要支持 getTokenAccountsByOwner 的节点) */
|
|
112
132
|
export function getOwnerNfts(owner, options = {}) {
|
|
113
|
-
|
|
133
|
+
const { client, own } = resolve(options, ['signal']);
|
|
134
|
+
return client.ownerNfts(owner, own);
|
|
114
135
|
}
|
|
115
136
|
/**
|
|
116
137
|
* 列出持有人拥有的全部代币(SOL 在第一位),带 name / symbol,适合做资产列表。
|
|
@@ -122,9 +143,133 @@ export function getOwnerNfts(owner, options = {}) {
|
|
|
122
143
|
* ```
|
|
123
144
|
*/
|
|
124
145
|
export function getOwnerTokens(owner, options = {}) {
|
|
125
|
-
const { client, own } = resolve(options, ['metadata', 'includeNative', 'includeZero', 'includeNfts']);
|
|
146
|
+
const { client, own } = resolve(options, ['metadata', 'includeNative', 'includeZero', 'includeNfts', 'tokenPrograms', 'signal', 'minContextSlot', 'withSlot']);
|
|
126
147
|
return client.ownerTokens(owner, own);
|
|
127
148
|
}
|
|
149
|
+
// 共享轮询:按客户端(同样的节点配置会复用同一个客户端)+ owner + mints(顺序无关)+ 影响结果的选项
|
|
150
|
+
const watches = new WeakMap();
|
|
151
|
+
/**
|
|
152
|
+
* 轮询余额,多处订阅同一个钱包时合并成一份轮询,只在余额变化时通知。返回取消订阅的函数;最后一个订阅者取消时停止轮询。
|
|
153
|
+
* 参数同 getBalances(不支持 signal / minContextSlot);上一次请求没完成时不会发起下一次。
|
|
154
|
+
* 结果顺序按第一个订阅者传的 mints;新订阅者加入时如果已有结果,立即收到一次(previous 为 null)
|
|
155
|
+
*
|
|
156
|
+
* ```ts
|
|
157
|
+
* const stop = watchBalances(owner, [NATIVE_MINT, USDC], { interval: 10_000, onChange: (list) => render(list) })
|
|
158
|
+
* stop()
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
export function watchBalances(owner, mints, options) {
|
|
162
|
+
const { onChange, onError, interval = 15_000, ...rest } = options;
|
|
163
|
+
if (!(interval > 0)) {
|
|
164
|
+
throw new Error(`Invalid interval: ${interval}`);
|
|
165
|
+
}
|
|
166
|
+
const { client, own } = resolve(rest, ['symbol', 'scan', 'accounts', 'tokenPrograms', 'withSlot']);
|
|
167
|
+
const key = JSON.stringify([
|
|
168
|
+
owner,
|
|
169
|
+
mints === undefined ? null : [...new Set(mints)].sort(),
|
|
170
|
+
own.symbol ?? false,
|
|
171
|
+
own.scan ?? false,
|
|
172
|
+
own.accounts ?? 'ata',
|
|
173
|
+
own.tokenPrograms === undefined ? null : [...own.tokenPrograms].sort(),
|
|
174
|
+
own.withSlot ?? false,
|
|
175
|
+
]);
|
|
176
|
+
let group = watches.get(client);
|
|
177
|
+
if (!group) {
|
|
178
|
+
group = new Map();
|
|
179
|
+
watches.set(client, group);
|
|
180
|
+
}
|
|
181
|
+
let watch = group.get(key);
|
|
182
|
+
const watcher = { interval, onChange, onError };
|
|
183
|
+
if (!watch) {
|
|
184
|
+
watch = { client, owner, mints, options: own, watchers: new Set([watcher]), timer: null, running: false, stopped: false, last: null, lastKey: null };
|
|
185
|
+
group.set(key, watch);
|
|
186
|
+
poll(watch);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
watch.watchers.add(watcher);
|
|
190
|
+
const current = watch;
|
|
191
|
+
if (current.last) {
|
|
192
|
+
const last = current.last;
|
|
193
|
+
queueMicrotask(() => current.watchers.has(watcher) && safely(() => watcher.onChange(last, null)));
|
|
194
|
+
}
|
|
195
|
+
// 间隔变小:按新的间隔重新安排下一次
|
|
196
|
+
if (current.timer && interval < nextInterval(current, watcher)) {
|
|
197
|
+
clearTimeout(current.timer);
|
|
198
|
+
current.timer = null;
|
|
199
|
+
schedule(current);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const owned = watch;
|
|
203
|
+
const ownedGroup = group;
|
|
204
|
+
return () => {
|
|
205
|
+
if (!owned.watchers.delete(watcher) || owned.watchers.size) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
owned.stopped = true;
|
|
209
|
+
if (owned.timer) {
|
|
210
|
+
clearTimeout(owned.timer);
|
|
211
|
+
owned.timer = null;
|
|
212
|
+
}
|
|
213
|
+
if (ownedGroup.get(key) === owned) {
|
|
214
|
+
ownedGroup.delete(key);
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/** 除了 except 以外订阅者的最小间隔(用于判断新订阅者是否让间隔变小) */
|
|
219
|
+
function nextInterval(watch, except) {
|
|
220
|
+
let min = Number.POSITIVE_INFINITY;
|
|
221
|
+
for (const w of watch.watchers) {
|
|
222
|
+
if (w !== except)
|
|
223
|
+
min = Math.min(min, w.interval);
|
|
224
|
+
}
|
|
225
|
+
return min;
|
|
226
|
+
}
|
|
227
|
+
function schedule(watch) {
|
|
228
|
+
if (watch.stopped || watch.timer || watch.running) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
watch.timer = setTimeout(() => poll(watch), nextInterval(watch));
|
|
232
|
+
}
|
|
233
|
+
function poll(watch) {
|
|
234
|
+
watch.timer = null;
|
|
235
|
+
if (watch.running || watch.stopped) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
watch.running = true;
|
|
239
|
+
watch.client
|
|
240
|
+
.balances(watch.owner, watch.mints, watch.options)
|
|
241
|
+
.then((balances) => {
|
|
242
|
+
// 只比较余额(slot 每次都会变)
|
|
243
|
+
const key = JSON.stringify(balances.map((b) => [b.token, b.balance, b.success]));
|
|
244
|
+
if (watch.stopped || key === watch.lastKey) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const previous = watch.last;
|
|
248
|
+
watch.last = balances;
|
|
249
|
+
watch.lastKey = key;
|
|
250
|
+
for (const w of [...watch.watchers]) {
|
|
251
|
+
safely(() => w.onChange(balances, previous));
|
|
252
|
+
}
|
|
253
|
+
}, (err) => {
|
|
254
|
+
if (!watch.stopped) {
|
|
255
|
+
for (const w of [...watch.watchers]) {
|
|
256
|
+
safely(() => w.onError?.(err));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
})
|
|
260
|
+
.finally(() => {
|
|
261
|
+
watch.running = false;
|
|
262
|
+
schedule(watch);
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
function safely(fn) {
|
|
266
|
+
try {
|
|
267
|
+
fn();
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
// 订阅者的回调出错不影响轮询
|
|
271
|
+
}
|
|
272
|
+
}
|
|
128
273
|
/** 测试用:按参数取(或创建)客户端,用于验证缓存复用(不在包的公开导出里) */
|
|
129
274
|
export function resolveClientForTest(options) {
|
|
130
275
|
return resolve(options).client;
|
package/dist/shortcuts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shortcuts.js","sourceRoot":"","sources":["../src/shortcuts.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"shortcuts.js","sourceRoot":"","sources":["../src/shortcuts.ts"],"names":[],"mappings":"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"}
|
package/dist/source.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC/E,OAAO,EAAwB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAA;AAE7G;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvE,MAAM,WAAW,aAAc,SAAQ,cAAc,EAAE,eAAe;CAAG;AAoBzE,wBAAgB,SAAS,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAalE;AAKD,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI7C;AAED;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,YAAY;;IAIlD,QAAQ,CAAC,KAAK,EAAE,YAAY;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC;gBAD/B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC;IAqBpC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;CAUpF;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,YAAY,CAAA;IACvB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CAC/B;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,GAAG,SAAS,SAAS,EAAE,GAAG,SAAS,EACpD,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5B,OAAO,GAAE,aAAkB,GAC1B,cAAc,
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC/E,OAAO,EAAwB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAA;AAE7G;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvE,MAAM,WAAW,aAAc,SAAQ,cAAc,EAAE,eAAe;CAAG;AAoBzE,wBAAgB,SAAS,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAalE;AAKD,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI7C;AAED;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,YAAY;;IAIlD,QAAQ,CAAC,KAAK,EAAE,YAAY;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC;gBAD/B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC;IAqBpC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;CAUpF;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,YAAY,CAAA;IACvB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CAC/B;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,GAAG,SAAS,SAAS,EAAE,GAAG,SAAS,EACpD,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5B,OAAO,GAAE,aAAkB,GAC1B,cAAc,CAwChB"}
|
package/dist/source.js
CHANGED
|
@@ -118,9 +118,7 @@ export function resolveSource(source, cluster, options = {}) {
|
|
|
118
118
|
// 内置节点本来就是按 cluster 选的,不校验;单个节点且没指定 cluster 时,期望值就是它自己,也不需要校验
|
|
119
119
|
const check = !isDefault && (multiple || cluster !== undefined);
|
|
120
120
|
const nodes = check ? raw.map((node) => new NetworkCheckedRpc(node, genesis)) : raw;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
genesis,
|
|
124
|
-
};
|
|
121
|
+
// 单个节点也包一层 FallbackRpc:统一 onRequest 事件和健康状态(单节点失败时抛原始错误)
|
|
122
|
+
return { transport: new FallbackRpc(nodes, options), genesis };
|
|
125
123
|
}
|
|
126
124
|
//# sourceMappingURL=source.js.map
|
package/dist/source.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
export type Commitment = 'processed' | 'confirmed' | 'finalized';
|
|
2
|
+
/**
|
|
3
|
+
* tokenPrograms 参数的取值:简写 'spl'(SPL Token)/ 'token-2022',也可以直接传程序地址
|
|
4
|
+
* (TOKEN_PROGRAM_ID / TOKEN_2022_PROGRAM_ID)
|
|
5
|
+
*/
|
|
6
|
+
export type TokenProgramName = 'spl' | 'token-2022';
|
|
7
|
+
export type TokenProgramOption = TokenProgramName | (string & {});
|
|
8
|
+
/**
|
|
9
|
+
* 单项失败(success: false)的原因:
|
|
10
|
+
* - invalid-address:地址格式非法(不是 base58 的 32 字节)
|
|
11
|
+
* - not-found:地址合法,但链上没有这个账户(如 mint 不存在)
|
|
12
|
+
* - not-token:账户存在,但不是代币 mint(或代币账户)
|
|
13
|
+
* - no-metadata:代币存在,但没有元数据(nfts)
|
|
14
|
+
* - no-holder:没有持有人(nftOwners:供应量为 0 或已销毁)
|
|
15
|
+
* - missing-field:代币存在,但请求的字段读不到(tokens),见 errorField
|
|
16
|
+
*/
|
|
17
|
+
export type FailureReason = 'invalid-address' | 'not-found' | 'not-token' | 'no-metadata' | 'no-holder' | 'missing-field';
|
|
2
18
|
/** balances() 的单项结果,字段都是字符串 / 数字 / 布尔 / null,可以直接 JSON.stringify */
|
|
3
19
|
export interface TokenBalance {
|
|
4
20
|
/** 代币的 mint(原样) */
|
|
@@ -16,9 +32,13 @@ export interface TokenBalance {
|
|
|
16
32
|
symbol?: string | null;
|
|
17
33
|
/** 查询失败(mint 不存在、地址非法等)时为 false,balance / formatted 为 "0" */
|
|
18
34
|
success: boolean;
|
|
35
|
+
/** 失败原因,仅 success 为 false 时返回 */
|
|
36
|
+
error?: FailureReason;
|
|
37
|
+
/** 传了 withSlot / minContextSlot 时返回:读取时节点的 slot(一次查询发了多个请求时取最小的) */
|
|
38
|
+
slot?: number;
|
|
19
39
|
}
|
|
20
|
-
/** ownerTokens() / getOwnerTokens()
|
|
21
|
-
export interface OwnedToken extends Omit<TokenBalance, 'symbol'> {
|
|
40
|
+
/** ownerTokens() / getOwnerTokens() 的单项结果(总是 success: true) */
|
|
41
|
+
export interface OwnedToken extends Omit<TokenBalance, 'symbol' | 'error'> {
|
|
22
42
|
/** 该代币的代币账户数量;大于 1 时 balance 为所有账户的合计 */
|
|
23
43
|
accounts: number;
|
|
24
44
|
/** metadata 为 true(默认)时返回;没有元数据或读取失败时为 null(见 metadataStatus) */
|
|
@@ -34,9 +54,30 @@ export interface SolBalance {
|
|
|
34
54
|
/** 按 9 位精度换算后的 SOL */
|
|
35
55
|
formatted: string;
|
|
36
56
|
success: boolean;
|
|
57
|
+
/** 失败原因(只有 invalid-address),仅 success 为 false 时返回 */
|
|
58
|
+
error?: FailureReason;
|
|
59
|
+
/** 传了 withSlot / minContextSlot 时返回:读取时节点的 slot(多个请求时取最小的);没有发请求(地址全部非法)时不返回 */
|
|
60
|
+
slot?: number;
|
|
37
61
|
}
|
|
38
62
|
/** tokens() / getTokens() 可选的字段 */
|
|
39
|
-
export type TokenField = 'name' | 'symbol' | 'uri' | 'decimals' | 'supply' | 'tokenProgram' | 'mintAuthority' | 'freezeAuthority';
|
|
63
|
+
export type TokenField = 'name' | 'symbol' | 'uri' | 'decimals' | 'supply' | 'tokenProgram' | 'mintAuthority' | 'freezeAuthority' | 'transferFee';
|
|
64
|
+
/** Token-2022 转账手续费的一套配置 */
|
|
65
|
+
export interface TransferFee {
|
|
66
|
+
/** 费率,万分比(100 = 1%) */
|
|
67
|
+
basisPoints: number;
|
|
68
|
+
/** 单笔最多收取的手续费(最小单位的十进制字符串) */
|
|
69
|
+
maximumFee: string;
|
|
70
|
+
/** 从这个 epoch 开始生效 */
|
|
71
|
+
epoch: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* tokens() 的 transferFee 字段:顶层是**当前 epoch** 生效的配置(按 getEpochInfo 选 newer / older),
|
|
75
|
+
* older / newer 是扩展里的两套原始配置。收到的数量 = 转账数量 - min(数量 × basisPoints / 10000 向上取整, maximumFee)
|
|
76
|
+
*/
|
|
77
|
+
export interface TransferFeeConfig extends TransferFee {
|
|
78
|
+
older: TransferFee;
|
|
79
|
+
newer: TransferFee;
|
|
80
|
+
}
|
|
40
81
|
export declare const DEFAULT_TOKEN_FIELDS: readonly ["name", "symbol", "decimals"];
|
|
41
82
|
export type DefaultTokenField = (typeof DEFAULT_TOKEN_FIELDS)[number];
|
|
42
83
|
interface TokenFieldTypes {
|
|
@@ -51,6 +92,8 @@ interface TokenFieldTypes {
|
|
|
51
92
|
/** 没有 mint 权限(已放弃)时为 null */
|
|
52
93
|
mintAuthority: string | null;
|
|
53
94
|
freezeAuthority: string | null;
|
|
95
|
+
/** Token-2022 转账手续费;SPL Token、没有这个扩展、主币时为 null(不算失败) */
|
|
96
|
+
transferFee: TransferFeeConfig | null;
|
|
54
97
|
}
|
|
55
98
|
/**
|
|
56
99
|
* tokens() / getTokens() 的单项结果,只包含请求的字段。
|
|
@@ -62,6 +105,10 @@ export type TokenDetails<F extends TokenField = DefaultTokenField> = {
|
|
|
62
105
|
native: boolean;
|
|
63
106
|
/** mint 存在且请求的 name / symbol / uri / decimals / supply 都读到时为 true */
|
|
64
107
|
success: boolean;
|
|
108
|
+
/** 失败原因,仅 success 为 false 时返回 */
|
|
109
|
+
error?: FailureReason;
|
|
110
|
+
/** error 为 missing-field 时:第一个读不到的字段 */
|
|
111
|
+
errorField?: F;
|
|
65
112
|
} & {
|
|
66
113
|
[K in F]: TokenFieldTypes[K];
|
|
67
114
|
} & ('supply' extends F ? {
|
|
@@ -91,6 +138,8 @@ export interface NftDetails {
|
|
|
91
138
|
isMutable: boolean | null;
|
|
92
139
|
updateAuthority: string | null;
|
|
93
140
|
success: boolean;
|
|
141
|
+
/** 失败原因,仅 success 为 false 时返回 */
|
|
142
|
+
error?: FailureReason;
|
|
94
143
|
}
|
|
95
144
|
export interface NftOwner {
|
|
96
145
|
mint: string;
|
|
@@ -99,6 +148,8 @@ export interface NftOwner {
|
|
|
99
148
|
/** 持有该 NFT 的代币账户 */
|
|
100
149
|
tokenAccount: string | null;
|
|
101
150
|
success: boolean;
|
|
151
|
+
/** 失败原因,仅 success 为 false 时返回 */
|
|
152
|
+
error?: FailureReason;
|
|
102
153
|
}
|
|
103
154
|
export {};
|
|
104
155
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAA;AAEhE,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,mBAAmB;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAA;IACjB,kDAAkD;IAClD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,6DAA6D;IAC7D,OAAO,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAA;AAEhE;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,YAAY,CAAA;AAEnD,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAEjE;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,WAAW,GAAG,eAAe,CAAA;AAEzH,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,mBAAmB;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAA;IACjB,kDAAkD;IAClD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,6DAA6D;IAC7D,OAAO,EAAE,OAAO,CAAA;IAChB,iCAAiC;IACjC,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,+DAA+D;AAC/D,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC;IACxE,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAA;IAChB,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,uFAAuF;IACvF,cAAc,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAA;CAC7C;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,qDAAqD;IACrD,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,mCAAmC;AACnC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,GAAG,cAAc,GAAG,eAAe,GAAG,iBAAiB,GAAG,aAAa,CAAA;AAEjJ,4BAA4B;AAC5B,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE,WAAW,CAAA;CACnB;AAED,eAAO,MAAM,oBAAoB,yCAA0E,CAAA;AAE3G,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErE,UAAU,eAAe;IACvB,sDAAsD;IACtD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,kBAAkB;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,6BAA6B;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,wDAAwD;IACxD,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAA;CACtC;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,UAAU,GAAG,iBAAiB,IAAI;IACnE,cAAc;IACd,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAA;IAChB,iCAAiC;IACjC,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,wCAAwC;IACxC,UAAU,CAAC,EAAE,CAAC,CAAA;CACf,GAAG;KAAG,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;CAAE,GAAG,CAAC,QAAQ,SAAS,CAAC,GAAG;IAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,CAAA;AAE1G,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,eAAe,GACf,UAAU,GACV,oBAAoB,GACpB,yBAAyB,GACzB,gCAAgC,CAAA;AAEpC,mFAAmF;AACnF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,qBAAqB;IACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,wCAAwC;IACxC,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAA;IACzD,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtE,aAAa;IACb,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAA;IACnC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,iCAAiC;IACjC,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,oBAAoB;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,iCAAiC;IACjC,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA0FA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAA0C,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@w3lib/solana-batch-call",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Batched Solana reads: SOL / SPL / Token-2022 balances, token metadata, NFTs. Auto-batching JSON-RPC, getMultipleAccounts chunking, RPC failover. No Solana SDK dependency.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"solana",
|
|
@@ -31,7 +31,14 @@
|
|
|
31
31
|
],
|
|
32
32
|
"sideEffects": false,
|
|
33
33
|
"engines": {
|
|
34
|
-
"node": ">=
|
|
34
|
+
"node": ">=20.19.0"
|
|
35
|
+
},
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json",
|
|
38
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
39
|
+
"test": "vitest run",
|
|
40
|
+
"test:live": "LIVE=1 vitest run test/live.test.ts",
|
|
41
|
+
"prepublishOnly": "pnpm typecheck && pnpm test && pnpm build"
|
|
35
42
|
},
|
|
36
43
|
"repository": {
|
|
37
44
|
"type": "git",
|
|
@@ -46,14 +53,10 @@
|
|
|
46
53
|
"access": "public"
|
|
47
54
|
},
|
|
48
55
|
"dependencies": {
|
|
49
|
-
"@noble/
|
|
50
|
-
"@noble/hashes": "^2.4.0",
|
|
56
|
+
"@noble/hashes": "^1.8.0 || ^2.0.0",
|
|
51
57
|
"@scure/base": "^2.4.0"
|
|
52
58
|
},
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
56
|
-
"test": "vitest run",
|
|
57
|
-
"test:live": "LIVE=1 vitest run test/live.test.ts"
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@noble/curves": "^2.4.0"
|
|
58
61
|
}
|
|
59
|
-
}
|
|
62
|
+
}
|
package/src/address.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { ed25519 } from '@noble/curves/ed25519.js'
|
|
2
1
|
import { sha256 } from '@noble/hashes/sha2.js'
|
|
3
2
|
import { base58 } from '@scure/base'
|
|
4
3
|
|
|
@@ -28,14 +27,57 @@ export function encodeAddress(bytes: Uint8Array): string {
|
|
|
28
27
|
return base58.encode(bytes)
|
|
29
28
|
}
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
// ed25519:-x² + y² = 1 + d·x²·y²(mod p)
|
|
31
|
+
const P = 2n ** 255n - 19n
|
|
32
|
+
const D = 37095705934669439343138083508754565189542113879843219016388785533085940283555n
|
|
33
|
+
|
|
34
|
+
/** x^(2^k) mod p */
|
|
35
|
+
function pow2k(x: bigint, k: number): bigint {
|
|
36
|
+
let r = x
|
|
37
|
+
for (let i = 0; i < k; i++) r = (r * r) % P
|
|
38
|
+
return r
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** x^((p-1)/2) mod p(欧拉判别法),(p-1)/2 = (2^250 - 1)·2^4 + 6,用加法链:约 254 次平方 + 12 次乘法 */
|
|
42
|
+
function legendre(x: bigint): bigint {
|
|
43
|
+
const b2 = (((x * x) % P) * x) % P // x^(2^2-1)
|
|
44
|
+
const b4 = (pow2k(b2, 2) * b2) % P
|
|
45
|
+
const b5 = (pow2k(b4, 1) * x) % P
|
|
46
|
+
const b10 = (pow2k(b5, 5) * b5) % P
|
|
47
|
+
const b20 = (pow2k(b10, 10) * b10) % P
|
|
48
|
+
const b40 = (pow2k(b20, 20) * b20) % P
|
|
49
|
+
const b80 = (pow2k(b40, 40) * b40) % P
|
|
50
|
+
const b160 = (pow2k(b80, 80) * b80) % P
|
|
51
|
+
const b240 = (pow2k(b160, 80) * b80) % P
|
|
52
|
+
const b250 = (pow2k(b240, 10) * b10) % P
|
|
53
|
+
return (pow2k(b250, 4) * ((b2 * b2) % P)) % P
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* 32 字节是否是合法的 ed25519 压缩点(PDA 必须不在曲线上)。
|
|
58
|
+
* 按 RFC 8032 5.1.3 解压缩,与 @noble/curves 的 Point.fromBytes(web3.js 的 isOnCurve 同样如此)一致:
|
|
59
|
+
* y ≥ p、x = 0 但符号位为 1 都算不在曲线上。只需判断 x² = (y² - 1) / (d·y² + 1) 有没有解,不必真的开方
|
|
60
|
+
*/
|
|
61
|
+
export function isOnCurve(bytes: Uint8Array): boolean {
|
|
62
|
+
if (bytes.length !== 32) {
|
|
37
63
|
return false
|
|
38
64
|
}
|
|
65
|
+
let y = 0n
|
|
66
|
+
for (let i = 31; i >= 0; i--) {
|
|
67
|
+
y = (y << 8n) | BigInt(i === 31 ? (bytes[i] as number) & 0x7f : (bytes[i] as number))
|
|
68
|
+
}
|
|
69
|
+
if (y >= P) {
|
|
70
|
+
return false
|
|
71
|
+
}
|
|
72
|
+
const y2 = (y * y) % P
|
|
73
|
+
const u = (y2 - 1n + P) % P
|
|
74
|
+
const v = (D * y2 + 1n) % P // d 不是平方数,v 不会为 0
|
|
75
|
+
if (u === 0n) {
|
|
76
|
+
// x = 0:符号位必须为 0
|
|
77
|
+
return ((bytes[31] as number) & 0x80) === 0
|
|
78
|
+
}
|
|
79
|
+
// u / v 是平方数 ⇔ u·v 是平方数(欧拉判别法)
|
|
80
|
+
return legendre((u * v) % P) === 1n
|
|
39
81
|
}
|
|
40
82
|
|
|
41
83
|
const PDA_MARKER = new TextEncoder().encode('ProgramDerivedAddress')
|