@ledgerhq/coin-tron 0.0.1

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 (351) hide show
  1. package/.eslintrc.js +20 -0
  2. package/.turbo/turbo-build.log +4 -0
  3. package/.unimportedrc.json +25 -0
  4. package/LICENSE.txt +21 -0
  5. package/jest.config.js +8 -0
  6. package/jest.integ.config.js +7 -0
  7. package/lib/bridge/broadcast.d.ts +7 -0
  8. package/lib/bridge/broadcast.d.ts.map +1 -0
  9. package/lib/bridge/broadcast.js +26 -0
  10. package/lib/bridge/broadcast.js.map +1 -0
  11. package/lib/bridge/buildOptimisticOperation.d.ts +5 -0
  12. package/lib/bridge/buildOptimisticOperation.d.ts.map +1 -0
  13. package/lib/bridge/buildOptimisticOperation.js +101 -0
  14. package/lib/bridge/buildOptimisticOperation.js.map +1 -0
  15. package/lib/bridge/createTransaction.d.ts +4 -0
  16. package/lib/bridge/createTransaction.d.ts.map +1 -0
  17. package/lib/bridge/createTransaction.js +19 -0
  18. package/lib/bridge/createTransaction.js.map +1 -0
  19. package/lib/bridge/deviceTransactionConfig.d.ts +20 -0
  20. package/lib/bridge/deviceTransactionConfig.d.ts.map +1 -0
  21. package/lib/bridge/deviceTransactionConfig.js +65 -0
  22. package/lib/bridge/deviceTransactionConfig.js.map +1 -0
  23. package/lib/bridge/estimateMaxSpendable.d.ts +5 -0
  24. package/lib/bridge/estimateMaxSpendable.d.ts.map +1 -0
  25. package/lib/bridge/estimateMaxSpendable.js +30 -0
  26. package/lib/bridge/estimateMaxSpendable.js.map +1 -0
  27. package/lib/bridge/getEstimateFees.d.ts +6 -0
  28. package/lib/bridge/getEstimateFees.d.ts.map +1 -0
  29. package/lib/bridge/getEstimateFees.js +52 -0
  30. package/lib/bridge/getEstimateFees.js.map +1 -0
  31. package/lib/bridge/getTransactionStatus.d.ts +4 -0
  32. package/lib/bridge/getTransactionStatus.d.ts.map +1 -0
  33. package/lib/bridge/getTransactionStatus.js +218 -0
  34. package/lib/bridge/getTransactionStatus.js.map +1 -0
  35. package/lib/bridge/index.d.ts +10 -0
  36. package/lib/bridge/index.d.ts.map +1 -0
  37. package/lib/bridge/index.js +60 -0
  38. package/lib/bridge/index.js.map +1 -0
  39. package/lib/bridge/preload.d.ts +8 -0
  40. package/lib/bridge/preload.d.ts.map +1 -0
  41. package/lib/bridge/preload.js +32 -0
  42. package/lib/bridge/preload.js.map +1 -0
  43. package/lib/bridge/prepareTransaction.d.ts +4 -0
  44. package/lib/bridge/prepareTransaction.d.ts.map +1 -0
  45. package/lib/bridge/prepareTransaction.js +19 -0
  46. package/lib/bridge/prepareTransaction.js.map +1 -0
  47. package/lib/bridge/serialization.d.ts +9 -0
  48. package/lib/bridge/serialization.d.ts.map +1 -0
  49. package/lib/bridge/serialization.js +238 -0
  50. package/lib/bridge/serialization.js.map +1 -0
  51. package/lib/bridge/signOperation.d.ts +5 -0
  52. package/lib/bridge/signOperation.d.ts.map +1 -0
  53. package/lib/bridge/signOperation.js +92 -0
  54. package/lib/bridge/signOperation.js.map +1 -0
  55. package/lib/bridge/synchronization.d.ts +5 -0
  56. package/lib/bridge/synchronization.d.ts.map +1 -0
  57. package/lib/bridge/synchronization.integ.test.d.ts +3 -0
  58. package/lib/bridge/synchronization.integ.test.d.ts.map +1 -0
  59. package/lib/bridge/synchronization.integ.test.js +96 -0
  60. package/lib/bridge/synchronization.integ.test.js.map +1 -0
  61. package/lib/bridge/synchronization.js +216 -0
  62. package/lib/bridge/synchronization.js.map +1 -0
  63. package/lib/bridge/transaction.d.ts +15 -0
  64. package/lib/bridge/transaction.d.ts.map +1 -0
  65. package/lib/bridge/transaction.js +61 -0
  66. package/lib/bridge/transaction.js.map +1 -0
  67. package/lib/config.d.ts +10 -0
  68. package/lib/config.d.ts.map +1 -0
  69. package/lib/config.js +17 -0
  70. package/lib/config.js.map +1 -0
  71. package/lib/index.d.ts +3 -0
  72. package/lib/index.d.ts.map +1 -0
  73. package/lib/index.js +21 -0
  74. package/lib/index.js.map +1 -0
  75. package/lib/logic/constants.d.ts +4 -0
  76. package/lib/logic/constants.d.ts.map +1 -0
  77. package/lib/logic/constants.js +7 -0
  78. package/lib/logic/constants.js.map +1 -0
  79. package/lib/logic/pagination.d.ts +3 -0
  80. package/lib/logic/pagination.d.ts.map +1 -0
  81. package/lib/logic/pagination.js +19 -0
  82. package/lib/logic/pagination.js.map +1 -0
  83. package/lib/logic/utils.d.ts +12 -0
  84. package/lib/logic/utils.d.ts.map +1 -0
  85. package/lib/logic/utils.js +177 -0
  86. package/lib/logic/utils.js.map +1 -0
  87. package/lib/network/format.d.ts +9 -0
  88. package/lib/network/format.d.ts.map +1 -0
  89. package/lib/network/format.js +127 -0
  90. package/lib/network/format.js.map +1 -0
  91. package/lib/network/index.d.ts +30 -0
  92. package/lib/network/index.d.ts.map +1 -0
  93. package/lib/network/index.integ.test.d.ts +2 -0
  94. package/lib/network/index.integ.test.d.ts.map +1 -0
  95. package/lib/network/index.integ.test.js +38 -0
  96. package/lib/network/index.integ.test.js.map +1 -0
  97. package/lib/network/index.js +555 -0
  98. package/lib/network/index.js.map +1 -0
  99. package/lib/network/index.test.d.ts +2 -0
  100. package/lib/network/index.test.d.ts.map +1 -0
  101. package/lib/network/index.test.js +66 -0
  102. package/lib/network/index.test.js.map +1 -0
  103. package/lib/network/superRepresentativesData.mock.d.ts +69 -0
  104. package/lib/network/superRepresentativesData.mock.d.ts.map +1 -0
  105. package/lib/network/superRepresentativesData.mock.js +2208 -0
  106. package/lib/network/superRepresentativesData.mock.js.map +1 -0
  107. package/lib/network/types.d.ts +122 -0
  108. package/lib/network/types.d.ts.map +1 -0
  109. package/lib/network/types.fixture.d.ts +498 -0
  110. package/lib/network/types.fixture.d.ts.map +1 -0
  111. package/lib/network/types.fixture.js +4375 -0
  112. package/lib/network/types.fixture.js.map +1 -0
  113. package/lib/network/types.js +13 -0
  114. package/lib/network/types.js.map +1 -0
  115. package/lib/signer/getAddress.d.ts +6 -0
  116. package/lib/signer/getAddress.d.ts.map +1 -0
  117. package/lib/signer/getAddress.js +19 -0
  118. package/lib/signer/getAddress.js.map +1 -0
  119. package/lib/signer/index.d.ts +6 -0
  120. package/lib/signer/index.d.ts.map +1 -0
  121. package/lib/signer/index.js +11 -0
  122. package/lib/signer/index.js.map +1 -0
  123. package/lib/test/bot-deviceActions.d.ts +4 -0
  124. package/lib/test/bot-deviceActions.d.ts.map +1 -0
  125. package/lib/test/bot-deviceActions.js +103 -0
  126. package/lib/test/bot-deviceActions.js.map +1 -0
  127. package/lib/test/bot-specs.d.ts +7 -0
  128. package/lib/test/bot-specs.d.ts.map +1 -0
  129. package/lib/test/bot-specs.js +433 -0
  130. package/lib/test/bot-specs.js.map +1 -0
  131. package/lib/test/bridgeDatasetTest.d.ts +4 -0
  132. package/lib/test/bridgeDatasetTest.d.ts.map +1 -0
  133. package/lib/test/bridgeDatasetTest.js +1284 -0
  134. package/lib/test/bridgeDatasetTest.js.map +1 -0
  135. package/lib/test/cli.d.ts +52 -0
  136. package/lib/test/cli.d.ts.map +1 -0
  137. package/lib/test/cli.js +155 -0
  138. package/lib/test/cli.js.map +1 -0
  139. package/lib/test/index.d.ts +6 -0
  140. package/lib/test/index.d.ts.map +1 -0
  141. package/lib/test/index.js +26 -0
  142. package/lib/test/index.js.map +1 -0
  143. package/lib/types/bridge.d.ts +245 -0
  144. package/lib/types/bridge.d.ts.map +1 -0
  145. package/lib/types/bridge.js +16 -0
  146. package/lib/types/bridge.js.map +1 -0
  147. package/lib/types/errors.d.ts +49 -0
  148. package/lib/types/errors.d.ts.map +1 -0
  149. package/lib/types/errors.js +21 -0
  150. package/lib/types/errors.js.map +1 -0
  151. package/lib/types/index.d.ts +4 -0
  152. package/lib/types/index.d.ts.map +1 -0
  153. package/lib/types/index.js +21 -0
  154. package/lib/types/index.js.map +1 -0
  155. package/lib/types/signer.d.ts +10 -0
  156. package/lib/types/signer.d.ts.map +1 -0
  157. package/lib/types/signer.js +3 -0
  158. package/lib/types/signer.js.map +1 -0
  159. package/lib-es/bridge/broadcast.d.ts +7 -0
  160. package/lib-es/bridge/broadcast.d.ts.map +1 -0
  161. package/lib-es/bridge/broadcast.js +24 -0
  162. package/lib-es/bridge/broadcast.js.map +1 -0
  163. package/lib-es/bridge/buildOptimisticOperation.d.ts +5 -0
  164. package/lib-es/bridge/buildOptimisticOperation.d.ts.map +1 -0
  165. package/lib-es/bridge/buildOptimisticOperation.js +94 -0
  166. package/lib-es/bridge/buildOptimisticOperation.js.map +1 -0
  167. package/lib-es/bridge/createTransaction.d.ts +4 -0
  168. package/lib-es/bridge/createTransaction.d.ts.map +1 -0
  169. package/lib-es/bridge/createTransaction.js +14 -0
  170. package/lib-es/bridge/createTransaction.js.map +1 -0
  171. package/lib-es/bridge/deviceTransactionConfig.d.ts +20 -0
  172. package/lib-es/bridge/deviceTransactionConfig.d.ts.map +1 -0
  173. package/lib-es/bridge/deviceTransactionConfig.js +63 -0
  174. package/lib-es/bridge/deviceTransactionConfig.js.map +1 -0
  175. package/lib-es/bridge/estimateMaxSpendable.d.ts +5 -0
  176. package/lib-es/bridge/estimateMaxSpendable.d.ts.map +1 -0
  177. package/lib-es/bridge/estimateMaxSpendable.js +25 -0
  178. package/lib-es/bridge/estimateMaxSpendable.js.map +1 -0
  179. package/lib-es/bridge/getEstimateFees.d.ts +6 -0
  180. package/lib-es/bridge/getEstimateFees.d.ts.map +1 -0
  181. package/lib-es/bridge/getEstimateFees.js +47 -0
  182. package/lib-es/bridge/getEstimateFees.js.map +1 -0
  183. package/lib-es/bridge/getTransactionStatus.d.ts +4 -0
  184. package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -0
  185. package/lib-es/bridge/getTransactionStatus.js +213 -0
  186. package/lib-es/bridge/getTransactionStatus.js.map +1 -0
  187. package/lib-es/bridge/index.d.ts +10 -0
  188. package/lib-es/bridge/index.d.ts.map +1 -0
  189. package/lib-es/bridge/index.js +53 -0
  190. package/lib-es/bridge/index.js.map +1 -0
  191. package/lib-es/bridge/preload.d.ts +8 -0
  192. package/lib-es/bridge/preload.d.ts.map +1 -0
  193. package/lib-es/bridge/preload.js +27 -0
  194. package/lib-es/bridge/preload.js.map +1 -0
  195. package/lib-es/bridge/prepareTransaction.d.ts +4 -0
  196. package/lib-es/bridge/prepareTransaction.d.ts.map +1 -0
  197. package/lib-es/bridge/prepareTransaction.js +15 -0
  198. package/lib-es/bridge/prepareTransaction.js.map +1 -0
  199. package/lib-es/bridge/serialization.d.ts +9 -0
  200. package/lib-es/bridge/serialization.d.ts.map +1 -0
  201. package/lib-es/bridge/serialization.js +229 -0
  202. package/lib-es/bridge/serialization.js.map +1 -0
  203. package/lib-es/bridge/signOperation.d.ts +5 -0
  204. package/lib-es/bridge/signOperation.d.ts.map +1 -0
  205. package/lib-es/bridge/signOperation.js +85 -0
  206. package/lib-es/bridge/signOperation.js.map +1 -0
  207. package/lib-es/bridge/synchronization.d.ts +5 -0
  208. package/lib-es/bridge/synchronization.d.ts.map +1 -0
  209. package/lib-es/bridge/synchronization.integ.test.d.ts +3 -0
  210. package/lib-es/bridge/synchronization.integ.test.d.ts.map +1 -0
  211. package/lib-es/bridge/synchronization.integ.test.js +89 -0
  212. package/lib-es/bridge/synchronization.integ.test.js.map +1 -0
  213. package/lib-es/bridge/synchronization.js +209 -0
  214. package/lib-es/bridge/synchronization.js.map +1 -0
  215. package/lib-es/bridge/transaction.d.ts +15 -0
  216. package/lib-es/bridge/transaction.d.ts.map +1 -0
  217. package/lib-es/bridge/transaction.js +55 -0
  218. package/lib-es/bridge/transaction.js.map +1 -0
  219. package/lib-es/config.d.ts +10 -0
  220. package/lib-es/config.d.ts.map +1 -0
  221. package/lib-es/config.js +12 -0
  222. package/lib-es/config.js.map +1 -0
  223. package/lib-es/index.d.ts +3 -0
  224. package/lib-es/index.d.ts.map +1 -0
  225. package/lib-es/index.js +3 -0
  226. package/lib-es/index.js.map +1 -0
  227. package/lib-es/logic/constants.d.ts +4 -0
  228. package/lib-es/logic/constants.d.ts.map +1 -0
  229. package/lib-es/logic/constants.js +4 -0
  230. package/lib-es/logic/constants.js.map +1 -0
  231. package/lib-es/logic/pagination.d.ts +3 -0
  232. package/lib-es/logic/pagination.d.ts.map +1 -0
  233. package/lib-es/logic/pagination.js +15 -0
  234. package/lib-es/logic/pagination.js.map +1 -0
  235. package/lib-es/logic/utils.d.ts +12 -0
  236. package/lib-es/logic/utils.d.ts.map +1 -0
  237. package/lib-es/logic/utils.js +167 -0
  238. package/lib-es/logic/utils.js.map +1 -0
  239. package/lib-es/network/format.d.ts +9 -0
  240. package/lib-es/network/format.d.ts.map +1 -0
  241. package/lib-es/network/format.js +117 -0
  242. package/lib-es/network/format.js.map +1 -0
  243. package/lib-es/network/index.d.ts +30 -0
  244. package/lib-es/network/index.d.ts.map +1 -0
  245. package/lib-es/network/index.integ.test.d.ts +2 -0
  246. package/lib-es/network/index.integ.test.d.ts.map +1 -0
  247. package/lib-es/network/index.integ.test.js +36 -0
  248. package/lib-es/network/index.integ.test.js.map +1 -0
  249. package/lib-es/network/index.js +524 -0
  250. package/lib-es/network/index.js.map +1 -0
  251. package/lib-es/network/index.test.d.ts +2 -0
  252. package/lib-es/network/index.test.d.ts.map +1 -0
  253. package/lib-es/network/index.test.js +63 -0
  254. package/lib-es/network/index.test.js.map +1 -0
  255. package/lib-es/network/superRepresentativesData.mock.d.ts +69 -0
  256. package/lib-es/network/superRepresentativesData.mock.d.ts.map +1 -0
  257. package/lib-es/network/superRepresentativesData.mock.js +2206 -0
  258. package/lib-es/network/superRepresentativesData.mock.js.map +1 -0
  259. package/lib-es/network/types.d.ts +122 -0
  260. package/lib-es/network/types.d.ts.map +1 -0
  261. package/lib-es/network/types.fixture.d.ts +498 -0
  262. package/lib-es/network/types.fixture.d.ts.map +1 -0
  263. package/lib-es/network/types.fixture.js +4371 -0
  264. package/lib-es/network/types.fixture.js.map +1 -0
  265. package/lib-es/network/types.js +8 -0
  266. package/lib-es/network/types.js.map +1 -0
  267. package/lib-es/signer/getAddress.d.ts +6 -0
  268. package/lib-es/signer/getAddress.d.ts.map +1 -0
  269. package/lib-es/signer/getAddress.js +17 -0
  270. package/lib-es/signer/getAddress.js.map +1 -0
  271. package/lib-es/signer/index.d.ts +6 -0
  272. package/lib-es/signer/index.d.ts.map +1 -0
  273. package/lib-es/signer/index.js +6 -0
  274. package/lib-es/signer/index.js.map +1 -0
  275. package/lib-es/test/bot-deviceActions.d.ts +4 -0
  276. package/lib-es/test/bot-deviceActions.d.ts.map +1 -0
  277. package/lib-es/test/bot-deviceActions.js +100 -0
  278. package/lib-es/test/bot-deviceActions.js.map +1 -0
  279. package/lib-es/test/bot-specs.d.ts +7 -0
  280. package/lib-es/test/bot-specs.d.ts.map +1 -0
  281. package/lib-es/test/bot-specs.js +428 -0
  282. package/lib-es/test/bot-specs.js.map +1 -0
  283. package/lib-es/test/bridgeDatasetTest.d.ts +4 -0
  284. package/lib-es/test/bridgeDatasetTest.d.ts.map +1 -0
  285. package/lib-es/test/bridgeDatasetTest.js +1278 -0
  286. package/lib-es/test/bridgeDatasetTest.js.map +1 -0
  287. package/lib-es/test/cli.d.ts +52 -0
  288. package/lib-es/test/cli.d.ts.map +1 -0
  289. package/lib-es/test/cli.js +149 -0
  290. package/lib-es/test/cli.js.map +1 -0
  291. package/lib-es/test/index.d.ts +6 -0
  292. package/lib-es/test/index.d.ts.map +1 -0
  293. package/lib-es/test/index.js +6 -0
  294. package/lib-es/test/index.js.map +1 -0
  295. package/lib-es/types/bridge.d.ts +245 -0
  296. package/lib-es/types/bridge.d.ts.map +1 -0
  297. package/lib-es/types/bridge.js +11 -0
  298. package/lib-es/types/bridge.js.map +1 -0
  299. package/lib-es/types/errors.d.ts +49 -0
  300. package/lib-es/types/errors.d.ts.map +1 -0
  301. package/lib-es/types/errors.js +18 -0
  302. package/lib-es/types/errors.js.map +1 -0
  303. package/lib-es/types/index.d.ts +4 -0
  304. package/lib-es/types/index.d.ts.map +1 -0
  305. package/lib-es/types/index.js +5 -0
  306. package/lib-es/types/index.js.map +1 -0
  307. package/lib-es/types/signer.d.ts +10 -0
  308. package/lib-es/types/signer.d.ts.map +1 -0
  309. package/lib-es/types/signer.js +2 -0
  310. package/lib-es/types/signer.js.map +1 -0
  311. package/package.json +133 -0
  312. package/src/bridge/broadcast.ts +24 -0
  313. package/src/bridge/buildOptimisticOperation.ts +133 -0
  314. package/src/bridge/createTransaction.ts +16 -0
  315. package/src/bridge/deviceTransactionConfig.ts +99 -0
  316. package/src/bridge/estimateMaxSpendable.ts +32 -0
  317. package/src/bridge/getEstimateFees.ts +52 -0
  318. package/src/bridge/getTransactionStatus.ts +263 -0
  319. package/src/bridge/index.ts +78 -0
  320. package/src/bridge/preload.ts +24 -0
  321. package/src/bridge/prepareTransaction.ts +12 -0
  322. package/src/bridge/serialization.ts +288 -0
  323. package/src/bridge/signOperation.ts +123 -0
  324. package/src/bridge/synchronization.integ.test.ts +105 -0
  325. package/src/bridge/synchronization.ts +284 -0
  326. package/src/bridge/transaction.ts +84 -0
  327. package/src/config.ts +24 -0
  328. package/src/index.ts +3 -0
  329. package/src/logic/constants.ts +4 -0
  330. package/src/logic/pagination.ts +21 -0
  331. package/src/logic/utils.ts +231 -0
  332. package/src/network/format.ts +148 -0
  333. package/src/network/index.integ.test.ts +33 -0
  334. package/src/network/index.test.ts +61 -0
  335. package/src/network/index.ts +747 -0
  336. package/src/network/superRepresentativesData.mock.ts +2205 -0
  337. package/src/network/types.fixture.ts +4476 -0
  338. package/src/network/types.ts +147 -0
  339. package/src/signer/getAddress.ts +13 -0
  340. package/src/signer/index.ts +7 -0
  341. package/src/test/bot-deviceActions.ts +121 -0
  342. package/src/test/bot-specs.ts +457 -0
  343. package/src/test/bridgeDatasetTest.ts +1343 -0
  344. package/src/test/cli.ts +219 -0
  345. package/src/test/index.ts +6 -0
  346. package/src/types/bridge.ts +304 -0
  347. package/src/types/errors.ts +22 -0
  348. package/src/types/index.ts +4 -0
  349. package/src/types/signer.ts +9 -0
  350. package/tsconfig.json +14 -0
  351. package/types/tronweb/index.d.ts +5 -0
@@ -0,0 +1,219 @@
1
+ import { getAccountCurrency } from "@ledgerhq/coin-framework/account";
2
+ import type { Account, AccountLike, AccountLikeArray } from "@ledgerhq/types-live";
3
+ import invariant from "invariant";
4
+ import flatMap from "lodash/flatMap";
5
+ import zipWith from "lodash/zipWith";
6
+ import { from, Observable } from "rxjs";
7
+ import { map } from "rxjs/operators";
8
+ import { getTronSuperRepresentativeData } from "../network";
9
+ import type {
10
+ SuperRepresentativeData,
11
+ Transaction,
12
+ TronAccount,
13
+ Transaction as TronTransaction,
14
+ Vote,
15
+ } from "../types";
16
+
17
+ const options = [
18
+ {
19
+ name: "token",
20
+ alias: "t",
21
+ type: String,
22
+ desc: "use an token account children of the account",
23
+ },
24
+ {
25
+ name: "mode",
26
+ type: String,
27
+ desc: "mode of transaction: send, freeze, unfreeze, withdrawExpireUnfreeze, unDelegateResource, legacyUnfreeze",
28
+ },
29
+ {
30
+ name: "duration",
31
+ type: String,
32
+ desc: "duration in day",
33
+ },
34
+ {
35
+ name: "resource",
36
+ type: String,
37
+ desc: "reward ENERGY or BANDWIDTH",
38
+ },
39
+ {
40
+ name: "tronVoteAddress",
41
+ type: String,
42
+ multiple: true,
43
+ desc: "address of the super representative voting",
44
+ },
45
+ {
46
+ name: "tronVoteCount",
47
+ type: String,
48
+ multiple: true,
49
+ desc: "number of votes for the vote address",
50
+ },
51
+ ];
52
+
53
+ function inferAccounts(account: Account, opts: Record<string, any>): AccountLikeArray {
54
+ invariant(account.currency.family === "tron", "tron family");
55
+
56
+ if (!opts.token) {
57
+ const accounts: Account[] = [account];
58
+ return accounts;
59
+ }
60
+
61
+ return opts.token.map((token: string) => {
62
+ const subAccounts = account.subAccounts || [];
63
+
64
+ if (token) {
65
+ const subAccount = subAccounts.find(t => {
66
+ const currency = getAccountCurrency(t);
67
+ return (
68
+ token.toLowerCase() === currency.ticker.toLowerCase() ||
69
+ token.toLowerCase() === currency.id
70
+ );
71
+ });
72
+
73
+ if (!subAccount) {
74
+ throw new Error(
75
+ "token account '" +
76
+ token +
77
+ "' not found. Available: " +
78
+ subAccounts.map(t => getAccountCurrency(t).ticker).join(", "),
79
+ );
80
+ }
81
+
82
+ return subAccount;
83
+ }
84
+ });
85
+ }
86
+
87
+ function inferTransactions(
88
+ transactions: Array<{
89
+ account: AccountLike;
90
+ transaction: Transaction;
91
+ }>,
92
+ opts: Record<string, any>,
93
+ ): Transaction[] {
94
+ const mode = opts.mode || "send";
95
+ invariant(
96
+ [
97
+ "send",
98
+ "freeze",
99
+ "unfreeze",
100
+ "vote",
101
+ "claimReward",
102
+ "withdrawExpireUnfreeze",
103
+ "unDelegateResource",
104
+ "legacyUnfreeze",
105
+ ].includes(mode),
106
+ `Unexpected mode: ${mode}`,
107
+ );
108
+ const resource = opts.resource ? opts.resource.toUpperCase() : undefined;
109
+
110
+ if (resource) {
111
+ invariant(["BANDWIDTH", "ENERGY"].includes(resource), `Unexpected resource: ${resource}`);
112
+ }
113
+
114
+ const voteAddresses: string[] = opts["tronVoteAddress"] || [];
115
+ const voteCounts: number[] = (opts["tronVoteCount"] || []).map((value: string) => {
116
+ invariant(Number.isInteger(Number(value)), `Invalid integer: ${value}`);
117
+ return parseInt(value);
118
+ });
119
+ const votes: Vote[] = zipWith(voteAddresses, voteCounts, (a, c) => ({
120
+ address: a,
121
+ voteCount: c,
122
+ }));
123
+ return flatMap(transactions, ({ transaction, account }) => {
124
+ invariant(transaction.family === "tron", "tron family");
125
+
126
+ if (account.type === "Account") {
127
+ invariant((account as TronAccount).tronResources, "unactivated account");
128
+ }
129
+
130
+ if (account.type === "TokenAccount") {
131
+ const isDelisted = account.token.delisted === true;
132
+ invariant(!isDelisted, "token is delisted");
133
+ }
134
+
135
+ return {
136
+ ...transaction,
137
+ family: "tron",
138
+ subAccountId: account.type === "TokenAccount" ? account.id : null,
139
+ mode,
140
+ resource,
141
+ votes,
142
+ } as TronTransaction;
143
+ });
144
+ }
145
+
146
+ const formatOptStr = (str: string | null | undefined): string => str || "";
147
+
148
+ const superRepresentativesFormatters = {
149
+ json: (srData: SuperRepresentativeData): string => JSON.stringify(srData),
150
+ default: (srData: SuperRepresentativeData): string => {
151
+ const headerList = 'address "name" url voteCount brokerage isJobs';
152
+ const strList = srData.list.map(
153
+ sr =>
154
+ `${sr.address} "${formatOptStr(sr.name)}" ${formatOptStr(sr.url)} ${sr.voteCount} ${
155
+ sr.brokerage
156
+ } ${sr.isJobs}`,
157
+ );
158
+ const metaData = [
159
+ `nextVotingDate: ${srData.nextVotingDate}`,
160
+ `totalVotes: ${srData.totalVotes}`,
161
+ ];
162
+ return [headerList].concat(strList).concat(metaData).join("\n");
163
+ },
164
+ };
165
+
166
+ const tronSuperRepresentative = {
167
+ args: [
168
+ {
169
+ name: "max",
170
+ desc: "max number of super representatives to return",
171
+ type: Number,
172
+ },
173
+ {
174
+ name: "format",
175
+ desc: Object.keys(superRepresentativesFormatters).join(" | "),
176
+ type: String,
177
+ },
178
+ ],
179
+ job: ({
180
+ max,
181
+ format,
182
+ }: Partial<{
183
+ max: number | null | undefined;
184
+ format: "json" | "default";
185
+ }>): Observable<string> =>
186
+ from(getTronSuperRepresentativeData(max)).pipe(
187
+ map((srData: SuperRepresentativeData) => {
188
+ const f = format
189
+ ? superRepresentativesFormatters[format]
190
+ : superRepresentativesFormatters.default;
191
+ return f(srData);
192
+ }),
193
+ ),
194
+ };
195
+
196
+ export type CliTools = {
197
+ options: typeof options;
198
+ inferAccounts: typeof inferAccounts;
199
+ inferTransactions: (
200
+ transactions: Array<{
201
+ account: AccountLike;
202
+ transaction: Transaction;
203
+ }>,
204
+ opts: Record<string, any>,
205
+ { inferAmount }: any,
206
+ ) => Transaction[];
207
+ commands: { tronSuperRepresentative: typeof tronSuperRepresentative };
208
+ };
209
+
210
+ export default function makeCliTools(): CliTools {
211
+ return {
212
+ options,
213
+ inferAccounts,
214
+ inferTransactions,
215
+ commands: {
216
+ tronSuperRepresentative,
217
+ },
218
+ };
219
+ }
@@ -0,0 +1,6 @@
1
+ import makeCliTools from "./cli";
2
+
3
+ export * from "./bridgeDatasetTest";
4
+ export { makeCliTools };
5
+ export * from "./bot-specs";
6
+ export * from "./bot-deviceActions";
@@ -0,0 +1,304 @@
1
+ import {
2
+ Account,
3
+ AccountRaw,
4
+ Operation,
5
+ OperationExtra,
6
+ OperationExtraRaw,
7
+ OperationRaw,
8
+ TransactionCommon,
9
+ TransactionCommonRaw,
10
+ TransactionStatusCommon,
11
+ TransactionStatusCommonRaw,
12
+ } from "@ledgerhq/types-live";
13
+ import { BigNumber } from "bignumber.js";
14
+
15
+ export type TronOperationMode =
16
+ | "send"
17
+ | "freeze"
18
+ | "unfreeze"
19
+ | "vote"
20
+ | "claimReward"
21
+ | "withdrawExpireUnfreeze"
22
+ | "unDelegateResource"
23
+ | "legacyUnfreeze";
24
+
25
+ export type TronResource = "BANDWIDTH" | "ENERGY";
26
+ export type NetworkInfo = {
27
+ family: "tron";
28
+ freeNetUsed: BigNumber;
29
+ freeNetLimit: BigNumber;
30
+ netUsed: BigNumber;
31
+ netLimit: BigNumber;
32
+ energyUsed: BigNumber;
33
+ energyLimit: BigNumber;
34
+ };
35
+ export type NetworkInfoRaw = {
36
+ family: "tron";
37
+ freeNetUsed: string;
38
+ freeNetLimit: string;
39
+ netUsed: string;
40
+ netLimit: string;
41
+ energyUsed: string;
42
+ energyLimit: string;
43
+ };
44
+ export type Transaction = TransactionCommon & {
45
+ family: "tron";
46
+ mode: TronOperationMode;
47
+ resource: TronResource | null | undefined;
48
+ networkInfo: NetworkInfo | null | undefined;
49
+ duration: number | null | undefined;
50
+ votes: Vote[];
51
+ };
52
+ export type TransactionRaw = TransactionCommonRaw & {
53
+ mode: TronOperationMode;
54
+ family: "tron";
55
+ resource: TronResource | null | undefined;
56
+ networkInfo: NetworkInfoRaw | null | undefined;
57
+ duration: number | null | undefined;
58
+ votes: Vote[];
59
+ };
60
+ export type TrongridTxType =
61
+ | "TransferContract"
62
+ | "TransferAssetContract"
63
+ | "FreezeBalanceContract"
64
+ | "UnfreezeBalanceContract"
65
+ | "VoteWitnessContract"
66
+ | "TriggerSmartContract"
67
+ | "WithdrawBalanceContract"
68
+ | "ExchangeTransactionContract"
69
+ | "FreezeBalanceV2Contract"
70
+ | "UnfreezeBalanceV2Contract"
71
+ | "WithdrawExpireUnfreezeContract"
72
+ | "UnDelegateResourceContract";
73
+
74
+ export type TrongridTxInfo = {
75
+ txID: string;
76
+ date: Date;
77
+ type: TrongridTxType;
78
+ tokenId?: string;
79
+ from: string;
80
+ to?: string;
81
+ value?: BigNumber;
82
+ fee?: BigNumber;
83
+ resource?: TronResource;
84
+ blockHeight?: number;
85
+ extra?: TrongridExtraTxInfo;
86
+ hasFailed: boolean;
87
+ };
88
+
89
+ export type TronOperation = Operation<TrongridExtraTxInfo>;
90
+ export type TronOperationRaw = OperationRaw<TrongridExtraTxInfoRaw>;
91
+
92
+ export type TrongridExtraTxInfo = OperationExtra & {
93
+ frozenAmount?: BigNumber;
94
+ unfreezeAmount?: BigNumber;
95
+ votes?: Vote[];
96
+ unDelegatedAmount?: BigNumber;
97
+ receiverAddress?: string;
98
+ };
99
+ export function isTrongridExtraTxInfo(op: OperationExtra): op is TrongridExtraTxInfo {
100
+ return (
101
+ op !== null &&
102
+ typeof op === "object" &&
103
+ ("frozenAmount" in op || "unfreezeAmount" in op || "votes" in op)
104
+ );
105
+ }
106
+ export type TrongridExtraTxInfoRaw = OperationExtraRaw & {
107
+ frozenAmount?: string;
108
+ unfreezeAmount?: string;
109
+ votes?: Vote[];
110
+ unDelegatedAmount?: string;
111
+ receiverAddress?: string;
112
+ };
113
+ export function isTrongridExtraTxInfoRaw(op: OperationExtraRaw): op is TrongridExtraTxInfoRaw {
114
+ return (
115
+ op !== null &&
116
+ typeof op === "object" &&
117
+ ("frozenAmount" in op || "unfreezeAmount" in op || "votes" in op)
118
+ );
119
+ }
120
+
121
+ /** Payload types to send to trongrid */
122
+ export type SendTransactionData = {
123
+ to_address: string;
124
+ owner_address: string;
125
+ amount: number;
126
+ asset_name: string | null | undefined;
127
+ };
128
+ export type SmartContractFunction = "transfer(address,uint256)";
129
+ export type SmartContractTransactionData = {
130
+ function_selector: SmartContractFunction;
131
+ fee_limit: number;
132
+ call_value: number;
133
+ contract_address: string;
134
+ parameter: string;
135
+ owner_address: string;
136
+ };
137
+
138
+ export type FreezeTransactionData = {
139
+ owner_address: string;
140
+ frozen_balance: number;
141
+ resource: TronResource | null | undefined;
142
+ };
143
+
144
+ export type UnFreezeTransactionData = {
145
+ owner_address: string;
146
+ resource: TronResource | null | undefined;
147
+ unfreeze_balance: number;
148
+ };
149
+
150
+ export type LegacyUnfreezeTransactionData = {
151
+ receiver_address?: string;
152
+ owner_address: string;
153
+ resource: TronResource | null | undefined;
154
+ };
155
+
156
+ export type WithdrawExpireUnfreezeTransactionData = {
157
+ owner_address: string;
158
+ };
159
+
160
+ export type UnDelegateResourceTransactionData = {
161
+ owner_address: string;
162
+ resource: TronResource | null | undefined;
163
+ receiver_address: string;
164
+ balance: number;
165
+ };
166
+
167
+ export type SendTransactionDataSuccess = {
168
+ raw_data_hex?: string;
169
+ raw_data: Record<string, any> | undefined;
170
+ txID: string;
171
+ };
172
+
173
+ export type SuperRepresentativeData = {
174
+ list: SuperRepresentative[];
175
+ totalVotes: number;
176
+ nextVotingDate: Date;
177
+ };
178
+ export type SuperRepresentative = {
179
+ address: string;
180
+ name: string | null | undefined;
181
+ url: string | null | undefined;
182
+ isJobs: boolean;
183
+ brokerage: number;
184
+ voteCount: number;
185
+ totalProduced: number | null | undefined;
186
+ totalMissed: number | null | undefined;
187
+ latestBlockNum: number | null | undefined;
188
+ latestSlotNum: number | null | undefined;
189
+ };
190
+ export type TronResources = {
191
+ frozen: {
192
+ bandwidth: FrozenInfo | null | undefined;
193
+ energy: FrozenInfo | null | undefined;
194
+ };
195
+ unFrozen: {
196
+ bandwidth: UnFrozenInfo[] | null | undefined;
197
+ energy: UnFrozenInfo[] | null | undefined;
198
+ };
199
+ delegatedFrozen: {
200
+ bandwidth: DelegatedFrozenInfo | null | undefined;
201
+ energy: DelegatedFrozenInfo | null | undefined;
202
+ };
203
+ legacyFrozen: {
204
+ bandwidth: LegacyFrozenInfo | null | undefined;
205
+ energy: LegacyFrozenInfo | null | undefined;
206
+ };
207
+ votes: Vote[];
208
+ tronPower: number;
209
+ energy: BigNumber;
210
+ bandwidth: BandwidthInfo;
211
+ unwithdrawnReward: BigNumber;
212
+ lastWithdrawnRewardDate: Date | null | undefined;
213
+ lastVotedDate: Date | null | undefined;
214
+ cacheTransactionInfoById: Record<string, TronTransactionInfo> | undefined;
215
+ };
216
+ export type TronResourcesRaw = {
217
+ frozen: {
218
+ bandwidth: FrozenInfoRaw | null | undefined;
219
+ energy: FrozenInfoRaw | null | undefined;
220
+ };
221
+ unFrozen: {
222
+ bandwidth: UnFrozenInfoRaw[] | null | undefined;
223
+ energy: UnFrozenInfoRaw[] | null | undefined;
224
+ };
225
+ delegatedFrozen: {
226
+ bandwidth: DelegatedFrozenInfoRaw | null | undefined;
227
+ energy: DelegatedFrozenInfoRaw | null | undefined;
228
+ };
229
+ legacyFrozen: {
230
+ bandwidth: LegacyFrozenInfoRaw | null | undefined;
231
+ energy: LegacyFrozenInfoRaw | null | undefined;
232
+ };
233
+ votes: Vote[];
234
+ tronPower: number;
235
+ energy: string;
236
+ bandwidth: BandwidthInfoRaw;
237
+ unwithdrawnReward: string;
238
+ lastWithdrawnRewardDate: string | null | undefined;
239
+ lastVotedDate: string | null | undefined;
240
+ cacheTransactionInfoById: Record<string, TronTransactionInfoRaw> | undefined;
241
+ };
242
+ export type Vote = {
243
+ address: string;
244
+ voteCount: number;
245
+ };
246
+
247
+ export type DelegatedFrozenInfo = {
248
+ amount: BigNumber;
249
+ };
250
+ export type DelegatedFrozenInfoRaw = {
251
+ amount: string;
252
+ };
253
+
254
+ export type FrozenInfo = {
255
+ amount: BigNumber;
256
+ };
257
+
258
+ export type FrozenInfoRaw = {
259
+ amount: string;
260
+ };
261
+
262
+ export type LegacyFrozenInfo = {
263
+ amount: BigNumber;
264
+ expiredAt: Date;
265
+ };
266
+
267
+ export type LegacyFrozenInfoRaw = {
268
+ amount: string;
269
+ expiredAt: string;
270
+ };
271
+
272
+ export type UnFrozenInfo = {
273
+ amount: BigNumber;
274
+ expireTime: Date;
275
+ };
276
+
277
+ export type UnFrozenInfoRaw = {
278
+ amount: string;
279
+ expireTime: string;
280
+ };
281
+
282
+ export type BandwidthInfo = {
283
+ freeUsed: BigNumber;
284
+ freeLimit: BigNumber;
285
+ gainedUsed: BigNumber;
286
+ gainedLimit: BigNumber;
287
+ };
288
+ export type BandwidthInfoRaw = {
289
+ freeUsed: string;
290
+ freeLimit: string;
291
+ gainedUsed: string;
292
+ gainedLimit: string;
293
+ };
294
+ export type TronTransactionInfo = {
295
+ fee: number;
296
+ blockNumber: number;
297
+ withdraw_amount?: number;
298
+ unfreeze_amount?: number;
299
+ };
300
+ export type TronTransactionInfoRaw = [number, number, number?, number?];
301
+ export type TronAccount = Account & { tronResources: TronResources };
302
+ export type TronAccountRaw = AccountRaw & { tronResources: TronResourcesRaw };
303
+ export type TransactionStatus = TransactionStatusCommon;
304
+ export type TransactionStatusRaw = TransactionStatusCommonRaw;
@@ -0,0 +1,22 @@
1
+ import { createCustomErrorClass } from "@ledgerhq/errors";
2
+
3
+ export const TronNoFrozenForBandwidth = createCustomErrorClass("TronNoFrozenForBandwidth");
4
+ export const TronNoFrozenForEnergy = createCustomErrorClass("TronNoFrozenForEnergy");
5
+ export const TronUnfreezeNotExpired = createCustomErrorClass("TronUnfreezeNotExpired");
6
+ export const TronLegacyUnfreezeNotExpired = createCustomErrorClass("TronLegacyUnfreezeNotExpired");
7
+ export const TronVoteRequired = createCustomErrorClass("TronVoteRequired");
8
+ export const TronInvalidVoteCount = createCustomErrorClass("TronInvalidVoteCount");
9
+ export const TronRewardNotAvailable = createCustomErrorClass("TronRewardNotAvailable");
10
+ export const TronNoReward = createCustomErrorClass("TronNoReward");
11
+ export const TronInvalidFreezeAmount = createCustomErrorClass("TronInvalidFreezeAmount");
12
+ export const TronSendTrc20ToNewAccountForbidden = createCustomErrorClass(
13
+ "TronSendTrc20ToNewAccountForbidden",
14
+ );
15
+ export const TronUnexpectedFees = createCustomErrorClass("TronUnexpectedFees");
16
+ export const TronNotEnoughTronPower = createCustomErrorClass("TronNotEnoughTronPower");
17
+ export const TronTransactionExpired = createCustomErrorClass("TronTransactionExpired");
18
+ export const TronNotEnoughEnergy = createCustomErrorClass("TronNotEnoughEnergy");
19
+ export const TronNoUnfrozenResource = createCustomErrorClass("TronNoUnfrozenResource");
20
+ export const TronInvalidUnDelegateResourceAmount = createCustomErrorClass(
21
+ "TronInvalidUnDelegateResourceAmount",
22
+ );
@@ -0,0 +1,4 @@
1
+ export * from "./bridge";
2
+ export * from "./errors";
3
+ // export * from "./model";
4
+ export * from "./signer";
@@ -0,0 +1,9 @@
1
+ export type TronAddress = {
2
+ publicKey: string;
3
+ address: string;
4
+ };
5
+ export type TronSignature = string;
6
+ export interface TronSigner {
7
+ getAddress(path: string, boolDisplay?: boolean): Promise<TronAddress>;
8
+ sign(path: string, rawTxHex: string, tokenSignatures: string[]): Promise<TronSignature>;
9
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "extends": "../../../tsconfig.base",
3
+ "compilerOptions": {
4
+ "declaration": true,
5
+ "declarationMap": true,
6
+ "module": "commonjs",
7
+ "downlevelIteration": true,
8
+ "lib": ["es2020", "dom"],
9
+ "outDir": "lib",
10
+ "typeRoots": ["./types", "./node_modules/@types"]
11
+ },
12
+ "include": ["src/**/*"],
13
+ "exclude": ["src/api/subscan.ts", "src/api/websocket.ts"]
14
+ }
@@ -0,0 +1,5 @@
1
+ declare module "tronweb" {
2
+ export * from "@agrozyme/types-tronweb";
3
+ import TronWeb from "@agrozyme/types-tronweb";
4
+ export default TronWeb;
5
+ }