@ledgerhq/live-common 25.2.0-next.0 → 25.2.0-next.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 (316) hide show
  1. package/lib/__tests__/test-helpers/setup.js +1 -0
  2. package/lib/__tests__/test-helpers/setup.js.map +1 -1
  3. package/lib/account/helpers.d.ts.map +1 -1
  4. package/lib/account/helpers.js +1 -0
  5. package/lib/account/helpers.js.map +1 -1
  6. package/lib/account/serialization.d.ts.map +1 -1
  7. package/lib/account/serialization.js +4 -0
  8. package/lib/account/serialization.js.map +1 -1
  9. package/lib/data/icons/react/index.d.ts +1 -0
  10. package/lib/data/icons/react/index.d.ts.map +1 -1
  11. package/lib/data/icons/react/index.js +7 -5
  12. package/lib/data/icons/react/index.js.map +1 -1
  13. package/lib/data/icons/react/osmo.d.ts +8 -0
  14. package/lib/data/icons/react/osmo.d.ts.map +1 -0
  15. package/lib/data/icons/react/osmo.js +39 -0
  16. package/lib/data/icons/react/osmo.js.map +1 -0
  17. package/lib/data/icons/reactNative/index.d.ts +1 -0
  18. package/lib/data/icons/reactNative/index.d.ts.map +1 -1
  19. package/lib/data/icons/reactNative/index.js +7 -5
  20. package/lib/data/icons/reactNative/index.js.map +1 -1
  21. package/lib/data/icons/reactNative/osmo.d.ts +8 -0
  22. package/lib/data/icons/reactNative/osmo.d.ts.map +1 -0
  23. package/lib/data/icons/reactNative/osmo.js +40 -0
  24. package/lib/data/icons/reactNative/osmo.js.map +1 -0
  25. package/lib/env.d.ts +15 -5
  26. package/lib/env.d.ts.map +1 -1
  27. package/lib/env.js +10 -0
  28. package/lib/env.js.map +1 -1
  29. package/lib/env.react.d.ts +1 -1
  30. package/lib/env.react.d.ts.map +1 -1
  31. package/lib/families/cosmos/CosmosValidatorsManager.d.ts +26 -0
  32. package/lib/families/cosmos/CosmosValidatorsManager.d.ts.map +1 -0
  33. package/lib/families/cosmos/CosmosValidatorsManager.js +365 -0
  34. package/lib/families/cosmos/CosmosValidatorsManager.js.map +1 -0
  35. package/lib/families/cosmos/account.d.ts +2 -2
  36. package/lib/families/cosmos/account.d.ts.map +1 -1
  37. package/lib/families/cosmos/account.js +19 -6
  38. package/lib/families/cosmos/account.js.map +1 -1
  39. package/lib/families/cosmos/api/Cosmos.d.ts +27 -15
  40. package/lib/families/cosmos/api/Cosmos.d.ts.map +1 -1
  41. package/lib/families/cosmos/api/Cosmos.js +418 -410
  42. package/lib/families/cosmos/api/Cosmos.js.map +1 -1
  43. package/lib/families/cosmos/bridge/js.d.ts.map +1 -1
  44. package/lib/families/cosmos/bridge/js.js +5 -5
  45. package/lib/families/cosmos/bridge/js.js.map +1 -1
  46. package/lib/families/cosmos/bridge/mock.js +1 -1
  47. package/lib/families/cosmos/bridge/mock.js.map +1 -1
  48. package/lib/families/cosmos/bridge.integration.test.js +5 -5
  49. package/lib/families/cosmos/bridge.integration.test.js.map +1 -1
  50. package/lib/families/cosmos/cli-transaction.d.ts +3 -3
  51. package/lib/families/cosmos/cli-transaction.d.ts.map +1 -1
  52. package/lib/families/cosmos/cli-transaction.js +4 -5
  53. package/lib/families/cosmos/cli-transaction.js.map +1 -1
  54. package/lib/families/cosmos/js-buildTransaction.js +3 -3
  55. package/lib/families/cosmos/js-buildTransaction.js.map +1 -1
  56. package/lib/families/cosmos/js-createTransaction.js +1 -1
  57. package/lib/families/cosmos/js-createTransaction.js.map +1 -1
  58. package/lib/families/cosmos/js-getTransactionStatus.d.ts +17 -3
  59. package/lib/families/cosmos/js-getTransactionStatus.d.ts.map +1 -1
  60. package/lib/families/cosmos/js-getTransactionStatus.js +224 -176
  61. package/lib/families/cosmos/js-getTransactionStatus.js.map +1 -1
  62. package/lib/families/cosmos/js-prepareTransaction.js +2 -2
  63. package/lib/families/cosmos/js-prepareTransaction.js.map +1 -1
  64. package/lib/families/cosmos/js-signOperation.js +3 -3
  65. package/lib/families/cosmos/js-signOperation.js.map +1 -1
  66. package/lib/families/cosmos/js-synchronisation.js +2 -2
  67. package/lib/families/cosmos/js-synchronisation.js.map +1 -1
  68. package/lib/families/cosmos/logic.js +1 -1
  69. package/lib/families/cosmos/logic.js.map +1 -1
  70. package/lib/families/cosmos/mock.js +1 -1
  71. package/lib/families/cosmos/mock.js.map +1 -1
  72. package/lib/families/cosmos/react.d.ts +4 -4
  73. package/lib/families/cosmos/react.d.ts.map +1 -1
  74. package/lib/families/cosmos/react.js +59 -26
  75. package/lib/families/cosmos/react.js.map +1 -1
  76. package/lib/families/cosmos/react.test.js +17 -15
  77. package/lib/families/cosmos/react.test.js.map +1 -1
  78. package/lib/families/cosmos/specs.js +2 -2
  79. package/lib/families/cosmos/specs.js.map +1 -1
  80. package/lib/families/cosmos/speculos-deviceActions.d.ts.map +1 -1
  81. package/lib/families/cosmos/speculos-deviceActions.js +1 -1
  82. package/lib/families/cosmos/speculos-deviceActions.js.map +1 -1
  83. package/lib/families/cosmos/transaction.d.ts +2 -2
  84. package/lib/families/cosmos/transaction.d.ts.map +1 -1
  85. package/lib/families/cosmos/transaction.js +4 -4
  86. package/lib/families/cosmos/transaction.js.map +1 -1
  87. package/lib/families/cosmos/types.d.ts +31 -13
  88. package/lib/families/cosmos/types.d.ts.map +1 -1
  89. package/lib/families/cosmos/utils.d.ts +1 -0
  90. package/lib/families/cosmos/utils.d.ts.map +1 -1
  91. package/lib/families/cosmos/utils.js +7 -1
  92. package/lib/families/cosmos/utils.js.map +1 -1
  93. package/lib/families/cosmos/validators.d.ts +3 -5
  94. package/lib/families/cosmos/validators.d.ts.map +1 -1
  95. package/lib/families/cosmos/validators.js +4 -317
  96. package/lib/families/cosmos/validators.js.map +1 -1
  97. package/lib/families/osmosis/OsmosisSupplyTypes.d.ts +48 -0
  98. package/lib/families/osmosis/OsmosisSupplyTypes.d.ts.map +1 -0
  99. package/lib/families/osmosis/OsmosisSupplyTypes.js +3 -0
  100. package/lib/families/osmosis/OsmosisSupplyTypes.js.map +1 -0
  101. package/lib/families/osmosis/account.d.ts +14 -0
  102. package/lib/families/osmosis/account.d.ts.map +1 -0
  103. package/lib/families/osmosis/account.js +60 -0
  104. package/lib/families/osmosis/account.js.map +1 -0
  105. package/lib/families/osmosis/api/sdk.d.ts +35 -0
  106. package/lib/families/osmosis/api/sdk.d.ts.map +1 -0
  107. package/lib/families/osmosis/api/sdk.js +478 -0
  108. package/lib/families/osmosis/api/sdk.js.map +1 -0
  109. package/lib/families/osmosis/api/sdk.types.d.ts +57 -0
  110. package/lib/families/osmosis/api/sdk.types.d.ts.map +1 -0
  111. package/lib/families/osmosis/api/sdk.types.js +15 -0
  112. package/lib/families/osmosis/api/sdk.types.js.map +1 -0
  113. package/lib/families/osmosis/api/sdk.unit.test.d.ts +2 -0
  114. package/lib/families/osmosis/api/sdk.unit.test.d.ts.map +1 -0
  115. package/lib/families/osmosis/api/sdk.unit.test.js +50 -0
  116. package/lib/families/osmosis/api/sdk.unit.test.js.map +1 -0
  117. package/lib/families/osmosis/bridge/js.d.ts +8 -0
  118. package/lib/families/osmosis/bridge/js.d.ts.map +1 -0
  119. package/lib/families/osmosis/bridge/js.js +98 -0
  120. package/lib/families/osmosis/bridge/js.js.map +1 -0
  121. package/lib/families/osmosis/bridge.integration.test.d.ts +2 -0
  122. package/lib/families/osmosis/bridge.integration.test.d.ts.map +1 -0
  123. package/lib/families/osmosis/bridge.integration.test.js +383 -0
  124. package/lib/families/osmosis/bridge.integration.test.js.map +1 -0
  125. package/lib/families/osmosis/cli-transaction.d.ts +38 -0
  126. package/lib/families/osmosis/cli-transaction.d.ts.map +1 -0
  127. package/lib/families/osmosis/cli-transaction.js +119 -0
  128. package/lib/families/osmosis/cli-transaction.js.map +1 -0
  129. package/lib/families/osmosis/deviceTransactionConfig.d.ts +25 -0
  130. package/lib/families/osmosis/deviceTransactionConfig.d.ts.map +1 -0
  131. package/lib/families/osmosis/deviceTransactionConfig.js +132 -0
  132. package/lib/families/osmosis/deviceTransactionConfig.js.map +1 -0
  133. package/lib/families/osmosis/errors.d.ts +4 -0
  134. package/lib/families/osmosis/errors.d.ts.map +1 -0
  135. package/lib/families/osmosis/errors.js +8 -0
  136. package/lib/families/osmosis/errors.js.map +1 -0
  137. package/lib/families/osmosis/hw-getAddress.d.ts +4 -0
  138. package/lib/families/osmosis/hw-getAddress.d.ts.map +1 -0
  139. package/lib/families/osmosis/hw-getAddress.js +64 -0
  140. package/lib/families/osmosis/hw-getAddress.js.map +1 -0
  141. package/lib/families/osmosis/js-buildTransaction.d.ts +14 -0
  142. package/lib/families/osmosis/js-buildTransaction.d.ts.map +1 -0
  143. package/lib/families/osmosis/js-buildTransaction.js +303 -0
  144. package/lib/families/osmosis/js-buildTransaction.js.map +1 -0
  145. package/lib/families/osmosis/js-estimateMaxSpendable.d.ts +15 -0
  146. package/lib/families/osmosis/js-estimateMaxSpendable.d.ts.map +1 -0
  147. package/lib/families/osmosis/js-estimateMaxSpendable.js +67 -0
  148. package/lib/families/osmosis/js-estimateMaxSpendable.js.map +1 -0
  149. package/lib/families/osmosis/js-getFeesForTransaction.d.ts +15 -0
  150. package/lib/families/osmosis/js-getFeesForTransaction.d.ts.map +1 -0
  151. package/lib/families/osmosis/js-getFeesForTransaction.js +85 -0
  152. package/lib/families/osmosis/js-getFeesForTransaction.js.map +1 -0
  153. package/lib/families/osmosis/js-getTransactionStatus.d.ts +3 -0
  154. package/lib/families/osmosis/js-getTransactionStatus.d.ts.map +1 -0
  155. package/lib/families/osmosis/js-getTransactionStatus.js +10 -0
  156. package/lib/families/osmosis/js-getTransactionStatus.js.map +1 -0
  157. package/lib/families/osmosis/js-signOperation.d.ts +10 -0
  158. package/lib/families/osmosis/js-signOperation.d.ts.map +1 -0
  159. package/lib/families/osmosis/js-signOperation.js +211 -0
  160. package/lib/families/osmosis/js-signOperation.js.map +1 -0
  161. package/lib/families/osmosis/js-synchronization.d.ts +9 -0
  162. package/lib/families/osmosis/js-synchronization.d.ts.map +1 -0
  163. package/lib/families/osmosis/js-synchronization.js +176 -0
  164. package/lib/families/osmosis/js-synchronization.js.map +1 -0
  165. package/lib/families/osmosis/js-transaction.d.ts +23 -0
  166. package/lib/families/osmosis/js-transaction.d.ts.map +1 -0
  167. package/lib/families/osmosis/js-transaction.js +177 -0
  168. package/lib/families/osmosis/js-transaction.js.map +1 -0
  169. package/lib/families/osmosis/logic.d.ts +5 -0
  170. package/lib/families/osmosis/logic.d.ts.map +1 -0
  171. package/lib/families/osmosis/logic.js +22 -0
  172. package/lib/families/osmosis/logic.js.map +1 -0
  173. package/lib/families/osmosis/preloadedData.d.ts +9 -0
  174. package/lib/families/osmosis/preloadedData.d.ts.map +1 -0
  175. package/lib/families/osmosis/preloadedData.js +32 -0
  176. package/lib/families/osmosis/preloadedData.js.map +1 -0
  177. package/lib/families/osmosis/serialization.d.ts +7 -0
  178. package/lib/families/osmosis/serialization.d.ts.map +1 -0
  179. package/lib/families/osmosis/serialization.js +5 -0
  180. package/lib/families/osmosis/serialization.js.map +1 -0
  181. package/lib/families/osmosis/specs.d.ts +7 -0
  182. package/lib/families/osmosis/specs.d.ts.map +1 -0
  183. package/lib/families/osmosis/specs.js +402 -0
  184. package/lib/families/osmosis/specs.js.map +1 -0
  185. package/lib/families/osmosis/speculos-deviceActions.d.ts +7 -0
  186. package/lib/families/osmosis/speculos-deviceActions.d.ts.map +1 -0
  187. package/lib/families/osmosis/speculos-deviceActions.js +120 -0
  188. package/lib/families/osmosis/speculos-deviceActions.js.map +1 -0
  189. package/lib/families/osmosis/transaction.d.ts +10 -0
  190. package/lib/families/osmosis/transaction.d.ts.map +1 -0
  191. package/lib/families/osmosis/transaction.js +13 -0
  192. package/lib/families/osmosis/transaction.js.map +1 -0
  193. package/lib/families/osmosis/types.d.ts +38 -0
  194. package/lib/families/osmosis/types.d.ts.map +1 -0
  195. package/lib/families/osmosis/types.js +3 -0
  196. package/lib/families/osmosis/types.js.map +1 -0
  197. package/lib/families/osmosis/utils.d.ts +8 -0
  198. package/lib/families/osmosis/utils.d.ts.map +1 -0
  199. package/lib/families/osmosis/utils.js +28 -0
  200. package/lib/families/osmosis/utils.js.map +1 -0
  201. package/lib/families/osmosis/validators.d.ts +4 -0
  202. package/lib/families/osmosis/validators.d.ts.map +1 -0
  203. package/lib/families/osmosis/validators.js +131 -0
  204. package/lib/families/osmosis/validators.js.map +1 -0
  205. package/lib/featureFlags/defaultFeatures.d.ts.map +1 -1
  206. package/lib/featureFlags/defaultFeatures.js +3 -0
  207. package/lib/featureFlags/defaultFeatures.js.map +1 -1
  208. package/lib/generated/account.d.ts +7 -1
  209. package/lib/generated/account.d.ts.map +1 -1
  210. package/lib/generated/account.js +4 -2
  211. package/lib/generated/account.js.map +1 -1
  212. package/lib/generated/bridge/js.d.ts +4 -0
  213. package/lib/generated/bridge/js.d.ts.map +1 -1
  214. package/lib/generated/bridge/js.js +14 -12
  215. package/lib/generated/bridge/js.js.map +1 -1
  216. package/lib/generated/cli-transaction.d.ts +33 -2
  217. package/lib/generated/cli-transaction.d.ts.map +1 -1
  218. package/lib/generated/cli-transaction.js +14 -12
  219. package/lib/generated/cli-transaction.js.map +1 -1
  220. package/lib/generated/deviceTransactionConfig.d.ts +4 -1
  221. package/lib/generated/deviceTransactionConfig.d.ts.map +1 -1
  222. package/lib/generated/deviceTransactionConfig.js +14 -12
  223. package/lib/generated/deviceTransactionConfig.js.map +1 -1
  224. package/lib/generated/hw-getAddress.d.ts +1 -0
  225. package/lib/generated/hw-getAddress.d.ts.map +1 -1
  226. package/lib/generated/hw-getAddress.js +14 -12
  227. package/lib/generated/hw-getAddress.js.map +1 -1
  228. package/lib/generated/specs.d.ts +3 -0
  229. package/lib/generated/specs.d.ts.map +1 -1
  230. package/lib/generated/specs.js +14 -12
  231. package/lib/generated/specs.js.map +1 -1
  232. package/lib/generated/speculos-deviceActions.d.ts +3 -0
  233. package/lib/generated/speculos-deviceActions.d.ts.map +1 -1
  234. package/lib/generated/speculos-deviceActions.js +14 -12
  235. package/lib/generated/speculos-deviceActions.js.map +1 -1
  236. package/lib/generated/transaction.d.ts +9 -1
  237. package/lib/generated/transaction.d.ts.map +1 -1
  238. package/lib/generated/transaction.js +14 -12
  239. package/lib/generated/transaction.js.map +1 -1
  240. package/lib/generated/types.d.ts +8 -4
  241. package/lib/generated/types.d.ts.map +1 -1
  242. package/lib/reconciliation.d.ts.map +1 -1
  243. package/lib/reconciliation.js +9 -0
  244. package/lib/reconciliation.js.map +1 -1
  245. package/package.json +8 -3
  246. package/src/__tests__/test-helpers/setup.ts +1 -0
  247. package/src/account/helpers.ts +1 -0
  248. package/src/account/serialization.ts +6 -0
  249. package/src/data/icons/react/index.tsx +1 -0
  250. package/src/data/icons/react/osmo.tsx +14 -0
  251. package/src/data/icons/reactNative/index.tsx +1 -0
  252. package/src/data/icons/reactNative/osmo.tsx +15 -0
  253. package/src/data/icons/svg/OSMO.svg +7 -0
  254. package/src/env.ts +10 -0
  255. package/src/families/cosmos/CosmosValidatorsManager.ts +420 -0
  256. package/src/families/cosmos/account.ts +29 -10
  257. package/src/families/cosmos/api/Cosmos.ts +267 -257
  258. package/src/families/cosmos/bridge/js.ts +6 -7
  259. package/src/families/cosmos/bridge/mock.ts +1 -1
  260. package/src/families/cosmos/bridge.integration.test.ts +5 -5
  261. package/src/families/cosmos/cli-transaction.ts +7 -8
  262. package/src/families/cosmos/js-buildTransaction.ts +4 -4
  263. package/src/families/cosmos/js-createTransaction.ts +1 -1
  264. package/src/families/cosmos/js-getTransactionStatus.ts +276 -226
  265. package/src/families/cosmos/js-prepareTransaction.ts +3 -3
  266. package/src/families/cosmos/js-signOperation.ts +4 -4
  267. package/src/families/cosmos/js-synchronisation.ts +3 -3
  268. package/src/families/cosmos/logic.ts +1 -1
  269. package/src/families/cosmos/mock.ts +1 -1
  270. package/src/families/cosmos/react.test.ts +25 -14
  271. package/src/families/cosmos/react.ts +73 -21
  272. package/src/families/cosmos/specs.ts +2 -2
  273. package/src/families/cosmos/speculos-deviceActions.ts +1 -2
  274. package/src/families/cosmos/transaction.ts +4 -6
  275. package/src/families/cosmos/types.ts +41 -13
  276. package/src/families/cosmos/utils.ts +8 -0
  277. package/src/families/cosmos/validators.ts +5 -363
  278. package/src/families/osmosis/OsmosisSupplyTypes.ts +53 -0
  279. package/src/families/osmosis/__snapshots__/bridge.integration.test.ts.snap +852 -0
  280. package/src/families/osmosis/account.ts +65 -0
  281. package/src/families/osmosis/api/sdk.ts +530 -0
  282. package/src/families/osmosis/api/sdk.types.ts +65 -0
  283. package/src/families/osmosis/api/sdk.unit.test.ts +70 -0
  284. package/src/families/osmosis/bridge/js.ts +64 -0
  285. package/src/families/osmosis/bridge.integration.test.ts +467 -0
  286. package/src/families/osmosis/cli-transaction.ts +145 -0
  287. package/src/families/osmosis/deviceTransactionConfig.ts +174 -0
  288. package/src/families/osmosis/errors.ts +13 -0
  289. package/src/families/osmosis/hw-getAddress.ts +14 -0
  290. package/src/families/osmosis/js-buildTransaction.ts +306 -0
  291. package/src/families/osmosis/js-estimateMaxSpendable.ts +26 -0
  292. package/src/families/osmosis/js-getFeesForTransaction.ts +44 -0
  293. package/src/families/osmosis/js-getTransactionStatus.ts +9 -0
  294. package/src/families/osmosis/js-signOperation.ts +172 -0
  295. package/src/families/osmosis/js-synchronization.ts +122 -0
  296. package/src/families/osmosis/js-transaction.ts +96 -0
  297. package/src/families/osmosis/logic.ts +26 -0
  298. package/src/families/osmosis/preloadedData.ts +32 -0
  299. package/src/families/osmosis/serialization.ts +6 -0
  300. package/src/families/osmosis/specs.ts +393 -0
  301. package/src/families/osmosis/speculos-deviceActions.ts +94 -0
  302. package/src/families/osmosis/transaction.ts +20 -0
  303. package/src/families/osmosis/types.ts +48 -0
  304. package/src/families/osmosis/utils.ts +31 -0
  305. package/src/families/osmosis/validators.ts +79 -0
  306. package/src/featureFlags/defaultFeatures.ts +3 -0
  307. package/src/generated/account.ts +3 -0
  308. package/src/generated/bridge/js.ts +3 -0
  309. package/src/generated/cli-transaction.ts +3 -0
  310. package/src/generated/deviceTransactionConfig.ts +5 -0
  311. package/src/generated/hw-getAddress.ts +3 -0
  312. package/src/generated/specs.ts +3 -0
  313. package/src/generated/speculos-deviceActions.ts +3 -0
  314. package/src/generated/transaction.ts +3 -0
  315. package/src/generated/types.ts +8 -0
  316. package/src/reconciliation.ts +16 -0
@@ -0,0 +1,44 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { CosmosOperationMode } from "../cosmos/types";
3
+
4
+ const gasForTransaction: {
5
+ [Key in CosmosOperationMode]: number;
6
+ } = {
7
+ send: 100000,
8
+ delegate: 300000,
9
+ undelegate: 350000,
10
+ redelegate: 550000,
11
+ claimReward: 300000,
12
+ claimRewardCompound: 400000,
13
+ };
14
+
15
+ // Default fees in uosmo
16
+ // Dear future developer working on this file, if fees become non-zero
17
+ // make sure to flip estimatedFees.isZero() to !estimatedFees.isZero() in
18
+ // './deviceTransactionConfig.ts'.
19
+ export const DEFAULT_FEES = 0;
20
+ export const MIN_GAS_FEE = 0.0025; // Min gas fee in uosmo (https://commonwealth.im/osmosis/discussion/6298-draft-minimum-gas-fee)
21
+ export const DEFAULT_GAS = 100000;
22
+
23
+ /**
24
+ * Fetch the transaction fees for a transaction
25
+ */
26
+ const getEstimatedFees = async (mode: string): Promise<BigNumber> => {
27
+ const gas = await getEstimatedGas(mode as CosmosOperationMode);
28
+ return gas.times(MIN_GAS_FEE);
29
+ };
30
+
31
+ /**
32
+ * Fetch the gas for a transaction
33
+ */
34
+ export const getEstimatedGas = async (
35
+ mode: CosmosOperationMode
36
+ ): Promise<BigNumber> => {
37
+ const estimatedGas = gasForTransaction[mode];
38
+ if (!estimatedGas) {
39
+ return new BigNumber(DEFAULT_GAS);
40
+ }
41
+ return new BigNumber(estimatedGas);
42
+ };
43
+
44
+ export default getEstimatedFees;
@@ -0,0 +1,9 @@
1
+ import { CosmosTransactionStatusManager } from "../cosmos/js-getTransactionStatus";
2
+ import { osmosisAPI } from "./api/sdk";
3
+
4
+ const osmosisTransactionStatusManager = new CosmosTransactionStatusManager({
5
+ api: osmosisAPI,
6
+ validatorOperatorAddressPrefix: "osmovaloper",
7
+ });
8
+
9
+ export default osmosisTransactionStatusManager.getTransactionStatus;
@@ -0,0 +1,172 @@
1
+ import type {
2
+ Account,
3
+ DeviceId,
4
+ Operation,
5
+ OperationType,
6
+ SignOperationEvent,
7
+ } from "@ledgerhq/types-live";
8
+ import type { Transaction } from "./types";
9
+ import { osmosisAPI } from "./api/sdk";
10
+ import { Observable } from "rxjs";
11
+ import { withDevice } from "../../hw/deviceAccess";
12
+ import { encodeOperationId } from "../../operation";
13
+ import { LedgerSigner } from "@cosmjs/ledger-amino";
14
+ import { HdPath, stringToPath } from "@cosmjs/crypto";
15
+ import { buildTransaction, postBuildTransaction } from "./js-buildTransaction";
16
+ import BigNumber from "bignumber.js";
17
+ import { makeSignDoc } from "@cosmjs/launchpad";
18
+ import getEstimatedFees, {
19
+ DEFAULT_FEES,
20
+ getEstimatedGas,
21
+ } from "./js-getFeesForTransaction";
22
+
23
+ const signOperation = ({
24
+ account,
25
+ deviceId,
26
+ transaction,
27
+ }: {
28
+ account: Account;
29
+ deviceId: DeviceId;
30
+ transaction: Transaction;
31
+ }): Observable<SignOperationEvent> =>
32
+ withDevice(deviceId)((transport) =>
33
+ Observable.create((o) => {
34
+ let cancelled;
35
+
36
+ async function main() {
37
+ const { accountNumber, sequence } = await osmosisAPI.getAccount(
38
+ account.freshAddress
39
+ );
40
+ const chainId = await osmosisAPI.getChainId();
41
+ const hdPaths: HdPath = stringToPath("m/" + account.freshAddressPath);
42
+ const ledgerSigner = new LedgerSigner(transport, {
43
+ hdPaths: [hdPaths],
44
+ prefix: account.currency.id,
45
+ });
46
+ o.next({ type: "device-signature-requested" });
47
+
48
+ const { aminoMsgs, protoMsgs } = await buildTransaction(
49
+ account,
50
+ transaction
51
+ );
52
+
53
+ if (aminoMsgs.length === 0 || protoMsgs.length === 0) {
54
+ return;
55
+ }
56
+
57
+ const feeToEncode = {
58
+ amount: [
59
+ {
60
+ denom: account.currency.units[1].code,
61
+ amount: transaction.fees
62
+ ? (transaction.fees.toNumber().toString() as string)
63
+ : (String(await getEstimatedFees(transaction.mode)) as string),
64
+ },
65
+ ],
66
+ gas: transaction.gas
67
+ ? (transaction.gas.toString() as string)
68
+ : (String(await getEstimatedGas(transaction.mode)) as string),
69
+ };
70
+
71
+ const signDoc = makeSignDoc(
72
+ aminoMsgs,
73
+ feeToEncode,
74
+ chainId,
75
+ transaction.memo || "",
76
+ accountNumber.toString(),
77
+ sequence.toString()
78
+ );
79
+
80
+ const signResponse = await ledgerSigner.signAmino(
81
+ account.freshAddress,
82
+ signDoc
83
+ );
84
+
85
+ const signed_tx_bytes = await postBuildTransaction(
86
+ signResponse,
87
+ protoMsgs
88
+ );
89
+
90
+ const signature = Buffer.from(signed_tx_bytes).toString("hex");
91
+
92
+ if (cancelled) {
93
+ return;
94
+ }
95
+
96
+ o.next({ type: "device-signature-granted" });
97
+
98
+ const hash = ""; // resolved at broadcast time
99
+ const accountId = account.id;
100
+
101
+ const fee = transaction.fees || new BigNumber(DEFAULT_FEES);
102
+ const extra = { memo: transaction.memo || {} };
103
+ const type: OperationType =
104
+ transaction.mode === "undelegate"
105
+ ? "UNDELEGATE"
106
+ : transaction.mode === "delegate"
107
+ ? "DELEGATE"
108
+ : transaction.mode === "redelegate"
109
+ ? "REDELEGATE"
110
+ : ["claimReward", "claimRewardCompound"].includes(transaction.mode)
111
+ ? "REWARD"
112
+ : "OUT";
113
+
114
+ const senders: string[] = [];
115
+ const recipients: string[] = [];
116
+
117
+ if (transaction.mode === "send") {
118
+ senders.push(account.freshAddress);
119
+ recipients.push(transaction.recipient);
120
+ }
121
+
122
+ if (transaction.mode === "redelegate") {
123
+ Object.assign(extra, {
124
+ sourceValidator: transaction.sourceValidator,
125
+ });
126
+ }
127
+
128
+ if (transaction.mode !== "send") {
129
+ Object.assign(extra, {
130
+ validators: transaction.validators,
131
+ });
132
+ }
133
+
134
+ // build optimistic operation
135
+ const operation: Operation = {
136
+ id: encodeOperationId(accountId, hash, type),
137
+ hash,
138
+ type,
139
+ value: transaction.amount, // Note: prepareTransaction already takes care of setting the correct tx amount (w/ fees) if useAllAmount is selected
140
+ fee,
141
+ extra,
142
+ blockHash: null,
143
+ blockHeight: null,
144
+ senders,
145
+ recipients,
146
+ accountId,
147
+ date: new Date(),
148
+ transactionSequenceNumber: sequence,
149
+ };
150
+
151
+ o.next({
152
+ type: "signed",
153
+ signedOperation: {
154
+ operation,
155
+ signature,
156
+ expirationDate: null,
157
+ },
158
+ });
159
+ }
160
+
161
+ main().then(
162
+ () => o.complete(),
163
+ (e) => o.error(e)
164
+ );
165
+
166
+ return () => {
167
+ cancelled = true;
168
+ };
169
+ })
170
+ );
171
+
172
+ export default signOperation;
@@ -0,0 +1,122 @@
1
+ import { pubkeyToAddress, decodeBech32Pubkey } from "@cosmjs/amino";
2
+ import { BigNumber } from "bignumber.js";
3
+ import { encodeAccountId } from "../../account";
4
+ import {
5
+ makeSync,
6
+ makeScanAccounts,
7
+ GetAccountShape,
8
+ mergeOps,
9
+ } from "../../bridge/jsHelpers";
10
+ import { osmosisAPI } from "./api/sdk";
11
+
12
+ const accountPubPrefix = "osmopub";
13
+ const accountAddressPrefix = "osmo";
14
+
15
+ const getAccountShape: GetAccountShape = async (info) => {
16
+ const { address, currency, derivationMode, initialAccount } = info;
17
+ let xpubOrAddress = address;
18
+
19
+ if (address.match(accountPubPrefix)) {
20
+ const pubkey = decodeBech32Pubkey(address);
21
+ xpubOrAddress = pubkeyToAddress(pubkey as any, accountAddressPrefix);
22
+ }
23
+
24
+ const accountId = encodeAccountId({
25
+ type: "js",
26
+ version: "2",
27
+ currencyId: currency.id,
28
+ xpubOrAddress,
29
+ derivationMode,
30
+ });
31
+
32
+ const {
33
+ balances,
34
+ blockHeight,
35
+ delegations,
36
+ redelegations,
37
+ unbondings,
38
+ withdrawAddress,
39
+ } = await osmosisAPI.getAccountInfo(xpubOrAddress, currency);
40
+
41
+ const oldOperations = initialAccount?.operations || [];
42
+
43
+ let operations = oldOperations;
44
+
45
+ // For indexer efficiency reasons, only fetch new operations starting from the datetime
46
+ // of the last operation previously fetched
47
+ let lastOperationDate: Date | null = null;
48
+ if (operations.length > 0) {
49
+ operations.forEach((o) => {
50
+ if (o.date != null) {
51
+ if (lastOperationDate !== null) {
52
+ if (o.date.valueOf() > lastOperationDate.valueOf()) {
53
+ lastOperationDate = o.date;
54
+ }
55
+ } else {
56
+ lastOperationDate = o.date;
57
+ }
58
+ }
59
+ });
60
+ }
61
+
62
+ const newOperations = await osmosisAPI.getOperations(
63
+ accountId,
64
+ address,
65
+ lastOperationDate
66
+ );
67
+
68
+ // Merge new operations with the previously synced ones
69
+ operations = mergeOps(operations, newOperations);
70
+
71
+ let balance = balances;
72
+ let delegatedBalance = new BigNumber(0);
73
+ let pendingRewardsBalance = new BigNumber(0);
74
+ let unbondingBalance = new BigNumber(0);
75
+
76
+ for (const delegation of delegations) {
77
+ delegatedBalance = delegatedBalance.plus(delegation.amount);
78
+ balance = balance.plus(delegation.amount);
79
+
80
+ pendingRewardsBalance = pendingRewardsBalance.plus(
81
+ delegation.pendingRewards
82
+ );
83
+ }
84
+
85
+ for (const unbonding of unbondings) {
86
+ unbondingBalance = unbondingBalance.plus(unbonding.amount);
87
+ balance = balance.plus(unbonding.amount);
88
+ }
89
+
90
+ let spendableBalance = balance.minus(unbondingBalance.plus(delegatedBalance));
91
+
92
+ if (spendableBalance.lt(0)) {
93
+ spendableBalance = new BigNumber(0);
94
+ }
95
+
96
+ const shape = {
97
+ id: accountId,
98
+ xpub: xpubOrAddress,
99
+ balance: balance,
100
+ spendableBalance,
101
+ operationsCount: operations.length,
102
+ blockHeight,
103
+ cosmosResources: {
104
+ delegations,
105
+ redelegations,
106
+ unbondings,
107
+ delegatedBalance,
108
+ pendingRewardsBalance,
109
+ unbondingBalance,
110
+ withdrawAddress,
111
+ },
112
+ };
113
+
114
+ if (shape.spendableBalance && shape.spendableBalance.lt(0)) {
115
+ shape.spendableBalance = new BigNumber(0);
116
+ }
117
+
118
+ return { ...shape, operations };
119
+ };
120
+
121
+ export const scanAccounts = makeScanAccounts({ getAccountShape });
122
+ export const sync = makeSync({ getAccountShape });
@@ -0,0 +1,96 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import type { Account } from "@ledgerhq/types-live";
3
+ import type { Transaction } from "./types";
4
+ import getEstimatedFees, { getEstimatedGas } from "./js-getFeesForTransaction";
5
+ import estimateMaxSpendable from "./js-estimateMaxSpendable";
6
+ import { CosmosDelegationInfo } from "../cosmos/types";
7
+
8
+ const sameFees = (a, b) => (!a || !b ? a === b : a.eq(b));
9
+
10
+ /**
11
+ * Create an empty transaction
12
+ *
13
+ * @returns {Transaction}
14
+ */
15
+ export const createTransaction = (): Transaction => ({
16
+ family: "osmosis",
17
+ mode: "send",
18
+ amount: new BigNumber(0),
19
+ recipient: "",
20
+ useAllAmount: false,
21
+ fees: null,
22
+ gas: null,
23
+ memo: null,
24
+ validators: [] as CosmosDelegationInfo[],
25
+ sourceValidator: null,
26
+ networkInfo: {
27
+ family: "osmosis",
28
+ fees: new BigNumber(0),
29
+ },
30
+ });
31
+
32
+ /**
33
+ * Apply patch to transaction
34
+ *
35
+ * @param {*} t
36
+ * @param {*} patch
37
+ */
38
+ export const updateTransaction = (
39
+ t: Transaction,
40
+ patch: Partial<Transaction>
41
+ ): Transaction => {
42
+ if ("mode" in patch && patch.mode !== t.mode) {
43
+ return { ...t, ...patch, gas: null, fees: null };
44
+ }
45
+ if (
46
+ "validators" in patch &&
47
+ patch.validators?.length !== t.validators.length
48
+ ) {
49
+ return { ...t, ...patch, gas: null, fees: null };
50
+ }
51
+ return { ...t, ...patch };
52
+ };
53
+
54
+ /**
55
+ * Prepare transaction before checking status
56
+ *
57
+ * @param {Account} a
58
+ * @param {Transaction} t
59
+ */
60
+ export const prepareTransaction = async (account: Account, t: Transaction) => {
61
+ let { fees, memo, gas, amount } = t;
62
+ const { mode } = t;
63
+
64
+ fees = await getEstimatedFees(mode);
65
+ gas = await getEstimatedGas(mode);
66
+
67
+ if (mode === "send") {
68
+ t.amount = t.useAllAmount
69
+ ? await estimateMaxSpendable({ account, parentAccount: null, mode })
70
+ : amount;
71
+ }
72
+
73
+ if (mode !== "send" && !memo) {
74
+ memo = "Ledger Live";
75
+ }
76
+
77
+ if (t.useAllAmount) {
78
+ amount = await estimateMaxSpendable({ account, parentAccount: null, mode });
79
+ t = { ...t, amount, fees, gas };
80
+ }
81
+
82
+ if ((mode === "delegate" || mode === "claimRewardCompound") && amount.eq(0)) {
83
+ const validatorAmount = t.validators.reduce(
84
+ (old, current) => old.plus(current.amount),
85
+ new BigNumber(0)
86
+ );
87
+ amount = validatorAmount;
88
+ t = { ...t, amount, fees, gas };
89
+ }
90
+
91
+ if (t.memo !== memo || !sameFees(t.fees, fees)) {
92
+ return { ...t, memo, fees, gas };
93
+ }
94
+
95
+ return t;
96
+ };
@@ -0,0 +1,26 @@
1
+ import type { Account } from "@ledgerhq/types-live";
2
+ import { BigNumber } from "bignumber.js";
3
+ import { COSMOS_MAX_DELEGATIONS } from "../cosmos/logic";
4
+ import { DEFAULT_GAS, MIN_GAS_FEE } from "./js-getFeesForTransaction";
5
+
6
+ const OSMOSIS_MIN_SAFE = new BigNumber(10000); // 10000 uosmo, setting a reasonable floor
7
+ const OSMOSIS_MIN_FEES = new BigNumber(MIN_GAS_FEE * DEFAULT_GAS);
8
+
9
+ export function canDelegate(account: Account): boolean {
10
+ const maxSpendableBalance = getMaxDelegationAvailable(account, 1);
11
+ return maxSpendableBalance.gt(0);
12
+ }
13
+
14
+ export function getMaxDelegationAvailable(
15
+ account: Account,
16
+ validatorsLength: number
17
+ ): BigNumber {
18
+ const numberOfDelegations = Math.min(
19
+ COSMOS_MAX_DELEGATIONS,
20
+ validatorsLength || 1
21
+ );
22
+ const { spendableBalance } = account;
23
+ return spendableBalance
24
+ .minus(OSMOSIS_MIN_FEES.multipliedBy(numberOfDelegations))
25
+ .minus(OSMOSIS_MIN_SAFE);
26
+ }
@@ -0,0 +1,32 @@
1
+ import { Observable, Subject } from "rxjs";
2
+ import type { CosmosPreloadData, CosmosValidatorItem } from "../cosmos/types";
3
+ import { asSafeCosmosPreloadData } from "../cosmos/preloadedData";
4
+
5
+ // this module holds the cached state of preload()
6
+ // eslint-disable-next-line no-unused-vars
7
+ let currentOsmosisPreloadedData: CosmosPreloadData = {
8
+ // NB initial state because UI need to work even if it's currently "loading", typically after clear cache
9
+ validators: [],
10
+ };
11
+
12
+ const updates = new Subject<CosmosPreloadData>();
13
+
14
+ export function setOsmosisPreloadData(data: CosmosPreloadData): void {
15
+ if (data === currentOsmosisPreloadedData) return;
16
+ currentOsmosisPreloadedData = data;
17
+ updates.next(data);
18
+ }
19
+
20
+ export function getCurrentOsmosisPreloadData(): CosmosPreloadData {
21
+ return currentOsmosisPreloadedData;
22
+ }
23
+
24
+ export function getOsmosisPreloadDataUpdates(): Observable<CosmosPreloadData> {
25
+ return updates.asObservable();
26
+ }
27
+
28
+ export function asSafeOsmosisPreloadData(data?: {
29
+ validators?: CosmosValidatorItem[];
30
+ }): CosmosPreloadData {
31
+ return asSafeCosmosPreloadData(data);
32
+ }
@@ -0,0 +1,6 @@
1
+ import {
2
+ toCosmosResourcesRaw,
3
+ fromCosmosResourcesRaw,
4
+ } from "../cosmos/serialization";
5
+
6
+ export default { toCosmosResourcesRaw, fromCosmosResourcesRaw };