@w3lib/evm-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 +24 -0
- package/README.md +161 -2
- package/contracts/TokenProbe.sol +103 -0
- package/dist/aggregate.d.ts.map +1 -1
- package/dist/aggregate.js +114 -3
- package/dist/aggregate.js.map +1 -1
- package/dist/approvals.d.ts +169 -0
- package/dist/approvals.d.ts.map +1 -0
- package/dist/approvals.js +310 -0
- package/dist/approvals.js.map +1 -0
- package/dist/chains.d.ts.map +1 -1
- package/dist/chains.js +4 -0
- package/dist/chains.js.map +1 -1
- package/dist/fees.d.ts +97 -0
- package/dist/fees.d.ts.map +1 -0
- package/dist/fees.js +115 -0
- package/dist/fees.js.map +1 -0
- package/dist/http.d.ts +10 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +30 -0
- package/dist/http.js.map +1 -0
- package/dist/lp.d.ts +2 -1
- package/dist/lp.d.ts.map +1 -1
- package/dist/lp.js +2 -1
- package/dist/lp.js.map +1 -1
- package/dist/multicall.d.ts.map +1 -1
- package/dist/multicall.js +3 -0
- package/dist/multicall.js.map +1 -1
- package/dist/names.d.ts +55 -0
- package/dist/names.d.ts.map +1 -0
- package/dist/names.js +93 -0
- package/dist/names.js.map +1 -0
- package/dist/owner.d.ts +4 -26
- package/dist/owner.d.ts.map +1 -1
- package/dist/owner.js +7 -112
- package/dist/owner.js.map +1 -1
- package/dist/portfolio.d.ts +54 -0
- package/dist/portfolio.d.ts.map +1 -0
- package/dist/portfolio.js +49 -0
- package/dist/portfolio.js.map +1 -0
- package/dist/price.d.ts +95 -0
- package/dist/price.d.ts.map +1 -0
- package/dist/price.js +329 -0
- package/dist/price.js.map +1 -0
- package/dist/risk.d.ts +42 -0
- package/dist/risk.d.ts.map +1 -0
- package/dist/risk.js +134 -0
- package/dist/risk.js.map +1 -0
- package/dist/rpcNodes.d.ts.map +1 -1
- package/dist/rpcNodes.js +18 -0
- package/dist/rpcNodes.js.map +1 -1
- package/dist/subpaths/approvals.d.ts +26 -0
- package/dist/subpaths/approvals.d.ts.map +1 -0
- package/dist/subpaths/approvals.js +27 -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 +35 -0
- package/dist/subpaths/names.d.ts.map +1 -0
- package/dist/subpaths/names.js +39 -0
- package/dist/subpaths/names.js.map +1 -0
- package/dist/subpaths/price.d.ts +38 -0
- package/dist/subpaths/price.d.ts.map +1 -0
- package/dist/subpaths/price.js +40 -0
- package/dist/subpaths/price.js.map +1 -0
- package/dist/subpaths/risk.d.ts +19 -0
- package/dist/subpaths/risk.d.ts.map +1 -0
- package/dist/subpaths/risk.js +20 -0
- package/dist/subpaths/risk.js.map +1 -0
- package/dist/subpaths/swap.d.ts +19 -0
- package/dist/subpaths/swap.d.ts.map +1 -0
- package/dist/subpaths/swap.js +20 -0
- package/dist/subpaths/swap.js.map +1 -0
- package/dist/swap.d.ts +128 -0
- package/dist/swap.d.ts.map +1 -0
- package/dist/swap.js +291 -0
- package/dist/swap.js.map +1 -0
- package/dist/tokenProbe.d.ts +3 -0
- package/dist/tokenProbe.d.ts.map +1 -0
- package/dist/tokenProbe.js +4 -0
- package/dist/tokenProbe.js.map +1 -0
- package/dist/write/tron.d.ts +25 -0
- package/dist/write/tron.d.ts.map +1 -1
- package/dist/write/tron.js +26 -0
- package/dist/write/tron.js.map +1 -1
- package/package.json +39 -16
- package/src/aggregate.ts +110 -3
- package/src/approvals.ts +462 -0
- package/src/chains.ts +4 -0
- package/src/fees.ts +201 -0
- package/src/http.ts +34 -0
- package/src/lp.ts +3 -1
- package/src/multicall.ts +3 -0
- package/src/names.ts +141 -0
- package/src/owner.ts +7 -138
- package/src/portfolio.ts +91 -0
- package/src/price.ts +415 -0
- package/src/risk.ts +166 -0
- package/src/rpcNodes.ts +18 -0
- package/src/subpaths/approvals.ts +48 -0
- package/src/subpaths/fees.ts +43 -0
- package/src/subpaths/names.ts +43 -0
- package/src/subpaths/price.ts +60 -0
- package/src/subpaths/risk.ts +23 -0
- package/src/subpaths/swap.ts +36 -0
- package/src/swap.ts +413 -0
- package/src/tokenProbe.ts +5 -0
- package/src/write/tron.ts +43 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.7.0
|
|
4
|
+
|
|
5
|
+
### 新功能
|
|
6
|
+
|
|
7
|
+
- 价格,子路径 `@w3lib/evm-batch-call/price`:
|
|
8
|
+
- `getTokenPrices` / `tokenPrices`:代币(含主币)的美元价格,依次使用多个价格源,结果带给出价格的源
|
|
9
|
+
- `onchainPrices()`:从内置协议表的 V2 / V3 池子算价格(对包装主币、稳定币,用最深的池子,流动性下限 `minLiquidityUsd`),也支持 Tron 的 SunSwap
|
|
10
|
+
- `defillamaPrices({ at })`:历史价格
|
|
11
|
+
- `combinePrices([...])`:组合多个价格源,可以传给 `getLpPositions` / `getOwnerTokens` 的 `prices`
|
|
12
|
+
- `getPortfolio` / `portfolio`:地址的资产总值(传入代币的余额 × 价格,可选加上 LP 仓位)
|
|
13
|
+
- 兑换,子路径 `@w3lib/evm-batch-call/swap`:`getSwapQuote` / `buildSwap`(V2 / V3 池子的直接和两跳路线,一次 multicall 报价,选输出最多的,按滑点算最少收到、价格影响)、`swap`(授权 + 兑换,主币自动包装 / 解包),Tron 上是 SunSwap V2
|
|
14
|
+
- `swap` 有授权时,授权确认后重新报价再发兑换(deadline、最少收到从发兑换那一刻算);`tax` 选项:V2 报价不含转账税,带税代币的最少收到要再乘 (1 − tax)
|
|
15
|
+
- 代币风险检查,子路径 `@w3lib/evm-batch-call/risk`:`getTokenRisks` / `tokenRisks`,在 `eth_call` 里用 deployless 的探测合约(`contracts/TokenProbe.sol`)模拟买入 / 转账 / 卖出,算出买入税、转账税、卖出税,识别貔貅盘;检查 EIP-1967 代理和 owner
|
|
16
|
+
- 手续费估算,子路径 `@w3lib/evm-batch-call/fees`:`getFeeEstimate` / `estimateFees`(按 `eth_feeHistory` 的三档 EIP-1559 费用,不支持时按 `eth_gasPrice`)、`getCostEstimate` / `estimateCost`(一笔交易的手续费,含 OP Stack / Scroll 的 L1 数据费;Tron 按能量、带宽和账户剩余资源算要烧的 TRX,含激活费)
|
|
17
|
+
- 域名解析,子路径 `@w3lib/evm-batch-call/names`:`getNameAddresses` / `resolveNames`(名字 → 地址)、`getAddressNames` / `lookupAddresses`(地址 → 主名字,正查核对),内置 ENS、SPACE ID(.bnb)、Basenames(.base.eth),名字按 ENSIP-15 规范化
|
|
18
|
+
- 授权管理,子路径 `@w3lib/evm-batch-call/approvals`:
|
|
19
|
+
- `getApprovals` / `approvals`:批量查 ERC20 额度、Permit2 额度(含过期时间)、NFT 的 setApprovalForAll;默认检查 `knownSpenders(chainId)`(内置协议的 Router / 仓位合约、Uniswap / PancakeSwap Router、1inch、0x、ParaSwap、Permit2、OpenSea / Blur)
|
|
20
|
+
- `scanApprovals`:按 Approval / ApprovalForAll / Permit2 事件增量发现授权过的代币和 NFT 合约,进度可以保存
|
|
21
|
+
- `buildRevokes` / `revokeApprovals`:批量撤销(approve 0、Permit2 lockdown、setApprovalForAll false),发送同 `batchCall`,支持 7702 合成一笔
|
|
22
|
+
- Tron 支持查询和撤销(没有 Permit2,不支持扫描)
|
|
23
|
+
- 价格源的 `PriceSourceContext` 新增 `provider`(链上价格源用);`defillamaPrices`、`PriceSource` 仍可以从 `/owner`、`/lp` 导入
|
|
24
|
+
- 批量查询的链:Multicall3 地址表和内置节点补充 Conflux eSpace(1030)、Injective EVM(1776)、Pharos(1672,主币 PROS),星空链(202308)只有节点(没有 Multicall3,走 deployless);FSC(201022)补主币 FON
|
|
25
|
+
- deployless 不可用(合约创建式 `eth_call` 返回空数据 / 无法解码)时,自动改成逐条 `eth_call`(主币余额用 `eth_getBalance`,区块号用 `getBlockNumber`);确认不支持后记住 10 分钟,不再先试一次注定失败的 deployless
|
|
26
|
+
|
|
3
27
|
## 0.6.0
|
|
4
28
|
|
|
5
29
|
### 新功能
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
pnpm add @w3lib/evm-batch-call ethers
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
**在线 demo**:<https://web3-lib.github.io/libs/evm/>(余额、代币信息、资产列表、LP
|
|
9
|
+
**在线 demo**:<https://web3-lib.github.io/libs/evm/>(余额、代币信息、资产列表、LP 仓位、添加 / 移除流动性(报价,连接浏览器钱包后可以发送)、NFT、价格 / 资产总值、授权(批量查询 + 撤销)、域名(ENS / SPACE ID / Basenames 正反向解析)、手续费估算、兑换(报价,连接浏览器钱包后可以发送,可填转账税)、代币风险(买卖税 / 貔貅检查),8 条链含 Tron,显示每次查询实际发出的节点请求数)。本地运行:`pnpm --filter @w3lib/evm-batch-call demo`(http://localhost:5174)
|
|
10
10
|
|
|
11
11
|
## 快速上手
|
|
12
12
|
|
|
@@ -371,15 +371,174 @@ await collectFees(multi, privateKey, { position })
|
|
|
371
371
|
打包:在已经用到 `Provider` 的基础上,只用 `build*` 约增加 40KB(minify,gzip 约 13KB),加上发送约 77KB(gzip 约 26KB,其中大部分是 `/write` 的发送代码),均不含 ethers。
|
|
372
372
|
|
|
373
373
|
|
|
374
|
+
## 兑换
|
|
375
|
+
|
|
376
|
+
子路径 `@w3lib/evm-batch-call/swap`:在内置协议表的 V2 / V3 池子里找最好的路线,报价并构建 / 发送兑换交易(Tron 上是 SunSwap V2)。
|
|
377
|
+
|
|
378
|
+
```ts
|
|
379
|
+
import { NATIVE_TOKEN } from '@w3lib/evm-batch-call'
|
|
380
|
+
import { getSwapQuote, swap } from '@w3lib/evm-batch-call/swap'
|
|
381
|
+
|
|
382
|
+
const plan = await getSwapQuote(user, { tokenIn: NATIVE_TOKEN, tokenOut: USDT, amountInFormatted: '0.1' }, { chainId: 56 })
|
|
383
|
+
plan.amountOutFormatted // '72.6'
|
|
384
|
+
plan.route // { protocol: 'pancakeswap-v3', version: 'v3', path: [WBNB, USDT], fees: [100], … }
|
|
385
|
+
plan.transactions // 授权(卖出代币且额度不够时)+ 兑换
|
|
386
|
+
|
|
387
|
+
await swap(provider, key, { tokenIn: USDT, tokenOut: NATIVE_TOKEN, amountInFormatted: '100' }, { slippage: 0.01 })
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
- **路线**:直接兑换,加上经过包装主币 / 稳定币(`LP_QUOTE_TOKENS`,可用 `intermediates` 改)的两跳;V2 的每个协议、V3 的每个手续费档位都算一条候选。V3 先查哪些池子存在、当前流动性(没有流动性的不算,两跳时每一跳只用流动性最大的 2 个档位),然后批量报价(V2 用 Router 的 `getAmountsOut`,一次报完;QuoterV2 很费 gas,每 3 个一组并发,避免超过节点的 gas 上限),选输出最多的。`routes` 里是全部候选的报价
|
|
391
|
+
- **最少收到**:`amountOutMin = 报价 × (1 − slippage)`(默认 0.5%),交易里由 Router 检查;`priceImpact` 是这笔的价格比极小数量的价格差多少
|
|
392
|
+
- **带转账税的代币**:V2 的报价(`getAmountsOut`)不含转账税,实际收到的更少,默认滑点下会 `INSUFFICIENT_OUTPUT_AMOUNT` 回滚。用 `tax`(如 `0.05`)把最少收到再乘 (1 − tax),税率可用 `/risk` 查;`plan.amountOut` 仍是不含税的报价
|
|
393
|
+
- **授权后重新报价**:`swap` 在有授权时先发授权,确认后重新报价再发兑换,deadline 和最少收到从发兑换那一刻算
|
|
394
|
+
- **交易**:V2 走 Router 的 `swapExact…SupportingFeeOnTransferTokens`(主币进出用 ETH 版本);V3 走 SwapRouter02 / PancakeSwap SmartRouter 的 `multicall(deadline, …)`,卖出主币时附带 value,买入主币时先收到 Router 再 `unwrapWETH9`。卖出代币时额度不够先授权给 Router(`approve: 'max'` 可设无限额度)
|
|
395
|
+
- **协议**:`swapProtocols(chainId)`——V2 是协议表里有 Router 的,V3 是 `V3_SWAP_CONTRACTS` 里有报价和兑换合约的(Uniswap V3:7 条链;PancakeSwap V3:Ethereum、BSC、Base)。V4 和聚合器暂不支持
|
|
396
|
+
- 报价是池子当前的状态,交易上链前价格可能变化;有转账税的代币报价会偏高(实际收到的少),可以先用 [代币风险检查](#代币风险检查) 看税率
|
|
397
|
+
|
|
398
|
+
主网核对:8 条链(含 Tron)报价正常。在 Base、BSC 上固定一个区块报价(`blockTag`),在同一个区块上用 `eth_call` 执行构建出的兑换交易(卖出代币时用 state override 设置额度):最少收到 = 报价时成功、= 报价 + 1 时失败,说明收到的正好等于报价——覆盖主币 → 稳定币、稳定币 → 主币(授权 + 解包)、V3 两跳、V2 的三种函数;Tron 的 SunSwap V2 两个方向同样核对过。
|
|
399
|
+
|
|
400
|
+
其他选项:`route` 指定走 `routes` 里的某一条(如让用户选另一条路线);`blockTag` 按某个区块的状态报价。
|
|
401
|
+
|
|
402
|
+
打包:在已经用到 `Provider` 的基础上,`buildSwap` 约增加 16KB(minify,gzip 约 7KB,含 `/liquidity` 的授权代码和协议表),`swap` 另外按需加载 `/write` 的发送代码。
|
|
403
|
+
|
|
404
|
+
## 代币风险检查
|
|
405
|
+
|
|
406
|
+
子路径 `@w3lib/evm-batch-call/risk`:在 `eth_call` 里模拟“买入 → 转账 → 卖出”(deployless 的探测合约,不部署、不发交易),算出税率、判断能不能卖。
|
|
407
|
+
|
|
408
|
+
```ts
|
|
409
|
+
import { getTokenRisks } from '@w3lib/evm-batch-call/risk'
|
|
410
|
+
|
|
411
|
+
const [risk] = await getTokenRisks([token], { chainId: 56 })
|
|
412
|
+
// { stage: 'ok', honeypot: false, buyTax: 0.05, sellTax: 0.08, transferTax: 0.02, owner: '0x…', implementation: null,
|
|
413
|
+
// flags: ['has-tax', 'owned'], protocol: 'pancakeswap-v2', pool: '0x…', buyGas: 125000, sellGas: 98000 }
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
- 用代币 / 包装主币里包装主币一侧最深的 V2 池子,从包装主币合约发起 `eth_call`(它持有大量主币,`eth_call` 不需要签名),默认用储备的 1 / 1000(最多 1 个主币)买入
|
|
417
|
+
- **税率**:买入税 = 1 − 实际收到 / Router 报价;转账税:转一成给新地址,看对方收到多少;卖出税取两种算法中较大的:池子实际收到的代币(转账时扣的税,精确),以及换回的主币比报价少多少(有的代币卖出时顺便把收来的税也卖进同一个池子)
|
|
418
|
+
- 节点、网络、限频的错误会抛出,不当成代币的风险;只有执行失败才标为买不进
|
|
419
|
+
- **判断**:`stage` 是模拟到哪一步(`buy-failed` 买不进:可能还没开放交易或限制了合约;`sell-failed` 卖不出)。`honeypot`:卖不出、转不了,或卖出税 ≥ 90%。`flags` 汇总:`honeypot`、`cannot-buy`、`high-buy-tax` / `high-sell-tax` / `high-transfer-tax`(> 10%)、`has-tax`(> 0.5%)、`proxy`(EIP-1967 可升级代理,规则以后可以改)、`owned`(`owner()` 不是零地址)、`no-pool`
|
|
420
|
+
- 只能发现模拟时的行为:针对特定地址、时间、数量才生效的限制(黑名单、交易冷却、单笔上限)不一定能发现;Tron 不支持
|
|
421
|
+
|
|
422
|
+
核对:在 BSC 主网分叉上部署测试代币(买 5% / 卖 8% / 转账 2% 税、卖出时把攒下的税也卖进池子、禁止卖出、卖出税 95%)和 PancakeSwap V2 池子,税率一致、貔貅盘都能识别;主网上 CAKE、USDT、PEPE 等没有税。
|
|
423
|
+
|
|
424
|
+
打包:探测合约约 3KB 字节码;在已经用到 `Provider` 的基础上 `getTokenRisks` 约增加 19KB(minify,gzip 约 8KB)。
|
|
425
|
+
|
|
426
|
+
## 手续费估算
|
|
427
|
+
|
|
428
|
+
子路径 `@w3lib/evm-batch-call/fees`:当前的手续费建议,和一笔交易大概要付多少手续费。
|
|
429
|
+
|
|
430
|
+
```ts
|
|
431
|
+
import { getCostEstimate, getFeeEstimate } from '@w3lib/evm-batch-call/fees'
|
|
432
|
+
|
|
433
|
+
await getFeeEstimate({ chainId: 1 })
|
|
434
|
+
// { type: 'eip1559', baseFee: '1200000000', slow: { maxFeePerGas, maxPriorityFeePerGas }, normal: {…}, fast: {…} }
|
|
435
|
+
|
|
436
|
+
await getCostEstimate({ from: user, to: USDT, data }, { chainId: 8453 })
|
|
437
|
+
// { type: 'evm', gasLimit: '45000', gasPrice, fee, maxFee, l1Fee: '…', total, totalFormatted: '0.0000123', symbol: 'ETH' }
|
|
438
|
+
|
|
439
|
+
await getCostEstimate({ from, to: USDT, data }, { chainId: 728126428 })
|
|
440
|
+
// { type: 'tron', energy: 64285, bandwidth: 345, energyBurn: '6428500', bandwidthBurn: '345000', activates: false, totalFormatted: '6.7735', symbol: 'TRX' }
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
- **费用建议**:按最近 20 个区块的 `eth_feeHistory`,baseFee 取下一个区块的,三档优先费是各区块第 10 / 50 / 90 百分位的中位数(空区块不算),`maxFeePerGas = baseFee × 2 + 优先费`(`/write` 默认用节点的 `getFeeData`,优先费取 `eth_maxPriorityFeePerGas`,公式相同但优先费来源不同)。节点不支持 `eth_feeHistory` 或 baseFee 为 0 的链(如 BSC)按 `eth_gasPrice`(快档 1.2 倍);网络等其他错误照常抛出
|
|
444
|
+
- **一笔交易**:预估 gas(会执行一遍,revert 时抛出)× 这一档的价格;`fee` 按 baseFee + 优先费算(预计实际付的),`maxFee` 是最多付的。OP Stack / Scroll 链加上 L1 数据费(含 25% 余量)。多笔交易可以先查一次 `estimateFees` 再传 `fees` 共用
|
|
445
|
+
- **Tron**:模拟合约调用得到能量,按发送者剩余的质押能量、免费 / 质押带宽抵扣,不够的部分按链参数的价格烧 TRX;转 TRX 给没激活的地址时算上激活费(`activates: true`)。能量按模拟值,不加余量
|
|
446
|
+
|
|
447
|
+
主网核对:Ethereum、Base(含 L1 数据费)、BSC 上的 ERC20 转账;Tron 上有质押资源和全新地址两种发送者的 USDT 转账,以及给没激活的地址转 TRX。
|
|
448
|
+
|
|
449
|
+
打包:在已经用到 `Provider` 的基础上,`getFeeEstimate` 约增加 6KB(minify,gzip 约 2KB);`getCostEstimate` 另外按需加载 `/write` 的节点代码,Tron 的部分只在 Tron 上加载。
|
|
450
|
+
|
|
451
|
+
## 域名解析
|
|
452
|
+
|
|
453
|
+
子路径 `@w3lib/evm-batch-call/names`:名字 → 地址、地址 → 名字,用 Provider 这条链的域名服务。
|
|
454
|
+
|
|
455
|
+
| 链 | 服务 | 名字 |
|
|
456
|
+
| --- | --- | --- |
|
|
457
|
+
| Ethereum | ENS | `.eth` 以及导入的 DNS 域名 |
|
|
458
|
+
| BSC | SPACE ID | `.bnb` |
|
|
459
|
+
| Base | Basenames | `.base.eth` |
|
|
460
|
+
|
|
461
|
+
```ts
|
|
462
|
+
import { getAddressNames, getNameAddresses } from '@w3lib/evm-batch-call/names'
|
|
463
|
+
|
|
464
|
+
await getNameAddresses(['vitalik.eth', 'nick.eth'], { chainId: 1 })
|
|
465
|
+
// [{ name: 'vitalik.eth', normalized: 'vitalik.eth', address: '0xd8dA…6045', service: 'ens' }, …]
|
|
466
|
+
await getAddressNames([user], { chainId: 56 })
|
|
467
|
+
// [{ address: user, name: 'alice.bnb', service: 'spaceid' }]
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
- 名字按 ENSIP-15 规范化(大小写、全角等),结果的 `normalized` 是规范化后的名字;不合法的名字 `normalized` / `address` 为 null
|
|
471
|
+
- 正查读注册表的 resolver、再读 `addr`,两次 multicall;反查读主名字后再正查核对(名字要解析回同一个地址,没核对的反查记录谁都能设置),共四次 multicall
|
|
472
|
+
- 不支持通配解析(ENSIP-10)和链下解析(CCIP-Read),这类名字(如部分子域名)返回 null;Tron 上没有域名服务
|
|
473
|
+
- `services` 可以换成自己的 ENS 式注册表(`{ id, name, chainId, registry, suffixes, reverseSuffix }`)
|
|
474
|
+
|
|
475
|
+
打包:在已经用到 `Provider` 的基础上约增加 2KB(minify,gzip 不到 1KB;名字规范化用 ethers 自带的 `ensNormalize`)。
|
|
476
|
+
|
|
477
|
+
## 授权管理
|
|
478
|
+
|
|
479
|
+
子路径 `@w3lib/evm-batch-call/approvals`:查一个地址给出的授权,批量撤销。
|
|
480
|
+
|
|
481
|
+
```ts
|
|
482
|
+
import { approvals, getApprovals, revokeApprovals, scanApprovals } from '@w3lib/evm-batch-call/approvals'
|
|
483
|
+
|
|
484
|
+
// 持有的代币 × 已知的被授权方(内置协议的 Router / 仓位合约、Uniswap / PancakeSwap 的 Router、1inch、0x、ParaSwap、Permit2),一次 multicall
|
|
485
|
+
const list = await getApprovals(user, { chainId: 56, tokens: [USDT, CAKE] })
|
|
486
|
+
// [{ type: 'erc20', token: USDT, symbol: 'USDT', spender: '0x1111…', spenderName: '1inch Router v6', amount: '…', unlimited: true },
|
|
487
|
+
// { type: 'permit2', token: USDT, spender: '0x66a9…', spenderName: 'Uniswap Universal Router', amount: '…', expiration: 1767225600, expired: false, … }]
|
|
488
|
+
|
|
489
|
+
await revokeApprovals(provider, key, list.filter((a) => a.type !== 'nft' && a.unlimited))
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
- **三种授权**:ERC20 的 `allowance`;Permit2 的额度(`amount` / `expiration` / `nonce`,过期的不返回);NFT 的 `isApprovedForAll`(传 `nfts`,默认检查 OpenSea、Blur 的 operator)。`includeZero: true` 时也返回额度为 0 / 已过期 / 未授权的项
|
|
493
|
+
- **检查范围**:`tokens` × `spenders`(默认 `knownSpenders(chainId)`),加上直接给出的 `pairs` / `nftPairs`。被授权方不在已知列表里时 `spenderName` 为 null
|
|
494
|
+
- **按事件发现**:`scanApprovals` 扫地址发出的 `Approval` / `ApprovalForAll` 事件和 Permit2 的 `Approval` / `Permit` 事件,返回授权过的 `pairs` / `nftPairs`(只发现,当前是否还有效交给 `approvals` 查),可以保存 `progress` 下次接着扫。需要节点支持不带合约地址的 `eth_getLogs`(publicnode 等节点要求带地址,不行;drpc、1rpc、flashbots 可以),公共节点的区块范围限制很严,适合从某个时间点开始增量扫描,不适合扫全部历史。Tron 不支持
|
|
495
|
+
- **撤销**:`buildRevokes` 只构建交易(ERC20 每个一笔 `approve(spender, 0)`,Permit2 的全部合成一笔 `lockdown`,NFT 每个一笔 `setApprovalForAll(false)`);`revokeApprovals` 构建后发送,钱包和选项同 `batchCall`(`mode: '7702'` 时同一钱包的撤销合成一笔交易),默认一笔失败不影响后面的
|
|
496
|
+
- **Tron**:SunSwap 的 Router / 仓位合约的额度和撤销(T 地址),没有 Permit2
|
|
497
|
+
|
|
498
|
+
主网核对:Ethereum 上从最近区块的真实 `Approval` / `Permit` / `ApprovalForAll` 事件取授权,额度和合约一致,`scanApprovals` 能发现,撤销的三种交易都能预估通过;Tron 上读到 SunSwap 的真实授权,撤销能模拟。
|
|
499
|
+
|
|
500
|
+
打包:在已经用到 `Provider` 的基础上,`getApprovals` 约增加 11KB(minify,gzip 约 5KB),`scanApprovals` 很小(约 4KB gzip,不含 Provider);发送的代码按需加载,只查授权时不会打包。
|
|
501
|
+
|
|
502
|
+
## 价格
|
|
503
|
+
|
|
504
|
+
子路径 `@w3lib/evm-batch-call/price`:代币的美元价格和地址的资产总值。
|
|
505
|
+
|
|
506
|
+
```ts
|
|
507
|
+
import { NATIVE_TOKEN } from '@w3lib/evm-batch-call'
|
|
508
|
+
import { getPortfolio, getTokenPrices } from '@w3lib/evm-batch-call/price'
|
|
509
|
+
|
|
510
|
+
await getTokenPrices([NATIVE_TOKEN, USDT, newToken], { chainId: 56 })
|
|
511
|
+
// [{ token: '0xEeee…', native: true, price: 612.3, source: 'defillama' }, …, { token: newToken, price: 0.0012, source: 'onchain' }]
|
|
512
|
+
|
|
513
|
+
const p = await getPortfolio(user, { chainId: 56, tokens: [NATIVE_TOKEN, USDT, CAKE], lp: true })
|
|
514
|
+
p.totalUsd // 代币 + LP 仓位的合计;p.tokens 按价值排序,p.lp 是 LP 仓位
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
- 价格源依次使用,前面没有价格的代币交给后面的(`sources`,默认 `[defillamaPrices(), onchainPrices()]`),结果的 `source` 是给出价格的源
|
|
518
|
+
- `defillamaPrices({ at })`:历史价格(unix 秒或 `Date`);`minConfidence` 过滤置信度低的价格(默认 0.9)
|
|
519
|
+
- `onchainPrices()`:在内置协议表的 V2 / V3 池子里找代币对包装主币、稳定币的池子,用计价币一侧最深的池子的价格;稳定币按 1 美元。V3 池子的深度取计价币余额和当前价格附近的流动性折算值中较小的(只看余额会被“远处放一笔、再推价格”的方式骗过),`minLiquidityUsd`(默认 10000)以下的池子不用。这只能挡住很小的池子:有人愿意自己出资建一个够深的池子时,价格仍然可以是他定的,所以新币的链上价格只适合展示。主网实测和 DefiLlama 相差在 0.5% 以内(Ethereum、BSC、Base、Tron)
|
|
520
|
+
- `combinePrices([…])` 把多个源组合成一个,可以传给 `getLpPositions` / `getOwnerTokens` 的 `prices`
|
|
521
|
+
- 资产总值只计入传入的代币(EVM 不能只靠节点列出地址持有的全部代币),`lp: true` 时加上 LP 仓位(参数同 `getLpPositions`)
|
|
522
|
+
|
|
523
|
+
价格只用于展示和估值:链上价格是池子当前的价格,可能被单个区块内的交易影响,不要用它算交易的最小数量。
|
|
524
|
+
|
|
525
|
+
打包:在已经用到 `Provider` 的基础上,`getTokenPrices` 约增加 12KB(minify,gzip 约 5KB),`getPortfolio`(含 LP 仓位)约 31KB(gzip 约 12KB),均不含 ethers。
|
|
526
|
+
|
|
374
527
|
## 功能
|
|
375
528
|
|
|
376
529
|
- **常用查询**:余额、代币详情、授权额度、NFT(集合 / 持有 / 元数据地址 / ERC1155 余额,子路径 `/nft`),一个函数一次请求
|
|
530
|
+
- **兑换**(子路径 `/swap`):V2 / V3 池子的最佳路线(直接或两跳)、报价、构建和发送,主币自动包装 / 解包
|
|
531
|
+
- **代币风险检查**(子路径 `/risk`):模拟买入 / 转账 / 卖出,算出买卖税、识别貔貅盘,代理合约、owner
|
|
532
|
+
- **手续费估算**(子路径 `/fees`):EIP-1559 三档费用建议,一笔交易的手续费(含 L1 数据费),Tron 按能量 / 带宽算要烧的 TRX
|
|
533
|
+
- **域名解析**(子路径 `/names`):ENS、SPACE ID(.bnb)、Basenames(.base.eth),批量正查、反查(正查核对)
|
|
534
|
+
- **授权管理**(子路径 `/approvals`):ERC20 / Permit2 / NFT 授权的批量查询(默认检查常见 Router、聚合器、NFT 市场),按事件发现,批量撤销
|
|
535
|
+
- **价格**(子路径 `/price`):DefiLlama 当前 / 历史价格、链上 V2 / V3 池子价格,组合价格源,地址的资产总值(代币 + LP 仓位)
|
|
377
536
|
- **资产列表**(不推荐使用,尽力而为,子路径 `/owner`):`getOwnerTokens`,免费公开代币列表或带 Key 的索引服务发现代币,multicall 核对余额,可选 DefiLlama 价格
|
|
378
537
|
- **批量读取**:`all` / `tryAll` / `tryEach`,N 条读调用合成一次 `eth_call`;支持数组或对象输入
|
|
379
538
|
- **自动合并**:绑定合约直接 `await`、`provider.call(x)`,以及 `balances` / `tokens` / `allowances`,同一收集窗口内的调用合并成一次请求并去重
|
|
380
539
|
- **预执行**:`staticCall` / `staticCallAll` / `method.staticCall`,带 `from` / `value` 模拟交易,返回解析好的 revert 原因
|
|
381
540
|
- **主币余额合并**:`getEthBalance` 与合约调用在同一次 `eth_call` 里——无论链上有没有 Multicall3
|
|
382
|
-
- **任意链可用**:内置 Multicall3 地址表;表里没有、地址无效、或查询早于部署区块时,自动改用 deployless(链上无需部署任何合约)。少数链不支持 deployless(合约创建式 `eth_call
|
|
541
|
+
- **任意链可用**:内置 Multicall3 地址表;表里没有、地址无效、或查询早于部署区块时,自动改用 deployless(链上无需部署任何合约)。少数链不支持 deployless(合约创建式 `eth_call` 返回空数据,如 Oasis Emerald、Aurora):表里有 Multicall3 的链只能查合约部署之后的状态;deployless 失败时(空数据 / 无法解码)自动改成逐条 `eth_call`(主币余额用 `eth_getBalance`,合并在一个 HTTP batch 里,慢一些但任何链都能用),确认不支持后记住 10 分钟、不再先试一次 deployless;`pnpm check:rpc` 会检查内置节点表里每条链至少有一种批量方式可用
|
|
383
542
|
- **备用节点**:传多个节点自动故障切换;不传节点使用内置公共节点表(34 条 EVM 链 + Tron)
|
|
384
543
|
- **chainId 可选**:传了节点就能自动识别 chainId,结果缓存,钱包切链自动失效
|
|
385
544
|
- **Tron**:走 Tron HTTP API,T 开头地址可以直接用
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.20;
|
|
3
|
+
|
|
4
|
+
interface IRouter {
|
|
5
|
+
function WETH() external view returns (address);
|
|
6
|
+
function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);
|
|
7
|
+
function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable;
|
|
8
|
+
function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface IERC20 {
|
|
12
|
+
function balanceOf(address owner) external view returns (uint256);
|
|
13
|
+
function transfer(address to, uint256 amount) external returns (bool);
|
|
14
|
+
function approve(address spender, uint256 amount) external returns (bool);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/// @notice 代币风险探测:只在 eth_call 里以 deployless 方式执行(构造函数跑完把结果作为“代码”返回),不部署、不发交易。
|
|
18
|
+
/// 用附带的主币通过 V2 Router 买入,把一部分转给一个新地址,再把剩下的卖回主币,分别记录报价和实际数量,用来算买入税、转账税、卖出税,
|
|
19
|
+
/// 以及能不能卖(貔貅盘)。每一步失败都不影响返回结果,失败的步骤在 stage 里标出。
|
|
20
|
+
contract TokenProbe {
|
|
21
|
+
struct Result {
|
|
22
|
+
uint256 stage;
|
|
23
|
+
uint256 buyQuote;
|
|
24
|
+
uint256 bought;
|
|
25
|
+
uint256 transferSent;
|
|
26
|
+
uint256 transferReceived;
|
|
27
|
+
uint256 sellAmount;
|
|
28
|
+
uint256 sellQuote;
|
|
29
|
+
uint256 sold;
|
|
30
|
+
uint256 buyGas;
|
|
31
|
+
uint256 sellGas;
|
|
32
|
+
/// 卖出时池子实际收到的代币(扣掉卖出税之后的)
|
|
33
|
+
uint256 pairReceived;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/// stage:0 全部完成;1 买入失败;2 转账失败;3 授权失败;4 卖出失败
|
|
37
|
+
constructor(address router, address token, address pair) payable {
|
|
38
|
+
Result memory r;
|
|
39
|
+
address weth = IRouter(router).WETH();
|
|
40
|
+
address[] memory path = new address[](2);
|
|
41
|
+
path[0] = weth;
|
|
42
|
+
path[1] = token;
|
|
43
|
+
try IRouter(router).getAmountsOut(msg.value, path) returns (uint256[] memory amounts) {
|
|
44
|
+
r.buyQuote = amounts[1];
|
|
45
|
+
} catch {}
|
|
46
|
+
|
|
47
|
+
uint256 gasBefore = gasleft();
|
|
48
|
+
try IRouter(router).swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(0, path, address(this), block.timestamp) {
|
|
49
|
+
r.buyGas = gasBefore - gasleft();
|
|
50
|
+
r.bought = IERC20(token).balanceOf(address(this));
|
|
51
|
+
} catch {
|
|
52
|
+
r.stage = 1;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// 几乎没买到(买入税接近 100%)时跳过转账这一步(转 0 个可能失败,阶段会被误标),直接试卖出
|
|
56
|
+
if (r.stage == 0 && r.bought >= 10) {
|
|
57
|
+
// 转一成给一个没用过的地址,看对方实际收到多少
|
|
58
|
+
address receiver = address(uint160(uint256(keccak256(abi.encode(address(this), token)))));
|
|
59
|
+
r.transferSent = r.bought / 10;
|
|
60
|
+
if (_call(token, abi.encodeWithSelector(IERC20.transfer.selector, receiver, r.transferSent))) {
|
|
61
|
+
r.transferReceived = IERC20(token).balanceOf(receiver);
|
|
62
|
+
} else {
|
|
63
|
+
r.stage = 2;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (r.stage == 0) {
|
|
68
|
+
r.sellAmount = IERC20(token).balanceOf(address(this));
|
|
69
|
+
if (!_call(token, abi.encodeWithSelector(IERC20.approve.selector, router, type(uint256).max))) {
|
|
70
|
+
r.stage = 3;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (r.stage == 0) {
|
|
75
|
+
path[0] = token;
|
|
76
|
+
path[1] = weth;
|
|
77
|
+
try IRouter(router).getAmountsOut(r.sellAmount, path) returns (uint256[] memory amounts) {
|
|
78
|
+
r.sellQuote = amounts[1];
|
|
79
|
+
} catch {}
|
|
80
|
+
uint256 balanceBefore = address(this).balance;
|
|
81
|
+
uint256 pairBefore = IERC20(token).balanceOf(pair);
|
|
82
|
+
gasBefore = gasleft();
|
|
83
|
+
try IRouter(router).swapExactTokensForETHSupportingFeeOnTransferTokens(r.sellAmount, 0, path, address(this), block.timestamp) {
|
|
84
|
+
r.sellGas = gasBefore - gasleft();
|
|
85
|
+
r.sold = address(this).balance - balanceBefore;
|
|
86
|
+
r.pairReceived = IERC20(token).balanceOf(pair) - pairBefore;
|
|
87
|
+
} catch {
|
|
88
|
+
r.stage = 4;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
bytes memory result = abi.encode(r);
|
|
93
|
+
assembly {
|
|
94
|
+
return(add(result, 32), mload(result))
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/// 调用 transfer / approve:成功且(没有返回值或返回 true)。USDT 等不返回 bool 的代币也算成功
|
|
99
|
+
function _call(address token, bytes memory data) private returns (bool) {
|
|
100
|
+
(bool ok, bytes memory ret) = token.call(data);
|
|
101
|
+
return ok && (ret.length == 0 || (ret.length >= 32 && abi.decode(ret, (bool))));
|
|
102
|
+
}
|
|
103
|
+
}
|
package/dist/aggregate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../src/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAkC,KAAK,QAAQ,IAAI,cAAc,EAAE,MAAM,QAAQ,CAAA;AAE7G,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAI3E,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAGnE;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAA;AAE1I,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAE/C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,yDAAyD;IACzD,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAItE,eAAO,MAAM,mBAAmB,WAI9B,CAAA;
|
|
1
|
+
{"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../src/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAkC,KAAK,QAAQ,IAAI,cAAc,EAAE,MAAM,QAAQ,CAAA;AAE7G,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAI3E,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAGnE;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAA;AAE1I,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAE/C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,yDAAyD;IACzD,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAItE,eAAO,MAAM,mBAAmB,WAI9B,CAAA;AA+JF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,4BAA4B;IAC5B,SAAS,EAAE,SAAS,GAAG,IAAI,CAAA;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAClC;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,GAAE,aAAkB,GAC5B,OAAO,CAAC,SAAS,EAAE,CAAC,CAmBtB;AAodD,uBAAuB;AACvB,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C"}
|
package/dist/aggregate.js
CHANGED
|
@@ -40,6 +40,11 @@ const AGGREGATE3_RESULT_SELECTOR = id('Aggregate3Result((bool,bytes)[])').slice(
|
|
|
40
40
|
* 这样业务里每次 new Provider 也只会多试一次。
|
|
41
41
|
*/
|
|
42
42
|
const unusableMulticalls = new Map();
|
|
43
|
+
/**
|
|
44
|
+
* 不支持 deployless 的链(合约创建式 eth_call 返回空数据 / 无法解码,如 Oasis Emerald、Aurora),记录到什么时候为止
|
|
45
|
+
* 直接逐条 eth_call,不再先试一次注定失败的 deployless;到期后重新尝试
|
|
46
|
+
*/
|
|
47
|
+
const deploylessUnsupported = new Map();
|
|
43
48
|
/** 判定不可用后多久重新尝试合约(节点偶发返回空数据时不至于整个会话都不用 Multicall3) */
|
|
44
49
|
const UNUSABLE_TTL = 10 * 60 * 1000;
|
|
45
50
|
/** 单节点时连续返回空数据 / 无法解码的次数(多节点时由多个节点一致的结果确认,见 aggregateRawChunk) */
|
|
@@ -392,9 +397,114 @@ async function callContract(ctx, multicall, requests, overrides, atLeast) {
|
|
|
392
397
|
* 返回超过 24KB 的情况由合约改用 revert 带回,见 contracts/DeploylessMulticall3.sol。
|
|
393
398
|
*/
|
|
394
399
|
async function callDeployless(ctx, requests, overrides, atLeast) {
|
|
395
|
-
const
|
|
396
|
-
|
|
397
|
-
|
|
400
|
+
const until = deploylessUnsupported.get(ctx.chainId);
|
|
401
|
+
if (until !== undefined) {
|
|
402
|
+
if (Date.now() < until) {
|
|
403
|
+
return callPlain(ctx, requests, overrides, atLeast);
|
|
404
|
+
}
|
|
405
|
+
deploylessUnsupported.delete(ctx.chainId);
|
|
406
|
+
}
|
|
407
|
+
try {
|
|
408
|
+
const chunks = splitByInitcodeSize(requests);
|
|
409
|
+
const results = await Promise.all(chunks.map((chunk) => callDeploylessChunk(ctx, chunk, overrides, atLeast)));
|
|
410
|
+
invalidStrikes.delete(deploylessKey(ctx.chainId));
|
|
411
|
+
return results.flat();
|
|
412
|
+
}
|
|
413
|
+
catch (err) {
|
|
414
|
+
const verdict = deploylessVerdict(err);
|
|
415
|
+
if (verdict === null) {
|
|
416
|
+
throw err;
|
|
417
|
+
}
|
|
418
|
+
// 空数据 / 无法解码:这条链(或这个节点)不支持合约创建式 eth_call。这一次改成逐条 eth_call;
|
|
419
|
+
// 多个节点一致、或单节点连续 2 次才记住(节点偶发返回一次空数据不算)
|
|
420
|
+
// 只看最新状态:历史区块查询返回空数据可能只是节点裁剪了状态,不能据此判定这条链不支持
|
|
421
|
+
if (isLatest(overrides.blockTag)) {
|
|
422
|
+
const key = deploylessKey(ctx.chainId);
|
|
423
|
+
const strikes = (invalidStrikes.get(key) ?? 0) + 1;
|
|
424
|
+
if (verdict === 'confirmed' || strikes >= 2) {
|
|
425
|
+
deploylessUnsupported.set(ctx.chainId, Date.now() + UNUSABLE_TTL);
|
|
426
|
+
invalidStrikes.delete(key);
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
invalidStrikes.set(key, strikes);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
return callPlain(ctx, requests, overrides, atLeast);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
const deploylessKey = (chainId) => `deployless:${chainId}`;
|
|
436
|
+
/** deployless 的失败是不是“不支持”:InvalidResultError;经 FallbackRpc 时是所有节点都这样(2 个以上为 'confirmed') */
|
|
437
|
+
function deploylessVerdict(err) {
|
|
438
|
+
if (err instanceof InvalidResultError) {
|
|
439
|
+
return 'maybe';
|
|
440
|
+
}
|
|
441
|
+
if (err instanceof AllNodesFailedError && err.errors.length > 0 && err.errors.every((e) => e.error instanceof InvalidResultError)) {
|
|
442
|
+
return err.errors.length >= 2 ? 'confirmed' : 'maybe';
|
|
443
|
+
}
|
|
444
|
+
return null;
|
|
445
|
+
}
|
|
446
|
+
/** 逐条 eth_call 的并发上限(公共节点常对 batch 大小和并发限频) */
|
|
447
|
+
const PLAIN_CONCURRENCY = 50;
|
|
448
|
+
/**
|
|
449
|
+
* 最后的兜底:每条请求单独 eth_call(主币余额用 eth_getBalance),不需要链上有合约、也不要求节点支持合约创建。
|
|
450
|
+
* 同时最多 PLAIN_CONCURRENCY 条在途,JsonRpcProvider / FallbackRpc 会把同一时刻的请求合到 HTTP batch 里。
|
|
451
|
+
* 区块号查询:blockTag 是数字(或 earliest)时就是它,最新状态时用 getBlockNumber 并把所有读取固定在这个区块上
|
|
452
|
+
* (minBlock 时先校验再读,保证各条一致);finalized / safe 这类标签没法换算成区块号,带区块号查询时报错
|
|
453
|
+
*/
|
|
454
|
+
async function callPlain(ctx, requests, overrides, atLeast) {
|
|
455
|
+
const { provider } = ctx;
|
|
456
|
+
let blockTag = overrides.blockTag;
|
|
457
|
+
let block = null;
|
|
458
|
+
if (atLeast !== undefined || requests.some((req) => req.blockNumber)) {
|
|
459
|
+
if (isLatest(blockTag)) {
|
|
460
|
+
if (!provider.getBlockNumber) {
|
|
461
|
+
throw new Error('This chain does not support deployless calls and the provider has no getBlockNumber(): block number queries (minBlock / withBlock) are unavailable');
|
|
462
|
+
}
|
|
463
|
+
block = BigInt(await provider.getBlockNumber());
|
|
464
|
+
if (atLeast !== undefined) {
|
|
465
|
+
assertBlock(block, atLeast);
|
|
466
|
+
}
|
|
467
|
+
blockTag = Number(block);
|
|
468
|
+
}
|
|
469
|
+
else if (blockTag === 'earliest') {
|
|
470
|
+
block = 0n;
|
|
471
|
+
}
|
|
472
|
+
else if (typeof blockTag === 'number' || typeof blockTag === 'bigint' || (typeof blockTag === 'string' && /^0x[0-9a-f]+$/i.test(blockTag))) {
|
|
473
|
+
block = BigInt(blockTag);
|
|
474
|
+
}
|
|
475
|
+
else {
|
|
476
|
+
throw new Error(`Block number queries are not supported with blockTag '${String(blockTag)}' on a chain without deployless calls; pass a block number`);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
const results = new Array(requests.length);
|
|
480
|
+
let next = 0;
|
|
481
|
+
const worker = async () => {
|
|
482
|
+
for (let i = next++; i < requests.length; i = next++) {
|
|
483
|
+
const req = requests[i];
|
|
484
|
+
if (req.blockNumber && block !== null) {
|
|
485
|
+
results[i] = { success: true, returnData: encodeUint256(block) };
|
|
486
|
+
}
|
|
487
|
+
else if (req.ethBalanceOf !== undefined) {
|
|
488
|
+
results[i] = { success: true, returnData: encodeUint256(await provider.getBalance(req.ethBalanceOf, blockTag)) };
|
|
489
|
+
}
|
|
490
|
+
else {
|
|
491
|
+
try {
|
|
492
|
+
results[i] = { success: true, returnData: await provider.call({ to: req.target, data: req.callData, blockTag, from: overrides.from }) };
|
|
493
|
+
}
|
|
494
|
+
catch (err) {
|
|
495
|
+
// 合约自己 revert 才算这一条失败(allowFailure 为 false 时和 Multicall3 一样整批失败);限频、超时等节点错误照常抛出
|
|
496
|
+
if (req.allowFailure && isExecutionError(err)) {
|
|
497
|
+
results[i] = { success: false, returnData: err.data ?? '0x' };
|
|
498
|
+
}
|
|
499
|
+
else {
|
|
500
|
+
throw err;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
};
|
|
506
|
+
await Promise.all(Array.from({ length: Math.min(PLAIN_CONCURRENCY, requests.length) }, worker));
|
|
507
|
+
return results;
|
|
398
508
|
}
|
|
399
509
|
async function callDeploylessChunk(ctx, requests, overrides, atLeast) {
|
|
400
510
|
// minBlock:每片都附带区块号查询并各自校验——只校验带区块号的那一片的话,其他片可能来自落后节点、混进旧数据
|
|
@@ -497,5 +607,6 @@ function cacheKey(chainId, address) {
|
|
|
497
607
|
export function resetMulticallCache() {
|
|
498
608
|
unusableMulticalls.clear();
|
|
499
609
|
invalidStrikes.clear();
|
|
610
|
+
deploylessUnsupported.clear();
|
|
500
611
|
}
|
|
501
612
|
//# sourceMappingURL=aggregate.js.map
|
package/dist/aggregate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../src/aggregate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../src/aggregate.ts"],"names":[],"mappings":"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"}
|