@ledgerhq/live-common 21.30.1 → 21.32.2

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 (362) hide show
  1. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.getAddress.d.ts +2 -0
  2. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.getAddress.d.ts.map +1 -0
  3. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.getAddress.js +100 -0
  4. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.getAddress.js.map +1 -0
  5. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.pickingStrategies.integration.test.js +0 -10
  6. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.pickingStrategies.integration.test.js.map +1 -1
  7. package/lib/__tests__/test-helpers/setup.js +1 -0
  8. package/lib/__tests__/test-helpers/setup.js.map +1 -1
  9. package/lib/account/support.d.ts.map +1 -1
  10. package/lib/account/support.js.map +1 -1
  11. package/lib/api/Ethereum.d.ts.map +1 -1
  12. package/lib/api/Ethereum.js +1 -0
  13. package/lib/api/Ethereum.js.map +1 -1
  14. package/lib/apps/polyfill.d.ts.map +1 -1
  15. package/lib/apps/polyfill.js +1 -0
  16. package/lib/apps/polyfill.js.map +1 -1
  17. package/lib/bot/engine.d.ts.map +1 -1
  18. package/lib/bot/engine.js +4 -1
  19. package/lib/bot/engine.js.map +1 -1
  20. package/lib/bridge/jsHelpers.js +1 -1
  21. package/lib/data/icons/react/celo.d.ts +8 -0
  22. package/lib/data/icons/react/celo.d.ts.map +1 -0
  23. package/lib/data/icons/react/celo.js +32 -0
  24. package/lib/data/icons/react/celo.js.map +1 -0
  25. package/lib/data/icons/react/index.d.ts +1 -0
  26. package/lib/data/icons/react/index.d.ts.map +1 -1
  27. package/lib/data/icons/react/index.js +11 -8
  28. package/lib/data/icons/react/index.js.map +1 -1
  29. package/lib/data/icons/reactNative/celo.d.ts +8 -0
  30. package/lib/data/icons/reactNative/celo.d.ts.map +1 -0
  31. package/lib/data/icons/reactNative/celo.js +33 -0
  32. package/lib/data/icons/reactNative/celo.js.map +1 -0
  33. package/lib/data/icons/reactNative/index.d.ts +1 -0
  34. package/lib/data/icons/reactNative/index.d.ts.map +1 -1
  35. package/lib/data/icons/reactNative/index.js +11 -8
  36. package/lib/data/icons/reactNative/index.js.map +1 -1
  37. package/lib/env.d.ts +15 -5
  38. package/lib/env.d.ts.map +1 -1
  39. package/lib/env.js +10 -0
  40. package/lib/env.js.map +1 -1
  41. package/lib/env.react.d.ts +1 -1
  42. package/lib/env.react.d.ts.map +1 -1
  43. package/lib/exchange/platform/transfer/index.d.ts.map +1 -1
  44. package/lib/exchange/platform/transfer/index.js +15 -1
  45. package/lib/exchange/platform/transfer/index.js.map +1 -1
  46. package/lib/families/algorand/buildTransaction.d.ts +2 -2
  47. package/lib/families/algorand/buildTransaction.d.ts.map +1 -1
  48. package/lib/families/algorand/buildTransaction.js +13 -19
  49. package/lib/families/algorand/buildTransaction.js.map +1 -1
  50. package/lib/families/algorand/js-getFeesForTransaction.js +4 -6
  51. package/lib/families/algorand/js-getFeesForTransaction.js.map +1 -1
  52. package/lib/families/algorand/js-signOperation.js +3 -7
  53. package/lib/families/algorand/js-signOperation.js.map +1 -1
  54. package/lib/families/algorand/js-synchronization.d.ts.map +1 -1
  55. package/lib/families/algorand/js-synchronization.js +1 -0
  56. package/lib/families/algorand/js-synchronization.js.map +1 -1
  57. package/lib/families/bitcoin/js-signOperation.d.ts.map +1 -1
  58. package/lib/families/bitcoin/js-signOperation.js +3 -5
  59. package/lib/families/bitcoin/js-signOperation.js.map +1 -1
  60. package/lib/families/bitcoin/js-synchronisation.js +4 -4
  61. package/lib/families/bitcoin/js-synchronisation.js.map +1 -1
  62. package/lib/families/bitcoin/wallet-btc/crypto/base.d.ts +4 -3
  63. package/lib/families/bitcoin/wallet-btc/crypto/base.d.ts.map +1 -1
  64. package/lib/families/bitcoin/wallet-btc/crypto/base.js +8 -7
  65. package/lib/families/bitcoin/wallet-btc/crypto/base.js.map +1 -1
  66. package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.d.ts +1 -1
  67. package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.d.ts.map +1 -1
  68. package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.js +3 -7
  69. package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.js.map +1 -1
  70. package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.d.ts +3 -4
  71. package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.d.ts.map +1 -1
  72. package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.js +27 -53
  73. package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.js.map +1 -1
  74. package/lib/families/bitcoin/wallet-btc/crypto/decred.d.ts +1 -1
  75. package/lib/families/bitcoin/wallet-btc/crypto/decred.d.ts.map +1 -1
  76. package/lib/families/bitcoin/wallet-btc/crypto/decred.js +2 -7
  77. package/lib/families/bitcoin/wallet-btc/crypto/decred.js.map +1 -1
  78. package/lib/families/bitcoin/wallet-btc/crypto/litecoin.d.ts +1 -6
  79. package/lib/families/bitcoin/wallet-btc/crypto/litecoin.d.ts.map +1 -1
  80. package/lib/families/bitcoin/wallet-btc/crypto/litecoin.js +0 -51
  81. package/lib/families/bitcoin/wallet-btc/crypto/litecoin.js.map +1 -1
  82. package/lib/families/bitcoin/wallet-btc/crypto/types.d.ts +1 -0
  83. package/lib/families/bitcoin/wallet-btc/crypto/types.d.ts.map +1 -1
  84. package/lib/families/bitcoin/wallet-btc/crypto/zec.d.ts +3 -4
  85. package/lib/families/bitcoin/wallet-btc/crypto/zec.d.ts.map +1 -1
  86. package/lib/families/bitcoin/wallet-btc/crypto/zec.js +26 -17
  87. package/lib/families/bitcoin/wallet-btc/crypto/zec.js.map +1 -1
  88. package/lib/families/bitcoin/wallet-btc/crypto/zen.d.ts +3 -4
  89. package/lib/families/bitcoin/wallet-btc/crypto/zen.d.ts.map +1 -1
  90. package/lib/families/bitcoin/wallet-btc/crypto/zen.js +33 -24
  91. package/lib/families/bitcoin/wallet-btc/crypto/zen.js.map +1 -1
  92. package/lib/families/bitcoin/wallet-btc/explorer/index.d.ts.map +1 -1
  93. package/lib/families/bitcoin/wallet-btc/explorer/index.js +20 -0
  94. package/lib/families/bitcoin/wallet-btc/explorer/index.js.map +1 -1
  95. package/lib/families/bitcoin/wallet-btc/storage/types.d.ts +0 -1
  96. package/lib/families/bitcoin/wallet-btc/storage/types.d.ts.map +1 -1
  97. package/lib/families/celo/api/hubble.d.ts +8 -0
  98. package/lib/families/celo/api/hubble.d.ts.map +1 -0
  99. package/lib/families/celo/api/hubble.js +144 -0
  100. package/lib/families/celo/api/hubble.js.map +1 -0
  101. package/lib/families/celo/api/index.d.ts +2 -0
  102. package/lib/families/celo/api/index.d.ts.map +1 -0
  103. package/lib/families/celo/api/index.js +13 -0
  104. package/lib/families/celo/api/index.js.map +1 -0
  105. package/lib/families/celo/api/sdk.d.ts +3 -0
  106. package/lib/families/celo/api/sdk.d.ts.map +1 -0
  107. package/lib/families/celo/api/sdk.js +13 -0
  108. package/lib/families/celo/api/sdk.js.map +1 -0
  109. package/lib/families/celo/bridge/js.d.ts +8 -0
  110. package/lib/families/celo/bridge/js.d.ts.map +1 -0
  111. package/lib/families/celo/bridge/js.js +87 -0
  112. package/lib/families/celo/bridge/js.js.map +1 -0
  113. package/lib/families/celo/cli-transaction.d.ts +14 -0
  114. package/lib/families/celo/cli-transaction.d.ts.map +1 -0
  115. package/lib/families/celo/cli-transaction.js +37 -0
  116. package/lib/families/celo/cli-transaction.js.map +1 -0
  117. package/lib/families/celo/datasets/celo.scanAccounts.1.d.ts +5 -0
  118. package/lib/families/celo/datasets/celo.scanAccounts.1.d.ts.map +1 -0
  119. package/lib/families/celo/datasets/celo.scanAccounts.1.js +12 -0
  120. package/lib/families/celo/datasets/celo.scanAccounts.1.js.map +1 -0
  121. package/lib/families/celo/deviceTransactionConfig.d.ts +4 -0
  122. package/lib/families/celo/deviceTransactionConfig.d.ts.map +1 -0
  123. package/lib/families/celo/deviceTransactionConfig.js +16 -0
  124. package/lib/families/celo/deviceTransactionConfig.js.map +1 -0
  125. package/lib/families/celo/hw-app-celo.d.ts +19 -0
  126. package/lib/families/celo/hw-app-celo.d.ts.map +1 -0
  127. package/lib/families/celo/hw-app-celo.js +147 -0
  128. package/lib/families/celo/hw-app-celo.js.map +1 -0
  129. package/lib/families/celo/hw-getAddress.d.ts +2 -0
  130. package/lib/families/celo/hw-getAddress.d.ts.map +1 -0
  131. package/lib/families/celo/hw-getAddress.js +13 -0
  132. package/lib/families/celo/hw-getAddress.js.map +1 -0
  133. package/lib/families/celo/js-broadcast.d.ts +8 -0
  134. package/lib/families/celo/js-broadcast.d.ts.map +1 -0
  135. package/lib/families/celo/js-broadcast.js +58 -0
  136. package/lib/families/celo/js-broadcast.js.map +1 -0
  137. package/lib/families/celo/js-buildTransaction.d.ts +6 -0
  138. package/lib/families/celo/js-buildTransaction.d.ts.map +1 -0
  139. package/lib/families/celo/js-buildTransaction.js +89 -0
  140. package/lib/families/celo/js-buildTransaction.js.map +1 -0
  141. package/lib/families/celo/js-createTransaction.d.ts +4 -0
  142. package/lib/families/celo/js-createTransaction.d.ts.map +1 -0
  143. package/lib/families/celo/js-createTransaction.js +12 -0
  144. package/lib/families/celo/js-createTransaction.js.map +1 -0
  145. package/lib/families/celo/js-estimateMaxSpendable.d.ts +10 -0
  146. package/lib/families/celo/js-estimateMaxSpendable.d.ts.map +1 -0
  147. package/lib/families/celo/js-estimateMaxSpendable.js +77 -0
  148. package/lib/families/celo/js-estimateMaxSpendable.js.map +1 -0
  149. package/lib/families/celo/js-getFeesForTransaction.d.ts +8 -0
  150. package/lib/families/celo/js-getFeesForTransaction.d.ts.map +1 -0
  151. package/lib/families/celo/js-getFeesForTransaction.js +76 -0
  152. package/lib/families/celo/js-getFeesForTransaction.js.map +1 -0
  153. package/lib/families/celo/js-getTransactionStatus.d.ts +5 -0
  154. package/lib/families/celo/js-getTransactionStatus.d.ts.map +1 -0
  155. package/lib/families/celo/js-getTransactionStatus.js +86 -0
  156. package/lib/families/celo/js-getTransactionStatus.js.map +1 -0
  157. package/lib/families/celo/js-prepareTransaction.d.ts +5 -0
  158. package/lib/families/celo/js-prepareTransaction.d.ts.map +1 -0
  159. package/lib/families/celo/js-prepareTransaction.js +76 -0
  160. package/lib/families/celo/js-prepareTransaction.js.map +1 -0
  161. package/lib/families/celo/js-signOperation.d.ts +13 -0
  162. package/lib/families/celo/js-signOperation.d.ts.map +1 -0
  163. package/lib/families/celo/js-signOperation.js +150 -0
  164. package/lib/families/celo/js-signOperation.js.map +1 -0
  165. package/lib/families/celo/js-synchronisation.d.ts +10 -0
  166. package/lib/families/celo/js-synchronisation.d.ts.map +1 -0
  167. package/lib/families/celo/js-synchronisation.js +88 -0
  168. package/lib/families/celo/js-synchronisation.js.map +1 -0
  169. package/lib/families/celo/specs.d.ts +7 -0
  170. package/lib/families/celo/specs.d.ts.map +1 -0
  171. package/lib/families/celo/specs.js +56 -0
  172. package/lib/families/celo/specs.js.map +1 -0
  173. package/lib/families/celo/speculos-deviceActions.d.ts +7 -0
  174. package/lib/families/celo/speculos-deviceActions.d.ts.map +1 -0
  175. package/lib/families/celo/speculos-deviceActions.js +52 -0
  176. package/lib/families/celo/speculos-deviceActions.js.map +1 -0
  177. package/lib/families/celo/transaction.d.ts +11 -0
  178. package/lib/families/celo/transaction.d.ts.map +1 -0
  179. package/lib/families/celo/transaction.js +39 -0
  180. package/lib/families/celo/transaction.js.map +1 -0
  181. package/lib/families/celo/types.d.ts +16 -0
  182. package/lib/families/celo/types.d.ts.map +1 -0
  183. package/lib/families/celo/types.js +6 -0
  184. package/lib/families/celo/types.js.map +1 -0
  185. package/lib/families/ethereum/datasets/ethereum.scanAccounts.1.d.ts +1 -0
  186. package/lib/families/ethereum/datasets/ethereum.scanAccounts.1.d.ts.map +1 -1
  187. package/lib/families/ethereum/datasets/ethereum.scanAccounts.1.js +1 -0
  188. package/lib/families/ethereum/datasets/ethereum.scanAccounts.1.js.map +1 -1
  189. package/lib/families/ethereum/modules/erc1155.d.ts.map +1 -1
  190. package/lib/families/ethereum/modules/erc1155.js +8 -2
  191. package/lib/families/ethereum/modules/erc1155.js.map +1 -1
  192. package/lib/families/ethereum/signOperation.d.ts.map +1 -1
  193. package/lib/families/ethereum/signOperation.js +26 -15
  194. package/lib/families/ethereum/signOperation.js.map +1 -1
  195. package/lib/families/ethereum/specs.d.ts.map +1 -1
  196. package/lib/families/ethereum/specs.js +2 -4
  197. package/lib/families/ethereum/specs.js.map +1 -1
  198. package/lib/families/ethereum/transaction.d.ts +4 -1
  199. package/lib/families/ethereum/transaction.d.ts.map +1 -1
  200. package/lib/families/ethereum/transaction.js +15 -27
  201. package/lib/families/ethereum/transaction.js.map +1 -1
  202. package/lib/families/polkadot/cache.d.ts +1 -1
  203. package/lib/families/polkadot/cache.js +1 -1
  204. package/lib/families/solana/api/chain/instruction/token/types.d.ts +1 -1
  205. package/lib/families/solana/specs.js +1 -1
  206. package/lib/families/solana/specs.js.map +1 -1
  207. package/lib/families/tezos/bakers.whitelist-default.d.ts.map +1 -1
  208. package/lib/families/tezos/bakers.whitelist-default.js +1 -1
  209. package/lib/families/tezos/bakers.whitelist-default.js.map +1 -1
  210. package/lib/families/tezos/bridge/js.d.ts.map +1 -1
  211. package/lib/families/tezos/bridge/js.js +2 -1
  212. package/lib/families/tezos/bridge/js.js.map +1 -1
  213. package/lib/families/tezos/test-specifics.d.ts.map +1 -1
  214. package/lib/families/tezos/test-specifics.js +1 -0
  215. package/lib/families/tezos/test-specifics.js.map +1 -1
  216. package/lib/featureFlags/FeatureToggle.d.ts +10 -0
  217. package/lib/featureFlags/FeatureToggle.d.ts.map +1 -0
  218. package/lib/featureFlags/FeatureToggle.js +17 -0
  219. package/lib/featureFlags/FeatureToggle.js.map +1 -0
  220. package/lib/featureFlags/defaultFeatures.d.ts +3 -0
  221. package/lib/featureFlags/defaultFeatures.d.ts.map +1 -0
  222. package/lib/featureFlags/defaultFeatures.js +9 -0
  223. package/lib/featureFlags/defaultFeatures.js.map +1 -0
  224. package/lib/featureFlags/index.d.ts +5 -0
  225. package/lib/featureFlags/index.d.ts.map +1 -0
  226. package/lib/featureFlags/index.js +17 -0
  227. package/lib/featureFlags/index.js.map +1 -0
  228. package/lib/featureFlags/provider.d.ts +13 -0
  229. package/lib/featureFlags/provider.d.ts.map +1 -0
  230. package/lib/featureFlags/provider.js +68 -0
  231. package/lib/featureFlags/provider.js.map +1 -0
  232. package/lib/featureFlags/types.d.ts +8 -0
  233. package/lib/featureFlags/types.d.ts.map +1 -0
  234. package/lib/featureFlags/types.js +3 -0
  235. package/lib/featureFlags/types.js.map +1 -0
  236. package/lib/featureFlags/useFeature.d.ts +3 -0
  237. package/lib/featureFlags/useFeature.d.ts.map +1 -0
  238. package/lib/featureFlags/useFeature.js +9 -0
  239. package/lib/featureFlags/useFeature.js.map +1 -0
  240. package/lib/generated/bridge/js.d.ts +4 -0
  241. package/lib/generated/bridge/js.d.ts.map +1 -1
  242. package/lib/generated/bridge/js.js +24 -22
  243. package/lib/generated/bridge/js.js.map +1 -1
  244. package/lib/generated/cli-transaction.d.ts +9 -0
  245. package/lib/generated/cli-transaction.d.ts.map +1 -1
  246. package/lib/generated/cli-transaction.js +24 -22
  247. package/lib/generated/cli-transaction.js.map +1 -1
  248. package/lib/generated/deviceTransactionConfig.d.ts +2 -0
  249. package/lib/generated/deviceTransactionConfig.d.ts.map +1 -1
  250. package/lib/generated/deviceTransactionConfig.js +22 -20
  251. package/lib/generated/deviceTransactionConfig.js.map +1 -1
  252. package/lib/generated/hw-getAddress.d.ts +1 -0
  253. package/lib/generated/hw-getAddress.d.ts.map +1 -1
  254. package/lib/generated/hw-getAddress.js +26 -24
  255. package/lib/generated/hw-getAddress.js.map +1 -1
  256. package/lib/generated/specs.d.ts +3 -0
  257. package/lib/generated/specs.d.ts.map +1 -1
  258. package/lib/generated/specs.js +24 -22
  259. package/lib/generated/specs.js.map +1 -1
  260. package/lib/generated/speculos-deviceActions.d.ts +3 -0
  261. package/lib/generated/speculos-deviceActions.d.ts.map +1 -1
  262. package/lib/generated/speculos-deviceActions.js +24 -22
  263. package/lib/generated/speculos-deviceActions.js.map +1 -1
  264. package/lib/generated/transaction.d.ts +5 -0
  265. package/lib/generated/transaction.d.ts.map +1 -1
  266. package/lib/generated/transaction.js +26 -24
  267. package/lib/generated/transaction.js.map +1 -1
  268. package/lib/generated/types.d.ts +12 -6
  269. package/lib/generated/types.d.ts.map +1 -1
  270. package/lib/generated/types.js +14 -12
  271. package/lib/generated/types.js.map +1 -1
  272. package/lib/load/speculos.d.ts +7 -0
  273. package/lib/load/speculos.d.ts.map +1 -1
  274. package/lib/load/speculos.js +27 -11
  275. package/lib/load/speculos.js.map +1 -1
  276. package/lib/types/index.d.ts +1 -0
  277. package/lib/types/index.d.ts.map +1 -1
  278. package/lib/types/index.js +1 -0
  279. package/lib/types/index.js.map +1 -1
  280. package/package.json +23 -21
  281. package/src/.DS_Store +0 -0
  282. package/src/{data/flags → __tests__}/.DS_Store +0 -0
  283. package/src/__tests__/__snapshots__/all.libcore.ts.snap +457 -33509
  284. package/src/__tests__/families/bitcoin/wallet-btc/xpub.getAddress.ts +47 -0
  285. package/src/__tests__/families/bitcoin/wallet-btc/xpub.pickingStrategies.integration.test.ts +0 -11
  286. package/src/__tests__/test-helpers/setup.ts +1 -0
  287. package/src/account/support.ts +1 -0
  288. package/src/api/Ethereum.ts +1 -0
  289. package/src/apps/polyfill.ts +1 -0
  290. package/src/bot/engine.ts +4 -1
  291. package/src/bridge/jsHelpers.ts +1 -1
  292. package/src/data/icons/react/celo.tsx +12 -0
  293. package/src/data/icons/react/index.tsx +1 -0
  294. package/src/data/icons/reactNative/celo.tsx +13 -0
  295. package/src/data/icons/reactNative/index.tsx +1 -0
  296. package/src/data/icons/svg/CELO.svg +5 -0
  297. package/src/env.ts +10 -0
  298. package/src/exchange/platform/transfer/index.ts +21 -1
  299. package/src/families/algorand/buildTransaction.ts +4 -8
  300. package/src/families/algorand/js-getFeesForTransaction.ts +1 -1
  301. package/src/families/algorand/js-signOperation.ts +2 -2
  302. package/src/families/algorand/js-synchronization.ts +1 -0
  303. package/src/families/bitcoin/js-signOperation.ts +3 -5
  304. package/src/families/bitcoin/js-synchronisation.ts +4 -4
  305. package/src/families/bitcoin/wallet-btc/crypto/base.ts +31 -18
  306. package/src/families/bitcoin/wallet-btc/crypto/bitcoin.ts +3 -17
  307. package/src/families/bitcoin/wallet-btc/crypto/bitcoincash.ts +5 -39
  308. package/src/families/bitcoin/wallet-btc/crypto/decred.ts +2 -15
  309. package/src/families/bitcoin/wallet-btc/crypto/litecoin.ts +1 -71
  310. package/src/families/bitcoin/wallet-btc/crypto/types.ts +7 -0
  311. package/src/families/bitcoin/wallet-btc/crypto/zec.ts +4 -22
  312. package/src/families/bitcoin/wallet-btc/crypto/zen.ts +4 -22
  313. package/src/families/bitcoin/wallet-btc/explorer/index.ts +20 -0
  314. package/src/families/bitcoin/wallet-btc/storage/types.ts +0 -1
  315. package/src/families/celo/api/hubble.ts +93 -0
  316. package/src/families/celo/api/index.ts +1 -0
  317. package/src/families/celo/api/sdk.ts +8 -0
  318. package/src/families/celo/bridge/js.ts +38 -0
  319. package/src/families/celo/cli-transaction.ts +41 -0
  320. package/src/families/celo/datasets/celo.scanAccounts.1.ts +20 -0
  321. package/src/families/celo/deviceTransactionConfig.ts +19 -0
  322. package/src/families/celo/hw-app-celo.ts +108 -0
  323. package/src/families/celo/hw-getAddress.ts +1 -0
  324. package/src/families/celo/js-broadcast.ts +12 -0
  325. package/src/families/celo/js-buildTransaction.ts +32 -0
  326. package/src/families/celo/js-createTransaction.ts +12 -0
  327. package/src/families/celo/js-estimateMaxSpendable.ts +28 -0
  328. package/src/families/celo/js-getFeesForTransaction.ts +38 -0
  329. package/src/families/celo/js-getTransactionStatus.ts +67 -0
  330. package/src/families/celo/js-prepareTransaction.ts +28 -0
  331. package/src/families/celo/js-signOperation.ts +149 -0
  332. package/src/families/celo/js-synchronisation.ts +40 -0
  333. package/src/families/celo/specs.ts +53 -0
  334. package/src/families/celo/speculos-deviceActions.ts +50 -0
  335. package/src/families/celo/transaction.ts +39 -0
  336. package/src/families/celo/types.ts +20 -0
  337. package/src/families/ethereum/datasets/ethereum.scanAccounts.1.ts +1 -0
  338. package/src/families/ethereum/modules/erc1155.ts +9 -0
  339. package/src/families/ethereum/signOperation.ts +21 -20
  340. package/src/families/ethereum/specs.ts +0 -2
  341. package/src/families/ethereum/transaction.ts +10 -24
  342. package/src/families/polkadot/cache.ts +1 -1
  343. package/src/families/solana/specs.ts +1 -1
  344. package/src/families/tezos/bakers.whitelist-default.ts +0 -2
  345. package/src/families/tezos/bridge/js.ts +6 -1
  346. package/src/families/tezos/test-specifics.ts +1 -0
  347. package/src/featureFlags/FeatureToggle.tsx +24 -0
  348. package/src/featureFlags/defaultFeatures.ts +7 -0
  349. package/src/featureFlags/index.ts +4 -0
  350. package/src/featureFlags/provider.tsx +48 -0
  351. package/src/featureFlags/types.ts +9 -0
  352. package/src/featureFlags/useFeature.ts +8 -0
  353. package/src/generated/bridge/js.ts +3 -0
  354. package/src/generated/cli-transaction.ts +3 -0
  355. package/src/generated/deviceTransactionConfig.ts +3 -0
  356. package/src/generated/hw-getAddress.ts +3 -0
  357. package/src/generated/specs.ts +3 -0
  358. package/src/generated/speculos-deviceActions.ts +3 -0
  359. package/src/generated/transaction.ts +3 -0
  360. package/src/generated/types.ts +14 -0
  361. package/src/load/speculos.ts +23 -10
  362. package/src/types/index.ts +1 -0
@@ -0,0 +1,12 @@
1
+ import { Transaction } from "./types";
2
+ import { BigNumber } from "bignumber.js";
3
+
4
+ const createTransaction = (): Transaction => ({
5
+ family: "celo",
6
+ amount: new BigNumber(0),
7
+ recipient: "",
8
+ useAllAmount: false,
9
+ fees: null,
10
+ });
11
+
12
+ export default createTransaction;
@@ -0,0 +1,28 @@
1
+ import { Account, AccountLike } from "../../types";
2
+ import { Transaction } from "./types";
3
+ import { BigNumber } from "bignumber.js";
4
+ import { getMainAccount } from "../../account";
5
+ import getTransactionStatus from "./js-getTransactionStatus";
6
+ import prepareTransaction from "./js-prepareTransaction";
7
+ import createTransaction from "./js-createTransaction";
8
+
9
+ const estimateMaxSpendable = async ({
10
+ account,
11
+ parentAccount,
12
+ transaction,
13
+ }: {
14
+ account: AccountLike;
15
+ parentAccount: Account;
16
+ transaction: Transaction;
17
+ }): Promise<BigNumber> => {
18
+ const mainAccount = getMainAccount(account, parentAccount);
19
+ const t = await prepareTransaction(mainAccount, {
20
+ ...createTransaction(),
21
+ ...transaction,
22
+ useAllAmount: true,
23
+ });
24
+ const s = await getTransactionStatus(mainAccount, t);
25
+ return s.amount;
26
+ };
27
+
28
+ export default estimateMaxSpendable;
@@ -0,0 +1,38 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { Account, Transaction } from "../../types";
3
+ import { celoKit } from "./api/sdk";
4
+
5
+ const getFeesForTransaction = async ({
6
+ account,
7
+ transaction,
8
+ }: {
9
+ account: Account;
10
+ transaction: Transaction;
11
+ }): Promise<BigNumber> => {
12
+ const { amount } = transaction;
13
+ const kit = celoKit();
14
+
15
+ // A workaround - estimating gas throws an error if value > funds
16
+ const value = transaction.useAllAmount
17
+ ? account.spendableBalance
18
+ : BigNumber.minimum(amount, account.spendableBalance);
19
+
20
+ const celoToken = await kit.contracts.getGoldToken();
21
+
22
+ const celoTransaction = {
23
+ from: account.freshAddress,
24
+ to: celoToken.address,
25
+ data: celoToken
26
+ .transfer(transaction.recipient, value.toFixed())
27
+ .txo.encodeABI(),
28
+ };
29
+
30
+ const gasPrice = new BigNumber(await kit.connection.gasPrice());
31
+ const gas = await kit.connection.estimateGasWithInflationFactor(
32
+ celoTransaction
33
+ );
34
+
35
+ return gasPrice.times(gas);
36
+ };
37
+
38
+ export default getFeesForTransaction;
@@ -0,0 +1,67 @@
1
+ import { Account, TransactionStatus } from "../../types";
2
+ import { Transaction } from "./types";
3
+ import {
4
+ AmountRequired,
5
+ FeeNotLoaded,
6
+ InvalidAddress,
7
+ InvalidAddressBecauseDestinationIsAlsoSource,
8
+ NotEnoughBalance,
9
+ RecipientRequired,
10
+ } from "@ledgerhq/errors";
11
+ import { BigNumber } from "bignumber.js";
12
+ import { isValidAddress } from "@celo/utils/lib/address";
13
+
14
+ const getTransactionStatus = async (
15
+ account: Account,
16
+ transaction: Transaction
17
+ ): Promise<TransactionStatus> => {
18
+ const errors: any = {};
19
+ const warnings: any = {};
20
+ const useAllAmount = !!transaction.useAllAmount;
21
+
22
+ if (account.freshAddress === transaction.recipient) {
23
+ errors.recipient = new InvalidAddressBecauseDestinationIsAlsoSource();
24
+ }
25
+
26
+ if (!transaction.fees || !transaction.fees.gt(0)) {
27
+ errors.fees = new FeeNotLoaded();
28
+ }
29
+
30
+ const estimatedFees = transaction.fees || new BigNumber(0);
31
+
32
+ const amount = useAllAmount
33
+ ? account.spendableBalance.minus(estimatedFees)
34
+ : new BigNumber(transaction.amount);
35
+
36
+ if (amount.lte(0) && !transaction.useAllAmount) {
37
+ errors.amount = new AmountRequired();
38
+ }
39
+
40
+ const totalSpent = amount.plus(estimatedFees);
41
+
42
+ if (totalSpent.gt(account.spendableBalance)) {
43
+ errors.amount = new NotEnoughBalance();
44
+ }
45
+
46
+ if (!errors.amount && account.spendableBalance.lt(estimatedFees)) {
47
+ errors.amount = new NotEnoughBalance();
48
+ }
49
+
50
+ if (!transaction.recipient) {
51
+ errors.recipient = new RecipientRequired();
52
+ } else if (!isValidAddress(transaction.recipient)) {
53
+ errors.recipient = new InvalidAddress("", {
54
+ currencyName: account.currency.name,
55
+ });
56
+ }
57
+
58
+ return Promise.resolve({
59
+ errors,
60
+ warnings,
61
+ estimatedFees,
62
+ amount,
63
+ totalSpent,
64
+ });
65
+ };
66
+
67
+ export default getTransactionStatus;
@@ -0,0 +1,28 @@
1
+ import { Account } from "../../types";
2
+ import { Transaction } from "./types";
3
+ import getFeesForTransaction from "./js-getFeesForTransaction";
4
+ import { isValidAddress } from "@celo/utils/lib/address";
5
+
6
+ const sameFees = (a, b) => (!a || !b ? a === b : a.eq(b));
7
+
8
+ const prepareTransaction = async (
9
+ account: Account,
10
+ transaction: Transaction
11
+ ) => {
12
+ if (
13
+ !transaction.recipient ||
14
+ (transaction.recipient && !isValidAddress(transaction.recipient))
15
+ ) {
16
+ return transaction;
17
+ }
18
+
19
+ const fees = await getFeesForTransaction({ account, transaction });
20
+
21
+ if (!sameFees(transaction.fees, fees)) {
22
+ return { ...transaction, fees };
23
+ }
24
+
25
+ return transaction;
26
+ };
27
+
28
+ export default prepareTransaction;
@@ -0,0 +1,149 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { Observable } from "rxjs";
3
+ import { FeeNotLoaded } from "@ledgerhq/errors";
4
+ import type { Transaction } from "./types";
5
+ import type { Account, Operation, SignOperationEvent } from "../../types";
6
+ import { encodeOperationId } from "../../operation";
7
+ import { CeloApp } from "./hw-app-celo";
8
+ import buildTransaction from "./js-buildTransaction";
9
+ import { rlpEncodedTx, encodeTransaction } from "@celo/wallet-base";
10
+ import { tokenInfoByAddressAndChainId } from "@celo/wallet-ledger/lib/tokens";
11
+ import { withDevice } from "../../hw/deviceAccess";
12
+
13
+ const buildOptimisticOperation = (
14
+ account: Account,
15
+ transaction: Transaction,
16
+ fee: BigNumber
17
+ ): Operation => {
18
+ const type = "OUT";
19
+
20
+ const value = new BigNumber(transaction.amount).plus(fee);
21
+
22
+ const operation: Operation = {
23
+ id: encodeOperationId(account.id, "", type),
24
+ hash: "",
25
+ type,
26
+ value,
27
+ fee,
28
+ blockHash: null,
29
+ blockHeight: null,
30
+ senders: [account.freshAddress],
31
+ recipients: [transaction.recipient].filter(Boolean),
32
+ accountId: account.id,
33
+ date: new Date(),
34
+ extra: { additionalField: transaction.amount },
35
+ };
36
+
37
+ return operation;
38
+ };
39
+
40
+ const trimLeading0x = (input: string) =>
41
+ input.startsWith("0x") ? input.slice(2) : input;
42
+
43
+ const parseSigningResponse = (
44
+ response: {
45
+ s: string;
46
+ v: string;
47
+ r: string;
48
+ },
49
+ chainId: number
50
+ ): {
51
+ s: Buffer;
52
+ v: number;
53
+ r: Buffer;
54
+ } => {
55
+ // EIP155
56
+ const sigV = parseInt(response.v, 16);
57
+ let eip155V = chainId * 2 + 35;
58
+ if (sigV !== eip155V && (sigV & eip155V) !== sigV) {
59
+ eip155V += 1;
60
+ }
61
+
62
+ return {
63
+ s: Buffer.from(response.s, "hex"),
64
+ v: eip155V,
65
+ r: Buffer.from(response.r, "hex"),
66
+ };
67
+ };
68
+
69
+ /**
70
+ * Sign Transaction with Ledger hardware
71
+ */
72
+ const signOperation = ({
73
+ account,
74
+ deviceId,
75
+ transaction,
76
+ }: {
77
+ account: Account;
78
+ deviceId: any;
79
+ transaction: Transaction;
80
+ }): Observable<SignOperationEvent> =>
81
+ withDevice(deviceId)(
82
+ (transport) =>
83
+ new Observable((o) => {
84
+ let cancelled;
85
+
86
+ async function main() {
87
+ if (!transaction.fees) {
88
+ throw new FeeNotLoaded();
89
+ }
90
+
91
+ const celo = new CeloApp(transport);
92
+ const unsignedTransaction = await buildTransaction(
93
+ account,
94
+ transaction
95
+ );
96
+ const { chainId, to } = unsignedTransaction;
97
+ const rlpEncodedTransaction = rlpEncodedTx(unsignedTransaction);
98
+
99
+ const tokenInfo = tokenInfoByAddressAndChainId(to!, chainId!);
100
+ if (tokenInfo) {
101
+ await celo.provideERC20TokenInformation(tokenInfo);
102
+ }
103
+
104
+ o.next({ type: "device-signature-requested" });
105
+
106
+ const response = await celo.signTransaction(
107
+ account.freshAddressPath,
108
+ trimLeading0x(rlpEncodedTransaction.rlpEncode)
109
+ );
110
+
111
+ if (cancelled) return;
112
+
113
+ const signature = parseSigningResponse(response, chainId!);
114
+
115
+ o.next({ type: "device-signature-granted" });
116
+
117
+ const encodedTransaction = await encodeTransaction(
118
+ rlpEncodedTransaction,
119
+ signature
120
+ );
121
+
122
+ const operation = buildOptimisticOperation(
123
+ account,
124
+ transaction,
125
+ transaction.fees ?? new BigNumber(0)
126
+ );
127
+
128
+ o.next({
129
+ type: "signed",
130
+ signedOperation: {
131
+ operation,
132
+ signature: encodedTransaction.raw,
133
+ expirationDate: null,
134
+ },
135
+ });
136
+ }
137
+
138
+ main().then(
139
+ () => o.complete(),
140
+ (e) => o.error(e)
141
+ );
142
+
143
+ return () => {
144
+ cancelled = true;
145
+ };
146
+ })
147
+ );
148
+
149
+ export default signOperation;
@@ -0,0 +1,40 @@
1
+ import type { Account } from "../../types";
2
+ import { encodeAccountId } from "../../account";
3
+ import type { GetAccountShape } from "../../bridge/jsHelpers";
4
+ import { makeSync, makeScanAccounts, mergeOps } from "../../bridge/jsHelpers";
5
+ import { getAccountDetails } from "./api";
6
+
7
+ const getAccountShape: GetAccountShape = async (info) => {
8
+ const { address, currency, initialAccount, derivationMode } = info;
9
+ const oldOperations = initialAccount?.operations || [];
10
+
11
+ const accountId = encodeAccountId({
12
+ type: "js",
13
+ version: "2",
14
+ currencyId: currency.id,
15
+ xpubOrAddress: address,
16
+ derivationMode,
17
+ });
18
+ const {
19
+ blockHeight,
20
+ balance,
21
+ spendableBalance,
22
+ operations: newOperations,
23
+ } = await getAccountDetails(address, accountId);
24
+ const operations = mergeOps(oldOperations, newOperations);
25
+ const shape = {
26
+ id: accountId,
27
+ balance,
28
+ spendableBalance,
29
+ operationsCount: operations.length,
30
+ blockHeight,
31
+ };
32
+ return { ...shape, operations };
33
+ };
34
+
35
+ const postSync = (_initial: Account, parent: Account) => {
36
+ return parent;
37
+ };
38
+
39
+ export const scanAccounts = makeScanAccounts(getAccountShape);
40
+ export const sync = makeSync(getAccountShape, postSync);
@@ -0,0 +1,53 @@
1
+ import invariant from "invariant";
2
+ import type { Transaction } from "./types";
3
+ import { getCryptoCurrencyById, parseCurrencyUnit } from "../../currencies";
4
+ import { pickSiblings } from "../../bot/specs";
5
+ import type { AppSpec } from "../../bot/types";
6
+ import { DeviceModelId } from "@ledgerhq/devices";
7
+
8
+ const currency = getCryptoCurrencyById("celo");
9
+ const minimalAmount = parseCurrencyUnit(currency.units[0], "0.001");
10
+ const maxAccount = 3;
11
+
12
+ const celo: AppSpec<Transaction> = {
13
+ name: "Celo",
14
+ currency,
15
+ appQuery: {
16
+ model: DeviceModelId.nanoS,
17
+ appName: "Celo",
18
+ },
19
+ testTimeout: 2 * 60 * 1000,
20
+ mutations: [
21
+ {
22
+ name: "move 50% to another account",
23
+ maxRun: 2,
24
+ transaction: ({ account, siblings, bridge, maxSpendable }) => {
25
+ invariant(maxSpendable.gt(minimalAmount), "balance is too low");
26
+ const sibling = pickSiblings(siblings, maxAccount);
27
+ const recipient = sibling.freshAddress;
28
+ const amount = maxSpendable.div(2).integerValue();
29
+ return {
30
+ transaction: bridge.createTransaction(account),
31
+ updates: [{ recipient }, { amount }],
32
+ };
33
+ },
34
+ },
35
+ {
36
+ name: "send max to another account",
37
+ maxRun: 1,
38
+ transaction: ({ account, siblings, bridge, maxSpendable }) => {
39
+ invariant(maxSpendable.gt(minimalAmount), "balance is too low");
40
+ const sibling = pickSiblings(siblings, maxAccount);
41
+ const recipient = sibling.freshAddress;
42
+ return {
43
+ transaction: bridge.createTransaction(account),
44
+ updates: [{ recipient }, { useAllAmount: true }],
45
+ };
46
+ },
47
+ },
48
+ ],
49
+ };
50
+
51
+ export default {
52
+ celo,
53
+ };
@@ -0,0 +1,50 @@
1
+ import type { DeviceAction } from "../../bot/types";
2
+ import type { Transaction } from "./types";
3
+ import { deviceActionFlow } from "../../bot/specs";
4
+ import { formatCurrencyUnit } from "../../currencies";
5
+ const acceptTransaction: DeviceAction<Transaction, any> = deviceActionFlow({
6
+ steps: [
7
+ {
8
+ title: "Review",
9
+ button: "Rr",
10
+ },
11
+ {
12
+ title: "Amount",
13
+ button: "Rr",
14
+ expectedValue: ({ account, status }) => {
15
+ const formattedValue =
16
+ "CELO " +
17
+ formatCurrencyUnit(account.unit, status.amount, {
18
+ disableRounding: true,
19
+ });
20
+
21
+ if (!formattedValue.includes(".")) {
22
+ // if the value is pure integer, in the app it will automatically add an .0
23
+ return formattedValue + ".0";
24
+ }
25
+
26
+ return formattedValue;
27
+ },
28
+ },
29
+ {
30
+ title: "Address",
31
+ button: "Rr",
32
+ expectedValue: ({ transaction }) => transaction.recipient,
33
+ },
34
+ {
35
+ title: "Max Fees",
36
+ button: "Rr",
37
+ },
38
+ {
39
+ title: "No Gateway Fee",
40
+ button: "Rr",
41
+ },
42
+ {
43
+ title: "Accept",
44
+ button: "LRlr",
45
+ },
46
+ ],
47
+ });
48
+ export default {
49
+ acceptTransaction,
50
+ };
@@ -0,0 +1,39 @@
1
+ import type { Transaction, TransactionRaw } from "./types";
2
+ import { BigNumber } from "bignumber.js";
3
+ import {
4
+ fromTransactionCommonRaw,
5
+ toTransactionCommonRaw,
6
+ } from "../../transaction/common";
7
+ import type { Account } from "../../types";
8
+ import { getAccountUnit } from "../../account";
9
+ import { formatCurrencyUnit } from "../../currencies";
10
+ export const formatTransaction = (t: Transaction, account: Account): string => `
11
+ SEND ${formatCurrencyUnit(getAccountUnit(account), t.amount, {
12
+ showCode: true,
13
+ disableRounding: true,
14
+ })}
15
+ TO ${t.recipient}`;
16
+
17
+ const fromTransactionRaw = (tr: TransactionRaw): Transaction => {
18
+ const common = fromTransactionCommonRaw(tr);
19
+ return {
20
+ ...common,
21
+ family: tr.family,
22
+ fees: tr.fees ? new BigNumber(tr.fees) : null,
23
+ };
24
+ };
25
+
26
+ export const toTransactionRaw = (t: Transaction): TransactionRaw => {
27
+ const common = toTransactionCommonRaw(t);
28
+ return {
29
+ ...common,
30
+ family: t.family,
31
+ fees: t.fees?.toString() || null,
32
+ };
33
+ };
34
+
35
+ export default {
36
+ formatTransaction,
37
+ fromTransactionRaw,
38
+ toTransactionRaw,
39
+ };
@@ -0,0 +1,20 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import type {
3
+ TransactionCommon,
4
+ TransactionCommonRaw,
5
+ } from "../../types/transaction";
6
+
7
+ export type Transaction = TransactionCommon & {
8
+ family: "celo";
9
+ fees: BigNumber | null | undefined;
10
+ };
11
+ export type TransactionRaw = TransactionCommonRaw & {
12
+ family: "celo";
13
+ fees: string | null | undefined;
14
+ };
15
+
16
+ export type CoreStatics = Record<string, never>;
17
+ export type CoreAccountSpecifics = Record<string, never>;
18
+ export type CoreOperationSpecifics = Record<string, never>;
19
+ export type CoreCurrencySpecifics = Record<string, never>;
20
+ export const reflect = (_declare: any) => {};
@@ -1,5 +1,6 @@
1
1
  export default {
2
2
  name: "ethereum seed 1",
3
+ unstableAccounts: true, // FIXME LL-9155
3
4
  apdus: `
4
5
  => e00200000d038000002c8000003c80000000
5
6
  <= 410469877df9567b58e6ef8f6cf1fb8a8e1bf28a327dee31b183a6b9cd1f3da063af0924506a9912793ef31e41df19f8653fa31bb1fecc32d2e41abdddb22ccb621028373561453661383832363036353137343345356546433033373937313136413335363539663638359000
@@ -14,6 +14,9 @@ import { prepareTransaction } from "./erc721";
14
14
  const notOwnedNft = createCustomErrorClass("NotOwnedNft");
15
15
  const notEnoughNftOwned = createCustomErrorClass("NotEnoughNftOwned");
16
16
  const notTokenIdsProvided = createCustomErrorClass("NotTokenIdsProvided");
17
+ const quantityNeedsToBePositive = createCustomErrorClass(
18
+ "QuantityNeedsToBePositive"
19
+ );
17
20
 
18
21
  export type Modes = "erc1155.transfer";
19
22
 
@@ -43,6 +46,12 @@ const erc1155Transfer: ModeModule = {
43
46
  result.errors.amount = new NotEnoughBalanceInParentAccount();
44
47
  }
45
48
 
49
+ t.quantities?.forEach((quantity) => {
50
+ if (quantity.isLessThan(1)) {
51
+ result.errors.amount = new quantityNeedsToBePositive();
52
+ }
53
+ });
54
+
46
55
  const enoughTokensOwned: true | Error =
47
56
  t.tokenIds?.reduce((acc, tokenId, index) => {
48
57
  if (acc instanceof Error) {
@@ -2,6 +2,7 @@ import invariant from "invariant";
2
2
  import { Observable, from, of } from "rxjs";
3
3
  import { mergeMap } from "rxjs/operators";
4
4
  import eip55 from "eip55";
5
+ import { encode } from "rlp";
5
6
  import { BigNumber } from "bignumber.js";
6
7
  import { log } from "@ledgerhq/logs";
7
8
  import { FeeNotLoaded } from "@ledgerhq/errors";
@@ -17,6 +18,7 @@ import { modes } from "./modules";
17
18
  import { isNFTActive } from "../../nft";
18
19
  import { getEnv } from "../../env";
19
20
  import { LoadConfig } from "@ledgerhq/hw-app-eth/lib/services/types";
21
+ import { Transaction as EthereumTx } from "@ethereumjs/tx";
20
22
  export const signOperation = ({
21
23
  account,
22
24
  deviceId,
@@ -54,18 +56,16 @@ export const signOperation = ({
54
56
  throw new FeeNotLoaded();
55
57
  }
56
58
 
57
- const { tx, fillTransactionDataResult } = buildEthereumTx(
58
- account,
59
- transaction,
60
- nonce
61
- );
62
- const to = eip55.encode("0x" + tx.to.toString("hex"));
59
+ const { ethTxObject, tx, common, fillTransactionDataResult } =
60
+ buildEthereumTx(account, transaction, nonce);
61
+ const to = eip55.encode((tx.to || "").toString());
63
62
  const value = new BigNumber(
64
63
  "0x" + (tx.value.toString("hex") || "0")
65
64
  );
66
-
67
- const txHex = tx.serialize().toString("hex");
68
-
65
+ // rawData Format: `rlp([nonce, gasPrice, gasLimit, to, value, data, v, r, s])`
66
+ const rawData = tx.raw();
67
+ rawData[6] = Buffer.from([common.chainIdBN().toNumber()]);
68
+ const txHex = encode(rawData).toString("hex");
69
69
  const loadConfig: LoadConfig = {};
70
70
  if (isNFTActive(account.currency)) {
71
71
  loadConfig.nftExplorerBaseURL =
@@ -106,26 +106,27 @@ export const signOperation = ({
106
106
  }
107
107
  }
108
108
 
109
- o.next({
110
- type: "device-signature-requested",
111
- });
109
+ o.next({ type: "device-signature-requested" });
112
110
  const result = await eth.signTransaction(
113
111
  freshAddressPath,
114
112
  txHex,
115
113
  resolution
116
114
  );
117
115
  if (cancelled) return;
118
- o.next({
119
- type: "device-signature-granted",
120
- });
116
+ o.next({ type: "device-signature-granted" });
121
117
  // Second, we re-set some tx fields from the device signature
122
- const v = result.v;
118
+ const v = `0x${result.v}`;
119
+ const r = `0x${result.r}`;
120
+ const s = `0x${result.s}`;
121
+
122
+ const signedTx = new EthereumTx(
123
+ { ...ethTxObject, v, r, s },
124
+ { common }
125
+ );
123
126
 
124
- tx.v = Buffer.from(v, "hex");
125
- tx.r = Buffer.from(result.r, "hex");
126
- tx.s = Buffer.from(result.s, "hex");
127
127
  // Generate the signature ready to be broadcasted
128
- const signature = `0x${tx.serialize().toString("hex")}`;
128
+ const signature = `0x${signedTx.serialize().toString("hex")}`;
129
+
129
130
  // build optimistic operation
130
131
  const txHash = ""; // resolved at broadcast time
131
132
 
@@ -118,7 +118,6 @@ const ethereum: AppSpec<Transaction> = {
118
118
  appQuery: {
119
119
  model: DeviceModelId.nanoS,
120
120
  appName: "Ethereum",
121
- appVersion: "1.5.0-rc3",
122
121
  },
123
122
  testTimeout: 4 * 60 * 1000,
124
123
  transactionCheck: ({ maxSpendable }) => {
@@ -380,7 +379,6 @@ const ethereumRopsten: AppSpec<Transaction> = {
380
379
  appQuery: {
381
380
  model: DeviceModelId.nanoS,
382
381
  appName: "Ethereum",
383
- appVersion: "1.5.0-rc3",
384
382
  },
385
383
  testTimeout: 2 * 60 * 1000,
386
384
  transactionCheck: ({ maxSpendable }) => {