@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,114 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { ORDINAL_COLLECTION } from '@subwallet/extension-base/constants';
5
+ import { BaseNftApi } from '@subwallet/extension-base/koni/api/nft/nft';
6
+ import { fetchExtrinsicParams, fetchRemarkEvent } from '@subwallet/extension-base/koni/api/nft/ordinal_nft/utils';
7
+ import { state } from '@subwallet/extension-base/koni/background/handlers';
8
+ const parseParamData = (param, event, chain, address) => {
9
+ const ordinalData = JSON.parse(param.value);
10
+ if ('p' in ordinalData) {
11
+ const properties = {};
12
+ for (const [key, value] of Object.entries(ordinalData)) {
13
+ const _name = key.charAt(0).toUpperCase() + key.slice(1);
14
+ properties[_name] = {
15
+ value: value
16
+ };
17
+ }
18
+ properties['Block number'] = {
19
+ value: event.extrinsic_index.split('-')[0]
20
+ };
21
+ properties.Timestamp = {
22
+ value: event.block_timestamp
23
+ };
24
+ const op = ordinalData.op.charAt(0).toUpperCase() + ordinalData.op.slice(1);
25
+ const nameParams = [op];
26
+ if (ordinalData.amt !== undefined) {
27
+ nameParams.push(ordinalData.amt);
28
+ }
29
+ nameParams.push(ordinalData.tick);
30
+ const name = nameParams.join(' ');
31
+ return {
32
+ chain: chain,
33
+ collectionId: ORDINAL_COLLECTION,
34
+ id: event.extrinsic_hash,
35
+ description: JSON.stringify(ordinalData),
36
+ name,
37
+ owner: address,
38
+ properties: properties
39
+ };
40
+ }
41
+ return undefined;
42
+ };
43
+ export default class OrdinalNftApi extends BaseNftApi {
44
+ constructor(addresses, chain, subscanChain) {
45
+ super(chain, undefined, addresses);
46
+ this.subscanChain = subscanChain;
47
+ }
48
+ async handleNft(address, handleNftParams) {
49
+ const events = await state.subscanService.addRequest(async () => {
50
+ return await fetchRemarkEvent(this.subscanChain, address);
51
+ });
52
+ if (events && events.length) {
53
+ const extrinsicIds = events.map(data => data.extrinsic_index);
54
+ const extrinsicParams = await state.subscanService.addRequest(async () => {
55
+ return await fetchExtrinsicParams(this.subscanChain, extrinsicIds);
56
+ });
57
+ const items = [];
58
+ for (const data of extrinsicParams) {
59
+ const {
60
+ extrinsic_index: extrinsicIndex,
61
+ params
62
+ } = data;
63
+ const event = events.find(item => item.extrinsic_index === extrinsicIndex);
64
+ if (params.length === 1 && event) {
65
+ const [param] = params;
66
+ if (param.name === 'remark') {
67
+ const childParam = {
68
+ name: param.name,
69
+ type: param.type,
70
+ value: param.value
71
+ };
72
+ const item = parseParamData(childParam, event, this.chain, address);
73
+ if (item) {
74
+ items.push(item);
75
+ }
76
+ } else if (param.name === 'calls') {
77
+ const children = param.value;
78
+ for (const child of children) {
79
+ if (child.call_module === 'System' && child.call_name === 'remark_with_event') {
80
+ for (const childParam of child.params) {
81
+ const item = parseParamData(childParam, event, this.chain, address);
82
+ if (item) {
83
+ items.push(item);
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ }
90
+ }
91
+ if (items.length) {
92
+ // handleNftParams.updateCollection(this.chain, {
93
+ // chain: this.chain,
94
+ // collectionId: ORDINAL_COLLECTION
95
+ // });
96
+
97
+ for (const item of items) {
98
+ handleNftParams.updateItem(this.chain, item, address);
99
+ }
100
+ }
101
+ }
102
+ }
103
+ async handleNfts(params) {
104
+ await Promise.all(this.addresses.map(address => this.handleNft(address, params)));
105
+ }
106
+ async fetchNfts(params) {
107
+ try {
108
+ await this.handleNfts(params);
109
+ } catch (e) {
110
+ return 0;
111
+ }
112
+ return 1;
113
+ }
114
+ }
@@ -0,0 +1,2 @@
1
+ export declare const fetchRemarkEvent: (chain: string, address: string) => Promise<import("@subwallet/extension-base/types").SubscanEventBaseItemData[]>;
2
+ export declare const fetchExtrinsicParams: (chain: string, extrinsicIndexes: string[]) => Promise<import("@subwallet/extension-base/types").SubscanExtrinsicParam[]>;
@@ -0,0 +1,33 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { BASE_FETCH_ORDINAL_EVENT_DATA, GET_EVENT_LIST_API, GET_EXTRINSIC_PARAMS_API } from "./constants.js";
5
+ export const fetchRemarkEvent = async (chain, address) => {
6
+ const params = {
7
+ ...BASE_FETCH_ORDINAL_EVENT_DATA,
8
+ address
9
+ };
10
+ const response = await fetch(GET_EVENT_LIST_API.replace('{{chain}}', chain), {
11
+ method: 'POST',
12
+ headers: {
13
+ 'Content-Type': 'application/json'
14
+ },
15
+ body: JSON.stringify(params)
16
+ });
17
+ const data = await response.json();
18
+ return data.data.events;
19
+ };
20
+ export const fetchExtrinsicParams = async (chain, extrinsicIndexes) => {
21
+ const params = {
22
+ extrinsic_index: extrinsicIndexes
23
+ };
24
+ const response = await fetch(GET_EXTRINSIC_PARAMS_API.replace('{{chain}}', chain), {
25
+ method: 'POST',
26
+ headers: {
27
+ 'Content-Type': 'application/json'
28
+ },
29
+ body: JSON.stringify(params)
30
+ });
31
+ const data = await response.json();
32
+ return data.data;
33
+ };
@@ -1,9 +1,12 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import { StakingStatus, StakingType, UnstakingStatus } from '@subwallet/extension-base/background/KoniTypes';
5
- import { getBondedValidators, getStakingStatusByNominations, isUnstakeAll, parseIdentity } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
6
- import { _STAKING_CHAIN_GROUP, _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
4
+ import { StakingType } from '@subwallet/extension-base/background/KoniTypes';
5
+ import { getBondedValidators, getEarningStatusByNominations, isUnstakeAll } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
6
+ import { _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
7
+ import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
8
+ import { parseIdentity } from '@subwallet/extension-base/services/earning-service/utils';
9
+ import { EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
7
10
  import { parseRawNumber, reformatAddress } from '@subwallet/extension-base/utils';
8
11
  import { BN, BN_ZERO } from '@polkadot/util';
9
12
  import { isEthereumAddress } from '@polkadot/util-crypto';
@@ -69,9 +72,9 @@ export async function subscribeAmplitudeNominatorMetadata(chainInfo, address, su
69
72
  const [identity] = identities[i];
70
73
  activeStake = delegate.amount.toString();
71
74
  const bnActiveStake = new BN(activeStake);
72
- let delegationStatus = StakingStatus.NOT_EARNING;
75
+ let delegationStatus = EarningStatus.NOT_EARNING;
73
76
  if (bnActiveStake.gt(BN_ZERO) && bnActiveStake.gte(new BN(minDelegatorStake))) {
74
- delegationStatus = StakingStatus.EARNING_REWARD;
77
+ delegationStatus = EarningStatus.EARNING_REWARD;
75
78
  }
76
79
  nominationList.push({
77
80
  status: delegationStatus,
@@ -105,7 +108,7 @@ export async function subscribeAmplitudeNominatorMetadata(chainInfo, address, su
105
108
  }
106
109
  }
107
110
  }
108
- const stakingStatus = getStakingStatusByNominations(new BN(activeStake), nominationList);
111
+ const stakingStatus = getEarningStatusByNominations(new BN(activeStake), nominationList);
109
112
  return {
110
113
  chain: chainInfo.slug,
111
114
  type: StakingType.NOMINATED,
@@ -137,7 +140,7 @@ export async function getAmplitudeNominatorMetadata(chainInfo, address, substrat
137
140
  chain: chainInfo.slug,
138
141
  type: StakingType.NOMINATED,
139
142
  address,
140
- status: StakingStatus.NOT_STAKING,
143
+ status: EarningStatus.NOT_STAKING,
141
144
  activeStake: '0',
142
145
  nominations: [],
143
146
  unstakings: []
@@ -149,9 +152,9 @@ export async function getAmplitudeNominatorMetadata(chainInfo, address, substrat
149
152
  const [identity] = await parseIdentity(substrateApi, delegatorState.owner);
150
153
  activeStake = delegatorState.amount.toString();
151
154
  const bnActiveStake = new BN(activeStake);
152
- let delegationStatus = StakingStatus.NOT_EARNING;
155
+ let delegationStatus = EarningStatus.NOT_EARNING;
153
156
  if (bnActiveStake.gt(BN_ZERO) && bnActiveStake.gte(new BN(minDelegatorStake))) {
154
- delegationStatus = StakingStatus.EARNING_REWARD;
157
+ delegationStatus = EarningStatus.EARNING_REWARD;
155
158
  }
156
159
  nominationList.push({
157
160
  status: delegationStatus,
@@ -187,7 +190,7 @@ export async function getAmplitudeNominatorMetadata(chainInfo, address, substrat
187
190
  if (nominationList.length === 0 && unstakingList.length === 0) {
188
191
  return;
189
192
  }
190
- const stakingStatus = getStakingStatusByNominations(new BN(activeStake), nominationList);
193
+ const stakingStatus = getEarningStatusByNominations(new BN(activeStake), nominationList);
191
194
  return {
192
195
  chain,
193
196
  type: StakingType.NOMINATED,
@@ -1,9 +1,10 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import { StakingStatus, StakingType, UnstakingStatus } from '@subwallet/extension-base/background/KoniTypes';
5
- import { getStakingStatusByNominations } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
4
+ import { StakingType } from '@subwallet/extension-base/background/KoniTypes';
5
+ import { getEarningStatusByNominations } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
6
6
  import { _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
7
+ import { EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
7
8
  import { isUrl, parseRawNumber } from '@subwallet/extension-base/utils';
8
9
  import fetch from 'cross-fetch';
9
10
  import { BN, BN_ZERO } from '@polkadot/util';
@@ -99,7 +100,7 @@ export async function subscribeAstarNominatorMetadata(chainInfo, address, substr
99
100
  const currentStake = stakeList.slice(-1)[0].staked.toString() || '0';
100
101
  const bnCurrentStake = new BN(currentStake);
101
102
  if (bnCurrentStake.gt(BN_ZERO)) {
102
- const dappStakingStatus = bnCurrentStake.gt(BN_ZERO) && bnCurrentStake.gte(new BN(minDelegatorStake)) ? StakingStatus.EARNING_REWARD : StakingStatus.NOT_EARNING;
103
+ const dappStakingStatus = bnCurrentStake.gt(BN_ZERO) && bnCurrentStake.gte(new BN(minDelegatorStake)) ? EarningStatus.EARNING_REWARD : EarningStatus.NOT_EARNING;
103
104
  bnTotalActiveStake = bnTotalActiveStake.add(bnCurrentStake);
104
105
  const dappInfo = dAppInfoMap[dappAddress];
105
106
  nominationList.push({
@@ -134,13 +135,13 @@ export async function subscribeAstarNominatorMetadata(chainInfo, address, substr
134
135
  chain: chainInfo.slug,
135
136
  type: StakingType.NOMINATED,
136
137
  address,
137
- status: StakingStatus.NOT_STAKING,
138
+ status: EarningStatus.NOT_STAKING,
138
139
  activeStake: '0',
139
140
  nominations: [],
140
141
  unstakings: []
141
142
  };
142
143
  }
143
- const stakingStatus = getStakingStatusByNominations(bnTotalActiveStake, nominationList);
144
+ const stakingStatus = getEarningStatusByNominations(bnTotalActiveStake, nominationList);
144
145
  return {
145
146
  chain: chainInfo.slug,
146
147
  type: StakingType.NOMINATED,
@@ -185,7 +186,7 @@ export async function getAstarNominatorMetadata(chainInfo, address, substrateApi
185
186
  const currentStake = stakeList.slice(-1)[0].staked.toString() || '0';
186
187
  const bnCurrentStake = new BN(currentStake);
187
188
  if (bnCurrentStake.gt(BN_ZERO)) {
188
- const dappStakingStatus = bnCurrentStake.gt(BN_ZERO) && bnCurrentStake.gte(new BN(minDelegatorStake)) ? StakingStatus.EARNING_REWARD : StakingStatus.NOT_EARNING;
189
+ const dappStakingStatus = bnCurrentStake.gt(BN_ZERO) && bnCurrentStake.gte(new BN(minDelegatorStake)) ? EarningStatus.EARNING_REWARD : EarningStatus.NOT_EARNING;
189
190
  bnTotalActiveStake = bnTotalActiveStake.add(bnCurrentStake);
190
191
  const dappInfo = dAppInfoMap[dappAddress];
191
192
  nominationList.push({
@@ -220,13 +221,13 @@ export async function getAstarNominatorMetadata(chainInfo, address, substrateApi
220
221
  chain: chainInfo.slug,
221
222
  type: StakingType.NOMINATED,
222
223
  address,
223
- status: StakingStatus.NOT_STAKING,
224
+ status: EarningStatus.NOT_STAKING,
224
225
  activeStake: '0',
225
226
  nominations: [],
226
227
  unstakings: []
227
228
  };
228
229
  }
229
- const stakingStatus = getStakingStatusByNominations(bnTotalActiveStake, nominationList);
230
+ const stakingStatus = getEarningStatusByNominations(bnTotalActiveStake, nominationList);
230
231
  return {
231
232
  chain,
232
233
  type: StakingType.NOMINATED,
@@ -11,7 +11,7 @@ export declare function getChainStakingMetadata(chainInfo: _ChainInfo, substrate
11
11
  * */
12
12
  export declare function getNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi): Promise<NominatorMetadata | undefined>;
13
13
  export declare function getValidatorsInfo(networkKey: string, substrateApi: _SubstrateApi, decimals: number, chainStakingMetadata: ChainStakingMetadata): Promise<ValidatorInfo[]>;
14
- export declare function getNominationPoolsInfo(chain: string, substrateApi: _SubstrateApi): Promise<import("@subwallet/extension-base/background/KoniTypes").NominationPoolInfo[]>;
14
+ export declare function getNominationPoolsInfo(chain: string, substrateApi: _SubstrateApi): Promise<import("../../../../types").NominationPoolInfo[]>;
15
15
  export declare function getBondingExtrinsic(chainInfo: _ChainInfo, amount: string, selectedValidators: ValidatorInfo[], substrateApi: _SubstrateApi, address: string, nominatorMetadata?: NominatorMetadata): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
16
16
  export declare function getUnbondingExtrinsic(nominatorMetadata: NominatorMetadata, amount: string, chain: string, substrateApi: _SubstrateApi, selectedValidator?: string): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
17
17
  export declare function getWithdrawalExtrinsic(substrateApi: _SubstrateApi, chain: string, nominatorMetadata: NominatorMetadata, validatorAddress?: string): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
@@ -6,10 +6,14 @@ import { getAmplitudeBondingExtrinsic, getAmplitudeClaimRewardExtrinsic, getAmpl
6
6
  import { getAstarBondingExtrinsic, getAstarClaimRewardExtrinsic, getAstarDappsInfo, getAstarNominatorMetadata, getAstarStakingMetadata, getAstarUnbondingExtrinsic, getAstarWithdrawalExtrinsic, subscribeAstarStakingMetadata } from '@subwallet/extension-base/koni/api/staking/bonding/astar';
7
7
  import { getParaBondingExtrinsic, getParaCancelWithdrawalExtrinsic, getParachainCollatorsInfo, getParaChainNominatorMetadata, getParaChainStakingMetadata, getParaUnbondingExtrinsic, getParaWithdrawalExtrinsic, subscribeParaChainStakingMetadata, validateParaChainBondingCondition, validateParaChainUnbondingCondition } from '@subwallet/extension-base/koni/api/staking/bonding/paraChain';
8
8
  import { getPoolingClaimRewardExtrinsic, getPoolingWithdrawalExtrinsic, getRelayBondingExtrinsic, getRelayCancelWithdrawalExtrinsic, getRelayChainNominatorMetadata, getRelayChainStakingMetadata, getRelayPoolsInfo, getRelayUnbondingExtrinsic, getRelayValidatorsInfo, getRelayWithdrawalExtrinsic, subscribeRelayChainStakingMetadata, validateRelayBondingCondition, validateRelayUnbondingCondition } from '@subwallet/extension-base/koni/api/staking/bonding/relayChain';
9
- import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/chain-service/constants';
9
+ import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
10
+
10
11
  // all addresses must be converted to its chain format
11
12
 
12
13
  export function validateUnbondingCondition(nominatorMetadata, amount, chain, chainStakingMetadata, selectedValidator) {
14
+ if (nominatorMetadata.type === StakingType.LIQUID_STAKING) {
15
+ return [];
16
+ }
13
17
  if (_STAKING_CHAIN_GROUP.relay.includes(chain)) {
14
18
  return validateRelayUnbondingCondition(amount, chainStakingMetadata, nominatorMetadata);
15
19
  }
@@ -2,10 +2,12 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
5
- import { BasicTxErrorType, StakingStatus, StakingTxErrorType, StakingType, UnstakingStatus } from '@subwallet/extension-base/background/KoniTypes';
6
- import { getBondedValidators, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage, getParaCurrentInflation, getStakingStatusByNominations, isUnstakeAll, parseIdentity } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
5
+ import { BasicTxErrorType, StakingTxErrorType, StakingType } from '@subwallet/extension-base/background/KoniTypes';
6
+ import { getBondedValidators, getEarningStatusByNominations, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage, getParaCurrentInflation, isUnstakeAll } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
7
7
  import { _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
8
8
  import { _isChainEvmCompatible } from '@subwallet/extension-base/services/chain-service/utils';
9
+ import { parseIdentity } from '@subwallet/extension-base/services/earning-service/utils';
10
+ import { EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
9
11
  import { isSameAddress, parseRawNumber, reformatAddress } from '@subwallet/extension-base/utils';
10
12
  import { BN, BN_ZERO } from '@polkadot/util';
11
13
  import { isEthereumAddress } from '@polkadot/util-crypto';
@@ -46,7 +48,7 @@ export function validateParaChainBondingCondition(chainInfo, amount, selectedCol
46
48
  const minStakeErrorMessage = getMinStakeErrorMessage(chainInfo, bnMinStake);
47
49
  const maxValidatorErrorMessage = getMaxValidatorErrorMessage(chainInfo, chainStakingMetadata.maxValidatorPerNominator);
48
50
  const existUnstakeErrorMessage = getExistUnstakeErrorMessage(chainInfo.slug, nominatorMetadata === null || nominatorMetadata === void 0 ? void 0 : nominatorMetadata.type, true);
49
- if (!nominatorMetadata || nominatorMetadata.status === StakingStatus.NOT_STAKING) {
51
+ if (!nominatorMetadata || nominatorMetadata.status === EarningStatus.NOT_STAKING) {
50
52
  if (!bnTotalStake.gte(bnMinStake)) {
51
53
  errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
52
54
  }
@@ -160,7 +162,7 @@ export async function subscribeParaChainNominatorMetadata(chainInfo, address, su
160
162
  const minDelegation = collatorInfo === null || collatorInfo === void 0 ? void 0 : collatorInfo.lowestTopDelegationAmount.toString();
161
163
  const delegationScheduledRequests = _delegationScheduledRequests.toPrimitive();
162
164
  let hasUnstaking = false;
163
- let delegationStatus = StakingStatus.NOT_EARNING;
165
+ let delegationStatus = EarningStatus.NOT_EARNING;
164
166
 
165
167
  // parse unstaking info
166
168
  if (delegationScheduledRequests) {
@@ -188,7 +190,7 @@ export async function subscribeParaChainNominatorMetadata(chainInfo, address, su
188
190
  const bnUnstakeBalance = unstakingMap[delegation.owner] ? new BN(unstakingMap[delegation.owner].claimable) : BN_ZERO;
189
191
  const bnActiveStake = bnStake.sub(bnUnstakeBalance);
190
192
  if (bnActiveStake.gt(BN_ZERO) && bnActiveStake.gte(new BN(minDelegation))) {
191
- delegationStatus = StakingStatus.EARNING_REWARD;
193
+ delegationStatus = EarningStatus.EARNING_REWARD;
192
194
  }
193
195
  bnTotalActiveStake = bnTotalActiveStake.add(bnActiveStake);
194
196
  nominationList.push({
@@ -209,7 +211,7 @@ export async function subscribeParaChainNominatorMetadata(chainInfo, address, su
209
211
  // nomination.validatorMinStake = collatorInfo.lowestTopDelegationAmount.toString();
210
212
  // }));
211
213
 
212
- const stakingStatus = getStakingStatusByNominations(bnTotalActiveStake, nominationList);
214
+ const stakingStatus = getEarningStatusByNominations(bnTotalActiveStake, nominationList);
213
215
  return {
214
216
  chain: chainInfo.slug,
215
217
  type: StakingType.NOMINATED,
@@ -239,7 +241,7 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
239
241
  chain: chainInfo.slug,
240
242
  type: StakingType.NOMINATED,
241
243
  address,
242
- status: StakingStatus.NOT_STAKING,
244
+ status: EarningStatus.NOT_STAKING,
243
245
  activeStake: '0',
244
246
  nominations: [],
245
247
  unstakings: []
@@ -254,7 +256,7 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
254
256
  const delegationScheduledRequests = _delegationScheduledRequests.toPrimitive();
255
257
  const currentRound = roundInfo.current;
256
258
  let hasUnstaking = false;
257
- let delegationStatus = StakingStatus.NOT_EARNING;
259
+ let delegationStatus = EarningStatus.NOT_EARNING;
258
260
 
259
261
  // parse unstaking info
260
262
  if (delegationScheduledRequests) {
@@ -282,7 +284,7 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
282
284
  const bnUnstakeBalance = unstakingMap[delegation.owner] ? new BN(unstakingMap[delegation.owner].claimable) : BN_ZERO;
283
285
  const bnActiveStake = bnStake.sub(bnUnstakeBalance);
284
286
  if (bnActiveStake.gt(BN_ZERO) && bnActiveStake.gte(new BN(minDelegation))) {
285
- delegationStatus = StakingStatus.EARNING_REWARD;
287
+ delegationStatus = EarningStatus.EARNING_REWARD;
286
288
  }
287
289
  bnTotalActiveStake = bnTotalActiveStake.add(bnActiveStake);
288
290
  nominationList.push({
@@ -299,7 +301,7 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
299
301
  const collatorInfo = _collatorInfo.toPrimitive();
300
302
  nomination.validatorMinStake = collatorInfo.lowestTopDelegationAmount.toString();
301
303
  }));
302
- const stakingStatus = getStakingStatusByNominations(bnTotalActiveStake, nominationList);
304
+ const stakingStatus = getEarningStatusByNominations(bnTotalActiveStake, nominationList);
303
305
  return {
304
306
  chain,
305
307
  type: StakingType.NOMINATED,
@@ -1,8 +1,8 @@
1
1
  import { _ChainInfo } from '@subwallet/chain-list/types';
2
2
  import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
3
- import { ChainStakingMetadata, NominationPoolInfo, NominatorMetadata, UnstakingInfo, ValidatorInfo } from '@subwallet/extension-base/background/KoniTypes';
4
- import { PalletNominationPoolsPoolMember } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
3
+ import { ChainStakingMetadata, NominatorMetadata, UnstakingInfo, ValidatorInfo } from '@subwallet/extension-base/background/KoniTypes';
5
4
  import { _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
5
+ import { NominationPoolInfo, PalletNominationPoolsPoolMember } from '@subwallet/extension-base/types';
6
6
  import { Codec } from '@polkadot/types/types';
7
7
  export interface PalletStakingNominations {
8
8
  targets: string[];
@@ -2,11 +2,14 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
5
- import { StakingStatus, StakingTxErrorType, StakingType, UnstakingStatus } from '@subwallet/extension-base/background/KoniTypes';
5
+ import { StakingTxErrorType, StakingType } from '@subwallet/extension-base/background/KoniTypes';
6
6
  import { MAX_NOMINATIONS } from '@subwallet/extension-base/constants';
7
- import { calculateAlephZeroValidatorReturn, calculateChainStakedReturn, calculateInflation, calculateTernoaValidatorReturn, calculateValidatorStakedReturn, getCommission, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage, parseIdentity, parsePoolStashAddress } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
8
- import { _EXPECTED_BLOCK_TIME, _STAKING_CHAIN_GROUP, _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
7
+ import { calculateAlephZeroValidatorReturn, calculateChainStakedReturn, calculateInflation, calculateTernoaValidatorReturn, calculateValidatorStakedReturn, getCommission, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage, parsePoolStashAddress } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
8
+ import { _EXPECTED_BLOCK_TIME, _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
9
9
  import { _getChainSubstrateAddressPrefix } from '@subwallet/extension-base/services/chain-service/utils';
10
+ import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
11
+ import { parseIdentity } from '@subwallet/extension-base/services/earning-service/utils';
12
+ import { EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
10
13
  import { reformatAddress } from '@subwallet/extension-base/utils';
11
14
  import BigN from 'bignumber.js';
12
15
  import { t } from 'i18next';
@@ -58,7 +61,7 @@ export function validateRelayBondingCondition(chainInfo, amount, selectedValidat
58
61
  const bnMinStake = new BN(chainStakingMetadata.minStake);
59
62
  const minStakeErrorMessage = getMinStakeErrorMessage(chainInfo, bnMinStake);
60
63
  const maxValidatorErrorMessage = getMaxValidatorErrorMessage(chainInfo, chainStakingMetadata.maxValidatorPerNominator);
61
- if (!nominatorMetadata || nominatorMetadata.status === StakingStatus.NOT_STAKING) {
64
+ if (!nominatorMetadata || nominatorMetadata.status === EarningStatus.NOT_STAKING) {
62
65
  if (!bnTotalStake.gte(bnMinStake)) {
63
66
  errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
64
67
  }
@@ -117,12 +120,12 @@ export function subscribeRelayChainStakingMetadata(chainInfo, substrateApi, call
117
120
  });
118
121
  }
119
122
  export async function getRelayChainStakingMetadata(chainInfo, substrateApi) {
120
- var _chainApi$api$query$a, _chainApi$api$query, _chainApi$api$query$s, _chainApi$api$query2, _chainApi$api$query2$, _chainApi$api$query3, _chainApi$api$query3$;
123
+ var _chainApi$api$consts$, _chainApi$api$consts$2, _chainApi$api$query$a, _chainApi$api$query, _chainApi$api$query$s, _chainApi$api$query2, _chainApi$api$query2$, _chainApi$api$query3, _chainApi$api$query3$;
121
124
  const chain = chainInfo.slug;
122
125
  const chainApi = await substrateApi.isReady;
123
126
  const _era = await chainApi.api.query.staking.currentEra();
124
127
  const currentEra = _era.toString();
125
- const maxNominations = chainApi.api.consts.staking.maxNominations.toString();
128
+ const maxNominations = ((_chainApi$api$consts$ = chainApi.api.consts.staking) === null || _chainApi$api$consts$ === void 0 ? void 0 : (_chainApi$api$consts$2 = _chainApi$api$consts$.maxNominations) === null || _chainApi$api$consts$2 === void 0 ? void 0 : _chainApi$api$consts$2.toString()) || '16'; // TODO
126
129
  const maxUnlockingChunks = chainApi.api.consts.staking.maxUnlockingChunks.toString();
127
130
  const unlockingEras = chainApi.api.consts.staking.bondingDuration.toString();
128
131
  const [_totalEraStake, _totalIssuance, _auctionCounter, _minimumActiveStake, _minNominatorBond, _minPoolJoin, _eraStakers] = await Promise.all([chainApi.api.query.staking.erasTotalStake(parseInt(currentEra)), chainApi.api.query.balances.totalIssuance(), (_chainApi$api$query$a = chainApi.api.query.auctions) === null || _chainApi$api$query$a === void 0 ? void 0 : _chainApi$api$query$a.auctionCounter(), ((_chainApi$api$query = chainApi.api.query) === null || _chainApi$api$query === void 0 ? void 0 : (_chainApi$api$query$s = _chainApi$api$query.staking) === null || _chainApi$api$query$s === void 0 ? void 0 : _chainApi$api$query$s.minimumActiveStake) && ((_chainApi$api$query2 = chainApi.api.query) === null || _chainApi$api$query2 === void 0 ? void 0 : (_chainApi$api$query2$ = _chainApi$api$query2.staking) === null || _chainApi$api$query2$ === void 0 ? void 0 : _chainApi$api$query2$.minimumActiveStake()), chainApi.api.query.staking.minNominatorBond(), (_chainApi$api$query3 = chainApi.api.query) === null || _chainApi$api$query3 === void 0 ? void 0 : (_chainApi$api$query3$ = _chainApi$api$query3.nominationPools) === null || _chainApi$api$query3$ === void 0 ? void 0 : _chainApi$api$query3$.minJoinBond(), chainApi.api.query.staking.erasStakers.entries(parseInt(currentEra))]);
@@ -193,7 +196,7 @@ export async function subscribeRelayChainNominatorMetadata(chainInfo, address, s
193
196
  if (nominations) {
194
197
  const validatorList = nominations.targets;
195
198
  await Promise.all(validatorList.map(async validatorAddress => {
196
- let nominationStatus = StakingStatus.NOT_EARNING;
199
+ let nominationStatus = EarningStatus.NOT_EARNING;
197
200
  const [[identity], _eraStaker] = await Promise.all([parseIdentity(chainApi, validatorAddress), chainApi.api.query.staking.erasStakers(currentEra, validatorAddress)]);
198
201
  const eraStaker = _eraStaker.toPrimitive();
199
202
  const sortedNominators = eraStaker.others.sort((a, b) => {
@@ -204,10 +207,10 @@ export async function subscribeRelayChainNominatorMetadata(chainInfo, address, s
204
207
  });
205
208
  if (!topNominators.includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
206
209
  // if nominator has target but not in nominator list
207
- nominationStatus = StakingStatus.WAITING;
210
+ nominationStatus = EarningStatus.WAITING;
208
211
  } else if (topNominators.slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator).includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
209
212
  // if address in top nominators
210
- nominationStatus = StakingStatus.EARNING_REWARD;
213
+ nominationStatus = EarningStatus.EARNING_REWARD;
211
214
  }
212
215
  nominationList.push({
213
216
  chain,
@@ -219,20 +222,20 @@ export async function subscribeRelayChainNominatorMetadata(chainInfo, address, s
219
222
  }));
220
223
  }
221
224
 
222
- let stakingStatus = StakingStatus.NOT_EARNING;
225
+ let stakingStatus = EarningStatus.NOT_EARNING;
223
226
  const bnActiveStake = new BN(activeStake);
224
227
  let waitingNominationCount = 0;
225
228
  if (bnActiveStake.gte(minStake)) {
226
229
  for (const nomination of nominationList) {
227
- if (nomination.status === StakingStatus.EARNING_REWARD) {
230
+ if (nomination.status === EarningStatus.EARNING_REWARD) {
228
231
  // only need 1 earning nomination to count
229
- stakingStatus = StakingStatus.EARNING_REWARD;
230
- } else if (nomination.status === StakingStatus.WAITING) {
232
+ stakingStatus = EarningStatus.EARNING_REWARD;
233
+ } else if (nomination.status === EarningStatus.WAITING) {
231
234
  waitingNominationCount += 1;
232
235
  }
233
236
  }
234
237
  if (waitingNominationCount === nominationList.length) {
235
- stakingStatus = StakingStatus.WAITING;
238
+ stakingStatus = EarningStatus.WAITING;
236
239
  }
237
240
  }
238
241
  ledger.unlocking.forEach(unlockingChunk => {
@@ -293,7 +296,7 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
293
296
  return {
294
297
  chain,
295
298
  type: StakingType.NOMINATED,
296
- status: StakingStatus.NOT_STAKING,
299
+ status: EarningStatus.NOT_STAKING,
297
300
  address: address,
298
301
  activeStake: '0',
299
302
  nominations: [],
@@ -306,7 +309,7 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
306
309
  if (nominations) {
307
310
  const validatorList = nominations.targets;
308
311
  await Promise.all(validatorList.map(async validatorAddress => {
309
- let nominationStatus = StakingStatus.NOT_EARNING;
312
+ let nominationStatus = EarningStatus.NOT_EARNING;
310
313
  const [[identity], _eraStaker] = await Promise.all([parseIdentity(chainApi, validatorAddress), chainApi.api.query.staking.erasStakers(currentEra, validatorAddress)]);
311
314
  const eraStaker = _eraStaker.toPrimitive();
312
315
  const sortedNominators = eraStaker.others.sort((a, b) => {
@@ -317,10 +320,10 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
317
320
  });
318
321
  if (!topNominators.includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
319
322
  // if nominator has target but not in nominator list
320
- nominationStatus = StakingStatus.WAITING;
323
+ nominationStatus = EarningStatus.WAITING;
321
324
  } else if (topNominators.slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator).includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
322
325
  // if address in top nominators
323
- nominationStatus = StakingStatus.EARNING_REWARD;
326
+ nominationStatus = EarningStatus.EARNING_REWARD;
324
327
  }
325
328
  nominationList.push({
326
329
  chain,
@@ -332,20 +335,20 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
332
335
  }));
333
336
  }
334
337
 
335
- let stakingStatus = StakingStatus.NOT_EARNING;
338
+ let stakingStatus = EarningStatus.NOT_EARNING;
336
339
  const bnActiveStake = new BN(activeStake);
337
340
  let waitingNominationCount = 0;
338
341
  if (bnActiveStake.gte(minStake)) {
339
342
  for (const nomination of nominationList) {
340
- if (nomination.status === StakingStatus.EARNING_REWARD) {
343
+ if (nomination.status === EarningStatus.EARNING_REWARD) {
341
344
  // only need 1 earning nomination to count
342
- stakingStatus = StakingStatus.EARNING_REWARD;
343
- } else if (nomination.status === StakingStatus.WAITING) {
345
+ stakingStatus = EarningStatus.EARNING_REWARD;
346
+ } else if (nomination.status === EarningStatus.WAITING) {
344
347
  waitingNominationCount += 1;
345
348
  }
346
349
  }
347
350
  if (waitingNominationCount === nominationList.length) {
348
- stakingStatus = StakingStatus.WAITING;
351
+ stakingStatus = EarningStatus.WAITING;
349
352
  }
350
353
  }
351
354
  ledger.unlocking.forEach(unlockingChunk => {
@@ -381,7 +384,7 @@ export async function subscribeRelayChainPoolMemberMetadata(chainInfo, address,
381
384
  const poolMetadata = _poolMetadata.toPrimitive();
382
385
  const currentEra = _currentEra.toString();
383
386
  const nominations = _nominations.toJSON();
384
- let stakingStatus = StakingStatus.NOT_EARNING;
387
+ let stakingStatus = EarningStatus.NOT_EARNING;
385
388
  const getPoolName = () => {
386
389
  if (poolMetadata.isUtf8) {
387
390
  return poolMetadata.toUtf8();
@@ -404,7 +407,7 @@ export async function subscribeRelayChainPoolMemberMetadata(chainInfo, address,
404
407
  }).slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator);
405
408
  if (topNominators.includes(reformatAddress(poolStashAccount, _getChainSubstrateAddressPrefix(chainInfo)))) {
406
409
  // if address in top nominators
407
- stakingStatus = StakingStatus.EARNING_REWARD;
410
+ stakingStatus = EarningStatus.EARNING_REWARD;
408
411
  }
409
412
  }));
410
413
  }
@@ -439,7 +442,7 @@ export async function subscribeRelayChainPoolMemberMetadata(chainInfo, address,
439
442
  });
440
443
  const bnActiveStake = new BN(poolMemberInfo.points.toString());
441
444
  if (!bnActiveStake.gt(BN_ZERO)) {
442
- stakingStatus = StakingStatus.NOT_EARNING;
445
+ stakingStatus = EarningStatus.NOT_EARNING;
443
446
  }
444
447
  return {
445
448
  chain: chainInfo.slug,
@@ -470,14 +473,14 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
470
473
  chain: chainInfo.slug,
471
474
  type: StakingType.POOLED,
472
475
  address,
473
- status: StakingStatus.NOT_STAKING,
476
+ status: EarningStatus.NOT_STAKING,
474
477
  activeStake: '0',
475
478
  nominations: [],
476
479
  // can only join 1 pool at a time
477
480
  unstakings: []
478
481
  };
479
482
  }
480
- let stakingStatus = StakingStatus.NOT_EARNING;
483
+ let stakingStatus = EarningStatus.NOT_EARNING;
481
484
  const _poolMetadata = await chainApi.api.query.nominationPools.metadata(poolMemberInfo.poolId);
482
485
  const poolMetadata = _poolMetadata.toPrimitive();
483
486
  const getPoolName = () => {
@@ -505,7 +508,7 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
505
508
  }).slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator);
506
509
  if (topNominators.includes(reformatAddress(poolStashAccount, _getChainSubstrateAddressPrefix(chainInfo)))) {
507
510
  // if address in top nominators
508
- stakingStatus = StakingStatus.EARNING_REWARD;
511
+ stakingStatus = EarningStatus.EARNING_REWARD;
509
512
  }
510
513
  }));
511
514
  }
@@ -532,7 +535,7 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
532
535
  });
533
536
  const bnActiveStake = new BN(poolMemberInfo.points.toString());
534
537
  if (!bnActiveStake.gt(BN_ZERO)) {
535
- stakingStatus = StakingStatus.NOT_EARNING;
538
+ stakingStatus = EarningStatus.NOT_EARNING;
536
539
  }
537
540
  return {
538
541
  chain: chainInfo.slug,