@subwallet/extension-base 1.1.32-0 → 1.1.32-beta.0

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 (307) hide show
  1. package/background/KoniTypes.d.ts +112 -69
  2. package/background/KoniTypes.js +19 -13
  3. package/background/errors/TransactionError.js +9 -0
  4. package/cjs/background/KoniTypes.js +20 -16
  5. package/cjs/background/errors/TransactionError.js +9 -0
  6. package/cjs/constants/index.js +19 -4
  7. package/cjs/koni/api/dotsama/balance.js +464 -0
  8. package/cjs/koni/api/nft/config.js +33 -23
  9. package/cjs/koni/api/nft/index.js +14 -0
  10. package/cjs/koni/api/nft/nft.js +1 -22
  11. package/cjs/koni/api/nft/ordinal_nft/constants.js +21 -0
  12. package/cjs/koni/api/nft/ordinal_nft/index.js +121 -0
  13. package/cjs/koni/api/nft/ordinal_nft/utils.js +41 -0
  14. package/cjs/koni/api/staking/bonding/amplitude.js +17 -15
  15. package/cjs/koni/api/staking/bonding/astar.js +11 -10
  16. package/cjs/koni/api/staking/bonding/index.js +4 -1
  17. package/cjs/koni/api/staking/bonding/paraChain.js +25 -23
  18. package/cjs/koni/api/staking/bonding/relayChain.js +48 -45
  19. package/cjs/koni/api/staking/bonding/utils.js +104 -86
  20. package/cjs/koni/api/staking/index.js +6 -5
  21. package/cjs/koni/api/staking/paraChain.js +6 -5
  22. package/cjs/koni/api/staking/relayChain.js +3 -2
  23. package/cjs/koni/api/yield/helper/utils.js +46 -0
  24. package/cjs/koni/background/cron.js +3 -21
  25. package/cjs/koni/background/handlers/Extension.js +368 -69
  26. package/cjs/koni/background/handlers/State.js +18 -12
  27. package/cjs/koni/background/handlers/index.js +4 -2
  28. package/cjs/koni/background/subscription.js +7 -104
  29. package/cjs/services/campaign-service/index.js +28 -6
  30. package/cjs/services/chain-service/constants.js +1 -15
  31. package/cjs/services/chain-service/index.js +3 -2
  32. package/cjs/services/chain-service/utils.js +7 -1
  33. package/cjs/services/earning-service/constants/chains.js +29 -0
  34. package/cjs/services/earning-service/constants/index.js +27 -0
  35. package/cjs/services/earning-service/constants/step.js +18 -0
  36. package/cjs/services/earning-service/handlers/base.js +262 -0
  37. package/cjs/services/earning-service/handlers/index.js +60 -0
  38. package/cjs/services/earning-service/handlers/lending/base.js +81 -0
  39. package/cjs/services/earning-service/handlers/lending/index.js +13 -0
  40. package/cjs/services/earning-service/handlers/lending/interlay.js +192 -0
  41. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +240 -0
  42. package/cjs/services/earning-service/handlers/liquid-staking/base.js +97 -0
  43. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +298 -0
  44. package/cjs/services/earning-service/handlers/liquid-staking/index.js +34 -0
  45. package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +227 -0
  46. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +404 -0
  47. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +389 -0
  48. package/cjs/services/earning-service/handlers/native-staking/astar.js +466 -0
  49. package/cjs/services/earning-service/handlers/native-staking/base-para.js +146 -0
  50. package/cjs/services/earning-service/handlers/native-staking/base.js +161 -0
  51. package/cjs/services/earning-service/handlers/native-staking/index.js +34 -0
  52. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +390 -0
  53. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +567 -0
  54. package/cjs/services/earning-service/handlers/nomination-pool/index.js +566 -0
  55. package/cjs/services/earning-service/handlers/special.js +493 -0
  56. package/cjs/services/earning-service/service.js +720 -0
  57. package/cjs/services/earning-service/utils/index.js +128 -0
  58. package/cjs/services/event-service/index.js +5 -0
  59. package/cjs/services/keyring-service/index.js +14 -2
  60. package/cjs/services/migration-service/scripts/DeleteEarningData.js +21 -0
  61. package/cjs/services/migration-service/scripts/EnableEarningChains.js +21 -0
  62. package/cjs/services/migration-service/scripts/MigrateEthProvider.js +17 -0
  63. package/cjs/services/migration-service/scripts/MigrateLedgerAccount.js +1 -1
  64. package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +17 -0
  65. package/cjs/services/migration-service/scripts/MigrateProvider.js +29 -0
  66. package/cjs/services/migration-service/scripts/MigrateTransactionHistory.js +1 -1
  67. package/cjs/services/migration-service/scripts/databases/MigrateEarningHistory.js +21 -0
  68. package/cjs/services/migration-service/scripts/databases/MigrateEarningVersion.js +21 -0
  69. package/cjs/services/migration-service/scripts/index.js +6 -1
  70. package/cjs/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +149 -0
  71. package/cjs/services/mint-campaign-service/campaigns/index.js +13 -0
  72. package/cjs/services/mint-campaign-service/constants.js +11 -0
  73. package/cjs/services/mint-campaign-service/index.js +18 -0
  74. package/cjs/services/notification-service/NotificationService.js +1 -1
  75. package/cjs/services/storage-service/DatabaseService.js +66 -0
  76. package/cjs/services/storage-service/databases/index.js +4 -0
  77. package/cjs/services/storage-service/db-stores/Campaign.js +9 -3
  78. package/cjs/services/storage-service/db-stores/NominatorMetadata.js +3 -3
  79. package/cjs/services/storage-service/db-stores/YieldPoolStore.js +36 -0
  80. package/cjs/services/storage-service/db-stores/YieldPositionStore.js +71 -0
  81. package/cjs/services/storage-service/index.js +241 -0
  82. package/cjs/services/subscan-service/index.js +16 -0
  83. package/cjs/services/transaction-service/event-parser/index.js +58 -0
  84. package/cjs/services/transaction-service/helpers/index.js +3 -1
  85. package/cjs/services/transaction-service/index.js +245 -75
  86. package/cjs/services/transaction-service/utils.js +1 -0
  87. package/cjs/types/campaigns/index.js +16 -0
  88. package/cjs/types/campaigns/unlock-dot.js +1 -0
  89. package/cjs/types/index.js +44 -0
  90. package/cjs/types/ordinal.js +1 -0
  91. package/cjs/types/transaction.js +1 -0
  92. package/cjs/types/yield/actions/index.js +27 -0
  93. package/cjs/types/yield/actions/join/index.js +38 -0
  94. package/cjs/types/yield/actions/join/step.js +47 -0
  95. package/cjs/types/yield/actions/join/submit.js +1 -0
  96. package/cjs/types/yield/actions/join/validate.js +16 -0
  97. package/cjs/types/yield/actions/others.js +1 -0
  98. package/cjs/types/yield/index.js +27 -0
  99. package/cjs/types/yield/info/account/index.js +49 -0
  100. package/cjs/types/yield/info/account/info.js +1 -0
  101. package/cjs/types/yield/info/account/reward.js +1 -0
  102. package/cjs/types/yield/info/account/target.js +32 -0
  103. package/cjs/types/yield/info/account/unstake.js +27 -0
  104. package/cjs/types/yield/info/base.js +41 -0
  105. package/cjs/types/yield/info/chain/index.js +27 -0
  106. package/cjs/types/yield/info/chain/info.js +1 -0
  107. package/cjs/types/yield/info/chain/target.js +1 -0
  108. package/cjs/types/yield/info/index.js +49 -0
  109. package/cjs/types/yield/info/pallet.js +15 -0
  110. package/cjs/types.js +1 -0
  111. package/cjs/utils/address.js +34 -0
  112. package/cjs/utils/fetchStaticData.js +2 -1
  113. package/cjs/utils/index.js +89 -1
  114. package/cjs/utils/keyring.js +57 -0
  115. package/cjs/utils/number.js +6 -2
  116. package/cjs/utils/object.js +12 -0
  117. package/constants/index.d.ts +6 -1
  118. package/constants/index.js +6 -1
  119. package/koni/api/nft/config.js +33 -23
  120. package/koni/api/nft/index.js +15 -1
  121. package/koni/api/nft/nft.js +2 -23
  122. package/koni/api/nft/ordinal_nft/constants.d.ts +9 -0
  123. package/koni/api/nft/ordinal_nft/constants.js +12 -0
  124. package/koni/api/nft/ordinal_nft/index.d.ts +8 -0
  125. package/koni/api/nft/ordinal_nft/index.js +114 -0
  126. package/koni/api/nft/ordinal_nft/utils.d.ts +2 -0
  127. package/koni/api/nft/ordinal_nft/utils.js +33 -0
  128. package/koni/api/staking/bonding/amplitude.js +11 -9
  129. package/koni/api/staking/bonding/astar.js +9 -8
  130. package/koni/api/staking/bonding/index.d.ts +1 -1
  131. package/koni/api/staking/bonding/index.js +5 -1
  132. package/koni/api/staking/bonding/paraChain.js +12 -10
  133. package/koni/api/staking/bonding/relayChain.d.ts +2 -2
  134. package/koni/api/staking/bonding/relayChain.js +33 -30
  135. package/koni/api/staking/bonding/utils.d.ts +15 -38
  136. package/koni/api/staking/bonding/utils.js +85 -69
  137. package/koni/api/staking/index.js +2 -1
  138. package/koni/api/staking/paraChain.js +7 -6
  139. package/koni/api/staking/relayChain.js +4 -3
  140. package/koni/api/yield/helper/utils.d.ts +10 -0
  141. package/koni/api/yield/helper/utils.js +32 -0
  142. package/koni/background/cron.d.ts +0 -4
  143. package/koni/background/cron.js +4 -22
  144. package/koni/background/handlers/Extension.d.ts +17 -1
  145. package/koni/background/handlers/Extension.js +327 -30
  146. package/koni/background/handlers/State.d.ts +6 -1
  147. package/koni/background/handlers/State.js +17 -12
  148. package/koni/background/handlers/index.js +4 -2
  149. package/koni/background/subscription.d.ts +1 -6
  150. package/koni/background/subscription.js +8 -104
  151. package/package.json +316 -3
  152. package/services/campaign-service/index.js +28 -6
  153. package/services/chain-service/constants.d.ts +0 -11
  154. package/services/chain-service/constants.js +0 -13
  155. package/services/chain-service/index.js +3 -2
  156. package/services/chain-service/utils.d.ts +1 -0
  157. package/services/chain-service/utils.js +5 -1
  158. package/services/earning-service/constants/abis/compound_finance_v2_abi.json +1235 -0
  159. package/services/earning-service/constants/abis/st_liquid_token_abi.json +1355 -0
  160. package/services/earning-service/constants/chains.d.ts +14 -0
  161. package/services/earning-service/constants/chains.js +21 -0
  162. package/services/earning-service/constants/index.d.ts +2 -0
  163. package/services/earning-service/constants/index.js +5 -0
  164. package/services/earning-service/constants/step.d.ts +3 -0
  165. package/services/earning-service/constants/step.js +10 -0
  166. package/services/earning-service/handlers/base.d.ts +113 -0
  167. package/services/earning-service/handlers/base.js +256 -0
  168. package/services/earning-service/handlers/index.d.ts +5 -0
  169. package/services/earning-service/handlers/index.js +8 -0
  170. package/services/earning-service/handlers/lending/base.d.ts +8 -0
  171. package/services/earning-service/handlers/lending/base.js +73 -0
  172. package/services/earning-service/handlers/lending/index.d.ts +1 -0
  173. package/services/earning-service/handlers/lending/index.js +4 -0
  174. package/services/earning-service/handlers/lending/interlay.d.ts +24 -0
  175. package/services/earning-service/handlers/lending/interlay.js +184 -0
  176. package/services/earning-service/handlers/liquid-staking/acala.d.ts +27 -0
  177. package/services/earning-service/handlers/liquid-staking/acala.js +232 -0
  178. package/services/earning-service/handlers/liquid-staking/base.d.ts +11 -0
  179. package/services/earning-service/handlers/liquid-staking/base.js +89 -0
  180. package/services/earning-service/handlers/liquid-staking/bifrost.d.ts +46 -0
  181. package/services/earning-service/handlers/liquid-staking/bifrost.js +287 -0
  182. package/services/earning-service/handlers/liquid-staking/index.d.ts +4 -0
  183. package/services/earning-service/handlers/liquid-staking/index.js +7 -0
  184. package/services/earning-service/handlers/liquid-staking/parallel.d.ts +26 -0
  185. package/services/earning-service/handlers/liquid-staking/parallel.js +219 -0
  186. package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +34 -0
  187. package/services/earning-service/handlers/liquid-staking/stella-swap.js +394 -0
  188. package/services/earning-service/handlers/native-staking/amplitude.d.ts +22 -0
  189. package/services/earning-service/handlers/native-staking/amplitude.js +380 -0
  190. package/services/earning-service/handlers/native-staking/astar.d.ts +19 -0
  191. package/services/earning-service/handlers/native-staking/astar.js +456 -0
  192. package/services/earning-service/handlers/native-staking/base-para.d.ts +11 -0
  193. package/services/earning-service/handlers/native-staking/base-para.js +138 -0
  194. package/services/earning-service/handlers/native-staking/base.d.ts +21 -0
  195. package/services/earning-service/handlers/native-staking/base.js +152 -0
  196. package/services/earning-service/handlers/native-staking/index.d.ts +4 -0
  197. package/services/earning-service/handlers/native-staking/index.js +7 -0
  198. package/services/earning-service/handlers/native-staking/para-chain.d.ts +15 -0
  199. package/services/earning-service/handlers/native-staking/para-chain.js +382 -0
  200. package/services/earning-service/handlers/native-staking/relay-chain.d.ts +21 -0
  201. package/services/earning-service/handlers/native-staking/relay-chain.js +558 -0
  202. package/services/earning-service/handlers/nomination-pool/index.d.ts +36 -0
  203. package/services/earning-service/handlers/nomination-pool/index.js +556 -0
  204. package/services/earning-service/handlers/special.d.ts +64 -0
  205. package/services/earning-service/handlers/special.js +485 -0
  206. package/services/earning-service/service.d.ts +93 -0
  207. package/services/earning-service/service.js +709 -0
  208. package/services/earning-service/utils/index.d.ts +18 -0
  209. package/services/earning-service/utils/index.js +112 -0
  210. package/services/event-service/index.d.ts +2 -0
  211. package/services/event-service/index.js +5 -0
  212. package/services/event-service/types.d.ts +9 -0
  213. package/services/keyring-service/index.d.ts +2 -1
  214. package/services/keyring-service/index.js +14 -2
  215. package/services/migration-service/scripts/DeleteEarningData.d.ts +4 -0
  216. package/services/migration-service/scripts/DeleteEarningData.js +13 -0
  217. package/services/migration-service/scripts/EnableEarningChains.d.ts +4 -0
  218. package/services/migration-service/scripts/EnableEarningChains.js +13 -0
  219. package/services/migration-service/scripts/MigrateLedgerAccount.js +1 -1
  220. package/services/migration-service/scripts/MigrateTransactionHistory.js +1 -1
  221. package/services/migration-service/scripts/databases/MigrateEarningHistory.d.ts +4 -0
  222. package/services/migration-service/scripts/databases/MigrateEarningHistory.js +13 -0
  223. package/services/migration-service/scripts/databases/MigrateEarningVersion.d.ts +4 -0
  224. package/services/migration-service/scripts/databases/MigrateEarningVersion.js +13 -0
  225. package/services/migration-service/scripts/index.js +6 -1
  226. package/services/mint-campaign-service/campaigns/UnlockDotCampaign.d.ts +13 -0
  227. package/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +139 -0
  228. package/services/mint-campaign-service/campaigns/index.d.ts +1 -0
  229. package/services/mint-campaign-service/campaigns/index.js +4 -0
  230. package/services/mint-campaign-service/constants.d.ts +1 -0
  231. package/services/mint-campaign-service/constants.js +4 -0
  232. package/services/mint-campaign-service/index.d.ts +7 -0
  233. package/services/mint-campaign-service/index.js +11 -0
  234. package/services/notification-service/NotificationService.js +1 -1
  235. package/services/storage-service/DatabaseService.d.ts +23 -1
  236. package/services/storage-service/DatabaseService.js +66 -0
  237. package/services/storage-service/databases/index.d.ts +3 -1
  238. package/services/storage-service/databases/index.js +4 -0
  239. package/services/storage-service/db-stores/Campaign.js +9 -3
  240. package/services/storage-service/db-stores/NominatorMetadata.js +3 -3
  241. package/services/storage-service/db-stores/YieldPoolStore.d.ts +10 -0
  242. package/services/storage-service/db-stores/YieldPoolStore.js +28 -0
  243. package/services/storage-service/db-stores/YieldPositionStore.d.ts +11 -0
  244. package/services/storage-service/db-stores/YieldPositionStore.js +63 -0
  245. package/services/subscan-service/index.d.ts +3 -2
  246. package/services/subscan-service/index.js +15 -0
  247. package/services/subscan-service/types.d.ts +20 -0
  248. package/services/transaction-service/event-parser/index.d.ts +3 -1
  249. package/services/transaction-service/event-parser/index.js +57 -1
  250. package/services/transaction-service/helpers/index.js +3 -1
  251. package/services/transaction-service/index.d.ts +4 -15
  252. package/services/transaction-service/index.js +243 -73
  253. package/services/transaction-service/types.d.ts +2 -0
  254. package/services/transaction-service/utils.js +1 -0
  255. package/types/campaigns/index.d.ts +1 -0
  256. package/types/campaigns/index.js +4 -0
  257. package/types/campaigns/unlock-dot.d.ts +71 -0
  258. package/types/campaigns/unlock-dot.js +1 -0
  259. package/types/index.d.ts +5 -0
  260. package/types/index.js +5 -1
  261. package/types/ordinal.d.ts +69 -0
  262. package/types/ordinal.js +1 -0
  263. package/types/transaction.d.ts +3 -0
  264. package/types/transaction.js +1 -0
  265. package/types/yield/actions/index.d.ts +2 -0
  266. package/types/yield/actions/index.js +5 -0
  267. package/types/yield/actions/join/index.d.ts +3 -0
  268. package/types/yield/actions/join/index.js +6 -0
  269. package/types/yield/actions/join/step.d.ts +95 -0
  270. package/types/yield/actions/join/step.js +46 -0
  271. package/types/yield/actions/join/submit.d.ts +58 -0
  272. package/types/yield/actions/join/submit.js +1 -0
  273. package/types/yield/actions/join/validate.d.ts +18 -0
  274. package/types/yield/actions/join/validate.js +10 -0
  275. package/types/yield/actions/others.d.ts +85 -0
  276. package/types/yield/actions/others.js +1 -0
  277. package/types/yield/index.d.ts +2 -0
  278. package/types/yield/index.js +5 -0
  279. package/types/yield/info/account/index.d.ts +4 -0
  280. package/types/yield/info/account/index.js +7 -0
  281. package/types/yield/info/account/info.d.ts +92 -0
  282. package/types/yield/info/account/info.js +1 -0
  283. package/types/yield/info/account/reward.d.ts +47 -0
  284. package/types/yield/info/account/reward.js +1 -0
  285. package/types/yield/info/account/target.d.ts +43 -0
  286. package/types/yield/info/account/target.js +27 -0
  287. package/types/yield/info/account/unstake.d.ts +31 -0
  288. package/types/yield/info/account/unstake.js +22 -0
  289. package/types/yield/info/base.d.ts +45 -0
  290. package/types/yield/info/base.js +36 -0
  291. package/types/yield/info/chain/index.d.ts +2 -0
  292. package/types/yield/info/chain/index.js +5 -0
  293. package/types/yield/info/chain/info.d.ts +251 -0
  294. package/types/yield/info/chain/info.js +1 -0
  295. package/types/yield/info/chain/target.d.ts +37 -0
  296. package/types/yield/info/chain/target.js +1 -0
  297. package/types/yield/info/index.d.ts +4 -0
  298. package/types/yield/info/index.js +7 -0
  299. package/types/yield/info/pallet.d.ts +143 -0
  300. package/types/yield/info/pallet.js +9 -0
  301. package/utils/fetchStaticData.js +2 -1
  302. package/utils/index.d.ts +5 -0
  303. package/utils/index.js +53 -1
  304. package/utils/number.d.ts +2 -1
  305. package/utils/number.js +2 -1
  306. package/utils/object.d.ts +1 -0
  307. package/utils/object.js +6 -0
@@ -2,10 +2,12 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
5
- import { BasicTxErrorType, StakingStatus, StakingTxErrorType, StakingType, UnstakingStatus } from '@subwallet/extension-base/background/KoniTypes';
6
- import { getBondedValidators, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage, getParaCurrentInflation, getStakingStatusByNominations, isUnstakeAll, parseIdentity } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
5
+ import { BasicTxErrorType, StakingTxErrorType, StakingType } from '@subwallet/extension-base/background/KoniTypes';
6
+ import { getBondedValidators, getEarningStatusByNominations, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage, getParaCurrentInflation, isUnstakeAll } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
7
7
  import { _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
8
8
  import { _isChainEvmCompatible } from '@subwallet/extension-base/services/chain-service/utils';
9
+ import { parseIdentity } from '@subwallet/extension-base/services/earning-service/utils';
10
+ import { EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
9
11
  import { isSameAddress, parseRawNumber, reformatAddress } from '@subwallet/extension-base/utils';
10
12
  import { BN, BN_ZERO } from '@polkadot/util';
11
13
  import { isEthereumAddress } from '@polkadot/util-crypto';
@@ -46,7 +48,7 @@ export function validateParaChainBondingCondition(chainInfo, amount, selectedCol
46
48
  const minStakeErrorMessage = getMinStakeErrorMessage(chainInfo, bnMinStake);
47
49
  const maxValidatorErrorMessage = getMaxValidatorErrorMessage(chainInfo, chainStakingMetadata.maxValidatorPerNominator);
48
50
  const existUnstakeErrorMessage = getExistUnstakeErrorMessage(chainInfo.slug, nominatorMetadata === null || nominatorMetadata === void 0 ? void 0 : nominatorMetadata.type, true);
49
- if (!nominatorMetadata || nominatorMetadata.status === StakingStatus.NOT_STAKING) {
51
+ if (!nominatorMetadata || nominatorMetadata.status === EarningStatus.NOT_STAKING) {
50
52
  if (!bnTotalStake.gte(bnMinStake)) {
51
53
  errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
52
54
  }
@@ -160,7 +162,7 @@ export async function subscribeParaChainNominatorMetadata(chainInfo, address, su
160
162
  const minDelegation = collatorInfo === null || collatorInfo === void 0 ? void 0 : collatorInfo.lowestTopDelegationAmount.toString();
161
163
  const delegationScheduledRequests = _delegationScheduledRequests.toPrimitive();
162
164
  let hasUnstaking = false;
163
- let delegationStatus = StakingStatus.NOT_EARNING;
165
+ let delegationStatus = EarningStatus.NOT_EARNING;
164
166
 
165
167
  // parse unstaking info
166
168
  if (delegationScheduledRequests) {
@@ -188,7 +190,7 @@ export async function subscribeParaChainNominatorMetadata(chainInfo, address, su
188
190
  const bnUnstakeBalance = unstakingMap[delegation.owner] ? new BN(unstakingMap[delegation.owner].claimable) : BN_ZERO;
189
191
  const bnActiveStake = bnStake.sub(bnUnstakeBalance);
190
192
  if (bnActiveStake.gt(BN_ZERO) && bnActiveStake.gte(new BN(minDelegation))) {
191
- delegationStatus = StakingStatus.EARNING_REWARD;
193
+ delegationStatus = EarningStatus.EARNING_REWARD;
192
194
  }
193
195
  bnTotalActiveStake = bnTotalActiveStake.add(bnActiveStake);
194
196
  nominationList.push({
@@ -209,7 +211,7 @@ export async function subscribeParaChainNominatorMetadata(chainInfo, address, su
209
211
  // nomination.validatorMinStake = collatorInfo.lowestTopDelegationAmount.toString();
210
212
  // }));
211
213
 
212
- const stakingStatus = getStakingStatusByNominations(bnTotalActiveStake, nominationList);
214
+ const stakingStatus = getEarningStatusByNominations(bnTotalActiveStake, nominationList);
213
215
  return {
214
216
  chain: chainInfo.slug,
215
217
  type: StakingType.NOMINATED,
@@ -239,7 +241,7 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
239
241
  chain: chainInfo.slug,
240
242
  type: StakingType.NOMINATED,
241
243
  address,
242
- status: StakingStatus.NOT_STAKING,
244
+ status: EarningStatus.NOT_STAKING,
243
245
  activeStake: '0',
244
246
  nominations: [],
245
247
  unstakings: []
@@ -254,7 +256,7 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
254
256
  const delegationScheduledRequests = _delegationScheduledRequests.toPrimitive();
255
257
  const currentRound = roundInfo.current;
256
258
  let hasUnstaking = false;
257
- let delegationStatus = StakingStatus.NOT_EARNING;
259
+ let delegationStatus = EarningStatus.NOT_EARNING;
258
260
 
259
261
  // parse unstaking info
260
262
  if (delegationScheduledRequests) {
@@ -282,7 +284,7 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
282
284
  const bnUnstakeBalance = unstakingMap[delegation.owner] ? new BN(unstakingMap[delegation.owner].claimable) : BN_ZERO;
283
285
  const bnActiveStake = bnStake.sub(bnUnstakeBalance);
284
286
  if (bnActiveStake.gt(BN_ZERO) && bnActiveStake.gte(new BN(minDelegation))) {
285
- delegationStatus = StakingStatus.EARNING_REWARD;
287
+ delegationStatus = EarningStatus.EARNING_REWARD;
286
288
  }
287
289
  bnTotalActiveStake = bnTotalActiveStake.add(bnActiveStake);
288
290
  nominationList.push({
@@ -299,7 +301,7 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
299
301
  const collatorInfo = _collatorInfo.toPrimitive();
300
302
  nomination.validatorMinStake = collatorInfo.lowestTopDelegationAmount.toString();
301
303
  }));
302
- const stakingStatus = getStakingStatusByNominations(bnTotalActiveStake, nominationList);
304
+ const stakingStatus = getEarningStatusByNominations(bnTotalActiveStake, nominationList);
303
305
  return {
304
306
  chain,
305
307
  type: StakingType.NOMINATED,
@@ -1,8 +1,8 @@
1
1
  import { _ChainInfo } from '@subwallet/chain-list/types';
2
2
  import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
3
- import { ChainStakingMetadata, NominationPoolInfo, NominatorMetadata, UnstakingInfo, ValidatorInfo } from '@subwallet/extension-base/background/KoniTypes';
4
- import { PalletNominationPoolsPoolMember } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
3
+ import { ChainStakingMetadata, NominatorMetadata, UnstakingInfo, ValidatorInfo } from '@subwallet/extension-base/background/KoniTypes';
5
4
  import { _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
5
+ import { NominationPoolInfo, PalletNominationPoolsPoolMember } from '@subwallet/extension-base/types';
6
6
  import { Codec } from '@polkadot/types/types';
7
7
  export interface PalletStakingNominations {
8
8
  targets: string[];
@@ -2,11 +2,14 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
5
- import { StakingStatus, StakingTxErrorType, StakingType, UnstakingStatus } from '@subwallet/extension-base/background/KoniTypes';
5
+ import { StakingTxErrorType, StakingType } from '@subwallet/extension-base/background/KoniTypes';
6
6
  import { MAX_NOMINATIONS } from '@subwallet/extension-base/constants';
7
- import { calculateAlephZeroValidatorReturn, calculateChainStakedReturn, calculateInflation, calculateTernoaValidatorReturn, calculateValidatorStakedReturn, getCommission, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage, parseIdentity, parsePoolStashAddress } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
8
- import { _EXPECTED_BLOCK_TIME, _STAKING_CHAIN_GROUP, _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
7
+ import { calculateAlephZeroValidatorReturn, calculateChainStakedReturn, calculateInflation, calculateTernoaValidatorReturn, calculateValidatorStakedReturn, getCommission, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage, parsePoolStashAddress } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
8
+ import { _EXPECTED_BLOCK_TIME, _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
9
9
  import { _getChainSubstrateAddressPrefix } from '@subwallet/extension-base/services/chain-service/utils';
10
+ import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
11
+ import { parseIdentity } from '@subwallet/extension-base/services/earning-service/utils';
12
+ import { EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
10
13
  import { reformatAddress } from '@subwallet/extension-base/utils';
11
14
  import BigN from 'bignumber.js';
12
15
  import { t } from 'i18next';
@@ -58,7 +61,7 @@ export function validateRelayBondingCondition(chainInfo, amount, selectedValidat
58
61
  const bnMinStake = new BN(chainStakingMetadata.minStake);
59
62
  const minStakeErrorMessage = getMinStakeErrorMessage(chainInfo, bnMinStake);
60
63
  const maxValidatorErrorMessage = getMaxValidatorErrorMessage(chainInfo, chainStakingMetadata.maxValidatorPerNominator);
61
- if (!nominatorMetadata || nominatorMetadata.status === StakingStatus.NOT_STAKING) {
64
+ if (!nominatorMetadata || nominatorMetadata.status === EarningStatus.NOT_STAKING) {
62
65
  if (!bnTotalStake.gte(bnMinStake)) {
63
66
  errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
64
67
  }
@@ -117,12 +120,12 @@ export function subscribeRelayChainStakingMetadata(chainInfo, substrateApi, call
117
120
  });
118
121
  }
119
122
  export async function getRelayChainStakingMetadata(chainInfo, substrateApi) {
120
- var _chainApi$api$query$a, _chainApi$api$query, _chainApi$api$query$s, _chainApi$api$query2, _chainApi$api$query2$, _chainApi$api$query3, _chainApi$api$query3$;
123
+ var _chainApi$api$consts$, _chainApi$api$consts$2, _chainApi$api$query$a, _chainApi$api$query, _chainApi$api$query$s, _chainApi$api$query2, _chainApi$api$query2$, _chainApi$api$query3, _chainApi$api$query3$;
121
124
  const chain = chainInfo.slug;
122
125
  const chainApi = await substrateApi.isReady;
123
126
  const _era = await chainApi.api.query.staking.currentEra();
124
127
  const currentEra = _era.toString();
125
- const maxNominations = chainApi.api.consts.staking.maxNominations.toString();
128
+ const maxNominations = ((_chainApi$api$consts$ = chainApi.api.consts.staking) === null || _chainApi$api$consts$ === void 0 ? void 0 : (_chainApi$api$consts$2 = _chainApi$api$consts$.maxNominations) === null || _chainApi$api$consts$2 === void 0 ? void 0 : _chainApi$api$consts$2.toString()) || '16'; // TODO
126
129
  const maxUnlockingChunks = chainApi.api.consts.staking.maxUnlockingChunks.toString();
127
130
  const unlockingEras = chainApi.api.consts.staking.bondingDuration.toString();
128
131
  const [_totalEraStake, _totalIssuance, _auctionCounter, _minimumActiveStake, _minNominatorBond, _minPoolJoin, _eraStakers] = await Promise.all([chainApi.api.query.staking.erasTotalStake(parseInt(currentEra)), chainApi.api.query.balances.totalIssuance(), (_chainApi$api$query$a = chainApi.api.query.auctions) === null || _chainApi$api$query$a === void 0 ? void 0 : _chainApi$api$query$a.auctionCounter(), ((_chainApi$api$query = chainApi.api.query) === null || _chainApi$api$query === void 0 ? void 0 : (_chainApi$api$query$s = _chainApi$api$query.staking) === null || _chainApi$api$query$s === void 0 ? void 0 : _chainApi$api$query$s.minimumActiveStake) && ((_chainApi$api$query2 = chainApi.api.query) === null || _chainApi$api$query2 === void 0 ? void 0 : (_chainApi$api$query2$ = _chainApi$api$query2.staking) === null || _chainApi$api$query2$ === void 0 ? void 0 : _chainApi$api$query2$.minimumActiveStake()), chainApi.api.query.staking.minNominatorBond(), (_chainApi$api$query3 = chainApi.api.query) === null || _chainApi$api$query3 === void 0 ? void 0 : (_chainApi$api$query3$ = _chainApi$api$query3.nominationPools) === null || _chainApi$api$query3$ === void 0 ? void 0 : _chainApi$api$query3$.minJoinBond(), chainApi.api.query.staking.erasStakers.entries(parseInt(currentEra))]);
@@ -193,7 +196,7 @@ export async function subscribeRelayChainNominatorMetadata(chainInfo, address, s
193
196
  if (nominations) {
194
197
  const validatorList = nominations.targets;
195
198
  await Promise.all(validatorList.map(async validatorAddress => {
196
- let nominationStatus = StakingStatus.NOT_EARNING;
199
+ let nominationStatus = EarningStatus.NOT_EARNING;
197
200
  const [[identity], _eraStaker] = await Promise.all([parseIdentity(chainApi, validatorAddress), chainApi.api.query.staking.erasStakers(currentEra, validatorAddress)]);
198
201
  const eraStaker = _eraStaker.toPrimitive();
199
202
  const sortedNominators = eraStaker.others.sort((a, b) => {
@@ -204,10 +207,10 @@ export async function subscribeRelayChainNominatorMetadata(chainInfo, address, s
204
207
  });
205
208
  if (!topNominators.includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
206
209
  // if nominator has target but not in nominator list
207
- nominationStatus = StakingStatus.WAITING;
210
+ nominationStatus = EarningStatus.WAITING;
208
211
  } else if (topNominators.slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator).includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
209
212
  // if address in top nominators
210
- nominationStatus = StakingStatus.EARNING_REWARD;
213
+ nominationStatus = EarningStatus.EARNING_REWARD;
211
214
  }
212
215
  nominationList.push({
213
216
  chain,
@@ -219,20 +222,20 @@ export async function subscribeRelayChainNominatorMetadata(chainInfo, address, s
219
222
  }));
220
223
  }
221
224
 
222
- let stakingStatus = StakingStatus.NOT_EARNING;
225
+ let stakingStatus = EarningStatus.NOT_EARNING;
223
226
  const bnActiveStake = new BN(activeStake);
224
227
  let waitingNominationCount = 0;
225
228
  if (bnActiveStake.gte(minStake)) {
226
229
  for (const nomination of nominationList) {
227
- if (nomination.status === StakingStatus.EARNING_REWARD) {
230
+ if (nomination.status === EarningStatus.EARNING_REWARD) {
228
231
  // only need 1 earning nomination to count
229
- stakingStatus = StakingStatus.EARNING_REWARD;
230
- } else if (nomination.status === StakingStatus.WAITING) {
232
+ stakingStatus = EarningStatus.EARNING_REWARD;
233
+ } else if (nomination.status === EarningStatus.WAITING) {
231
234
  waitingNominationCount += 1;
232
235
  }
233
236
  }
234
237
  if (waitingNominationCount === nominationList.length) {
235
- stakingStatus = StakingStatus.WAITING;
238
+ stakingStatus = EarningStatus.WAITING;
236
239
  }
237
240
  }
238
241
  ledger.unlocking.forEach(unlockingChunk => {
@@ -293,7 +296,7 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
293
296
  return {
294
297
  chain,
295
298
  type: StakingType.NOMINATED,
296
- status: StakingStatus.NOT_STAKING,
299
+ status: EarningStatus.NOT_STAKING,
297
300
  address: address,
298
301
  activeStake: '0',
299
302
  nominations: [],
@@ -306,7 +309,7 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
306
309
  if (nominations) {
307
310
  const validatorList = nominations.targets;
308
311
  await Promise.all(validatorList.map(async validatorAddress => {
309
- let nominationStatus = StakingStatus.NOT_EARNING;
312
+ let nominationStatus = EarningStatus.NOT_EARNING;
310
313
  const [[identity], _eraStaker] = await Promise.all([parseIdentity(chainApi, validatorAddress), chainApi.api.query.staking.erasStakers(currentEra, validatorAddress)]);
311
314
  const eraStaker = _eraStaker.toPrimitive();
312
315
  const sortedNominators = eraStaker.others.sort((a, b) => {
@@ -317,10 +320,10 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
317
320
  });
318
321
  if (!topNominators.includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
319
322
  // if nominator has target but not in nominator list
320
- nominationStatus = StakingStatus.WAITING;
323
+ nominationStatus = EarningStatus.WAITING;
321
324
  } else if (topNominators.slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator).includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
322
325
  // if address in top nominators
323
- nominationStatus = StakingStatus.EARNING_REWARD;
326
+ nominationStatus = EarningStatus.EARNING_REWARD;
324
327
  }
325
328
  nominationList.push({
326
329
  chain,
@@ -332,20 +335,20 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
332
335
  }));
333
336
  }
334
337
 
335
- let stakingStatus = StakingStatus.NOT_EARNING;
338
+ let stakingStatus = EarningStatus.NOT_EARNING;
336
339
  const bnActiveStake = new BN(activeStake);
337
340
  let waitingNominationCount = 0;
338
341
  if (bnActiveStake.gte(minStake)) {
339
342
  for (const nomination of nominationList) {
340
- if (nomination.status === StakingStatus.EARNING_REWARD) {
343
+ if (nomination.status === EarningStatus.EARNING_REWARD) {
341
344
  // only need 1 earning nomination to count
342
- stakingStatus = StakingStatus.EARNING_REWARD;
343
- } else if (nomination.status === StakingStatus.WAITING) {
345
+ stakingStatus = EarningStatus.EARNING_REWARD;
346
+ } else if (nomination.status === EarningStatus.WAITING) {
344
347
  waitingNominationCount += 1;
345
348
  }
346
349
  }
347
350
  if (waitingNominationCount === nominationList.length) {
348
- stakingStatus = StakingStatus.WAITING;
351
+ stakingStatus = EarningStatus.WAITING;
349
352
  }
350
353
  }
351
354
  ledger.unlocking.forEach(unlockingChunk => {
@@ -381,7 +384,7 @@ export async function subscribeRelayChainPoolMemberMetadata(chainInfo, address,
381
384
  const poolMetadata = _poolMetadata.toPrimitive();
382
385
  const currentEra = _currentEra.toString();
383
386
  const nominations = _nominations.toJSON();
384
- let stakingStatus = StakingStatus.NOT_EARNING;
387
+ let stakingStatus = EarningStatus.NOT_EARNING;
385
388
  const getPoolName = () => {
386
389
  if (poolMetadata.isUtf8) {
387
390
  return poolMetadata.toUtf8();
@@ -404,7 +407,7 @@ export async function subscribeRelayChainPoolMemberMetadata(chainInfo, address,
404
407
  }).slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator);
405
408
  if (topNominators.includes(reformatAddress(poolStashAccount, _getChainSubstrateAddressPrefix(chainInfo)))) {
406
409
  // if address in top nominators
407
- stakingStatus = StakingStatus.EARNING_REWARD;
410
+ stakingStatus = EarningStatus.EARNING_REWARD;
408
411
  }
409
412
  }));
410
413
  }
@@ -439,7 +442,7 @@ export async function subscribeRelayChainPoolMemberMetadata(chainInfo, address,
439
442
  });
440
443
  const bnActiveStake = new BN(poolMemberInfo.points.toString());
441
444
  if (!bnActiveStake.gt(BN_ZERO)) {
442
- stakingStatus = StakingStatus.NOT_EARNING;
445
+ stakingStatus = EarningStatus.NOT_EARNING;
443
446
  }
444
447
  return {
445
448
  chain: chainInfo.slug,
@@ -470,14 +473,14 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
470
473
  chain: chainInfo.slug,
471
474
  type: StakingType.POOLED,
472
475
  address,
473
- status: StakingStatus.NOT_STAKING,
476
+ status: EarningStatus.NOT_STAKING,
474
477
  activeStake: '0',
475
478
  nominations: [],
476
479
  // can only join 1 pool at a time
477
480
  unstakings: []
478
481
  };
479
482
  }
480
- let stakingStatus = StakingStatus.NOT_EARNING;
483
+ let stakingStatus = EarningStatus.NOT_EARNING;
481
484
  const _poolMetadata = await chainApi.api.query.nominationPools.metadata(poolMemberInfo.poolId);
482
485
  const poolMetadata = _poolMetadata.toPrimitive();
483
486
  const getPoolName = () => {
@@ -505,7 +508,7 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
505
508
  }).slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator);
506
509
  if (topNominators.includes(reformatAddress(poolStashAccount, _getChainSubstrateAddressPrefix(chainInfo)))) {
507
510
  // if address in top nominators
508
- stakingStatus = StakingStatus.EARNING_REWARD;
511
+ stakingStatus = EarningStatus.EARNING_REWARD;
509
512
  }
510
513
  }));
511
514
  }
@@ -532,7 +535,7 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
532
535
  });
533
536
  const bnActiveStake = new BN(poolMemberInfo.points.toString());
534
537
  if (!bnActiveStake.gt(BN_ZERO)) {
535
- stakingStatus = StakingStatus.NOT_EARNING;
538
+ stakingStatus = EarningStatus.NOT_EARNING;
536
539
  }
537
540
  return {
538
541
  chain: chainInfo.slug,
@@ -1,16 +1,10 @@
1
1
  /// <reference types="bn.js" />
2
2
  import { _ChainInfo } from '@subwallet/chain-list/types';
3
- import { NominationInfo, NominatorMetadata, StakingStatus, StakingType, UnstakingInfo } from '@subwallet/extension-base/background/KoniTypes';
3
+ import { NominationInfo, NominatorMetadata, StakingType, UnstakingInfo } from '@subwallet/extension-base/background/KoniTypes';
4
4
  import { _SubstrateInflationParams } from '@subwallet/extension-base/services/chain-service/constants';
5
- import { _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
5
+ import { EarningStatus, YieldPoolInfo, YieldPositionInfo } from '@subwallet/extension-base/types';
6
6
  import { ApiPromise } from '@polkadot/api';
7
7
  import { BN } from '@polkadot/util';
8
- export interface PalletNominationPoolsPoolMember {
9
- poolId: number;
10
- points: number;
11
- lasRecordedRewardCounter: number;
12
- unbondingEras: Record<string, number>;
13
- }
14
8
  export interface PalletDappsStakingDappInfo {
15
9
  address: string;
16
10
  name: string;
@@ -67,15 +61,6 @@ export interface PalletParachainStakingDelegator {
67
61
  lessTotal: number;
68
62
  status: number;
69
63
  }
70
- export interface PalletStakingExposureItem {
71
- who: string;
72
- value: number;
73
- }
74
- export interface PalletStakingExposure {
75
- total: number;
76
- own: number;
77
- others: PalletStakingExposureItem[];
78
- }
79
64
  export interface PalletIdentityRegistration {
80
65
  judgements: any[];
81
66
  deposit: number;
@@ -97,32 +82,12 @@ export interface PalletIdentityRegistration {
97
82
  export declare type PalletIdentitySuper = [string, {
98
83
  Raw: string;
99
84
  }];
100
- export interface ValidatorExtraInfo {
101
- commission: string;
102
- blocked: false;
103
- identity?: string;
104
- isVerified: boolean;
105
- }
106
85
  export interface Unlocking {
107
86
  remainingEras: BN;
108
87
  value: BN;
109
88
  }
110
- export interface TernoaStakingRewardsStakingRewardsData {
111
- sessionEraPayout: string;
112
- sessionExtraRewardPayout: string;
113
- }
114
89
  export declare function parsePoolStashAddress(api: ApiPromise, index: number, poolId: number, poolsPalletId: string): string;
115
90
  export declare function transformPoolName(input: string): string;
116
- /**
117
- * @returns
118
- * <p>
119
- * [0] - identity
120
- * </p>
121
- * <p>
122
- * [1] - isReasonable (isVerified)
123
- * </p>
124
- * */
125
- export declare function parseIdentity(substrateApi: _SubstrateApi, address: string, children?: string): Promise<[string | undefined, boolean]>;
126
91
  export declare function getInflationParams(networkKey: string): _SubstrateInflationParams;
127
92
  export declare function calcInflationUniformEraPayout(totalIssuance: BN, yearlyInflationInTokens: number): number;
128
93
  export declare function calcInflationRewardCurve(minInflation: number, stakedFraction: number, idealStake: number, idealInterest: number, falloff: number): number;
@@ -160,6 +125,18 @@ export declare function getBondedValidators(nominations: NominationInfo[]): {
160
125
  bondedValidators: string[];
161
126
  };
162
127
  export declare function isUnstakeAll(selectedValidator: string, nominations: NominationInfo[], unstakeAmount: string): boolean;
128
+ export declare enum YieldAction {
129
+ STAKE = "STAKE",
130
+ UNSTAKE = "UNSTAKE",
131
+ WITHDRAW = "WITHDRAW",
132
+ CLAIM_REWARD = "CLAIM_REWARD",
133
+ CANCEL_UNSTAKE = "CANCEL_UNSTAKE",
134
+ START_EARNING = "EARN",
135
+ WITHDRAW_EARNING = "WITHDRAW_EARNING",
136
+ CUSTOM_ACTION = "CUSTOM_ACTION"
137
+ }
138
+ export declare function getYieldAvailableActionsByType(yieldPoolInfo: YieldPoolInfo): YieldAction[];
139
+ export declare function getYieldAvailableActionsByPosition(yieldPosition: YieldPositionInfo, yieldPoolInfo: YieldPoolInfo, unclaimedReward?: string): YieldAction[];
163
140
  export declare enum StakingAction {
164
141
  STAKE = "STAKE",
165
142
  UNSTAKE = "UNSTAKE",
@@ -171,7 +148,7 @@ export declare function getStakingAvailableActionsByChain(chain: string, type: S
171
148
  export declare function getStakingAvailableActionsByNominator(nominatorMetadata: NominatorMetadata, unclaimedReward?: string): StakingAction[];
172
149
  export declare function isActionFromValidator(stakingType: StakingType, chain: string): boolean;
173
150
  export declare function getWithdrawalInfo(nominatorMetadata: NominatorMetadata): UnstakingInfo | undefined;
174
- export declare function getStakingStatusByNominations(bnTotalActiveStake: BN, nominationList: NominationInfo[]): StakingStatus;
151
+ export declare function getEarningStatusByNominations(bnTotalActiveStake: BN, nominationList: NominationInfo[]): EarningStatus;
175
152
  export declare function getValidatorLabel(chain: string): "dApp" | "Validator" | "Collator";
176
153
  export declare const getMinStakeErrorMessage: (chainInfo: _ChainInfo, bnMinStake: BN) => string;
177
154
  export declare const getMaxValidatorErrorMessage: (chainInfo: _ChainInfo, max: number) => string;
@@ -1,14 +1,16 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import { StakingStatus, StakingType, UnstakingStatus } from '@subwallet/extension-base/background/KoniTypes';
4
+ import { StakingType } from '@subwallet/extension-base/background/KoniTypes';
5
5
  import { getAstarWithdrawable } from '@subwallet/extension-base/koni/api/staking/bonding/astar';
6
- import { _KNOWN_CHAIN_INFLATION_PARAMS, _STAKING_CHAIN_GROUP, _SUBSTRATE_DEFAULT_INFLATION_PARAMS } from '@subwallet/extension-base/services/chain-service/constants';
6
+ import { _KNOWN_CHAIN_INFLATION_PARAMS, _SUBSTRATE_DEFAULT_INFLATION_PARAMS } from '@subwallet/extension-base/services/chain-service/constants';
7
7
  import { _getChainNativeTokenBasicInfo } from '@subwallet/extension-base/services/chain-service/utils';
8
- import { detectTranslate, isSameAddress, parseRawNumber, reformatAddress } from '@subwallet/extension-base/utils';
8
+ import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
9
+ import { EarningStatus, UnstakingStatus, YieldPoolType } from '@subwallet/extension-base/types';
10
+ import { detectTranslate, parseRawNumber, reformatAddress } from '@subwallet/extension-base/utils';
9
11
  import { balanceFormatter, formatNumber } from '@subwallet/extension-base/utils/number';
10
12
  import { t } from 'i18next';
11
- import { BN, BN_BILLION, BN_HUNDRED, BN_MILLION, BN_THOUSAND, BN_ZERO, bnToU8a, hexToString, isHex, stringToU8a, u8aConcat } from '@polkadot/util';
13
+ import { BN, BN_BILLION, BN_HUNDRED, BN_MILLION, BN_THOUSAND, BN_ZERO, bnToU8a, stringToU8a, u8aConcat } from '@polkadot/util';
12
14
  export let PalletParachainStakingRequestType;
13
15
  (function (PalletParachainStakingRequestType) {
14
16
  PalletParachainStakingRequestType["REVOKE"] = "revoke";
@@ -27,64 +29,6 @@ export function parsePoolStashAddress(api, index, poolId, poolsPalletId) {
27
29
  export function transformPoolName(input) {
28
30
  return input.replace(/[^\x20-\x7E]/g, '');
29
31
  }
30
-
31
- /**
32
- * @returns
33
- * <p>
34
- * [0] - identity
35
- * </p>
36
- * <p>
37
- * [1] - isReasonable (isVerified)
38
- * </p>
39
- * */
40
- export async function parseIdentity(substrateApi, address, children) {
41
- const compactResult = rs => {
42
- const result = [];
43
- if (rs) {
44
- result.push(rs);
45
- }
46
- if (children) {
47
- result.push(children);
48
- }
49
- if (result.length > 0) {
50
- return result.join('/');
51
- } else {
52
- return undefined;
53
- }
54
- };
55
- if (substrateApi.api.query.identity) {
56
- let identity;
57
- const _parent = await substrateApi.api.query.identity.superOf(address);
58
- const parentInfo = _parent.toHuman();
59
- if (parentInfo) {
60
- const [parentAddress, {
61
- Raw: data
62
- }] = parentInfo;
63
- const child = isHex(data) ? hexToString(data) : data;
64
- if (!isSameAddress(address, parentAddress)) {
65
- const [rs, isReasonable] = await parseIdentity(substrateApi, parentAddress, child);
66
- return [compactResult(rs), isReasonable];
67
- }
68
- }
69
- const _identity = await substrateApi.api.query.identity.identityOf(address);
70
- const identityInfo = _identity.toHuman();
71
- if (identityInfo) {
72
- var _identityInfo$info, _identityInfo$info$di, _identityInfo$info2, _identityInfo$info2$w, _identityInfo$info3, _identityInfo$info3$r, _identityInfo$info4, _identityInfo$info4$t;
73
- const displayName = (_identityInfo$info = identityInfo.info) === null || _identityInfo$info === void 0 ? void 0 : (_identityInfo$info$di = _identityInfo$info.display) === null || _identityInfo$info$di === void 0 ? void 0 : _identityInfo$info$di.Raw;
74
- const web = (_identityInfo$info2 = identityInfo.info) === null || _identityInfo$info2 === void 0 ? void 0 : (_identityInfo$info2$w = _identityInfo$info2.web) === null || _identityInfo$info2$w === void 0 ? void 0 : _identityInfo$info2$w.Raw;
75
- const riot = (_identityInfo$info3 = identityInfo.info) === null || _identityInfo$info3 === void 0 ? void 0 : (_identityInfo$info3$r = _identityInfo$info3.riot) === null || _identityInfo$info3$r === void 0 ? void 0 : _identityInfo$info3$r.Raw;
76
- const twitter = (_identityInfo$info4 = identityInfo.info) === null || _identityInfo$info4 === void 0 ? void 0 : (_identityInfo$info4$t = _identityInfo$info4.twitter) === null || _identityInfo$info4$t === void 0 ? void 0 : _identityInfo$info4$t.Raw;
77
- const isReasonable = identityInfo.judgements.length > 0;
78
- if (displayName) {
79
- identity = isHex(displayName) ? hexToString(displayName) : displayName;
80
- } else {
81
- identity = twitter || web || riot;
82
- }
83
- return [compactResult(identity), isReasonable];
84
- }
85
- }
86
- return [undefined, false];
87
- }
88
32
  export function getInflationParams(networkKey) {
89
33
  return _KNOWN_CHAIN_INFLATION_PARAMS[networkKey] || _SUBSTRATE_DEFAULT_INFLATION_PARAMS;
90
34
  }
@@ -198,6 +142,78 @@ export function isUnstakeAll(selectedValidator, nominations, unstakeAmount) {
198
142
  }
199
143
  return isUnstakeAll;
200
144
  }
145
+ export let YieldAction;
146
+ (function (YieldAction) {
147
+ YieldAction["STAKE"] = "STAKE";
148
+ YieldAction["UNSTAKE"] = "UNSTAKE";
149
+ YieldAction["WITHDRAW"] = "WITHDRAW";
150
+ YieldAction["CLAIM_REWARD"] = "CLAIM_REWARD";
151
+ YieldAction["CANCEL_UNSTAKE"] = "CANCEL_UNSTAKE";
152
+ YieldAction["START_EARNING"] = "EARN";
153
+ YieldAction["WITHDRAW_EARNING"] = "WITHDRAW_EARNING";
154
+ YieldAction["CUSTOM_ACTION"] = "CUSTOM_ACTION";
155
+ })(YieldAction || (YieldAction = {}));
156
+ export function getYieldAvailableActionsByType(yieldPoolInfo) {
157
+ if ([YieldPoolType.NATIVE_STAKING, YieldPoolType.NOMINATION_POOL].includes(yieldPoolInfo.type)) {
158
+ if (yieldPoolInfo.type === YieldPoolType.NOMINATION_POOL) {
159
+ return [YieldAction.STAKE, YieldAction.CLAIM_REWARD, YieldAction.UNSTAKE, YieldAction.WITHDRAW];
160
+ }
161
+ const chain = yieldPoolInfo.chain;
162
+ if (_STAKING_CHAIN_GROUP.para.includes(chain)) {
163
+ return [YieldAction.STAKE, YieldAction.UNSTAKE, YieldAction.WITHDRAW, YieldAction.CANCEL_UNSTAKE];
164
+ } else if (_STAKING_CHAIN_GROUP.astar.includes(chain)) {
165
+ return [YieldAction.STAKE, YieldAction.CLAIM_REWARD, YieldAction.UNSTAKE, YieldAction.WITHDRAW];
166
+ } else if (_STAKING_CHAIN_GROUP.amplitude.includes(chain)) {
167
+ return [YieldAction.STAKE, YieldAction.UNSTAKE, YieldAction.WITHDRAW];
168
+ }
169
+ }
170
+ if (yieldPoolInfo.type === YieldPoolType.LENDING) {
171
+ return [YieldAction.START_EARNING, YieldAction.WITHDRAW_EARNING];
172
+ } else if (yieldPoolInfo.type === YieldPoolType.LIQUID_STAKING) {
173
+ return [YieldAction.START_EARNING, YieldAction.UNSTAKE, YieldAction.WITHDRAW];
174
+ }
175
+ return [YieldAction.STAKE, YieldAction.UNSTAKE, YieldAction.WITHDRAW, YieldAction.CANCEL_UNSTAKE];
176
+ }
177
+ export function getYieldAvailableActionsByPosition(yieldPosition, yieldPoolInfo, unclaimedReward) {
178
+ const result = [];
179
+ if ([YieldPoolType.NATIVE_STAKING, YieldPoolType.NOMINATION_POOL].includes(yieldPoolInfo.type)) {
180
+ result.push(YieldAction.STAKE);
181
+ const bnActiveStake = new BN(yieldPosition.activeStake);
182
+ if (yieldPosition.activeStake && bnActiveStake.gt(BN_ZERO)) {
183
+ result.push(YieldAction.UNSTAKE);
184
+ const isAstarNetwork = _STAKING_CHAIN_GROUP.astar.includes(yieldPosition.chain);
185
+ const isAmplitudeNetwork = _STAKING_CHAIN_GROUP.amplitude.includes(yieldPosition.chain);
186
+ const bnUnclaimedReward = new BN(unclaimedReward || '0');
187
+ if ((yieldPosition.type === YieldPoolType.NOMINATION_POOL || isAmplitudeNetwork) && bnUnclaimedReward.gt(BN_ZERO) || isAstarNetwork) {
188
+ result.push(YieldAction.CLAIM_REWARD);
189
+ }
190
+ }
191
+ if (yieldPosition.unstakings.length > 0) {
192
+ result.push(YieldAction.CANCEL_UNSTAKE);
193
+ const hasClaimable = yieldPosition.unstakings.some(unstaking => unstaking.status === UnstakingStatus.CLAIMABLE);
194
+ if (hasClaimable) {
195
+ result.push(YieldAction.WITHDRAW);
196
+ }
197
+ }
198
+ } else if (yieldPoolInfo.type === YieldPoolType.LIQUID_STAKING) {
199
+ result.push(YieldAction.START_EARNING);
200
+ const activeBalance = new BN(yieldPosition.activeStake || '0');
201
+ if (activeBalance.gt(BN_ZERO)) {
202
+ result.push(YieldAction.UNSTAKE);
203
+ }
204
+ const hasWithdrawal = yieldPosition.unstakings.some(unstakingInfo => unstakingInfo.status === UnstakingStatus.CLAIMABLE);
205
+ if (hasWithdrawal) {
206
+ result.push(YieldAction.WITHDRAW);
207
+ }
208
+
209
+ // TODO: check has unstakings to withdraw
210
+ } else {
211
+ result.push(YieldAction.START_EARNING);
212
+ result.push(YieldAction.WITHDRAW_EARNING); // TODO
213
+ }
214
+
215
+ return result;
216
+ }
201
217
  export let StakingAction;
202
218
  (function (StakingAction) {
203
219
  StakingAction["STAKE"] = "STAKE";
@@ -241,7 +257,7 @@ export function getStakingAvailableActionsByNominator(nominatorMetadata, unclaim
241
257
  return result;
242
258
  }
243
259
  export function isActionFromValidator(stakingType, chain) {
244
- if (stakingType === StakingType.POOLED) {
260
+ if (stakingType === StakingType.POOLED || stakingType === StakingType.LIQUID_STAKING) {
245
261
  return false;
246
262
  }
247
263
  if (_STAKING_CHAIN_GROUP.astar.includes(chain)) {
@@ -267,21 +283,21 @@ export function getWithdrawalInfo(nominatorMetadata) {
267
283
  }
268
284
  return result;
269
285
  }
270
- export function getStakingStatusByNominations(bnTotalActiveStake, nominationList) {
271
- let stakingStatus = StakingStatus.EARNING_REWARD;
286
+ export function getEarningStatusByNominations(bnTotalActiveStake, nominationList) {
287
+ let stakingStatus = EarningStatus.EARNING_REWARD;
272
288
  if (bnTotalActiveStake.isZero()) {
273
- stakingStatus = StakingStatus.NOT_EARNING;
289
+ stakingStatus = EarningStatus.NOT_EARNING;
274
290
  } else {
275
291
  let invalidDelegationCount = 0;
276
292
  for (const nomination of nominationList) {
277
- if (nomination.status === StakingStatus.NOT_EARNING) {
293
+ if (nomination.status === EarningStatus.NOT_EARNING) {
278
294
  invalidDelegationCount += 1;
279
295
  }
280
296
  }
281
297
  if (invalidDelegationCount > 0 && invalidDelegationCount < nominationList.length) {
282
- stakingStatus = StakingStatus.PARTIALLY_EARNING;
298
+ stakingStatus = EarningStatus.PARTIALLY_EARNING;
283
299
  } else if (invalidDelegationCount === nominationList.length) {
284
- stakingStatus = StakingStatus.NOT_EARNING;
300
+ stakingStatus = EarningStatus.NOT_EARNING;
285
301
  }
286
302
  }
287
303
  return stakingStatus;
@@ -4,8 +4,9 @@
4
4
  import { getAmplitudeStakingOnChain, getAstarStakingOnChain, getParaStakingOnChain } from '@subwallet/extension-base/koni/api/staking/paraChain';
5
5
  import { getNominationPoolReward, getRelayPoolingOnChain, getRelayStakingOnChain } from '@subwallet/extension-base/koni/api/staking/relayChain';
6
6
  import { getAllSubsquidStaking } from '@subwallet/extension-base/koni/api/staking/subsquidStaking';
7
- import { _PURE_EVM_CHAINS, _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/chain-service/constants';
7
+ import { _PURE_EVM_CHAINS } from '@subwallet/extension-base/services/chain-service/constants';
8
8
  import { _isChainEvmCompatible, _isChainSupportSubstrateStaking, _isSubstrateRelayChain } from '@subwallet/extension-base/services/chain-service/utils';
9
+ import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
9
10
  import { categoryAddresses } from '@subwallet/extension-base/utils';
10
11
  export function stakingOnChainApi(addresses, substrateApiMap, chainInfoMap, stakingCallback, nominatorStateCallback) {
11
12
  const filteredApiMap = [];