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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +14 -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 +6 -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,466 @@
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
+ exports.getAstarWithdrawable = getAstarWithdrawable;
9
+ var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
10
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
+ var _utils = require("@subwallet/extension-base/koni/api/staking/bonding/utils");
12
+ var _constants = require("@subwallet/extension-base/services/chain-service/constants");
13
+ var _types = require("@subwallet/extension-base/types");
14
+ var _utils2 = require("@subwallet/extension-base/utils");
15
+ var _crossFetch = _interopRequireDefault(require("cross-fetch"));
16
+ var _util = require("@polkadot/util");
17
+ var _utilCrypto = require("@polkadot/util-crypto");
18
+ var _basePara = _interopRequireDefault(require("./base-para"));
19
+ // Copyright 2019-2022 @subwallet/extension-base
20
+ // SPDX-License-Identifier: Apache-2.0
21
+
22
+ const convertAddress = address => {
23
+ return (0, _utilCrypto.isEthereumAddress)(address) ? address.toLowerCase() : address;
24
+ };
25
+ function getAstarWithdrawable(yieldPosition) {
26
+ const unstakingInfo = {
27
+ chain: yieldPosition.chain,
28
+ status: _types.UnstakingStatus.CLAIMABLE,
29
+ claimable: '0',
30
+ waitingTime: 0
31
+ };
32
+ let bnWithdrawable = _util.BN_ZERO;
33
+ for (const unstaking of yieldPosition.unstakings) {
34
+ if (unstaking.status === _types.UnstakingStatus.CLAIMABLE) {
35
+ bnWithdrawable = bnWithdrawable.add(new _util.BN(unstaking.claimable));
36
+ }
37
+ }
38
+ if (bnWithdrawable.gt(_util.BN_ZERO)) {
39
+ unstakingInfo.claimable = bnWithdrawable.toString();
40
+ return unstakingInfo;
41
+ } else {
42
+ return undefined;
43
+ }
44
+ }
45
+ class AstarNativeStakingPoolHandler extends _basePara.default {
46
+ availableMethod = {
47
+ join: true,
48
+ defaultUnstake: true,
49
+ fastUnstake: false,
50
+ cancelUnstake: false,
51
+ withdraw: true,
52
+ claimReward: true
53
+ };
54
+
55
+ /* Subscribe pool info */
56
+
57
+ async subscribePoolInfo(callback) {
58
+ let cancel = false;
59
+ const nativeToken = this.nativeToken;
60
+ const defaultCallback = async () => {
61
+ const data = {
62
+ ...this.baseInfo,
63
+ type: this.type,
64
+ metadata: {
65
+ ...this.metadataInfo,
66
+ description: this.getDescription()
67
+ }
68
+ };
69
+ const poolInfo = await this.getPoolInfo();
70
+ !poolInfo && callback(data);
71
+ };
72
+ if (!this.isActive) {
73
+ await defaultCallback();
74
+ return () => {
75
+ cancel = true;
76
+ };
77
+ }
78
+ await defaultCallback();
79
+ const apyPromise = new Promise(resolve => {
80
+ (0, _crossFetch.default)(`https://api.astar.network/api/v1/${this.chain}/dapps-staking/apy`, {
81
+ method: 'GET'
82
+ }).then(resp => {
83
+ resolve(resp.json());
84
+ }).catch(e => {
85
+ console.error(e);
86
+ resolve(null);
87
+ });
88
+ });
89
+ const timeout = new Promise(resolve => {
90
+ const id = setTimeout(() => {
91
+ clearTimeout(id);
92
+ resolve(null);
93
+ }, 8000);
94
+ });
95
+ const apyRacePromise = Promise.race([timeout, apyPromise]); // need race because API often timeout
96
+
97
+ const substrateApi = await this.substrateApi.isReady;
98
+ let apyInfo;
99
+ try {
100
+ apyInfo = await apyRacePromise;
101
+ } catch (e) {
102
+ apyInfo = null;
103
+ }
104
+ const unsub = await substrateApi.api.query.dappsStaking.currentEra(_currentEra => {
105
+ if (cancel) {
106
+ unsub();
107
+ return;
108
+ }
109
+ const era = _currentEra.toString();
110
+ const minDelegatorStake = substrateApi.api.consts.dappsStaking.minimumStakingAmount.toString();
111
+ const unstakingDelay = substrateApi.api.consts.dappsStaking.unbondingPeriod.toString();
112
+ const eraTime = _constants._STAKING_ERA_LENGTH_MAP[this.chain] || _constants._STAKING_ERA_LENGTH_MAP.default; // in hours
113
+ const unstakingPeriod = parseInt(unstakingDelay) * eraTime;
114
+ const minToHuman = (0, _utils2.formatNumber)(minDelegatorStake, nativeToken.decimals || 0, _utils2.balanceFormatter);
115
+ const data = {
116
+ ...this.baseInfo,
117
+ type: this.type,
118
+ metadata: {
119
+ ...this.metadataInfo,
120
+ description: this.getDescription(minToHuman)
121
+ },
122
+ statistic: {
123
+ assetEarning: [{
124
+ slug: this.nativeToken.slug,
125
+ apy: apyInfo !== null ? apyInfo : undefined
126
+ }],
127
+ maxCandidatePerFarmer: 100,
128
+ // temporary fix for Astar, there's no limit for now
129
+ maxWithdrawalRequestPerFarmer: 1,
130
+ // by default
131
+ earningThreshold: {
132
+ join: minDelegatorStake,
133
+ defaultUnstake: '0',
134
+ fastUnstake: '0'
135
+ },
136
+ farmerCount: 0,
137
+ // TODO recheck
138
+ era: parseInt(era),
139
+ eraTime,
140
+ tvl: undefined,
141
+ // TODO recheck
142
+ totalApy: apyInfo !== null ? apyInfo : undefined,
143
+ // TODO recheck
144
+ unstakingPeriod
145
+ }
146
+ };
147
+ callback(data);
148
+ });
149
+ return () => {
150
+ cancel = true;
151
+ unsub();
152
+ };
153
+ }
154
+
155
+ /* Subscribe pool info */
156
+
157
+ /* Subscribe pool position */
158
+
159
+ async parseNominatorMetadata(chainInfo, address, substrateApi, ledger) {
160
+ const nominationList = [];
161
+ const unstakingList = [];
162
+ const allDappsReq = new Promise(resolve => {
163
+ (0, _crossFetch.default)(`https://api.astar.network/api/v1/${chainInfo.slug}/dapps-staking/dapps`, {
164
+ method: 'GET'
165
+ }).then(resp => {
166
+ resolve(resp.json());
167
+ }).catch(console.error);
168
+ });
169
+ const [_allDapps, _era, _stakerInfo] = await Promise.all([allDappsReq, substrateApi.api.query.dappsStaking.currentEra(), substrateApi.api.query.dappsStaking.generalStakerInfo.entries(address)]);
170
+ const currentEra = _era.toString();
171
+ const minDelegatorStake = substrateApi.api.consts.dappsStaking.minimumStakingAmount.toString();
172
+ const allDapps = _allDapps;
173
+ let bnTotalActiveStake = _util.BN_ZERO;
174
+ if (_stakerInfo.length > 0) {
175
+ const dAppInfoMap = {};
176
+ allDapps.forEach(dappInfo => {
177
+ dAppInfoMap[convertAddress(dappInfo.address)] = dappInfo;
178
+ });
179
+ for (const item of _stakerInfo) {
180
+ const data = item[0].toHuman();
181
+ const stakedDapp = data[1];
182
+ const stakeData = item[1].toPrimitive();
183
+ const stakeList = stakeData.stakes;
184
+ const _dappAddress = stakedDapp.Evm ? stakedDapp.Evm.toLowerCase() : stakedDapp.Wasm;
185
+ const dappAddress = convertAddress(_dappAddress);
186
+ const currentStake = stakeList.slice(-1)[0].staked.toString() || '0';
187
+ const bnCurrentStake = new _util.BN(currentStake);
188
+ if (bnCurrentStake.gt(_util.BN_ZERO)) {
189
+ const dappEarningStatus = bnCurrentStake.gt(_util.BN_ZERO) && bnCurrentStake.gte(new _util.BN(minDelegatorStake)) ? _types.EarningStatus.EARNING_REWARD : _types.EarningStatus.NOT_EARNING;
190
+ bnTotalActiveStake = bnTotalActiveStake.add(bnCurrentStake);
191
+ const dappInfo = dAppInfoMap[dappAddress];
192
+ nominationList.push({
193
+ status: dappEarningStatus,
194
+ chain: chainInfo.slug,
195
+ validatorAddress: dappAddress,
196
+ activeStake: currentStake,
197
+ validatorMinStake: '0',
198
+ validatorIdentity: dappInfo === null || dappInfo === void 0 ? void 0 : dappInfo.name,
199
+ hasUnstaking: false // cannot get unstaking info by dapp
200
+ });
201
+ }
202
+ }
203
+ }
204
+
205
+ const unlockingChunks = ledger.unbondingInfo.unlockingChunks;
206
+ if (unlockingChunks.length > 0) {
207
+ for (const unlockingChunk of unlockingChunks) {
208
+ const isClaimable = unlockingChunk.unlockEra - parseInt(currentEra) < 0;
209
+ const remainingEra = unlockingChunk.unlockEra - parseInt(currentEra);
210
+ const waitingTime = remainingEra * _constants._STAKING_ERA_LENGTH_MAP[chainInfo.slug];
211
+ unstakingList.push({
212
+ chain: chainInfo.slug,
213
+ status: isClaimable ? _types.UnstakingStatus.CLAIMABLE : _types.UnstakingStatus.UNLOCKING,
214
+ claimable: unlockingChunk.amount.toString(),
215
+ waitingTime
216
+ });
217
+ }
218
+ }
219
+ if (nominationList.length === 0 && unstakingList.length === 0) {
220
+ return {
221
+ balanceToken: this.nativeToken.slug,
222
+ totalStake: '0',
223
+ unstakeBalance: '0',
224
+ status: _types.EarningStatus.NOT_STAKING,
225
+ isBondedBefore: false,
226
+ activeStake: '0',
227
+ nominations: [],
228
+ unstakings: []
229
+ };
230
+ }
231
+ const stakingStatus = (0, _utils.getEarningStatusByNominations)(bnTotalActiveStake, nominationList);
232
+ const activeStake = bnTotalActiveStake.toString();
233
+ const unstakeBalance = unstakingList.reduce((old, currentValue) => {
234
+ return old.add(new _util.BN(currentValue.claimable));
235
+ }, _util.BN_ZERO);
236
+ const totalStake = unstakeBalance.add(bnTotalActiveStake);
237
+ return {
238
+ status: stakingStatus,
239
+ balanceToken: this.nativeToken.slug,
240
+ totalStake: totalStake.toString(),
241
+ activeStake: activeStake,
242
+ unstakeBalance: unstakeBalance.toString(),
243
+ isBondedBefore: totalStake.gt(_util.BN_ZERO),
244
+ nominations: nominationList,
245
+ unstakings: unstakingList
246
+ };
247
+ }
248
+ async subscribePoolPosition(useAddresses, resultCallback) {
249
+ let cancel = false;
250
+ const substrateApi = await this.substrateApi.isReady;
251
+ const defaultInfo = this.baseInfo;
252
+ const chainInfo = this.chainInfo;
253
+ const unsub = await substrateApi.api.query.dappsStaking.ledger.multi(useAddresses, async ledgers => {
254
+ if (cancel) {
255
+ unsub();
256
+ return;
257
+ }
258
+ if (ledgers) {
259
+ await Promise.all(ledgers.map(async (_ledger, i) => {
260
+ const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
261
+ const ledger = _ledger.toPrimitive();
262
+ if (ledger && ledger.locked > 0) {
263
+ const nominatorMetadata = await this.parseNominatorMetadata(chainInfo, owner, substrateApi, ledger);
264
+ resultCallback({
265
+ ...defaultInfo,
266
+ ...nominatorMetadata,
267
+ address: owner,
268
+ type: this.type
269
+ });
270
+ } else {
271
+ resultCallback({
272
+ ...defaultInfo,
273
+ type: this.type,
274
+ address: owner,
275
+ balanceToken: this.nativeToken.slug,
276
+ totalStake: '0',
277
+ activeStake: '0',
278
+ unstakeBalance: '0',
279
+ isBondedBefore: false,
280
+ status: _types.EarningStatus.NOT_STAKING,
281
+ nominations: [],
282
+ unstakings: []
283
+ });
284
+ }
285
+ }));
286
+ }
287
+ });
288
+ return () => {
289
+ cancel = true;
290
+ unsub();
291
+ };
292
+ }
293
+
294
+ /* Subscribe pool position */
295
+
296
+ /* Get pool targets */
297
+
298
+ async getPoolTargets() {
299
+ const chainApi = await this.substrateApi.isReady;
300
+ const rawMaxStakerPerContract = chainApi.api.consts.dappsStaking.maxNumberOfStakersPerContract.toHuman();
301
+ const allDappsInfo = [];
302
+ const maxStakerPerContract = (0, _utils2.parseRawNumber)(rawMaxStakerPerContract);
303
+ const allDappsReq = new Promise(resolve => {
304
+ (0, _crossFetch.default)(`https://api.astar.network/api/v1/${this.chain}/dapps-staking/dapps`, {
305
+ method: 'GET'
306
+ }).then(resp => {
307
+ resolve(resp.json());
308
+ }).catch(console.error);
309
+ });
310
+ const [_era, _allDapps] = await Promise.all([chainApi.api.query.dappsStaking.currentEra(), allDappsReq]);
311
+ const era = (0, _utils2.parseRawNumber)(_era.toHuman());
312
+ const allDapps = _allDapps;
313
+ await Promise.all(allDapps.map(async dapp => {
314
+ const dappName = dapp.name;
315
+ const dappAddress = dapp.address;
316
+ const dappIcon = (0, _utils2.isUrl)(dapp.iconUrl) ? dapp.iconUrl : undefined;
317
+ const contractParam = (0, _utilCrypto.isEthereumAddress)(dappAddress) ? {
318
+ Evm: dappAddress
319
+ } : {
320
+ Wasm: dappAddress
321
+ };
322
+ const _contractInfo = await chainApi.api.query.dappsStaking.contractEraStake(contractParam, era);
323
+ const contractInfo = _contractInfo.toPrimitive();
324
+ let totalStake = '0';
325
+ let stakerCount = 0;
326
+ if (contractInfo !== null) {
327
+ var _contractInfo$total;
328
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
329
+ totalStake = contractInfo === null || contractInfo === void 0 ? void 0 : (_contractInfo$total = contractInfo.total) === null || _contractInfo$total === void 0 ? void 0 : _contractInfo$total.toString();
330
+ stakerCount = contractInfo.numberOfStakers;
331
+ }
332
+ allDappsInfo.push({
333
+ commission: 0,
334
+ expectedReturn: 0,
335
+ address: convertAddress(dappAddress),
336
+ totalStake: totalStake,
337
+ ownStake: '0',
338
+ otherStake: totalStake.toString(),
339
+ nominatorCount: stakerCount,
340
+ blocked: false,
341
+ isVerified: false,
342
+ minBond: '0',
343
+ icon: dappIcon,
344
+ identity: dappName,
345
+ chain: this.chain,
346
+ isCrowded: stakerCount >= maxStakerPerContract
347
+ });
348
+ }));
349
+ return allDappsInfo;
350
+ }
351
+
352
+ /* Get pool targets */
353
+
354
+ /* Join pool action */
355
+
356
+ get defaultSubmitStep() {
357
+ return [{
358
+ name: 'Nominate dApps',
359
+ type: _types.YieldStepType.NOMINATE
360
+ }, {
361
+ slug: this.nativeToken.slug,
362
+ amount: '0'
363
+ }];
364
+ }
365
+ async createJoinExtrinsic(data, positionInfo) {
366
+ let bondDest = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Staked';
367
+ const {
368
+ amount,
369
+ selectedValidators: targetValidators
370
+ } = data;
371
+ const chainApi = await this.substrateApi.isReady;
372
+ const binaryAmount = new _util.BN(amount);
373
+ const dappInfo = targetValidators[0];
374
+ const dappParam = (0, _utilCrypto.isEthereumAddress)(dappInfo.address) ? {
375
+ Evm: dappInfo.address
376
+ } : {
377
+ Wasm: dappInfo.address
378
+ };
379
+ const extrinsic = chainApi.api.tx.dappsStaking.bondAndStake(dappParam, binaryAmount);
380
+ const tokenSlug = this.nativeToken.slug;
381
+ // const feeInfo = await extrinsic.paymentInfo(address);
382
+ // const fee = feeInfo.toPrimitive() as unknown as RuntimeDispatchInfo;
383
+
384
+ // Not use the fee to validate and to display on UI
385
+ return [extrinsic, {
386
+ slug: tokenSlug,
387
+ amount: '0'
388
+ }];
389
+ }
390
+
391
+ /* Join pool action */
392
+
393
+ /* Leave pool action */
394
+
395
+ async handleYieldUnstake(amount, address, selectedTarget) {
396
+ const chainApi = await this.substrateApi.isReady;
397
+ const binaryAmount = new _util.BN(amount);
398
+ if (!selectedTarget) {
399
+ return Promise.reject(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INVALID_PARAMS));
400
+ }
401
+ const dappParam = (0, _utilCrypto.isEthereumAddress)(selectedTarget) ? {
402
+ Evm: selectedTarget
403
+ } : {
404
+ Wasm: selectedTarget
405
+ };
406
+ const extrinsic = chainApi.api.tx.dappsStaking.unbondAndUnstake(dappParam, binaryAmount);
407
+ return [_KoniTypes.ExtrinsicType.STAKING_LEAVE_POOL, extrinsic];
408
+ }
409
+
410
+ /* Leave pool action */
411
+
412
+ /* Other action */
413
+
414
+ async handleYieldCancelUnstake(params) {
415
+ return Promise.reject(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.UNSUPPORTED));
416
+ }
417
+ async handleYieldWithdraw(address, unstakingInfo) {
418
+ const chainApi = await this.substrateApi.isReady;
419
+ return chainApi.api.tx.dappsStaking.withdrawUnbonded();
420
+ }
421
+ async handleYieldClaimReward(address, bondReward) {
422
+ const apiPromise = await this.substrateApi.isReady;
423
+ const [_stakedDapps, _currentEra] = await Promise.all([apiPromise.api.query.dappsStaking.generalStakerInfo.entries(address), apiPromise.api.query.dappsStaking.currentEra()]);
424
+ const currentEra = (0, _utils2.parseRawNumber)(_currentEra.toHuman());
425
+ const transactions = [];
426
+ for (const item of _stakedDapps) {
427
+ const data = item[0].toHuman();
428
+ const stakedDapp = data[1];
429
+ const stakeData = item[1].toHuman();
430
+ const stakes = stakeData.stakes;
431
+ const dappAddress = (0, _utilCrypto.isEthereumAddress)(stakedDapp.Evm) ? stakedDapp.Evm.toLowerCase() : stakedDapp.Evm;
432
+ let numberOfUnclaimedEra = 0;
433
+ const maxTx = 50;
434
+ for (let i = 0; i < stakes.length; i++) {
435
+ var _stakes;
436
+ const {
437
+ era,
438
+ staked
439
+ } = stakes[i];
440
+ const bnStaked = new _util.BN(staked.replaceAll(',', ''));
441
+ const parsedEra = (0, _utils2.parseRawNumber)(era);
442
+ if (bnStaked.eq(new _util.BN(0))) {
443
+ continue;
444
+ }
445
+ const nextEraData = (_stakes = stakes[i + 1]) !== null && _stakes !== void 0 ? _stakes : null;
446
+ const nextEra = nextEraData && (0, _utils2.parseRawNumber)(nextEraData.era);
447
+ const isLastEra = i === stakes.length - 1;
448
+ const eraToClaim = isLastEra ? currentEra - parsedEra : nextEra - parsedEra;
449
+ numberOfUnclaimedEra += eraToClaim;
450
+ }
451
+ const dappParam = (0, _utilCrypto.isEthereumAddress)(dappAddress) ? {
452
+ Evm: dappAddress
453
+ } : {
454
+ Wasm: dappAddress
455
+ };
456
+ for (let i = 0; i < Math.min(numberOfUnclaimedEra, maxTx); i++) {
457
+ const tx = apiPromise.api.tx.dappsStaking.claimStaker(dappParam);
458
+ transactions.push(tx);
459
+ }
460
+ }
461
+ return apiPromise.api.tx.utility.batch(transactions);
462
+ }
463
+
464
+ /* Other actions */
465
+ }
466
+ exports.default = AstarNativeStakingPoolHandler;
@@ -0,0 +1,146 @@
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 _base = _interopRequireDefault(require("@subwallet/extension-base/services/earning-service/handlers/native-staking/base"));
12
+ var _types = require("@subwallet/extension-base/types");
13
+ var _utils2 = require("@subwallet/extension-base/utils");
14
+ var _i18next = require("i18next");
15
+ var _util = require("@polkadot/util");
16
+ // Copyright 2019-2022 @subwallet/extension-base
17
+ // SPDX-License-Identifier: Apache-2.0
18
+
19
+ class BaseParaNativeStakingPoolHandler extends _base.default {
20
+ /* Join pool action */
21
+
22
+ get defaultSubmitStep() {
23
+ return [{
24
+ name: 'Nominate collators',
25
+ type: _types.YieldStepType.NOMINATE
26
+ }, {
27
+ slug: this.nativeToken.slug,
28
+ amount: '0'
29
+ }];
30
+ }
31
+ async validateYieldJoin(data, path) {
32
+ const {
33
+ address,
34
+ amount,
35
+ selectedValidators
36
+ } = data;
37
+ const poolInfo = await this.getPoolInfo();
38
+ const poolPosition = await this.getPoolPosition(address);
39
+ const chainInfo = this.chainInfo;
40
+ const bnAmount = new _util.BN(amount);
41
+ if (bnAmount.lte(_util.BN_ZERO)) {
42
+ return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INVALID_PARAMS, 'Amount must be greater than 0')];
43
+ }
44
+ if (!poolInfo || !poolInfo.statistic) {
45
+ return Promise.resolve([new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)]);
46
+ }
47
+ const errors = [];
48
+ const selectedCollator = selectedValidators[0];
49
+ let bnTotalStake = new _util.BN(amount);
50
+ const bnChainMinStake = new _util.BN(poolInfo.statistic.earningThreshold.join || '0');
51
+ const bnCollatorMinStake = new _util.BN(selectedCollator.minBond || '0');
52
+ const bnMinStake = bnCollatorMinStake > bnChainMinStake ? bnCollatorMinStake : bnChainMinStake;
53
+ const minStakeErrorMessage = (0, _utils.getMinStakeErrorMessage)(chainInfo, bnMinStake);
54
+ const maxValidator = poolInfo.statistic.maxCandidatePerFarmer;
55
+ const maxValidatorErrorMessage = (0, _utils.getMaxValidatorErrorMessage)(chainInfo, maxValidator);
56
+ const existUnstakeErrorMessage = (0, _utils.getExistUnstakeErrorMessage)(chainInfo.slug, _KoniTypes.StakingType.NOMINATED, true);
57
+ if (!poolPosition || poolPosition.status === _types.EarningStatus.NOT_STAKING) {
58
+ if (!bnTotalStake.gte(bnMinStake)) {
59
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
60
+ }
61
+ return errors;
62
+ }
63
+ const {
64
+ bondedValidators
65
+ } = (0, _utils.getBondedValidators)(poolPosition.nominations);
66
+ const parsedSelectedCollatorAddress = (0, _utils2.reformatAddress)(selectedCollator.address, 0);
67
+ if (!bondedValidators.includes(parsedSelectedCollatorAddress)) {
68
+ // new delegation
69
+ if (!bnTotalStake.gte(bnMinStake)) {
70
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
71
+ }
72
+ const delegationCount = poolPosition.nominations.length + 1;
73
+ if (delegationCount > maxValidator) {
74
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_NOMINATIONS, maxValidatorErrorMessage));
75
+ }
76
+ } else {
77
+ let currentDelegationAmount = '0';
78
+ let hasUnstaking = false;
79
+ for (const delegation of poolPosition.nominations) {
80
+ if ((0, _utils2.reformatAddress)(delegation.validatorAddress, 0) === parsedSelectedCollatorAddress) {
81
+ currentDelegationAmount = delegation.activeStake;
82
+ hasUnstaking = !!delegation.hasUnstaking && delegation.hasUnstaking;
83
+ break;
84
+ }
85
+ }
86
+ bnTotalStake = bnTotalStake.add(new _util.BN(currentDelegationAmount));
87
+ if (!bnTotalStake.gte(bnMinStake)) {
88
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
89
+ }
90
+ if (hasUnstaking) {
91
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXIST_UNSTAKING_REQUEST, existUnstakeErrorMessage));
92
+ }
93
+ }
94
+ return errors;
95
+ }
96
+
97
+ /* Join pool action */
98
+
99
+ /* Leave pool action */
100
+
101
+ /**
102
+ * @todo Recheck
103
+ * */
104
+ async validateYieldLeave(amount, address, fastLeave, selectedTarget) {
105
+ const errors = [];
106
+ const poolInfo = await this.getPoolInfo();
107
+ const poolPosition = await this.getPoolPosition(address);
108
+ if (!poolInfo || !poolInfo.statistic || !poolPosition || fastLeave || !selectedTarget) {
109
+ return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)];
110
+ }
111
+ if (fastLeave) {
112
+ return [new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INVALID_PARAMS)];
113
+ }
114
+ const bnAmount = new _util.BN(amount);
115
+ if (bnAmount.lte(_util.BN_ZERO)) {
116
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INVALID_PARAMS, (0, _i18next.t)('Amount must be greater than 0')));
117
+ }
118
+ let targetNomination;
119
+ for (const nomination of poolPosition.nominations) {
120
+ if ((0, _utils2.isSameAddress)(nomination.validatorAddress, selectedTarget)) {
121
+ targetNomination = nomination;
122
+ break;
123
+ }
124
+ }
125
+ if (!targetNomination) {
126
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR));
127
+ return errors;
128
+ }
129
+ const bnActiveStake = new _util.BN(targetNomination.activeStake);
130
+ const bnRemainingStake = bnActiveStake.sub(new _util.BN(amount));
131
+ const bnChainMinStake = new _util.BN(poolInfo.statistic.earningThreshold.join || '0');
132
+ const bnCollatorMinStake = new _util.BN(targetNomination.validatorMinStake || '0');
133
+ const bnMinStake = _util.BN.max(bnCollatorMinStake, bnChainMinStake);
134
+ const existUnstakeErrorMessage = (0, _utils.getExistUnstakeErrorMessage)(this.chain, _KoniTypes.StakingType.NOMINATED);
135
+ if (targetNomination.hasUnstaking) {
136
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXIST_UNSTAKING_REQUEST, existUnstakeErrorMessage));
137
+ }
138
+ if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(bnMinStake))) {
139
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE));
140
+ }
141
+ return errors;
142
+ }
143
+
144
+ /* Leave pool action */
145
+ }
146
+ exports.default = BaseParaNativeStakingPoolHandler;