@ledgerhq/coin-evm 0.2.1 → 0.2.2-nightly.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 (462) hide show
  1. package/.eslintrc.js +11 -46
  2. package/.turbo/turbo-build.log +1 -1
  3. package/CHANGELOG.md +29 -1
  4. package/lib/__tests__/adapters.unit.test.d.ts +2 -0
  5. package/lib/__tests__/adapters.unit.test.d.ts.map +1 -0
  6. package/lib/__tests__/adapters.unit.test.js +455 -0
  7. package/lib/__tests__/adapters.unit.test.js.map +1 -0
  8. package/lib/__tests__/broadcast.unit.test.d.ts +2 -0
  9. package/lib/__tests__/broadcast.unit.test.d.ts.map +1 -0
  10. package/lib/__tests__/broadcast.unit.test.js +181 -0
  11. package/lib/__tests__/broadcast.unit.test.js.map +1 -0
  12. package/lib/__tests__/buildOptimisticOperation.unit.test.d.ts +2 -0
  13. package/lib/__tests__/buildOptimisticOperation.unit.test.d.ts.map +1 -0
  14. package/lib/__tests__/buildOptimisticOperation.unit.test.js +166 -0
  15. package/lib/__tests__/buildOptimisticOperation.unit.test.js.map +1 -0
  16. package/lib/__tests__/createTransaction.unit.test.d.ts +2 -0
  17. package/lib/__tests__/createTransaction.unit.test.d.ts.map +1 -0
  18. package/lib/__tests__/createTransaction.unit.test.js +50 -0
  19. package/lib/__tests__/createTransaction.unit.test.js.map +1 -0
  20. package/lib/__tests__/deviceTransactionConfig.unit.test.d.ts +2 -0
  21. package/lib/__tests__/deviceTransactionConfig.unit.test.d.ts.map +1 -0
  22. package/lib/__tests__/deviceTransactionConfig.unit.test.js +231 -0
  23. package/lib/__tests__/deviceTransactionConfig.unit.test.js.map +1 -0
  24. package/lib/__tests__/estimateMaxSpendable.unit.test.d.ts +2 -0
  25. package/lib/__tests__/estimateMaxSpendable.unit.test.d.ts.map +1 -0
  26. package/lib/__tests__/estimateMaxSpendable.unit.test.js +145 -0
  27. package/lib/__tests__/estimateMaxSpendable.unit.test.js.map +1 -0
  28. package/lib/__tests__/gasTracker/index.unit.test.d.ts +2 -0
  29. package/lib/__tests__/gasTracker/index.unit.test.d.ts.map +1 -0
  30. package/lib/__tests__/gasTracker/index.unit.test.js +35 -0
  31. package/lib/__tests__/gasTracker/index.unit.test.js.map +1 -0
  32. package/lib/__tests__/gasTracker/ledger.unit.test.d.ts +2 -0
  33. package/lib/__tests__/gasTracker/ledger.unit.test.d.ts.map +1 -0
  34. package/lib/__tests__/gasTracker/ledger.unit.test.js +110 -0
  35. package/lib/__tests__/gasTracker/ledger.unit.test.js.map +1 -0
  36. package/lib/__tests__/getTransactionStatus.unit.test.d.ts +2 -0
  37. package/lib/__tests__/getTransactionStatus.unit.test.d.ts.map +1 -0
  38. package/lib/__tests__/getTransactionStatus.unit.test.js +216 -0
  39. package/lib/__tests__/getTransactionStatus.unit.test.js.map +1 -0
  40. package/lib/__tests__/hw-getAddress.unit.test.d.ts +2 -0
  41. package/lib/__tests__/hw-getAddress.unit.test.d.ts.map +1 -0
  42. package/lib/__tests__/hw-getAddress.unit.test.js +47 -0
  43. package/lib/__tests__/hw-getAddress.unit.test.js.map +1 -0
  44. package/lib/__tests__/logic.unit.test.d.ts +2 -0
  45. package/lib/__tests__/logic.unit.test.d.ts.map +1 -0
  46. package/lib/__tests__/logic.unit.test.js +296 -0
  47. package/lib/__tests__/logic.unit.test.js.map +1 -0
  48. package/lib/__tests__/preload.unit.test.d.ts +2 -0
  49. package/lib/__tests__/preload.unit.test.d.ts.map +1 -0
  50. package/lib/__tests__/preload.unit.test.js +149 -0
  51. package/lib/__tests__/preload.unit.test.js.map +1 -0
  52. package/lib/__tests__/prepareTransaction.unit.test.d.ts +2 -0
  53. package/lib/__tests__/prepareTransaction.unit.test.d.ts.map +1 -0
  54. package/lib/__tests__/prepareTransaction.unit.test.js +248 -0
  55. package/lib/__tests__/prepareTransaction.unit.test.js.map +1 -0
  56. package/lib/__tests__/rpc.unit.test.d.ts +2 -0
  57. package/lib/__tests__/rpc.unit.test.d.ts.map +1 -0
  58. package/lib/__tests__/rpc.unit.test.js +444 -0
  59. package/lib/__tests__/rpc.unit.test.js.map +1 -0
  60. package/lib/__tests__/signOperation.unit.test.d.ts +2 -0
  61. package/lib/__tests__/signOperation.unit.test.d.ts.map +1 -0
  62. package/lib/__tests__/signOperation.unit.test.js +160 -0
  63. package/lib/__tests__/signOperation.unit.test.js.map +1 -0
  64. package/lib/__tests__/synchronization.unit.test.d.ts +2 -0
  65. package/lib/__tests__/synchronization.unit.test.d.ts.map +1 -0
  66. package/lib/__tests__/synchronization.unit.test.js +499 -0
  67. package/lib/__tests__/synchronization.unit.test.js.map +1 -0
  68. package/lib/__tests__/transaction.unit.test.d.ts +2 -0
  69. package/lib/__tests__/transaction.unit.test.d.ts.map +1 -0
  70. package/lib/__tests__/transaction.unit.test.js +201 -0
  71. package/lib/__tests__/transaction.unit.test.js.map +1 -0
  72. package/lib/abis/erc20.abi.json +222 -0
  73. package/lib/abis/optimismGasPriceOracle.abi.json +252 -0
  74. package/lib/adapters.d.ts +21 -0
  75. package/lib/adapters.d.ts.map +1 -0
  76. package/lib/adapters.js +118 -0
  77. package/lib/adapters.js.map +1 -0
  78. package/lib/api/explorer/etherscan.d.ts +24 -0
  79. package/lib/api/explorer/etherscan.d.ts.map +1 -0
  80. package/lib/api/explorer/etherscan.js +90 -0
  81. package/lib/api/explorer/etherscan.js.map +1 -0
  82. package/lib/api/explorer/index.d.ts +26 -0
  83. package/lib/api/explorer/index.d.ts.map +1 -0
  84. package/lib/api/explorer/index.js +23 -0
  85. package/lib/api/explorer/index.js.map +1 -0
  86. package/lib/api/gasTracker/index.d.ts +13 -0
  87. package/lib/api/gasTracker/index.d.ts.map +1 -0
  88. package/lib/api/gasTracker/index.js +21 -0
  89. package/lib/api/gasTracker/index.js.map +1 -0
  90. package/lib/api/gasTracker/ledger.d.ts +9 -0
  91. package/lib/api/gasTracker/ledger.d.ts.map +1 -0
  92. package/lib/api/gasTracker/ledger.js +90 -0
  93. package/lib/api/gasTracker/ledger.js.map +1 -0
  94. package/lib/api/rpc/index.d.ts +3 -0
  95. package/lib/api/rpc/index.d.ts.map +1 -0
  96. package/lib/api/rpc/index.js +32 -0
  97. package/lib/api/rpc/index.js.map +1 -0
  98. package/lib/api/rpc/rpc.common.d.ts +93 -0
  99. package/lib/api/rpc/rpc.common.d.ts.map +1 -0
  100. package/lib/api/rpc/rpc.common.js +284 -0
  101. package/lib/api/rpc/rpc.common.js.map +1 -0
  102. package/lib/api/rpc/rpc.native.d.ts +6 -0
  103. package/lib/api/rpc/rpc.native.d.ts.map +1 -0
  104. package/lib/api/rpc/rpc.native.js +35 -0
  105. package/lib/api/rpc/rpc.native.js.map +1 -0
  106. package/lib/bridge/js.d.ts +11 -0
  107. package/lib/bridge/js.d.ts.map +1 -0
  108. package/lib/bridge/js.js +58 -0
  109. package/lib/bridge/js.js.map +1 -0
  110. package/lib/bridge.integration.test.d.ts +14 -0
  111. package/lib/bridge.integration.test.d.ts.map +1 -0
  112. package/lib/bridge.integration.test.js +85 -0
  113. package/lib/bridge.integration.test.js.map +1 -0
  114. package/lib/broadcast.d.ts +8 -0
  115. package/lib/broadcast.d.ts.map +1 -0
  116. package/lib/broadcast.js +25 -0
  117. package/lib/broadcast.js.map +1 -0
  118. package/lib/buildOptimisticOperation.d.ts +16 -0
  119. package/lib/buildOptimisticOperation.d.ts.map +1 -0
  120. package/lib/buildOptimisticOperation.js +80 -0
  121. package/lib/buildOptimisticOperation.js.map +1 -0
  122. package/lib/cli-transaction.d.ts +2 -0
  123. package/lib/cli-transaction.d.ts.map +1 -0
  124. package/lib/cli-transaction.js +9 -0
  125. package/lib/cli-transaction.js.map +1 -0
  126. package/lib/createTransaction.d.ts +9 -0
  127. package/lib/createTransaction.d.ts.map +1 -0
  128. package/lib/createTransaction.js +32 -0
  129. package/lib/createTransaction.js.map +1 -0
  130. package/lib/datasets/ethereum.scanAccounts.1.d.ts +7 -0
  131. package/lib/datasets/ethereum.scanAccounts.1.d.ts.map +1 -0
  132. package/lib/datasets/ethereum.scanAccounts.1.js +51 -0
  133. package/lib/datasets/ethereum.scanAccounts.1.js.map +1 -0
  134. package/lib/datasets/ethereum1.d.ts +3 -0
  135. package/lib/datasets/ethereum1.d.ts.map +1 -0
  136. package/lib/datasets/ethereum1.js +22 -0
  137. package/lib/datasets/ethereum1.js.map +1 -0
  138. package/lib/datasets/ethereum2.d.ts +3 -0
  139. package/lib/datasets/ethereum2.d.ts.map +1 -0
  140. package/lib/datasets/ethereum2.js +22 -0
  141. package/lib/datasets/ethereum2.js.map +1 -0
  142. package/lib/datasets/ethereum_classic.d.ts +5 -0
  143. package/lib/datasets/ethereum_classic.d.ts.map +1 -0
  144. package/lib/datasets/ethereum_classic.js +69 -0
  145. package/lib/datasets/ethereum_classic.js.map +1 -0
  146. package/lib/deviceTransactionConfig.d.ts +15 -0
  147. package/lib/deviceTransactionConfig.d.ts.map +1 -0
  148. package/lib/deviceTransactionConfig.js +44 -0
  149. package/lib/deviceTransactionConfig.js.map +1 -0
  150. package/lib/errors.d.ts +16 -0
  151. package/lib/errors.d.ts.map +1 -0
  152. package/lib/errors.js +11 -0
  153. package/lib/errors.js.map +1 -0
  154. package/lib/estimateMaxSpendable.d.ts +4 -0
  155. package/lib/estimateMaxSpendable.d.ts.map +1 -0
  156. package/lib/estimateMaxSpendable.js +23 -0
  157. package/lib/estimateMaxSpendable.js.map +1 -0
  158. package/lib/getTransactionStatus.d.ts +23 -0
  159. package/lib/getTransactionStatus.d.ts.map +1 -0
  160. package/lib/getTransactionStatus.js +132 -0
  161. package/lib/getTransactionStatus.js.map +1 -0
  162. package/lib/hw-getAddress.d.ts +6 -0
  163. package/lib/hw-getAddress.d.ts.map +1 -0
  164. package/lib/hw-getAddress.js +28 -0
  165. package/lib/hw-getAddress.js.map +1 -0
  166. package/lib/logic.d.ts +31 -0
  167. package/lib/logic.d.ts.map +1 -0
  168. package/lib/logic.js +131 -0
  169. package/lib/logic.js.map +1 -0
  170. package/lib/preload.d.ts +6 -0
  171. package/lib/preload.d.ts.map +1 -0
  172. package/lib/preload.js +58 -0
  173. package/lib/preload.js.map +1 -0
  174. package/lib/prepareTransaction.d.ts +26 -0
  175. package/lib/prepareTransaction.d.ts.map +1 -0
  176. package/lib/prepareTransaction.js +128 -0
  177. package/lib/prepareTransaction.js.map +1 -0
  178. package/lib/signOperation.d.ts +18 -0
  179. package/lib/signOperation.d.ts.map +1 -0
  180. package/lib/signOperation.js +88 -0
  181. package/lib/signOperation.js.map +1 -0
  182. package/lib/signer.d.ts +27 -0
  183. package/lib/signer.d.ts.map +1 -0
  184. package/lib/signer.js +3 -0
  185. package/lib/signer.js.map +1 -0
  186. package/lib/specs.d.ts +3 -0
  187. package/lib/specs.d.ts.map +1 -0
  188. package/lib/specs.js +238 -0
  189. package/lib/specs.js.map +1 -0
  190. package/lib/speculos-deviceActions.d.ts +8 -0
  191. package/lib/speculos-deviceActions.d.ts.map +1 -0
  192. package/lib/speculos-deviceActions.js +66 -0
  193. package/lib/speculos-deviceActions.js.map +1 -0
  194. package/lib/synchronization.d.ts +27 -0
  195. package/lib/synchronization.d.ts.map +1 -0
  196. package/lib/synchronization.js +220 -0
  197. package/lib/synchronization.js.map +1 -0
  198. package/lib/testUtils.d.ts +6 -0
  199. package/lib/testUtils.d.ts.map +1 -0
  200. package/lib/testUtils.js +111 -0
  201. package/lib/testUtils.js.map +1 -0
  202. package/lib/transaction.d.ts +43 -0
  203. package/lib/transaction.d.ts.map +1 -0
  204. package/lib/transaction.js +124 -0
  205. package/lib/transaction.js.map +1 -0
  206. package/lib/types.d.ts +111 -0
  207. package/lib/types.d.ts.map +1 -0
  208. package/lib/types.js +3 -0
  209. package/lib/types.js.map +1 -0
  210. package/lib-es/__tests__/adapters.unit.test.d.ts +2 -0
  211. package/lib-es/__tests__/adapters.unit.test.d.ts.map +1 -0
  212. package/lib-es/__tests__/adapters.unit.test.js +450 -0
  213. package/lib-es/__tests__/adapters.unit.test.js.map +1 -0
  214. package/lib-es/__tests__/broadcast.unit.test.d.ts +2 -0
  215. package/lib-es/__tests__/broadcast.unit.test.d.ts.map +1 -0
  216. package/lib-es/__tests__/broadcast.unit.test.js +153 -0
  217. package/lib-es/__tests__/broadcast.unit.test.js.map +1 -0
  218. package/lib-es/__tests__/buildOptimisticOperation.unit.test.d.ts +2 -0
  219. package/lib-es/__tests__/buildOptimisticOperation.unit.test.d.ts.map +1 -0
  220. package/lib-es/__tests__/buildOptimisticOperation.unit.test.js +161 -0
  221. package/lib-es/__tests__/buildOptimisticOperation.unit.test.js.map +1 -0
  222. package/lib-es/__tests__/createTransaction.unit.test.d.ts +2 -0
  223. package/lib-es/__tests__/createTransaction.unit.test.d.ts.map +1 -0
  224. package/lib-es/__tests__/createTransaction.unit.test.js +45 -0
  225. package/lib-es/__tests__/createTransaction.unit.test.js.map +1 -0
  226. package/lib-es/__tests__/deviceTransactionConfig.unit.test.d.ts +2 -0
  227. package/lib-es/__tests__/deviceTransactionConfig.unit.test.d.ts.map +1 -0
  228. package/lib-es/__tests__/deviceTransactionConfig.unit.test.js +226 -0
  229. package/lib-es/__tests__/deviceTransactionConfig.unit.test.js.map +1 -0
  230. package/lib-es/__tests__/estimateMaxSpendable.unit.test.d.ts +2 -0
  231. package/lib-es/__tests__/estimateMaxSpendable.unit.test.d.ts.map +1 -0
  232. package/lib-es/__tests__/estimateMaxSpendable.unit.test.js +117 -0
  233. package/lib-es/__tests__/estimateMaxSpendable.unit.test.js.map +1 -0
  234. package/lib-es/__tests__/gasTracker/index.unit.test.d.ts +2 -0
  235. package/lib-es/__tests__/gasTracker/index.unit.test.d.ts.map +1 -0
  236. package/lib-es/__tests__/gasTracker/index.unit.test.js +33 -0
  237. package/lib-es/__tests__/gasTracker/index.unit.test.js.map +1 -0
  238. package/lib-es/__tests__/gasTracker/ledger.unit.test.d.ts +2 -0
  239. package/lib-es/__tests__/gasTracker/ledger.unit.test.d.ts.map +1 -0
  240. package/lib-es/__tests__/gasTracker/ledger.unit.test.js +105 -0
  241. package/lib-es/__tests__/gasTracker/ledger.unit.test.js.map +1 -0
  242. package/lib-es/__tests__/getTransactionStatus.unit.test.d.ts +2 -0
  243. package/lib-es/__tests__/getTransactionStatus.unit.test.d.ts.map +1 -0
  244. package/lib-es/__tests__/getTransactionStatus.unit.test.js +211 -0
  245. package/lib-es/__tests__/getTransactionStatus.unit.test.js.map +1 -0
  246. package/lib-es/__tests__/hw-getAddress.unit.test.d.ts +2 -0
  247. package/lib-es/__tests__/hw-getAddress.unit.test.d.ts.map +1 -0
  248. package/lib-es/__tests__/hw-getAddress.unit.test.js +42 -0
  249. package/lib-es/__tests__/hw-getAddress.unit.test.js.map +1 -0
  250. package/lib-es/__tests__/logic.unit.test.d.ts +2 -0
  251. package/lib-es/__tests__/logic.unit.test.d.ts.map +1 -0
  252. package/lib-es/__tests__/logic.unit.test.js +268 -0
  253. package/lib-es/__tests__/logic.unit.test.js.map +1 -0
  254. package/lib-es/__tests__/preload.unit.test.d.ts +2 -0
  255. package/lib-es/__tests__/preload.unit.test.d.ts.map +1 -0
  256. package/lib-es/__tests__/preload.unit.test.js +121 -0
  257. package/lib-es/__tests__/preload.unit.test.js.map +1 -0
  258. package/lib-es/__tests__/prepareTransaction.unit.test.d.ts +2 -0
  259. package/lib-es/__tests__/prepareTransaction.unit.test.d.ts.map +1 -0
  260. package/lib-es/__tests__/prepareTransaction.unit.test.js +220 -0
  261. package/lib-es/__tests__/prepareTransaction.unit.test.js.map +1 -0
  262. package/lib-es/__tests__/rpc.unit.test.d.ts +2 -0
  263. package/lib-es/__tests__/rpc.unit.test.d.ts.map +1 -0
  264. package/lib-es/__tests__/rpc.unit.test.js +416 -0
  265. package/lib-es/__tests__/rpc.unit.test.js.map +1 -0
  266. package/lib-es/__tests__/signOperation.unit.test.d.ts +2 -0
  267. package/lib-es/__tests__/signOperation.unit.test.d.ts.map +1 -0
  268. package/lib-es/__tests__/signOperation.unit.test.js +132 -0
  269. package/lib-es/__tests__/signOperation.unit.test.js.map +1 -0
  270. package/lib-es/__tests__/synchronization.unit.test.d.ts +2 -0
  271. package/lib-es/__tests__/synchronization.unit.test.d.ts.map +1 -0
  272. package/lib-es/__tests__/synchronization.unit.test.js +471 -0
  273. package/lib-es/__tests__/synchronization.unit.test.js.map +1 -0
  274. package/lib-es/__tests__/transaction.unit.test.d.ts +2 -0
  275. package/lib-es/__tests__/transaction.unit.test.d.ts.map +1 -0
  276. package/lib-es/__tests__/transaction.unit.test.js +173 -0
  277. package/lib-es/__tests__/transaction.unit.test.js.map +1 -0
  278. package/lib-es/abis/erc20.abi.json +222 -0
  279. package/lib-es/abis/optimismGasPriceOracle.abi.json +252 -0
  280. package/lib-es/adapters.d.ts +21 -0
  281. package/lib-es/adapters.d.ts.map +1 -0
  282. package/lib-es/adapters.js +109 -0
  283. package/lib-es/adapters.js.map +1 -0
  284. package/lib-es/api/explorer/etherscan.d.ts +24 -0
  285. package/lib-es/api/explorer/etherscan.d.ts.map +1 -0
  286. package/lib-es/api/explorer/etherscan.js +84 -0
  287. package/lib-es/api/explorer/etherscan.js.map +1 -0
  288. package/lib-es/api/explorer/index.d.ts +26 -0
  289. package/lib-es/api/explorer/index.d.ts.map +1 -0
  290. package/lib-es/api/explorer/index.js +16 -0
  291. package/lib-es/api/explorer/index.js.map +1 -0
  292. package/lib-es/api/gasTracker/index.d.ts +13 -0
  293. package/lib-es/api/gasTracker/index.d.ts.map +1 -0
  294. package/lib-es/api/gasTracker/index.js +17 -0
  295. package/lib-es/api/gasTracker/index.js.map +1 -0
  296. package/lib-es/api/gasTracker/ledger.d.ts +9 -0
  297. package/lib-es/api/gasTracker/ledger.d.ts.map +1 -0
  298. package/lib-es/api/gasTracker/ledger.js +83 -0
  299. package/lib-es/api/gasTracker/ledger.js.map +1 -0
  300. package/lib-es/api/rpc/index.d.ts +3 -0
  301. package/lib-es/api/rpc/index.d.ts.map +1 -0
  302. package/lib-es/api/rpc/index.js +4 -0
  303. package/lib-es/api/rpc/index.js.map +1 -0
  304. package/lib-es/api/rpc/rpc.common.d.ts +93 -0
  305. package/lib-es/api/rpc/rpc.common.d.ts.map +1 -0
  306. package/lib-es/api/rpc/rpc.common.js +267 -0
  307. package/lib-es/api/rpc/rpc.common.js.map +1 -0
  308. package/lib-es/api/rpc/rpc.native.d.ts +6 -0
  309. package/lib-es/api/rpc/rpc.native.d.ts.map +1 -0
  310. package/lib-es/api/rpc/rpc.native.js +7 -0
  311. package/lib-es/api/rpc/rpc.native.js.map +1 -0
  312. package/lib-es/bridge/js.d.ts +11 -0
  313. package/lib-es/bridge/js.d.ts.map +1 -0
  314. package/lib-es/bridge/js.js +49 -0
  315. package/lib-es/bridge/js.js.map +1 -0
  316. package/lib-es/bridge.integration.test.d.ts +14 -0
  317. package/lib-es/bridge.integration.test.d.ts.map +1 -0
  318. package/lib-es/bridge.integration.test.js +79 -0
  319. package/lib-es/bridge.integration.test.js.map +1 -0
  320. package/lib-es/broadcast.d.ts +8 -0
  321. package/lib-es/broadcast.d.ts.map +1 -0
  322. package/lib-es/broadcast.js +21 -0
  323. package/lib-es/broadcast.js.map +1 -0
  324. package/lib-es/buildOptimisticOperation.d.ts +16 -0
  325. package/lib-es/buildOptimisticOperation.d.ts.map +1 -0
  326. package/lib-es/buildOptimisticOperation.js +71 -0
  327. package/lib-es/buildOptimisticOperation.js.map +1 -0
  328. package/lib-es/cli-transaction.d.ts +2 -0
  329. package/lib-es/cli-transaction.d.ts.map +1 -0
  330. package/lib-es/cli-transaction.js +6 -0
  331. package/lib-es/cli-transaction.js.map +1 -0
  332. package/lib-es/createTransaction.d.ts +9 -0
  333. package/lib-es/createTransaction.d.ts.map +1 -0
  334. package/lib-es/createTransaction.js +25 -0
  335. package/lib-es/createTransaction.js.map +1 -0
  336. package/lib-es/datasets/ethereum.scanAccounts.1.d.ts +7 -0
  337. package/lib-es/datasets/ethereum.scanAccounts.1.d.ts.map +1 -0
  338. package/lib-es/datasets/ethereum.scanAccounts.1.js +49 -0
  339. package/lib-es/datasets/ethereum.scanAccounts.1.js.map +1 -0
  340. package/lib-es/datasets/ethereum1.d.ts +3 -0
  341. package/lib-es/datasets/ethereum1.d.ts.map +1 -0
  342. package/lib-es/datasets/ethereum1.js +19 -0
  343. package/lib-es/datasets/ethereum1.js.map +1 -0
  344. package/lib-es/datasets/ethereum2.d.ts +3 -0
  345. package/lib-es/datasets/ethereum2.d.ts.map +1 -0
  346. package/lib-es/datasets/ethereum2.js +19 -0
  347. package/lib-es/datasets/ethereum2.js.map +1 -0
  348. package/lib-es/datasets/ethereum_classic.d.ts +5 -0
  349. package/lib-es/datasets/ethereum_classic.d.ts.map +1 -0
  350. package/lib-es/datasets/ethereum_classic.js +67 -0
  351. package/lib-es/datasets/ethereum_classic.js.map +1 -0
  352. package/lib-es/deviceTransactionConfig.d.ts +15 -0
  353. package/lib-es/deviceTransactionConfig.d.ts.map +1 -0
  354. package/lib-es/deviceTransactionConfig.js +42 -0
  355. package/lib-es/deviceTransactionConfig.js.map +1 -0
  356. package/lib-es/errors.d.ts +16 -0
  357. package/lib-es/errors.d.ts.map +1 -0
  358. package/lib-es/errors.js +8 -0
  359. package/lib-es/errors.js.map +1 -0
  360. package/lib-es/estimateMaxSpendable.d.ts +4 -0
  361. package/lib-es/estimateMaxSpendable.d.ts.map +1 -0
  362. package/lib-es/estimateMaxSpendable.js +19 -0
  363. package/lib-es/estimateMaxSpendable.js.map +1 -0
  364. package/lib-es/getTransactionStatus.d.ts +23 -0
  365. package/lib-es/getTransactionStatus.d.ts.map +1 -0
  366. package/lib-es/getTransactionStatus.js +125 -0
  367. package/lib-es/getTransactionStatus.js.map +1 -0
  368. package/lib-es/hw-getAddress.d.ts +6 -0
  369. package/lib-es/hw-getAddress.d.ts.map +1 -0
  370. package/lib-es/hw-getAddress.js +23 -0
  371. package/lib-es/hw-getAddress.js.map +1 -0
  372. package/lib-es/logic.d.ts +31 -0
  373. package/lib-es/logic.d.ts.map +1 -0
  374. package/lib-es/logic.js +119 -0
  375. package/lib-es/logic.js.map +1 -0
  376. package/lib-es/preload.d.ts +6 -0
  377. package/lib-es/preload.d.ts.map +1 -0
  378. package/lib-es/preload.js +49 -0
  379. package/lib-es/preload.js.map +1 -0
  380. package/lib-es/prepareTransaction.d.ts +26 -0
  381. package/lib-es/prepareTransaction.d.ts.map +1 -0
  382. package/lib-es/prepareTransaction.js +118 -0
  383. package/lib-es/prepareTransaction.js.map +1 -0
  384. package/lib-es/signOperation.d.ts +18 -0
  385. package/lib-es/signOperation.d.ts.map +1 -0
  386. package/lib-es/signOperation.js +83 -0
  387. package/lib-es/signOperation.js.map +1 -0
  388. package/lib-es/signer.d.ts +27 -0
  389. package/lib-es/signer.d.ts.map +1 -0
  390. package/lib-es/signer.js +2 -0
  391. package/lib-es/signer.js.map +1 -0
  392. package/lib-es/specs.d.ts +3 -0
  393. package/lib-es/specs.d.ts.map +1 -0
  394. package/lib-es/specs.js +233 -0
  395. package/lib-es/specs.js.map +1 -0
  396. package/lib-es/speculos-deviceActions.d.ts +8 -0
  397. package/lib-es/speculos-deviceActions.d.ts.map +1 -0
  398. package/lib-es/speculos-deviceActions.js +63 -0
  399. package/lib-es/speculos-deviceActions.js.map +1 -0
  400. package/lib-es/synchronization.d.ts +27 -0
  401. package/lib-es/synchronization.d.ts.map +1 -0
  402. package/lib-es/synchronization.js +212 -0
  403. package/lib-es/synchronization.js.map +1 -0
  404. package/lib-es/testUtils.d.ts +6 -0
  405. package/lib-es/testUtils.d.ts.map +1 -0
  406. package/lib-es/testUtils.js +102 -0
  407. package/lib-es/testUtils.js.map +1 -0
  408. package/lib-es/transaction.d.ts +43 -0
  409. package/lib-es/transaction.d.ts.map +1 -0
  410. package/lib-es/transaction.js +112 -0
  411. package/lib-es/transaction.js.map +1 -0
  412. package/lib-es/types.d.ts +111 -0
  413. package/lib-es/types.d.ts.map +1 -0
  414. package/lib-es/types.js +2 -0
  415. package/lib-es/types.js.map +1 -0
  416. package/package.json +8 -23
  417. package/src/__tests__/adapters.unit.test.ts +22 -52
  418. package/src/__tests__/broadcast.unit.test.ts +9 -27
  419. package/src/__tests__/buildOptimisticOperation.unit.test.ts +4 -4
  420. package/src/__tests__/deviceTransactionConfig.unit.test.ts +7 -7
  421. package/src/__tests__/estimateMaxSpendable.unit.test.ts +2 -4
  422. package/src/__tests__/gasTracker/index.unit.test.ts +36 -0
  423. package/src/__tests__/gasTracker/ledger.unit.test.ts +108 -0
  424. package/src/__tests__/getTransactionStatus.unit.test.ts +35 -40
  425. package/src/__tests__/hw-getAddress.unit.test.ts +15 -2
  426. package/src/__tests__/logic.unit.test.ts +25 -72
  427. package/src/__tests__/preload.unit.test.ts +3 -9
  428. package/src/__tests__/prepareTransaction.unit.test.ts +131 -76
  429. package/src/__tests__/rpc.unit.test.ts +46 -80
  430. package/src/__tests__/signOperation.unit.test.ts +27 -25
  431. package/src/__tests__/synchronization.unit.test.ts +101 -153
  432. package/src/__tests__/transaction.unit.test.ts +6 -14
  433. package/src/adapters.ts +8 -18
  434. package/src/api/{etherscan.ts → explorer/etherscan.ts} +14 -29
  435. package/src/api/explorer/index.ts +34 -0
  436. package/src/api/gasTracker/index.ts +31 -0
  437. package/src/api/gasTracker/ledger.ts +103 -0
  438. package/src/api/{rpc.common.ts → rpc/rpc.common.ts} +41 -64
  439. package/src/bridge/js.ts +15 -22
  440. package/src/bridge.integration.test.ts +3 -10
  441. package/src/broadcast.ts +3 -7
  442. package/src/buildOptimisticOperation.ts +7 -17
  443. package/src/cli-transaction.ts +1 -7
  444. package/src/createTransaction.ts +14 -15
  445. package/src/deviceTransactionConfig.ts +1 -1
  446. package/src/errors.ts +6 -0
  447. package/src/estimateMaxSpendable.ts +14 -11
  448. package/src/getTransactionStatus.ts +41 -52
  449. package/src/hw-getAddress.ts +18 -19
  450. package/src/logic.ts +5 -15
  451. package/src/preload.ts +6 -16
  452. package/src/prepareTransaction.ts +30 -31
  453. package/src/signOperation.ts +57 -69
  454. package/src/signer.ts +35 -0
  455. package/src/specs.ts +27 -52
  456. package/src/speculos-deviceActions.ts +56 -65
  457. package/src/synchronization.ts +21 -60
  458. package/src/testUtils.ts +5 -19
  459. package/src/transaction.ts +6 -10
  460. package/src/types.ts +6 -0
  461. /package/src/api/{rpc.ts → rpc/index.ts} +0 -0
  462. /package/src/api/{rpc.native.ts → rpc/rpc.native.ts} +0 -0
@@ -0,0 +1,233 @@
1
+ import expect from "expect";
2
+ import invariant from "invariant";
3
+ import sample from "lodash/sample";
4
+ import { DeviceModelId } from "@ledgerhq/devices";
5
+ import { cryptocurrenciesById } from "@ledgerhq/cryptoassets/currencies";
6
+ import { botTest, genericTestDestination, pickSiblings } from "@ledgerhq/coin-framework/bot/specs";
7
+ import { getCryptoCurrencyById, parseCurrencyUnit, } from "@ledgerhq/coin-framework/currencies/index";
8
+ import { acceptTransaction } from "./speculos-deviceActions";
9
+ const testTimeout = 10 * 60 * 1000;
10
+ const ETH_UNIT = { code: "ETH", name: "ETH", magnitude: 18 };
11
+ const MBTC_UNIT = { name: "mBTC", code: "mBTC", magnitude: 5 };
12
+ const minBalancePerCurrencyId = {
13
+ arbitrum: parseCurrencyUnit(ETH_UNIT, "0.001"),
14
+ arbitrum_goerli: parseCurrencyUnit(ETH_UNIT, "0.001"),
15
+ optimism: parseCurrencyUnit(ETH_UNIT, "0.001"),
16
+ optimism_goerli: parseCurrencyUnit(ETH_UNIT, "0.001"),
17
+ boba: parseCurrencyUnit(ETH_UNIT, "0.001"),
18
+ metis: parseCurrencyUnit(ETH_UNIT, "0.01"),
19
+ moonriver: parseCurrencyUnit(ETH_UNIT, "0.1"),
20
+ rsk: parseCurrencyUnit(MBTC_UNIT, "0.05"),
21
+ };
22
+ /**
23
+ * Method in charge of verifying that both the recipient and sender of a *coin* transaction
24
+ * have received/lost the expected amount and have now the right balances
25
+ *
26
+ * ⚠️ Some blockchains specific rules are included
27
+ */
28
+ const testCoinDestination = (args) => {
29
+ const { sendingAccount } = args;
30
+ const { currency } = sendingAccount;
31
+ // Because Arbitrum is an L2, gas is used in a specific way to ensure both the L2 and the L1 are getting paid.
32
+ // But as of right now the `arbiscan.io` API is only returning the proposed gas price of
33
+ // the transaction and not the effectively used gas price, which might differ.
34
+ // This leads to not being able to correctly cost an operation and
35
+ // therefore makes it impossible infer the sender's balance
36
+ if (["arbitrum", "arbitrum_goerli"].includes(currency.id)) {
37
+ return;
38
+ }
39
+ return genericTestDestination(args);
40
+ };
41
+ /**
42
+ * Method in charge of verifying the balance of a coin account after
43
+ * the transaction has been confirmed
44
+ *
45
+ * ⚠️ Some blockchains specific rules are included
46
+ */
47
+ const testCoinBalance = ({ account, accountBeforeTransaction, operation, }) => {
48
+ // Optimism works in a way where a transaction as a L2 cost and a L1 settlement cost
49
+ // The explorer API is not capable of returning the L1 cost, therefore
50
+ // the operation value will always be less than what
51
+ // has been removed from the account balance
52
+ //
53
+ // Remark is also true for Abritrum but because of the arbiscan API not returning the
54
+ // effectively used gas but the "bid"/proposition of gas of the transaction
55
+ // resulting in inconsistencies regarding the cumulated value of a tx.
56
+ // value + gasLimit * gasPrice <-- gasPrice can be wrong here.
57
+ const underValuedFeesCurrencies = ["optimism", "optimism_goerli"];
58
+ const overValuedFeesCurrencies = ["arbitrum", "arbitrum_goerli"];
59
+ const currenciesWithFlakyBehaviour = [...underValuedFeesCurrencies, ...overValuedFeesCurrencies];
60
+ // Classic test verifying exactly the balance
61
+ if (!currenciesWithFlakyBehaviour.includes(account.currency.id)) {
62
+ botTest("account balance moved with operation value", () => expect(account.balance.toString()).toBe(accountBeforeTransaction.balance.minus(operation.value).toString()));
63
+ }
64
+ else {
65
+ // fallback test verifying the balance moved between the maximum and minimum possible values of the operation
66
+ botTest("account balance moved at least operation value and less than operation value plus fees", () => {
67
+ // If the fee is undervalued like it is for optimism for example
68
+ // the only doable check is to verify that the account
69
+ // has lost *at least* the operation value + fee
70
+ if (underValuedFeesCurrencies.includes(account.currency.id)) {
71
+ const maxBalance = accountBeforeTransaction.balance.minus(operation.value.minus(operation.fee));
72
+ expect({
73
+ lessThanMaxBalance: account.balance.lte(maxBalance),
74
+ }).toEqual({
75
+ lessThanMaxBalance: true,
76
+ });
77
+ }
78
+ // If the fee is overvalue like it is for arbitrum for example
79
+ // we make sure the account has now a balance between
80
+ // previous balance minus only operation value &
81
+ // previous balance minus operation value + fee
82
+ if (overValuedFeesCurrencies.includes(account.currency.id)) {
83
+ const minBalance = accountBeforeTransaction.balance.minus(operation.value);
84
+ const maxBalance = accountBeforeTransaction.balance.minus(operation.value.minus(operation.fee));
85
+ expect({
86
+ greaterThanMinBalance: account.balance.gte(minBalance),
87
+ lessThanMaxBalance: account.balance.lte(maxBalance),
88
+ }).toEqual({
89
+ greaterThanMinBalance: true,
90
+ lessThanMaxBalance: true,
91
+ });
92
+ }
93
+ });
94
+ }
95
+ };
96
+ const transactionCheck = (currencyId) => ({ maxSpendable }) => {
97
+ const currency = getCryptoCurrencyById(currencyId);
98
+ invariant(maxSpendable.gt(minBalancePerCurrencyId[currency.id] || parseCurrencyUnit(currency.units[0], "1")), `${currencyId} balance is too low`);
99
+ };
100
+ const evmBasicMutations = ({ maxAccount }) => [
101
+ {
102
+ name: "move 50%",
103
+ maxRun: 2,
104
+ testDestination: testCoinDestination,
105
+ transaction: ({ account, siblings, bridge, maxSpendable }) => {
106
+ const sibling = pickSiblings(siblings, maxAccount);
107
+ const recipient = sibling.freshAddress;
108
+ const amount = maxSpendable.div(2).integerValue();
109
+ return {
110
+ transaction: bridge.createTransaction(account),
111
+ updates: [
112
+ {
113
+ recipient,
114
+ amount,
115
+ },
116
+ ],
117
+ };
118
+ },
119
+ test: ({ account, accountBeforeTransaction, operation, transaction, status, optimisticOperation, }) => {
120
+ // workaround for buggy explorer behavior (nodes desync)
121
+ invariant(Date.now() - operation.date.getTime() > 60000, "operation time to be older than 60s");
122
+ const estimatedGas = transaction.gasLimit.times(transaction.gasPrice || transaction.maxFeePerGas || 0);
123
+ botTest("operation fee is not exceeding estimated gas", () => expect(operation.fee.toNumber()).toBeLessThanOrEqual(estimatedGas.toNumber()));
124
+ testCoinBalance({
125
+ account,
126
+ accountBeforeTransaction,
127
+ operation,
128
+ transaction,
129
+ status,
130
+ optimisticOperation,
131
+ });
132
+ },
133
+ },
134
+ {
135
+ name: "send max",
136
+ maxRun: 1,
137
+ testDestination: testCoinDestination,
138
+ transaction: ({ account, siblings, bridge }) => {
139
+ const sibling = pickSiblings(siblings, maxAccount);
140
+ const recipient = sibling.freshAddress;
141
+ return {
142
+ transaction: bridge.createTransaction(account),
143
+ updates: [
144
+ {
145
+ recipient,
146
+ },
147
+ {
148
+ useAllAmount: true,
149
+ },
150
+ ],
151
+ };
152
+ },
153
+ test: ({ account, accountBeforeTransaction, operation, transaction, status, optimisticOperation, }) => {
154
+ // workaround for buggy explorer behavior (nodes desync)
155
+ invariant(Date.now() - operation.date.getTime() > 60000, "operation time to be older than 60s");
156
+ const estimatedGas = transaction.gasLimit.times(transaction.gasPrice || transaction.maxFeePerGas || 0);
157
+ botTest("operation fee is not exceeding estimated gas", () => expect(operation.fee.toNumber()).toBeLessThanOrEqual(estimatedGas.toNumber()));
158
+ testCoinBalance({
159
+ account,
160
+ accountBeforeTransaction,
161
+ operation,
162
+ transaction,
163
+ status,
164
+ optimisticOperation,
165
+ });
166
+ },
167
+ },
168
+ {
169
+ name: "move some ERC20",
170
+ maxRun: 1,
171
+ transaction: ({ account, siblings, bridge }) => {
172
+ const erc20Account = sample((account.subAccounts || []).filter(a => a.balance.gt(0)));
173
+ invariant(erc20Account, "no erc20 account");
174
+ const sibling = pickSiblings(siblings, 3);
175
+ const recipient = sibling.freshAddress;
176
+ return {
177
+ transaction: bridge.createTransaction(account),
178
+ updates: [
179
+ {
180
+ recipient,
181
+ subAccountId: erc20Account.id,
182
+ },
183
+ Math.random() < 0.5
184
+ ? {
185
+ useAllAmount: true,
186
+ }
187
+ : {
188
+ amount: erc20Account.balance.times(Math.random()).integerValue(),
189
+ },
190
+ ],
191
+ };
192
+ },
193
+ test: ({ accountBeforeTransaction, account, transaction, operation }) => {
194
+ var _a;
195
+ // workaround for buggy explorer behavior (nodes desync)
196
+ invariant(Date.now() - operation.date.getTime() > 60000, "operation time to be older than 60s");
197
+ invariant(accountBeforeTransaction.subAccounts, "sub accounts before");
198
+ const erc20accountBefore = (_a = accountBeforeTransaction.subAccounts) === null || _a === void 0 ? void 0 : _a.find(s => s.id === transaction.subAccountId);
199
+ invariant(erc20accountBefore, "erc20 acc was here before");
200
+ invariant(account.subAccounts, "sub accounts");
201
+ const erc20account = account.subAccounts.find(s => s.id === transaction.subAccountId);
202
+ invariant(erc20account, "erc20 acc is still here");
203
+ if (transaction.useAllAmount) {
204
+ botTest("erc20 account is empty", () => expect(erc20account.balance.toString()).toBe("0"));
205
+ }
206
+ else {
207
+ botTest("account balance moved with tx amount", () => expect(erc20account.balance.toString()).toBe(erc20accountBefore.balance.minus(transaction.amount).toString()));
208
+ }
209
+ },
210
+ },
211
+ ];
212
+ export default Object.values(cryptocurrenciesById)
213
+ .filter(currency => currency.family === "evm")
214
+ .reduce((acc, currency) => {
215
+ // @ts-expect-error FIXME: fix typings
216
+ acc[currency.id] = {
217
+ name: currency.name,
218
+ currency,
219
+ appQuery: {
220
+ model: DeviceModelId.nanoS,
221
+ appName: "Ethereum",
222
+ appVersion: "1.10.2",
223
+ },
224
+ testTimeout,
225
+ transactionCheck: transactionCheck(currency.id),
226
+ mutations: evmBasicMutations({
227
+ maxAccount: 3,
228
+ }),
229
+ genericDeviceAction: acceptTransaction,
230
+ };
231
+ return acc;
232
+ }, {});
233
+ //# sourceMappingURL=specs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specs.js","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { DeviceAction } from "@ledgerhq/coin-framework/bot/types";
2
+ import type { Transaction } from "./types";
3
+ export declare const acceptTransaction: DeviceAction<Transaction, any>;
4
+ declare const _default: {
5
+ acceptTransaction: DeviceAction<Transaction, any>;
6
+ };
7
+ export default _default;
8
+ //# sourceMappingURL=speculos-deviceActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speculos-deviceActions.d.ts","sourceRoot":"","sources":["../src/speculos-deviceActions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAM3C,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,WAAW,EAAE,GAAG,CAwD3D,CAAC;;;;AAEH,wBAEE"}
@@ -0,0 +1,63 @@
1
+ import { findSubAccountById } from "@ledgerhq/coin-framework/account/index";
2
+ import { deviceActionFlow, formatDeviceAmount, SpeculosButton, } from "@ledgerhq/coin-framework/bot/specs";
3
+ // FIXME: fix types
4
+ const maxFeesExpectedValue = ({ account, status }) => formatDeviceAmount(account.currency, status.estimatedFees);
5
+ export const acceptTransaction = deviceActionFlow({
6
+ steps: [
7
+ {
8
+ title: "Review",
9
+ button: SpeculosButton.RIGHT,
10
+ },
11
+ {
12
+ title: "Type",
13
+ button: SpeculosButton.RIGHT,
14
+ },
15
+ {
16
+ title: "Amount",
17
+ button: SpeculosButton.RIGHT,
18
+ expectedValue: ({ account, status, transaction }) => {
19
+ const subAccount = findSubAccountById(account, transaction.subAccountId || "");
20
+ if (subAccount && subAccount.type === "TokenAccount") {
21
+ return formatDeviceAmount(subAccount.token, status.amount);
22
+ }
23
+ return formatDeviceAmount(account.currency, status.amount);
24
+ },
25
+ },
26
+ {
27
+ title: "Contract",
28
+ button: SpeculosButton.RIGHT,
29
+ },
30
+ {
31
+ title: "Network",
32
+ button: SpeculosButton.RIGHT,
33
+ },
34
+ {
35
+ title: "Max fees",
36
+ button: SpeculosButton.RIGHT,
37
+ expectedValue: maxFeesExpectedValue,
38
+ },
39
+ {
40
+ // Legacy (ETC..)
41
+ title: "Max Fees",
42
+ button: SpeculosButton.RIGHT,
43
+ expectedValue: maxFeesExpectedValue,
44
+ },
45
+ {
46
+ title: "Address",
47
+ button: SpeculosButton.RIGHT,
48
+ expectedValue: ({ transaction }) => transaction.recipient,
49
+ },
50
+ {
51
+ title: "Accept",
52
+ button: SpeculosButton.BOTH,
53
+ },
54
+ {
55
+ title: "Approve",
56
+ button: SpeculosButton.BOTH,
57
+ },
58
+ ],
59
+ });
60
+ export default {
61
+ acceptTransaction,
62
+ };
63
+ //# sourceMappingURL=speculos-deviceActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speculos-deviceActions.js","sourceRoot":"","sources":["../src/speculos-deviceActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,oCAAoC,CAAC;AAI5C,mBAAmB;AACnB,MAAM,oBAAoB,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAiC,EAAE,EAAE,CAClF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AAE7D,MAAM,CAAC,MAAM,iBAAiB,GAAmC,gBAAgB,CAAC;IAChF,KAAK,EAAE;QACL;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,cAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE;gBAClD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;gBAE/E,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE;oBACpD,OAAO,kBAAkB,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;iBAC5D;gBAED,OAAO,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7D,CAAC;SACF;QACD;YACE,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,cAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,oBAAoB;SACpC;QACD;YACE,iBAAiB;YACjB,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,cAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,oBAAoB;SACpC;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,cAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;SAC1D;QACD;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,cAAc,CAAC,IAAI;SAC5B;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,cAAc,CAAC,IAAI;SAC5B;KACF;CACF,CAAC,CAAC;AAEH,eAAe;IACb,iBAAiB;CAClB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { AccountShapeInfo, GetAccountShape } from "@ledgerhq/coin-framework/bridge/jsHelpers";
2
+ import { CryptoCurrency, TokenCurrency } from "@ledgerhq/types-cryptoassets";
3
+ import { Account, Operation, SubAccount } from "@ledgerhq/types-live";
4
+ /**
5
+ * Main synchronization process
6
+ * Get the main Account and the potential TokenAccounts linked to it
7
+ */
8
+ export declare const getAccountShape: GetAccountShape;
9
+ /**
10
+ * Getting all token related operations in order to provide TokenAccounts
11
+ */
12
+ export declare const getSubAccounts: (infos: AccountShapeInfo, accountId: string, shouldSyncFromScratch?: boolean) => Promise<Partial<SubAccount>[]>;
13
+ /**
14
+ * Fetch the balance for a token and creates a TokenAccount based on this and the provided operations
15
+ */
16
+ export declare const getSubAccountShape: (currency: CryptoCurrency, parentId: string, token: TokenCurrency, operations: Operation[]) => Promise<Partial<SubAccount>>;
17
+ /**
18
+ * Get a finalized operation depending on it status (confirmed or not)
19
+ */
20
+ export declare const getOperationStatus: (currency: CryptoCurrency, op: Operation) => Promise<Operation | null>;
21
+ /**
22
+ * After each sync, it might be necessary to remove pending operations
23
+ * inside of subAccounts.
24
+ */
25
+ export declare const postSync: (initial: Account, synced: Account) => Account;
26
+ export declare const sync: (initialAccount: Account, syncConfig: import("@ledgerhq/types-live").SyncConfig) => import("rxjs").Observable<(arg0: Account) => Account>;
27
+ //# sourceMappingURL=synchronization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synchronization.d.ts","sourceRoot":"","sources":["../src/synchronization.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,gBAAgB,EAChB,eAAe,EAGhB,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAMtE;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,eAwE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,UAClB,gBAAgB,aACZ,MAAM,sCAEhB,QAAQ,QAAQ,UAAU,CAAC,EAAE,CAwD/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,aACnB,cAAc,YACd,MAAM,SACT,aAAa,cACR,SAAS,EAAE,KACtB,QAAQ,QAAQ,UAAU,CAAC,CAmB7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,aACnB,cAAc,MACpB,SAAS,KACZ,QAAQ,SAAS,GAAG,IAAI,CAkC1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,YAAa,OAAO,UAAU,OAAO,KAAG,OAgC5D,CAAC;AAEF,eAAO,MAAM,IAAI,2IAIf,CAAC"}
@@ -0,0 +1,212 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { decodeAccountId, emptyHistoryCache, encodeAccountId, encodeTokenAccountId, shouldRetainPendingOperation, } from "@ledgerhq/coin-framework/account/index";
11
+ import { makeSync, mergeOps, } from "@ledgerhq/coin-framework/bridge/jsHelpers";
12
+ import { log } from "@ledgerhq/logs";
13
+ import { getBalanceAndBlock, getBlock, getTokenBalance, getTransaction } from "./api/rpc";
14
+ import { getSyncHash, mergeSubAccounts } from "./logic";
15
+ import { getExplorerApi } from "./api/explorer";
16
+ /**
17
+ * Main synchronization process
18
+ * Get the main Account and the potential TokenAccounts linked to it
19
+ */
20
+ export const getAccountShape = (infos) => __awaiter(void 0, void 0, void 0, function* () {
21
+ var _a, _b;
22
+ const { initialAccount, address, derivationMode, currency } = infos;
23
+ const { blockHeight, balance } = yield getBalanceAndBlock(currency, address);
24
+ const accountId = encodeAccountId({
25
+ type: "js",
26
+ version: "2",
27
+ currencyId: currency.id,
28
+ xpubOrAddress: address,
29
+ derivationMode,
30
+ });
31
+ const syncHash = getSyncHash(currency);
32
+ // Due to some changes (as of now: new/updated tokens) we could need to force a sync from 0
33
+ const shouldSyncFromScratch = syncHash !== (initialAccount === null || initialAccount === void 0 ? void 0 : initialAccount.syncHash);
34
+ // Get the latest stored operation to know where to start the new sync
35
+ const latestSyncedOperation = shouldSyncFromScratch
36
+ ? null
37
+ : (_a = initialAccount === null || initialAccount === void 0 ? void 0 : initialAccount.operations) === null || _a === void 0 ? void 0 : _a.reduce((acc, curr) => {
38
+ if (!acc) {
39
+ return curr;
40
+ }
41
+ return ((acc === null || acc === void 0 ? void 0 : acc.blockHeight) || 0) > ((curr === null || curr === void 0 ? void 0 : curr.blockHeight) || 0) ? acc : curr;
42
+ }, null);
43
+ // This method could not be working if the integration doesn't have an API to retreive the operations
44
+ const lastCoinOperations = yield (() => __awaiter(void 0, void 0, void 0, function* () {
45
+ try {
46
+ const { getLastCoinOperations } = getExplorerApi(currency);
47
+ return yield getLastCoinOperations(currency, address, accountId, (latestSyncedOperation === null || latestSyncedOperation === void 0 ? void 0 : latestSyncedOperation.blockHeight) || 0);
48
+ }
49
+ catch (e) {
50
+ log("EVM Family", "Failed to get latest transactions", {
51
+ address,
52
+ currency,
53
+ error: e,
54
+ });
55
+ throw e;
56
+ }
57
+ }))();
58
+ const newSubAccounts = yield getSubAccounts(infos, accountId, shouldSyncFromScratch);
59
+ // Merging potential new subAccouns while preserving the reference (returned value will be initialAccount.subAccounts)
60
+ const subAccounts = mergeSubAccounts(initialAccount, newSubAccounts);
61
+ // Trying to confirm pending operations that we are sure of
62
+ // because they were made in the live
63
+ // Useful for integrations without explorers
64
+ const confirmPendingOperations = ((_b = initialAccount === null || initialAccount === void 0 ? void 0 : initialAccount.pendingOperations) === null || _b === void 0 ? void 0 : _b.map(op => getOperationStatus(currency, op))) || [];
65
+ const confirmedOperations = yield Promise.all(confirmPendingOperations).then(ops => ops.filter((op) => !!op));
66
+ const newOperations = [...confirmedOperations, ...lastCoinOperations];
67
+ const operations = mergeOps((initialAccount === null || initialAccount === void 0 ? void 0 : initialAccount.operations) || [], newOperations);
68
+ const lastSyncDate = new Date();
69
+ return {
70
+ type: "Account",
71
+ id: accountId,
72
+ syncHash,
73
+ balance,
74
+ spendableBalance: balance,
75
+ blockHeight,
76
+ operations,
77
+ operationsCount: operations.length,
78
+ subAccounts,
79
+ lastSyncDate,
80
+ };
81
+ });
82
+ /**
83
+ * Getting all token related operations in order to provide TokenAccounts
84
+ */
85
+ export const getSubAccounts = (infos, accountId, shouldSyncFromScratch = false) => __awaiter(void 0, void 0, void 0, function* () {
86
+ var _c;
87
+ const { initialAccount, address, currency } = infos;
88
+ // Get the latest operation from all subaccounts
89
+ const latestSyncedOperation = shouldSyncFromScratch
90
+ ? null
91
+ : (_c = initialAccount === null || initialAccount === void 0 ? void 0 : initialAccount.subAccounts) === null || _c === void 0 ? void 0 : _c.flatMap(({ operations }) => operations).reduce((acc, curr) => {
92
+ if (!acc) {
93
+ return curr;
94
+ }
95
+ return ((acc === null || acc === void 0 ? void 0 : acc.blockHeight) || 0) > ((curr === null || curr === void 0 ? void 0 : curr.blockHeight) || 0) ? acc : curr;
96
+ }, null);
97
+ // This method could not be working if the integration doesn't have an API to retreive the operations
98
+ const lastERC20OperationsAndCurrencies = yield (() => __awaiter(void 0, void 0, void 0, function* () {
99
+ try {
100
+ const { getLastTokenOperations } = getExplorerApi(currency);
101
+ return yield getLastTokenOperations(currency, address, accountId, (latestSyncedOperation === null || latestSyncedOperation === void 0 ? void 0 : latestSyncedOperation.blockHeight) || 0);
102
+ }
103
+ catch (e) {
104
+ log("EVM Family", "Failed to get latest ERC20 transactions", {
105
+ address,
106
+ currency,
107
+ error: e,
108
+ });
109
+ throw e;
110
+ }
111
+ }))();
112
+ // Creating a Map of Operations by TokenCurrencies in order to know which TokenAccounts should be synced as well
113
+ const erc20OperationsByToken = lastERC20OperationsAndCurrencies.reduce((acc, { tokenCurrency, operation }) => {
114
+ var _a;
115
+ if (!tokenCurrency)
116
+ return acc;
117
+ if (!acc.has(tokenCurrency)) {
118
+ acc.set(tokenCurrency, []);
119
+ }
120
+ (_a = acc.get(tokenCurrency)) === null || _a === void 0 ? void 0 : _a.push(operation);
121
+ return acc;
122
+ }, new Map());
123
+ // Fetching all TokenAccounts possible and providing already filtered operations
124
+ const subAccountsPromises = [];
125
+ for (const [token, ops] of erc20OperationsByToken.entries()) {
126
+ subAccountsPromises.push(getSubAccountShape(currency, accountId, token, ops));
127
+ }
128
+ return Promise.all(subAccountsPromises);
129
+ });
130
+ /**
131
+ * Fetch the balance for a token and creates a TokenAccount based on this and the provided operations
132
+ */
133
+ export const getSubAccountShape = (currency, parentId, token, operations) => __awaiter(void 0, void 0, void 0, function* () {
134
+ const { xpubOrAddress: address } = decodeAccountId(parentId);
135
+ const tokenAccountId = encodeTokenAccountId(parentId, token);
136
+ const balance = yield getTokenBalance(currency, address, token.contractAddress);
137
+ return {
138
+ type: "TokenAccount",
139
+ id: tokenAccountId,
140
+ parentId,
141
+ token,
142
+ balance,
143
+ spendableBalance: balance,
144
+ creationDate: new Date(),
145
+ operations,
146
+ operationsCount: operations.length,
147
+ pendingOperations: [],
148
+ balanceHistoryCache: emptyHistoryCache,
149
+ swapHistory: [],
150
+ };
151
+ });
152
+ /**
153
+ * Get a finalized operation depending on it status (confirmed or not)
154
+ */
155
+ export const getOperationStatus = (currency, op) => __awaiter(void 0, void 0, void 0, function* () {
156
+ try {
157
+ const { blockNumber: blockHeight, blockHash, timestamp, nonce, } = yield getTransaction(currency, op.hash);
158
+ if (!blockHeight) {
159
+ throw new Error("getOperationStatus: Transaction has no block");
160
+ }
161
+ const date = yield (() => __awaiter(void 0, void 0, void 0, function* () {
162
+ // timestamp can be missing depending on the node
163
+ if (timestamp) {
164
+ return new Date(timestamp * 1000);
165
+ }
166
+ // Without timestamp, we directly look for the block
167
+ const { timestamp: blockTimestamp } = yield getBlock(currency, blockHeight);
168
+ return new Date(blockTimestamp * 1000);
169
+ }))();
170
+ return Object.assign(Object.assign({}, op), { transactionSequenceNumber: nonce, blockHash,
171
+ blockHeight,
172
+ date });
173
+ }
174
+ catch (e) {
175
+ return null;
176
+ }
177
+ });
178
+ /**
179
+ * After each sync, it might be necessary to remove pending operations
180
+ * inside of subAccounts.
181
+ */
182
+ export const postSync = (initial, synced) => {
183
+ var _a;
184
+ // Set of hashes from the pending operations of the main account
185
+ const coinPendingOperationsHashes = new Set();
186
+ for (const coinPendingOperation of synced.pendingOperations) {
187
+ coinPendingOperationsHashes.add(coinPendingOperation.hash);
188
+ }
189
+ // Set of ids from the already existing subAccount from previous sync
190
+ const initialSubAccountsIds = new Set();
191
+ for (const subAccount of initial.subAccounts || []) {
192
+ initialSubAccountsIds.add(subAccount.id);
193
+ }
194
+ return Object.assign(Object.assign({}, synced), { subAccounts: (_a = synced.subAccounts) === null || _a === void 0 ? void 0 : _a.map(subAccount => {
195
+ // If the subAccount is new, just return the freshly synced subAccount
196
+ if (!initialSubAccountsIds.has(subAccount.id))
197
+ return subAccount;
198
+ return Object.assign(Object.assign({}, subAccount), { pendingOperations: subAccount.pendingOperations.filter(tokenPendingOperation =>
199
+ // if the pending operation got removed from the main account, remove it as well
200
+ coinPendingOperationsHashes.has(tokenPendingOperation.hash) &&
201
+ // if the transaction has been confirmed, remove it
202
+ !subAccount.operations.some(op => op.hash === tokenPendingOperation.hash) &&
203
+ // common rule for pending operations retention in the live
204
+ shouldRetainPendingOperation(synced, tokenPendingOperation)) });
205
+ }) });
206
+ };
207
+ export const sync = makeSync({
208
+ getAccountShape,
209
+ postSync,
210
+ shouldMergeOps: false,
211
+ });
212
+ //# sourceMappingURL=synchronization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synchronization.js","sourceRoot":"","sources":["../src/synchronization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { CryptoCurrency, TokenCurrency } from "@ledgerhq/types-cryptoassets";
2
+ import { Account, Operation, SubAccount, TokenAccount } from "@ledgerhq/types-live";
3
+ export declare const makeAccount: (address: string, currency: CryptoCurrency, subAccounts?: SubAccount[]) => Account;
4
+ export declare const makeTokenAccount: (address: string, tokenCurrency: TokenCurrency) => TokenAccount;
5
+ export declare const makeOperation: (partialOp?: Partial<Operation>) => Operation;
6
+ //# sourceMappingURL=testUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpF,eAAO,MAAM,WAAW,YACb,MAAM,YACL,cAAc,gBACX,UAAU,EAAE,KACxB,OAyDF,CAAC;AAEF,eAAO,MAAM,gBAAgB,YAAa,MAAM,iBAAiB,aAAa,KAAG,YAkChF,CAAC;AAEF,eAAO,MAAM,aAAa,eAAgB,QAAQ,SAAS,CAAC,KAAG,SAuB9D,CAAC"}