@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,88 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.buildSignOperation = exports.applyEIP155 = void 0;
13
+ const rxjs_1 = require("rxjs");
14
+ const hw_app_eth_1 = require("@ledgerhq/hw-app-eth");
15
+ const buildOptimisticOperation_1 = require("./buildOptimisticOperation");
16
+ const prepareTransaction_1 = require("./prepareTransaction");
17
+ const transaction_1 = require("./transaction");
18
+ /**
19
+ * Transforms the ECDSA signature paremeter v hexadecimal string received
20
+ * from the nano into an EIP155 compatible number.
21
+ *
22
+ * Reminder EIP155 transforms v this way:
23
+ * v = chainId * 2 + 35
24
+ * (+ parity 1 or 0)
25
+ */
26
+ const applyEIP155 = (vAsHex, chainId) => {
27
+ const v = parseInt(vAsHex, 16);
28
+ if (v === 0 || v === 1) {
29
+ // if v is 0 or 1, it's already representing parity
30
+ return chainId * 2 + 35 + v;
31
+ }
32
+ else if (v === 27 || v === 28) {
33
+ const parity = v - 27; // transforming v into 0 or 1 to become the parity
34
+ return chainId * 2 + 35 + parity;
35
+ }
36
+ // When chainId is lower than 109, hw-app-eth *can* return a v with EIP155 already applied
37
+ // e.g. bsc's chainId is 56 -> v then equals to 147/148
38
+ // optimism's chainId is 10 -> v equals to 55/56
39
+ // ethereum's chainId is 1 -> v equals to 0/1
40
+ // goerli's chainId is 5 -> v equals to 0/1
41
+ return v;
42
+ };
43
+ exports.applyEIP155 = applyEIP155;
44
+ /**
45
+ * Sign Transaction with Ledger hardware
46
+ */
47
+ const buildSignOperation = (signerContext) => ({ account, deviceId, transaction, }) => new rxjs_1.Observable(o => {
48
+ function main() {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ const preparedTransaction = yield (0, prepareTransaction_1.prepareForSignOperation)(account, transaction);
51
+ const serializedTxHexString = (0, transaction_1.getSerializedTransaction)(preparedTransaction).slice(2); // Remove 0x prefix
52
+ // Configure type of resolutions necessary for the clear signing
53
+ const resolutionConfig = {
54
+ externalPlugins: true,
55
+ erc20: true,
56
+ domains: transaction.recipientDomain ? [transaction.recipientDomain] : [],
57
+ };
58
+ // Look for resolutions for external plugins and ERC20
59
+ const resolution = yield hw_app_eth_1.ledgerService.resolveTransaction(serializedTxHexString, {}, resolutionConfig);
60
+ o.next({
61
+ type: "device-signature-requested",
62
+ });
63
+ const sig = (yield signerContext(deviceId, signer =>
64
+ // Request signature on the nano
65
+ signer.signTransaction(account.freshAddressPath, serializedTxHexString, resolution)));
66
+ o.next({ type: "device-signature-granted" }); // Signature is done
67
+ const { chainId = 0 } = account.currency.ethereumLikeInfo || {};
68
+ // Create a new serialized tx with the signature now
69
+ const signature = yield (0, transaction_1.getSerializedTransaction)(preparedTransaction, {
70
+ r: "0x" + sig.r,
71
+ s: "0x" + sig.s,
72
+ v: (0, exports.applyEIP155)(sig.v, chainId),
73
+ });
74
+ const operation = (0, buildOptimisticOperation_1.buildOptimisticOperation)(account, Object.assign(Object.assign({}, transaction), { nonce: preparedTransaction.nonce }));
75
+ o.next({
76
+ type: "signed",
77
+ signedOperation: {
78
+ operation,
79
+ signature,
80
+ expirationDate: null,
81
+ },
82
+ });
83
+ });
84
+ }
85
+ main().then(() => o.complete(), e => o.error(e));
86
+ });
87
+ exports.buildSignOperation = buildSignOperation;
88
+ //# sourceMappingURL=signOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { DomainServiceResolution } from "@ledgerhq/domain-service/types";
2
+ export type EvmAddress = {
3
+ publicKey: string;
4
+ address: string;
5
+ chainCode?: string;
6
+ };
7
+ export type EvmSignature = {
8
+ s: string;
9
+ v: string;
10
+ r: string;
11
+ };
12
+ type LedgerEthTransactionResolution = {
13
+ erc20Tokens: Array<string>;
14
+ nfts: Array<string>;
15
+ externalPlugin: Array<{
16
+ payload: string;
17
+ signature: string;
18
+ }>;
19
+ plugin: Array<string>;
20
+ domains: DomainServiceResolution[];
21
+ };
22
+ export interface EvmSigner {
23
+ getAddress(path: string, boolDisplay?: boolean, boolChaincode?: boolean): Promise<EvmAddress>;
24
+ signTransaction(path: string, rawTxHex: string, resolution?: LedgerEthTransactionResolution | null): Promise<EvmSignature>;
25
+ }
26
+ export {};
27
+ //# sourceMappingURL=signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAGF,KAAK,8BAA8B,GAAG;IAEpC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEpB,cAAc,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE9D,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEtB,OAAO,EAAE,uBAAuB,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9F,eAAe,CACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,8BAA8B,GAAG,IAAI,GACjD,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1B"}
package/lib/signer.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":""}
package/lib/specs.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ declare const _default: {};
2
+ export default _default;
3
+ //# sourceMappingURL=specs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specs.d.ts","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":";AA0SA,wBAoBS"}
package/lib/specs.js ADDED
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const expect_1 = __importDefault(require("expect"));
7
+ const invariant_1 = __importDefault(require("invariant"));
8
+ const sample_1 = __importDefault(require("lodash/sample"));
9
+ const devices_1 = require("@ledgerhq/devices");
10
+ const currencies_1 = require("@ledgerhq/cryptoassets/currencies");
11
+ const specs_1 = require("@ledgerhq/coin-framework/bot/specs");
12
+ const index_1 = require("@ledgerhq/coin-framework/currencies/index");
13
+ const speculos_deviceActions_1 = require("./speculos-deviceActions");
14
+ const testTimeout = 10 * 60 * 1000;
15
+ const ETH_UNIT = { code: "ETH", name: "ETH", magnitude: 18 };
16
+ const MBTC_UNIT = { name: "mBTC", code: "mBTC", magnitude: 5 };
17
+ const minBalancePerCurrencyId = {
18
+ arbitrum: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.001"),
19
+ arbitrum_goerli: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.001"),
20
+ optimism: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.001"),
21
+ optimism_goerli: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.001"),
22
+ boba: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.001"),
23
+ metis: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.01"),
24
+ moonriver: (0, index_1.parseCurrencyUnit)(ETH_UNIT, "0.1"),
25
+ rsk: (0, index_1.parseCurrencyUnit)(MBTC_UNIT, "0.05"),
26
+ };
27
+ /**
28
+ * Method in charge of verifying that both the recipient and sender of a *coin* transaction
29
+ * have received/lost the expected amount and have now the right balances
30
+ *
31
+ * ⚠️ Some blockchains specific rules are included
32
+ */
33
+ const testCoinDestination = (args) => {
34
+ const { sendingAccount } = args;
35
+ const { currency } = sendingAccount;
36
+ // Because Arbitrum is an L2, gas is used in a specific way to ensure both the L2 and the L1 are getting paid.
37
+ // But as of right now the `arbiscan.io` API is only returning the proposed gas price of
38
+ // the transaction and not the effectively used gas price, which might differ.
39
+ // This leads to not being able to correctly cost an operation and
40
+ // therefore makes it impossible infer the sender's balance
41
+ if (["arbitrum", "arbitrum_goerli"].includes(currency.id)) {
42
+ return;
43
+ }
44
+ return (0, specs_1.genericTestDestination)(args);
45
+ };
46
+ /**
47
+ * Method in charge of verifying the balance of a coin account after
48
+ * the transaction has been confirmed
49
+ *
50
+ * ⚠️ Some blockchains specific rules are included
51
+ */
52
+ const testCoinBalance = ({ account, accountBeforeTransaction, operation, }) => {
53
+ // Optimism works in a way where a transaction as a L2 cost and a L1 settlement cost
54
+ // The explorer API is not capable of returning the L1 cost, therefore
55
+ // the operation value will always be less than what
56
+ // has been removed from the account balance
57
+ //
58
+ // Remark is also true for Abritrum but because of the arbiscan API not returning the
59
+ // effectively used gas but the "bid"/proposition of gas of the transaction
60
+ // resulting in inconsistencies regarding the cumulated value of a tx.
61
+ // value + gasLimit * gasPrice <-- gasPrice can be wrong here.
62
+ const underValuedFeesCurrencies = ["optimism", "optimism_goerli"];
63
+ const overValuedFeesCurrencies = ["arbitrum", "arbitrum_goerli"];
64
+ const currenciesWithFlakyBehaviour = [...underValuedFeesCurrencies, ...overValuedFeesCurrencies];
65
+ // Classic test verifying exactly the balance
66
+ if (!currenciesWithFlakyBehaviour.includes(account.currency.id)) {
67
+ (0, specs_1.botTest)("account balance moved with operation value", () => (0, expect_1.default)(account.balance.toString()).toBe(accountBeforeTransaction.balance.minus(operation.value).toString()));
68
+ }
69
+ else {
70
+ // fallback test verifying the balance moved between the maximum and minimum possible values of the operation
71
+ (0, specs_1.botTest)("account balance moved at least operation value and less than operation value plus fees", () => {
72
+ // If the fee is undervalued like it is for optimism for example
73
+ // the only doable check is to verify that the account
74
+ // has lost *at least* the operation value + fee
75
+ if (underValuedFeesCurrencies.includes(account.currency.id)) {
76
+ const maxBalance = accountBeforeTransaction.balance.minus(operation.value.minus(operation.fee));
77
+ (0, expect_1.default)({
78
+ lessThanMaxBalance: account.balance.lte(maxBalance),
79
+ }).toEqual({
80
+ lessThanMaxBalance: true,
81
+ });
82
+ }
83
+ // If the fee is overvalue like it is for arbitrum for example
84
+ // we make sure the account has now a balance between
85
+ // previous balance minus only operation value &
86
+ // previous balance minus operation value + fee
87
+ if (overValuedFeesCurrencies.includes(account.currency.id)) {
88
+ const minBalance = accountBeforeTransaction.balance.minus(operation.value);
89
+ const maxBalance = accountBeforeTransaction.balance.minus(operation.value.minus(operation.fee));
90
+ (0, expect_1.default)({
91
+ greaterThanMinBalance: account.balance.gte(minBalance),
92
+ lessThanMaxBalance: account.balance.lte(maxBalance),
93
+ }).toEqual({
94
+ greaterThanMinBalance: true,
95
+ lessThanMaxBalance: true,
96
+ });
97
+ }
98
+ });
99
+ }
100
+ };
101
+ const transactionCheck = (currencyId) => ({ maxSpendable }) => {
102
+ const currency = (0, index_1.getCryptoCurrencyById)(currencyId);
103
+ (0, invariant_1.default)(maxSpendable.gt(minBalancePerCurrencyId[currency.id] || (0, index_1.parseCurrencyUnit)(currency.units[0], "1")), `${currencyId} balance is too low`);
104
+ };
105
+ const evmBasicMutations = ({ maxAccount }) => [
106
+ {
107
+ name: "move 50%",
108
+ maxRun: 2,
109
+ testDestination: testCoinDestination,
110
+ transaction: ({ account, siblings, bridge, maxSpendable }) => {
111
+ const sibling = (0, specs_1.pickSiblings)(siblings, maxAccount);
112
+ const recipient = sibling.freshAddress;
113
+ const amount = maxSpendable.div(2).integerValue();
114
+ return {
115
+ transaction: bridge.createTransaction(account),
116
+ updates: [
117
+ {
118
+ recipient,
119
+ amount,
120
+ },
121
+ ],
122
+ };
123
+ },
124
+ test: ({ account, accountBeforeTransaction, operation, transaction, status, optimisticOperation, }) => {
125
+ // workaround for buggy explorer behavior (nodes desync)
126
+ (0, invariant_1.default)(Date.now() - operation.date.getTime() > 60000, "operation time to be older than 60s");
127
+ const estimatedGas = transaction.gasLimit.times(transaction.gasPrice || transaction.maxFeePerGas || 0);
128
+ (0, specs_1.botTest)("operation fee is not exceeding estimated gas", () => (0, expect_1.default)(operation.fee.toNumber()).toBeLessThanOrEqual(estimatedGas.toNumber()));
129
+ testCoinBalance({
130
+ account,
131
+ accountBeforeTransaction,
132
+ operation,
133
+ transaction,
134
+ status,
135
+ optimisticOperation,
136
+ });
137
+ },
138
+ },
139
+ {
140
+ name: "send max",
141
+ maxRun: 1,
142
+ testDestination: testCoinDestination,
143
+ transaction: ({ account, siblings, bridge }) => {
144
+ const sibling = (0, specs_1.pickSiblings)(siblings, maxAccount);
145
+ const recipient = sibling.freshAddress;
146
+ return {
147
+ transaction: bridge.createTransaction(account),
148
+ updates: [
149
+ {
150
+ recipient,
151
+ },
152
+ {
153
+ useAllAmount: true,
154
+ },
155
+ ],
156
+ };
157
+ },
158
+ test: ({ account, accountBeforeTransaction, operation, transaction, status, optimisticOperation, }) => {
159
+ // workaround for buggy explorer behavior (nodes desync)
160
+ (0, invariant_1.default)(Date.now() - operation.date.getTime() > 60000, "operation time to be older than 60s");
161
+ const estimatedGas = transaction.gasLimit.times(transaction.gasPrice || transaction.maxFeePerGas || 0);
162
+ (0, specs_1.botTest)("operation fee is not exceeding estimated gas", () => (0, expect_1.default)(operation.fee.toNumber()).toBeLessThanOrEqual(estimatedGas.toNumber()));
163
+ testCoinBalance({
164
+ account,
165
+ accountBeforeTransaction,
166
+ operation,
167
+ transaction,
168
+ status,
169
+ optimisticOperation,
170
+ });
171
+ },
172
+ },
173
+ {
174
+ name: "move some ERC20",
175
+ maxRun: 1,
176
+ transaction: ({ account, siblings, bridge }) => {
177
+ const erc20Account = (0, sample_1.default)((account.subAccounts || []).filter(a => a.balance.gt(0)));
178
+ (0, invariant_1.default)(erc20Account, "no erc20 account");
179
+ const sibling = (0, specs_1.pickSiblings)(siblings, 3);
180
+ const recipient = sibling.freshAddress;
181
+ return {
182
+ transaction: bridge.createTransaction(account),
183
+ updates: [
184
+ {
185
+ recipient,
186
+ subAccountId: erc20Account.id,
187
+ },
188
+ Math.random() < 0.5
189
+ ? {
190
+ useAllAmount: true,
191
+ }
192
+ : {
193
+ amount: erc20Account.balance.times(Math.random()).integerValue(),
194
+ },
195
+ ],
196
+ };
197
+ },
198
+ test: ({ accountBeforeTransaction, account, transaction, operation }) => {
199
+ var _a;
200
+ // workaround for buggy explorer behavior (nodes desync)
201
+ (0, invariant_1.default)(Date.now() - operation.date.getTime() > 60000, "operation time to be older than 60s");
202
+ (0, invariant_1.default)(accountBeforeTransaction.subAccounts, "sub accounts before");
203
+ const erc20accountBefore = (_a = accountBeforeTransaction.subAccounts) === null || _a === void 0 ? void 0 : _a.find(s => s.id === transaction.subAccountId);
204
+ (0, invariant_1.default)(erc20accountBefore, "erc20 acc was here before");
205
+ (0, invariant_1.default)(account.subAccounts, "sub accounts");
206
+ const erc20account = account.subAccounts.find(s => s.id === transaction.subAccountId);
207
+ (0, invariant_1.default)(erc20account, "erc20 acc is still here");
208
+ if (transaction.useAllAmount) {
209
+ (0, specs_1.botTest)("erc20 account is empty", () => (0, expect_1.default)(erc20account.balance.toString()).toBe("0"));
210
+ }
211
+ else {
212
+ (0, specs_1.botTest)("account balance moved with tx amount", () => (0, expect_1.default)(erc20account.balance.toString()).toBe(erc20accountBefore.balance.minus(transaction.amount).toString()));
213
+ }
214
+ },
215
+ },
216
+ ];
217
+ exports.default = Object.values(currencies_1.cryptocurrenciesById)
218
+ .filter(currency => currency.family === "evm")
219
+ .reduce((acc, currency) => {
220
+ // @ts-expect-error FIXME: fix typings
221
+ acc[currency.id] = {
222
+ name: currency.name,
223
+ currency,
224
+ appQuery: {
225
+ model: devices_1.DeviceModelId.nanoS,
226
+ appName: "Ethereum",
227
+ appVersion: "1.10.2",
228
+ },
229
+ testTimeout,
230
+ transactionCheck: transactionCheck(currency.id),
231
+ mutations: evmBasicMutations({
232
+ maxAccount: 3,
233
+ }),
234
+ genericDeviceAction: speculos_deviceActions_1.acceptTransaction,
235
+ };
236
+ return acc;
237
+ }, {});
238
+ //# 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,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.acceptTransaction = void 0;
4
+ const index_1 = require("@ledgerhq/coin-framework/account/index");
5
+ const specs_1 = require("@ledgerhq/coin-framework/bot/specs");
6
+ // FIXME: fix types
7
+ const maxFeesExpectedValue = ({ account, status }) => (0, specs_1.formatDeviceAmount)(account.currency, status.estimatedFees);
8
+ exports.acceptTransaction = (0, specs_1.deviceActionFlow)({
9
+ steps: [
10
+ {
11
+ title: "Review",
12
+ button: specs_1.SpeculosButton.RIGHT,
13
+ },
14
+ {
15
+ title: "Type",
16
+ button: specs_1.SpeculosButton.RIGHT,
17
+ },
18
+ {
19
+ title: "Amount",
20
+ button: specs_1.SpeculosButton.RIGHT,
21
+ expectedValue: ({ account, status, transaction }) => {
22
+ const subAccount = (0, index_1.findSubAccountById)(account, transaction.subAccountId || "");
23
+ if (subAccount && subAccount.type === "TokenAccount") {
24
+ return (0, specs_1.formatDeviceAmount)(subAccount.token, status.amount);
25
+ }
26
+ return (0, specs_1.formatDeviceAmount)(account.currency, status.amount);
27
+ },
28
+ },
29
+ {
30
+ title: "Contract",
31
+ button: specs_1.SpeculosButton.RIGHT,
32
+ },
33
+ {
34
+ title: "Network",
35
+ button: specs_1.SpeculosButton.RIGHT,
36
+ },
37
+ {
38
+ title: "Max fees",
39
+ button: specs_1.SpeculosButton.RIGHT,
40
+ expectedValue: maxFeesExpectedValue,
41
+ },
42
+ {
43
+ // Legacy (ETC..)
44
+ title: "Max Fees",
45
+ button: specs_1.SpeculosButton.RIGHT,
46
+ expectedValue: maxFeesExpectedValue,
47
+ },
48
+ {
49
+ title: "Address",
50
+ button: specs_1.SpeculosButton.RIGHT,
51
+ expectedValue: ({ transaction }) => transaction.recipient,
52
+ },
53
+ {
54
+ title: "Accept",
55
+ button: specs_1.SpeculosButton.BOTH,
56
+ },
57
+ {
58
+ title: "Approve",
59
+ button: specs_1.SpeculosButton.BOTH,
60
+ },
61
+ ],
62
+ });
63
+ exports.default = {
64
+ acceptTransaction: exports.acceptTransaction,
65
+ };
66
+ //# sourceMappingURL=speculos-deviceActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speculos-deviceActions.js","sourceRoot":"","sources":["../src/speculos-deviceActions.ts"],"names":[],"mappings":";;;AAAA,kEAA4E;AAC5E,8DAI4C;AAI5C,mBAAmB;AACnB,MAAM,oBAAoB,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAiC,EAAE,EAAE,CAClF,IAAA,0BAAkB,EAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AAEhD,QAAA,iBAAiB,GAAmC,IAAA,wBAAgB,EAAC;IAChF,KAAK,EAAE;QACL;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,sBAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,sBAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,sBAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE;gBAClD,MAAM,UAAU,GAAG,IAAA,0BAAkB,EAAC,OAAO,EAAE,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;gBAE/E,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE;oBACpD,OAAO,IAAA,0BAAkB,EAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;iBAC5D;gBAED,OAAO,IAAA,0BAAkB,EAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7D,CAAC;SACF;QACD;YACE,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,sBAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,sBAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,sBAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,oBAAoB;SACpC;QACD;YACE,iBAAiB;YACjB,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,sBAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,oBAAoB;SACpC;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,sBAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;SAC1D;QACD;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,sBAAc,CAAC,IAAI;SAC5B;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,sBAAc,CAAC,IAAI;SAC5B;KACF;CACF,CAAC,CAAC;AAEH,kBAAe;IACb,iBAAiB,EAAjB,yBAAiB;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"}