@ledgerhq/live-common 21.5.1-btcjs.3 → 21.7.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 (489) hide show
  1. package/lib/__tests__/test-helpers/bridge.js +2 -2
  2. package/lib/__tests__/test-helpers/bridge.js.map +1 -1
  3. package/lib/account/addAccounts.d.ts.map +1 -1
  4. package/lib/account/addAccounts.js +1 -2
  5. package/lib/account/addAccounts.js.map +1 -1
  6. package/lib/account/formatters.js +2 -2
  7. package/lib/account/formatters.js.map +1 -1
  8. package/lib/account/support.d.ts.map +1 -1
  9. package/lib/account/support.js +1 -24
  10. package/lib/account/support.js.map +1 -1
  11. package/lib/api/explorerConfig/index.d.ts.map +1 -1
  12. package/lib/api/explorerConfig/index.js +0 -43
  13. package/lib/api/explorerConfig/index.js.map +1 -1
  14. package/lib/bot/engine.js +1 -1
  15. package/lib/bot/index.d.ts +1 -2
  16. package/lib/bot/index.d.ts.map +1 -1
  17. package/lib/bot/index.js +38 -21
  18. package/lib/bot/index.js.map +1 -1
  19. package/lib/bot/test.bot.js +1 -4
  20. package/lib/bot/test.bot.js.map +1 -1
  21. package/lib/bridge/jsHelpers.d.ts +2 -6
  22. package/lib/bridge/jsHelpers.d.ts.map +1 -1
  23. package/lib/bridge/jsHelpers.js +9 -22
  24. package/lib/bridge/jsHelpers.js.map +1 -1
  25. package/lib/cross.d.ts.map +1 -1
  26. package/lib/cross.js +2 -28
  27. package/lib/cross.js.map +1 -1
  28. package/lib/env.d.ts +10 -5
  29. package/lib/env.d.ts.map +1 -1
  30. package/lib/env.js +5 -0
  31. package/lib/env.js.map +1 -1
  32. package/lib/env.react.d.ts +1 -1
  33. package/lib/env.react.d.ts.map +1 -1
  34. package/lib/exchange/swap/getKYCStatus.d.ts.map +1 -1
  35. package/lib/exchange/swap/getKYCStatus.js +11 -5
  36. package/lib/exchange/swap/getKYCStatus.js.map +1 -1
  37. package/lib/exchange/swap/mock.d.ts +2 -1
  38. package/lib/exchange/swap/mock.d.ts.map +1 -1
  39. package/lib/exchange/swap/mock.js +15 -1
  40. package/lib/exchange/swap/mock.js.map +1 -1
  41. package/lib/families/bitcoin/account.d.ts.map +1 -1
  42. package/lib/families/bitcoin/account.js +2 -3
  43. package/lib/families/bitcoin/account.js.map +1 -1
  44. package/lib/families/bitcoin/datasets/bitcoin.js +6 -6
  45. package/lib/families/bitcoin/datasets/bitcoin.js.map +1 -1
  46. package/lib/families/bitcoin/datasets/litecoin.js +3 -3
  47. package/lib/families/bitcoin/datasets/litecoin.js.map +1 -1
  48. package/lib/families/bitcoin/serialization.d.ts +2 -2
  49. package/lib/families/bitcoin/serialization.d.ts.map +1 -1
  50. package/lib/families/bitcoin/serialization.js +4 -8
  51. package/lib/families/bitcoin/serialization.js.map +1 -1
  52. package/lib/families/bitcoin/specs.d.ts +2 -0
  53. package/lib/families/bitcoin/specs.d.ts.map +1 -1
  54. package/lib/families/bitcoin/specs.js +34 -28
  55. package/lib/families/bitcoin/specs.js.map +1 -1
  56. package/lib/families/bitcoin/speculos-deviceActions.js +2 -2
  57. package/lib/families/bitcoin/speculos-deviceActions.js.map +1 -1
  58. package/lib/families/bitcoin/test-dataset.js +1 -1
  59. package/lib/families/bitcoin/test-dataset.js.map +1 -1
  60. package/lib/families/bitcoin/transaction.d.ts +3 -3
  61. package/lib/families/bitcoin/transaction.d.ts.map +1 -1
  62. package/lib/families/bitcoin/transaction.js +61 -64
  63. package/lib/families/bitcoin/transaction.js.map +1 -1
  64. package/lib/families/bitcoin/types.d.ts +36 -66
  65. package/lib/families/bitcoin/types.d.ts.map +1 -1
  66. package/lib/families/bitcoin/types.js +1 -16
  67. package/lib/families/bitcoin/types.js.map +1 -1
  68. package/lib/families/crypto_org/js-synchronisation.d.ts.map +1 -1
  69. package/lib/families/crypto_org/js-synchronisation.js +5 -13
  70. package/lib/families/crypto_org/js-synchronisation.js.map +1 -1
  71. package/lib/families/elrond/js-synchronisation.d.ts.map +1 -1
  72. package/lib/families/elrond/js-synchronisation.js +4 -12
  73. package/lib/families/elrond/js-synchronisation.js.map +1 -1
  74. package/lib/families/elrond/logic.js +22 -3
  75. package/lib/families/elrond/logic.js.map +1 -1
  76. package/lib/families/elrond/test-dataset.d.ts.map +1 -1
  77. package/lib/families/elrond/test-dataset.js +79 -76
  78. package/lib/families/elrond/test-dataset.js.map +1 -1
  79. package/lib/families/ethereum/synchronisation.d.ts.map +1 -1
  80. package/lib/families/ethereum/synchronisation.js +5 -14
  81. package/lib/families/ethereum/synchronisation.js.map +1 -1
  82. package/lib/families/ethereum/test-dataset.d.ts.map +1 -1
  83. package/lib/families/ethereum/test-dataset.js +2 -3
  84. package/lib/families/ethereum/test-dataset.js.map +1 -1
  85. package/lib/families/polkadot/js-synchronisation.d.ts.map +1 -1
  86. package/lib/families/polkadot/js-synchronisation.js +4 -12
  87. package/lib/families/polkadot/js-synchronisation.js.map +1 -1
  88. package/lib/families/stellar/js-synchronization.d.ts.map +1 -1
  89. package/lib/families/stellar/js-synchronization.js +4 -12
  90. package/lib/families/stellar/js-synchronization.js.map +1 -1
  91. package/lib/families/tezos/synchronisation.d.ts.map +1 -1
  92. package/lib/families/tezos/synchronisation.js +7 -19
  93. package/lib/families/tezos/synchronisation.js.map +1 -1
  94. package/lib/generated/bridge/js.d.ts +0 -4
  95. package/lib/generated/bridge/js.d.ts.map +1 -1
  96. package/lib/generated/bridge/js.js +18 -20
  97. package/lib/generated/bridge/js.js.map +1 -1
  98. package/lib/generated/specs.d.ts +2 -0
  99. package/lib/generated/specs.d.ts.map +1 -1
  100. package/lib/migrations/accounts-dataset.d.ts.map +1 -1
  101. package/lib/migrations/accounts-dataset.js +2 -4
  102. package/lib/migrations/accounts-dataset.js.map +1 -1
  103. package/lib/migrations/accounts.d.ts.map +1 -1
  104. package/lib/migrations/accounts.js +0 -17
  105. package/lib/migrations/accounts.js.map +1 -1
  106. package/lib/mock/account.d.ts.map +1 -1
  107. package/lib/mock/account.js +1 -2
  108. package/lib/mock/account.js.map +1 -1
  109. package/lib/network.d.ts +3 -1
  110. package/lib/network.d.ts.map +1 -1
  111. package/lib/network.js +2 -13
  112. package/lib/network.js.map +1 -1
  113. package/package.json +2 -30
  114. package/src/.DS_Store +0 -0
  115. package/src/__tests__/.DS_Store +0 -0
  116. package/src/__tests__/__snapshots__/.DS_Store +0 -0
  117. package/src/__tests__/__snapshots__/all.libcore.ts.snap +27169 -487
  118. package/src/__tests__/__snapshots__/portfolio.v2.ts.snap +0 -3
  119. package/src/__tests__/test-helpers/bridge.ts +2 -2
  120. package/src/account/addAccounts.ts +1 -2
  121. package/src/account/formatters.ts +2 -2
  122. package/src/account/support.ts +1 -24
  123. package/src/api/explorerConfig/index.ts +4 -35
  124. package/src/bot/engine.ts +1 -1
  125. package/src/bot/index.ts +25 -10
  126. package/src/bot/test.bot.ts +1 -6
  127. package/src/bridge/jsHelpers.ts +8 -37
  128. package/src/cross.ts +2 -30
  129. package/src/env.ts +5 -0
  130. package/src/exchange/swap/getKYCStatus.ts +5 -1
  131. package/src/exchange/swap/mock.ts +11 -0
  132. package/src/families/bitcoin/account.ts +1 -2
  133. package/src/families/bitcoin/datasets/bitcoin.ts +6 -6
  134. package/src/families/bitcoin/datasets/litecoin.ts +6 -6
  135. package/src/families/bitcoin/serialization.ts +0 -6
  136. package/src/families/bitcoin/specs.ts +36 -28
  137. package/src/families/bitcoin/speculos-deviceActions.ts +1 -1
  138. package/src/families/bitcoin/test-dataset.ts +1 -1
  139. package/src/families/bitcoin/transaction.ts +93 -98
  140. package/src/families/bitcoin/types.ts +37 -95
  141. package/src/families/crypto_org/js-synchronisation.ts +4 -22
  142. package/src/families/elrond/js-synchronisation.ts +3 -11
  143. package/src/families/elrond/logic.ts +1 -1
  144. package/src/families/elrond/test-dataset.ts +89 -84
  145. package/src/families/ethereum/synchronisation.ts +4 -13
  146. package/src/families/ethereum/test-dataset.ts +2 -3
  147. package/src/families/polkadot/js-synchronisation.ts +3 -11
  148. package/src/families/stellar/js-synchronization.ts +4 -12
  149. package/src/families/tezos/synchronisation.ts +3 -15
  150. package/src/generated/bridge/js.ts +0 -3
  151. package/src/migrations/accounts-dataset.ts +0 -3
  152. package/src/migrations/accounts.ts +0 -18
  153. package/src/mock/account.ts +0 -2
  154. package/src/network.ts +9 -10
  155. package/lib/__tests__/families/bitcoin/logic.d.ts +0 -2
  156. package/lib/__tests__/families/bitcoin/logic.d.ts.map +0 -1
  157. package/lib/__tests__/families/bitcoin/logic.js +0 -39
  158. package/lib/__tests__/families/bitcoin/logic.js.map +0 -1
  159. package/lib/__tests__/families/bitcoin/wallet-btc/bitcoin.test.d.ts +0 -2
  160. package/lib/__tests__/families/bitcoin/wallet-btc/bitcoin.test.d.ts.map +0 -1
  161. package/lib/__tests__/families/bitcoin/wallet-btc/bitcoin.test.js +0 -85
  162. package/lib/__tests__/families/bitcoin/wallet-btc/bitcoin.test.js.map +0 -1
  163. package/lib/__tests__/families/bitcoin/wallet-btc/utils.test.d.ts +0 -2
  164. package/lib/__tests__/families/bitcoin/wallet-btc/utils.test.d.ts.map +0 -1
  165. package/lib/__tests__/families/bitcoin/wallet-btc/utils.test.js +0 -134
  166. package/lib/__tests__/families/bitcoin/wallet-btc/utils.test.js.map +0 -1
  167. package/lib/__tests__/families/bitcoin/wallet-btc/wallet.estimateMaxSpendable.test.d.ts +0 -2
  168. package/lib/__tests__/families/bitcoin/wallet-btc/wallet.estimateMaxSpendable.test.d.ts.map +0 -1
  169. package/lib/__tests__/families/bitcoin/wallet-btc/wallet.estimateMaxSpendable.test.js +0 -119
  170. package/lib/__tests__/families/bitcoin/wallet-btc/wallet.estimateMaxSpendable.test.js.map +0 -1
  171. package/lib/__tests__/families/bitcoin/wallet-btc/wallet.integration.test.d.ts +0 -2
  172. package/lib/__tests__/families/bitcoin/wallet-btc/wallet.integration.test.d.ts.map +0 -1
  173. package/lib/__tests__/families/bitcoin/wallet-btc/wallet.integration.test.js +0 -196
  174. package/lib/__tests__/families/bitcoin/wallet-btc/wallet.integration.test.js.map +0 -1
  175. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.pickingStrategies.integration.test.d.ts +0 -2
  176. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.pickingStrategies.integration.test.d.ts.map +0 -1
  177. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.pickingStrategies.integration.test.js +0 -376
  178. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.pickingStrategies.integration.test.js.map +0 -1
  179. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.reorg.integration.test.d.ts +0 -2
  180. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.reorg.integration.test.d.ts.map +0 -1
  181. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.reorg.integration.test.js +0 -250
  182. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.reorg.integration.test.js.map +0 -1
  183. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.synced.unit.test.d.ts +0 -2
  184. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.synced.unit.test.d.ts.map +0 -1
  185. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.synced.unit.test.js +0 -128
  186. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.synced.unit.test.js.map +0 -1
  187. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.syncing.integration.test.d.ts +0 -2
  188. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.syncing.integration.test.d.ts.map +0 -1
  189. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.syncing.integration.test.js +0 -396
  190. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.syncing.integration.test.js.map +0 -1
  191. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.NP2WPKH.integration.test.d.ts +0 -2
  192. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.NP2WPKH.integration.test.d.ts.map +0 -1
  193. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.NP2WPKH.integration.test.js +0 -286
  194. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.NP2WPKH.integration.test.js.map +0 -1
  195. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.P2WPKH.integration.test.d.ts +0 -2
  196. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.P2WPKH.integration.test.d.ts.map +0 -1
  197. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.P2WPKH.integration.test.js +0 -276
  198. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.P2WPKH.integration.test.js.map +0 -1
  199. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.integration.test.d.ts +0 -2
  200. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.integration.test.d.ts.map +0 -1
  201. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.integration.test.js +0 -414
  202. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.integration.test.js.map +0 -1
  203. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.litecoin.test.d.ts +0 -2
  204. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.litecoin.test.d.ts.map +0 -1
  205. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.litecoin.test.js +0 -269
  206. package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.litecoin.test.js.map +0 -1
  207. package/lib/families/bitcoin/bridge/js.d.ts +0 -8
  208. package/lib/families/bitcoin/bridge/js.d.ts.map +0 -1
  209. package/lib/families/bitcoin/bridge/js.js +0 -149
  210. package/lib/families/bitcoin/bridge/js.js.map +0 -1
  211. package/lib/families/bitcoin/cache.d.ts +0 -28
  212. package/lib/families/bitcoin/cache.d.ts.map +0 -1
  213. package/lib/families/bitcoin/cache.js +0 -109
  214. package/lib/families/bitcoin/cache.js.map +0 -1
  215. package/lib/families/bitcoin/getAccountNetworkInfo.d.ts +0 -6
  216. package/lib/families/bitcoin/getAccountNetworkInfo.d.ts.map +0 -1
  217. package/lib/families/bitcoin/getAccountNetworkInfo.js +0 -124
  218. package/lib/families/bitcoin/getAccountNetworkInfo.js.map +0 -1
  219. package/lib/families/bitcoin/getAccountNetworkInfo.test.d.ts +0 -2
  220. package/lib/families/bitcoin/getAccountNetworkInfo.test.d.ts.map +0 -1
  221. package/lib/families/bitcoin/getAccountNetworkInfo.test.js +0 -71
  222. package/lib/families/bitcoin/getAccountNetworkInfo.test.js.map +0 -1
  223. package/lib/families/bitcoin/js-broadcast.d.ts +0 -11
  224. package/lib/families/bitcoin/js-broadcast.d.ts.map +0 -1
  225. package/lib/families/bitcoin/js-broadcast.js +0 -73
  226. package/lib/families/bitcoin/js-broadcast.js.map +0 -1
  227. package/lib/families/bitcoin/js-buildTransaction.d.ts +0 -5
  228. package/lib/families/bitcoin/js-buildTransaction.d.ts.map +0 -1
  229. package/lib/families/bitcoin/js-buildTransaction.js +0 -106
  230. package/lib/families/bitcoin/js-buildTransaction.js.map +0 -1
  231. package/lib/families/bitcoin/js-createTransaction.d.ts +0 -9
  232. package/lib/families/bitcoin/js-createTransaction.d.ts.map +0 -1
  233. package/lib/families/bitcoin/js-createTransaction.js +0 -27
  234. package/lib/families/bitcoin/js-createTransaction.js.map +0 -1
  235. package/lib/families/bitcoin/js-estimateMaxSpendable.d.ts +0 -15
  236. package/lib/families/bitcoin/js-estimateMaxSpendable.d.ts.map +0 -1
  237. package/lib/families/bitcoin/js-estimateMaxSpendable.js +0 -95
  238. package/lib/families/bitcoin/js-estimateMaxSpendable.js.map +0 -1
  239. package/lib/families/bitcoin/js-getFeesForTransaction.d.ts +0 -26
  240. package/lib/families/bitcoin/js-getFeesForTransaction.d.ts.map +0 -1
  241. package/lib/families/bitcoin/js-getFeesForTransaction.js +0 -100
  242. package/lib/families/bitcoin/js-getFeesForTransaction.js.map +0 -1
  243. package/lib/families/bitcoin/js-getTransactionStatus.d.ts +0 -5
  244. package/lib/families/bitcoin/js-getTransactionStatus.d.ts.map +0 -1
  245. package/lib/families/bitcoin/js-getTransactionStatus.js +0 -131
  246. package/lib/families/bitcoin/js-getTransactionStatus.js.map +0 -1
  247. package/lib/families/bitcoin/js-prepareTransaction.d.ts +0 -5
  248. package/lib/families/bitcoin/js-prepareTransaction.d.ts.map +0 -1
  249. package/lib/families/bitcoin/js-prepareTransaction.js +0 -80
  250. package/lib/families/bitcoin/js-prepareTransaction.js.map +0 -1
  251. package/lib/families/bitcoin/js-signOperation.d.ts +0 -10
  252. package/lib/families/bitcoin/js-signOperation.d.ts.map +0 -1
  253. package/lib/families/bitcoin/js-signOperation.js +0 -212
  254. package/lib/families/bitcoin/js-signOperation.js.map +0 -1
  255. package/lib/families/bitcoin/js-synchronisation.d.ts +0 -10
  256. package/lib/families/bitcoin/js-synchronisation.d.ts.map +0 -1
  257. package/lib/families/bitcoin/js-synchronisation.js +0 -431
  258. package/lib/families/bitcoin/js-synchronisation.js.map +0 -1
  259. package/lib/families/bitcoin/logic.d.ts +0 -34
  260. package/lib/families/bitcoin/logic.d.ts.map +0 -1
  261. package/lib/families/bitcoin/logic.js +0 -290
  262. package/lib/families/bitcoin/logic.js.map +0 -1
  263. package/lib/families/bitcoin/networks.d.ts +0 -3
  264. package/lib/families/bitcoin/networks.d.ts.map +0 -1
  265. package/lib/families/bitcoin/networks.js +0 -379
  266. package/lib/families/bitcoin/networks.js.map +0 -1
  267. package/lib/families/bitcoin/wallet-btc/account.d.ts +0 -35
  268. package/lib/families/bitcoin/wallet-btc/account.d.ts.map +0 -1
  269. package/lib/families/bitcoin/wallet-btc/account.js +0 -3
  270. package/lib/families/bitcoin/wallet-btc/account.js.map +0 -1
  271. package/lib/families/bitcoin/wallet-btc/crypto/base.d.ts +0 -19
  272. package/lib/families/bitcoin/wallet-btc/crypto/base.d.ts.map +0 -1
  273. package/lib/families/bitcoin/wallet-btc/crypto/base.js +0 -136
  274. package/lib/families/bitcoin/wallet-btc/crypto/base.js.map +0 -1
  275. package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.d.ts +0 -10
  276. package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.d.ts.map +0 -1
  277. package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.js +0 -177
  278. package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.js.map +0 -1
  279. package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.d.ts +0 -16
  280. package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.d.ts.map +0 -1
  281. package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.js +0 -84
  282. package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.js.map +0 -1
  283. package/lib/families/bitcoin/wallet-btc/crypto/bitcoingold.d.ts +0 -8
  284. package/lib/families/bitcoin/wallet-btc/crypto/bitcoingold.d.ts.map +0 -1
  285. package/lib/families/bitcoin/wallet-btc/crypto/bitcoingold.js +0 -36
  286. package/lib/families/bitcoin/wallet-btc/crypto/bitcoingold.js.map +0 -1
  287. package/lib/families/bitcoin/wallet-btc/crypto/dash.d.ts +0 -8
  288. package/lib/families/bitcoin/wallet-btc/crypto/dash.d.ts.map +0 -1
  289. package/lib/families/bitcoin/wallet-btc/crypto/dash.js +0 -44
  290. package/lib/families/bitcoin/wallet-btc/crypto/dash.js.map +0 -1
  291. package/lib/families/bitcoin/wallet-btc/crypto/digibyte.d.ts +0 -9
  292. package/lib/families/bitcoin/wallet-btc/crypto/digibyte.d.ts.map +0 -1
  293. package/lib/families/bitcoin/wallet-btc/crypto/digibyte.js +0 -56
  294. package/lib/families/bitcoin/wallet-btc/crypto/digibyte.js.map +0 -1
  295. package/lib/families/bitcoin/wallet-btc/crypto/doge.d.ts +0 -8
  296. package/lib/families/bitcoin/wallet-btc/crypto/doge.d.ts.map +0 -1
  297. package/lib/families/bitcoin/wallet-btc/crypto/doge.js +0 -36
  298. package/lib/families/bitcoin/wallet-btc/crypto/doge.js.map +0 -1
  299. package/lib/families/bitcoin/wallet-btc/crypto/factory.d.ts +0 -3
  300. package/lib/families/bitcoin/wallet-btc/crypto/factory.d.ts.map +0 -1
  301. package/lib/families/bitcoin/wallet-btc/crypto/factory.js +0 -130
  302. package/lib/families/bitcoin/wallet-btc/crypto/factory.js.map +0 -1
  303. package/lib/families/bitcoin/wallet-btc/crypto/index.d.ts +0 -18
  304. package/lib/families/bitcoin/wallet-btc/crypto/index.d.ts.map +0 -1
  305. package/lib/families/bitcoin/wallet-btc/crypto/index.js +0 -45
  306. package/lib/families/bitcoin/wallet-btc/crypto/index.js.map +0 -1
  307. package/lib/families/bitcoin/wallet-btc/crypto/komodo.d.ts +0 -8
  308. package/lib/families/bitcoin/wallet-btc/crypto/komodo.d.ts.map +0 -1
  309. package/lib/families/bitcoin/wallet-btc/crypto/komodo.js +0 -39
  310. package/lib/families/bitcoin/wallet-btc/crypto/komodo.js.map +0 -1
  311. package/lib/families/bitcoin/wallet-btc/crypto/litecoin.d.ts +0 -19
  312. package/lib/families/bitcoin/wallet-btc/crypto/litecoin.d.ts.map +0 -1
  313. package/lib/families/bitcoin/wallet-btc/crypto/litecoin.js +0 -135
  314. package/lib/families/bitcoin/wallet-btc/crypto/litecoin.js.map +0 -1
  315. package/lib/families/bitcoin/wallet-btc/crypto/peercoin.d.ts +0 -8
  316. package/lib/families/bitcoin/wallet-btc/crypto/peercoin.d.ts.map +0 -1
  317. package/lib/families/bitcoin/wallet-btc/crypto/peercoin.js +0 -38
  318. package/lib/families/bitcoin/wallet-btc/crypto/peercoin.js.map +0 -1
  319. package/lib/families/bitcoin/wallet-btc/crypto/pivx.d.ts +0 -8
  320. package/lib/families/bitcoin/wallet-btc/crypto/pivx.d.ts.map +0 -1
  321. package/lib/families/bitcoin/wallet-btc/crypto/pivx.js +0 -40
  322. package/lib/families/bitcoin/wallet-btc/crypto/pivx.js.map +0 -1
  323. package/lib/families/bitcoin/wallet-btc/crypto/qtum.d.ts +0 -8
  324. package/lib/families/bitcoin/wallet-btc/crypto/qtum.d.ts.map +0 -1
  325. package/lib/families/bitcoin/wallet-btc/crypto/qtum.js +0 -36
  326. package/lib/families/bitcoin/wallet-btc/crypto/qtum.js.map +0 -1
  327. package/lib/families/bitcoin/wallet-btc/crypto/stakenet.d.ts +0 -8
  328. package/lib/families/bitcoin/wallet-btc/crypto/stakenet.d.ts.map +0 -1
  329. package/lib/families/bitcoin/wallet-btc/crypto/stakenet.js +0 -40
  330. package/lib/families/bitcoin/wallet-btc/crypto/stakenet.js.map +0 -1
  331. package/lib/families/bitcoin/wallet-btc/crypto/stealth.d.ts +0 -8
  332. package/lib/families/bitcoin/wallet-btc/crypto/stealth.d.ts.map +0 -1
  333. package/lib/families/bitcoin/wallet-btc/crypto/stealth.js +0 -40
  334. package/lib/families/bitcoin/wallet-btc/crypto/stealth.js.map +0 -1
  335. package/lib/families/bitcoin/wallet-btc/crypto/stratis.d.ts +0 -8
  336. package/lib/families/bitcoin/wallet-btc/crypto/stratis.d.ts.map +0 -1
  337. package/lib/families/bitcoin/wallet-btc/crypto/stratis.js +0 -37
  338. package/lib/families/bitcoin/wallet-btc/crypto/stratis.js.map +0 -1
  339. package/lib/families/bitcoin/wallet-btc/crypto/types.d.ts +0 -15
  340. package/lib/families/bitcoin/wallet-btc/crypto/types.d.ts.map +0 -1
  341. package/lib/families/bitcoin/wallet-btc/crypto/types.js +0 -3
  342. package/lib/families/bitcoin/wallet-btc/crypto/types.js.map +0 -1
  343. package/lib/families/bitcoin/wallet-btc/crypto/via.d.ts +0 -8
  344. package/lib/families/bitcoin/wallet-btc/crypto/via.d.ts.map +0 -1
  345. package/lib/families/bitcoin/wallet-btc/crypto/via.js +0 -36
  346. package/lib/families/bitcoin/wallet-btc/crypto/via.js.map +0 -1
  347. package/lib/families/bitcoin/wallet-btc/crypto/vtc.d.ts +0 -8
  348. package/lib/families/bitcoin/wallet-btc/crypto/vtc.d.ts.map +0 -1
  349. package/lib/families/bitcoin/wallet-btc/crypto/vtc.js +0 -36
  350. package/lib/families/bitcoin/wallet-btc/crypto/vtc.js.map +0 -1
  351. package/lib/families/bitcoin/wallet-btc/crypto/zec.d.ts +0 -18
  352. package/lib/families/bitcoin/wallet-btc/crypto/zec.d.ts.map +0 -1
  353. package/lib/families/bitcoin/wallet-btc/crypto/zec.js +0 -72
  354. package/lib/families/bitcoin/wallet-btc/crypto/zec.js.map +0 -1
  355. package/lib/families/bitcoin/wallet-btc/crypto/zen.d.ts +0 -18
  356. package/lib/families/bitcoin/wallet-btc/crypto/zen.d.ts.map +0 -1
  357. package/lib/families/bitcoin/wallet-btc/crypto/zen.js +0 -97
  358. package/lib/families/bitcoin/wallet-btc/crypto/zen.js.map +0 -1
  359. package/lib/families/bitcoin/wallet-btc/explorer/index.d.ts +0 -31
  360. package/lib/families/bitcoin/wallet-btc/explorer/index.d.ts.map +0 -1
  361. package/lib/families/bitcoin/wallet-btc/explorer/index.js +0 -393
  362. package/lib/families/bitcoin/wallet-btc/explorer/index.js.map +0 -1
  363. package/lib/families/bitcoin/wallet-btc/explorer/types.d.ts +0 -13
  364. package/lib/families/bitcoin/wallet-btc/explorer/types.d.ts.map +0 -1
  365. package/lib/families/bitcoin/wallet-btc/explorer/types.js +0 -3
  366. package/lib/families/bitcoin/wallet-btc/explorer/types.js.map +0 -1
  367. package/lib/families/bitcoin/wallet-btc/index.d.ts +0 -15
  368. package/lib/families/bitcoin/wallet-btc/index.d.ts.map +0 -1
  369. package/lib/families/bitcoin/wallet-btc/index.js +0 -80
  370. package/lib/families/bitcoin/wallet-btc/index.js.map +0 -1
  371. package/lib/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.d.ts +0 -13
  372. package/lib/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.d.ts.map +0 -1
  373. package/lib/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.js +0 -237
  374. package/lib/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.js.map +0 -1
  375. package/lib/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.d.ts +0 -13
  376. package/lib/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.d.ts.map +0 -1
  377. package/lib/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.js +0 -146
  378. package/lib/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.js.map +0 -1
  379. package/lib/families/bitcoin/wallet-btc/pickingstrategies/Merge.d.ts +0 -13
  380. package/lib/families/bitcoin/wallet-btc/pickingstrategies/Merge.d.ts.map +0 -1
  381. package/lib/families/bitcoin/wallet-btc/pickingstrategies/Merge.js +0 -146
  382. package/lib/families/bitcoin/wallet-btc/pickingstrategies/Merge.js.map +0 -1
  383. package/lib/families/bitcoin/wallet-btc/pickingstrategies/types.d.ts +0 -23
  384. package/lib/families/bitcoin/wallet-btc/pickingstrategies/types.d.ts.map +0 -1
  385. package/lib/families/bitcoin/wallet-btc/pickingstrategies/types.js +0 -13
  386. package/lib/families/bitcoin/wallet-btc/pickingstrategies/types.js.map +0 -1
  387. package/lib/families/bitcoin/wallet-btc/storage/index.d.ts +0 -58
  388. package/lib/families/bitcoin/wallet-btc/storage/index.d.ts.map +0 -1
  389. package/lib/families/bitcoin/wallet-btc/storage/index.js +0 -228
  390. package/lib/families/bitcoin/wallet-btc/storage/index.js.map +0 -1
  391. package/lib/families/bitcoin/wallet-btc/storage/mock.d.ts +0 -58
  392. package/lib/families/bitcoin/wallet-btc/storage/mock.d.ts.map +0 -1
  393. package/lib/families/bitcoin/wallet-btc/storage/mock.js +0 -228
  394. package/lib/families/bitcoin/wallet-btc/storage/mock.js.map +0 -1
  395. package/lib/families/bitcoin/wallet-btc/storage/types.d.ts +0 -63
  396. package/lib/families/bitcoin/wallet-btc/storage/types.d.ts.map +0 -1
  397. package/lib/families/bitcoin/wallet-btc/storage/types.js +0 -3
  398. package/lib/families/bitcoin/wallet-btc/storage/types.js.map +0 -1
  399. package/lib/families/bitcoin/wallet-btc/types.d.ts +0 -25
  400. package/lib/families/bitcoin/wallet-btc/types.d.ts.map +0 -1
  401. package/lib/families/bitcoin/wallet-btc/types.js +0 -10
  402. package/lib/families/bitcoin/wallet-btc/types.js.map +0 -1
  403. package/lib/families/bitcoin/wallet-btc/utils/eventemitter.d.ts +0 -6
  404. package/lib/families/bitcoin/wallet-btc/utils/eventemitter.d.ts.map +0 -1
  405. package/lib/families/bitcoin/wallet-btc/utils/eventemitter.js +0 -64
  406. package/lib/families/bitcoin/wallet-btc/utils/eventemitter.js.map +0 -1
  407. package/lib/families/bitcoin/wallet-btc/utils.d.ts +0 -12
  408. package/lib/families/bitcoin/wallet-btc/utils.d.ts.map +0 -1
  409. package/lib/families/bitcoin/wallet-btc/utils.js +0 -166
  410. package/lib/families/bitcoin/wallet-btc/utils.js.map +0 -1
  411. package/lib/families/bitcoin/wallet-btc/wallet.d.ts +0 -73
  412. package/lib/families/bitcoin/wallet-btc/wallet.d.ts.map +0 -1
  413. package/lib/families/bitcoin/wallet-btc/wallet.js +0 -464
  414. package/lib/families/bitcoin/wallet-btc/wallet.js.map +0 -1
  415. package/lib/families/bitcoin/wallet-btc/xpub.d.ts +0 -55
  416. package/lib/families/bitcoin/wallet-btc/xpub.d.ts.map +0 -1
  417. package/lib/families/bitcoin/wallet-btc/xpub.js +0 -585
  418. package/lib/families/bitcoin/wallet-btc/xpub.js.map +0 -1
  419. package/lib/mock/Btc.d.ts +0 -16
  420. package/lib/mock/Btc.d.ts.map +0 -1
  421. package/lib/mock/Btc.js +0 -104
  422. package/lib/mock/Btc.js.map +0 -1
  423. package/src/__tests__/families/bitcoin/logic.ts +0 -40
  424. package/src/__tests__/families/bitcoin/wallet-btc/bitcoin.test.ts +0 -83
  425. package/src/__tests__/families/bitcoin/wallet-btc/utils.test.ts +0 -210
  426. package/src/__tests__/families/bitcoin/wallet-btc/wallet.estimateMaxSpendable.test.ts +0 -56
  427. package/src/__tests__/families/bitcoin/wallet-btc/wallet.integration.test.ts +0 -107
  428. package/src/__tests__/families/bitcoin/wallet-btc/xpub.pickingStrategies.integration.test.ts +0 -366
  429. package/src/__tests__/families/bitcoin/wallet-btc/xpub.reorg.integration.test.ts +0 -135
  430. package/src/__tests__/families/bitcoin/wallet-btc/xpub.synced.unit.test.ts +0 -74
  431. package/src/__tests__/families/bitcoin/wallet-btc/xpub.syncing.integration.test.ts +0 -330
  432. package/src/__tests__/families/bitcoin/wallet-btc/xpub.txs.NP2WPKH.integration.test.ts +0 -193
  433. package/src/__tests__/families/bitcoin/wallet-btc/xpub.txs.P2WPKH.integration.test.ts +0 -183
  434. package/src/__tests__/families/bitcoin/wallet-btc/xpub.txs.integration.test.ts +0 -294
  435. package/src/__tests__/families/bitcoin/wallet-btc/xpub.txs.litecoin.test.ts +0 -167
  436. package/src/families/bitcoin/bridge/js.ts +0 -76
  437. package/src/families/bitcoin/cache.ts +0 -76
  438. package/src/families/bitcoin/getAccountNetworkInfo.test.ts +0 -27
  439. package/src/families/bitcoin/getAccountNetworkInfo.ts +0 -61
  440. package/src/families/bitcoin/js-broadcast.ts +0 -26
  441. package/src/families/bitcoin/js-buildTransaction.ts +0 -57
  442. package/src/families/bitcoin/js-createTransaction.ts +0 -27
  443. package/src/families/bitcoin/js-estimateMaxSpendable.ts +0 -36
  444. package/src/families/bitcoin/js-getFeesForTransaction.ts +0 -59
  445. package/src/families/bitcoin/js-getTransactionStatus.ts +0 -118
  446. package/src/families/bitcoin/js-prepareTransaction.ts +0 -35
  447. package/src/families/bitcoin/js-signOperation.ts +0 -164
  448. package/src/families/bitcoin/js-synchronisation.ts +0 -388
  449. package/src/families/bitcoin/logic.ts +0 -251
  450. package/src/families/bitcoin/networks.ts +0 -360
  451. package/src/families/bitcoin/wallet-btc/account.ts +0 -42
  452. package/src/families/bitcoin/wallet-btc/crypto/base.ts +0 -131
  453. package/src/families/bitcoin/wallet-btc/crypto/bitcoin.ts +0 -147
  454. package/src/families/bitcoin/wallet-btc/crypto/bitcoincash.ts +0 -78
  455. package/src/families/bitcoin/wallet-btc/crypto/bitcoingold.ts +0 -13
  456. package/src/families/bitcoin/wallet-btc/crypto/dash.ts +0 -21
  457. package/src/families/bitcoin/wallet-btc/crypto/digibyte.ts +0 -34
  458. package/src/families/bitcoin/wallet-btc/crypto/doge.ts +0 -13
  459. package/src/families/bitcoin/wallet-btc/crypto/factory.ts +0 -106
  460. package/src/families/bitcoin/wallet-btc/crypto/index.ts +0 -17
  461. package/src/families/bitcoin/wallet-btc/crypto/komodo.ts +0 -16
  462. package/src/families/bitcoin/wallet-btc/crypto/litecoin.ts +0 -113
  463. package/src/families/bitcoin/wallet-btc/crypto/peercoin.ts +0 -15
  464. package/src/families/bitcoin/wallet-btc/crypto/pivx.ts +0 -17
  465. package/src/families/bitcoin/wallet-btc/crypto/qtum.ts +0 -13
  466. package/src/families/bitcoin/wallet-btc/crypto/stakenet.ts +0 -17
  467. package/src/families/bitcoin/wallet-btc/crypto/stealth.ts +0 -17
  468. package/src/families/bitcoin/wallet-btc/crypto/stratis.ts +0 -14
  469. package/src/families/bitcoin/wallet-btc/crypto/types.ts +0 -42
  470. package/src/families/bitcoin/wallet-btc/crypto/via.ts +0 -13
  471. package/src/families/bitcoin/wallet-btc/crypto/vtc.ts +0 -13
  472. package/src/families/bitcoin/wallet-btc/crypto/zec.ts +0 -85
  473. package/src/families/bitcoin/wallet-btc/crypto/zen.ts +0 -112
  474. package/src/families/bitcoin/wallet-btc/explorer/index.ts +0 -305
  475. package/src/families/bitcoin/wallet-btc/explorer/types.ts +0 -20
  476. package/src/families/bitcoin/wallet-btc/index.ts +0 -54
  477. package/src/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.ts +0 -229
  478. package/src/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.ts +0 -81
  479. package/src/families/bitcoin/wallet-btc/pickingstrategies/Merge.ts +0 -81
  480. package/src/families/bitcoin/wallet-btc/pickingstrategies/types.ts +0 -41
  481. package/src/families/bitcoin/wallet-btc/storage/index.ts +0 -186
  482. package/src/families/bitcoin/wallet-btc/storage/mock.ts +0 -186
  483. package/src/families/bitcoin/wallet-btc/storage/types.ts +0 -66
  484. package/src/families/bitcoin/wallet-btc/types.ts +0 -26
  485. package/src/families/bitcoin/wallet-btc/utils/eventemitter.ts +0 -9
  486. package/src/families/bitcoin/wallet-btc/utils.ts +0 -153
  487. package/src/families/bitcoin/wallet-btc/wallet.ts +0 -396
  488. package/src/families/bitcoin/wallet-btc/xpub.ts +0 -470
  489. package/src/mock/Btc.ts +0 -47
@@ -1,229 +0,0 @@
1
- import BigNumber from "bignumber.js";
2
- import { flatten, sortBy } from "lodash";
3
- import { NotEnoughBalance } from "@ledgerhq/errors";
4
- import { Output } from "../storage/types";
5
- import Xpub from "../xpub";
6
- import { PickingStrategy } from "./types";
7
- import * as utils from "../utils";
8
- import { Merge } from "./Merge";
9
-
10
- export class CoinSelect extends PickingStrategy {
11
- // eslint-disable-next-line class-methods-use-this
12
- async selectUnspentUtxosToUse(
13
- xpub: Xpub,
14
- amount: BigNumber,
15
- feePerByte: number,
16
- nbOutputsWithoutChange: number
17
- ) {
18
- // get the utxos to use as input
19
- // from all addresses of the account
20
- const addresses = await xpub.getXpubAddresses();
21
-
22
- const unspentUtxos = flatten(
23
- await Promise.all(
24
- addresses.map((address) => xpub.storage.getAddressUnspentUtxos(address))
25
- )
26
- ).filter(
27
- (o) =>
28
- !this.excludedUTXOs.filter(
29
- (x) => x.hash === o.output_hash && x.outputIndex === o.output_index
30
- ).length
31
- );
32
-
33
- /*
34
- * This coin selection is inspired from the one used in Bitcoin Core
35
- * for more details please refer to SelectCoinsBnB
36
- * https://github.com/bitcoin/bitcoin/blob/0c5f67b8e5d9a502c6d321c5e0696bc3e9b4690d/src/wallet/coinselection.cpp
37
- * A coin selection is considered valid if its total value is within the range : [targetAmount, targetAmount + costOfChange]
38
- */
39
- // refer to https://github.com/LedgerHQ/lib-ledger-core/blob/master/core/src/wallet/bitcoin/transaction_builders/BitcoinLikeStrategyUtxoPicker.cpp#L168
40
- const TOTAL_TRIES = 100000;
41
- const longTermFees = 20;
42
-
43
- // Compute cost of change
44
- const fixedSize = utils.estimateTxSize(
45
- 0,
46
- 0,
47
- this.crypto,
48
- this.derivationMode
49
- );
50
- // Size of only 1 output (without fixed size)
51
- const oneOutputSize =
52
- utils.estimateTxSize(0, 1, this.crypto, this.derivationMode) - fixedSize;
53
- // Size 1 signed UTXO (signed input)
54
- const signedUTXOSize =
55
- utils.estimateTxSize(1, 0, this.crypto, this.derivationMode) - fixedSize;
56
-
57
- // Size of unsigned change
58
- const changeSize = oneOutputSize;
59
- // Size of signed change
60
- const signedChangeSize = signedUTXOSize;
61
-
62
- const effectiveFees = feePerByte;
63
- // Here signedChangeSize should be multiplied by discard fees
64
- // but since we don't have access to estimateSmartFees, we assume
65
- // that discard fees are equal to effectiveFees
66
- const costOfChange = effectiveFees * (signedChangeSize + changeSize);
67
-
68
- // Calculate effective value of outputs
69
- let currentAvailableValue = 0;
70
- let effectiveUtxos: Array<{
71
- index: number;
72
- effectiveFees: number;
73
- longTermFees: number;
74
- effectiveValue: number;
75
- }> = [];
76
-
77
- for (let i = 0; i < unspentUtxos.length; i += 1) {
78
- const outEffectiveValue =
79
- Number(unspentUtxos[i].value) - effectiveFees * signedUTXOSize;
80
- if (outEffectiveValue > 0) {
81
- const outEffectiveFees = effectiveFees * signedUTXOSize;
82
- const outLongTermFees = longTermFees * signedUTXOSize;
83
- const effectiveUtxo = {
84
- index: i,
85
- effectiveFees: outEffectiveFees,
86
- longTermFees: outLongTermFees,
87
- effectiveValue: outEffectiveValue,
88
- };
89
- effectiveUtxos.push(effectiveUtxo);
90
- currentAvailableValue += outEffectiveValue;
91
- }
92
- }
93
-
94
- // Get no inputs fees
95
- // At beginning, there are no outputs in tx, so noInputFees are fixed fees
96
- const notInputFees =
97
- effectiveFees * (fixedSize + oneOutputSize * nbOutputsWithoutChange); // at least fixed size and outputs(version...)
98
-
99
- // Start coin selection algorithm (according to SelectCoinBnb from Bitcoin Core)
100
- let currentValue = 0;
101
- // std::vector<bool> currentSelection;
102
- // currentSelection.reserve(utxos.size());
103
- const currentSelection: boolean[] = [];
104
-
105
- // Actual amount we are targetting
106
- const actualTarget = notInputFees + amount.toNumber();
107
-
108
- // Insufficient funds
109
- if (currentAvailableValue < actualTarget) {
110
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
111
- throw new (NotEnoughBalance as any)();
112
- }
113
- // Sort utxos by effectiveValue
114
- effectiveUtxos = sortBy(effectiveUtxos, "effectiveValue");
115
- effectiveUtxos = effectiveUtxos.reverse();
116
-
117
- let currentWaste = 0;
118
- let bestWaste = Number.MAX_SAFE_INTEGER;
119
- let bestSelection: boolean[] = [];
120
-
121
- // Deep first search loop to choose UTXOs
122
- for (let i = 0; i < TOTAL_TRIES; i += 1) {
123
- // Condition for starting a backtrack
124
- let backtrack = false;
125
- if (
126
- currentValue + currentAvailableValue < actualTarget || // Cannot reach target with the amount remaining in currentAvailableValue
127
- currentValue > actualTarget + costOfChange || // Selected value is out of range, go back and try other branch
128
- (currentWaste > bestWaste &&
129
- effectiveUtxos[0].effectiveFees - effectiveUtxos[0].longTermFees > 0)
130
- ) {
131
- // avoid selecting utxos producing more waste
132
- backtrack = true;
133
- } else if (currentValue >= actualTarget) {
134
- // Selected valued is within range
135
- currentWaste += currentValue - actualTarget;
136
- if (currentWaste <= bestWaste) {
137
- bestSelection = currentSelection.slice();
138
- while (effectiveUtxos.length > bestSelection.length) {
139
- bestSelection.push(false);
140
- }
141
- bestSelection.length = effectiveUtxos.length;
142
- bestWaste = currentWaste;
143
- }
144
- // remove the excess value as we will be selecting different coins now
145
- currentWaste -= currentValue - actualTarget;
146
- backtrack = true;
147
- }
148
- // Move backwards
149
- if (backtrack) {
150
- // Walk backwards to find the last included UTXO that still needs to have its omission branch traversed.
151
- while (
152
- currentSelection.length > 0 &&
153
- !currentSelection[currentSelection.length - 1]
154
- ) {
155
- currentSelection.pop();
156
- currentAvailableValue +=
157
- effectiveUtxos[currentSelection.length].effectiveValue;
158
- }
159
-
160
- // Case we walked back to the first utxos and all solutions searched.
161
- if (currentSelection.length === 0) {
162
- break;
163
- }
164
-
165
- // Output was included on previous iterations, try excluding now
166
- currentSelection[currentSelection.length - 1] = false;
167
- const eu = effectiveUtxos[currentSelection.length - 1];
168
- currentValue -= eu.effectiveValue;
169
- currentWaste -= eu.effectiveFees - eu.longTermFees;
170
- } else {
171
- // Moving forwards, continuing down this branch
172
- const eu = effectiveUtxos[currentSelection.length];
173
- // Remove this utxos from currentAvailableValue
174
- currentAvailableValue -= eu.effectiveValue;
175
-
176
- // Avoid searching a branch if the previous UTXO has the same value and same waste and was excluded. Since the ratio of fee to
177
- // long term fee is the same, we only need to check if one of those values match in order to know that the waste is the same.
178
- if (
179
- currentSelection.length > 0 &&
180
- !currentSelection[currentSelection.length - 1] &&
181
- eu.effectiveValue ===
182
- effectiveUtxos[currentSelection.length - 1].effectiveValue &&
183
- eu.effectiveFees ===
184
- effectiveUtxos[currentSelection.length - 1].effectiveFees
185
- ) {
186
- currentSelection.push(false);
187
- } else {
188
- // Inclusion branch first
189
- currentSelection.push(true);
190
- currentValue += eu.effectiveValue;
191
- currentWaste += eu.effectiveFees - eu.longTermFees;
192
- }
193
- }
194
- }
195
- if (bestSelection.length > 0) {
196
- let total = new BigNumber(0);
197
- const unspentUtxoSelected: Output[] = [];
198
- for (let i = 0; i < bestSelection.length; i += 1) {
199
- if (bestSelection[i]) {
200
- unspentUtxoSelected.push(unspentUtxos[effectiveUtxos[i].index]);
201
- total = total.plus(unspentUtxos[effectiveUtxos[i].index].value);
202
- }
203
- }
204
- const fee = utils.estimateTxSize(
205
- unspentUtxoSelected.length,
206
- nbOutputsWithoutChange,
207
- this.crypto,
208
- this.derivationMode
209
- );
210
- return {
211
- totalValue: total,
212
- unspentUtxos: unspentUtxoSelected,
213
- fee: Math.ceil(fee),
214
- needChangeoutput: false,
215
- };
216
- }
217
- const pickingStrategy = new Merge(
218
- this.crypto,
219
- this.derivationMode,
220
- this.excludedUTXOs
221
- );
222
- return pickingStrategy.selectUnspentUtxosToUse(
223
- xpub,
224
- amount,
225
- feePerByte,
226
- nbOutputsWithoutChange
227
- );
228
- }
229
- }
@@ -1,81 +0,0 @@
1
- import BigNumber from "bignumber.js";
2
- import { flatten, sortBy } from "lodash";
3
- import { NotEnoughBalance } from "@ledgerhq/errors";
4
- import { Output } from "../storage/types";
5
- import Xpub from "../xpub";
6
- import { PickingStrategy } from "./types";
7
- import * as utils from "../utils";
8
-
9
- export class DeepFirst extends PickingStrategy {
10
- // eslint-disable-next-line class-methods-use-this
11
- async selectUnspentUtxosToUse(
12
- xpub: Xpub,
13
- amount: BigNumber,
14
- feePerByte: number,
15
- nbOutputsWithoutChange: number
16
- ) {
17
- // get the utxos to use as input
18
- // from all addresses of the account
19
- const addresses = await xpub.getXpubAddresses();
20
-
21
- let unspentUtxos = flatten(
22
- await Promise.all(
23
- addresses.map((address) => xpub.storage.getAddressUnspentUtxos(address))
24
- )
25
- ).filter(
26
- (o) =>
27
- !this.excludedUTXOs.filter(
28
- (x) => x.hash === o.output_hash && x.outputIndex === o.output_index
29
- ).length
30
- );
31
-
32
- unspentUtxos = sortBy(unspentUtxos, "block_height");
33
- // https://metamug.com/article/security/bitcoin-transaction-fee-satoshi-per-byte.html
34
- const txSizeNoInput = utils.estimateTxSize(
35
- 0,
36
- nbOutputsWithoutChange,
37
- this.crypto,
38
- this.derivationMode
39
- );
40
- let fee = txSizeNoInput * feePerByte;
41
- const sizePerInput =
42
- utils.estimateTxSize(1, 0, this.crypto, this.derivationMode) -
43
- utils.estimateTxSize(0, 0, this.crypto, this.derivationMode);
44
-
45
- const sizePerOutput =
46
- utils.estimateTxSize(0, 1, this.crypto, this.derivationMode) -
47
- utils.estimateTxSize(0, 0, this.crypto, this.derivationMode);
48
-
49
- let total = new BigNumber(0);
50
- const unspentUtxoSelected: Output[] = [];
51
-
52
- let i = 0;
53
- while (total.lt(amount.plus(fee))) {
54
- if (!unspentUtxos[i]) {
55
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
- throw new (NotEnoughBalance as any)();
57
- }
58
- total = total.plus(unspentUtxos[i].value);
59
- unspentUtxoSelected.push(unspentUtxos[i]);
60
- fee += sizePerInput * feePerByte;
61
- i += 1;
62
- }
63
-
64
- if (total.minus(amount.plus(fee)).lt(sizePerOutput * feePerByte)) {
65
- // not enough fund to make a change output
66
- return {
67
- totalValue: total,
68
- unspentUtxos: unspentUtxoSelected,
69
- fee: Math.ceil(fee),
70
- needChangeoutput: false,
71
- };
72
- }
73
- fee += sizePerOutput * feePerByte; // fee to make a change output
74
- return {
75
- totalValue: total,
76
- unspentUtxos: unspentUtxoSelected,
77
- fee: Math.ceil(fee),
78
- needChangeoutput: true,
79
- };
80
- }
81
- }
@@ -1,81 +0,0 @@
1
- import BigNumber from "bignumber.js";
2
- import { flatten, sortBy } from "lodash";
3
- import { NotEnoughBalance } from "@ledgerhq/errors";
4
- import { Output } from "../storage/types";
5
- import Xpub from "../xpub";
6
- import { PickingStrategy } from "./types";
7
- import * as utils from "../utils";
8
-
9
- export class Merge extends PickingStrategy {
10
- // eslint-disable-next-line class-methods-use-this
11
- async selectUnspentUtxosToUse(
12
- xpub: Xpub,
13
- amount: BigNumber,
14
- feePerByte: number,
15
- nbOutputsWithoutChange: number
16
- ) {
17
- // get the utxos to use as input
18
- // from all addresses of the account
19
- const addresses = await xpub.getXpubAddresses();
20
-
21
- let unspentUtxos = flatten(
22
- await Promise.all(
23
- addresses.map((address) => xpub.storage.getAddressUnspentUtxos(address))
24
- )
25
- ).filter(
26
- (o) =>
27
- !this.excludedUTXOs.filter(
28
- (x) => x.hash === o.output_hash && x.outputIndex === o.output_index
29
- ).length
30
- );
31
-
32
- const sizePerInput =
33
- utils.estimateTxSize(1, 0, this.crypto, this.derivationMode) -
34
- utils.estimateTxSize(0, 0, this.crypto, this.derivationMode);
35
-
36
- const sizePerOutput =
37
- utils.estimateTxSize(0, 1, this.crypto, this.derivationMode) -
38
- utils.estimateTxSize(0, 0, this.crypto, this.derivationMode);
39
-
40
- unspentUtxos = sortBy(unspentUtxos, "value");
41
- // https://metamug.com/article/security/bitcoin-transaction-fee-satoshi-per-byte.html
42
- const txSizeNoInput = utils.estimateTxSize(
43
- 0,
44
- nbOutputsWithoutChange,
45
- this.crypto,
46
- this.derivationMode
47
- );
48
- let fee = txSizeNoInput * feePerByte;
49
-
50
- let total = new BigNumber(0);
51
- const unspentUtxoSelected: Output[] = [];
52
-
53
- let i = 0;
54
- while (total.lt(amount.plus(fee))) {
55
- if (!unspentUtxos[i]) {
56
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
- throw new (NotEnoughBalance as any)();
58
- }
59
- total = total.plus(unspentUtxos[i].value);
60
- unspentUtxoSelected.push(unspentUtxos[i]);
61
- fee += sizePerInput * feePerByte;
62
- i += 1;
63
- }
64
- if (total.minus(amount.plus(fee)).lt(sizePerOutput * feePerByte)) {
65
- // not enough fund to make a change output
66
- return {
67
- totalValue: total,
68
- unspentUtxos: unspentUtxoSelected,
69
- fee: Math.ceil(fee),
70
- needChangeoutput: false,
71
- };
72
- }
73
- fee += sizePerOutput * feePerByte; // fee to make a change output
74
- return {
75
- totalValue: total,
76
- unspentUtxos: unspentUtxoSelected,
77
- fee: Math.ceil(fee),
78
- needChangeoutput: true,
79
- };
80
- }
81
- }
@@ -1,41 +0,0 @@
1
- import BigNumber from "bignumber.js";
2
- import { ICrypto } from "../crypto/types";
3
- import { Output } from "../storage/types";
4
- import Xpub from "../xpub";
5
-
6
- export abstract class PickingStrategy {
7
- crypto: ICrypto;
8
-
9
- derivationMode: string;
10
-
11
- // TODO Write tests for excluded UTXOs
12
- excludedUTXOs: Array<{
13
- hash: string;
14
- outputIndex: number;
15
- }>;
16
-
17
- constructor(
18
- crypto: ICrypto,
19
- derivationMode: string,
20
- excludedUTXOs: Array<{
21
- hash: string;
22
- outputIndex: number;
23
- }>
24
- ) {
25
- this.crypto = crypto;
26
- this.derivationMode = derivationMode;
27
- this.excludedUTXOs = excludedUTXOs;
28
- }
29
-
30
- abstract selectUnspentUtxosToUse(
31
- xpub: Xpub,
32
- amount: BigNumber,
33
- feePerByte: number,
34
- nbOutputsWithoutChange: number
35
- ): Promise<{
36
- unspentUtxos: Output[];
37
- totalValue: BigNumber;
38
- fee: number;
39
- needChangeoutput: boolean;
40
- }>;
41
- }
@@ -1,186 +0,0 @@
1
- import { findLast, filter, uniqBy, findIndex, has } from "lodash";
2
- import { Input, IStorage, Output, TX, Address } from "./types";
3
-
4
- // a mock storage class that just use js objects
5
- // sql.js would be perfect for the job
6
- class Mock implements IStorage {
7
- txs: TX[] = [];
8
-
9
- // indexes
10
- primaryIndex: { [key: string]: number } = {};
11
-
12
- // accounting
13
- unspentUtxos: { [key: string]: Output[] } = {};
14
-
15
- // only needed to handle the case when the input
16
- // is seen before the output (typically explorer
17
- // returning unordered tx within the same block)
18
- spentUtxos: { [key: string]: Input[] } = {};
19
-
20
- async getLastTx(txFilter: {
21
- account?: number;
22
- index?: number;
23
- address?: string;
24
- confirmed?: boolean;
25
- }) {
26
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
27
- // @ts-ignore
28
- const tx: TX | undefined = findLast(this.txs, (t) => {
29
- return (
30
- (!has(txFilter, "account") || t.account === txFilter.account) &&
31
- (!has(txFilter, "index") || t.index === txFilter.index) &&
32
- (!has(txFilter, "address") || t.address === txFilter.address) &&
33
- (!has(txFilter, "confirmed") ||
34
- (txFilter.confirmed && t.block) ||
35
- (!txFilter.confirmed && !t.block))
36
- );
37
- });
38
- return tx;
39
- }
40
-
41
- async getTx(address: string, hash: string) {
42
- const index = `${address}-${hash}`;
43
- return this.txs[this.primaryIndex[index]];
44
- }
45
-
46
- // TODO: only expose unspentUtxos
47
- async getAddressUnspentUtxos(address: Address) {
48
- const indexAddress = address.address;
49
- return this.unspentUtxos[indexAddress];
50
- }
51
-
52
- async appendTxs(txs: TX[]) {
53
- const lastLength = this.txs.length;
54
-
55
- txs.forEach((tx) => {
56
- const indexAddress = tx.address;
57
- const index = `${indexAddress}-${tx.hash}`;
58
-
59
- // we reject already seen tx
60
- if (this.txs[this.primaryIndex[index]]) {
61
- return;
62
- }
63
-
64
- this.primaryIndex[index] = this.txs.push(tx) - 1;
65
- this.unspentUtxos[indexAddress] = this.unspentUtxos[indexAddress] || [];
66
- this.spentUtxos[indexAddress] = this.spentUtxos[indexAddress] || [];
67
-
68
- tx.outputs.forEach((output) => {
69
- if (output.address === tx.address) {
70
- this.unspentUtxos[indexAddress].push(output);
71
- }
72
- });
73
-
74
- tx.inputs.forEach((input) => {
75
- if (input.address === tx.address) {
76
- this.spentUtxos[indexAddress].push(input);
77
- }
78
- });
79
-
80
- this.unspentUtxos[indexAddress] = this.unspentUtxos[indexAddress].filter(
81
- (output) => {
82
- const matchIndex = findIndex(
83
- this.spentUtxos[indexAddress],
84
- (input: Input) =>
85
- input.output_hash === output.output_hash &&
86
- input.output_index === output.output_index
87
- );
88
- if (matchIndex > -1) {
89
- this.spentUtxos[indexAddress].splice(matchIndex, 1);
90
- return false;
91
- }
92
- return true;
93
- }
94
- );
95
- });
96
-
97
- return this.txs.length - lastLength;
98
- }
99
-
100
- async getUniquesAddresses(addressesFilter: {
101
- account?: number;
102
- index?: number;
103
- }) {
104
- // TODO: to speed up, create more useful indexes in appendTxs
105
- return uniqBy(
106
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
107
- // @ts-ignore
108
- filter(this.txs, addressesFilter).map((tx: TX) => ({
109
- address: tx.address,
110
- account: tx.account,
111
- index: tx.index,
112
- })),
113
- "address"
114
- );
115
- }
116
-
117
- async removeTxs(txsFilter: { account: number; index: number }) {
118
- const newTxs: TX[] = [];
119
-
120
- this.txs.forEach((tx: TX) => {
121
- if (tx.account !== txsFilter.account || tx.index !== txsFilter.index) {
122
- newTxs.push(tx);
123
- return;
124
- }
125
-
126
- // clean
127
- const indexAddress = tx.address;
128
- const index = `${indexAddress}-${tx.hash}`;
129
-
130
- delete this.primaryIndex[index];
131
- delete this.unspentUtxos[indexAddress];
132
- delete this.spentUtxos[indexAddress];
133
- });
134
-
135
- this.txs = newTxs;
136
- }
137
-
138
- // We are a bit ugly because we can't rely undo unspentUTXO
139
- // So we clean the address and rebuild without the pendings
140
- async removePendingTxs(txsFilter: { account: number; index: number }) {
141
- const newTxs: TX[] = [];
142
- const txsToReAdd: TX[] = [];
143
-
144
- this.txs.forEach((tx: TX) => {
145
- if (tx.account !== txsFilter.account || tx.index !== txsFilter.index) {
146
- newTxs.push(tx);
147
- return;
148
- }
149
-
150
- if (tx.block) {
151
- txsToReAdd.push(tx);
152
- }
153
-
154
- // clean
155
- const indexAddress = tx.address;
156
- const index = `${indexAddress}-${tx.hash}`;
157
-
158
- delete this.primaryIndex[index];
159
- delete this.unspentUtxos[indexAddress];
160
- delete this.spentUtxos[indexAddress];
161
- });
162
-
163
- this.txs = newTxs;
164
- await this.appendTxs(txsToReAdd);
165
- }
166
-
167
- async export() {
168
- return {
169
- txs: this.txs,
170
- primaryIndex: this.primaryIndex,
171
- unspentUtxos: this.unspentUtxos,
172
- };
173
- }
174
-
175
- async load(data: {
176
- txs: TX[];
177
- primaryIndex: { [key: string]: number };
178
- unspentUtxos: { [key: string]: Output[] };
179
- }) {
180
- this.txs = data.txs;
181
- this.primaryIndex = data.primaryIndex;
182
- this.unspentUtxos = data.unspentUtxos;
183
- }
184
- }
185
-
186
- export default Mock;