@subwallet/extension-base 1.1.33-beta.1 → 1.1.34-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 (316) hide show
  1. package/background/KoniTypes.d.ts +69 -120
  2. package/background/KoniTypes.js +13 -22
  3. package/background/errors/TransactionError.js +0 -9
  4. package/cjs/background/KoniTypes.js +16 -23
  5. package/cjs/background/errors/TransactionError.js +0 -9
  6. package/cjs/constants/index.js +4 -19
  7. package/cjs/koni/api/nft/config.js +23 -33
  8. package/cjs/koni/api/nft/index.js +0 -14
  9. package/cjs/koni/api/nft/nft.js +22 -1
  10. package/cjs/koni/api/staking/bonding/amplitude.js +16 -19
  11. package/cjs/koni/api/staking/bonding/astar.js +10 -11
  12. package/cjs/koni/api/staking/bonding/index.js +1 -4
  13. package/cjs/koni/api/staking/bonding/paraChain.js +23 -25
  14. package/cjs/koni/api/staking/bonding/relayChain.js +45 -48
  15. package/cjs/koni/api/staking/bonding/utils.js +86 -104
  16. package/cjs/koni/api/staking/index.js +5 -6
  17. package/cjs/koni/api/staking/paraChain.js +17 -10
  18. package/cjs/koni/api/staking/relayChain.js +2 -3
  19. package/cjs/koni/background/cron.js +21 -3
  20. package/cjs/koni/background/handlers/Extension.js +69 -368
  21. package/cjs/koni/background/handlers/State.js +12 -18
  22. package/cjs/koni/background/handlers/index.js +2 -4
  23. package/cjs/koni/background/subscription.js +104 -7
  24. package/cjs/packageInfo.js +1 -1
  25. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +1 -3
  26. package/cjs/services/campaign-service/index.js +6 -9
  27. package/cjs/services/chain-service/constants.js +17 -2
  28. package/cjs/services/chain-service/index.js +3 -25
  29. package/cjs/services/chain-service/utils.js +1 -7
  30. package/cjs/services/event-service/index.js +0 -5
  31. package/cjs/services/keyring-service/index.js +2 -14
  32. package/cjs/services/migration-service/scripts/MigrateLedgerAccount.js +1 -1
  33. package/cjs/services/migration-service/scripts/MigrateTransactionHistory.js +1 -1
  34. package/cjs/services/migration-service/scripts/index.js +1 -6
  35. package/cjs/services/notification-service/NotificationService.js +1 -1
  36. package/cjs/services/storage-service/DatabaseService.js +1 -92
  37. package/cjs/services/storage-service/databases/index.js +0 -7
  38. package/cjs/services/storage-service/db-stores/NominatorMetadata.js +3 -3
  39. package/cjs/services/subscan-service/index.js +0 -16
  40. package/cjs/services/transaction-service/event-parser/index.js +0 -58
  41. package/cjs/services/transaction-service/helpers/index.js +1 -3
  42. package/cjs/services/transaction-service/index.js +75 -252
  43. package/cjs/services/transaction-service/utils.js +0 -1
  44. package/cjs/types/index.js +0 -44
  45. package/cjs/utils/fetchStaticData.js +1 -2
  46. package/cjs/utils/index.js +1 -89
  47. package/cjs/utils/number.js +2 -6
  48. package/constants/index.d.ts +1 -6
  49. package/constants/index.js +1 -6
  50. package/koni/api/nft/config.js +23 -33
  51. package/koni/api/nft/index.js +1 -15
  52. package/koni/api/nft/nft.js +23 -2
  53. package/koni/api/staking/bonding/amplitude.js +10 -13
  54. package/koni/api/staking/bonding/astar.js +8 -9
  55. package/koni/api/staking/bonding/index.d.ts +1 -1
  56. package/koni/api/staking/bonding/index.js +1 -5
  57. package/koni/api/staking/bonding/paraChain.js +10 -12
  58. package/koni/api/staking/bonding/relayChain.d.ts +2 -2
  59. package/koni/api/staking/bonding/relayChain.js +30 -33
  60. package/koni/api/staking/bonding/utils.d.ts +38 -15
  61. package/koni/api/staking/bonding/utils.js +69 -85
  62. package/koni/api/staking/index.js +1 -2
  63. package/koni/api/staking/paraChain.js +18 -11
  64. package/koni/api/staking/relayChain.js +3 -4
  65. package/koni/background/cron.d.ts +4 -0
  66. package/koni/background/cron.js +22 -4
  67. package/koni/background/handlers/Extension.d.ts +1 -17
  68. package/koni/background/handlers/Extension.js +30 -327
  69. package/koni/background/handlers/State.d.ts +1 -6
  70. package/koni/background/handlers/State.js +12 -17
  71. package/koni/background/handlers/index.js +2 -4
  72. package/koni/background/subscription.d.ts +6 -1
  73. package/koni/background/subscription.js +104 -8
  74. package/package.json +8 -331
  75. package/packageInfo.js +1 -1
  76. package/services/balance-service/helpers/subscribe/substrate/index.js +2 -4
  77. package/services/campaign-service/index.js +6 -9
  78. package/services/chain-service/constants.d.ts +13 -1
  79. package/services/chain-service/constants.js +15 -1
  80. package/services/chain-service/index.d.ts +0 -2
  81. package/services/chain-service/index.js +3 -25
  82. package/services/chain-service/utils.d.ts +0 -1
  83. package/services/chain-service/utils.js +1 -5
  84. package/services/event-service/index.d.ts +0 -2
  85. package/services/event-service/index.js +0 -5
  86. package/services/event-service/types.d.ts +0 -9
  87. package/services/keyring-service/index.d.ts +1 -2
  88. package/services/keyring-service/index.js +2 -14
  89. package/services/migration-service/scripts/MigrateLedgerAccount.js +1 -1
  90. package/services/migration-service/scripts/MigrateTransactionHistory.js +1 -1
  91. package/services/migration-service/scripts/index.js +1 -6
  92. package/services/notification-service/NotificationService.js +1 -1
  93. package/services/storage-service/DatabaseService.d.ts +3 -30
  94. package/services/storage-service/DatabaseService.js +1 -91
  95. package/services/storage-service/databases/index.d.ts +2 -8
  96. package/services/storage-service/databases/index.js +0 -7
  97. package/services/storage-service/db-stores/NominatorMetadata.js +3 -3
  98. package/services/subscan-service/index.d.ts +2 -3
  99. package/services/subscan-service/index.js +0 -15
  100. package/services/subscan-service/types.d.ts +0 -20
  101. package/services/transaction-service/event-parser/index.d.ts +1 -3
  102. package/services/transaction-service/event-parser/index.js +1 -57
  103. package/services/transaction-service/helpers/index.js +1 -3
  104. package/services/transaction-service/index.d.ts +13 -6
  105. package/services/transaction-service/index.js +73 -250
  106. package/services/transaction-service/types.d.ts +0 -2
  107. package/services/transaction-service/utils.js +0 -1
  108. package/types/index.d.ts +0 -5
  109. package/types/index.js +1 -5
  110. package/utils/fetchStaticData.js +1 -2
  111. package/utils/index.d.ts +0 -5
  112. package/utils/index.js +0 -52
  113. package/utils/number.d.ts +1 -2
  114. package/utils/number.js +1 -2
  115. package/cjs/koni/api/dotsama/balance.js +0 -464
  116. package/cjs/koni/api/nft/ordinal_nft/constants.js +0 -21
  117. package/cjs/koni/api/nft/ordinal_nft/index.js +0 -121
  118. package/cjs/koni/api/nft/ordinal_nft/utils.js +0 -41
  119. package/cjs/koni/api/yield/helper/utils.js +0 -49
  120. package/cjs/services/earning-service/constants/chains.js +0 -30
  121. package/cjs/services/earning-service/constants/index.js +0 -27
  122. package/cjs/services/earning-service/constants/step.js +0 -18
  123. package/cjs/services/earning-service/handlers/base.js +0 -262
  124. package/cjs/services/earning-service/handlers/index.js +0 -60
  125. package/cjs/services/earning-service/handlers/lending/base.js +0 -81
  126. package/cjs/services/earning-service/handlers/lending/index.js +0 -13
  127. package/cjs/services/earning-service/handlers/lending/interlay.js +0 -192
  128. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +0 -240
  129. package/cjs/services/earning-service/handlers/liquid-staking/base.js +0 -98
  130. package/cjs/services/earning-service/handlers/liquid-staking/bifrost-manta.js +0 -140
  131. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +0 -299
  132. package/cjs/services/earning-service/handlers/liquid-staking/index.js +0 -41
  133. package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +0 -227
  134. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +0 -404
  135. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +0 -434
  136. package/cjs/services/earning-service/handlers/native-staking/astar.js +0 -466
  137. package/cjs/services/earning-service/handlers/native-staking/base-para.js +0 -146
  138. package/cjs/services/earning-service/handlers/native-staking/base.js +0 -161
  139. package/cjs/services/earning-service/handlers/native-staking/index.js +0 -34
  140. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +0 -390
  141. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +0 -567
  142. package/cjs/services/earning-service/handlers/nomination-pool/index.js +0 -566
  143. package/cjs/services/earning-service/handlers/special.js +0 -497
  144. package/cjs/services/earning-service/service.js +0 -741
  145. package/cjs/services/earning-service/utils/index.js +0 -128
  146. package/cjs/services/migration-service/scripts/DeleteEarningData.js +0 -21
  147. package/cjs/services/migration-service/scripts/EnableEarningChains.js +0 -21
  148. package/cjs/services/migration-service/scripts/MigrateEthProvider.js +0 -17
  149. package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +0 -17
  150. package/cjs/services/migration-service/scripts/MigrateProvider.js +0 -29
  151. package/cjs/services/migration-service/scripts/databases/MigrateEarningHistory.js +0 -21
  152. package/cjs/services/migration-service/scripts/databases/MigrateEarningVersion.js +0 -21
  153. package/cjs/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +0 -149
  154. package/cjs/services/mint-campaign-service/campaigns/index.js +0 -13
  155. package/cjs/services/mint-campaign-service/constants.js +0 -11
  156. package/cjs/services/mint-campaign-service/index.js +0 -18
  157. package/cjs/services/storage-service/db-stores/AssetRef.js +0 -24
  158. package/cjs/services/storage-service/db-stores/YieldPoolStore.js +0 -36
  159. package/cjs/services/storage-service/db-stores/YieldPositionStore.js +0 -71
  160. package/cjs/services/storage-service/index.js +0 -241
  161. package/cjs/types/campaigns/index.js +0 -16
  162. package/cjs/types/campaigns/unlock-dot.js +0 -1
  163. package/cjs/types/ordinal.js +0 -1
  164. package/cjs/types/transaction.js +0 -1
  165. package/cjs/types/yield/actions/index.js +0 -27
  166. package/cjs/types/yield/actions/join/index.js +0 -38
  167. package/cjs/types/yield/actions/join/step.js +0 -48
  168. package/cjs/types/yield/actions/join/submit.js +0 -1
  169. package/cjs/types/yield/actions/join/validate.js +0 -16
  170. package/cjs/types/yield/actions/others.js +0 -1
  171. package/cjs/types/yield/index.js +0 -27
  172. package/cjs/types/yield/info/account/index.js +0 -49
  173. package/cjs/types/yield/info/account/info.js +0 -1
  174. package/cjs/types/yield/info/account/reward.js +0 -1
  175. package/cjs/types/yield/info/account/target.js +0 -32
  176. package/cjs/types/yield/info/account/unstake.js +0 -27
  177. package/cjs/types/yield/info/base.js +0 -41
  178. package/cjs/types/yield/info/chain/index.js +0 -27
  179. package/cjs/types/yield/info/chain/info.js +0 -1
  180. package/cjs/types/yield/info/chain/target.js +0 -1
  181. package/cjs/types/yield/info/index.js +0 -49
  182. package/cjs/types/yield/info/pallet.js +0 -15
  183. package/cjs/types.js +0 -1
  184. package/cjs/utils/address.js +0 -34
  185. package/cjs/utils/keyring.js +0 -57
  186. package/cjs/utils/object.js +0 -12
  187. package/koni/api/nft/ordinal_nft/constants.d.ts +0 -9
  188. package/koni/api/nft/ordinal_nft/constants.js +0 -12
  189. package/koni/api/nft/ordinal_nft/index.d.ts +0 -8
  190. package/koni/api/nft/ordinal_nft/index.js +0 -114
  191. package/koni/api/nft/ordinal_nft/utils.d.ts +0 -2
  192. package/koni/api/nft/ordinal_nft/utils.js +0 -33
  193. package/koni/api/yield/helper/utils.d.ts +0 -10
  194. package/koni/api/yield/helper/utils.js +0 -34
  195. package/services/earning-service/constants/abis/compound_finance_v2_abi.json +0 -1235
  196. package/services/earning-service/constants/abis/st_liquid_token_abi.json +0 -1355
  197. package/services/earning-service/constants/chains.d.ts +0 -15
  198. package/services/earning-service/constants/chains.js +0 -22
  199. package/services/earning-service/constants/index.d.ts +0 -2
  200. package/services/earning-service/constants/index.js +0 -5
  201. package/services/earning-service/constants/step.d.ts +0 -3
  202. package/services/earning-service/constants/step.js +0 -10
  203. package/services/earning-service/handlers/base.d.ts +0 -113
  204. package/services/earning-service/handlers/base.js +0 -256
  205. package/services/earning-service/handlers/index.d.ts +0 -5
  206. package/services/earning-service/handlers/index.js +0 -8
  207. package/services/earning-service/handlers/lending/base.d.ts +0 -8
  208. package/services/earning-service/handlers/lending/base.js +0 -73
  209. package/services/earning-service/handlers/lending/index.d.ts +0 -1
  210. package/services/earning-service/handlers/lending/index.js +0 -4
  211. package/services/earning-service/handlers/lending/interlay.d.ts +0 -24
  212. package/services/earning-service/handlers/lending/interlay.js +0 -184
  213. package/services/earning-service/handlers/liquid-staking/acala.d.ts +0 -27
  214. package/services/earning-service/handlers/liquid-staking/acala.js +0 -232
  215. package/services/earning-service/handlers/liquid-staking/base.d.ts +0 -11
  216. package/services/earning-service/handlers/liquid-staking/base.js +0 -90
  217. package/services/earning-service/handlers/liquid-staking/bifrost-manta.d.ts +0 -37
  218. package/services/earning-service/handlers/liquid-staking/bifrost-manta.js +0 -132
  219. package/services/earning-service/handlers/liquid-staking/bifrost.d.ts +0 -46
  220. package/services/earning-service/handlers/liquid-staking/bifrost.js +0 -288
  221. package/services/earning-service/handlers/liquid-staking/index.d.ts +0 -5
  222. package/services/earning-service/handlers/liquid-staking/index.js +0 -8
  223. package/services/earning-service/handlers/liquid-staking/parallel.d.ts +0 -26
  224. package/services/earning-service/handlers/liquid-staking/parallel.js +0 -219
  225. package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +0 -34
  226. package/services/earning-service/handlers/liquid-staking/stella-swap.js +0 -394
  227. package/services/earning-service/handlers/native-staking/amplitude.d.ts +0 -22
  228. package/services/earning-service/handlers/native-staking/amplitude.js +0 -425
  229. package/services/earning-service/handlers/native-staking/astar.d.ts +0 -19
  230. package/services/earning-service/handlers/native-staking/astar.js +0 -456
  231. package/services/earning-service/handlers/native-staking/base-para.d.ts +0 -11
  232. package/services/earning-service/handlers/native-staking/base-para.js +0 -138
  233. package/services/earning-service/handlers/native-staking/base.d.ts +0 -21
  234. package/services/earning-service/handlers/native-staking/base.js +0 -152
  235. package/services/earning-service/handlers/native-staking/index.d.ts +0 -4
  236. package/services/earning-service/handlers/native-staking/index.js +0 -7
  237. package/services/earning-service/handlers/native-staking/para-chain.d.ts +0 -15
  238. package/services/earning-service/handlers/native-staking/para-chain.js +0 -382
  239. package/services/earning-service/handlers/native-staking/relay-chain.d.ts +0 -21
  240. package/services/earning-service/handlers/native-staking/relay-chain.js +0 -558
  241. package/services/earning-service/handlers/nomination-pool/index.d.ts +0 -36
  242. package/services/earning-service/handlers/nomination-pool/index.js +0 -556
  243. package/services/earning-service/handlers/special.d.ts +0 -64
  244. package/services/earning-service/handlers/special.js +0 -489
  245. package/services/earning-service/service.d.ts +0 -94
  246. package/services/earning-service/service.js +0 -730
  247. package/services/earning-service/utils/index.d.ts +0 -18
  248. package/services/earning-service/utils/index.js +0 -112
  249. package/services/migration-service/scripts/DeleteEarningData.d.ts +0 -4
  250. package/services/migration-service/scripts/DeleteEarningData.js +0 -13
  251. package/services/migration-service/scripts/EnableEarningChains.d.ts +0 -4
  252. package/services/migration-service/scripts/EnableEarningChains.js +0 -13
  253. package/services/migration-service/scripts/databases/MigrateEarningHistory.d.ts +0 -4
  254. package/services/migration-service/scripts/databases/MigrateEarningHistory.js +0 -13
  255. package/services/migration-service/scripts/databases/MigrateEarningVersion.d.ts +0 -4
  256. package/services/migration-service/scripts/databases/MigrateEarningVersion.js +0 -13
  257. package/services/mint-campaign-service/campaigns/UnlockDotCampaign.d.ts +0 -13
  258. package/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +0 -139
  259. package/services/mint-campaign-service/campaigns/index.d.ts +0 -1
  260. package/services/mint-campaign-service/campaigns/index.js +0 -4
  261. package/services/mint-campaign-service/constants.d.ts +0 -1
  262. package/services/mint-campaign-service/constants.js +0 -4
  263. package/services/mint-campaign-service/index.d.ts +0 -7
  264. package/services/mint-campaign-service/index.js +0 -11
  265. package/services/storage-service/db-stores/AssetRef.d.ts +0 -7
  266. package/services/storage-service/db-stores/AssetRef.js +0 -16
  267. package/services/storage-service/db-stores/YieldPoolStore.d.ts +0 -10
  268. package/services/storage-service/db-stores/YieldPoolStore.js +0 -28
  269. package/services/storage-service/db-stores/YieldPositionStore.d.ts +0 -11
  270. package/services/storage-service/db-stores/YieldPositionStore.js +0 -63
  271. package/types/campaigns/index.d.ts +0 -1
  272. package/types/campaigns/index.js +0 -4
  273. package/types/campaigns/unlock-dot.d.ts +0 -71
  274. package/types/campaigns/unlock-dot.js +0 -1
  275. package/types/ordinal.d.ts +0 -69
  276. package/types/ordinal.js +0 -1
  277. package/types/transaction.d.ts +0 -3
  278. package/types/transaction.js +0 -1
  279. package/types/yield/actions/index.d.ts +0 -2
  280. package/types/yield/actions/index.js +0 -5
  281. package/types/yield/actions/join/index.d.ts +0 -3
  282. package/types/yield/actions/join/index.js +0 -6
  283. package/types/yield/actions/join/step.d.ts +0 -96
  284. package/types/yield/actions/join/step.js +0 -47
  285. package/types/yield/actions/join/submit.d.ts +0 -58
  286. package/types/yield/actions/join/submit.js +0 -1
  287. package/types/yield/actions/join/validate.d.ts +0 -18
  288. package/types/yield/actions/join/validate.js +0 -10
  289. package/types/yield/actions/others.d.ts +0 -85
  290. package/types/yield/actions/others.js +0 -1
  291. package/types/yield/index.d.ts +0 -2
  292. package/types/yield/index.js +0 -5
  293. package/types/yield/info/account/index.d.ts +0 -4
  294. package/types/yield/info/account/index.js +0 -7
  295. package/types/yield/info/account/info.d.ts +0 -92
  296. package/types/yield/info/account/info.js +0 -1
  297. package/types/yield/info/account/reward.d.ts +0 -47
  298. package/types/yield/info/account/reward.js +0 -1
  299. package/types/yield/info/account/target.d.ts +0 -43
  300. package/types/yield/info/account/target.js +0 -27
  301. package/types/yield/info/account/unstake.d.ts +0 -31
  302. package/types/yield/info/account/unstake.js +0 -22
  303. package/types/yield/info/base.d.ts +0 -45
  304. package/types/yield/info/base.js +0 -36
  305. package/types/yield/info/chain/index.d.ts +0 -2
  306. package/types/yield/info/chain/index.js +0 -5
  307. package/types/yield/info/chain/info.d.ts +0 -252
  308. package/types/yield/info/chain/info.js +0 -1
  309. package/types/yield/info/chain/target.d.ts +0 -37
  310. package/types/yield/info/chain/target.js +0 -1
  311. package/types/yield/info/index.d.ts +0 -4
  312. package/types/yield/info/index.js +0 -7
  313. package/types/yield/info/pallet.d.ts +0 -143
  314. package/types/yield/info/pallet.js +0 -9
  315. package/utils/object.d.ts +0 -1
  316. package/utils/object.js +0 -6
@@ -1,558 +0,0 @@
1
- // Copyright 2019-2022 @subwallet/extension-base
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
5
- import { BasicTxErrorType, ExtrinsicType, StakingTxErrorType } from '@subwallet/extension-base/background/KoniTypes';
6
- import { calculateAlephZeroValidatorReturn, calculateChainStakedReturn, calculateInflation, calculateTernoaValidatorReturn, calculateValidatorStakedReturn, getCommission, getMaxValidatorErrorMessage, getMinStakeErrorMessage } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
7
- import { _EXPECTED_BLOCK_TIME, _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
8
- import { _getChainSubstrateAddressPrefix } from '@subwallet/extension-base/services/chain-service/utils';
9
- import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
10
- import { parseIdentity } from '@subwallet/extension-base/services/earning-service/utils';
11
- import { EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
12
- import { balanceFormatter, formatNumber, reformatAddress } from '@subwallet/extension-base/utils';
13
- import BigN from 'bignumber.js';
14
- import { t } from 'i18next';
15
- import { BN, BN_ZERO } from '@polkadot/util';
16
- import BaseNativeStakingPoolHandler from "./base.js";
17
- export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPoolHandler {
18
- /* Subscribe pool info */
19
-
20
- async subscribePoolInfo(callback) {
21
- var _substrateApi$api$que;
22
- let cancel = false;
23
- const substrateApi = this.substrateApi;
24
- const chainInfo = this.chainInfo;
25
- const nativeToken = this.nativeToken;
26
- const defaultCallback = async () => {
27
- const data = {
28
- ...this.baseInfo,
29
- type: this.type,
30
- metadata: {
31
- ...this.metadataInfo,
32
- description: this.getDescription()
33
- }
34
- };
35
- const poolInfo = await this.getPoolInfo();
36
- !poolInfo && callback(data);
37
- };
38
- if (!this.isActive) {
39
- await defaultCallback();
40
- return () => {
41
- cancel = true;
42
- };
43
- }
44
- await defaultCallback();
45
- await substrateApi.isReady;
46
- const unsub = await ((_substrateApi$api$que = substrateApi.api.query.staking) === null || _substrateApi$api$que === void 0 ? void 0 : _substrateApi$api$que.currentEra(async _currentEra => {
47
- var _substrateApi$api$con, _substrateApi$api$con2, _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4, _substrateApi$api$que5, _substrateApi$api$que6;
48
- if (cancel) {
49
- unsub();
50
- return;
51
- }
52
- const currentEra = _currentEra.toString();
53
- const maxNominations = ((_substrateApi$api$con = substrateApi.api.consts.staking) === null || _substrateApi$api$con === void 0 ? void 0 : (_substrateApi$api$con2 = _substrateApi$api$con.maxNominations) === null || _substrateApi$api$con2 === void 0 ? void 0 : _substrateApi$api$con2.toString()) || '16'; // TODO
54
- const maxUnlockingChunks = substrateApi.api.consts.staking.maxUnlockingChunks.toString();
55
- const unlockingEras = substrateApi.api.consts.staking.bondingDuration.toString();
56
- const [_totalEraStake, _totalIssuance, _auctionCounter, _minNominatorBond, _counterForNominators, _minimumActiveStake] = await Promise.all([substrateApi.api.query.staking.erasTotalStake(parseInt(currentEra)), substrateApi.api.query.balances.totalIssuance(), (_substrateApi$api$que2 = substrateApi.api.query.auctions) === null || _substrateApi$api$que2 === void 0 ? void 0 : _substrateApi$api$que2.auctionCounter(), substrateApi.api.query.staking.minNominatorBond(), substrateApi.api.query.staking.counterForNominators(), ((_substrateApi$api$que3 = substrateApi.api.query) === null || _substrateApi$api$que3 === void 0 ? void 0 : (_substrateApi$api$que4 = _substrateApi$api$que3.staking) === null || _substrateApi$api$que4 === void 0 ? void 0 : _substrateApi$api$que4.minimumActiveStake) && ((_substrateApi$api$que5 = substrateApi.api.query) === null || _substrateApi$api$que5 === void 0 ? void 0 : (_substrateApi$api$que6 = _substrateApi$api$que5.staking) === null || _substrateApi$api$que6 === void 0 ? void 0 : _substrateApi$api$que6.minimumActiveStake())]);
57
- const minActiveStake = (_minimumActiveStake === null || _minimumActiveStake === void 0 ? void 0 : _minimumActiveStake.toString()) || '0';
58
- const minNominatorBond = _minNominatorBond.toString();
59
- const bnMinActiveStake = new BN(minActiveStake);
60
- const bnMinNominatorBond = new BN(minNominatorBond);
61
- const minStake = bnMinActiveStake.gt(bnMinNominatorBond) ? bnMinActiveStake : bnMinNominatorBond;
62
- const rawTotalEraStake = _totalEraStake.toString();
63
- const rawTotalIssuance = _totalIssuance.toString();
64
- const numAuctions = _auctionCounter ? _auctionCounter.toHuman() : 0;
65
- const bnTotalEraStake = new BN(rawTotalEraStake);
66
- const bnTotalIssuance = new BN(rawTotalIssuance);
67
- const inflation = calculateInflation(bnTotalEraStake, bnTotalIssuance, numAuctions, chainInfo.slug);
68
- const expectedReturn = calculateChainStakedReturn(inflation, bnTotalEraStake, bnTotalIssuance, chainInfo.slug);
69
- const eraTime = _STAKING_ERA_LENGTH_MAP[chainInfo.slug] || _STAKING_ERA_LENGTH_MAP.default; // in hours
70
- const unlockingPeriod = parseInt(unlockingEras) * eraTime; // in hours
71
- const farmerCount = _counterForNominators.toPrimitive();
72
- const minToHuman = formatNumber(minStake.toString(), nativeToken.decimals || 0, balanceFormatter);
73
- const data = {
74
- ...this.baseInfo,
75
- type: this.type,
76
- metadata: {
77
- ...this.metadataInfo,
78
- description: this.getDescription(minToHuman)
79
- },
80
- statistic: {
81
- assetEarning: [{
82
- slug: this.nativeToken.slug,
83
- apy: expectedReturn
84
- }],
85
- maxCandidatePerFarmer: parseInt(maxNominations),
86
- maxWithdrawalRequestPerFarmer: parseInt(maxUnlockingChunks),
87
- // TODO recheck
88
- earningThreshold: {
89
- join: minStake.toString(),
90
- defaultUnstake: '0',
91
- fastUnstake: '0'
92
- },
93
- farmerCount: farmerCount,
94
- era: parseInt(currentEra),
95
- eraTime,
96
- tvl: bnTotalEraStake.toString(),
97
- // TODO recheck
98
- totalApy: expectedReturn,
99
- // TODO recheck
100
- unstakingPeriod: unlockingPeriod,
101
- inflation: inflation
102
- }
103
- };
104
- callback(data);
105
- }));
106
- return () => {
107
- cancel = true;
108
- unsub();
109
- };
110
- }
111
-
112
- /* Subscribe pool info */
113
-
114
- /* Subscribe pool position */
115
-
116
- async parseNominatorMetadata(chainInfo, address, substrateApi, ledger, currentEra, minStake, _deriveSessionProgress) {
117
- var _substrateApi$api$que7, _substrateApi$api$que8, _substrateApi$api$que9, _substrateApi$api$que10;
118
- const chain = chainInfo.slug;
119
- const [_nominations, _bonded] = await Promise.all([(_substrateApi$api$que7 = substrateApi.api.query) === null || _substrateApi$api$que7 === void 0 ? void 0 : (_substrateApi$api$que8 = _substrateApi$api$que7.staking) === null || _substrateApi$api$que8 === void 0 ? void 0 : _substrateApi$api$que8.nominators(address), (_substrateApi$api$que9 = substrateApi.api.query) === null || _substrateApi$api$que9 === void 0 ? void 0 : (_substrateApi$api$que10 = _substrateApi$api$que9.staking) === null || _substrateApi$api$que10 === void 0 ? void 0 : _substrateApi$api$que10.bonded(address)]);
120
- const unlimitedNominatorRewarded = substrateApi.api.consts.staking.maxExposurePageSize !== undefined;
121
- const _maxNominatorRewardedPerValidator = (substrateApi.api.consts.staking.maxNominatorRewardedPerValidator || 0).toString();
122
- const maxNominatorRewardedPerValidator = parseInt(_maxNominatorRewardedPerValidator);
123
- const nominations = _nominations.toPrimitive();
124
- const bonded = _bonded.toHuman();
125
- const activeStake = ledger.active.toString();
126
- const totalStake = ledger.total.toString();
127
- const unstakingBalance = (ledger.total - ledger.active).toString();
128
- const nominationList = [];
129
- const unstakingList = [];
130
- if (nominations) {
131
- const validatorList = nominations.targets;
132
- await Promise.all(validatorList.map(async validatorAddress => {
133
- let nominationStatus = EarningStatus.NOT_EARNING;
134
- const [[identity], _eraStaker] = await Promise.all([parseIdentity(substrateApi, validatorAddress), substrateApi.api.query.staking.erasStakers(currentEra, validatorAddress)]);
135
- const eraStaker = _eraStaker.toPrimitive();
136
- const sortedNominators = eraStaker.others.sort((a, b) => {
137
- return new BigN(b.value).minus(a.value).toNumber();
138
- });
139
- const topNominators = sortedNominators.map(nominator => {
140
- return nominator.who;
141
- });
142
- if (!topNominators.includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
143
- // if nominator has target but not in nominator list
144
- nominationStatus = EarningStatus.WAITING;
145
- } else if (topNominators.slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator).includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
146
- // if address in top nominators
147
- nominationStatus = EarningStatus.EARNING_REWARD;
148
- }
149
- nominationList.push({
150
- chain,
151
- validatorAddress,
152
- status: nominationStatus,
153
- validatorIdentity: identity,
154
- activeStake: '0' // relaychain allocates stake accordingly
155
- });
156
- }));
157
- }
158
-
159
- let stakingStatus = EarningStatus.NOT_EARNING;
160
- const bnActiveStake = new BN(activeStake);
161
- let waitingNominationCount = 0;
162
- if (bnActiveStake.gte(minStake) && bnActiveStake.gt(BN_ZERO)) {
163
- for (const nomination of nominationList) {
164
- if (nomination.status === EarningStatus.EARNING_REWARD) {
165
- // only need 1 earning nomination to count
166
- stakingStatus = EarningStatus.EARNING_REWARD;
167
- } else if (nomination.status === EarningStatus.WAITING) {
168
- waitingNominationCount += 1;
169
- }
170
- }
171
- if (waitingNominationCount === nominationList.length) {
172
- stakingStatus = EarningStatus.WAITING;
173
- }
174
- }
175
- ledger.unlocking.forEach(unlockingChunk => {
176
- // Calculate the remaining time for current era ending
177
- const isClaimable = unlockingChunk.era - parseInt(currentEra) < 0;
178
- const remainingEra = unlockingChunk.era - parseInt(currentEra);
179
- const expectedBlockTime = _EXPECTED_BLOCK_TIME[chain];
180
- const eraLength = _deriveSessionProgress.eraLength.toNumber();
181
- const eraProgress = _deriveSessionProgress.eraProgress.toNumber();
182
- const remainingSlots = eraLength - eraProgress;
183
- const remainingHours = expectedBlockTime * remainingSlots / 60 / 60;
184
- const eraTime = _STAKING_ERA_LENGTH_MAP[chainInfo.slug] || _STAKING_ERA_LENGTH_MAP.default; // in hours
185
- const waitingTime = remainingEra * eraTime + remainingHours;
186
- unstakingList.push({
187
- chain,
188
- status: isClaimable ? UnstakingStatus.CLAIMABLE : UnstakingStatus.UNLOCKING,
189
- claimable: unlockingChunk.value.toString(),
190
- waitingTime: waitingTime
191
- });
192
- });
193
- return {
194
- status: stakingStatus,
195
- balanceToken: this.nativeToken.slug,
196
- totalStake: totalStake,
197
- activeStake: activeStake,
198
- unstakeBalance: unstakingBalance,
199
- isBondedBefore: bonded !== null,
200
- nominations: nominationList,
201
- unstakings: unstakingList
202
- };
203
- }
204
- async subscribePoolPosition(useAddresses, resultCallback) {
205
- var _substrateApi$api$que11;
206
- let cancel = false;
207
- const substrateApi = await this.substrateApi.isReady;
208
- const defaultInfo = this.baseInfo;
209
- const chainInfo = this.chainInfo;
210
- const unsub = await ((_substrateApi$api$que11 = substrateApi.api.query.staking) === null || _substrateApi$api$que11 === void 0 ? void 0 : _substrateApi$api$que11.ledger.multi(useAddresses, async ledgers => {
211
- if (cancel) {
212
- unsub();
213
- return;
214
- }
215
- if (ledgers) {
216
- var _substrateApi$api$que12, _substrateApi$api$que13, _substrateApi$api$que14, _substrateApi$api$que15, _substrateApi$api$que16, _substrateApi$api$que17, _substrateApi$api$que18, _substrateApi$api$que19, _substrateApi$api$der, _substrateApi$api$der2;
217
- const [_currentEra, _minimumActiveStake, _minNominatorBond, _deriveSessionProgress] = await Promise.all([(_substrateApi$api$que12 = substrateApi.api.query) === null || _substrateApi$api$que12 === void 0 ? void 0 : (_substrateApi$api$que13 = _substrateApi$api$que12.staking) === null || _substrateApi$api$que13 === void 0 ? void 0 : _substrateApi$api$que13.currentEra(), ((_substrateApi$api$que14 = substrateApi.api.query) === null || _substrateApi$api$que14 === void 0 ? void 0 : (_substrateApi$api$que15 = _substrateApi$api$que14.staking) === null || _substrateApi$api$que15 === void 0 ? void 0 : _substrateApi$api$que15.minimumActiveStake) && ((_substrateApi$api$que16 = substrateApi.api.query) === null || _substrateApi$api$que16 === void 0 ? void 0 : (_substrateApi$api$que17 = _substrateApi$api$que16.staking) === null || _substrateApi$api$que17 === void 0 ? void 0 : _substrateApi$api$que17.minimumActiveStake()), (_substrateApi$api$que18 = substrateApi.api.query) === null || _substrateApi$api$que18 === void 0 ? void 0 : (_substrateApi$api$que19 = _substrateApi$api$que18.staking) === null || _substrateApi$api$que19 === void 0 ? void 0 : _substrateApi$api$que19.minNominatorBond(), (_substrateApi$api$der = substrateApi.api.derive) === null || _substrateApi$api$der === void 0 ? void 0 : (_substrateApi$api$der2 = _substrateApi$api$der.session) === null || _substrateApi$api$der2 === void 0 ? void 0 : _substrateApi$api$der2.progress()]);
218
- const currentEra = _currentEra.toString();
219
- const minActiveStake = (_minimumActiveStake === null || _minimumActiveStake === void 0 ? void 0 : _minimumActiveStake.toString()) || '0';
220
- const minNominatorBond = _minNominatorBond.toString();
221
- const bnMinActiveStake = new BN(minActiveStake);
222
- const bnMinNominatorBond = new BN(minNominatorBond);
223
- const minStake = bnMinActiveStake.gt(bnMinNominatorBond) ? bnMinActiveStake : bnMinNominatorBond;
224
- await Promise.all(ledgers.map(async (_ledger, i) => {
225
- const owner = reformatAddress(useAddresses[i], 42);
226
- const ledger = _ledger.toPrimitive();
227
- if (ledger) {
228
- const nominatorMetadata = await this.parseNominatorMetadata(chainInfo, owner, substrateApi, ledger, currentEra, minStake, _deriveSessionProgress);
229
- resultCallback({
230
- ...defaultInfo,
231
- ...nominatorMetadata,
232
- address: owner,
233
- type: this.type
234
- });
235
- } else {
236
- resultCallback({
237
- ...defaultInfo,
238
- type: this.type,
239
- balanceToken: this.nativeToken.slug,
240
- address: owner,
241
- totalStake: '0',
242
- activeStake: '0',
243
- unstakeBalance: '0',
244
- isBondedBefore: false,
245
- status: EarningStatus.NOT_STAKING,
246
- nominations: [],
247
- unstakings: []
248
- });
249
- }
250
- }));
251
- }
252
- }));
253
- return () => {
254
- cancel = true;
255
- unsub();
256
- };
257
- }
258
-
259
- /* Subscribe pool position */
260
-
261
- /* Get pool targets */
262
-
263
- async getPoolTargets() {
264
- var _chainApi$api$query$s;
265
- const decimals = this.nativeToken.decimals || 0;
266
- const chainApi = await this.substrateApi.isReady;
267
- const poolInfo = await this.getPoolInfo();
268
- if (!poolInfo || !poolInfo.statistic) {
269
- return Promise.reject(new TransactionError(BasicTxErrorType.INTERNAL_ERROR));
270
- }
271
- const _era = await chainApi.api.query.staking.currentEra();
272
- const currentEra = _era.toString();
273
- const allValidators = [];
274
- const validatorInfoList = [];
275
- const [_totalEraStake, _eraStakers, _minBond, _stakingRewards] = await Promise.all([chainApi.api.query.staking.erasTotalStake(parseInt(currentEra)), chainApi.api.query.staking.erasStakers.entries(parseInt(currentEra)), chainApi.api.query.staking.minNominatorBond(), ((_chainApi$api$query$s = chainApi.api.query.stakingRewards) === null || _chainApi$api$query$s === void 0 ? void 0 : _chainApi$api$query$s.data) && chainApi.api.query.stakingRewards.data()]);
276
- const stakingRewards = _stakingRewards === null || _stakingRewards === void 0 ? void 0 : _stakingRewards.toPrimitive();
277
- const unlimitedNominatorRewarded = chainApi.api.consts.staking.maxExposurePageSize !== undefined;
278
- const maxNominatorRewarded = (chainApi.api.consts.staking.maxNominatorRewardedPerValidator || 0).toString();
279
- const bnTotalEraStake = new BN(_totalEraStake.toString());
280
- const eraStakers = _eraStakers;
281
- const rawMinBond = _minBond.toHuman();
282
- const minBond = rawMinBond.replaceAll(',', '');
283
- const totalStakeMap = {};
284
- const bnDecimals = new BN((10 ** decimals).toString());
285
- for (const item of eraStakers) {
286
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
287
- const rawValidatorInfo = item[0].toHuman();
288
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
289
- const rawValidatorStat = item[1].toHuman();
290
- const validatorAddress = rawValidatorInfo[1];
291
- const rawTotalStake = rawValidatorStat.total;
292
- const rawOwnStake = rawValidatorStat.own;
293
- const bnTotalStake = new BN(rawTotalStake.replaceAll(',', ''));
294
- const bnOwnStake = new BN(rawOwnStake.replaceAll(',', ''));
295
- const otherStake = bnTotalStake.sub(bnOwnStake);
296
- totalStakeMap[validatorAddress] = bnTotalStake;
297
- let nominatorCount = 0;
298
- if ('others' in rawValidatorStat) {
299
- const others = rawValidatorStat.others;
300
- nominatorCount = others.length;
301
- }
302
- allValidators.push(validatorAddress);
303
- validatorInfoList.push({
304
- address: validatorAddress,
305
- totalStake: bnTotalStake.toString(),
306
- ownStake: bnOwnStake.toString(),
307
- otherStake: otherStake.toString(),
308
- nominatorCount,
309
- // to be added later
310
- commission: 0,
311
- expectedReturn: 0,
312
- blocked: false,
313
- isVerified: false,
314
- minBond,
315
- isCrowded: unlimitedNominatorRewarded ? false : nominatorCount > parseInt(maxNominatorRewarded)
316
- });
317
- }
318
- const extraInfoMap = {};
319
- await Promise.all(allValidators.map(async address => {
320
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
321
- const [_commissionInfo, [identity, isVerified]] = await Promise.all([chainApi.api.query.staking.validators(address), parseIdentity(chainApi, address)]);
322
- const commissionInfo = _commissionInfo.toHuman();
323
- extraInfoMap[address] = {
324
- commission: commissionInfo.commission,
325
- blocked: commissionInfo.blocked,
326
- identity,
327
- isVerified: isVerified
328
- };
329
- }));
330
- const bnAvgStake = bnTotalEraStake.divn(validatorInfoList.length).div(bnDecimals);
331
- for (const validator of validatorInfoList) {
332
- const commission = extraInfoMap[validator.address].commission;
333
- const bnValidatorStake = totalStakeMap[validator.address].div(bnDecimals);
334
- if (_STAKING_CHAIN_GROUP.aleph.includes(this.chain)) {
335
- validator.expectedReturn = calculateAlephZeroValidatorReturn(poolInfo.statistic.totalApy, getCommission(commission));
336
- } else if (_STAKING_CHAIN_GROUP.ternoa.includes(this.chain)) {
337
- const rewardPerValidator = new BN(stakingRewards.sessionExtraRewardPayout).divn(allValidators.length).div(bnDecimals);
338
- const validatorStake = totalStakeMap[validator.address].div(bnDecimals).toNumber();
339
- validator.expectedReturn = calculateTernoaValidatorReturn(rewardPerValidator.toNumber(), validatorStake, getCommission(commission));
340
- } else {
341
- validator.expectedReturn = calculateValidatorStakedReturn(poolInfo.statistic.totalApy, bnValidatorStake, bnAvgStake, getCommission(commission));
342
- }
343
- validator.commission = parseFloat(commission.split('%')[0]);
344
- validator.blocked = extraInfoMap[validator.address].blocked;
345
- validator.identity = extraInfoMap[validator.address].identity;
346
- validator.isVerified = extraInfoMap[validator.address].isVerified;
347
- }
348
- return validatorInfoList;
349
- }
350
-
351
- /* Get pool targets */
352
-
353
- /* Join pool action */
354
-
355
- async validateYieldJoin(data, path) {
356
- const {
357
- address,
358
- amount,
359
- selectedValidators
360
- } = data;
361
- const _poolInfo = await this.getPoolInfo();
362
- const poolPosition = await this.getPoolPosition(address);
363
- const chainInfo = this.chainInfo;
364
- const bnAmount = new BN(amount);
365
- if (bnAmount.lte(BN_ZERO)) {
366
- return Promise.resolve([new TransactionError(BasicTxErrorType.INVALID_PARAMS, 'Amount must be greater than 0')]);
367
- }
368
- if (!_poolInfo) {
369
- return Promise.resolve([new TransactionError(BasicTxErrorType.INTERNAL_ERROR)]);
370
- }
371
- const poolInfo = _poolInfo;
372
- if (!poolInfo.statistic) {
373
- return Promise.resolve([new TransactionError(BasicTxErrorType.INTERNAL_ERROR)]);
374
- }
375
- const errors = [];
376
- let bnTotalStake = new BN(amount);
377
- const bnMinStake = new BN(poolInfo.statistic.earningThreshold.join);
378
- const minStakeErrorMessage = getMinStakeErrorMessage(chainInfo, bnMinStake);
379
- const maxValidatorErrorMessage = getMaxValidatorErrorMessage(chainInfo, poolInfo.statistic.maxCandidatePerFarmer);
380
- if (!poolPosition || poolPosition.status === EarningStatus.NOT_STAKING) {
381
- if (!bnTotalStake.gte(bnMinStake)) {
382
- errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
383
- }
384
- if (selectedValidators.length > poolInfo.statistic.maxCandidatePerFarmer) {
385
- errors.push(new TransactionError(StakingTxErrorType.EXCEED_MAX_NOMINATIONS, maxValidatorErrorMessage));
386
- }
387
- return errors;
388
- }
389
- const bnCurrentActiveStake = new BN(poolPosition.activeStake);
390
- bnTotalStake = bnTotalStake.add(bnCurrentActiveStake);
391
- if (!bnTotalStake.gte(bnMinStake)) {
392
- errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
393
- }
394
- if (selectedValidators.length > poolInfo.statistic.maxCandidatePerFarmer) {
395
- errors.push(new TransactionError(StakingTxErrorType.EXCEED_MAX_NOMINATIONS, maxValidatorErrorMessage));
396
- }
397
- return errors;
398
- }
399
- async createJoinExtrinsic(data, positionInfo, bondDest = 'Staked') {
400
- const {
401
- address,
402
- amount,
403
- selectedValidators: targetValidators
404
- } = data;
405
- const chainApi = await this.substrateApi.isReady;
406
- const binaryAmount = new BN(amount);
407
- const tokenSlug = this.nativeToken.slug;
408
- let bondTx;
409
- let nominateTx;
410
- const _params = chainApi.api.tx.staking.bond.toJSON();
411
- const paramsCount = _params.args.length;
412
- const validatorParamList = targetValidators.map(validator => {
413
- return validator.address;
414
- });
415
-
416
- // eslint-disable-next-line @typescript-eslint/require-await
417
- const compoundTransactions = async (bondTx, nominateTx) => {
418
- const extrinsic = chainApi.api.tx.utility.batchAll([bondTx, nominateTx]);
419
- // const fees = await Promise.all([bondTx.paymentInfo(address), nominateTx.paymentInfo(address)]);
420
- // const totalFee = fees.reduce((previousValue, currentItem) => {
421
- // const fee = currentItem.toPrimitive() as unknown as RuntimeDispatchInfo;
422
- //
423
- // return previousValue + fee.partialFee;
424
- // }, 0);
425
-
426
- // Not use the fee to validate and to display on UI
427
- return [extrinsic, {
428
- slug: tokenSlug,
429
- amount: '0'
430
- }];
431
- };
432
- if (!positionInfo) {
433
- if (paramsCount === 2) {
434
- bondTx = chainApi.api.tx.staking.bond(binaryAmount, bondDest);
435
- } else {
436
- bondTx = chainApi.api.tx.staking.bond(address, binaryAmount, bondDest);
437
- }
438
- nominateTx = chainApi.api.tx.staking.nominate(validatorParamList);
439
- return compoundTransactions(bondTx, nominateTx);
440
- }
441
- if (!positionInfo.isBondedBefore) {
442
- // first time
443
- if (paramsCount === 2) {
444
- bondTx = chainApi.api.tx.staking.bond(binaryAmount, bondDest);
445
- } else {
446
- bondTx = chainApi.api.tx.staking.bond(address, binaryAmount, bondDest);
447
- }
448
- nominateTx = chainApi.api.tx.staking.nominate(validatorParamList);
449
- return compoundTransactions(bondTx, nominateTx);
450
- } else {
451
- if (binaryAmount.gt(BN_ZERO)) {
452
- bondTx = chainApi.api.tx.staking.bondExtra(binaryAmount);
453
- }
454
- if (positionInfo.isBondedBefore && targetValidators.length > 0) {
455
- nominateTx = chainApi.api.tx.staking.nominate(validatorParamList);
456
- }
457
- }
458
- if (bondTx && !nominateTx) {
459
- // const feeInfo = await bondTx.paymentInfo(address);
460
- // const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
461
-
462
- return [bondTx, {
463
- slug: tokenSlug,
464
- amount: '0'
465
- }];
466
- } else if (nominateTx && !bondTx) {
467
- // const feeInfo = await nominateTx.paymentInfo(address);
468
- // const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
469
-
470
- return [nominateTx, {
471
- slug: tokenSlug,
472
- amount: '0'
473
- }];
474
- }
475
- if (bondTx && nominateTx) {
476
- return compoundTransactions(bondTx, nominateTx);
477
- } else {
478
- return Promise.reject(new TransactionError(BasicTxErrorType.INTERNAL_ERROR));
479
- }
480
- }
481
-
482
- /* Join pool action */
483
-
484
- /* Leave pool action */
485
-
486
- async validateYieldLeave(amount, address, fastLeave, selectedTarget) {
487
- const errors = [];
488
- const poolInfo = await this.getPoolInfo();
489
- const poolPosition = await this.getPoolPosition(address);
490
- if (!poolInfo || !poolInfo.statistic || !poolPosition || fastLeave) {
491
- return [new TransactionError(BasicTxErrorType.INTERNAL_ERROR)];
492
- }
493
- if (fastLeave) {
494
- return [new TransactionError(BasicTxErrorType.INVALID_PARAMS)];
495
- }
496
- const bnAmount = new BN(amount);
497
- if (bnAmount.lte(BN_ZERO)) {
498
- errors.push(new TransactionError(BasicTxErrorType.INVALID_PARAMS, t('Amount must be greater than 0')));
499
- }
500
- const bnActiveStake = new BN(poolPosition.activeStake);
501
- const bnRemainingStake = bnActiveStake.sub(new BN(amount));
502
- const minStake = new BN(poolInfo.statistic.earningThreshold.join || '0');
503
- const maxUnstake = poolInfo.statistic.maxWithdrawalRequestPerFarmer;
504
- if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(minStake))) {
505
- errors.push(new TransactionError(StakingTxErrorType.INVALID_ACTIVE_STAKE));
506
- }
507
- if (poolPosition.unstakings.length > maxUnstake) {
508
- errors.push(new TransactionError(StakingTxErrorType.EXCEED_MAX_UNSTAKING, t('You cannot unstake more than {{number}} times', {
509
- replace: {
510
- number: maxUnstake
511
- }
512
- })));
513
- }
514
- return Promise.resolve(errors);
515
- }
516
- async handleYieldUnstake(amount, address, selectedTarget) {
517
- const chainApi = await this.substrateApi.isReady;
518
- const poolPosition = await this.getPoolPosition(address);
519
- if (!poolPosition) {
520
- return Promise.reject(new TransactionError(BasicTxErrorType.INTERNAL_ERROR));
521
- }
522
- let extrinsic;
523
- const binaryAmount = new BN(amount);
524
- const isUnstakeAll = amount === poolPosition.activeStake;
525
- if (isUnstakeAll) {
526
- const chillTx = chainApi.api.tx.staking.chill();
527
- const unbondTx = chainApi.api.tx.staking.unbond(binaryAmount);
528
- extrinsic = chainApi.api.tx.utility.batchAll([chillTx, unbondTx]);
529
- } else {
530
- extrinsic = chainApi.api.tx.staking.unbond(binaryAmount);
531
- }
532
- return [ExtrinsicType.STAKING_LEAVE_POOL, extrinsic];
533
- }
534
-
535
- /* Leave pool action */
536
-
537
- /* Other action */
538
-
539
- async handleYieldCancelUnstake(params) {
540
- const chainApi = await this.substrateApi.isReady;
541
- const {
542
- selectedUnstaking
543
- } = params;
544
- return chainApi.api.tx.staking.rebond(selectedUnstaking.claimable);
545
- }
546
- async handleYieldWithdraw(address, unstakingInfo) {
547
- const chainApi = await this.substrateApi.isReady;
548
- if (chainApi.api.tx.staking.withdrawUnbonded.meta.args.length === 1) {
549
- const _slashingSpans = (await chainApi.api.query.staking.slashingSpans(address)).toHuman();
550
- const slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
551
- return chainApi.api.tx.staking.withdrawUnbonded(slashingSpanCount);
552
- } else {
553
- return chainApi.api.tx.staking.withdrawUnbonded();
554
- }
555
- }
556
-
557
- /* Other actions */
558
- }
@@ -1,36 +0,0 @@
1
- import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
2
- import { ExtrinsicType, UnstakingInfo } from '@subwallet/extension-base/background/KoniTypes';
3
- import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
4
- import { _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
5
- import { BaseYieldPositionInfo, EarningRewardHistoryItem, EarningRewardItem, HandleYieldStepData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, PalletNominationPoolsPoolMember, StakeCancelWithdrawalParams, SubmitJoinNominationPool, SubmitYieldJoinData, TransactionData, YieldPoolInfo, YieldPoolMethodInfo, YieldPoolType, YieldPositionInfo, YieldStepBaseInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
6
- import { DeriveSessionProgress } from '@polkadot/api-derive/types';
7
- import BasePoolHandler from '../base';
8
- export default class NominationPoolHandler extends BasePoolHandler {
9
- readonly type = YieldPoolType.NOMINATION_POOL;
10
- protected readonly name: string;
11
- protected readonly shortName: string;
12
- slug: string;
13
- protected readonly availableMethod: YieldPoolMethodInfo;
14
- constructor(state: KoniState, chain: string);
15
- protected getDescription(amount?: string): string;
16
- subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
17
- parsePoolMemberMetadata(substrateApi: _SubstrateApi, poolMemberInfo: PalletNominationPoolsPoolMember, currentEra: string, _deriveSessionProgress: DeriveSessionProgress): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
18
- subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
19
- getPoolReward(useAddresses: string[], callBack: (rs: EarningRewardItem) => void): Promise<VoidFunction>;
20
- getPoolRewardHistory(useAddresses: string[], callBack: (rs: EarningRewardHistoryItem) => void): Promise<VoidFunction>;
21
- getPoolTargets(): Promise<NominationPoolInfo[]>;
22
- get defaultSubmitStep(): YieldStepBaseInfo;
23
- protected getSubmitStep(params: OptimalYieldPathParams): Promise<YieldStepBaseInfo>;
24
- validateYieldJoin(data: SubmitYieldJoinData, path: OptimalYieldPath): Promise<TransactionError[]>;
25
- createJoinExtrinsic(data: SubmitJoinNominationPool, positionInfo?: YieldPositionInfo): Promise<[TransactionData, YieldTokenBaseInfo]>;
26
- handleYieldJoin(_data: SubmitYieldJoinData, path: OptimalYieldPath, currentStep: number): Promise<HandleYieldStepData>;
27
- /**
28
- * @todo Recheck
29
- * */
30
- validateYieldLeave(amount: string, address: string, fastLeave: boolean, selectedTarget?: string): Promise<TransactionError[]>;
31
- handleYieldRedeem(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
32
- handleYieldUnstake(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
33
- handleYieldCancelUnstake(params: StakeCancelWithdrawalParams): Promise<TransactionData>;
34
- handleYieldClaimReward(address: string, bondReward?: boolean): Promise<TransactionData>;
35
- handleYieldWithdraw(address: string, unstakingInfo: UnstakingInfo): Promise<TransactionData>;
36
- }