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 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/adapters/tron/builder.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The Tron `TxBuilder` and `Broadcaster`. One output (TRX or TRC-20), an optional memo in\n * `raw_data.data`, `expiry` ordering (`expiresAtMs`), one `secp256k1-ecdsa` digest request\n * over the txID, and the txID as the Attempt ref, known before signing.\n *\n * Reference block and expiration: the reference is the head block (TaPoS), and the\n * transaction expires `expirationMs` after the earlier of the head's time and the local\n * clock, as tronweb does from the head. A head older than half the window is refused\n * (retryable) instead of producing a transaction that is born nearly expired, and so is a\n * head dated more than half the window ahead of the local clock (a clock behind the chain\n * would build transactions born expired); a head dated less far in the future cannot push\n * the expiration beyond the window from now. The ordering records the signed expiration and\n * the reference block's TaPoS bound (`lastValidHeight`: its height, read from its id, plus\n * `TAPOS_WINDOW`), so the negative inclusion proof scans from the attested reference block\n * up to the expiration, whatever the head or the clock claimed: a floor derived from the\n * clock could sit above the block that holds the transaction. The expiration stays inside\n * java-tron's own window (at least the next slot, at most 24 h past its head).\n *\n * Uniqueness: Tron has no nonce, so two identical transfers built on the same head in\n * the same millisecond would share one txID and one on-chain effect. The core refuses an\n * Attempt whose ref another Operation holds; as defense in depth, each build takes a\n * `timestamp` strictly above the previous one from this driver, plus crypto-random offsets\n * on `timestamp` (up to +999 ms) and `expiration` (up to −999 ms); java-tron never\n * validates `raw_data.timestamp`.\n *\n * Nothing is signed before the built bytes are decoded back and shown to carry exactly the\n * intent: owner, recipient, amount, token contract, canonical `transfer(to, amount)` call\n * data with no value, memo, expiration and fee limit. `assemble` checks the same against the\n * stored summary, ordering and fee limit, so the signature goes out only with the transfer\n * that was authorized.\n *\n * Broadcasts are classified here (`classifyOwnBroadcast`), never under a quorum: a transport\n * failure, an unreadable reply or a node answer that may follow pooling is thrown ambiguous\n * (possibly sent). A node's rejection is a claim: it stands only when its reason\n * holds for the bytes that were sent, read back from them; otherwise it is a refusal. A\n * `TX_EXPIRED` refusal is the node's view at its own head, a hint and not proof: Tron has no\n * nonce, so a second Attempt could land beside the first. The broadcaster never re-sends or\n * rebuilds on it; only an attested expiry (the proofs) lets the core build again.\n */\nimport { sha256 } from '@noble/hashes/sha256';\nimport type {\n Broadcaster,\n BuildContext,\n TxBuilder,\n WalletKey,\n} from '../../core/driver/types';\nimport {\n ChainError,\n ConfigError,\n ProviderError,\n SigningError,\n UnsupportedCapabilityError,\n ValidationError,\n} from '../../core/errors/error';\nimport { assetId, parseAssetId } from '../../core/model/asset';\nimport type { FeeEstimateDraft } from '../../core/model/fee';\nimport type { DriverIntent, IntentSummary } from '../../core/model/intent';\nimport type { OrderingData } from '../../core/model/ordering';\nimport type { UnsignedTx } from '../../core/model/transaction';\nimport { secp256k1Ecdsa } from '../../core/registry/schemes';\nimport {\n bytesToUtf8,\n concatBytes,\n fromHex,\n randomBytes,\n toHex,\n utf8ToBytes,\n} from '../../core/util/bytes';\nimport { decodeTransferCall, encodeTransfer } from './abi';\nimport { addressFromPublicKey, toHexAddress } from './address';\nimport { classifyOwnBroadcast, txBytesOf } from './errors';\nimport { feeLimitCeiling, feeSun, tronFee } from './fees';\nimport { BROADCAST, READ, malformed, withSignal, type TronBlockHeader } from './http';\nimport {\n MAX_EXPIRATION_MS,\n MAX_MEMO_BYTES,\n MIN_EXPIRATION_MS,\n TAPOS_WINDOW,\n} from './network';\nimport { trc20Balance, trc20Contract, type TronContext } from './reader';\nimport type {\n TronCallTags,\n TronContract,\n TronExpiryOrdering,\n TronFeeDetails,\n TronRawData,\n} from './types';\n\n/** The largest `int64` the codec writes from a JS number. */\nconst MAX_SAFE = BigInt(Number.MAX_SAFE_INTEGER);\n/** A positive base-unit amount in a stored summary: at most a `uint256` (78 digits). */\nconst SUMMARY_AMOUNT = /^[1-9][0-9]{0,77}$/;\n/** Linear on any input: one character class, no repeated group. */\nconst HEX_DIGITS = /^[0-9a-fA-F]+$/;\n\n/** What the signed bytes must carry; addresses are lower-case `41…` hex. */\ninterface Transfer {\n readonly owner: string;\n readonly recipient: string;\n readonly amount: bigint;\n /** The TRC-20 contract, absent for TRX. */\n readonly token?: string;\n /** The memo bytes, lower-case hex; absent without a memo. */\n readonly memo?: string;\n}\n\ninterface Prepared extends Transfer {\n /** The recipient as the intent gives it (the summary's form). */\n readonly to: string;\n readonly contract: TronContract;\n}\n\nfunction invalid(message: string): ValidationError {\n return new ValidationError('INVALID_INTENT', message);\n}\n\n/**\n * Whether an address holds a contract, read under the proof quorum: a node's word\n * alone must not refuse a valid transfer, and endpoints that disagree decide nothing.\n */\nconst CONFIRMED: TronCallTags = { ...READ, quorum: 'proof' };\n\n/** The memo's UTF-8 bytes as hex, or undefined; refused when over `MAX_MEMO_BYTES`. */\nfunction memoHex(memo: string | undefined): string | undefined {\n if (memo === undefined || memo.length === 0) return undefined;\n const tooLong = () => invalid(`a Tron memo is at most ${MAX_MEMO_BYTES} UTF-8 bytes`);\n // Each UTF-16 unit is at least one UTF-8 byte, so a longer string is refused unencoded.\n if (memo.length > MAX_MEMO_BYTES) throw tooLong();\n const bytes = utf8ToBytes(memo);\n if (bytes.length > MAX_MEMO_BYTES) throw tooLong();\n // A lone surrogate would be written as U+FFFD: the chain would carry another memo.\n if (bytesToUtf8(bytes) !== memo) throw invalid('a Tron memo must be well-formed text');\n return toHex(bytes);\n}\n\n/**\n * The validated transfer, before any I/O: one output, a positive amount, TRX or TRC-20,\n * valid addresses, a memo within bounds, amounts the encoders can write exactly (a TRX\n * transfer above 2^53 − 1 sun must be split), and TRX never to the sender (java-tron:\n * \"Cannot transfer TRX to yourself.\", for the bytes alone). A TRC-20 transfer to the\n * sender is valid on chain and is allowed.\n */\nfunction prepare(intent: DriverIntent): Prepared {\n const output = intent.outputs[0];\n if (!output || intent.outputs.length !== 1) {\n throw invalid('a Tron transfer has exactly one output');\n }\n if (output.amount <= 0n) {\n throw new ValidationError('INVALID_AMOUNT', 'the amount must be positive');\n }\n const token = intent.asset === 'native' ? undefined : trc20Contract(intent.asset);\n const owner = toHexAddress(intent.from);\n const recipient = toHexAddress(output.to);\n const memo = memoHex(intent.memo);\n let contract: TronContract;\n if (token === undefined) {\n if (output.amount > MAX_SAFE) {\n throw new ValidationError(\n 'INVALID_AMOUNT',\n 'a TRX amount must be at most the largest safe integer of sun',\n );\n }\n if (recipient === owner) throw invalid('a TRX transfer cannot go to its sender');\n contract = { type: 'TransferContract', owner, to: recipient, amount: output.amount };\n } else {\n // encodeTransfer refuses an amount outside uint256 (INVALID_AMOUNT).\n const data = encodeTransfer(recipient, output.amount);\n contract = { type: 'TriggerSmartContract', owner, contract: token, data };\n }\n return {\n to: output.to,\n amount: output.amount,\n owner,\n recipient,\n contract,\n ...(token !== undefined ? { token } : {}),\n ...(memo !== undefined ? { memo } : {}),\n };\n}\n\n/**\n * Whether decoded raw data carries exactly `t`. A TRC-20 call must be the canonical\n * `transfer(to, amount)` (selector, zero-padded recipient, one amount word, nothing more)\n * with no TRX or TRC-10 value: the verdict reads only that shape.\n */\nfunction carries(raw: TronRawData, t: Transfer): boolean {\n const c = raw.contract;\n if (c.owner !== t.owner || raw.data !== t.memo) return false;\n if (t.token === undefined) {\n return c.type === 'TransferContract' && c.to === t.recipient && c.amount === t.amount;\n }\n if (c.type !== 'TriggerSmartContract' || c.contract !== t.token) return false;\n if (\n c.callValue !== undefined ||\n c.callTokenValue !== undefined ||\n c.tokenId !== undefined\n ) {\n return false;\n }\n const call = decodeTransferCall(c.data);\n return call !== null && call.to === t.recipient && call.amount === t.amount;\n}\n\n/** The transfer a stored summary describes, signed by `owner`; null when it describes none. */\nfunction summaryTransfer(\n ctx: TronContext,\n summary: IntentSummary,\n owner: string,\n): Transfer | null {\n try {\n const { chain, network, ref } = parseAssetId(summary.asset);\n const output = summary.outputs[0];\n if (\n chain !== ctx.chain.id ||\n network !== ctx.network.id ||\n !output ||\n summary.outputs.length !== 1 ||\n !SUMMARY_AMOUNT.test(output.amount)\n ) {\n return null;\n }\n const token = ref === 'native' ? undefined : trc20Contract(ref);\n const memo = memoHex(summary.memo);\n return {\n owner,\n recipient: toHexAddress(output.to),\n amount: BigInt(output.amount),\n ...(token !== undefined ? { token } : {}),\n ...(memo !== undefined ? { memo } : {}),\n };\n } catch {\n return null;\n }\n}\n\n/**\n * The fee fields a build writes, from this transfer's own `tron` estimate: the bandwidth\n * the estimate covers and, for TRC-20 only, a positive fee limit within the handle's\n * `maxFeeLimit`, wherever the estimate came from. The limit is handed to the codec\n * as a number and its `safe()` refuses one it cannot hold exactly: it is never\n * rounded into the bytes.\n */\nfunction feeFields(\n fee: FeeEstimateDraft,\n p: Prepared,\n maxFeeLimit: bigint,\n): { readonly bandwidth: bigint; readonly feeLimit?: number } {\n const details = fee.details as Partial<TronFeeDetails>;\n const mismatch = () =>\n invalid('the fee estimate is not a Tron estimate for this transfer');\n if (\n fee.kind !== 'tron' ||\n typeof details.bandwidth !== 'bigint' ||\n details.bandwidth <= 0n\n ) {\n throw mismatch();\n }\n if (p.token === undefined) {\n if (details.feeLimit !== undefined) throw mismatch();\n return { bandwidth: details.bandwidth };\n }\n if (typeof details.feeLimit !== 'bigint' || details.feeLimit <= 0n) throw mismatch();\n if (details.feeLimit > maxFeeLimit) {\n throw invalid(\n 'the fee limit is above maxFeeLimit, the Tron handle option that bounds it (in sun)',\n );\n }\n return { bandwidth: details.bandwidth, feeLimit: Number(details.feeLimit) };\n}\n\n/** The sender's own key: a signature from any other key would not authorize the owner. */\nfunction signingKey(keys: readonly WalletKey[], owner: string): WalletKey {\n for (const key of keys) {\n if (key.scheme !== 'secp256k1-ecdsa') continue;\n try {\n if (toHexAddress(addressFromPublicKey(key.publicKey)) === owner) return key;\n } catch {\n // Not a secp256k1 point: not this sender's key.\n }\n }\n throw new SigningError(\n 'SIGNER_UNAVAILABLE',\n 'no secp256k1 key for the sending address',\n );\n}\n\nfunction varint(value: number): Uint8Array {\n const out: number[] = [];\n let v = value;\n do {\n let byte = v & 0x7f;\n v = Math.floor(v / 128);\n if (v > 0) byte |= 0x80;\n out.push(byte);\n } while (v > 0);\n return Uint8Array.from(out);\n}\n\n/** `Transaction { raw raw_data = 1; repeated bytes signature = 2; }` with one signature. */\nfunction signedTransaction(raw: Uint8Array, signature: Uint8Array): Uint8Array {\n return concatBytes(\n Uint8Array.of(0x0a),\n varint(raw.length),\n raw,\n Uint8Array.of(0x12),\n varint(signature.length),\n signature,\n );\n}\n\n/**\n * java-tron's bandwidth for a transaction whose `raw_data` is `rawBytes` long\n * (`BandwidthProcessor.consume`): the signed size without `ret` (field 1 with its length and\n * the raw bytes, field 2 with its length and one 65-byte signature) plus 64 result bytes.\n */\nexport function bandwidthOf(rawBytes: number): bigint {\n return BigInt(1 + varint(rawBytes).length + rawBytes + 2 + 65 + 64);\n}\n\n/** A crypto-random integer in [0, 1000). */\nfunction jitter(): number {\n const bytes = randomBytes(2);\n return (((bytes[0] as number) << 8) | (bytes[1] as number)) % 1000;\n}\n\nconst expiresAt = (ordering: OrderingData): number | undefined =>\n ordering.kind === 'expiry' ? ordering.expiresAtMs : undefined;\n\n/**\n * Whether an ordering names the signed reference block: a reference height\n * (`lastValidHeight − TAPOS_WINDOW`) whose bytes 6..8 are the signed `ref_block_bytes`, and\n * the signed `ref_block_hash` itself. The proofs trust the height only with the hash.\n */\nfunction boundToReference(ordering: OrderingData, raw: TronRawData): boolean {\n if (ordering.kind !== 'expiry') return false;\n const { lastValidHeight: last, refBlockHash } = ordering as Partial<TronExpiryOrdering>;\n if (typeof last !== 'bigint' || last < TAPOS_WINDOW) return false;\n return (\n ((last - TAPOS_WINDOW) & 0xffffn) === BigInt(`0x${raw.refBlockBytes}`) &&\n refBlockHash === raw.refBlockHash\n );\n}\n\nexport function createTronBuilder(ctx: TronContext): {\n readonly builder: TxBuilder;\n readonly broadcaster: Broadcaster;\n} {\n const { api, codec, config } = ctx;\n let lastTimestamp = 0;\n\n const refFields = (head: TronBlockHeader) => ({\n refBlockBytes: head.id.slice(12, 16),\n refBlockHash: head.id.slice(16, 32),\n });\n\n async function head(signal?: AbortSignal): Promise<TronBlockHeader> {\n // `block` throws a malformed answer rather than return no head.\n return (await api.block(\n 'full',\n undefined,\n withSignal(READ, signal),\n )) as TronBlockHeader;\n }\n\n /**\n * The simulated energy of a TRC-20 transfer, after the balance check: a shortfall is\n * `INSUFFICIENT_FUNDS`, never a revert; a token that refuses a transfer its balance\n * allows (a blacklist, say) is `INVALID_INTENT`.\n */\n async function tokenEnergy(p: Prepared, signal?: AbortSignal): Promise<bigint> {\n const tags = withSignal(READ, signal);\n const token = p.token as string;\n const available = await trc20Balance(ctx, token, p.owner, tags);\n if (available < p.amount) {\n throw new ChainError(\n 'INSUFFICIENT_FUNDS',\n 'insufficient token balance for this transfer',\n { details: { required: p.amount.toString(), available: available.toString() } },\n );\n }\n const data = (p.contract as Extract<TronContract, { type: 'TriggerSmartContract' }>)\n .data;\n const call = await api.constantCall(p.owner, token, data, tags);\n if (call.kind === 'no-contract') {\n // Its balanceOf just answered: two reads disagree, which decides nothing.\n throw new ProviderError(\n 'PROVIDER_INCONSISTENT',\n 'the node both holds and lacks this token contract',\n { retryable: true },\n );\n }\n if (call.kind === 'failed') throw invalid('the token contract refuses this transfer');\n return call.energy;\n }\n\n const builder: TxBuilder = {\n async estimateFee(intent, build: BuildContext) {\n const p = prepare(intent);\n const tags = withSignal(READ, build.signal);\n const [params, resources, block, recipient, energy] = await Promise.all([\n api.chainParameters(tags),\n api.resources(p.owner, tags),\n head(build.signal),\n p.token === undefined ? api.account(p.recipient, tags) : undefined,\n p.token === undefined ? undefined : tokenEnergy(p, build.signal),\n ]);\n // Where the chain forbids TRX to a contract, such a transfer is refused before\n // signing (it would only be refused, stall and expire). Elsewhere it is valid on\n // chain: the flag is 0 on mainnet, Nile and Shasta.\n // Known gap: the flag is one endpoint's word, read without a quorum, so a false 1\n // refuses a valid transfer before signing and a false 0 lets the chain refuse it;\n // liveness only, never a wrong payment.\n if (\n p.token === undefined &&\n params.forbidTransferToContract &&\n (await api.contractExists(p.recipient, withSignal(CONFIRMED, build.signal)))\n ) {\n throw invalid(\n 'this network refuses TRX sent to a contract (getForbidTransferToContract)',\n );\n }\n // An upper bound of the built size: no expiration jitter, a later timestamp, and the\n // largest fee limit a build can carry (the ceiling `tronFee` applies).\n const now = ctx.clock.now();\n const ceiling = feeLimitCeiling(params, config.maxFeeLimit).value;\n const provisional = codec.encodeRaw({\n ...refFields(block),\n expiration: Math.min(block.timestamp, now) + config.expirationMs,\n timestamp: Math.max(now + 1_000, lastTimestamp + 1),\n ...(p.token !== undefined ? { feeLimit: Number(ceiling) } : {}),\n ...(p.memo !== undefined ? { data: p.memo } : {}),\n contract: p.contract,\n });\n return tronFee({\n fee: intent.fee,\n params,\n resources,\n bandwidth: bandwidthOf(provisional.length / 2),\n activation: recipient !== undefined && !recipient.exists,\n memo: p.memo !== undefined,\n ...(energy !== undefined ? { energy } : {}),\n marginPercent: config.energyMarginPercent,\n maxFeeLimit: config.maxFeeLimit,\n });\n },\n\n async checkFunds(intent, fee, build) {\n const p = prepare(intent);\n const tags = withSignal(READ, build.signal);\n const [account, tokens] = await Promise.all([\n api.account(p.owner, tags),\n p.token === undefined ? undefined : trc20Balance(ctx, p.token, p.owner, tags),\n ]);\n if (tokens !== undefined && tokens < p.amount) {\n return { ok: false, asset: intent.asset, required: p.amount, available: tokens };\n }\n const required = feeSun(fee) + (p.token === undefined ? p.amount : 0n);\n // An account that was never activated has no free bandwidth and cannot send.\n return account.exists && account.balance >= required\n ? { ok: true }\n : { ok: false, asset: 'native', required, available: account.balance };\n },\n\n async build(intent, fee, build): Promise<UnsignedTx> {\n const p = prepare(intent);\n const key = signingKey(build.keys, p.owner);\n const fees = feeFields(fee, p, config.maxFeeLimit);\n const block = await head(build.signal);\n const now = ctx.clock.now();\n if (now - block.timestamp > config.expirationMs / 2) {\n throw new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n 'the head block is too old to reference; try again',\n );\n }\n // A head dated more than half the window ahead means a local clock behind\n // the chain, whose every build would be born expired (and cost a signature per\n // rebuild), or a lying endpoint. Either way nothing is built on it.\n if (block.timestamp - now > config.expirationMs / 2) {\n throw new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n 'the head block is dated ahead of the local clock; check the clock or try again',\n );\n }\n // The reference block's height, from its id (java-tron's block id is the\n // height's 8 bytes followed by 24 bytes of the header hash, `generateBlockId`): the\n // same bytes TaPoS reads. A head whose id and number disagree is not a block.\n const reference = BigInt(`0x${block.id.slice(0, 16)}`);\n if (reference !== block.number) throw malformed('head block id');\n const anchor = Math.min(block.timestamp, now);\n const expiration = anchor + config.expirationMs - jitter();\n // The window stays within MAX_EXPIRATION_MS, and java-tron wants at least the next\n // slot. The network config bounds the window; this holds it.\n if (expiration - anchor > MAX_EXPIRATION_MS) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n 'the expiration window exceeds the maximum',\n );\n }\n if (expiration - anchor < MIN_EXPIRATION_MS - 1_000) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n 'the expiration window is below the minimum',\n );\n }\n const timestamp = Math.max(now + jitter(), lastTimestamp + 1);\n lastTimestamp = timestamp;\n const raw: TronRawData = {\n ...refFields(block),\n expiration,\n timestamp,\n ...(fees.feeLimit !== undefined ? { feeLimit: fees.feeLimit } : {}),\n ...(p.memo !== undefined ? { data: p.memo } : {}),\n contract: p.contract,\n };\n const payload = codec.encodeRaw(raw);\n // Before anything is signed: the bytes decode strictly to exactly this transfer.\n let built: TronRawData | undefined;\n try {\n built = codec.decodeRaw(payload);\n } catch {\n built = undefined;\n }\n if (\n !built ||\n !carries(built, p) ||\n built.expiration !== expiration ||\n built.feeLimit !== raw.feeLimit\n ) {\n throw invalid('the built transaction does not carry this transfer');\n }\n if (bandwidthOf(payload.length / 2) > fees.bandwidth) {\n throw invalid(\"the fee estimate does not cover this transaction's bandwidth\");\n }\n const txId = toHex(sha256(fromHex(payload)));\n // The negative proof scans from the reference block to the signed expiration; the\n // height is the head's claim, so the signed hash bytes go with it, and the proof\n // trusts the height only where the attested block carries them.\n const ordering: TronExpiryOrdering = {\n kind: 'expiry',\n expiresAtMs: expiration,\n lastValidHeight: reference + TAPOS_WINDOW,\n refBlockHash: raw.refBlockHash,\n };\n return {\n payload: { encoding: 'hex', data: payload },\n expectedRef: { id: txId, idKind: 'tx-hash', canonical: true },\n signingRequests: [\n {\n id: 'r0',\n scheme: 'secp256k1-ecdsa',\n payload: fromHex(txId),\n payloadKind: 'digest',\n publicKey: key.publicKey,\n ...(key.keyRef ? { keyRef: key.keyRef } : {}),\n },\n ],\n ordering,\n fee,\n summary: {\n asset: assetId(ctx.chain.id, ctx.network.id, intent.asset),\n outputs: [{ to: p.to, amount: p.amount.toString() }],\n ...(intent.memo !== undefined ? { memo: intent.memo } : {}),\n },\n };\n },\n\n async assemble(unsigned, signatures) {\n const fail = (message: string) => new SigningError('SIGNING_FAILED', message);\n const request = unsigned.signingRequests[0];\n const signature = signatures.find((s) => s.requestId === 'r0');\n if (\n !request ||\n request.id !== 'r0' ||\n unsigned.signingRequests.length !== 1 ||\n !signature ||\n signature.bytes.length !== 64 ||\n (signature.recovery !== 0 && signature.recovery !== 1)\n ) {\n throw fail('missing or malformed signature for request r0');\n }\n const mismatch = () => fail('the unsigned payload does not match its txID');\n if (unsigned.payload.encoding !== 'hex') throw mismatch();\n let raw: Uint8Array;\n try {\n raw = fromHex(unsigned.payload.data);\n } catch {\n throw mismatch();\n }\n const txId = toHex(sha256(raw));\n if (txId !== toHex(request.payload) || txId !== unsigned.expectedRef?.id) {\n throw mismatch();\n }\n // The stored bytes decode strictly, and their owner is the signing key's\n // account, so a signature never authorizes another account's transaction.\n let decoded: TronRawData;\n try {\n decoded = codec.decodeRaw(unsigned.payload.data);\n } catch {\n throw fail('the unsigned payload is not a Tron transfer');\n }\n let signer: string;\n try {\n signer = toHexAddress(addressFromPublicKey(request.publicKey));\n } catch {\n throw fail('the signing request has no valid public key');\n }\n if (decoded.contract.owner !== signer) {\n throw fail(\"the payload's owner is not the signing key's account\");\n }\n // Only a signature the node will take for the owner's goes out, low s and\n // recovery bit included, as the core's scheme checks it; a signer fault is a signing\n // failure here, never a refusal on chain.\n if (\n !secp256k1Ecdsa.verify({\n publicKey: request.publicKey,\n payload: fromHex(txId),\n signature: signature.bytes,\n recovery: signature.recovery,\n })\n ) {\n throw fail('the signature does not verify against the signing key');\n }\n // The bytes carry the authorized summary; the proofs read the expiration and the\n // reference height from the ordering; only the named fee field is read (the core may\n // add others).\n const expected = summaryTransfer(ctx, unsigned.summary, signer);\n const feeLimit = (unsigned.fee.details as Partial<TronFeeDetails>).feeLimit;\n if (\n !expected ||\n !carries(decoded, expected) ||\n expiresAt(unsigned.ordering) !== decoded.expiration ||\n !boundToReference(unsigned.ordering, decoded) ||\n unsigned.fee.kind !== 'tron' ||\n (expected.token === undefined\n ? decoded.feeLimit !== undefined\n : typeof feeLimit !== 'bigint' ||\n decoded.feeLimit === undefined ||\n BigInt(decoded.feeLimit) !== feeLimit)\n ) {\n throw fail(\n 'the unsigned payload does not match its summary, expiry or fee limit',\n );\n }\n const sig = concatBytes(signature.bytes, Uint8Array.of(27 + signature.recovery));\n return {\n raw: { encoding: 'hex', data: toHex(signedTransaction(raw, sig)) },\n ref: { id: txId, idKind: 'tx-hash', canonical: true },\n };\n },\n };\n\n const broadcaster: Broadcaster = {\n async broadcast(signed, options = {}) {\n const { raw } = signed;\n if (\n raw.encoding !== 'hex' ||\n typeof raw.data !== 'string' ||\n raw.data.length % 2 !== 0 ||\n !HEX_DIGITS.test(raw.data)\n ) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n 'Tron broadcasts take the signed transaction as hex',\n );\n }\n // The broadcast tags carry no quorum: one node's answer is classified, never compared.\n const hex = raw.data.toLowerCase();\n const answer = await api.broadcastHex(hex, {\n ...BROADCAST,\n ...(options.fanout !== undefined ? { fanout: options.fanout } : {}),\n ...(options.signal ? { signal: options.signal } : {}),\n });\n // Inside the broadcaster, so a possibly-sent throw reaches the engine's recordAmbiguous.\n // A rejection stands only when its reason holds for these bytes.\n return classifyOwnBroadcast(answer, txBytesOf(hex));\n },\n };\n\n return { builder, broadcaster };\n}\n"]}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The built-in Tron chain: mainnet, Shasta and Nile. Every value is verified against a
3
+ * named source, or is a documented library policy:
4
+ * - `identity`: the id of block 0, read from each network's TronGrid endpoint.
5
+ * - `explorer`: Tronscan's transaction and address routes (tronscan-frontend).
6
+ * - `defaultConfirmations: 1`: `waitForConfirmation` waits for inclusion by default;
7
+ * credit deposits on `final` (the solidified block).
8
+ * - `reorgWindow: 64`: the scanner's window, about three times the solidification depth.
9
+ * - `maxLagBlocks: 20`: about 60 seconds of 3-second blocks.
10
+ */
11
+ import type { ChainInfo } from '../../core/model/chain';
12
+ export declare const TRON_CHAIN: ChainInfo;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TRON_CHAIN = void 0;
4
+ const freeze_1 = require("../../core/util/freeze");
5
+ function tronNetwork(id, identity, testnet, explorer) {
6
+ return {
7
+ id,
8
+ identity,
9
+ testnet,
10
+ feeModel: 'tron',
11
+ finality: { kind: 'solidified' },
12
+ defaultConfirmations: 1,
13
+ reorgWindow: 64,
14
+ maxLagBlocks: 20,
15
+ explorer: {
16
+ tx: `${explorer}/#/transaction/{id}`,
17
+ address: `${explorer}/#/address/{address}`,
18
+ },
19
+ };
20
+ }
21
+ exports.TRON_CHAIN = (0, freeze_1.deepFreeze)({
22
+ id: 'tron',
23
+ family: 'tron',
24
+ model: 'account',
25
+ ordering: 'expiry',
26
+ schemes: ['secp256k1-ecdsa'],
27
+ nativeAsset: { symbol: 'TRX', decimals: 6 },
28
+ defaultNetwork: 'mainnet',
29
+ networks: {
30
+ mainnet: tronNetwork('mainnet', '00000000000000001ebf88508a03865c71d452e25f4d51194196a1d22b6653dc', false, 'https://tronscan.org'),
31
+ shasta: tronNetwork('shasta', '0000000000000000de1aa88295e1fcf982742f773e0419c5a9c134c994a9059e', true, 'https://shasta.tronscan.org'),
32
+ nile: tronNetwork('nile', '0000000000000000d698d4192c56cb6be724a558448e2684802de4d6cd8690dc', true, 'https://nile.tronscan.org'),
33
+ },
34
+ });
35
+ //# sourceMappingURL=chains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../src/adapters/tron/chains.ts"],"names":[],"mappings":";;;AAWA,mDAAoD;AAEpD,SAAS,WAAW,CAClB,EAAU,EACV,QAAgB,EAChB,OAAgB,EAChB,QAAgB;IAEhB,OAAO;QACL,EAAE;QACF,QAAQ;QACR,OAAO;QACP,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;QAChC,oBAAoB,EAAE,CAAC;QACvB,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE;YACR,EAAE,EAAE,GAAG,QAAQ,qBAAqB;YACpC,OAAO,EAAE,GAAG,QAAQ,sBAAsB;SAC3C;KACF,CAAC;AACJ,CAAC;AAEY,QAAA,UAAU,GAAc,IAAA,mBAAU,EAAC;IAC9C,EAAE,EAAE,MAAM;IACV,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,CAAC,iBAAiB,CAAC;IAC5B,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC3C,cAAc,EAAE,SAAS;IACzB,QAAQ,EAAE;QACR,OAAO,EAAE,WAAW,CAClB,SAAS,EACT,kEAAkE,EAClE,KAAK,EACL,sBAAsB,CACvB;QACD,MAAM,EAAE,WAAW,CACjB,QAAQ,EACR,kEAAkE,EAClE,IAAI,EACJ,6BAA6B,CAC9B;QACD,IAAI,EAAE,WAAW,CACf,MAAM,EACN,kEAAkE,EAClE,IAAI,EACJ,2BAA2B,CAC5B;KACF;CACF,CAAC,CAAC","sourcesContent":["/**\n * The built-in Tron chain: mainnet, Shasta and Nile. Every value is verified against a\n * named source, or is a documented library policy:\n * - `identity`: the id of block 0, read from each network's TronGrid endpoint.\n * - `explorer`: Tronscan's transaction and address routes (tronscan-frontend).\n * - `defaultConfirmations: 1`: `waitForConfirmation` waits for inclusion by default;\n * credit deposits on `final` (the solidified block).\n * - `reorgWindow: 64`: the scanner's window, about three times the solidification depth.\n * - `maxLagBlocks: 20`: about 60 seconds of 3-second blocks.\n */\nimport type { ChainInfo, NetworkInfo } from '../../core/model/chain';\nimport { deepFreeze } from '../../core/util/freeze';\n\nfunction tronNetwork(\n id: string,\n identity: string,\n testnet: boolean,\n explorer: string,\n): NetworkInfo {\n return {\n id,\n identity,\n testnet,\n feeModel: 'tron',\n finality: { kind: 'solidified' },\n defaultConfirmations: 1,\n reorgWindow: 64,\n maxLagBlocks: 20,\n explorer: {\n tx: `${explorer}/#/transaction/{id}`,\n address: `${explorer}/#/address/{address}`,\n },\n };\n}\n\nexport const TRON_CHAIN: ChainInfo = deepFreeze({\n id: 'tron',\n family: 'tron',\n model: 'account',\n ordering: 'expiry',\n schemes: ['secp256k1-ecdsa'],\n nativeAsset: { symbol: 'TRX', decimals: 6 },\n defaultNetwork: 'mainnet',\n networks: {\n mainnet: tronNetwork(\n 'mainnet',\n '00000000000000001ebf88508a03865c71d452e25f4d51194196a1d22b6653dc',\n false,\n 'https://tronscan.org',\n ),\n shasta: tronNetwork(\n 'shasta',\n '0000000000000000de1aa88295e1fcf982742f773e0419c5a9c134c994a9059e',\n true,\n 'https://shasta.tronscan.org',\n ),\n nile: tronNetwork(\n 'nile',\n '0000000000000000d698d4192c56cb6be724a558448e2684802de4d6cd8690dc',\n true,\n 'https://nile.tronscan.org',\n ),\n },\n});\n"]}
@@ -0,0 +1,10 @@
1
+ import type { TronCodec } from './types';
2
+ /**
3
+ * SDK-free and exact: the amount of the single TransferContract in `Transaction.raw` bytes
4
+ * (raw field 11 → `Contract` field 2 → `Any` field 2 → TransferContract field 3), or null.
5
+ * The amount is an `int64`, so a varint at or above 2^63 (a negative amount) is null too.
6
+ */
7
+ export declare function transferAmount(rawHex: string): bigint | null;
8
+ export declare const tronwebCodec: TronCodec;
9
+ /** The tronweb driver factory, which the manifest's `load()` requires. */
10
+ export declare const tronwebDriverFactory: import("../..").DriverFactory;
@@ -0,0 +1,322 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tronwebDriverFactory = exports.tronwebCodec = void 0;
4
+ exports.transferAmount = transferAmount;
5
+ /**
6
+ * The tronweb strategy: protobuf work through tronweb's own
7
+ * `txJsonToPb`/`txPbToRawDataHex`/`deserializeTransaction`, and the `crypto-aio/native`
8
+ * client. No I/O here: driver requests go straight to the transport, so no
9
+ * tronweb code sits on a request path. Decoding is strict: the decoded fields
10
+ * must re-encode to exactly the input bytes, so bytes with fields this model does not carry
11
+ * (a permission id, `ref_block_num`, a call value) are refused. Reading chain history
12
+ * (`readRaw`) is lenient, and reports a call's value rather than dropping it.
13
+ */
14
+ const tronweb_1 = require("tronweb");
15
+ const error_1 = require("../../core/errors/error");
16
+ const bytes_1 = require("../../core/util/bytes");
17
+ const types_1 = require("../../core/transport/types");
18
+ const driver_1 = require("./driver");
19
+ const protobuf_1 = require("./protobuf");
20
+ const TYPE_URL = 'type.googleapis.com/protocol.';
21
+ const HEX = /^(?:[0-9a-f]{2})*$/;
22
+ const ADDRESS = /^41[0-9a-f]{40}$/;
23
+ const INT64_MAX = (1n << 63n) - 1n;
24
+ /**
25
+ * java-tron refuses a transaction above `TRANSACTION_MAX_BYTE_SIZE` (500 × 1024
26
+ * bytes, `Constant.java`, checked in `Manager`), and `raw_data` is part of it, so longer
27
+ * hex is refused before any decoding.
28
+ */
29
+ const MAX_RAW_HEX = 2 * 500 * 1024;
30
+ function refuse(reason) {
31
+ throw new error_1.ValidationError('INVALID_INTENT', `cannot encode a Tron transaction: ${reason}`);
32
+ }
33
+ /**
34
+ * tronweb writes these `int64` fields from JS numbers, so each must be a safe
35
+ * non-negative integer (a larger one would round). Anything else is refused with a fixed
36
+ * text that never contains the value: `INVALID_AMOUNT` for the TRX amount, `INVALID_INTENT`
37
+ * for the other fields.
38
+ */
39
+ function safe(value, field) {
40
+ const n = typeof value === 'bigint' ? Number(value) : value;
41
+ if (!Number.isSafeInteger(n) ||
42
+ n < 0 ||
43
+ (typeof value === 'bigint' && BigInt(n) !== value)) {
44
+ if (field !== 'amount')
45
+ refuse(`${field} must be a safe non-negative integer`);
46
+ throw new error_1.ValidationError('INVALID_AMOUNT', 'amount must be a safe non-negative integer');
47
+ }
48
+ return n;
49
+ }
50
+ function contractJson(contract) {
51
+ if (!ADDRESS.test(contract.owner))
52
+ refuse('bad owner address');
53
+ if (contract.type === 'TransferContract') {
54
+ if (!ADDRESS.test(contract.to))
55
+ refuse('bad recipient address');
56
+ return {
57
+ type: 'TransferContract',
58
+ parameter: {
59
+ type_url: `${TYPE_URL}TransferContract`,
60
+ value: {
61
+ owner_address: contract.owner,
62
+ to_address: contract.to,
63
+ amount: safe(contract.amount, 'amount'),
64
+ },
65
+ },
66
+ };
67
+ }
68
+ if (!ADDRESS.test(contract.contract))
69
+ refuse('bad contract address');
70
+ if (!HEX.test(contract.data) || contract.data.length === 0)
71
+ refuse('bad call data');
72
+ // What `readRaw` reports of a chain call is never written: the driver's calls carry no value.
73
+ if (contract.callValue !== undefined ||
74
+ contract.callTokenValue !== undefined ||
75
+ contract.tokenId !== undefined) {
76
+ refuse('a contract call with a value');
77
+ }
78
+ return {
79
+ type: 'TriggerSmartContract',
80
+ parameter: {
81
+ type_url: `${TYPE_URL}TriggerSmartContract`,
82
+ value: {
83
+ owner_address: contract.owner,
84
+ contract_address: contract.contract,
85
+ data: contract.data,
86
+ },
87
+ },
88
+ };
89
+ }
90
+ function encodeRaw(raw) {
91
+ if (!/^[0-9a-f]{4}$/.test(raw.refBlockBytes))
92
+ refuse('bad ref_block_bytes');
93
+ if (!/^[0-9a-f]{16}$/.test(raw.refBlockHash))
94
+ refuse('bad ref_block_hash');
95
+ if (raw.data !== undefined && (!HEX.test(raw.data) || raw.data.length === 0)) {
96
+ refuse('bad memo bytes');
97
+ }
98
+ const json = {
99
+ raw_data: {
100
+ ref_block_bytes: raw.refBlockBytes,
101
+ ref_block_hash: raw.refBlockHash,
102
+ expiration: safe(raw.expiration, 'expiration'),
103
+ timestamp: safe(raw.timestamp, 'timestamp'),
104
+ ...(raw.feeLimit !== undefined
105
+ ? { fee_limit: safe(raw.feeLimit, 'fee_limit') }
106
+ : {}),
107
+ ...(raw.data !== undefined ? { data: raw.data } : {}),
108
+ contract: [contractJson(raw.contract)],
109
+ },
110
+ };
111
+ return tronweb_1.utils.transaction
112
+ .txPbToRawDataHex(tronweb_1.utils.transaction.txJsonToPb(json))
113
+ .toLowerCase();
114
+ }
115
+ /**
116
+ * The `Contract` of `Transaction.raw` bytes when there is exactly one (raw field 11; java-tron
117
+ * requires one), else `null`. Other repeated raw fields, such as the unused `auths`, are
118
+ * client metadata and stay readable.
119
+ */
120
+ function onlyContract(raw) {
121
+ const contracts = (0, protobuf_1.wireFields)(raw, 'opaque')?.filter((f) => f.field === 11) ?? [];
122
+ return contracts.length === 1 ? (0, protobuf_1.bytesOf)(contracts[0]?.value) : null;
123
+ }
124
+ /**
125
+ * SDK-free and exact: the amount of the single TransferContract in `Transaction.raw` bytes
126
+ * (raw field 11 → `Contract` field 2 → `Any` field 2 → TransferContract field 3), or null.
127
+ * The amount is an `int64`, so a varint at or above 2^63 (a negative amount) is null too.
128
+ */
129
+ function transferAmount(rawHex) {
130
+ if (typeof rawHex !== 'string' || rawHex.length > MAX_RAW_HEX)
131
+ return null;
132
+ let bytes;
133
+ try {
134
+ bytes = (0, bytes_1.fromHex)(rawHex);
135
+ }
136
+ catch {
137
+ return null;
138
+ }
139
+ const entry = (0, protobuf_1.singular)(onlyContract(bytes));
140
+ if (entry?.get(1) !== 1n)
141
+ return null; // ContractType.TransferContract
142
+ const any = (0, protobuf_1.singular)((0, protobuf_1.bytesOf)(entry.get(2)));
143
+ const amount = (0, protobuf_1.singular)((0, protobuf_1.bytesOf)(any?.get(2)))?.get(3);
144
+ return typeof amount === 'bigint' && amount <= INT64_MAX ? amount : null;
145
+ }
146
+ /**
147
+ * SDK-free and exact (tronweb reads these `int64`s as rounded numbers): the TRX and
148
+ * TRC-10 value of the single TriggerSmartContract in `Transaction.raw` bytes (fields 3, 5
149
+ * and 6), each only when non-zero; `null` when unreadable or negative (VMActuator refuses a
150
+ * negative value, so no block holds one).
151
+ */
152
+ function callValues(bytes) {
153
+ const entry = (0, protobuf_1.singular)(onlyContract(bytes));
154
+ if (entry?.get(1) !== 31n)
155
+ return null; // ContractType.TriggerSmartContract
156
+ const call = (0, protobuf_1.singular)((0, protobuf_1.bytesOf)((0, protobuf_1.singular)((0, protobuf_1.bytesOf)(entry.get(2)))?.get(2)));
157
+ if (!call)
158
+ return null;
159
+ const values = {};
160
+ for (const [field, name] of [
161
+ [3, 'callValue'],
162
+ [5, 'callTokenValue'],
163
+ [6, 'tokenId'],
164
+ ]) {
165
+ const value = call.get(field) ?? 0n;
166
+ if (typeof value !== 'bigint' || value > INT64_MAX)
167
+ return null;
168
+ if (value !== 0n)
169
+ values[name] = value;
170
+ }
171
+ return values;
172
+ }
173
+ function malformed() {
174
+ throw new error_1.ValidationError('INVALID_INTENT', 'not a Tron transfer or contract call');
175
+ }
176
+ function hexField(value) {
177
+ return typeof value === 'string' ? value.toLowerCase() : malformed();
178
+ }
179
+ /** An `int64` tronweb read as a JS number is exact only when safe; a count is not negative. */
180
+ function exact(value) {
181
+ return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
182
+ }
183
+ /**
184
+ * Lenient on what the chain accepts: `readRaw` reads chain history, so client-set
185
+ * fields java-tron leaves unbounded never make a transaction unreadable. Refusing real
186
+ * chain data would stall history and scans: a mainnet transfer in block 86,615,431
187
+ * carries a .NET-ticks timestamp above 2^53. Range checks belong to what we encode
188
+ * (`encodeRaw`), and `decodeRaw` stays strict through it.
189
+ */
190
+ function read(hex) {
191
+ if (typeof hex !== 'string' ||
192
+ hex.length === 0 ||
193
+ hex.length > MAX_RAW_HEX ||
194
+ !HEX.test(hex)) {
195
+ malformed();
196
+ }
197
+ // tronweb reads only the first contract, so count them here, SDK-free.
198
+ if (onlyContract((0, bytes_1.fromHex)(hex)) === null)
199
+ malformed();
200
+ let decoded;
201
+ for (const type of ['TransferContract', 'TriggerSmartContract']) {
202
+ try {
203
+ decoded = tronweb_1.utils.deserializeTx.deserializeTransaction(type, hex);
204
+ break;
205
+ }
206
+ catch {
207
+ // Another contract type, or not a transaction at all.
208
+ }
209
+ }
210
+ const entry = decoded?.contract?.[0];
211
+ const value = entry?.parameter?.value;
212
+ if (!decoded || !entry || !value)
213
+ return malformed();
214
+ const amount = value.amount;
215
+ const contract = entry.type === 'TransferContract'
216
+ ? {
217
+ type: 'TransferContract',
218
+ owner: hexField(value.owner_address),
219
+ to: hexField(value.to_address),
220
+ // tronweb rounds an int64 above 2^53 - 1: read those exactly from the bytes.
221
+ amount: exact(amount) ? BigInt(amount) : (transferAmount(hex) ?? malformed()),
222
+ }
223
+ : {
224
+ type: 'TriggerSmartContract',
225
+ owner: hexField(value.owner_address),
226
+ contract: hexField(value.contract_address),
227
+ data: hexField(value.data),
228
+ // TRX or a TRC-10 token sent with the call, never dropped.
229
+ ...(callValues((0, bytes_1.fromHex)(hex)) ?? malformed()),
230
+ };
231
+ const raw = {
232
+ refBlockBytes: hexField(decoded.ref_block_bytes),
233
+ refBlockHash: hexField(decoded.ref_block_hash),
234
+ // java-tron bounds `expiration` for every transaction in a block (`validateCommon`:
235
+ // after the head block's time, at most `MAXIMUM_TIME_UNTIL_EXPIRATION` beyond it).
236
+ expiration: exact(decoded.expiration) ? decoded.expiration : malformed(),
237
+ // Client-set and unbounded (some wallets write .NET ticks): kept as tronweb reads it.
238
+ timestamp: typeof decoded.timestamp === 'number' ? decoded.timestamp : malformed(),
239
+ // Only the VM bounds `fee_limit`, for contract calls; on a TRX transfer it is client
240
+ // data. One a number cannot hold exactly, or a negative one, is left out, never rounded.
241
+ ...(exact(decoded.fee_limit) && decoded.fee_limit > 0
242
+ ? { feeLimit: decoded.fee_limit }
243
+ : {}),
244
+ ...(decoded.data ? { data: hexField(decoded.data) } : {}),
245
+ contract,
246
+ };
247
+ return raw;
248
+ }
249
+ function decodeRaw(hex) {
250
+ const raw = read(hex);
251
+ let again;
252
+ try {
253
+ again = encodeRaw(raw);
254
+ }
255
+ catch {
256
+ return malformed();
257
+ }
258
+ if (again !== hex.toLowerCase())
259
+ malformed();
260
+ return raw;
261
+ }
262
+ /**
263
+ * A tronweb `HttpProvider` whose `request()` goes to the transport, for the full
264
+ * node, the solidity node and the event server. The SDK never sees a real URL or key.
265
+ */
266
+ const BROADCASTS = /^\/wallet\/broadcast(?:transaction|hex)$/;
267
+ class TransportHttpProvider extends tronweb_1.providers.HttpProvider {
268
+ #transport;
269
+ constructor(transport) {
270
+ super(types_1.PLACEHOLDER_ORIGIN);
271
+ this.#transport = transport;
272
+ }
273
+ request(url, payload = {}, method = 'get') {
274
+ const post = method.toLowerCase() === 'post';
275
+ const [path = '/', search = ''] = url.split('?', 2);
276
+ const query = Object.fromEntries(new URLSearchParams(search));
277
+ if (!post) {
278
+ for (const [key, value] of Object.entries(payload))
279
+ query[key] = String(value);
280
+ }
281
+ const route = path.startsWith('/') ? path : `/${path}`;
282
+ const request = {
283
+ method: post ? 'POST' : 'GET',
284
+ path: route,
285
+ // A route label only for paths without identifiers: events and logs show the label.
286
+ ...(/^\/wallet(?:solidity)?\/[a-z]+$/.test(route) ? { route } : {}),
287
+ ...(Object.keys(query).length > 0 ? { query } : {}),
288
+ ...(post && Object.keys(payload).length > 0 ? { body: payload } : {}),
289
+ };
290
+ // Broadcasts are ambiguous on failure; everything else is a plain read.
291
+ // No exactIntegers: tronweb expects plain numbers.
292
+ return this.#transport.http(request, BROADCASTS.test(route)
293
+ ? { purpose: 'broadcast', retry: 'ambiguous-on-failure' }
294
+ : { purpose: 'read', retry: 'safe' });
295
+ }
296
+ }
297
+ function readRaw(hex) {
298
+ try {
299
+ return read(hex);
300
+ }
301
+ catch {
302
+ return null;
303
+ }
304
+ }
305
+ exports.tronwebCodec = {
306
+ library: 'tronweb',
307
+ encodeRaw,
308
+ decodeRaw,
309
+ readRaw,
310
+ createNative(transport) {
311
+ const provider = new TransportHttpProvider(transport);
312
+ const client = new tronweb_1.TronWeb({
313
+ fullNode: provider,
314
+ solidityNode: provider,
315
+ eventServer: provider,
316
+ });
317
+ return { client };
318
+ },
319
+ };
320
+ /** The tronweb driver factory, which the manifest's `load()` requires. */
321
+ exports.tronwebDriverFactory = (0, driver_1.tronDriverFactory)(exports.tronwebCodec);
322
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../../src/adapters/tron/codec.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The tronweb strategy: protobuf work through tronweb's own\n * `txJsonToPb`/`txPbToRawDataHex`/`deserializeTransaction`, and the `crypto-aio/native`\n * client. No I/O here: driver requests go straight to the transport, so no\n * tronweb code sits on a request path. Decoding is strict: the decoded fields\n * must re-encode to exactly the input bytes, so bytes with fields this model does not carry\n * (a permission id, `ref_block_num`, a call value) are refused. Reading chain history\n * (`readRaw`) is lenient, and reports a call's value rather than dropping it.\n */\nimport { TronWeb, providers, utils } from 'tronweb';\nimport { ValidationError } from '../../core/errors/error';\nimport { fromHex } from '../../core/util/bytes';\nimport type { HttpRequest, Transport } from '../../core/transport/types';\nimport { PLACEHOLDER_ORIGIN } from '../../core/transport/types';\nimport { tronDriverFactory } from './driver';\nimport { bytesOf, singular, wireFields } from './protobuf';\nimport type { TronCodec, TronContract, TronRawData } from './types';\n\nconst TYPE_URL = 'type.googleapis.com/protocol.';\nconst HEX = /^(?:[0-9a-f]{2})*$/;\nconst ADDRESS = /^41[0-9a-f]{40}$/;\nconst INT64_MAX = (1n << 63n) - 1n;\n/**\n * java-tron refuses a transaction above `TRANSACTION_MAX_BYTE_SIZE` (500 × 1024\n * bytes, `Constant.java`, checked in `Manager`), and `raw_data` is part of it, so longer\n * hex is refused before any decoding.\n */\nconst MAX_RAW_HEX = 2 * 500 * 1024;\n\nfunction refuse(reason: string): never {\n throw new ValidationError(\n 'INVALID_INTENT',\n `cannot encode a Tron transaction: ${reason}`,\n );\n}\n\n/**\n * tronweb writes these `int64` fields from JS numbers, so each must be a safe\n * non-negative integer (a larger one would round). Anything else is refused with a fixed\n * text that never contains the value: `INVALID_AMOUNT` for the TRX amount, `INVALID_INTENT`\n * for the other fields.\n */\nfunction safe(\n value: bigint | number,\n field: 'amount' | 'expiration' | 'timestamp' | 'fee_limit',\n): number {\n const n = typeof value === 'bigint' ? Number(value) : value;\n if (\n !Number.isSafeInteger(n) ||\n n < 0 ||\n (typeof value === 'bigint' && BigInt(n) !== value)\n ) {\n if (field !== 'amount') refuse(`${field} must be a safe non-negative integer`);\n throw new ValidationError(\n 'INVALID_AMOUNT',\n 'amount must be a safe non-negative integer',\n );\n }\n return n;\n}\n\nfunction contractJson(contract: TronContract): Record<string, unknown> {\n if (!ADDRESS.test(contract.owner)) refuse('bad owner address');\n if (contract.type === 'TransferContract') {\n if (!ADDRESS.test(contract.to)) refuse('bad recipient address');\n return {\n type: 'TransferContract',\n parameter: {\n type_url: `${TYPE_URL}TransferContract`,\n value: {\n owner_address: contract.owner,\n to_address: contract.to,\n amount: safe(contract.amount, 'amount'),\n },\n },\n };\n }\n if (!ADDRESS.test(contract.contract)) refuse('bad contract address');\n if (!HEX.test(contract.data) || contract.data.length === 0) refuse('bad call data');\n // What `readRaw` reports of a chain call is never written: the driver's calls carry no value.\n if (\n contract.callValue !== undefined ||\n contract.callTokenValue !== undefined ||\n contract.tokenId !== undefined\n ) {\n refuse('a contract call with a value');\n }\n return {\n type: 'TriggerSmartContract',\n parameter: {\n type_url: `${TYPE_URL}TriggerSmartContract`,\n value: {\n owner_address: contract.owner,\n contract_address: contract.contract,\n data: contract.data,\n },\n },\n };\n}\n\nfunction encodeRaw(raw: TronRawData): string {\n if (!/^[0-9a-f]{4}$/.test(raw.refBlockBytes)) refuse('bad ref_block_bytes');\n if (!/^[0-9a-f]{16}$/.test(raw.refBlockHash)) refuse('bad ref_block_hash');\n if (raw.data !== undefined && (!HEX.test(raw.data) || raw.data.length === 0)) {\n refuse('bad memo bytes');\n }\n const json = {\n raw_data: {\n ref_block_bytes: raw.refBlockBytes,\n ref_block_hash: raw.refBlockHash,\n expiration: safe(raw.expiration, 'expiration'),\n timestamp: safe(raw.timestamp, 'timestamp'),\n ...(raw.feeLimit !== undefined\n ? { fee_limit: safe(raw.feeLimit, 'fee_limit') }\n : {}),\n ...(raw.data !== undefined ? { data: raw.data } : {}),\n contract: [contractJson(raw.contract)],\n },\n };\n return utils.transaction\n .txPbToRawDataHex(utils.transaction.txJsonToPb(json))\n .toLowerCase();\n}\n\n/**\n * The `Contract` of `Transaction.raw` bytes when there is exactly one (raw field 11; java-tron\n * requires one), else `null`. Other repeated raw fields, such as the unused `auths`, are\n * client metadata and stay readable.\n */\nfunction onlyContract(raw: Uint8Array): Uint8Array | null {\n const contracts = wireFields(raw, 'opaque')?.filter((f) => f.field === 11) ?? [];\n return contracts.length === 1 ? bytesOf(contracts[0]?.value) : null;\n}\n\n/**\n * SDK-free and exact: the amount of the single TransferContract in `Transaction.raw` bytes\n * (raw field 11 → `Contract` field 2 → `Any` field 2 → TransferContract field 3), or null.\n * The amount is an `int64`, so a varint at or above 2^63 (a negative amount) is null too.\n */\nexport function transferAmount(rawHex: string): bigint | null {\n if (typeof rawHex !== 'string' || rawHex.length > MAX_RAW_HEX) return null;\n let bytes: Uint8Array;\n try {\n bytes = fromHex(rawHex);\n } catch {\n return null;\n }\n const entry = singular(onlyContract(bytes));\n if (entry?.get(1) !== 1n) return null; // ContractType.TransferContract\n const any = singular(bytesOf(entry.get(2)));\n const amount = singular(bytesOf(any?.get(2)))?.get(3);\n return typeof amount === 'bigint' && amount <= INT64_MAX ? amount : null;\n}\n\ntype CallValues = Pick<\n Extract<TronContract, { type: 'TriggerSmartContract' }>,\n 'callValue' | 'callTokenValue' | 'tokenId'\n>;\n\n/**\n * SDK-free and exact (tronweb reads these `int64`s as rounded numbers): the TRX and\n * TRC-10 value of the single TriggerSmartContract in `Transaction.raw` bytes (fields 3, 5\n * and 6), each only when non-zero; `null` when unreadable or negative (VMActuator refuses a\n * negative value, so no block holds one).\n */\nfunction callValues(bytes: Uint8Array): CallValues | null {\n const entry = singular(onlyContract(bytes));\n if (entry?.get(1) !== 31n) return null; // ContractType.TriggerSmartContract\n const call = singular(bytesOf(singular(bytesOf(entry.get(2)))?.get(2)));\n if (!call) return null;\n const values: Record<string, bigint> = {};\n for (const [field, name] of [\n [3, 'callValue'],\n [5, 'callTokenValue'],\n [6, 'tokenId'],\n ] as const) {\n const value = call.get(field) ?? 0n;\n if (typeof value !== 'bigint' || value > INT64_MAX) return null;\n if (value !== 0n) values[name] = value;\n }\n return values;\n}\n\ntype Decoded = {\n contract?: { type?: string; parameter?: { value?: Record<string, unknown> } }[];\n data?: string;\n fee_limit?: number;\n ref_block_bytes?: string;\n ref_block_hash?: string;\n expiration?: number;\n timestamp?: number;\n};\n\nfunction malformed(): never {\n throw new ValidationError('INVALID_INTENT', 'not a Tron transfer or contract call');\n}\n\nfunction hexField(value: unknown): string {\n return typeof value === 'string' ? value.toLowerCase() : malformed();\n}\n\n/** An `int64` tronweb read as a JS number is exact only when safe; a count is not negative. */\nfunction exact(value: unknown): value is number {\n return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;\n}\n\n/**\n * Lenient on what the chain accepts: `readRaw` reads chain history, so client-set\n * fields java-tron leaves unbounded never make a transaction unreadable. Refusing real\n * chain data would stall history and scans: a mainnet transfer in block 86,615,431\n * carries a .NET-ticks timestamp above 2^53. Range checks belong to what we encode\n * (`encodeRaw`), and `decodeRaw` stays strict through it.\n */\nfunction read(hex: string): TronRawData {\n if (\n typeof hex !== 'string' ||\n hex.length === 0 ||\n hex.length > MAX_RAW_HEX ||\n !HEX.test(hex)\n ) {\n malformed();\n }\n // tronweb reads only the first contract, so count them here, SDK-free.\n if (onlyContract(fromHex(hex)) === null) malformed();\n let decoded: Decoded | undefined;\n for (const type of ['TransferContract', 'TriggerSmartContract']) {\n try {\n decoded = utils.deserializeTx.deserializeTransaction(type, hex) as Decoded;\n break;\n } catch {\n // Another contract type, or not a transaction at all.\n }\n }\n const entry = decoded?.contract?.[0];\n const value = entry?.parameter?.value;\n if (!decoded || !entry || !value) return malformed();\n const amount = value.amount;\n const contract: TronContract =\n entry.type === 'TransferContract'\n ? {\n type: 'TransferContract',\n owner: hexField(value.owner_address),\n to: hexField(value.to_address),\n // tronweb rounds an int64 above 2^53 - 1: read those exactly from the bytes.\n amount: exact(amount) ? BigInt(amount) : (transferAmount(hex) ?? malformed()),\n }\n : {\n type: 'TriggerSmartContract',\n owner: hexField(value.owner_address),\n contract: hexField(value.contract_address),\n data: hexField(value.data),\n // TRX or a TRC-10 token sent with the call, never dropped.\n ...(callValues(fromHex(hex)) ?? malformed()),\n };\n const raw: TronRawData = {\n refBlockBytes: hexField(decoded.ref_block_bytes),\n refBlockHash: hexField(decoded.ref_block_hash),\n // java-tron bounds `expiration` for every transaction in a block (`validateCommon`:\n // after the head block's time, at most `MAXIMUM_TIME_UNTIL_EXPIRATION` beyond it).\n expiration: exact(decoded.expiration) ? decoded.expiration : malformed(),\n // Client-set and unbounded (some wallets write .NET ticks): kept as tronweb reads it.\n timestamp: typeof decoded.timestamp === 'number' ? decoded.timestamp : malformed(),\n // Only the VM bounds `fee_limit`, for contract calls; on a TRX transfer it is client\n // data. One a number cannot hold exactly, or a negative one, is left out, never rounded.\n ...(exact(decoded.fee_limit) && decoded.fee_limit > 0\n ? { feeLimit: decoded.fee_limit }\n : {}),\n ...(decoded.data ? { data: hexField(decoded.data) } : {}),\n contract,\n };\n return raw;\n}\n\nfunction decodeRaw(hex: string): TronRawData {\n const raw = read(hex);\n let again: string;\n try {\n again = encodeRaw(raw);\n } catch {\n return malformed();\n }\n if (again !== hex.toLowerCase()) malformed();\n return raw;\n}\n\n/**\n * A tronweb `HttpProvider` whose `request()` goes to the transport, for the full\n * node, the solidity node and the event server. The SDK never sees a real URL or key.\n */\nconst BROADCASTS = /^\\/wallet\\/broadcast(?:transaction|hex)$/;\n\nclass TransportHttpProvider extends providers.HttpProvider {\n readonly #transport: Transport;\n\n constructor(transport: Transport) {\n super(PLACEHOLDER_ORIGIN);\n this.#transport = transport;\n }\n\n override request<T = unknown>(\n url: string,\n payload: object = {},\n method = 'get',\n ): Promise<T> {\n const post = method.toLowerCase() === 'post';\n const [path = '/', search = ''] = url.split('?', 2);\n const query: Record<string, string> = Object.fromEntries(new URLSearchParams(search));\n if (!post) {\n for (const [key, value] of Object.entries(payload)) query[key] = String(value);\n }\n const route = path.startsWith('/') ? path : `/${path}`;\n const request: HttpRequest = {\n method: post ? 'POST' : 'GET',\n path: route,\n // A route label only for paths without identifiers: events and logs show the label.\n ...(/^\\/wallet(?:solidity)?\\/[a-z]+$/.test(route) ? { route } : {}),\n ...(Object.keys(query).length > 0 ? { query } : {}),\n ...(post && Object.keys(payload).length > 0 ? { body: payload } : {}),\n };\n // Broadcasts are ambiguous on failure; everything else is a plain read.\n // No exactIntegers: tronweb expects plain numbers.\n return this.#transport.http<T>(\n request,\n BROADCASTS.test(route)\n ? { purpose: 'broadcast', retry: 'ambiguous-on-failure' }\n : { purpose: 'read', retry: 'safe' },\n );\n }\n}\n\nfunction readRaw(hex: string): TronRawData | null {\n try {\n return read(hex);\n } catch {\n return null;\n }\n}\n\nexport const tronwebCodec: TronCodec = {\n library: 'tronweb',\n encodeRaw,\n decodeRaw,\n readRaw,\n createNative(transport) {\n const provider = new TransportHttpProvider(transport);\n const client = new TronWeb({\n fullNode: provider,\n solidityNode: provider,\n eventServer: provider,\n });\n return { client };\n },\n};\n\n/** The tronweb driver factory, which the manifest's `load()` requires. */\nexport const tronwebDriverFactory = tronDriverFactory(tronwebCodec);\n"]}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Chain transactions into `DriverTransaction`s, and the verdict of our own transfers.
3
+ * - General decoding (reads, scans, history) reports execution as the chain does: a TRX
4
+ * transfer is `native`, and so is the TRX a contract call sends; each TRC-20 `Transfer`
5
+ * log is a `token-event` (`log:<i>`); contract execution is `partial` (value may move
6
+ * without a log), a failed transaction moved nothing and is `complete`, and a contract
7
+ * type this model does not carry is `none`.
8
+ * - The verdict of our own Attempts (observe with an ordering, and the proofs) also
9
+ * requires on-chain evidence that value moved: a TRC-20 `transfer(to, amount)` counts
10
+ * only with a `Transfer(owner, to, any positive amount)` log from the called contract.
11
+ * Execution success alone proves nothing: a token can succeed and move nothing, and
12
+ * USDT on Tron returns a zero word from `transfer`.
13
+ * - Verdict fields are read strictly: a missing, ill-typed or contradicting one
14
+ * is a malformed answer (retryable), which decides nothing, never a default. Decoding stays
15
+ * lenient on what the chain accepts: an unknown contract type, a memo of any size or bytes.
16
+ * - `readRaw`'s `timestamp` and `feeLimit` are display only: no verdict or amount uses them.
17
+ * Failure reasons are fixed literals: a node's text can carry addresses or amounts, and a
18
+ * stored reason must never hold either.
19
+ */
20
+ import type { DriverTransaction } from '../../core/driver/types';
21
+ import { type TronTxInfo, type TronTxJson } from './http';
22
+ import type { TronCodec, TronRawData } from './types';
23
+ export interface TxVerdict {
24
+ readonly success: boolean;
25
+ readonly reason?: string;
26
+ }
27
+ /**
28
+ * A TRC-20 `transfer(to, …)` counts only if the called token
29
+ * contract logged a `Transfer` from the sender to that recipient. Any positive amount counts:
30
+ * a fee-on-transfer token (Tron USDT has a dormant fee switch) logs less than the call's
31
+ * amount, and requiring the exact amount would prove a transfer that moved `failed`. A call
32
+ * that also sends TRX or a TRC-10 token, or whose data is not a canonical `transfer`, is never
33
+ * a plain TRC-20 transfer. Decoding reports the amounts that actually moved.
34
+ */
35
+ export declare function transferLanded(raw: TronRawData, info: TronTxInfo): boolean;
36
+ /** The chain's own view of an included transaction (no evidence check: not a verdict). */
37
+ export declare function chainVerdict(codec: TronCodec, tx: TronTxJson, info: TronTxInfo): TxVerdict;
38
+ /**
39
+ * The verdict of our own included transaction (observe with an ordering, `includedFinal`).
40
+ * The driver built it, so its bytes read, its call is a canonical `transfer` that sends no
41
+ * value, a node's answer for it carries `contractRet`, and a TRX transfer in a block executed;
42
+ * anything else contradicts the signed transaction or the chain's rules and decides nothing
43
+ * (retryable), as does a token `Transfer` event that does not read.
44
+ */
45
+ export declare function verdictOf(codec: TronCodec, tx: TronTxJson, info: TronTxInfo): TxVerdict;
46
+ /**
47
+ * Any transaction as the chain reports it. `info` and `blockHash` come together for an
48
+ * included transaction; `pending` marks one the node holds in its pool.
49
+ */
50
+ export declare function decodeTransaction(codec: TronCodec, tx: TronTxJson, info: TronTxInfo | null, blockHash: string | undefined, pending?: boolean): DriverTransaction;