@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.
Files changed (110) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +161 -2
  3. package/contracts/TokenProbe.sol +103 -0
  4. package/dist/aggregate.d.ts.map +1 -1
  5. package/dist/aggregate.js +114 -3
  6. package/dist/aggregate.js.map +1 -1
  7. package/dist/approvals.d.ts +169 -0
  8. package/dist/approvals.d.ts.map +1 -0
  9. package/dist/approvals.js +310 -0
  10. package/dist/approvals.js.map +1 -0
  11. package/dist/chains.d.ts.map +1 -1
  12. package/dist/chains.js +4 -0
  13. package/dist/chains.js.map +1 -1
  14. package/dist/fees.d.ts +97 -0
  15. package/dist/fees.d.ts.map +1 -0
  16. package/dist/fees.js +115 -0
  17. package/dist/fees.js.map +1 -0
  18. package/dist/http.d.ts +10 -0
  19. package/dist/http.d.ts.map +1 -0
  20. package/dist/http.js +30 -0
  21. package/dist/http.js.map +1 -0
  22. package/dist/lp.d.ts +2 -1
  23. package/dist/lp.d.ts.map +1 -1
  24. package/dist/lp.js +2 -1
  25. package/dist/lp.js.map +1 -1
  26. package/dist/multicall.d.ts.map +1 -1
  27. package/dist/multicall.js +3 -0
  28. package/dist/multicall.js.map +1 -1
  29. package/dist/names.d.ts +55 -0
  30. package/dist/names.d.ts.map +1 -0
  31. package/dist/names.js +93 -0
  32. package/dist/names.js.map +1 -0
  33. package/dist/owner.d.ts +4 -26
  34. package/dist/owner.d.ts.map +1 -1
  35. package/dist/owner.js +7 -112
  36. package/dist/owner.js.map +1 -1
  37. package/dist/portfolio.d.ts +54 -0
  38. package/dist/portfolio.d.ts.map +1 -0
  39. package/dist/portfolio.js +49 -0
  40. package/dist/portfolio.js.map +1 -0
  41. package/dist/price.d.ts +95 -0
  42. package/dist/price.d.ts.map +1 -0
  43. package/dist/price.js +329 -0
  44. package/dist/price.js.map +1 -0
  45. package/dist/risk.d.ts +42 -0
  46. package/dist/risk.d.ts.map +1 -0
  47. package/dist/risk.js +134 -0
  48. package/dist/risk.js.map +1 -0
  49. package/dist/rpcNodes.d.ts.map +1 -1
  50. package/dist/rpcNodes.js +18 -0
  51. package/dist/rpcNodes.js.map +1 -1
  52. package/dist/subpaths/approvals.d.ts +26 -0
  53. package/dist/subpaths/approvals.d.ts.map +1 -0
  54. package/dist/subpaths/approvals.js +27 -0
  55. package/dist/subpaths/approvals.js.map +1 -0
  56. package/dist/subpaths/fees.d.ts +23 -0
  57. package/dist/subpaths/fees.d.ts.map +1 -0
  58. package/dist/subpaths/fees.js +25 -0
  59. package/dist/subpaths/fees.js.map +1 -0
  60. package/dist/subpaths/names.d.ts +35 -0
  61. package/dist/subpaths/names.d.ts.map +1 -0
  62. package/dist/subpaths/names.js +39 -0
  63. package/dist/subpaths/names.js.map +1 -0
  64. package/dist/subpaths/price.d.ts +38 -0
  65. package/dist/subpaths/price.d.ts.map +1 -0
  66. package/dist/subpaths/price.js +40 -0
  67. package/dist/subpaths/price.js.map +1 -0
  68. package/dist/subpaths/risk.d.ts +19 -0
  69. package/dist/subpaths/risk.d.ts.map +1 -0
  70. package/dist/subpaths/risk.js +20 -0
  71. package/dist/subpaths/risk.js.map +1 -0
  72. package/dist/subpaths/swap.d.ts +19 -0
  73. package/dist/subpaths/swap.d.ts.map +1 -0
  74. package/dist/subpaths/swap.js +20 -0
  75. package/dist/subpaths/swap.js.map +1 -0
  76. package/dist/swap.d.ts +128 -0
  77. package/dist/swap.d.ts.map +1 -0
  78. package/dist/swap.js +291 -0
  79. package/dist/swap.js.map +1 -0
  80. package/dist/tokenProbe.d.ts +3 -0
  81. package/dist/tokenProbe.d.ts.map +1 -0
  82. package/dist/tokenProbe.js +4 -0
  83. package/dist/tokenProbe.js.map +1 -0
  84. package/dist/write/tron.d.ts +25 -0
  85. package/dist/write/tron.d.ts.map +1 -1
  86. package/dist/write/tron.js +26 -0
  87. package/dist/write/tron.js.map +1 -1
  88. package/package.json +39 -16
  89. package/src/aggregate.ts +110 -3
  90. package/src/approvals.ts +462 -0
  91. package/src/chains.ts +4 -0
  92. package/src/fees.ts +201 -0
  93. package/src/http.ts +34 -0
  94. package/src/lp.ts +3 -1
  95. package/src/multicall.ts +3 -0
  96. package/src/names.ts +141 -0
  97. package/src/owner.ts +7 -138
  98. package/src/portfolio.ts +91 -0
  99. package/src/price.ts +415 -0
  100. package/src/risk.ts +166 -0
  101. package/src/rpcNodes.ts +18 -0
  102. package/src/subpaths/approvals.ts +48 -0
  103. package/src/subpaths/fees.ts +43 -0
  104. package/src/subpaths/names.ts +43 -0
  105. package/src/subpaths/price.ts +60 -0
  106. package/src/subpaths/risk.ts +23 -0
  107. package/src/subpaths/swap.ts +36 -0
  108. package/src/swap.ts +413 -0
  109. package/src/tokenProbe.ts +5 -0
  110. package/src/write/tron.ts +43 -0
package/src/write/tron.ts CHANGED
@@ -744,6 +744,49 @@ function canonical(address: string): string {
744
744
  return toTronAddress(toEvmAddress(address))
745
745
  }
746
746
 
747
+ /** 一笔交易的手续费估算(子路径 /fees 的 estimateCost 在 Tron 上用) */
748
+ export interface TronCostEstimate {
749
+ /** 合约调用消耗的能量(模拟得到);转 TRX 为 0 */
750
+ energy: number
751
+ /** 交易的字节数(带宽) */
752
+ bandwidth: number
753
+ /** 账户剩余的能量 / 带宽不够时要烧的 TRX(sun) */
754
+ energyBurn: bigint
755
+ bandwidthBurn: bigint
756
+ /** 转 TRX 给没激活的地址:激活费(含创建账户的带宽),算在 bandwidthBurn 里 */
757
+ activates: boolean
758
+ /** 每单位能量、每字节带宽的价格(sun) */
759
+ energyPrice: bigint
760
+ bandwidthPrice: bigint
761
+ }
762
+
763
+ /**
764
+ * 估算一笔交易要烧多少 TRX:合约调用模拟出能量,按发送者剩余的质押能量 / 免费和质押带宽抵扣,不够的部分按链参数的价格烧 TRX。
765
+ * 能量按模拟值(不加余量),实际执行可能略有出入
766
+ */
767
+ export async function tronEstimateCost(provider: Provider, call: { from: string; to: string; data?: string; value?: bigint }): Promise<TronCostEstimate> {
768
+ const rpc = await tronRpc(provider, {})
769
+ const from = canonical(call.from)
770
+ const to = canonical(call.to)
771
+ const value = call.value ?? 0n
772
+ const data = call.data && call.data !== '0x' ? call.data : null
773
+ const [params, resources, isContract] = await Promise.all([rpc.params(), rpc.resources(from), data ? Promise.resolve(true) : rpc.isContract(to)])
774
+ const contract: TronContract = isContract ? { type: 'trigger', owner: from, contract: to, data: data ?? '0x', callValue: value } : { type: 'transfer', owner: from, to, amount: value }
775
+ const energy = contract.type === 'trigger' ? await rpc.simulate(contract) : 0
776
+ const feeLimit = contract.type === 'trigger' ? BigInt(Math.ceil(energy * 1.5)) * params.energyFee || 1_000_000n : 0n
777
+ const bytes = transactionBytes(contract, feeLimit)
778
+ const activates = contract.type === 'transfer' && !(await rpc.accountExists(to))
779
+ return {
780
+ energy,
781
+ bandwidth: bytes,
782
+ energyBurn: BigInt(Math.max(0, energy - resources.energy)) * params.energyFee,
783
+ bandwidthBurn: contract.type === 'transfer' ? transferBurn(resources, bytes, params, activates) : bandwidthBurn(resources, bytes, params.bandwidthFee),
784
+ activates,
785
+ energyPrice: params.energyFee,
786
+ bandwidthPrice: params.bandwidthFee,
787
+ }
788
+ }
789
+
747
790
  /** 转 TRX:普通地址用 TransferContract;合约地址用合约调用(空 calldata 带 call_value,主网禁止 TransferContract 转给合约) */
748
791
  async function trxContract(rpc: TronRpc, owner: string, to: string, amount: bigint): Promise<TronContract> {
749
792
  return (await rpc.isContract(to)) ? { type: 'trigger', owner, contract: to, data: '0x', callValue: amount } : { type: 'transfer', owner, to, amount }