@subwallet/extension-base 1.1.35-0 → 1.1.35-beta.1

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