crypto-aio 0.0.3 → 0.1.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 (691) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +144 -14
  3. package/dist/adapters/avalanche/address.d.ts +15 -0
  4. package/dist/adapters/avalanche/address.js +74 -0
  5. package/dist/adapters/avalanche/address.js.map +1 -0
  6. package/dist/adapters/avalanche/api.d.ts +100 -0
  7. package/dist/adapters/avalanche/api.js +381 -0
  8. package/dist/adapters/avalanche/api.js.map +1 -0
  9. package/dist/adapters/avalanche/builder.d.ts +13 -0
  10. package/dist/adapters/avalanche/builder.js +336 -0
  11. package/dist/adapters/avalanche/builder.js.map +1 -0
  12. package/dist/adapters/avalanche/cb58.d.ts +7 -0
  13. package/dist/adapters/avalanche/cb58.js +49 -0
  14. package/dist/adapters/avalanche/cb58.js.map +1 -0
  15. package/dist/adapters/avalanche/chains.d.ts +21 -0
  16. package/dist/adapters/avalanche/chains.js +79 -0
  17. package/dist/adapters/avalanche/chains.js.map +1 -0
  18. package/dist/adapters/avalanche/codec.d.ts +94 -0
  19. package/dist/adapters/avalanche/codec.js +371 -0
  20. package/dist/adapters/avalanche/codec.js.map +1 -0
  21. package/dist/adapters/avalanche/context.d.ts +59 -0
  22. package/dist/adapters/avalanche/context.js +114 -0
  23. package/dist/adapters/avalanche/context.js.map +1 -0
  24. package/dist/adapters/avalanche/decode.d.ts +16 -0
  25. package/dist/adapters/avalanche/decode.js +101 -0
  26. package/dist/adapters/avalanche/decode.js.map +1 -0
  27. package/dist/adapters/avalanche/driver.d.ts +22 -0
  28. package/dist/adapters/avalanche/driver.js +81 -0
  29. package/dist/adapters/avalanche/driver.js.map +1 -0
  30. package/dist/adapters/avalanche/errors.d.ts +18 -0
  31. package/dist/adapters/avalanche/errors.js +61 -0
  32. package/dist/adapters/avalanche/errors.js.map +1 -0
  33. package/dist/adapters/avalanche/fees.d.ts +23 -0
  34. package/dist/adapters/avalanche/fees.js +105 -0
  35. package/dist/adapters/avalanche/fees.js.map +1 -0
  36. package/dist/adapters/avalanche/index.d.ts +19 -0
  37. package/dist/adapters/avalanche/index.js +8 -0
  38. package/dist/adapters/avalanche/index.js.map +1 -0
  39. package/dist/adapters/avalanche/network.d.ts +37 -0
  40. package/dist/adapters/avalanche/network.js +135 -0
  41. package/dist/adapters/avalanche/network.js.map +1 -0
  42. package/dist/adapters/avalanche/plugin.d.ts +21 -0
  43. package/dist/adapters/avalanche/plugin.js +46 -0
  44. package/dist/adapters/avalanche/plugin.js.map +1 -0
  45. package/dist/adapters/avalanche/presets.d.ts +6 -0
  46. package/dist/adapters/avalanche/presets.js +86 -0
  47. package/dist/adapters/avalanche/presets.js.map +1 -0
  48. package/dist/adapters/avalanche/proofs.d.ts +41 -0
  49. package/dist/adapters/avalanche/proofs.js +270 -0
  50. package/dist/adapters/avalanche/proofs.js.map +1 -0
  51. package/dist/adapters/avalanche/reader.d.ts +40 -0
  52. package/dist/adapters/avalanche/reader.js +231 -0
  53. package/dist/adapters/avalanche/reader.js.map +1 -0
  54. package/dist/adapters/avalanche/sdk.d.ts +182 -0
  55. package/dist/adapters/avalanche/sdk.js +21 -0
  56. package/dist/adapters/avalanche/sdk.js.map +1 -0
  57. package/dist/adapters/avalanche/types.d.ts +86 -0
  58. package/dist/{type/common.js → adapters/avalanche/types.js} +1 -1
  59. package/dist/adapters/avalanche/types.js.map +1 -0
  60. package/dist/adapters/evm/builder.d.ts +11 -0
  61. package/dist/adapters/evm/builder.js +326 -0
  62. package/dist/adapters/evm/builder.js.map +1 -0
  63. package/dist/adapters/evm/chains.d.ts +6 -0
  64. package/dist/adapters/evm/chains.js +203 -0
  65. package/dist/adapters/evm/chains.js.map +1 -0
  66. package/dist/adapters/evm/client.d.ts +84 -0
  67. package/dist/adapters/evm/client.js +335 -0
  68. package/dist/adapters/evm/client.js.map +1 -0
  69. package/dist/adapters/evm/decode.d.ts +35 -0
  70. package/dist/adapters/evm/decode.js +170 -0
  71. package/dist/adapters/evm/decode.js.map +1 -0
  72. package/dist/adapters/evm/driver.d.ts +8 -0
  73. package/dist/adapters/evm/driver.js +61 -0
  74. package/dist/adapters/evm/driver.js.map +1 -0
  75. package/dist/adapters/evm/errors.d.ts +20 -0
  76. package/dist/adapters/evm/errors.js +110 -0
  77. package/dist/adapters/evm/errors.js.map +1 -0
  78. package/dist/adapters/evm/ethers-client.d.ts +43 -0
  79. package/dist/adapters/evm/ethers-client.js +135 -0
  80. package/dist/adapters/evm/ethers-client.js.map +1 -0
  81. package/dist/adapters/evm/fees.d.ts +79 -0
  82. package/dist/adapters/evm/fees.js +234 -0
  83. package/dist/adapters/evm/fees.js.map +1 -0
  84. package/dist/adapters/evm/index.d.ts +20 -0
  85. package/dist/adapters/evm/index.js +11 -0
  86. package/dist/adapters/evm/index.js.map +1 -0
  87. package/dist/adapters/evm/network.d.ts +60 -0
  88. package/dist/adapters/evm/network.js +131 -0
  89. package/dist/adapters/evm/network.js.map +1 -0
  90. package/dist/adapters/evm/plugin.d.ts +36 -0
  91. package/dist/adapters/evm/plugin.js +102 -0
  92. package/dist/adapters/evm/plugin.js.map +1 -0
  93. package/dist/adapters/evm/presets.d.ts +2 -0
  94. package/dist/adapters/evm/presets.js +105 -0
  95. package/dist/adapters/evm/presets.js.map +1 -0
  96. package/dist/adapters/evm/proofs.d.ts +19 -0
  97. package/dist/adapters/evm/proofs.js +358 -0
  98. package/dist/adapters/evm/proofs.js.map +1 -0
  99. package/dist/adapters/evm/rawtx.d.ts +25 -0
  100. package/dist/adapters/evm/rawtx.js +176 -0
  101. package/dist/adapters/evm/rawtx.js.map +1 -0
  102. package/dist/adapters/evm/reader.d.ts +65 -0
  103. package/dist/adapters/evm/reader.js +292 -0
  104. package/dist/adapters/evm/reader.js.map +1 -0
  105. package/dist/adapters/evm/rpc.d.ts +39 -0
  106. package/dist/adapters/evm/rpc.js +152 -0
  107. package/dist/adapters/evm/rpc.js.map +1 -0
  108. package/dist/adapters/evm/tokens.d.ts +7 -0
  109. package/dist/adapters/evm/tokens.js +23 -0
  110. package/dist/adapters/evm/tokens.js.map +1 -0
  111. package/dist/adapters/evm/types.d.ts +255 -0
  112. package/dist/{type/account.js → adapters/evm/types.js} +1 -1
  113. package/dist/adapters/evm/types.js.map +1 -0
  114. package/dist/adapters/evm/web3-client.d.ts +23 -0
  115. package/dist/adapters/evm/web3-client.js +159 -0
  116. package/dist/adapters/evm/web3-client.js.map +1 -0
  117. package/dist/adapters/solana/builder.d.ts +18 -0
  118. package/dist/adapters/solana/builder.js +545 -0
  119. package/dist/adapters/solana/builder.js.map +1 -0
  120. package/dist/adapters/solana/chains.d.ts +13 -0
  121. package/dist/adapters/solana/chains.js +37 -0
  122. package/dist/adapters/solana/chains.js.map +1 -0
  123. package/dist/adapters/solana/decode.d.ts +111 -0
  124. package/dist/adapters/solana/decode.js +595 -0
  125. package/dist/adapters/solana/decode.js.map +1 -0
  126. package/dist/adapters/solana/driver.d.ts +15 -0
  127. package/dist/adapters/solana/driver.js +72 -0
  128. package/dist/adapters/solana/driver.js.map +1 -0
  129. package/dist/adapters/solana/errors.d.ts +36 -0
  130. package/dist/adapters/solana/errors.js +154 -0
  131. package/dist/adapters/solana/errors.js.map +1 -0
  132. package/dist/adapters/solana/fees.d.ts +68 -0
  133. package/dist/adapters/solana/fees.js +205 -0
  134. package/dist/adapters/solana/fees.js.map +1 -0
  135. package/dist/adapters/solana/heights.d.ts +47 -0
  136. package/dist/adapters/solana/heights.js +185 -0
  137. package/dist/adapters/solana/heights.js.map +1 -0
  138. package/dist/adapters/solana/history.d.ts +10 -0
  139. package/dist/adapters/solana/history.js +71 -0
  140. package/dist/adapters/solana/history.js.map +1 -0
  141. package/dist/adapters/solana/index.d.ts +16 -0
  142. package/dist/adapters/solana/index.js +9 -0
  143. package/dist/adapters/solana/index.js.map +1 -0
  144. package/dist/adapters/solana/keys.d.ts +13 -0
  145. package/dist/adapters/solana/keys.js +69 -0
  146. package/dist/adapters/solana/keys.js.map +1 -0
  147. package/dist/adapters/solana/network.d.ts +24 -0
  148. package/dist/adapters/solana/network.js +95 -0
  149. package/dist/adapters/solana/network.js.map +1 -0
  150. package/dist/adapters/solana/plugin.d.ts +18 -0
  151. package/dist/adapters/solana/plugin.js +41 -0
  152. package/dist/adapters/solana/plugin.js.map +1 -0
  153. package/dist/adapters/solana/presets.d.ts +2 -0
  154. package/dist/adapters/solana/presets.js +77 -0
  155. package/dist/adapters/solana/presets.js.map +1 -0
  156. package/dist/adapters/solana/programs.d.ts +44 -0
  157. package/dist/adapters/solana/programs.js +159 -0
  158. package/dist/adapters/solana/programs.js.map +1 -0
  159. package/dist/adapters/solana/proofs.d.ts +56 -0
  160. package/dist/adapters/solana/proofs.js +540 -0
  161. package/dist/adapters/solana/proofs.js.map +1 -0
  162. package/dist/adapters/solana/reader.d.ts +82 -0
  163. package/dist/adapters/solana/reader.js +326 -0
  164. package/dist/adapters/solana/reader.js.map +1 -0
  165. package/dist/adapters/solana/rpc.d.ts +102 -0
  166. package/dist/adapters/solana/rpc.js +301 -0
  167. package/dist/adapters/solana/rpc.js.map +1 -0
  168. package/dist/adapters/solana/tokens.d.ts +7 -0
  169. package/dist/adapters/solana/tokens.js +19 -0
  170. package/dist/adapters/solana/tokens.js.map +1 -0
  171. package/dist/adapters/solana/types.d.ts +121 -0
  172. package/dist/{type/contract.js → adapters/solana/types.js} +1 -1
  173. package/dist/adapters/solana/types.js.map +1 -0
  174. package/dist/adapters/solana/web3.d.ts +5 -0
  175. package/dist/adapters/solana/web3.js +83 -0
  176. package/dist/adapters/solana/web3.js.map +1 -0
  177. package/dist/adapters/solana/wire.d.ts +62 -0
  178. package/dist/adapters/solana/wire.js +168 -0
  179. package/dist/adapters/solana/wire.js.map +1 -0
  180. package/dist/adapters/ton/address.d.ts +43 -0
  181. package/dist/adapters/ton/address.js +168 -0
  182. package/dist/adapters/ton/address.js.map +1 -0
  183. package/dist/adapters/ton/api.d.ts +344 -0
  184. package/dist/adapters/ton/api.js +942 -0
  185. package/dist/adapters/ton/api.js.map +1 -0
  186. package/dist/adapters/ton/builder.d.ts +18 -0
  187. package/dist/adapters/ton/builder.js +701 -0
  188. package/dist/adapters/ton/builder.js.map +1 -0
  189. package/dist/adapters/ton/chains.d.ts +16 -0
  190. package/dist/adapters/ton/chains.js +39 -0
  191. package/dist/adapters/ton/chains.js.map +1 -0
  192. package/dist/adapters/ton/decode.d.ts +43 -0
  193. package/dist/adapters/ton/decode.js +219 -0
  194. package/dist/adapters/ton/decode.js.map +1 -0
  195. package/dist/adapters/ton/driver.d.ts +10 -0
  196. package/dist/adapters/ton/driver.js +117 -0
  197. package/dist/adapters/ton/driver.js.map +1 -0
  198. package/dist/adapters/ton/errors.d.ts +36 -0
  199. package/dist/adapters/ton/errors.js +89 -0
  200. package/dist/adapters/ton/errors.js.map +1 -0
  201. package/dist/adapters/ton/fees.d.ts +28 -0
  202. package/dist/adapters/ton/fees.js +121 -0
  203. package/dist/adapters/ton/fees.js.map +1 -0
  204. package/dist/adapters/ton/index.d.ts +16 -0
  205. package/dist/adapters/ton/index.js +9 -0
  206. package/dist/adapters/ton/index.js.map +1 -0
  207. package/dist/adapters/ton/messages.d.ts +157 -0
  208. package/dist/adapters/ton/messages.js +397 -0
  209. package/dist/adapters/ton/messages.js.map +1 -0
  210. package/dist/adapters/ton/native-client.d.ts +10 -0
  211. package/dist/adapters/ton/native-client.js +47 -0
  212. package/dist/adapters/ton/native-client.js.map +1 -0
  213. package/dist/adapters/ton/network.d.ts +58 -0
  214. package/dist/adapters/ton/network.js +207 -0
  215. package/dist/adapters/ton/network.js.map +1 -0
  216. package/dist/adapters/ton/plugin.d.ts +24 -0
  217. package/dist/adapters/ton/plugin.js +57 -0
  218. package/dist/adapters/ton/plugin.js.map +1 -0
  219. package/dist/adapters/ton/presets.d.ts +6 -0
  220. package/dist/adapters/ton/presets.js +94 -0
  221. package/dist/adapters/ton/presets.js.map +1 -0
  222. package/dist/adapters/ton/proofs.d.ts +66 -0
  223. package/dist/adapters/ton/proofs.js +813 -0
  224. package/dist/adapters/ton/proofs.js.map +1 -0
  225. package/dist/adapters/ton/reader.d.ts +194 -0
  226. package/dist/adapters/ton/reader.js +781 -0
  227. package/dist/adapters/ton/reader.js.map +1 -0
  228. package/dist/adapters/ton/tokens.d.ts +10 -0
  229. package/dist/adapters/ton/tokens.js +27 -0
  230. package/dist/adapters/ton/tokens.js.map +1 -0
  231. package/dist/adapters/ton/trace.d.ts +48 -0
  232. package/dist/adapters/ton/trace.js +277 -0
  233. package/dist/adapters/ton/trace.js.map +1 -0
  234. package/dist/adapters/ton/types.d.ts +105 -0
  235. package/dist/{type/transact.js → adapters/ton/types.js} +1 -1
  236. package/dist/adapters/ton/types.js.map +1 -0
  237. package/dist/adapters/ton/wallets.d.ts +86 -0
  238. package/dist/adapters/ton/wallets.js +373 -0
  239. package/dist/adapters/ton/wallets.js.map +1 -0
  240. package/dist/adapters/tron/abi.d.ts +39 -0
  241. package/dist/adapters/tron/abi.js +110 -0
  242. package/dist/adapters/tron/abi.js.map +1 -0
  243. package/dist/adapters/tron/address.d.ts +20 -0
  244. package/dist/adapters/tron/address.js +110 -0
  245. package/dist/adapters/tron/address.js.map +1 -0
  246. package/dist/adapters/tron/builder.d.ts +12 -0
  247. package/dist/adapters/tron/builder.js +553 -0
  248. package/dist/adapters/tron/builder.js.map +1 -0
  249. package/dist/adapters/tron/chains.d.ts +12 -0
  250. package/dist/adapters/tron/chains.js +35 -0
  251. package/dist/adapters/tron/chains.js.map +1 -0
  252. package/dist/adapters/tron/codec.d.ts +10 -0
  253. package/dist/adapters/tron/codec.js +322 -0
  254. package/dist/adapters/tron/codec.js.map +1 -0
  255. package/dist/adapters/tron/decode.d.ts +50 -0
  256. package/dist/adapters/tron/decode.js +280 -0
  257. package/dist/adapters/tron/decode.js.map +1 -0
  258. package/dist/adapters/tron/driver.d.ts +12 -0
  259. package/dist/adapters/tron/driver.js +106 -0
  260. package/dist/adapters/tron/driver.js.map +1 -0
  261. package/dist/adapters/tron/errors.d.ts +74 -0
  262. package/dist/adapters/tron/errors.js +261 -0
  263. package/dist/adapters/tron/errors.js.map +1 -0
  264. package/dist/adapters/tron/fees.d.ts +49 -0
  265. package/dist/adapters/tron/fees.js +166 -0
  266. package/dist/adapters/tron/fees.js.map +1 -0
  267. package/dist/adapters/tron/http.d.ts +173 -0
  268. package/dist/adapters/tron/http.js +729 -0
  269. package/dist/adapters/tron/http.js.map +1 -0
  270. package/dist/adapters/tron/index.d.ts +16 -0
  271. package/dist/adapters/tron/index.js +15 -0
  272. package/dist/adapters/tron/index.js.map +1 -0
  273. package/dist/adapters/tron/network.d.ts +44 -0
  274. package/dist/adapters/tron/network.js +163 -0
  275. package/dist/adapters/tron/network.js.map +1 -0
  276. package/dist/adapters/tron/plugin.d.ts +17 -0
  277. package/dist/adapters/tron/plugin.js +39 -0
  278. package/dist/adapters/tron/plugin.js.map +1 -0
  279. package/dist/adapters/tron/presets.d.ts +5 -0
  280. package/dist/adapters/tron/presets.js +68 -0
  281. package/dist/adapters/tron/presets.js.map +1 -0
  282. package/dist/adapters/tron/proofs.d.ts +80 -0
  283. package/dist/adapters/tron/proofs.js +370 -0
  284. package/dist/adapters/tron/proofs.js.map +1 -0
  285. package/dist/adapters/tron/protobuf.d.ts +36 -0
  286. package/dist/adapters/tron/protobuf.js +90 -0
  287. package/dist/adapters/tron/protobuf.js.map +1 -0
  288. package/dist/adapters/tron/reader.d.ts +47 -0
  289. package/dist/adapters/tron/reader.js +203 -0
  290. package/dist/adapters/tron/reader.js.map +1 -0
  291. package/dist/adapters/tron/tokens.d.ts +7 -0
  292. package/dist/adapters/tron/tokens.js +14 -0
  293. package/dist/adapters/tron/tokens.js.map +1 -0
  294. package/dist/adapters/tron/types.d.ts +166 -0
  295. package/dist/adapters/tron/types.js +3 -0
  296. package/dist/adapters/tron/types.js.map +1 -0
  297. package/dist/adapters/utxo/address.d.ts +51 -0
  298. package/dist/adapters/utxo/address.js +341 -0
  299. package/dist/adapters/utxo/address.js.map +1 -0
  300. package/dist/adapters/utxo/builder.d.ts +35 -0
  301. package/dist/adapters/utxo/builder.js +380 -0
  302. package/dist/adapters/utxo/builder.js.map +1 -0
  303. package/dist/adapters/utxo/chains.d.ts +17 -0
  304. package/dist/adapters/utxo/chains.js +99 -0
  305. package/dist/adapters/utxo/chains.js.map +1 -0
  306. package/dist/adapters/utxo/codec.d.ts +120 -0
  307. package/dist/adapters/utxo/codec.js +408 -0
  308. package/dist/adapters/utxo/codec.js.map +1 -0
  309. package/dist/adapters/utxo/coinselect.d.ts +48 -0
  310. package/dist/adapters/utxo/coinselect.js +131 -0
  311. package/dist/adapters/utxo/coinselect.js.map +1 -0
  312. package/dist/adapters/utxo/context.d.ts +57 -0
  313. package/dist/adapters/utxo/context.js +118 -0
  314. package/dist/adapters/utxo/context.js.map +1 -0
  315. package/dist/adapters/utxo/decode.d.ts +14 -0
  316. package/dist/adapters/utxo/decode.js +85 -0
  317. package/dist/adapters/utxo/decode.js.map +1 -0
  318. package/dist/adapters/utxo/driver.d.ts +16 -0
  319. package/dist/adapters/utxo/driver.js +74 -0
  320. package/dist/adapters/utxo/driver.js.map +1 -0
  321. package/dist/adapters/utxo/ecc.d.ts +9 -0
  322. package/dist/adapters/utxo/ecc.js +26 -0
  323. package/dist/adapters/utxo/ecc.js.map +1 -0
  324. package/dist/adapters/utxo/errors.d.ts +52 -0
  325. package/dist/adapters/utxo/errors.js +191 -0
  326. package/dist/adapters/utxo/errors.js.map +1 -0
  327. package/dist/adapters/utxo/esplora.d.ts +79 -0
  328. package/dist/adapters/utxo/esplora.js +451 -0
  329. package/dist/adapters/utxo/esplora.js.map +1 -0
  330. package/dist/adapters/utxo/fees.d.ts +41 -0
  331. package/dist/adapters/utxo/fees.js +125 -0
  332. package/dist/adapters/utxo/fees.js.map +1 -0
  333. package/dist/adapters/utxo/index.d.ts +17 -0
  334. package/dist/adapters/utxo/index.js +8 -0
  335. package/dist/adapters/utxo/index.js.map +1 -0
  336. package/dist/adapters/utxo/network.d.ts +50 -0
  337. package/dist/adapters/utxo/network.js +165 -0
  338. package/dist/adapters/utxo/network.js.map +1 -0
  339. package/dist/adapters/utxo/plugin.d.ts +17 -0
  340. package/dist/adapters/utxo/plugin.js +41 -0
  341. package/dist/adapters/utxo/plugin.js.map +1 -0
  342. package/dist/adapters/utxo/presets.d.ts +12 -0
  343. package/dist/adapters/utxo/presets.js +47 -0
  344. package/dist/adapters/utxo/presets.js.map +1 -0
  345. package/dist/adapters/utxo/preview.d.ts +3 -0
  346. package/dist/adapters/utxo/preview.js +65 -0
  347. package/dist/adapters/utxo/preview.js.map +1 -0
  348. package/dist/adapters/utxo/proofs.d.ts +57 -0
  349. package/dist/adapters/utxo/proofs.js +331 -0
  350. package/dist/adapters/utxo/proofs.js.map +1 -0
  351. package/dist/adapters/utxo/rawtx.d.ts +59 -0
  352. package/dist/adapters/utxo/rawtx.js +234 -0
  353. package/dist/adapters/utxo/rawtx.js.map +1 -0
  354. package/dist/adapters/utxo/reader.d.ts +36 -0
  355. package/dist/adapters/utxo/reader.js +265 -0
  356. package/dist/adapters/utxo/reader.js.map +1 -0
  357. package/dist/adapters/utxo/sdk.d.ts +18 -0
  358. package/dist/adapters/utxo/sdk.js +17 -0
  359. package/dist/adapters/utxo/sdk.js.map +1 -0
  360. package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
  361. package/dist/adapters/utxo/signed-psbt.js +428 -0
  362. package/dist/adapters/utxo/signed-psbt.js.map +1 -0
  363. package/dist/adapters/utxo/spend.d.ts +59 -0
  364. package/dist/adapters/utxo/spend.js +230 -0
  365. package/dist/adapters/utxo/spend.js.map +1 -0
  366. package/dist/adapters/utxo/types.d.ts +167 -0
  367. package/dist/adapters/utxo/types.js +3 -0
  368. package/dist/adapters/utxo/types.js.map +1 -0
  369. package/dist/core/assets/service.d.ts +18 -0
  370. package/dist/core/assets/service.js +69 -0
  371. package/dist/core/assets/service.js.map +1 -0
  372. package/dist/core/blockchain/default-ref.d.ts +4 -0
  373. package/dist/core/blockchain/default-ref.js +16 -0
  374. package/dist/core/blockchain/default-ref.js.map +1 -0
  375. package/dist/core/blockchain/handle.d.ts +200 -0
  376. package/dist/core/blockchain/handle.js +579 -0
  377. package/dist/core/blockchain/handle.js.map +1 -0
  378. package/dist/core/blockchain/internal.d.ts +19 -0
  379. package/dist/core/blockchain/internal.js +16 -0
  380. package/dist/core/blockchain/internal.js.map +1 -0
  381. package/dist/core/blockchain/mapping.d.ts +22 -0
  382. package/dist/core/blockchain/mapping.js +136 -0
  383. package/dist/core/blockchain/mapping.js.map +1 -0
  384. package/dist/core/config/env.d.ts +8 -0
  385. package/dist/core/config/env.js +60 -0
  386. package/dist/core/config/env.js.map +1 -0
  387. package/dist/core/config/merge.d.ts +26 -0
  388. package/dist/core/config/merge.js +144 -0
  389. package/dist/core/config/merge.js.map +1 -0
  390. package/dist/core/config/resolve.d.ts +12 -0
  391. package/dist/core/config/resolve.js +251 -0
  392. package/dist/core/config/resolve.js.map +1 -0
  393. package/dist/core/config/types.d.ts +165 -0
  394. package/dist/core/config/types.js +3 -0
  395. package/dist/core/config/types.js.map +1 -0
  396. package/dist/core/container/builtins.d.ts +4 -0
  397. package/dist/core/container/builtins.js +13 -0
  398. package/dist/core/container/builtins.js.map +1 -0
  399. package/dist/core/container/container.d.ts +69 -0
  400. package/dist/core/container/container.js +466 -0
  401. package/dist/core/container/container.js.map +1 -0
  402. package/dist/core/container/default.d.ts +15 -0
  403. package/dist/core/container/default.js +70 -0
  404. package/dist/core/container/default.js.map +1 -0
  405. package/dist/core/container/internals.d.ts +54 -0
  406. package/dist/core/container/internals.js +21 -0
  407. package/dist/core/container/internals.js.map +1 -0
  408. package/dist/core/container/pool.d.ts +27 -0
  409. package/dist/core/container/pool.js +77 -0
  410. package/dist/core/container/pool.js.map +1 -0
  411. package/dist/core/driver/types.d.ts +346 -0
  412. package/dist/core/driver/types.js +3 -0
  413. package/dist/core/driver/types.js.map +1 -0
  414. package/dist/core/errors/codes.d.ts +153 -0
  415. package/dist/core/errors/codes.js +49 -0
  416. package/dist/core/errors/codes.js.map +1 -0
  417. package/dist/core/errors/error.d.ts +66 -0
  418. package/dist/core/errors/error.js +129 -0
  419. package/dist/core/errors/error.js.map +1 -0
  420. package/dist/core/events/bus.d.ts +12 -0
  421. package/dist/core/events/bus.js +46 -0
  422. package/dist/core/events/bus.js.map +1 -0
  423. package/dist/core/events/logger.d.ts +13 -0
  424. package/dist/core/events/logger.js +42 -0
  425. package/dist/core/events/logger.js.map +1 -0
  426. package/dist/core/events/types.d.ts +131 -0
  427. package/dist/core/events/types.js +3 -0
  428. package/dist/core/events/types.js.map +1 -0
  429. package/dist/core/lifecycle/engine-rules.d.ts +107 -0
  430. package/dist/core/lifecycle/engine-rules.js +257 -0
  431. package/dist/core/lifecycle/engine-rules.js.map +1 -0
  432. package/dist/core/lifecycle/engine.d.ts +500 -0
  433. package/dist/core/lifecycle/engine.js +1732 -0
  434. package/dist/core/lifecycle/engine.js.map +1 -0
  435. package/dist/core/lifecycle/evaluate.d.ts +19 -0
  436. package/dist/core/lifecycle/evaluate.js +72 -0
  437. package/dist/core/lifecycle/evaluate.js.map +1 -0
  438. package/dist/core/lifecycle/intent.d.ts +11 -0
  439. package/dist/core/lifecycle/intent.js +88 -0
  440. package/dist/core/lifecycle/intent.js.map +1 -0
  441. package/dist/core/lifecycle/monitor.d.ts +138 -0
  442. package/dist/core/lifecycle/monitor.js +606 -0
  443. package/dist/core/lifecycle/monitor.js.map +1 -0
  444. package/dist/core/lifecycle/observations.d.ts +17 -0
  445. package/dist/core/lifecycle/observations.js +59 -0
  446. package/dist/core/lifecycle/observations.js.map +1 -0
  447. package/dist/core/lifecycle/reconcile.d.ts +58 -0
  448. package/dist/core/lifecycle/reconcile.js +112 -0
  449. package/dist/core/lifecycle/reconcile.js.map +1 -0
  450. package/dist/core/lifecycle/views.d.ts +49 -0
  451. package/dist/core/lifecycle/views.js +57 -0
  452. package/dist/core/lifecycle/views.js.map +1 -0
  453. package/dist/core/lifecycle/workers.d.ts +82 -0
  454. package/dist/core/lifecycle/workers.js +329 -0
  455. package/dist/core/lifecycle/workers.js.map +1 -0
  456. package/dist/core/model/address.d.ts +32 -0
  457. package/dist/core/model/address.js +43 -0
  458. package/dist/core/model/address.js.map +1 -0
  459. package/dist/core/model/amount.d.ts +25 -0
  460. package/dist/core/model/amount.js +102 -0
  461. package/dist/core/model/amount.js.map +1 -0
  462. package/dist/core/model/asset.d.ts +28 -0
  463. package/dist/core/model/asset.js +47 -0
  464. package/dist/core/model/asset.js.map +1 -0
  465. package/dist/core/model/capability.d.ts +3 -0
  466. package/dist/core/model/capability.js +18 -0
  467. package/dist/core/model/capability.js.map +1 -0
  468. package/dist/core/model/chain.d.ts +63 -0
  469. package/dist/core/model/chain.js +8 -0
  470. package/dist/core/model/chain.js.map +1 -0
  471. package/dist/core/model/fee.d.ts +36 -0
  472. package/dist/core/model/fee.js +17 -0
  473. package/dist/core/model/fee.js.map +1 -0
  474. package/dist/core/model/ids.d.ts +37 -0
  475. package/dist/core/model/ids.js +13 -0
  476. package/dist/core/model/ids.js.map +1 -0
  477. package/dist/core/model/intent.d.ts +63 -0
  478. package/dist/core/model/intent.js +81 -0
  479. package/dist/core/model/intent.js.map +1 -0
  480. package/dist/core/model/ordering.d.ts +20 -0
  481. package/dist/core/model/ordering.js +29 -0
  482. package/dist/core/model/ordering.js.map +1 -0
  483. package/dist/core/model/transaction.d.ts +116 -0
  484. package/dist/{type/lib-types.js → core/model/transaction.js} +1 -1
  485. package/dist/core/model/transaction.js.map +1 -0
  486. package/dist/core/observe/scanner.d.ts +135 -0
  487. package/dist/core/observe/scanner.js +355 -0
  488. package/dist/core/observe/scanner.js.map +1 -0
  489. package/dist/core/ordering/reservations.d.ts +16 -0
  490. package/dist/core/ordering/reservations.js +53 -0
  491. package/dist/core/ordering/reservations.js.map +1 -0
  492. package/dist/core/ordering/sequence.d.ts +61 -0
  493. package/dist/core/ordering/sequence.js +155 -0
  494. package/dist/core/ordering/sequence.js.map +1 -0
  495. package/dist/core/registry/adapters.d.ts +10 -0
  496. package/dist/core/registry/adapters.js +56 -0
  497. package/dist/core/registry/adapters.js.map +1 -0
  498. package/dist/core/registry/assets.d.ts +18 -0
  499. package/dist/core/registry/assets.js +90 -0
  500. package/dist/core/registry/assets.js.map +1 -0
  501. package/dist/core/registry/chains.d.ts +10 -0
  502. package/dist/core/registry/chains.js +80 -0
  503. package/dist/core/registry/chains.js.map +1 -0
  504. package/dist/core/registry/plugin.d.ts +41 -0
  505. package/dist/core/registry/plugin.js +109 -0
  506. package/dist/core/registry/plugin.js.map +1 -0
  507. package/dist/core/registry/providers.d.ts +31 -0
  508. package/dist/core/registry/providers.js +43 -0
  509. package/dist/core/registry/providers.js.map +1 -0
  510. package/dist/core/registry/schemes.d.ts +30 -0
  511. package/dist/core/registry/schemes.js +84 -0
  512. package/dist/core/registry/schemes.js.map +1 -0
  513. package/dist/core/secret/fragments.d.ts +33 -0
  514. package/dist/core/secret/fragments.js +110 -0
  515. package/dist/core/secret/fragments.js.map +1 -0
  516. package/dist/core/secret/redact.d.ts +10 -0
  517. package/dist/core/secret/redact.js +110 -0
  518. package/dist/core/secret/redact.js.map +1 -0
  519. package/dist/core/secret/secret.d.ts +14 -0
  520. package/dist/core/secret/secret.js +42 -0
  521. package/dist/core/secret/secret.js.map +1 -0
  522. package/dist/core/signing/callback.d.ts +10 -0
  523. package/dist/core/signing/callback.js +22 -0
  524. package/dist/core/signing/callback.js.map +1 -0
  525. package/dist/core/signing/guard.d.ts +18 -0
  526. package/dist/core/signing/guard.js +72 -0
  527. package/dist/core/signing/guard.js.map +1 -0
  528. package/dist/core/signing/hd.d.ts +36 -0
  529. package/dist/core/signing/hd.js +167 -0
  530. package/dist/core/signing/hd.js.map +1 -0
  531. package/dist/core/signing/local.d.ts +48 -0
  532. package/dist/core/signing/local.js +190 -0
  533. package/dist/core/signing/local.js.map +1 -0
  534. package/dist/core/signing/orchestrator.d.ts +40 -0
  535. package/dist/core/signing/orchestrator.js +300 -0
  536. package/dist/core/signing/orchestrator.js.map +1 -0
  537. package/dist/core/signing/types.d.ts +64 -0
  538. package/dist/core/signing/types.js +3 -0
  539. package/dist/core/signing/types.js.map +1 -0
  540. package/dist/core/signing/wallet.d.ts +48 -0
  541. package/dist/core/signing/wallet.js +153 -0
  542. package/dist/core/signing/wallet.js.map +1 -0
  543. package/dist/core/store/clone.d.ts +25 -0
  544. package/dist/core/store/clone.js +71 -0
  545. package/dist/core/store/clone.js.map +1 -0
  546. package/dist/core/store/memory.d.ts +38 -0
  547. package/dist/core/store/memory.js +325 -0
  548. package/dist/core/store/memory.js.map +1 -0
  549. package/dist/core/store/types.d.ts +246 -0
  550. package/dist/core/store/types.js +117 -0
  551. package/dist/core/store/types.js.map +1 -0
  552. package/dist/core/transport/backoff.d.ts +8 -0
  553. package/dist/core/transport/backoff.js +27 -0
  554. package/dist/core/transport/backoff.js.map +1 -0
  555. package/dist/core/transport/circuit.d.ts +25 -0
  556. package/dist/core/transport/circuit.js +61 -0
  557. package/dist/core/transport/circuit.js.map +1 -0
  558. package/dist/core/transport/http-transport.d.ts +30 -0
  559. package/dist/core/transport/http-transport.js +1695 -0
  560. package/dist/core/transport/http-transport.js.map +1 -0
  561. package/dist/core/transport/rate-limit.d.ts +27 -0
  562. package/dist/core/transport/rate-limit.js +78 -0
  563. package/dist/core/transport/rate-limit.js.map +1 -0
  564. package/dist/core/transport/stale-view.d.ts +11 -0
  565. package/dist/core/transport/stale-view.js +17 -0
  566. package/dist/core/transport/stale-view.js.map +1 -0
  567. package/dist/core/transport/types.d.ts +144 -0
  568. package/dist/core/transport/types.js +6 -0
  569. package/dist/core/transport/types.js.map +1 -0
  570. package/dist/core/util/bytes.d.ts +9 -0
  571. package/dist/core/util/bytes.js +40 -0
  572. package/dist/core/util/bytes.js.map +1 -0
  573. package/dist/core/util/clock.d.ts +6 -0
  574. package/dist/core/util/clock.js +26 -0
  575. package/dist/core/util/clock.js.map +1 -0
  576. package/dist/core/util/freeze.d.ts +8 -0
  577. package/dist/core/util/freeze.js +31 -0
  578. package/dist/core/util/freeze.js.map +1 -0
  579. package/dist/core/util/json.d.ts +29 -0
  580. package/dist/core/util/json.js +165 -0
  581. package/dist/core/util/json.js.map +1 -0
  582. package/dist/core/util/names.d.ts +21 -0
  583. package/dist/core/util/names.js +46 -0
  584. package/dist/core/util/names.js.map +1 -0
  585. package/dist/index.d.ts +64 -14
  586. package/dist/index.js +105 -49
  587. package/dist/index.js.map +1 -1
  588. package/dist/native.d.ts +21 -0
  589. package/dist/native.js +44 -0
  590. package/dist/native.js.map +1 -0
  591. package/dist/testing/contracts/api.d.ts +12 -0
  592. package/dist/testing/contracts/api.js +58 -0
  593. package/dist/testing/contracts/api.js.map +1 -0
  594. package/dist/testing/contracts/cursors.d.ts +6 -0
  595. package/dist/testing/contracts/cursors.js +43 -0
  596. package/dist/testing/contracts/cursors.js.map +1 -0
  597. package/dist/testing/contracts/locks.d.ts +10 -0
  598. package/dist/testing/contracts/locks.js +63 -0
  599. package/dist/testing/contracts/locks.js.map +1 -0
  600. package/dist/testing/contracts/operations.d.ts +21 -0
  601. package/dist/testing/contracts/operations.js +718 -0
  602. package/dist/testing/contracts/operations.js.map +1 -0
  603. package/dist/testing/contracts/sequences.d.ts +6 -0
  604. package/dist/testing/contracts/sequences.js +68 -0
  605. package/dist/testing/contracts/sequences.js.map +1 -0
  606. package/dist/testing/env.d.ts +63 -0
  607. package/dist/testing/env.js +105 -0
  608. package/dist/testing/env.js.map +1 -0
  609. package/dist/testing/fake-chain.d.ts +118 -0
  610. package/dist/testing/fake-chain.js +536 -0
  611. package/dist/testing/fake-chain.js.map +1 -0
  612. package/dist/testing/fake-clock.d.ts +15 -0
  613. package/dist/testing/fake-clock.js +86 -0
  614. package/dist/testing/fake-clock.js.map +1 -0
  615. package/dist/testing/fake-driver.d.ts +15 -0
  616. package/dist/testing/fake-driver.js +458 -0
  617. package/dist/testing/fake-driver.js.map +1 -0
  618. package/dist/testing/fake-fetch.d.ts +32 -0
  619. package/dist/testing/fake-fetch.js +81 -0
  620. package/dist/testing/fake-fetch.js.map +1 -0
  621. package/dist/testing/fake-plugin.d.ts +30 -0
  622. package/dist/testing/fake-plugin.js +66 -0
  623. package/dist/testing/fake-plugin.js.map +1 -0
  624. package/dist/testing/faulty-store.d.ts +36 -0
  625. package/dist/testing/faulty-store.js +66 -0
  626. package/dist/testing/faulty-store.js.map +1 -0
  627. package/dist/testing/generation.d.ts +60 -0
  628. package/dist/testing/generation.js +252 -0
  629. package/dist/testing/generation.js.map +1 -0
  630. package/dist/testing/index.d.ts +28 -0
  631. package/dist/testing/index.js +51 -0
  632. package/dist/testing/index.js.map +1 -0
  633. package/package.json +188 -45
  634. package/dist/libs/eth/account.d.ts +0 -9
  635. package/dist/libs/eth/account.js +0 -58
  636. package/dist/libs/eth/account.js.map +0 -1
  637. package/dist/libs/eth/contract.d.ts +0 -7
  638. package/dist/libs/eth/contract.js +0 -42
  639. package/dist/libs/eth/contract.js.map +0 -1
  640. package/dist/libs/eth/index.d.ts +0 -24
  641. package/dist/libs/eth/index.js +0 -72
  642. package/dist/libs/eth/index.js.map +0 -1
  643. package/dist/libs/eth/transact.d.ts +0 -7
  644. package/dist/libs/eth/transact.js +0 -26
  645. package/dist/libs/eth/transact.js.map +0 -1
  646. package/dist/libs/index.d.ts +0 -2
  647. package/dist/libs/index.js +0 -19
  648. package/dist/libs/index.js.map +0 -1
  649. package/dist/libs/trx/account.d.ts +0 -9
  650. package/dist/libs/trx/account.js +0 -55
  651. package/dist/libs/trx/account.js.map +0 -1
  652. package/dist/libs/trx/contract.d.ts +0 -7
  653. package/dist/libs/trx/contract.js +0 -27
  654. package/dist/libs/trx/contract.js.map +0 -1
  655. package/dist/libs/trx/index.d.ts +0 -22
  656. package/dist/libs/trx/index.js +0 -64
  657. package/dist/libs/trx/index.js.map +0 -1
  658. package/dist/libs/trx/transact.d.ts +0 -7
  659. package/dist/libs/trx/transact.js +0 -26
  660. package/dist/libs/trx/transact.js.map +0 -1
  661. package/dist/tool/common.d.ts +0 -28
  662. package/dist/tool/common.js +0 -33
  663. package/dist/tool/common.js.map +0 -1
  664. package/dist/tool/eth-tools.d.ts +0 -3
  665. package/dist/tool/eth-tools.js +0 -33
  666. package/dist/tool/eth-tools.js.map +0 -1
  667. package/dist/tool/index.d.ts +0 -5
  668. package/dist/tool/index.js +0 -22
  669. package/dist/tool/index.js.map +0 -1
  670. package/dist/tool/logging.d.ts +0 -3
  671. package/dist/tool/logging.js +0 -11
  672. package/dist/tool/logging.js.map +0 -1
  673. package/dist/tool/options.d.ts +0 -6
  674. package/dist/tool/options.js +0 -41
  675. package/dist/tool/options.js.map +0 -1
  676. package/dist/tool/trx-tools.d.ts +0 -3
  677. package/dist/tool/trx-tools.js +0 -20
  678. package/dist/tool/trx-tools.js.map +0 -1
  679. package/dist/type/account.d.ts +0 -9
  680. package/dist/type/account.js.map +0 -1
  681. package/dist/type/common.d.ts +0 -18
  682. package/dist/type/common.js.map +0 -1
  683. package/dist/type/contract.d.ts +0 -10
  684. package/dist/type/contract.js.map +0 -1
  685. package/dist/type/index.d.ts +0 -5
  686. package/dist/type/index.js +0 -22
  687. package/dist/type/index.js.map +0 -1
  688. package/dist/type/lib-types.d.ts +0 -9
  689. package/dist/type/lib-types.js.map +0 -1
  690. package/dist/type/transact.d.ts +0 -7
  691. package/dist/type/transact.js.map +0 -1
@@ -0,0 +1,729 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TronApi = exports.quorumKeyFor = exports.withSignal = exports.BROADCAST = exports.PROOF = exports.MONITOR = exports.READ = void 0;
4
+ exports.malformed = malformed;
5
+ exports.notServable = notServable;
6
+ exports.messageText = messageText;
7
+ exports.historyPage = historyPage;
8
+ /**
9
+ * The driver's only path to the network: one direct transport call per
10
+ * request, carrying the purpose, retry class, quorum, fanout and signal of the driver
11
+ * method that made it. No SDK sits on a request path. Answers are validated here: a
12
+ * malformed answer is a retryable `ProviderError('PROVIDER_UNAVAILABLE')`, never a foreign
13
+ * error, and a node `Error` answer is a retryable `RPC_ERROR` that repeats no node text.
14
+ * On a proof path every refusal decides nothing; on a broadcast, an answer
15
+ * that cannot be read leaves the transaction possibly sent.
16
+ */
17
+ const sha256_1 = require("@noble/hashes/sha256");
18
+ const error_1 = require("../../core/errors/error");
19
+ const bytes_1 = require("../../core/util/bytes");
20
+ exports.READ = { purpose: 'read', retry: 'safe' };
21
+ exports.MONITOR = { purpose: 'monitor', retry: 'safe' };
22
+ exports.PROOF = { purpose: 'proof', retry: 'safe', quorum: 'proof' };
23
+ exports.BROADCAST = {
24
+ purpose: 'broadcast',
25
+ retry: 'ambiguous-on-failure',
26
+ };
27
+ /** Adds the caller's signal to a tag set. */
28
+ const withSignal = (tags, signal) => signal ? { ...tags, signal } : tags;
29
+ exports.withSignal = withSignal;
30
+ function malformed(field) {
31
+ return new error_1.ProviderError('PROVIDER_UNAVAILABLE', `malformed ${field} in a Tron answer`);
32
+ }
33
+ /**
34
+ * The node indexed a transaction it cannot serve whole yet (its receipt, the transaction or
35
+ * its block): neither "not seen" nor a verdict. Retryable; the core keeps its current view.
36
+ */
37
+ function notServable() {
38
+ return new error_1.ProviderError('PROVIDER_UNAVAILABLE', 'the node indexed a transaction it cannot serve yet');
39
+ }
40
+ /** A broadcast answer that cannot be read: the node may hold the transaction. */
41
+ function unreadableAfterSend(field) {
42
+ return new error_1.ProviderError('PROVIDER_UNAVAILABLE', `malformed ${field} in a Tron answer`, {
43
+ ambiguous: true,
44
+ });
45
+ }
46
+ const isObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
47
+ function object(value, field) {
48
+ if (!isObject(value))
49
+ throw malformed(field);
50
+ return value;
51
+ }
52
+ /**
53
+ * A non-negative JSON integer: a bigint under `exactIntegers` when it is outside the
54
+ * safe range, else a safe number. Amounts are never rounded.
55
+ */
56
+ function uint(value, field) {
57
+ if (typeof value === 'bigint' && value >= 0n)
58
+ return value;
59
+ if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {
60
+ return BigInt(value);
61
+ }
62
+ throw malformed(field);
63
+ }
64
+ /** Like `uint`, but an absent value is 0 (proto3 JSON omits zero fields). */
65
+ const uintOr0 = (value, field) => value === undefined ? 0n : uint(value, field);
66
+ /** java-tron's `long`: block heights above it are malformed. */
67
+ const INT64_MAX = 2n ** 63n - 1n;
68
+ /** A block height: a non-negative int64. */
69
+ function height(value, field) {
70
+ const n = uint(value, field);
71
+ if (n > INT64_MAX)
72
+ throw malformed(field);
73
+ return n;
74
+ }
75
+ /**
76
+ * An integer written into a request body as an exact JSON literal (`JSON.rawJSON`, Node ≥ 22):
77
+ * java-tron reads int64 fields from number literals, and `Number()` would round above 2^53.
78
+ */
79
+ const exactInteger = (value) => JSON.rawJSON(value.toString());
80
+ /** A block time in milliseconds: a safe non-negative integer, never rounded. */
81
+ function millis(value, field) {
82
+ const ms = uint(value, field);
83
+ if (ms > BigInt(Number.MAX_SAFE_INTEGER))
84
+ throw malformed(field);
85
+ return Number(ms);
86
+ }
87
+ function hex(value, field, bytes) {
88
+ if (typeof value !== 'string' || !/^(?:[0-9a-fA-F]{2})*$/.test(value)) {
89
+ throw malformed(field);
90
+ }
91
+ if (bytes !== undefined && value.length !== bytes * 2)
92
+ throw malformed(field);
93
+ return value.toLowerCase();
94
+ }
95
+ const isEmpty = (value) => isObject(value) && Object.keys(value).length === 0;
96
+ /**
97
+ * java-tron refuses a transaction above `TRANSACTION_MAX_BYTE_SIZE` (500 KiB), so
98
+ * longer raw bytes are malformed and never hashed or decoded.
99
+ */
100
+ const MAX_RAW_HEX = 2 * 500 * 1024;
101
+ // ---- consensus keys (quorum) ------------------------------------------------------------
102
+ const lower = (value) => typeof value === 'string'
103
+ ? value.toLowerCase()
104
+ : Array.isArray(value)
105
+ ? value.map(lower)
106
+ : value;
107
+ /**
108
+ * java-tron's HTTP 200 failure (`{ "Error": … }`) or a JSON-RPC error, keyed as a flag: it
109
+ * never agrees with a real or an empty answer, and its text is never compared.
110
+ */
111
+ const ERROR_KEY = { error: true };
112
+ /** java-tron's "not found" (`{}`); a non-empty answer without the facts never matches it. */
113
+ const ABSENT_KEY = { absent: true };
114
+ const isErrorAnswer = (result) => isObject(result) && (result.Error !== undefined || result.error !== undefined);
115
+ /** A REST key: an error answer is the error flag, `{}` is absent, else the `facts`. */
116
+ const restKey = (facts) => (result) => {
117
+ if (!isObject(result))
118
+ return result;
119
+ if (isErrorAnswer(result))
120
+ return ERROR_KEY;
121
+ if (Object.keys(result).length === 0)
122
+ return ABSENT_KEY;
123
+ return facts(result);
124
+ };
125
+ const headerKey = restKey((answer) => {
126
+ const header = isObject(answer.block_header) ? answer.block_header : undefined;
127
+ const raw = header && isObject(header.raw_data) ? header.raw_data : undefined;
128
+ return {
129
+ id: lower(answer.blockID ?? null),
130
+ // proto3 JSON omits genesis's number and timestamp: absent and 0 are one fact.
131
+ number: raw ? (raw.number ?? 0) : null,
132
+ parent: lower(raw?.parentHash ?? null),
133
+ timestamp: raw ? (raw.timestamp ?? 0) : null,
134
+ };
135
+ });
136
+ /**
137
+ * A proven verdict reads the receipt result and the `Transfer` logs, so the
138
+ * key covers them; hex case and fields nodes format differently do not count.
139
+ */
140
+ const infoKey = restKey((answer) => {
141
+ const receipt = isObject(answer.receipt) ? answer.receipt : {};
142
+ const logs = Array.isArray(answer.log) ? answer.log : [];
143
+ return {
144
+ id: lower(answer.id ?? null),
145
+ block: answer.blockNumber ?? null,
146
+ // A proof binds the receipt to its block by this time, so it is attested.
147
+ time: answer.blockTimeStamp ?? null,
148
+ result: answer.result ?? null,
149
+ receipt: receipt.result ?? null,
150
+ logs: logs.map((log) => isObject(log)
151
+ ? { a: lower(log.address), t: lower(log.topics), d: lower(log.data) }
152
+ : log),
153
+ };
154
+ });
155
+ const transactionKey = restKey((answer) => {
156
+ const ret = Array.isArray(answer.ret) && isObject(answer.ret[0]) ? answer.ret[0] : {};
157
+ return {
158
+ id: lower(answer.txID ?? null),
159
+ raw: lower(answer.raw_data_hex ?? null),
160
+ ret: ret.contractRet ?? null,
161
+ };
162
+ });
163
+ /** java-tron's answer for an address that holds no contract: its code and exact text. */
164
+ function isNoContract(outcome) {
165
+ return (outcome.result !== true &&
166
+ outcome.code === 'CONTRACT_VALIDATE_ERROR' &&
167
+ messageText(outcome.message) === 'Smart contract is not exist.');
168
+ }
169
+ /**
170
+ * A constant call's verdict, and nothing else. Each node builds the simulated
171
+ * transaction on its own head (reference block, expiration, txID) and meters energy on its
172
+ * own state, so honest nodes never agree on the whole answer. The key compares the outcome
173
+ * (ran, no contract, or any other refusal: one value whose code and text are never
174
+ * compared), whether the VM failed (`ret`), and what the call returned.
175
+ */
176
+ const constantCallKey = restKey((answer) => {
177
+ const outcome = isObject(answer.result) ? answer.result : {};
178
+ const tx = isObject(answer.transaction) ? answer.transaction : {};
179
+ const ret = Array.isArray(tx.ret) && isObject(tx.ret[0]) ? tx.ret[0].ret : undefined;
180
+ return {
181
+ outcome: outcome.result === true ? 'ok' : isNoContract(outcome) ? 'no-contract' : 'refused',
182
+ ret: ret ?? null,
183
+ out: lower(answer.constant_result ?? null),
184
+ };
185
+ });
186
+ /** Whether a contract is there, and which: `{}` (none) keys as absent (`restKey`). */
187
+ const contractKey = restKey((answer) => ({
188
+ contract: lower(answer.contract_address ?? null),
189
+ }));
190
+ function rpcBlockKey(result) {
191
+ if (!isObject(result))
192
+ return result;
193
+ // An envelope without a result is an error, whatever else it holds.
194
+ if (isErrorAnswer(result) || !Object.hasOwn(result, 'result'))
195
+ return ERROR_KEY;
196
+ const block = result.result;
197
+ if (!isObject(block))
198
+ return block ?? null;
199
+ // The negative scan stops on `timestamp`, so it is compared too: one lying endpoint
200
+ // cannot end the scan early with an old time.
201
+ return {
202
+ number: lower(block.number ?? null),
203
+ hash: lower(block.hash ?? null),
204
+ parent: lower(block.parentHash ?? null),
205
+ timestamp: lower(block.timestamp ?? null),
206
+ transactions: lower(block.transactions ?? null),
207
+ };
208
+ }
209
+ const QUORUM_KEYS = {
210
+ '/wallet/getblock': headerKey,
211
+ '/walletsolidity/getblock': headerKey,
212
+ '/walletsolidity/gettransactioninfobyid': infoKey,
213
+ '/wallet/gettransactioninfobyid': infoKey,
214
+ '/walletsolidity/gettransactionbyid': transactionKey,
215
+ '/wallet/gettransactionbyid': transactionKey,
216
+ '/wallet/triggerconstantcontract': constantCallKey,
217
+ '/wallet/getcontract': contractKey,
218
+ '/jsonrpc': rpcBlockKey,
219
+ };
220
+ /** The consensus facts compared under a quorum for `path`, if it has any. */
221
+ const quorumKeyFor = (path) => Object.hasOwn(QUORUM_KEYS, path) ? QUORUM_KEYS[path] : undefined;
222
+ exports.quorumKeyFor = quorumKeyFor;
223
+ /** A caller's key never makes an error answer agree with a real one. */
224
+ const guarded = (key) => (result) => isErrorAnswer(result) ? ERROR_KEY : key(result);
225
+ /**
226
+ * One tagged transport call with exact integers. Under a quorum the caller's
227
+ * `quorumKey` (a monotone predicate) replaces `fallback`; a key never travels
228
+ * without a quorum.
229
+ *
230
+ * On a proof path a definitive refusal decides nothing, so it becomes a retryable
231
+ * `PROVIDER_UNAVAILABLE`: a REST 4xx the quorum agreed on, and a 401 or 403 too. The
232
+ * transport reports both as `PROVIDER_MISCONFIGURED` with no structured status, and TronGrid
233
+ * answers a rate-limit suspension with 403 ("Rate-limited requests usually return 429 or 403
234
+ * and should be retried with backoff", developers.tron.network/reference/rate-limits, read
235
+ * 2026-09-27), so a proof cannot tell a bad key from a pause. A bad key still surfaces as
236
+ * `PROVIDER_MISCONFIGURED` through the plain reads (monitor, read), which pass it unchanged:
237
+ * on every endpoint when every key is bad; with one bad endpoint among several, a proof retries
238
+ * until its breaker opens, and then the core reports the quorum unreachable. A caller's
239
+ * abort is never converted. Other purposes see the transport's error unchanged.
240
+ */
241
+ async function call(transport, request, tags, fallback) {
242
+ const { quorumKey: own, ...rest } = tags;
243
+ const quorumKey = rest.quorum === undefined ? undefined : own ? guarded(own) : fallback;
244
+ const options = {
245
+ ...rest,
246
+ exactIntegers: true,
247
+ ...(quorumKey ? { quorumKey } : {}),
248
+ };
249
+ try {
250
+ return await transport.http(request, options);
251
+ }
252
+ catch (error) {
253
+ if (tags.purpose === 'proof' &&
254
+ !tags.signal?.aborted &&
255
+ error instanceof error_1.ProviderError &&
256
+ !error.retryable) {
257
+ throw new error_1.ProviderError('PROVIDER_UNAVAILABLE', 'a proof read was refused, which decides nothing', { cause: error, context: error.context, retryable: true });
258
+ }
259
+ throw error;
260
+ }
261
+ }
262
+ /** The chain parameters the driver reads: its fees, and one TransferContract rule. */
263
+ const FEE_PARAMETERS = new Set([
264
+ 'getTransactionFee',
265
+ 'getEnergyFee',
266
+ 'getCreateAccountFee',
267
+ 'getCreateNewAccountFeeInSystemContract',
268
+ 'getCreateNewAccountBandwidthRate',
269
+ 'getMemoFee',
270
+ 'getMaxFeeLimit',
271
+ 'getForbidTransferToContract',
272
+ ]);
273
+ function parseHeader(value) {
274
+ if (isEmpty(value))
275
+ return null;
276
+ const block = object(value, 'block');
277
+ const raw = object(object(block.block_header, 'block header').raw_data, 'block header');
278
+ // proto3 JSON omits zero fields: genesis has neither number nor timestamp.
279
+ return {
280
+ number: height(raw.number ?? 0, 'block number'),
281
+ id: hex(block.blockID, 'block id', 32),
282
+ parentId: hex(raw.parentHash, 'parent hash', 32),
283
+ timestamp: millis(raw.timestamp ?? 0, 'block timestamp'),
284
+ };
285
+ }
286
+ function parseTransaction(value) {
287
+ const tx = object(value, 'transaction');
288
+ const ret = Array.isArray(tx.ret) && isObject(tx.ret[0]) ? tx.ret[0].contractRet : undefined;
289
+ if (ret !== undefined && typeof ret !== 'string')
290
+ throw malformed('contractRet');
291
+ const id = hex(tx.txID, 'txID', 32);
292
+ if (typeof tx.raw_data_hex === 'string' && tx.raw_data_hex.length > MAX_RAW_HEX) {
293
+ throw malformed('raw_data_hex');
294
+ }
295
+ const rawHex = hex(tx.raw_data_hex, 'raw_data_hex');
296
+ // The id is the SHA-256 of the raw bytes: an answer that does not bind them is malformed.
297
+ if ((0, bytes_1.toHex)((0, sha256_1.sha256)((0, bytes_1.fromHex)(rawHex))) !== id)
298
+ throw malformed('raw_data_hex');
299
+ return {
300
+ id,
301
+ rawHex,
302
+ ...(ret !== undefined ? { contractRet: ret } : {}),
303
+ };
304
+ }
305
+ function parseInfo(value) {
306
+ const info = object(value, 'transaction info');
307
+ const receipt = info.receipt === undefined ? {} : object(info.receipt, 'receipt');
308
+ const logs = info.log === undefined ? [] : info.log;
309
+ if (!Array.isArray(logs))
310
+ throw malformed('log');
311
+ const receiptResult = receipt.result;
312
+ if (receiptResult !== undefined && typeof receiptResult !== 'string') {
313
+ throw malformed('receipt result');
314
+ }
315
+ if (info.result !== undefined && info.result !== 'FAILED')
316
+ throw malformed('result');
317
+ return {
318
+ id: hex(info.id, 'transaction id', 32),
319
+ blockNumber: height(info.blockNumber, 'block number'),
320
+ blockTimestamp: millis(info.blockTimeStamp, 'block timestamp'),
321
+ fee: uintOr0(info.fee, 'fee'),
322
+ ...(receiptResult !== undefined ? { receiptResult } : {}),
323
+ failed: info.result === 'FAILED',
324
+ logs: logs.map((entry) => {
325
+ const log = object(entry, 'log');
326
+ if (!Array.isArray(log.topics))
327
+ throw malformed('log topics');
328
+ return {
329
+ address: hex(log.address, 'log address', 20),
330
+ topics: log.topics.map((t) => hex(t, 'log topic', 32)),
331
+ data: log.data === undefined ? '' : hex(log.data, 'log data'),
332
+ };
333
+ }),
334
+ };
335
+ }
336
+ /** The longest node message kept, in characters: java-tron's texts are far shorter. */
337
+ const MAX_MESSAGE = 1024;
338
+ /**
339
+ * A node's message field: hex-encoded UTF-8 on some paths, plain text on others. At most
340
+ * the first 1 KiB is kept, decoded when the whole field is printable hex.
341
+ */
342
+ function messageText(value) {
343
+ if (typeof value !== 'string')
344
+ return undefined;
345
+ if (/^(?:[0-9a-fA-F]{2})+$/.test(value)) {
346
+ const text = (0, bytes_1.bytesToUtf8)((0, bytes_1.fromHex)(value.slice(0, 2 * MAX_MESSAGE)));
347
+ if (/^[\x20-\x7e]+$/.test(text))
348
+ return text;
349
+ }
350
+ return value.slice(0, MAX_MESSAGE);
351
+ }
352
+ /** A JSON-RPC 32-byte hash, lower-case without `0x`. */
353
+ function rpcHash(value, field) {
354
+ if (typeof value !== 'string' || !/^0x[0-9a-fA-F]{64}$/.test(value)) {
355
+ throw malformed(field);
356
+ }
357
+ return value.slice(2).toLowerCase();
358
+ }
359
+ /** A JSON-RPC quantity of at most 64 bits (bounded before conversion). */
360
+ function rpcQuantity(value, field) {
361
+ if (typeof value !== 'string' || !/^0x[0-9a-fA-F]{1,16}$/.test(value)) {
362
+ throw malformed(field);
363
+ }
364
+ return BigInt(value);
365
+ }
366
+ // ---- the API ----------------------------------------------------------------------------
367
+ class TronApi {
368
+ #transport;
369
+ constructor(transport) {
370
+ this.#transport = transport;
371
+ }
372
+ /**
373
+ * One POST to `path`, answered as JSON; a node `Error` answer is a retryable RPC_ERROR
374
+ * (possibly sent, on a broadcast).
375
+ */
376
+ async post(path, body, tags) {
377
+ const answer = await call(this.#transport, { method: 'POST', path, body, route: path }, tags, (0, exports.quorumKeyFor)(path));
378
+ if (isObject(answer) && answer.Error !== undefined) {
379
+ throw new error_1.ProviderError('RPC_ERROR', `the node answered an error on ${path}`, {
380
+ retryable: true,
381
+ ...(tags.purpose === 'broadcast' ? { ambiguous: true } : {}),
382
+ });
383
+ }
384
+ return answer;
385
+ }
386
+ /** The head (`scope: 'full'`) or latest solidified block, or one by height or id. */
387
+ async block(scope, ref, tags) {
388
+ const path = scope === 'full' ? '/wallet/getblock' : '/walletsolidity/getblock';
389
+ const answer = await this.post(path, { ...(ref !== undefined ? { id_or_num: ref.toString() } : {}), detail: false }, tags);
390
+ const header = parseHeader(answer);
391
+ if (header && typeof ref === 'bigint' && header.number !== ref) {
392
+ throw malformed('block number');
393
+ }
394
+ if (header && typeof ref === 'string' && header.id !== ref.toLowerCase()) {
395
+ throw malformed('block id');
396
+ }
397
+ if (ref === undefined && header === null)
398
+ throw malformed('head block');
399
+ return header;
400
+ }
401
+ /**
402
+ * A block with its transactions and their infos (the scanner's read). Block 0 is its
403
+ * header alone: java-tron answers `{}` to `gettransactioninfobyblocknum` there
404
+ * (`GetTransactionInfoByBlockNumServlet`, GreatVoyage-v4.8.2.2; Nile checked 2026-09-27),
405
+ * a malformed answer the scanner would retry for ever, and genesis holds only the chain's
406
+ * initial allocations, which are not reported.
407
+ */
408
+ async blockWithTransactions(height, tags) {
409
+ if (height === 0n) {
410
+ const genesis = await this.block('full', 0n, tags);
411
+ return genesis ? { header: genesis, transactions: [], infos: [] } : null;
412
+ }
413
+ const answer = await this.post('/wallet/getblock', { id_or_num: height.toString(), detail: true }, tags);
414
+ const header = parseHeader(answer);
415
+ if (header === null)
416
+ return null;
417
+ if (header.number !== height)
418
+ throw malformed('block number');
419
+ const list = answer.transactions ?? [];
420
+ if (!Array.isArray(list))
421
+ throw malformed('transactions');
422
+ const transactions = list.map(parseTransaction);
423
+ const infosAnswer = await this.post('/wallet/gettransactioninfobyblocknum', { num: exactInteger(height) }, tags);
424
+ if (!Array.isArray(infosAnswer))
425
+ throw malformed('transaction infos');
426
+ const infos = infosAnswer.map(parseInfo);
427
+ if (infos.some((i) => i.blockNumber !== height))
428
+ throw malformed('transaction infos');
429
+ // Two calls can reach two backends behind one URL: the receipts must be exactly this
430
+ // block's, one per transaction.
431
+ const ids = new Set(transactions.map((t) => t.id));
432
+ const receipted = new Set(infos.map((i) => i.id));
433
+ if (ids.size !== transactions.length ||
434
+ receipted.size !== infos.length ||
435
+ infos.length !== transactions.length ||
436
+ infos.some((i) => !ids.has(i.id))) {
437
+ throw new error_1.ProviderError('PROVIDER_INCONSISTENT', `block ${height}'s receipts do not match its transactions`, { retryable: true });
438
+ }
439
+ return { header, transactions, infos };
440
+ }
441
+ async chainParameters(tags) {
442
+ const answer = object(await this.post('/wallet/getchainparameters', {}, tags), 'parameters');
443
+ const list = answer.chainParameter;
444
+ if (!Array.isArray(list))
445
+ throw malformed('chain parameters');
446
+ // Only the parameters the driver reads are validated: others may be negative (e.g.
447
+ // Nile's `getRemoveThePowerOfTheGr` is -1) and must not fail the read.
448
+ const values = new Map();
449
+ for (const entry of list) {
450
+ const item = object(entry, 'chain parameter');
451
+ if (typeof item.key !== 'string')
452
+ throw malformed('chain parameter');
453
+ if (FEE_PARAMETERS.has(item.key)) {
454
+ values.set(item.key, uintOr0(item.value, item.key));
455
+ }
456
+ }
457
+ const required = (key) => {
458
+ const value = values.get(key);
459
+ if (value === undefined || value === 0n)
460
+ throw malformed(key);
461
+ return value;
462
+ };
463
+ return {
464
+ transactionFee: required('getTransactionFee'),
465
+ energyFee: required('getEnergyFee'),
466
+ createAccountFee: values.get('getCreateAccountFee') ?? 0n,
467
+ createNewAccountFeeInSystemContract: values.get('getCreateNewAccountFeeInSystemContract') ?? 0n,
468
+ createNewAccountBandwidthRate: values.get('getCreateNewAccountBandwidthRate') ?? 1n,
469
+ memoFee: values.get('getMemoFee') ?? 0n,
470
+ maxFeeLimit: required('getMaxFeeLimit'),
471
+ forbidTransferToContract: values.get('getForbidTransferToContract') === 1n,
472
+ };
473
+ }
474
+ /** `{ exists: false }` for an account that was never activated. */
475
+ async account(addressHex, tags) {
476
+ const answer = object(await this.post('/wallet/getaccount', { address: addressHex }, tags), 'account');
477
+ if (Object.keys(answer).length === 0)
478
+ return { exists: false, balance: 0n };
479
+ if (typeof answer.address !== 'string' ||
480
+ answer.address.toLowerCase() !== addressHex.toLowerCase()) {
481
+ throw malformed('account address');
482
+ }
483
+ return { exists: true, balance: uintOr0(answer.balance, 'balance') };
484
+ }
485
+ async resources(addressHex, tags) {
486
+ const r = object(await this.post('/wallet/getaccountresource', { address: addressHex }, tags), 'account resources');
487
+ if (Object.keys(r).length === 0) {
488
+ return { activated: false, freeBandwidth: 0n, stakedBandwidth: 0n, energy: 0n };
489
+ }
490
+ const left = (limit, used, field) => {
491
+ const value = uintOr0(limit, field) - uintOr0(used, field);
492
+ return value > 0n ? value : 0n;
493
+ };
494
+ return {
495
+ activated: true,
496
+ freeBandwidth: left(r.freeNetLimit, r.freeNetUsed, 'free bandwidth'),
497
+ stakedBandwidth: left(r.NetLimit, r.NetUsed, 'bandwidth'),
498
+ energy: left(r.EnergyLimit, r.EnergyUsed, 'energy'),
499
+ };
500
+ }
501
+ /**
502
+ * A constant (simulated) contract call. `no-contract` when the address holds no contract;
503
+ * `failed` when the call reverts or the VM fails; any other refusal is a retryable
504
+ * RPC_ERROR.
505
+ */
506
+ async constantCall(ownerHex, contractHex, data, tags) {
507
+ const answer = object(await this.post('/wallet/triggerconstantcontract', { owner_address: ownerHex, contract_address: contractHex, data }, tags), 'constant call');
508
+ const result = object(answer.result, 'constant call result');
509
+ if (result.result !== true) {
510
+ if (isNoContract(result))
511
+ return { kind: 'no-contract' };
512
+ throw new error_1.ProviderError('RPC_ERROR', 'the node refused a contract call', {
513
+ retryable: true,
514
+ });
515
+ }
516
+ const tx = answer.transaction === undefined ? {} : object(answer.transaction, 'transaction');
517
+ const ret = Array.isArray(tx.ret) && isObject(tx.ret[0]) ? tx.ret[0].ret : undefined;
518
+ if (ret === 'FAILED') {
519
+ return { kind: 'failed', energy: uintOr0(answer.energy_used, 'energy used') };
520
+ }
521
+ const out = answer.constant_result;
522
+ if (!Array.isArray(out) || out.length !== 1)
523
+ throw malformed('constant result');
524
+ // A call that ran used energy, and the fee estimate is built on it; a missing or
525
+ // zero `energy_used` is a malformed answer, never 0 (a 0 fee limit fails on chain).
526
+ const energy = uint(answer.energy_used, 'energy used');
527
+ if (energy === 0n)
528
+ throw malformed('energy used');
529
+ return { kind: 'ok', result: hex(out[0], 'constant result'), energy };
530
+ }
531
+ /**
532
+ * Whether `addressHex` holds a contract (`/wallet/getcontract`): java-tron answers `{}`
533
+ * when the account or its contract does not exist (`Wallet.getContract`, GreatVoyage-v4.8.2.2
534
+ * `d5c3d1d1`), else the `SmartContract`. The structural check behind a constant call's
535
+ * "no contract" text before anyone caches it; an answer about another address is
536
+ * malformed.
537
+ */
538
+ async contractExists(addressHex, tags) {
539
+ const answer = object(await this.post('/wallet/getcontract', { value: addressHex }, tags), 'contract');
540
+ if (Object.keys(answer).length === 0)
541
+ return false;
542
+ // java-tron's `SmartContract` always names its address; an answer that
543
+ // names none, or another, is malformed.
544
+ const address = answer.contract_address;
545
+ if (typeof address !== 'string' ||
546
+ address.toLowerCase() !== addressHex.toLowerCase()) {
547
+ throw malformed('contract');
548
+ }
549
+ return true;
550
+ }
551
+ /**
552
+ * `/wallet/broadcasthex`. java-tron answers refusals with HTTP 200, so the answer is read
553
+ * here; one that cannot be read is possibly sent (the node may hold the bytes).
554
+ */
555
+ async broadcastHex(hexTx, tags) {
556
+ const answer = await this.post('/wallet/broadcasthex', { transaction: hexTx }, tags);
557
+ if (!isObject(answer))
558
+ throw unreadableAfterSend('broadcast answer');
559
+ if (answer.result === true)
560
+ return { accepted: true };
561
+ if (typeof answer.code !== 'string')
562
+ throw unreadableAfterSend('broadcast code');
563
+ const message = messageText(answer.message);
564
+ return { accepted: false, code: answer.code, ...(message ? { message } : {}) };
565
+ }
566
+ /** An included transaction (`full`: any block; `solid`: a solidified one), or null. */
567
+ async transaction(scope, id, tags) {
568
+ const path = scope === 'full'
569
+ ? '/wallet/gettransactionbyid'
570
+ : '/walletsolidity/gettransactionbyid';
571
+ const answer = await this.post(path, { value: id }, tags);
572
+ if (isEmpty(answer))
573
+ return null;
574
+ const tx = parseTransaction(answer);
575
+ if (tx.id !== id.toLowerCase())
576
+ throw malformed('transaction id');
577
+ return tx;
578
+ }
579
+ async transactionInfo(scope, id, tags) {
580
+ const path = scope === 'full'
581
+ ? '/wallet/gettransactioninfobyid'
582
+ : '/walletsolidity/gettransactioninfobyid';
583
+ const answer = await this.post(path, { value: id }, tags);
584
+ if (isEmpty(answer))
585
+ return null;
586
+ const info = parseInfo(answer);
587
+ if (info.id !== id.toLowerCase())
588
+ throw malformed('transaction id');
589
+ return info;
590
+ }
591
+ /** The transaction if the node holds `id` in its pending pool, else null. */
592
+ async pending(id, tags) {
593
+ const answer = await this.post('/wallet/gettransactionfrompending', { value: id }, tags);
594
+ if (isEmpty(answer))
595
+ return null;
596
+ const tx = parseTransaction(answer);
597
+ if (tx.id !== id.toLowerCase())
598
+ throw malformed('transaction id');
599
+ return tx;
600
+ }
601
+ /** The node's JSON-RPC block read (transaction ids only), or null when it has none. */
602
+ async rpcBlock(ref, tags) {
603
+ const byHash = typeof ref === 'string';
604
+ const answer = object(await this.post('/jsonrpc', {
605
+ jsonrpc: '2.0',
606
+ id: 1,
607
+ method: byHash ? 'eth_getBlockByHash' : 'eth_getBlockByNumber',
608
+ params: [byHash ? `0x${ref}` : `0x${ref.toString(16)}`, false],
609
+ }, tags), 'JSON-RPC answer');
610
+ if (answer.error !== undefined) {
611
+ throw new error_1.ProviderError('RPC_ERROR', 'the node answered a JSON-RPC error', {
612
+ retryable: true,
613
+ });
614
+ }
615
+ if (answer.result === null)
616
+ return null;
617
+ const block = object(answer.result, 'JSON-RPC block');
618
+ const txs = block.transactions;
619
+ if (!Array.isArray(txs))
620
+ throw malformed('JSON-RPC transactions');
621
+ const seconds = rpcQuantity(block.timestamp, 'JSON-RPC timestamp');
622
+ if (seconds * 1000n > BigInt(Number.MAX_SAFE_INTEGER)) {
623
+ throw malformed('JSON-RPC timestamp');
624
+ }
625
+ const number = rpcQuantity(block.number, 'JSON-RPC number');
626
+ if (number > INT64_MAX)
627
+ throw malformed('JSON-RPC number');
628
+ const parsed = {
629
+ number,
630
+ hash: rpcHash(block.hash, 'JSON-RPC hash'),
631
+ parentHash: rpcHash(block.parentHash, 'JSON-RPC parent hash'),
632
+ timestamp: Number(seconds) * 1000,
633
+ transactions: txs.map((t) => rpcHash(t, 'JSON-RPC transaction')),
634
+ };
635
+ if (byHash ? parsed.hash !== ref.toLowerCase() : parsed.number !== ref) {
636
+ throw malformed('JSON-RPC block');
637
+ }
638
+ return parsed;
639
+ }
640
+ }
641
+ exports.TronApi = TronApi;
642
+ /**
643
+ * A base58 account address, the only form sent to TronGrid: it becomes a URL path segment,
644
+ * so anything else is refused before any call.
645
+ */
646
+ const BASE58_ACCOUNT = /^T[1-9A-HJ-NP-Za-km-z]{33}$/;
647
+ /**
648
+ * TronGrid's page cursor, bounded in length and charset. Observed on 2026-09-27: 221 to
649
+ * 224 base58 characters; the bound leaves room for base64 forms.
650
+ */
651
+ const FINGERPRINT = /^[0-9A-Za-z+/=_-]{1,1024}$/;
652
+ /** A 32-byte id as TronGrid writes it: 64 hex digits (one class, bounded). */
653
+ const ID_HEX = /^[0-9a-fA-F]{64}$/;
654
+ /** TronGrid's documented internal-transaction entry: its own id and its parent's. */
655
+ const isInternalEntry = (entry) => typeof entry.internal_tx_id === 'string' &&
656
+ ID_HEX.test(entry.internal_tx_id) &&
657
+ typeof entry.tx_id === 'string' &&
658
+ ID_HEX.test(entry.tx_id);
659
+ /**
660
+ * TronGrid `/v1` account history pages (indexer transport), confirmed entries only. Each
661
+ * transaction id is listed once per page: the TRC-20 stream lists a transaction once per
662
+ * transfer it made.
663
+ *
664
+ * Internal transactions are not listed. `search_internal=false` asks TronGrid for none,
665
+ * and an internal entry it mixes in anyway is skipped: TronGrid documents that entry shape
666
+ * (`internal_tx_id`, `tx_id`, `from_address`, `to_address`, `data`, `block_timestamp`; its
667
+ * OpenAPI schema at developers.tron.network/reference/get-transaction-info-by-account-address)
668
+ * and it has no `txID`, so one would make the whole page malformed. Only an entry without
669
+ * an id of its own that carries both documented ids is skipped. Read on 2026-09-27,
670
+ * `GET api.trongrid.io/v1/accounts/TNUC9Qb1rRpS5CbWLmNMxXBjyFoydXjWFR/transactions?limit=20`
671
+ * (WTRX) gave only whole transactions (`txID`, `raw_data_hex`, …), each with the internal
672
+ * transfers nested in `internal_transactions[]` (`internal_tx_id`, `data`, `from_address`,
673
+ * `to_address`); five other accounts, internal-TRX recipients among them, looked the same
674
+ * with `search_internal` true or false. A TRX amount an account received only through a
675
+ * contract's internal transfer is therefore not in its history.
676
+ */
677
+ async function historyPage(transport, address, kind, options, tags) {
678
+ if (typeof address !== 'string' || !BASE58_ACCOUNT.test(address)) {
679
+ throw new error_1.ValidationError('INVALID_ADDRESS', 'not a Tron address');
680
+ }
681
+ if (options.fingerprint !== undefined && !FINGERPRINT.test(options.fingerprint)) {
682
+ throw new error_1.ConfigError('CONFIG_INVALID', 'not a Tron history cursor');
683
+ }
684
+ const suffix = kind === 'trc20' ? '/trc20' : '';
685
+ const answer = object(await call(transport, {
686
+ method: 'GET',
687
+ path: `/v1/accounts/${address}/transactions${suffix}`,
688
+ route: `/v1/accounts/:address/transactions${suffix}`,
689
+ query: {
690
+ limit: String(options.limit),
691
+ only_confirmed: 'true',
692
+ ...(kind === 'transactions' ? { search_internal: 'false' } : {}),
693
+ ...(options.fingerprint !== undefined
694
+ ? { fingerprint: options.fingerprint }
695
+ : {}),
696
+ },
697
+ }, tags), 'history page');
698
+ // Each listed id costs several node reads, so a page longer than asked
699
+ // for is malformed rather than read.
700
+ if (answer.success !== true ||
701
+ !Array.isArray(answer.data) ||
702
+ answer.data.length > options.limit) {
703
+ throw malformed('history page');
704
+ }
705
+ const meta = answer.meta === undefined ? {} : object(answer.meta, 'history meta');
706
+ const next = meta.fingerprint;
707
+ if (next !== undefined &&
708
+ next !== '' &&
709
+ (typeof next !== 'string' || !FINGERPRINT.test(next))) {
710
+ throw malformed('history fingerprint');
711
+ }
712
+ const ids = [];
713
+ for (const item of answer.data) {
714
+ const entry = object(item, 'history item');
715
+ const id = kind === 'trc20' ? entry.transaction_id : entry.txID;
716
+ // An entry is skipped only when its own fields prove it TronGrid's internal entry:
717
+ // no id of its own, and the documented internal and parent ids. Any entry that
718
+ // carries its id is read whatever else it carries, and anything else is malformed
719
+ // (the page is read again), so a schema change never drops a deposit silently.
720
+ if (id === undefined && isInternalEntry(entry))
721
+ continue;
722
+ ids.push(hex(id, 'history id', 32));
723
+ }
724
+ return {
725
+ ids: [...new Set(ids)],
726
+ ...(typeof next === 'string' && next !== '' ? { next } : {}),
727
+ };
728
+ }
729
+ //# sourceMappingURL=http.js.map