@ledgerhq/coin-evm 0.2.1 → 0.2.2-nightly.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/.eslintrc.js +11 -46
  2. package/.turbo/turbo-build.log +1 -1
  3. package/CHANGELOG.md +36 -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,31 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
3
+ import { Account, SubAccount } from "@ledgerhq/types-live";
4
+ import { Transaction as EvmTransaction, EvmTransactionEIP1559, EvmTransactionLegacy } from "./types";
5
+ /**
6
+ * Helper to check if a legacy transaction has the right fee property
7
+ */
8
+ export declare const legacyTransactionHasFees: (tx: EvmTransactionLegacy) => boolean;
9
+ /**
10
+ * Helper to check if a legacy transaction has the right fee property
11
+ */
12
+ export declare const eip1559TransactionHasFees: (tx: EvmTransactionEIP1559) => boolean;
13
+ /**
14
+ * Helper to get total fee value for a tx depending on its type
15
+ */
16
+ export declare const getEstimatedFees: (tx: EvmTransaction) => BigNumber;
17
+ /**
18
+ * Helper returning the potential additional fees necessary for layer twos
19
+ * to settle the transaction on layer 1.
20
+ */
21
+ export declare const getAdditionalLayer2Fees: (currency: CryptoCurrency, transaction: EvmTransaction) => Promise<BigNumber | undefined>;
22
+ /**
23
+ * In charge of smartly merging sub accounts while maintaining references as much as possible
24
+ */
25
+ export declare const mergeSubAccounts: (initialAccount: Account | undefined, newSubAccounts: Partial<SubAccount>[]) => Array<Partial<SubAccount> | SubAccount>;
26
+ /**
27
+ * Method creating a hash that will help triggering or not a full synchronization on an account.
28
+ * As of now, it's checking if a token has been added, removed of changed regarding important properties
29
+ */
30
+ export declare const getSyncHash: (currency: CryptoCurrency) => string;
31
+ //# sourceMappingURL=logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../src/logic.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EACL,WAAW,IAAI,cAAc,EAC7B,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,wBAAwB,OAAQ,oBAAoB,KAAG,OACjB,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,yBAAyB,OAAQ,qBAAqB,KAAG,OACA,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,gBAAgB,OAAQ,cAAc,KAAG,SAKrD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,aACxB,cAAc,eACX,cAAc,KAC1B,QAAQ,SAAS,GAAG,SAAS,CAU/B,CAAC;AAcF;;GAEG;AACH,eAAO,MAAM,gBAAgB,mBACX,OAAO,GAAG,SAAS,kBACnB,QAAQ,UAAU,CAAC,EAAE,KACpC,MAAM,QAAQ,UAAU,CAAC,GAAG,UAAU,CAqDxC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,aAAc,cAAc,KAAG,MAOtD,CAAC"}
@@ -0,0 +1,119 @@
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 { ethers } from "ethers";
11
+ import BigNumber from "bignumber.js";
12
+ import { mergeOps } from "@ledgerhq/coin-framework/bridge/jsHelpers";
13
+ import { listTokensForCryptoCurrency } from "@ledgerhq/cryptoassets/tokens";
14
+ import { getOptimismAdditionalFees } from "./api/rpc/rpc.common";
15
+ /**
16
+ * Helper to check if a legacy transaction has the right fee property
17
+ */
18
+ export const legacyTransactionHasFees = (tx) => Boolean((!tx.type || tx.type < 2) && tx.gasPrice);
19
+ /**
20
+ * Helper to check if a legacy transaction has the right fee property
21
+ */
22
+ export const eip1559TransactionHasFees = (tx) => Boolean(tx.type === 2 && tx.maxFeePerGas && tx.maxPriorityFeePerGas);
23
+ /**
24
+ * Helper to get total fee value for a tx depending on its type
25
+ */
26
+ export const getEstimatedFees = (tx) => {
27
+ var _a, _b;
28
+ if (tx.type !== 2) {
29
+ return ((_a = tx.gasPrice) === null || _a === void 0 ? void 0 : _a.multipliedBy(tx.gasLimit)) || new BigNumber(0);
30
+ }
31
+ return ((_b = tx.maxFeePerGas) === null || _b === void 0 ? void 0 : _b.multipliedBy(tx.gasLimit)) || new BigNumber(0);
32
+ };
33
+ /**
34
+ * Helper returning the potential additional fees necessary for layer twos
35
+ * to settle the transaction on layer 1.
36
+ */
37
+ export const getAdditionalLayer2Fees = (currency, transaction) => __awaiter(void 0, void 0, void 0, function* () {
38
+ switch (currency.id) {
39
+ case "optimism":
40
+ case "optimism_goerli": {
41
+ const additionalFees = yield getOptimismAdditionalFees(currency, transaction);
42
+ return additionalFees;
43
+ }
44
+ default:
45
+ return;
46
+ }
47
+ });
48
+ /**
49
+ * List of properties of a sub account that can be updated when 2 "identical" accounts are found
50
+ */
51
+ const updatableSubAccountProperties = [
52
+ { name: "balance", isOps: false },
53
+ { name: "spendableBalance", isOps: false },
54
+ { name: "balanceHistoryCache", isOps: false },
55
+ { name: "swapHistory", isOps: false },
56
+ { name: "operations", isOps: true },
57
+ { name: "pendingOperations", isOps: true },
58
+ ];
59
+ /**
60
+ * In charge of smartly merging sub accounts while maintaining references as much as possible
61
+ */
62
+ export const mergeSubAccounts = (initialAccount, newSubAccounts) => {
63
+ var _a, _b;
64
+ const oldSubAccounts = initialAccount === null || initialAccount === void 0 ? void 0 : initialAccount.subAccounts;
65
+ if (!oldSubAccounts) {
66
+ return newSubAccounts;
67
+ }
68
+ // Creating a map of already existing sub accounts by id
69
+ const oldSubAccountsById = {};
70
+ for (const oldSubAccount of oldSubAccounts) {
71
+ oldSubAccountsById[oldSubAccount.id] = oldSubAccount;
72
+ }
73
+ // Looping on new sub accounts to compare them with already existing ones
74
+ // Already existing will be updated if necessary (see `updatableSubAccountProperties`)
75
+ // Fresh new sub accounts will be added/pushed after already existing
76
+ const newSubAccountsToAdd = [];
77
+ for (const newSubAccount of newSubAccounts) {
78
+ const duplicatedAccount = oldSubAccountsById[newSubAccount.id];
79
+ // If this sub account was not already in the initialAccount
80
+ if (!duplicatedAccount) {
81
+ // We'll add it later
82
+ newSubAccountsToAdd.push(newSubAccount);
83
+ continue;
84
+ }
85
+ const updates = {};
86
+ for (const { name, isOps } of updatableSubAccountProperties) {
87
+ if (!isOps) {
88
+ // @ts-expect-error FIXME: fix typings
89
+ if (newSubAccount[name] !== duplicatedAccount[name]) {
90
+ // @ts-expect-error FIXME: fix typings
91
+ updates[name] = newSubAccount[name];
92
+ }
93
+ }
94
+ else {
95
+ // @ts-expect-error FIXME: fix typings
96
+ updates[name] = mergeOps(duplicatedAccount[name], newSubAccount[name]);
97
+ }
98
+ }
99
+ // Updating the operationsCount in case the mergeOps changed it
100
+ updates.operationsCount =
101
+ ((_a = updates.operations) === null || _a === void 0 ? void 0 : _a.length) || ((_b = duplicatedAccount === null || duplicatedAccount === void 0 ? void 0 : duplicatedAccount.operations) === null || _b === void 0 ? void 0 : _b.length) || 0;
102
+ // Modifying the Map with the updated sub account with a new ref
103
+ oldSubAccountsById[newSubAccount.id] = Object.assign(Object.assign({}, duplicatedAccount), updates);
104
+ }
105
+ const updatedSubAccounts = Object.values(oldSubAccountsById);
106
+ return [...updatedSubAccounts, ...newSubAccountsToAdd];
107
+ };
108
+ /**
109
+ * Method creating a hash that will help triggering or not a full synchronization on an account.
110
+ * As of now, it's checking if a token has been added, removed of changed regarding important properties
111
+ */
112
+ export const getSyncHash = (currency) => {
113
+ const tokens = listTokensForCryptoCurrency(currency);
114
+ const basicTokensListString = tokens
115
+ .map(token => token.id + token.contractAddress + token.name + token.ticker + token.delisted)
116
+ .join("");
117
+ return ethers.utils.sha256(Buffer.from(basicTokensListString));
118
+ };
119
+ //# sourceMappingURL=logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logic.js","sourceRoot":"","sources":["../src/logic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ERC20Token } from "@ledgerhq/cryptoassets/types";
2
+ import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
3
+ export declare const fetchERC20Tokens: (currency: CryptoCurrency) => Promise<ERC20Token[]>;
4
+ export declare function preload(currency: CryptoCurrency): Promise<ERC20Token[]>;
5
+ export declare function hydrate(value: ERC20Token[] | null | undefined): void;
6
+ //# sourceMappingURL=preload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAM9D,eAAO,MAAM,gBAAgB,EAAE,CAC7B,QAAQ,EAAE,cAAc,KACrB,OAAO,CAAC,UAAU,EAAE,CAqBxB,CAAC;AAEF,wBAAsB,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAI7E;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAIpE"}
@@ -0,0 +1,49 @@
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 { log } from "@ledgerhq/logs";
11
+ import { addTokens, convertERC20 } from "@ledgerhq/cryptoassets/tokens";
12
+ import { tokens as tokensByChainId } from "@ledgerhq/cryptoassets/data/evm/index";
13
+ import network from "@ledgerhq/live-network/network";
14
+ import { getEnv } from "@ledgerhq/live-env";
15
+ export const fetchERC20Tokens = (currency) => __awaiter(void 0, void 0, void 0, function* () {
16
+ const { ethereumLikeInfo } = currency;
17
+ const url = `${getEnv("DYNAMIC_CAL_BASE_URL")}/evm/${(ethereumLikeInfo === null || ethereumLikeInfo === void 0 ? void 0 : ethereumLikeInfo.chainId) || 0}/erc20.json`;
18
+ const dynamicTokens = yield network({
19
+ method: "GET",
20
+ url,
21
+ })
22
+ .then(({ data }) => (data.length ? data : null))
23
+ .catch(e => {
24
+ log("error", "EVM Family: Couldn't fetch dynamic CAL tokens from " + url, e);
25
+ return null;
26
+ });
27
+ if (dynamicTokens)
28
+ return dynamicTokens;
29
+ // @ts-expect-error FIXME: fix typings
30
+ const tokens = tokensByChainId[(ethereumLikeInfo === null || ethereumLikeInfo === void 0 ? void 0 : ethereumLikeInfo.chainId) || ""];
31
+ if (tokens)
32
+ return tokens;
33
+ log("warning", `EVM Family: No tokens found in CAL for currency: ${currency.id}`, currency);
34
+ return [];
35
+ });
36
+ export function preload(currency) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ const erc20 = yield fetchERC20Tokens(currency);
39
+ addTokens(erc20.map(convertERC20));
40
+ return erc20;
41
+ });
42
+ }
43
+ export function hydrate(value) {
44
+ if (!Array.isArray(value))
45
+ return;
46
+ addTokens(value.map(convertERC20));
47
+ log("evm/preload", "hydrate " + value.length + " tokens");
48
+ }
49
+ //# sourceMappingURL=preload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.js","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGrC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,OAAO,MAAM,gCAAgC,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,gBAAgB,GAEA,CAAM,QAAQ,EAAC,EAAE;IAC5C,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;IAEtC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,KAAI,CAAC,aAAa,CAAC;IACjG,MAAM,aAAa,GAAwB,MAAM,OAAO,CAAC;QACvD,MAAM,EAAE,KAAK;QACb,GAAG;KACJ,CAAC;SACC,IAAI,CAAC,CAAC,EAAE,IAAI,EAA0B,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACvE,KAAK,CAAC,CAAC,CAAC,EAAE;QACT,GAAG,CAAC,OAAO,EAAE,qDAAqD,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACL,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,sCAAsC;IACtC,MAAM,MAAM,GAAG,eAAe,CAAC,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,KAAI,EAAE,CAAC,CAAC;IAChE,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,GAAG,CAAC,SAAS,EAAE,oDAAoD,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5F,OAAO,EAAE,CAAC;AACZ,CAAC,CAAA,CAAC;AAEF,MAAM,UAAgB,OAAO,CAAC,QAAwB;;QACpD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC/C,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;CAAA;AAED,MAAM,UAAU,OAAO,CAAC,KAAsC;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO;IAClC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IACnC,GAAG,CAAC,aAAa,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { Account, TokenAccount } from "@ledgerhq/types-live";
2
+ import { Transaction as EvmTransaction } from "./types";
3
+ /**
4
+ * Prepare basic coin transactions or smart contract interactions (other than live ERC20 transfers)
5
+ * Should be used for transactions coming from the wallet API
6
+ * Handling addition of gas limit
7
+ */
8
+ export declare const prepareCoinTransaction: (account: Account, typedTransaction: EvmTransaction) => Promise<EvmTransaction>;
9
+ /**
10
+ * Prepare ERC20 transactions.
11
+ * Handling addition of ERC20 transfer data and gas limit
12
+ */
13
+ export declare const prepareTokenTransaction: (account: Account, tokenAccount: TokenAccount, typedTransaction: EvmTransaction) => Promise<EvmTransaction>;
14
+ /**
15
+ * Method called to update a transaction into a state that would make it valid
16
+ * (E.g. Adding fees, add smart contract data, etc...)
17
+ */
18
+ export declare const prepareTransaction: (account: Account, transaction: EvmTransaction) => Promise<EvmTransaction>;
19
+ /**
20
+ * Prepare the transaction for the signOperation step.
21
+ * For now, used to changed the recipient for TokenAccount transfers
22
+ * with the smart contract address as recipient and add the nonce
23
+ * (which would change as well in the UI if it was done before that step)
24
+ */
25
+ export declare const prepareForSignOperation: (account: Account, transaction: EvmTransaction) => Promise<EvmTransaction>;
26
+ //# sourceMappingURL=prepareTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../src/prepareTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAM7D,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,SAAS,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YACxB,OAAO,oBACE,cAAc,KAC/B,QAAQ,cAAc,CAgDxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,YACzB,OAAO,gBACF,YAAY,oBACR,cAAc,KAC/B,QAAQ,cAAc,CAiCxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,YACpB,OAAO,eACH,cAAc,KAC1B,QAAQ,cAAc,CA4BxB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,YACzB,OAAO,eACH,cAAc,KAC1B,QAAQ,cAAc,CAkBxB,CAAC"}
@@ -0,0 +1,118 @@
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 { findSubAccountById } from "@ledgerhq/coin-framework/account/index";
11
+ import BigNumber from "bignumber.js";
12
+ import { getFeesEstimation, getGasEstimation, getTransactionCount } from "./api/rpc";
13
+ import { validateRecipient } from "./getTransactionStatus";
14
+ import { getAdditionalLayer2Fees, getEstimatedFees } from "./logic";
15
+ import { getTransactionData, getTypedTransaction } from "./transaction";
16
+ /**
17
+ * Prepare basic coin transactions or smart contract interactions (other than live ERC20 transfers)
18
+ * Should be used for transactions coming from the wallet API
19
+ * Handling addition of gas limit
20
+ */
21
+ export const prepareCoinTransaction = (account, typedTransaction) => __awaiter(void 0, void 0, void 0, function* () {
22
+ // A `useAllAmount` transaction is a specific case of the live, and because we're in the
23
+ // context of a coinTransaction, no smart contract should be involed
24
+ if (typedTransaction.useAllAmount) {
25
+ // Since a gas estimation is done by simulating the transaction, we can't know in advanced how much
26
+ // we should put in the simulation.
27
+ // But as a coin transaction (no smart contract) should always consumme the same amount of gas, no matter
28
+ // the amount of coin transfered, we can infer the gasLimit with any amount.
29
+ const gasLimit = yield getGasEstimation(account, Object.assign(Object.assign({}, typedTransaction), { amount: new BigNumber(0) }));
30
+ const draftTransaction = Object.assign(Object.assign({}, typedTransaction), { gasLimit });
31
+ const estimatedFees = getEstimatedFees(draftTransaction);
32
+ const additionalFees = yield getAdditionalLayer2Fees(account.currency, draftTransaction);
33
+ const amount = BigNumber.max(account.balance.minus(estimatedFees).minus(additionalFees || 0), 0);
34
+ return Object.assign(Object.assign({}, draftTransaction), { amount,
35
+ additionalFees });
36
+ }
37
+ const gasLimit = yield getGasEstimation(account, typedTransaction).catch(
38
+ // in case of a smart contract interaction, the gas estimation
39
+ // (which is transaction simulation by the node) can fail.
40
+ // E.g. A DApp is creating an invalid transaction, swaping more Tokens than the user actually have -> fail
41
+ // This value of 0 should be catched by `getTransactionStatus`
42
+ // and displayed in the UI as `set the gas manually`
43
+ () => new BigNumber(0));
44
+ const additionalFees = yield getAdditionalLayer2Fees(account.currency, Object.assign(Object.assign({}, typedTransaction), { gasLimit }));
45
+ return Object.assign(Object.assign({}, typedTransaction), { gasLimit,
46
+ additionalFees });
47
+ });
48
+ /**
49
+ * Prepare ERC20 transactions.
50
+ * Handling addition of ERC20 transfer data and gas limit
51
+ */
52
+ export const prepareTokenTransaction = (account, tokenAccount, typedTransaction) => __awaiter(void 0, void 0, void 0, function* () {
53
+ const [recipientErrors] = validateRecipient(account, typedTransaction);
54
+ const amount = typedTransaction.useAllAmount ? tokenAccount.balance : typedTransaction.amount;
55
+ const data = !Object.keys(recipientErrors).length
56
+ ? getTransactionData(Object.assign(Object.assign({}, typedTransaction), { amount }))
57
+ : undefined;
58
+ // As we're interacting with a smart contract,
59
+ // it's going to be the real recipient for the tx
60
+ const gasLimit = data
61
+ ? yield getGasEstimation(account, Object.assign(Object.assign({}, typedTransaction), { amount: new BigNumber(0), recipient: tokenAccount.token.contractAddress, // recipient is then the token smart contract
62
+ data })).catch(() => new BigNumber(0)) // this catch returning 0 should be handled by the `getTransactionStatus` method
63
+ : new BigNumber(0);
64
+ const additionalFees = yield getAdditionalLayer2Fees(account.currency, Object.assign(Object.assign({}, typedTransaction), { amount: new BigNumber(0), recipient: tokenAccount.token.contractAddress, // recipient is then the token smart contract
65
+ data,
66
+ gasLimit }));
67
+ // Recipient isn't changed here as it would change on the UI end as well
68
+ // The change will be handled by the `prepareForSignOperation` method
69
+ return Object.assign(Object.assign({}, typedTransaction), { amount,
70
+ data,
71
+ gasLimit,
72
+ additionalFees });
73
+ });
74
+ /**
75
+ * Method called to update a transaction into a state that would make it valid
76
+ * (E.g. Adding fees, add smart contract data, etc...)
77
+ */
78
+ export const prepareTransaction = (account, transaction) => __awaiter(void 0, void 0, void 0, function* () {
79
+ const { currency } = account;
80
+ // Get the current network status fees
81
+ const feeData = yield (() => __awaiter(void 0, void 0, void 0, function* () {
82
+ var _a, _b, _c, _d;
83
+ if (transaction.feesStrategy === "custom") {
84
+ return {
85
+ gasPrice: (_a = transaction.gasPrice) !== null && _a !== void 0 ? _a : null,
86
+ maxFeePerGas: (_b = transaction.maxFeePerGas) !== null && _b !== void 0 ? _b : null,
87
+ maxPriorityFeePerGas: (_c = transaction.maxPriorityFeePerGas) !== null && _c !== void 0 ? _c : null,
88
+ };
89
+ }
90
+ if (!transaction.feesStrategy) {
91
+ return getFeesEstimation(currency);
92
+ }
93
+ const gasOption = (_d = transaction.gasOptions) === null || _d === void 0 ? void 0 : _d[transaction.feesStrategy];
94
+ return gasOption !== null && gasOption !== void 0 ? gasOption : getFeesEstimation(currency);
95
+ }))();
96
+ const subAccount = findSubAccountById(account, transaction.subAccountId || "");
97
+ const isTokenTransaction = (subAccount === null || subAccount === void 0 ? void 0 : subAccount.type) === "TokenAccount";
98
+ const typedTransaction = getTypedTransaction(transaction, feeData);
99
+ return isTokenTransaction
100
+ ? yield prepareTokenTransaction(account, subAccount, typedTransaction)
101
+ : yield prepareCoinTransaction(account, typedTransaction);
102
+ });
103
+ /**
104
+ * Prepare the transaction for the signOperation step.
105
+ * For now, used to changed the recipient for TokenAccount transfers
106
+ * with the smart contract address as recipient and add the nonce
107
+ * (which would change as well in the UI if it was done before that step)
108
+ */
109
+ export const prepareForSignOperation = (account, transaction) => __awaiter(void 0, void 0, void 0, function* () {
110
+ const nonce = yield getTransactionCount(account.currency, account.freshAddress);
111
+ const subAccount = findSubAccountById(account, transaction.subAccountId || "");
112
+ const isTokenTransaction = (subAccount === null || subAccount === void 0 ? void 0 : subAccount.type) === "TokenAccount";
113
+ return isTokenTransaction
114
+ ? Object.assign(Object.assign({}, transaction), { amount: new BigNumber(0), recipient: subAccount.token.contractAddress, // recipient is then the token smart contract
115
+ // data as already been added by the `prepareTokenTransaction` method
116
+ nonce }) : Object.assign(Object.assign({}, transaction), { nonce });
117
+ });
118
+ //# sourceMappingURL=prepareTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../src/prepareTransaction.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAE5E,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGxE;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,OAAgB,EAChB,gBAAgC,EACP,EAAE;IAC3B,wFAAwF;IACxF,oEAAoE;IACpE,IAAI,gBAAgB,CAAC,YAAY,EAAE;QACjC,mGAAmG;QACnG,mCAAmC;QACnC,yGAAyG;QACzG,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,kCAC1C,gBAAgB,KACnB,MAAM,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,IACxB,CAAC;QACH,MAAM,gBAAgB,mCACjB,gBAAgB,KACnB,QAAQ,GACT,CAAC;QACF,MAAM,aAAa,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,cAAc,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAC1B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC,EAC/D,CAAC,CACF,CAAC;QAEF,uCACK,gBAAgB,KACnB,MAAM;YACN,cAAc,IACd;KACH;IAED,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,KAAK;IACtE,8DAA8D;IAC9D,0DAA0D;IAC1D,0GAA0G;IAC1G,8DAA8D;IAC9D,oDAAoD;IACpD,GAAG,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CACvB,CAAC;IACF,MAAM,cAAc,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,QAAQ,kCAChE,gBAAgB,KACnB,QAAQ,IACR,CAAC;IAEH,uCACK,gBAAgB,KACnB,QAAQ;QACR,cAAc,IACd;AACJ,CAAC,CAAA,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,OAAgB,EAChB,YAA0B,EAC1B,gBAAgC,EACP,EAAE;IAC3B,MAAM,CAAC,eAAe,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC;IAC9F,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM;QAC/C,CAAC,CAAC,kBAAkB,iCAAM,gBAAgB,KAAE,MAAM,IAAG;QACrD,CAAC,CAAC,SAAS,CAAC;IACd,8CAA8C;IAC9C,iDAAiD;IACjD,MAAM,QAAQ,GAAG,IAAI;QACnB,CAAC,CAAC,MAAM,gBAAgB,CAAC,OAAO,kCACzB,gBAAgB,KACnB,MAAM,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,EACxB,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,6CAA6C;YAC5F,IAAI,IACJ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,gFAAgF;QACnH,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,cAAc,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,QAAQ,kCAChE,gBAAgB,KACnB,MAAM,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,EACxB,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,6CAA6C;QAC5F,IAAI;QACJ,QAAQ,IACR,CAAC;IAEH,wEAAwE;IACxE,qEAAqE;IACrE,uCACK,gBAAgB,KACnB,MAAM;QACN,IAAI;QACJ,QAAQ;QACR,cAAc,IACd;AACJ,CAAC,CAAA,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAgB,EAChB,WAA2B,EACF,EAAE;IAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,sCAAsC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAS,EAAE;;QAChC,IAAI,WAAW,CAAC,YAAY,KAAK,QAAQ,EAAE;YACzC,OAAO;gBACL,QAAQ,EAAE,MAAA,WAAW,CAAC,QAAQ,mCAAI,IAAI;gBACtC,YAAY,EAAE,MAAA,WAAW,CAAC,YAAY,mCAAI,IAAI;gBAC9C,oBAAoB,EAAE,MAAA,WAAW,CAAC,oBAAoB,mCAAI,IAAI;aAC/D,CAAC;SACH;QAED,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;YAC7B,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;SACpC;QAED,MAAM,SAAS,GAAG,MAAA,WAAW,CAAC,UAAU,0CAAG,WAAW,CAAC,YAAY,CAAC,CAAC;QAErE,OAAO,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAA,CAAC,EAAE,CAAC;IAEL,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAC/E,MAAM,kBAAkB,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,MAAK,cAAc,CAAC;IAC/D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEnE,OAAO,kBAAkB;QACvB,CAAC,CAAC,MAAM,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,gBAAgB,CAAC;QACtE,CAAC,CAAC,MAAM,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAC9D,CAAC,CAAA,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,OAAgB,EAChB,WAA2B,EACF,EAAE;IAC3B,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAEhF,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAC/E,MAAM,kBAAkB,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,MAAK,cAAc,CAAC;IAE/D,OAAO,kBAAkB;QACvB,CAAC,iCACM,WAAW,KACd,MAAM,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,EACxB,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,eAAe,EAAE,6CAA6C;YAC1F,qEAAqE;YACrE,KAAK,IAET,CAAC,iCACM,WAAW,KACd,KAAK,GACN,CAAC;AACR,CAAC,CAAA,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { SignOperationFnSignature } from "@ledgerhq/types-live";
2
+ import { SignerContext } from "@ledgerhq/coin-framework/signer";
3
+ import { Transaction } from "./types";
4
+ import { EvmAddress, EvmSignature, EvmSigner } from "./signer";
5
+ /**
6
+ * Transforms the ECDSA signature paremeter v hexadecimal string received
7
+ * from the nano into an EIP155 compatible number.
8
+ *
9
+ * Reminder EIP155 transforms v this way:
10
+ * v = chainId * 2 + 35
11
+ * (+ parity 1 or 0)
12
+ */
13
+ export declare const applyEIP155: (vAsHex: string, chainId: number) => number;
14
+ /**
15
+ * Sign Transaction with Ledger hardware
16
+ */
17
+ export declare const buildSignOperation: (signerContext: SignerContext<EvmSigner, EvmAddress | EvmSignature>) => SignOperationFnSignature<Transaction>;
18
+ //# sourceMappingURL=signOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signOperation.d.ts","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,wBAAwB,EAGzB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAIhE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,WAAY,MAAM,WAAW,MAAM,KAAG,MAgB7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,kBAEZ,cAAc,SAAS,EAAE,UAAU,GAAG,YAAY,CAAC,KACjE,yBAAyB,WAAW,CAkEnC,CAAC"}
@@ -0,0 +1,83 @@
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 { Observable } from "rxjs";
11
+ import { ledgerService } from "@ledgerhq/hw-app-eth";
12
+ import { buildOptimisticOperation } from "./buildOptimisticOperation";
13
+ import { prepareForSignOperation } from "./prepareTransaction";
14
+ import { getSerializedTransaction } from "./transaction";
15
+ /**
16
+ * Transforms the ECDSA signature paremeter v hexadecimal string received
17
+ * from the nano into an EIP155 compatible number.
18
+ *
19
+ * Reminder EIP155 transforms v this way:
20
+ * v = chainId * 2 + 35
21
+ * (+ parity 1 or 0)
22
+ */
23
+ export const applyEIP155 = (vAsHex, chainId) => {
24
+ const v = parseInt(vAsHex, 16);
25
+ if (v === 0 || v === 1) {
26
+ // if v is 0 or 1, it's already representing parity
27
+ return chainId * 2 + 35 + v;
28
+ }
29
+ else if (v === 27 || v === 28) {
30
+ const parity = v - 27; // transforming v into 0 or 1 to become the parity
31
+ return chainId * 2 + 35 + parity;
32
+ }
33
+ // When chainId is lower than 109, hw-app-eth *can* return a v with EIP155 already applied
34
+ // e.g. bsc's chainId is 56 -> v then equals to 147/148
35
+ // optimism's chainId is 10 -> v equals to 55/56
36
+ // ethereum's chainId is 1 -> v equals to 0/1
37
+ // goerli's chainId is 5 -> v equals to 0/1
38
+ return v;
39
+ };
40
+ /**
41
+ * Sign Transaction with Ledger hardware
42
+ */
43
+ export const buildSignOperation = (signerContext) => ({ account, deviceId, transaction, }) => new Observable(o => {
44
+ function main() {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ const preparedTransaction = yield prepareForSignOperation(account, transaction);
47
+ const serializedTxHexString = getSerializedTransaction(preparedTransaction).slice(2); // Remove 0x prefix
48
+ // Configure type of resolutions necessary for the clear signing
49
+ const resolutionConfig = {
50
+ externalPlugins: true,
51
+ erc20: true,
52
+ domains: transaction.recipientDomain ? [transaction.recipientDomain] : [],
53
+ };
54
+ // Look for resolutions for external plugins and ERC20
55
+ const resolution = yield ledgerService.resolveTransaction(serializedTxHexString, {}, resolutionConfig);
56
+ o.next({
57
+ type: "device-signature-requested",
58
+ });
59
+ const sig = (yield signerContext(deviceId, signer =>
60
+ // Request signature on the nano
61
+ signer.signTransaction(account.freshAddressPath, serializedTxHexString, resolution)));
62
+ o.next({ type: "device-signature-granted" }); // Signature is done
63
+ const { chainId = 0 } = account.currency.ethereumLikeInfo || {};
64
+ // Create a new serialized tx with the signature now
65
+ const signature = yield getSerializedTransaction(preparedTransaction, {
66
+ r: "0x" + sig.r,
67
+ s: "0x" + sig.s,
68
+ v: applyEIP155(sig.v, chainId),
69
+ });
70
+ const operation = buildOptimisticOperation(account, Object.assign(Object.assign({}, transaction), { nonce: preparedTransaction.nonce }));
71
+ o.next({
72
+ type: "signed",
73
+ signedOperation: {
74
+ operation,
75
+ signature,
76
+ expirationDate: null,
77
+ },
78
+ });
79
+ });
80
+ }
81
+ main().then(() => o.complete(), e => o.error(e));
82
+ });
83
+ //# 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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":""}
@@ -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"}