@ledgerhq/live-common 25.2.0-next.0 → 26.0.0-next.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 (320) hide show
  1. package/lib/__tests__/test-helpers/setup.js +2 -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/filecoin/bridge/account.d.ts.map +1 -1
  98. package/lib/families/filecoin/bridge/account.js +11 -5
  99. package/lib/families/filecoin/bridge/account.js.map +1 -1
  100. package/lib/families/osmosis/OsmosisSupplyTypes.d.ts +48 -0
  101. package/lib/families/osmosis/OsmosisSupplyTypes.d.ts.map +1 -0
  102. package/lib/families/osmosis/OsmosisSupplyTypes.js +3 -0
  103. package/lib/families/osmosis/OsmosisSupplyTypes.js.map +1 -0
  104. package/lib/families/osmosis/account.d.ts +14 -0
  105. package/lib/families/osmosis/account.d.ts.map +1 -0
  106. package/lib/families/osmosis/account.js +60 -0
  107. package/lib/families/osmosis/account.js.map +1 -0
  108. package/lib/families/osmosis/api/sdk.d.ts +35 -0
  109. package/lib/families/osmosis/api/sdk.d.ts.map +1 -0
  110. package/lib/families/osmosis/api/sdk.js +478 -0
  111. package/lib/families/osmosis/api/sdk.js.map +1 -0
  112. package/lib/families/osmosis/api/sdk.types.d.ts +57 -0
  113. package/lib/families/osmosis/api/sdk.types.d.ts.map +1 -0
  114. package/lib/families/osmosis/api/sdk.types.js +15 -0
  115. package/lib/families/osmosis/api/sdk.types.js.map +1 -0
  116. package/lib/families/osmosis/api/sdk.unit.test.d.ts +2 -0
  117. package/lib/families/osmosis/api/sdk.unit.test.d.ts.map +1 -0
  118. package/lib/families/osmosis/api/sdk.unit.test.js +50 -0
  119. package/lib/families/osmosis/api/sdk.unit.test.js.map +1 -0
  120. package/lib/families/osmosis/bridge/js.d.ts +8 -0
  121. package/lib/families/osmosis/bridge/js.d.ts.map +1 -0
  122. package/lib/families/osmosis/bridge/js.js +98 -0
  123. package/lib/families/osmosis/bridge/js.js.map +1 -0
  124. package/lib/families/osmosis/bridge.integration.test.d.ts +2 -0
  125. package/lib/families/osmosis/bridge.integration.test.d.ts.map +1 -0
  126. package/lib/families/osmosis/bridge.integration.test.js +383 -0
  127. package/lib/families/osmosis/bridge.integration.test.js.map +1 -0
  128. package/lib/families/osmosis/cli-transaction.d.ts +38 -0
  129. package/lib/families/osmosis/cli-transaction.d.ts.map +1 -0
  130. package/lib/families/osmosis/cli-transaction.js +119 -0
  131. package/lib/families/osmosis/cli-transaction.js.map +1 -0
  132. package/lib/families/osmosis/deviceTransactionConfig.d.ts +25 -0
  133. package/lib/families/osmosis/deviceTransactionConfig.d.ts.map +1 -0
  134. package/lib/families/osmosis/deviceTransactionConfig.js +132 -0
  135. package/lib/families/osmosis/deviceTransactionConfig.js.map +1 -0
  136. package/lib/families/osmosis/errors.d.ts +4 -0
  137. package/lib/families/osmosis/errors.d.ts.map +1 -0
  138. package/lib/families/osmosis/errors.js +8 -0
  139. package/lib/families/osmosis/errors.js.map +1 -0
  140. package/lib/families/osmosis/hw-getAddress.d.ts +4 -0
  141. package/lib/families/osmosis/hw-getAddress.d.ts.map +1 -0
  142. package/lib/families/osmosis/hw-getAddress.js +64 -0
  143. package/lib/families/osmosis/hw-getAddress.js.map +1 -0
  144. package/lib/families/osmosis/js-buildTransaction.d.ts +14 -0
  145. package/lib/families/osmosis/js-buildTransaction.d.ts.map +1 -0
  146. package/lib/families/osmosis/js-buildTransaction.js +303 -0
  147. package/lib/families/osmosis/js-buildTransaction.js.map +1 -0
  148. package/lib/families/osmosis/js-estimateMaxSpendable.d.ts +15 -0
  149. package/lib/families/osmosis/js-estimateMaxSpendable.d.ts.map +1 -0
  150. package/lib/families/osmosis/js-estimateMaxSpendable.js +67 -0
  151. package/lib/families/osmosis/js-estimateMaxSpendable.js.map +1 -0
  152. package/lib/families/osmosis/js-getFeesForTransaction.d.ts +15 -0
  153. package/lib/families/osmosis/js-getFeesForTransaction.d.ts.map +1 -0
  154. package/lib/families/osmosis/js-getFeesForTransaction.js +85 -0
  155. package/lib/families/osmosis/js-getFeesForTransaction.js.map +1 -0
  156. package/lib/families/osmosis/js-getTransactionStatus.d.ts +3 -0
  157. package/lib/families/osmosis/js-getTransactionStatus.d.ts.map +1 -0
  158. package/lib/families/osmosis/js-getTransactionStatus.js +10 -0
  159. package/lib/families/osmosis/js-getTransactionStatus.js.map +1 -0
  160. package/lib/families/osmosis/js-signOperation.d.ts +10 -0
  161. package/lib/families/osmosis/js-signOperation.d.ts.map +1 -0
  162. package/lib/families/osmosis/js-signOperation.js +211 -0
  163. package/lib/families/osmosis/js-signOperation.js.map +1 -0
  164. package/lib/families/osmosis/js-synchronization.d.ts +9 -0
  165. package/lib/families/osmosis/js-synchronization.d.ts.map +1 -0
  166. package/lib/families/osmosis/js-synchronization.js +176 -0
  167. package/lib/families/osmosis/js-synchronization.js.map +1 -0
  168. package/lib/families/osmosis/js-transaction.d.ts +23 -0
  169. package/lib/families/osmosis/js-transaction.d.ts.map +1 -0
  170. package/lib/families/osmosis/js-transaction.js +177 -0
  171. package/lib/families/osmosis/js-transaction.js.map +1 -0
  172. package/lib/families/osmosis/logic.d.ts +5 -0
  173. package/lib/families/osmosis/logic.d.ts.map +1 -0
  174. package/lib/families/osmosis/logic.js +22 -0
  175. package/lib/families/osmosis/logic.js.map +1 -0
  176. package/lib/families/osmosis/preloadedData.d.ts +9 -0
  177. package/lib/families/osmosis/preloadedData.d.ts.map +1 -0
  178. package/lib/families/osmosis/preloadedData.js +32 -0
  179. package/lib/families/osmosis/preloadedData.js.map +1 -0
  180. package/lib/families/osmosis/serialization.d.ts +7 -0
  181. package/lib/families/osmosis/serialization.d.ts.map +1 -0
  182. package/lib/families/osmosis/serialization.js +5 -0
  183. package/lib/families/osmosis/serialization.js.map +1 -0
  184. package/lib/families/osmosis/specs.d.ts +7 -0
  185. package/lib/families/osmosis/specs.d.ts.map +1 -0
  186. package/lib/families/osmosis/specs.js +402 -0
  187. package/lib/families/osmosis/specs.js.map +1 -0
  188. package/lib/families/osmosis/speculos-deviceActions.d.ts +7 -0
  189. package/lib/families/osmosis/speculos-deviceActions.d.ts.map +1 -0
  190. package/lib/families/osmosis/speculos-deviceActions.js +120 -0
  191. package/lib/families/osmosis/speculos-deviceActions.js.map +1 -0
  192. package/lib/families/osmosis/transaction.d.ts +10 -0
  193. package/lib/families/osmosis/transaction.d.ts.map +1 -0
  194. package/lib/families/osmosis/transaction.js +13 -0
  195. package/lib/families/osmosis/transaction.js.map +1 -0
  196. package/lib/families/osmosis/types.d.ts +38 -0
  197. package/lib/families/osmosis/types.d.ts.map +1 -0
  198. package/lib/families/osmosis/types.js +3 -0
  199. package/lib/families/osmosis/types.js.map +1 -0
  200. package/lib/families/osmosis/utils.d.ts +8 -0
  201. package/lib/families/osmosis/utils.d.ts.map +1 -0
  202. package/lib/families/osmosis/utils.js +28 -0
  203. package/lib/families/osmosis/utils.js.map +1 -0
  204. package/lib/families/osmosis/validators.d.ts +4 -0
  205. package/lib/families/osmosis/validators.d.ts.map +1 -0
  206. package/lib/families/osmosis/validators.js +131 -0
  207. package/lib/families/osmosis/validators.js.map +1 -0
  208. package/lib/featureFlags/defaultFeatures.d.ts.map +1 -1
  209. package/lib/featureFlags/defaultFeatures.js +3 -0
  210. package/lib/featureFlags/defaultFeatures.js.map +1 -1
  211. package/lib/generated/account.d.ts +7 -1
  212. package/lib/generated/account.d.ts.map +1 -1
  213. package/lib/generated/account.js +4 -2
  214. package/lib/generated/account.js.map +1 -1
  215. package/lib/generated/bridge/js.d.ts +4 -0
  216. package/lib/generated/bridge/js.d.ts.map +1 -1
  217. package/lib/generated/bridge/js.js +14 -12
  218. package/lib/generated/bridge/js.js.map +1 -1
  219. package/lib/generated/cli-transaction.d.ts +33 -2
  220. package/lib/generated/cli-transaction.d.ts.map +1 -1
  221. package/lib/generated/cli-transaction.js +14 -12
  222. package/lib/generated/cli-transaction.js.map +1 -1
  223. package/lib/generated/deviceTransactionConfig.d.ts +4 -1
  224. package/lib/generated/deviceTransactionConfig.d.ts.map +1 -1
  225. package/lib/generated/deviceTransactionConfig.js +14 -12
  226. package/lib/generated/deviceTransactionConfig.js.map +1 -1
  227. package/lib/generated/hw-getAddress.d.ts +1 -0
  228. package/lib/generated/hw-getAddress.d.ts.map +1 -1
  229. package/lib/generated/hw-getAddress.js +14 -12
  230. package/lib/generated/hw-getAddress.js.map +1 -1
  231. package/lib/generated/specs.d.ts +3 -0
  232. package/lib/generated/specs.d.ts.map +1 -1
  233. package/lib/generated/specs.js +14 -12
  234. package/lib/generated/specs.js.map +1 -1
  235. package/lib/generated/speculos-deviceActions.d.ts +3 -0
  236. package/lib/generated/speculos-deviceActions.d.ts.map +1 -1
  237. package/lib/generated/speculos-deviceActions.js +14 -12
  238. package/lib/generated/speculos-deviceActions.js.map +1 -1
  239. package/lib/generated/transaction.d.ts +9 -1
  240. package/lib/generated/transaction.d.ts.map +1 -1
  241. package/lib/generated/transaction.js +14 -12
  242. package/lib/generated/transaction.js.map +1 -1
  243. package/lib/generated/types.d.ts +8 -4
  244. package/lib/generated/types.d.ts.map +1 -1
  245. package/lib/reconciliation.d.ts.map +1 -1
  246. package/lib/reconciliation.js +9 -0
  247. package/lib/reconciliation.js.map +1 -1
  248. package/package.json +8 -3
  249. package/src/__tests__/test-helpers/setup.ts +2 -0
  250. package/src/account/helpers.ts +1 -0
  251. package/src/account/serialization.ts +6 -0
  252. package/src/data/icons/react/index.tsx +1 -0
  253. package/src/data/icons/react/osmo.tsx +14 -0
  254. package/src/data/icons/reactNative/index.tsx +1 -0
  255. package/src/data/icons/reactNative/osmo.tsx +15 -0
  256. package/src/data/icons/svg/OSMO.svg +7 -0
  257. package/src/env.ts +10 -0
  258. package/src/families/cosmos/CosmosValidatorsManager.ts +420 -0
  259. package/src/families/cosmos/account.ts +29 -10
  260. package/src/families/cosmos/api/Cosmos.ts +267 -257
  261. package/src/families/cosmos/bridge/js.ts +6 -7
  262. package/src/families/cosmos/bridge/mock.ts +1 -1
  263. package/src/families/cosmos/bridge.integration.test.ts +5 -5
  264. package/src/families/cosmos/cli-transaction.ts +7 -8
  265. package/src/families/cosmos/js-buildTransaction.ts +4 -4
  266. package/src/families/cosmos/js-createTransaction.ts +1 -1
  267. package/src/families/cosmos/js-getTransactionStatus.ts +276 -226
  268. package/src/families/cosmos/js-prepareTransaction.ts +3 -3
  269. package/src/families/cosmos/js-signOperation.ts +4 -4
  270. package/src/families/cosmos/js-synchronisation.ts +3 -3
  271. package/src/families/cosmos/logic.ts +1 -1
  272. package/src/families/cosmos/mock.ts +1 -1
  273. package/src/families/cosmos/react.test.ts +25 -14
  274. package/src/families/cosmos/react.ts +73 -21
  275. package/src/families/cosmos/specs.ts +2 -2
  276. package/src/families/cosmos/speculos-deviceActions.ts +1 -2
  277. package/src/families/cosmos/transaction.ts +4 -6
  278. package/src/families/cosmos/types.ts +41 -13
  279. package/src/families/cosmos/utils.ts +8 -0
  280. package/src/families/cosmos/validators.ts +5 -363
  281. package/src/families/filecoin/bridge/account.ts +12 -5
  282. package/src/families/osmosis/OsmosisSupplyTypes.ts +53 -0
  283. package/src/families/osmosis/__snapshots__/bridge.integration.test.ts.snap +852 -0
  284. package/src/families/osmosis/account.ts +65 -0
  285. package/src/families/osmosis/api/sdk.ts +530 -0
  286. package/src/families/osmosis/api/sdk.types.ts +65 -0
  287. package/src/families/osmosis/api/sdk.unit.test.ts +70 -0
  288. package/src/families/osmosis/bridge/js.ts +64 -0
  289. package/src/families/osmosis/bridge.integration.test.ts +467 -0
  290. package/src/families/osmosis/cli-transaction.ts +145 -0
  291. package/src/families/osmosis/deviceTransactionConfig.ts +174 -0
  292. package/src/families/osmosis/errors.ts +13 -0
  293. package/src/families/osmosis/hw-getAddress.ts +14 -0
  294. package/src/families/osmosis/js-buildTransaction.ts +306 -0
  295. package/src/families/osmosis/js-estimateMaxSpendable.ts +26 -0
  296. package/src/families/osmosis/js-getFeesForTransaction.ts +44 -0
  297. package/src/families/osmosis/js-getTransactionStatus.ts +9 -0
  298. package/src/families/osmosis/js-signOperation.ts +172 -0
  299. package/src/families/osmosis/js-synchronization.ts +122 -0
  300. package/src/families/osmosis/js-transaction.ts +96 -0
  301. package/src/families/osmosis/logic.ts +26 -0
  302. package/src/families/osmosis/preloadedData.ts +32 -0
  303. package/src/families/osmosis/serialization.ts +6 -0
  304. package/src/families/osmosis/specs.ts +393 -0
  305. package/src/families/osmosis/speculos-deviceActions.ts +94 -0
  306. package/src/families/osmosis/transaction.ts +20 -0
  307. package/src/families/osmosis/types.ts +48 -0
  308. package/src/families/osmosis/utils.ts +31 -0
  309. package/src/families/osmosis/validators.ts +79 -0
  310. package/src/featureFlags/defaultFeatures.ts +3 -0
  311. package/src/generated/account.ts +3 -0
  312. package/src/generated/bridge/js.ts +3 -0
  313. package/src/generated/cli-transaction.ts +3 -0
  314. package/src/generated/deviceTransactionConfig.ts +5 -0
  315. package/src/generated/hw-getAddress.ts +3 -0
  316. package/src/generated/specs.ts +3 -0
  317. package/src/generated/speculos-deviceActions.ts +3 -0
  318. package/src/generated/transaction.ts +3 -0
  319. package/src/generated/types.ts +8 -0
  320. package/src/reconciliation.ts +16 -0
@@ -0,0 +1,65 @@
1
+ import BigNumber from "bignumber.js";
2
+ import type { Operation } from "@ledgerhq/types-live";
3
+ import { formatAccountSpecifics } from "../cosmos/account";
4
+ import { CosmosExtraTxInfo } from "../cosmos/types";
5
+
6
+ function formatOperationSpecifics(op: Operation): string {
7
+ const { memo, validators, autoClaimedRewards } = op.extra;
8
+ let str = " ";
9
+ if (validators && validators.length > 0) {
10
+ str += validators
11
+ .map((v) => {
12
+ `\n to ${v.address} ${v.amount}`;
13
+ })
14
+ .join("");
15
+ }
16
+
17
+ if (autoClaimedRewards) {
18
+ str += `\n auto claimed rewards is: ${autoClaimedRewards.toString()}`;
19
+ }
20
+ if (memo) {
21
+ str += `\n Memo: ${memo}`;
22
+ }
23
+ return str;
24
+ }
25
+
26
+ export function fromOperationExtraRaw(
27
+ extra: Record<string, any> | null | undefined
28
+ ): CosmosExtraTxInfo | Record<string, any> | null | undefined {
29
+ let e = {};
30
+ if (extra && extra.validators) {
31
+ e = {
32
+ ...extra,
33
+ validators: extra.validators.map((o) => ({
34
+ ...o,
35
+ amount: new BigNumber(o.amount),
36
+ })),
37
+ };
38
+ }
39
+
40
+ return e;
41
+ }
42
+ export function toOperationExtraRaw(
43
+ extra: Record<string, any> | null | undefined
44
+ ): CosmosExtraTxInfo | Record<string, any> | null | undefined {
45
+ let e = {};
46
+
47
+ if (extra && extra.validators) {
48
+ e = {
49
+ ...extra,
50
+ validators: extra.validators.map((o) => ({
51
+ ...o,
52
+ amount: o.amount.toString(),
53
+ })),
54
+ };
55
+ }
56
+
57
+ return e;
58
+ }
59
+
60
+ export default {
61
+ formatOperationSpecifics,
62
+ fromOperationExtraRaw,
63
+ toOperationExtraRaw,
64
+ formatAccountSpecifics,
65
+ };
@@ -0,0 +1,530 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { getEnv } from "../../../env";
3
+ import network from "../../../network";
4
+ import { encodeOperationId } from "../../../operation";
5
+ import { Operation, OperationType } from "@ledgerhq/types-live";
6
+ import { CosmosAPI } from "../../cosmos/api/Cosmos";
7
+ import { CosmosDelegationInfo } from "../../cosmos/types";
8
+ import {
9
+ OsmosisDistributionParams,
10
+ OsmosisPool,
11
+ OsmosisTotalSupply,
12
+ } from "../OsmosisSupplyTypes";
13
+ import {
14
+ OsmosisAccountTransaction,
15
+ OsmosisAmount,
16
+ OsmosisCurrency,
17
+ OsmosisEventNestedContent,
18
+ OsmosisSendEventContent,
19
+ OsmosisStakingEventContent,
20
+ OsmosisTransactionTypeEnum,
21
+ } from "./sdk.types";
22
+
23
+ export const nodeEndpoint = getEnv("API_OSMOSIS_NODE").replace(/\/$/, "");
24
+ const indexerEndpoint = getEnv("API_OSMOSIS_INDEXER").replace(/\/$/, "");
25
+
26
+ /**
27
+ * Returns true if account is the signer
28
+ */
29
+ function isSender(content: OsmosisEventNestedContent, addr: string): boolean {
30
+ return content.account.id === addr;
31
+ }
32
+
33
+ /**
34
+ * Map transaction to an Operation Type
35
+ */
36
+ function getOperationType(
37
+ eventContent: OsmosisSendEventContent,
38
+ addr: string
39
+ ): OperationType {
40
+ return isSender(eventContent.sender[0], addr) ? "OUT" : "IN";
41
+ }
42
+
43
+ /**
44
+ * Map a send transaction as returned by the indexer to a Ledger Live Operation
45
+ */
46
+ export const convertTransactionToOperation = (
47
+ accountId: string,
48
+ type: OperationType,
49
+ value: BigNumber,
50
+ transaction: OsmosisAccountTransaction,
51
+ senders: string[] = [],
52
+ recipients: string[] = [],
53
+ extra: Record<string, any>
54
+ ): Operation => {
55
+ return {
56
+ id: encodeOperationId(accountId, transaction.hash, type),
57
+ accountId,
58
+ fee: new BigNumber(getMicroOsmoAmount(transaction.transaction_fee)),
59
+ value,
60
+ type,
61
+ hash: transaction.hash,
62
+ blockHash: transaction.block_hash,
63
+ blockHeight: transaction.height,
64
+ date: new Date(transaction.time),
65
+ senders,
66
+ recipients,
67
+ hasFailed: transaction.has_errors,
68
+ extra,
69
+ };
70
+ };
71
+
72
+ /**
73
+ * Map transaction to a correct Operation Value (affecting account balance)
74
+ */
75
+ export function getOperationValue(
76
+ eventContent: OsmosisSendEventContent,
77
+ type: string,
78
+ fee: BigNumber
79
+ ): BigNumber {
80
+ let amount: BigNumber;
81
+ switch (type) {
82
+ // Per operation.ts, in "OUT" case, it includes the fees. in "IN" case, it excludes them.
83
+ case "OUT":
84
+ amount = BigNumber.sum(
85
+ getMicroOsmoAmount(eventContent.sender[0]?.amounts),
86
+ fee
87
+ );
88
+ break;
89
+ case "IN":
90
+ amount = getMicroOsmoAmount(eventContent.recipient[0]?.amounts);
91
+ break;
92
+ default:
93
+ // defaults to received funds (i.e. no fee is added)
94
+ // amount = getMicroOsmoAmount(eventContent.recipient[0]?.amounts);
95
+ amount = new BigNumber(0);
96
+ }
97
+ return amount;
98
+ }
99
+
100
+ /**
101
+ * Extract only the amount from a list of type OsmosisAmount
102
+ */
103
+ export const getMicroOsmoAmount = (amounts: OsmosisAmount[]): BigNumber => {
104
+ return amounts.reduce(
105
+ (result, current) =>
106
+ current.currency === OsmosisCurrency
107
+ ? result.plus(new BigNumber(current.numeric))
108
+ : result,
109
+ new BigNumber(0)
110
+ );
111
+ };
112
+
113
+ export class OsmosisAPI extends CosmosAPI {
114
+ protected _defaultEndpoint: string = nodeEndpoint;
115
+ protected _namespace = "osmosis";
116
+ private _defaultTransactionsLimit = 100;
117
+
118
+ getOperations = async (
119
+ accountId: string,
120
+ address: string,
121
+ startDate: Date | null,
122
+ startAt = 0,
123
+ transactionsLimit: number = this._defaultTransactionsLimit
124
+ ): Promise<Operation[]> => {
125
+ const now = new Date().toISOString();
126
+ const operations: Operation[] = [];
127
+
128
+ const { data: accountTransactions } = await network({
129
+ method: "POST",
130
+ url: `${indexerEndpoint}/transactions_search/`,
131
+ data: {
132
+ network: "osmosis",
133
+ // type: [OsmosisTransactionTypeEnum.Redelegate], // if no type is specified, all transaction types will be returned
134
+ account: [address],
135
+ before_time: now,
136
+ after_time: startDate !== null ? startDate.toISOString() : null,
137
+ limit: transactionsLimit,
138
+ offset: startAt,
139
+ },
140
+ });
141
+
142
+ if (!accountTransactions || !accountTransactions.length) {
143
+ return operations;
144
+ }
145
+
146
+ for (let i = 0; i < accountTransactions.length; i++) {
147
+ const events = accountTransactions[i].events;
148
+ const memo: string = accountTransactions[i].memo || "";
149
+ for (let j = 0; j < events.length; j++) {
150
+ const transactionType = events[j].kind ? events[j].kind : "n/a";
151
+ switch (
152
+ // Example: "send". See: OsmosisTransactionTypeEnum.
153
+ // Note: "send" means all transactions where some party was sending some OSMO,
154
+ // which means it shouldn't be interpreted as OUT transactions. See isSender()
155
+ // for context on how we determine if a "send" transaction is IN or OUT.
156
+ transactionType
157
+ ) {
158
+ case OsmosisTransactionTypeEnum.Send: {
159
+ const operation = await this.convertSendTransactionToOperation(
160
+ accountId,
161
+ address,
162
+ events[j],
163
+ accountTransactions[i],
164
+ memo
165
+ );
166
+ if (operation != null) {
167
+ operations.push(operation);
168
+ }
169
+ break;
170
+ }
171
+
172
+ case OsmosisTransactionTypeEnum.Delegate: {
173
+ const ops = await this.convertDelegateTransactionToOperation(
174
+ accountId,
175
+ events[j],
176
+ accountTransactions[i],
177
+ memo
178
+ );
179
+ if (ops.length > 0) {
180
+ ops.forEach((op) => operations.push(op));
181
+ }
182
+ break;
183
+ }
184
+
185
+ case OsmosisTransactionTypeEnum.Redelegate: {
186
+ const ops = await this.convertRedelegateTransactionToOperation(
187
+ accountId,
188
+ events[j],
189
+ accountTransactions[i],
190
+ memo
191
+ );
192
+ if (ops.length > 0) {
193
+ ops.forEach((op) => operations.push(op));
194
+ }
195
+ break;
196
+ }
197
+ case OsmosisTransactionTypeEnum.Undelegate: {
198
+ const ops = await this.convertUndelegateTransactionToOperation(
199
+ accountId,
200
+ events[j],
201
+ accountTransactions[i],
202
+ memo
203
+ );
204
+ if (ops.length > 0) {
205
+ ops.forEach((op) => operations.push(op));
206
+ }
207
+ break;
208
+ }
209
+ case OsmosisTransactionTypeEnum.Reward: {
210
+ // For the time being we'll be creating duplicate ops for the edge case of
211
+ // rewards txs that contain multiple claim messages.
212
+ // The idea is that a few duplicate operations won't affect performance
213
+ // significantly, and the duplicate will be removed anyways by mergeOps in js-sync.
214
+ // If this doesn't work then simply add a check here to see if there's already
215
+ // an operation in the operations[] array with the current tx hash.
216
+
217
+ const ops = await this.convertRewardTransactionToOperation(
218
+ accountId,
219
+ accountTransactions[i],
220
+ memo
221
+ );
222
+ if (ops.length > 0) {
223
+ ops.forEach((op) => operations.push(op));
224
+ }
225
+ break;
226
+ }
227
+ default:
228
+ break;
229
+ }
230
+ }
231
+ }
232
+
233
+ return operations;
234
+ };
235
+
236
+ convertSendTransactionToOperation = async (
237
+ accountId: string,
238
+ address: string,
239
+ event: any,
240
+ tx: OsmosisAccountTransaction,
241
+ memo: string
242
+ ): Promise<Operation | undefined> => {
243
+ // Check "sub" array exists. The "sub" array contains transactions messages. If there isn't one, skip the tx
244
+ if (!Object.prototype.hasOwnProperty.call(event, "sub")) {
245
+ return;
246
+ }
247
+
248
+ const eventContent: OsmosisSendEventContent[] = event.sub;
249
+ // Check that sub array is not empty
250
+ if (!(eventContent.length > 0)) return;
251
+
252
+ // Check eventContent contains at least one entry of type "send" using find() and retrieve it.
253
+ // find() retrieves the (first) message, which contains sender, recipient and amount info
254
+ // We get get the first message because typically "send" transactions only have one sender and one recipient
255
+ // If no messages are found, skip the tx
256
+ const sendEvent = eventContent.find(
257
+ (event) => event.type[0] === OsmosisTransactionTypeEnum.Send
258
+ );
259
+ if (sendEvent == null) return;
260
+ const type = getOperationType(sendEvent, address);
261
+ const senders = sendEvent.sender[0]?.account?.id
262
+ ? [sendEvent.sender[0]?.account?.id]
263
+ : [];
264
+ const recipients = sendEvent.recipient[0]?.account?.id
265
+ ? [sendEvent.recipient[0]?.account?.id]
266
+ : [];
267
+ const fee = new BigNumber(getMicroOsmoAmount(tx.transaction_fee));
268
+ return convertTransactionToOperation(
269
+ accountId,
270
+ type,
271
+ getOperationValue(sendEvent, type, fee),
272
+ tx,
273
+ senders,
274
+ recipients,
275
+ { memo }
276
+ );
277
+ };
278
+
279
+ convertDelegateTransactionToOperation = async (
280
+ accountId: string,
281
+ event: any,
282
+ tx: OsmosisAccountTransaction,
283
+ memo: string
284
+ ): Promise<Operation[]> => {
285
+ const ops: Operation[] = [];
286
+
287
+ if (!Object.prototype.hasOwnProperty.call(event, "sub")) {
288
+ return ops;
289
+ }
290
+ const eventContent: OsmosisStakingEventContent[] = event.sub;
291
+ if (!(eventContent.length > 0)) return ops;
292
+ const delegateEvent = eventContent.find(
293
+ (event) => event.type[0] === OsmosisTransactionTypeEnum.Delegate
294
+ );
295
+ if (delegateEvent == null) return ops;
296
+ const type = "DELEGATE";
297
+ const extra = {
298
+ memo: memo,
299
+ validators: [
300
+ {
301
+ address: delegateEvent.node.validator[0].id,
302
+ amount: new BigNumber(
303
+ getMicroOsmoAmount([delegateEvent.amount.delegate])
304
+ ),
305
+ },
306
+ ],
307
+ autoClaimedRewards: this.calculateAutoClaimedRewards(tx).toString(),
308
+ };
309
+
310
+ ops.push(
311
+ convertTransactionToOperation(
312
+ accountId,
313
+ type,
314
+ extra.validators[0].amount,
315
+ tx,
316
+ [],
317
+ [],
318
+ extra
319
+ )
320
+ );
321
+ return ops;
322
+ };
323
+
324
+ calculateAutoClaimedRewards = (tx: OsmosisAccountTransaction): BigNumber => {
325
+ // These types are the only types for which auto claim rewards are supported
326
+ const SUPPORTED_TYPES = [
327
+ OsmosisTransactionTypeEnum.Delegate,
328
+ OsmosisTransactionTypeEnum.Redelegate,
329
+ OsmosisTransactionTypeEnum.Undelegate,
330
+ ];
331
+ let totalRewardsAmount = new BigNumber(0);
332
+ tx.events.forEach((event) => {
333
+ if (Object.prototype.hasOwnProperty.call(event, "sub")) {
334
+ const eventContent: OsmosisStakingEventContent[] =
335
+ event.sub as OsmosisStakingEventContent[];
336
+ if (eventContent.length > 0) {
337
+ const rewardEvent = eventContent[0];
338
+ if (
339
+ rewardEvent != null &&
340
+ SUPPORTED_TYPES.includes(rewardEvent.type[0])
341
+ ) {
342
+ let amount = new BigNumber(0);
343
+ if (rewardEvent.transfers != null) {
344
+ if (rewardEvent.transfers.reward) {
345
+ amount = getMicroOsmoAmount(
346
+ rewardEvent.transfers.reward[0].amounts
347
+ );
348
+ totalRewardsAmount = totalRewardsAmount.plus(amount);
349
+ }
350
+ }
351
+ }
352
+ }
353
+ }
354
+ });
355
+ return totalRewardsAmount;
356
+ };
357
+
358
+ convertRedelegateTransactionToOperation = async (
359
+ accountId: string,
360
+ event: any,
361
+ tx: OsmosisAccountTransaction,
362
+ memo: string
363
+ ): Promise<Operation[]> => {
364
+ const ops: Operation[] = [];
365
+
366
+ if (!Object.prototype.hasOwnProperty.call(event, "sub")) {
367
+ return ops;
368
+ }
369
+ const eventContent: OsmosisStakingEventContent[] = event.sub;
370
+ if (!(eventContent.length > 0)) return ops;
371
+ const redelegEvent = eventContent.find(
372
+ (event) => event.type[0] === OsmosisTransactionTypeEnum.Redelegate
373
+ );
374
+ if (redelegEvent == null) return ops;
375
+ const type = "REDELEGATE";
376
+ const extra = {
377
+ memo: memo,
378
+ validators: [
379
+ {
380
+ address: redelegEvent.node.validator_destination[0].id,
381
+ amount: new BigNumber(
382
+ getMicroOsmoAmount([redelegEvent.amount.delegate])
383
+ ),
384
+ },
385
+ ],
386
+ sourceValidator: redelegEvent.node.validator_source[0].id,
387
+ autoClaimedRewards: this.calculateAutoClaimedRewards(tx).toString(),
388
+ };
389
+
390
+ ops.push(
391
+ convertTransactionToOperation(
392
+ accountId,
393
+ type,
394
+ extra.validators[0].amount,
395
+ tx,
396
+ [],
397
+ [],
398
+ extra
399
+ )
400
+ );
401
+ return ops;
402
+ };
403
+
404
+ convertUndelegateTransactionToOperation = async (
405
+ accountId: string,
406
+ event: any,
407
+ tx: OsmosisAccountTransaction,
408
+ memo: string
409
+ ): Promise<Operation[]> => {
410
+ const ops: Operation[] = [];
411
+
412
+ if (!Object.prototype.hasOwnProperty.call(event, "sub")) {
413
+ return ops;
414
+ }
415
+ const eventContent: OsmosisStakingEventContent[] = event.sub;
416
+ if (!(eventContent.length > 0)) return ops;
417
+ const undelegEvent = eventContent.find(
418
+ (event) => event.type[0] === OsmosisTransactionTypeEnum.Undelegate
419
+ );
420
+ if (undelegEvent == null) return ops;
421
+ const type = "UNDELEGATE";
422
+ const extra = {
423
+ memo: memo,
424
+ validators: [
425
+ {
426
+ address: undelegEvent.node.validator[0].id,
427
+ amount: new BigNumber(
428
+ getMicroOsmoAmount([undelegEvent.amount.undelegate])
429
+ ),
430
+ },
431
+ ],
432
+ autoClaimedRewards: this.calculateAutoClaimedRewards(tx).toString(),
433
+ };
434
+
435
+ ops.push(
436
+ convertTransactionToOperation(
437
+ accountId,
438
+ type,
439
+ extra.validators[0].amount,
440
+ tx,
441
+ [],
442
+ [],
443
+ extra
444
+ )
445
+ );
446
+ return ops;
447
+ };
448
+
449
+ convertRewardTransactionToOperation = async (
450
+ accountId: string,
451
+ tx: OsmosisAccountTransaction,
452
+ memo: string
453
+ ): Promise<Operation[]> => {
454
+ const ops: Operation[] = [];
455
+
456
+ let totalRewardsAmount = new BigNumber(0);
457
+ const rewardValidators: CosmosDelegationInfo[] = [];
458
+ tx.events.forEach((event) => {
459
+ if (!Object.prototype.hasOwnProperty.call(event, "sub")) {
460
+ return ops;
461
+ }
462
+ const eventContent: OsmosisStakingEventContent[] =
463
+ event.sub as OsmosisStakingEventContent[];
464
+ if (!(eventContent.length > 0)) return ops;
465
+ const rewardEvent = eventContent.find(
466
+ (event) => event.type[0] === OsmosisTransactionTypeEnum.Reward
467
+ );
468
+ if (rewardEvent == null) return ops;
469
+ let amount = new BigNumber(0);
470
+ if (rewardEvent.transfers != null) {
471
+ if (rewardEvent.transfers.reward) {
472
+ amount = getMicroOsmoAmount(rewardEvent.transfers.reward[0].amounts);
473
+ totalRewardsAmount = totalRewardsAmount.plus(amount);
474
+ rewardValidators.push({
475
+ address: rewardEvent.node.validator[0].id,
476
+ amount,
477
+ });
478
+ }
479
+ }
480
+ });
481
+ const type = "REWARD";
482
+ const extra = {
483
+ memo: memo,
484
+ validators: rewardValidators,
485
+ };
486
+ ops.push(
487
+ convertTransactionToOperation(
488
+ accountId,
489
+ type,
490
+ totalRewardsAmount,
491
+ tx,
492
+ [],
493
+ [],
494
+ extra
495
+ )
496
+ );
497
+ return ops;
498
+ };
499
+
500
+ queryTotalSupply = async (
501
+ minDenomUnit: string
502
+ ): Promise<OsmosisTotalSupply> => {
503
+ const { data } = await network({
504
+ method: "GET",
505
+ url: `${this._defaultEndpoint}/cosmos/bank/v1beta1/supply/${minDenomUnit}`,
506
+ });
507
+ const { amount } = data;
508
+ return { ...amount };
509
+ };
510
+
511
+ queryPool = async (): Promise<OsmosisPool> => {
512
+ const { data } = await network({
513
+ method: "GET",
514
+ url: `${this._defaultEndpoint}/cosmos/staking/v1beta1/pool`,
515
+ });
516
+ const { pool } = data;
517
+ return { ...pool };
518
+ };
519
+
520
+ queryDistributionParams = async (): Promise<OsmosisDistributionParams> => {
521
+ const { data } = await network({
522
+ method: "GET",
523
+ url: `${this._defaultEndpoint}/cosmos/distribution/v1beta1/params`,
524
+ });
525
+ const { params } = data;
526
+ return { ...params };
527
+ };
528
+ }
529
+
530
+ export const osmosisAPI = new OsmosisAPI();
@@ -0,0 +1,65 @@
1
+ export const OsmosisTransactionTypeEnum = {
2
+ // See https://docs.figment.io/network-documentation/cosmos/enriched-apis/transaction-search
3
+ // for help on these types.
4
+ Send: "send",
5
+ MultiSend: "multisend",
6
+ Delegate: "delegate",
7
+ Redelegate: "begin_redelegate",
8
+ Undelegate: "undelegate",
9
+ Reward: "withdraw_delegator_reward",
10
+ };
11
+
12
+ export const OsmosisCurrency = "uosmo";
13
+
14
+ // This type describes what a Transaction looks like as returned by the indexer
15
+ export interface OsmosisAccountTransaction {
16
+ id: string;
17
+ hash: string;
18
+ block_hash: string;
19
+ height: number;
20
+ chain_id: string;
21
+ time: Date;
22
+ transaction_fee: OsmosisAmount[];
23
+ gas_wanted: number;
24
+ gas_used: number;
25
+ version: string;
26
+ events: OsmosisEvent[];
27
+ has_errors: boolean;
28
+ memo?: string;
29
+ }
30
+ export interface OsmosisAmount {
31
+ text: string;
32
+ currency: string;
33
+ numeric: string;
34
+ }
35
+
36
+ export interface CosmosAmount {
37
+ amount: string;
38
+ denom: string;
39
+ }
40
+
41
+ export interface OsmosisEventNestedContent {
42
+ account: any;
43
+ amounts: OsmosisAmount[];
44
+ }
45
+
46
+ export interface OsmosisSendEventContent {
47
+ type: string[];
48
+ module: string;
49
+ sender: OsmosisEventNestedContent[];
50
+ recipient: OsmosisEventNestedContent[];
51
+ transfers: any[];
52
+ }
53
+ export interface OsmosisStakingEventContent {
54
+ type: string[];
55
+ module: string;
56
+ node: any;
57
+ amount: any;
58
+ transfers: any;
59
+ }
60
+
61
+ export interface OsmosisEvent {
62
+ id: string;
63
+ kind: typeof OsmosisTransactionTypeEnum;
64
+ sub: OsmosisSendEventContent[] | OsmosisStakingEventContent[];
65
+ }