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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/background/KoniTypes.d.ts +95 -68
  2. package/background/KoniTypes.js +16 -13
  3. package/background/errors/TransactionError.js +9 -0
  4. package/cjs/background/KoniTypes.js +17 -16
  5. package/cjs/background/errors/TransactionError.js +9 -0
  6. package/cjs/constants/index.js +19 -4
  7. package/cjs/koni/api/nft/config.js +33 -23
  8. package/cjs/koni/api/nft/index.js +14 -0
  9. package/cjs/koni/api/nft/nft.js +1 -22
  10. package/cjs/koni/api/nft/ordinal_nft/constants.js +21 -0
  11. package/cjs/koni/api/nft/ordinal_nft/index.js +121 -0
  12. package/cjs/koni/api/nft/ordinal_nft/utils.js +41 -0
  13. package/cjs/koni/api/staking/bonding/amplitude.js +17 -15
  14. package/cjs/koni/api/staking/bonding/astar.js +11 -10
  15. package/cjs/koni/api/staking/bonding/index.js +4 -1
  16. package/cjs/koni/api/staking/bonding/paraChain.js +25 -23
  17. package/cjs/koni/api/staking/bonding/relayChain.js +48 -45
  18. package/cjs/koni/api/staking/bonding/utils.js +104 -86
  19. package/cjs/koni/api/staking/index.js +6 -5
  20. package/cjs/koni/api/staking/paraChain.js +6 -5
  21. package/cjs/koni/api/staking/relayChain.js +3 -2
  22. package/cjs/koni/api/yield/helper/utils.js +46 -0
  23. package/cjs/koni/background/cron.js +11 -1
  24. package/cjs/koni/background/handlers/Extension.js +362 -69
  25. package/cjs/koni/background/handlers/State.js +51 -3
  26. package/cjs/koni/background/handlers/index.js +4 -2
  27. package/cjs/koni/background/subscription.js +95 -37
  28. package/cjs/services/campaign-service/index.js +9 -6
  29. package/cjs/services/chain-service/constants.js +2 -16
  30. package/cjs/services/chain-service/utils.js +7 -1
  31. package/cjs/services/earning-service/constants/chains.js +29 -0
  32. package/cjs/services/earning-service/constants/index.js +27 -0
  33. package/cjs/services/earning-service/constants/step.js +18 -0
  34. package/cjs/services/earning-service/handlers/base.js +232 -0
  35. package/cjs/services/earning-service/handlers/index.js +60 -0
  36. package/cjs/services/earning-service/handlers/lending/base.js +20 -0
  37. package/cjs/services/earning-service/handlers/lending/index.js +13 -0
  38. package/cjs/services/earning-service/handlers/lending/interlay.js +184 -0
  39. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +217 -0
  40. package/cjs/services/earning-service/handlers/liquid-staking/base.js +43 -0
  41. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +283 -0
  42. package/cjs/services/earning-service/handlers/liquid-staking/index.js +34 -0
  43. package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +196 -0
  44. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +409 -0
  45. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +382 -0
  46. package/cjs/services/earning-service/handlers/native-staking/astar.js +459 -0
  47. package/cjs/services/earning-service/handlers/native-staking/base-para.js +137 -0
  48. package/cjs/services/earning-service/handlers/native-staking/base.js +159 -0
  49. package/cjs/services/earning-service/handlers/native-staking/index.js +34 -0
  50. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +383 -0
  51. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +542 -0
  52. package/cjs/services/earning-service/handlers/nomination-pool/index.js +541 -0
  53. package/cjs/services/earning-service/handlers/special.js +411 -0
  54. package/cjs/services/earning-service/service.js +387 -0
  55. package/cjs/services/earning-service/utils/index.js +128 -0
  56. package/cjs/services/event-service/index.js +4 -0
  57. package/cjs/services/keyring-service/index.js +14 -2
  58. package/cjs/services/migration-service/scripts/DeleteEarningData.js +21 -0
  59. package/cjs/services/migration-service/scripts/EnableEarningChains.js +21 -0
  60. package/cjs/services/migration-service/scripts/MigrateLedgerAccount.js +1 -1
  61. package/cjs/services/migration-service/scripts/MigrateTransactionHistory.js +1 -1
  62. package/cjs/services/migration-service/scripts/databases/MigrateEarningHistory.js +21 -0
  63. package/cjs/services/migration-service/scripts/databases/MigrateEarningVersion.js +21 -0
  64. package/cjs/services/migration-service/scripts/index.js +7 -1
  65. package/cjs/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +149 -0
  66. package/cjs/services/mint-campaign-service/campaigns/index.js +13 -0
  67. package/cjs/services/mint-campaign-service/constants.js +11 -0
  68. package/cjs/services/mint-campaign-service/index.js +18 -0
  69. package/cjs/services/notification-service/NotificationService.js +1 -1
  70. package/cjs/services/storage-service/DatabaseService.js +51 -0
  71. package/cjs/services/storage-service/databases/index.js +4 -0
  72. package/cjs/services/storage-service/db-stores/NominatorMetadata.js +3 -3
  73. package/cjs/services/storage-service/db-stores/YieldPoolStore.js +36 -0
  74. package/cjs/services/storage-service/db-stores/YieldPositionStore.js +65 -0
  75. package/cjs/services/subscan-service/index.js +16 -0
  76. package/cjs/services/transaction-service/event-parser/index.js +58 -0
  77. package/cjs/services/transaction-service/helpers/index.js +3 -1
  78. package/cjs/services/transaction-service/index.js +185 -74
  79. package/cjs/services/transaction-service/utils.js +1 -0
  80. package/cjs/types/campaigns/index.js +16 -0
  81. package/cjs/types/campaigns/unlock-dot.js +1 -0
  82. package/cjs/types/index.js +44 -0
  83. package/cjs/types/ordinal.js +1 -0
  84. package/cjs/types/transaction.js +1 -0
  85. package/cjs/types/yield/actions/index.js +27 -0
  86. package/cjs/types/yield/actions/join/index.js +38 -0
  87. package/cjs/types/yield/actions/join/step.js +47 -0
  88. package/cjs/types/yield/actions/join/submit.js +1 -0
  89. package/cjs/types/yield/actions/join/validate.js +16 -0
  90. package/cjs/types/yield/actions/others.js +1 -0
  91. package/cjs/types/yield/index.js +27 -0
  92. package/cjs/types/yield/info/account/index.js +49 -0
  93. package/cjs/types/yield/info/account/info.js +1 -0
  94. package/cjs/types/yield/info/account/reward.js +1 -0
  95. package/cjs/types/yield/info/account/target.js +32 -0
  96. package/cjs/types/yield/info/account/unstake.js +27 -0
  97. package/cjs/types/yield/info/base.js +41 -0
  98. package/cjs/types/yield/info/chain/index.js +27 -0
  99. package/cjs/types/yield/info/chain/info.js +1 -0
  100. package/cjs/types/yield/info/chain/target.js +1 -0
  101. package/cjs/types/yield/info/index.js +49 -0
  102. package/cjs/types/yield/info/pallet.js +15 -0
  103. package/cjs/utils/fetchStaticData.js +2 -1
  104. package/cjs/utils/index.js +89 -1
  105. package/cjs/utils/object.js +12 -0
  106. package/cjs/utils/yield/index.js +3 -0
  107. package/constants/index.d.ts +6 -1
  108. package/constants/index.js +6 -1
  109. package/koni/api/nft/config.js +33 -23
  110. package/koni/api/nft/index.js +15 -1
  111. package/koni/api/nft/nft.js +2 -23
  112. package/koni/api/nft/ordinal_nft/constants.d.ts +9 -0
  113. package/koni/api/nft/ordinal_nft/constants.js +12 -0
  114. package/koni/api/nft/ordinal_nft/index.d.ts +8 -0
  115. package/koni/api/nft/ordinal_nft/index.js +114 -0
  116. package/koni/api/nft/ordinal_nft/utils.d.ts +2 -0
  117. package/koni/api/nft/ordinal_nft/utils.js +33 -0
  118. package/koni/api/staking/bonding/amplitude.js +11 -9
  119. package/koni/api/staking/bonding/astar.js +9 -8
  120. package/koni/api/staking/bonding/index.d.ts +1 -1
  121. package/koni/api/staking/bonding/index.js +5 -1
  122. package/koni/api/staking/bonding/paraChain.js +12 -10
  123. package/koni/api/staking/bonding/relayChain.d.ts +2 -2
  124. package/koni/api/staking/bonding/relayChain.js +33 -30
  125. package/koni/api/staking/bonding/utils.d.ts +15 -38
  126. package/koni/api/staking/bonding/utils.js +85 -69
  127. package/koni/api/staking/index.js +2 -1
  128. package/koni/api/staking/paraChain.js +7 -6
  129. package/koni/api/staking/relayChain.js +4 -3
  130. package/koni/api/yield/helper/utils.d.ts +10 -0
  131. package/koni/api/yield/helper/utils.js +32 -0
  132. package/koni/background/cron.d.ts +1 -0
  133. package/koni/background/cron.js +12 -2
  134. package/koni/background/handlers/Extension.d.ts +17 -1
  135. package/koni/background/handlers/Extension.js +321 -30
  136. package/koni/background/handlers/State.d.ts +18 -2
  137. package/koni/background/handlers/State.js +50 -3
  138. package/koni/background/handlers/index.js +4 -2
  139. package/koni/background/subscription.d.ts +6 -1
  140. package/koni/background/subscription.js +97 -38
  141. package/package.json +316 -3
  142. package/services/campaign-service/index.js +9 -6
  143. package/services/chain-service/constants.d.ts +0 -11
  144. package/services/chain-service/constants.js +1 -14
  145. package/services/chain-service/utils.d.ts +1 -0
  146. package/services/chain-service/utils.js +5 -1
  147. package/services/earning-service/constants/abis/compound_finance_v2_abi.json +1235 -0
  148. package/services/earning-service/constants/abis/st_liquid_token_abi.json +1355 -0
  149. package/services/earning-service/constants/chains.d.ts +14 -0
  150. package/services/earning-service/constants/chains.js +21 -0
  151. package/services/earning-service/constants/index.d.ts +2 -0
  152. package/services/earning-service/constants/index.js +5 -0
  153. package/services/earning-service/constants/step.d.ts +3 -0
  154. package/services/earning-service/constants/step.js +10 -0
  155. package/services/earning-service/handlers/base.d.ts +112 -0
  156. package/services/earning-service/handlers/base.js +226 -0
  157. package/services/earning-service/handlers/index.d.ts +5 -0
  158. package/services/earning-service/handlers/index.js +8 -0
  159. package/services/earning-service/handlers/lending/base.d.ts +6 -0
  160. package/services/earning-service/handlers/lending/base.js +12 -0
  161. package/services/earning-service/handlers/lending/index.d.ts +1 -0
  162. package/services/earning-service/handlers/lending/index.js +4 -0
  163. package/services/earning-service/handlers/lending/interlay.d.ts +23 -0
  164. package/services/earning-service/handlers/lending/interlay.js +176 -0
  165. package/services/earning-service/handlers/liquid-staking/acala.d.ts +26 -0
  166. package/services/earning-service/handlers/liquid-staking/acala.js +209 -0
  167. package/services/earning-service/handlers/liquid-staking/base.d.ts +9 -0
  168. package/services/earning-service/handlers/liquid-staking/base.js +35 -0
  169. package/services/earning-service/handlers/liquid-staking/bifrost.d.ts +45 -0
  170. package/services/earning-service/handlers/liquid-staking/bifrost.js +272 -0
  171. package/services/earning-service/handlers/liquid-staking/index.d.ts +4 -0
  172. package/services/earning-service/handlers/liquid-staking/index.js +7 -0
  173. package/services/earning-service/handlers/liquid-staking/parallel.d.ts +25 -0
  174. package/services/earning-service/handlers/liquid-staking/parallel.js +188 -0
  175. package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +34 -0
  176. package/services/earning-service/handlers/liquid-staking/stella-swap.js +399 -0
  177. package/services/earning-service/handlers/native-staking/amplitude.d.ts +22 -0
  178. package/services/earning-service/handlers/native-staking/amplitude.js +373 -0
  179. package/services/earning-service/handlers/native-staking/astar.d.ts +19 -0
  180. package/services/earning-service/handlers/native-staking/astar.js +449 -0
  181. package/services/earning-service/handlers/native-staking/base-para.d.ts +11 -0
  182. package/services/earning-service/handlers/native-staking/base-para.js +129 -0
  183. package/services/earning-service/handlers/native-staking/base.d.ts +21 -0
  184. package/services/earning-service/handlers/native-staking/base.js +150 -0
  185. package/services/earning-service/handlers/native-staking/index.d.ts +4 -0
  186. package/services/earning-service/handlers/native-staking/index.js +7 -0
  187. package/services/earning-service/handlers/native-staking/para-chain.d.ts +15 -0
  188. package/services/earning-service/handlers/native-staking/para-chain.js +375 -0
  189. package/services/earning-service/handlers/native-staking/relay-chain.d.ts +21 -0
  190. package/services/earning-service/handlers/native-staking/relay-chain.js +533 -0
  191. package/services/earning-service/handlers/nomination-pool/index.d.ts +35 -0
  192. package/services/earning-service/handlers/nomination-pool/index.js +531 -0
  193. package/services/earning-service/handlers/special.d.ts +56 -0
  194. package/services/earning-service/handlers/special.js +403 -0
  195. package/services/earning-service/service.d.ts +45 -0
  196. package/services/earning-service/service.js +379 -0
  197. package/services/earning-service/utils/index.d.ts +18 -0
  198. package/services/earning-service/utils/index.js +112 -0
  199. package/services/event-service/index.d.ts +1 -0
  200. package/services/event-service/index.js +4 -0
  201. package/services/event-service/types.d.ts +8 -0
  202. package/services/keyring-service/index.d.ts +2 -1
  203. package/services/keyring-service/index.js +14 -2
  204. package/services/migration-service/scripts/DeleteEarningData.d.ts +4 -0
  205. package/services/migration-service/scripts/DeleteEarningData.js +13 -0
  206. package/services/migration-service/scripts/EnableEarningChains.d.ts +4 -0
  207. package/services/migration-service/scripts/EnableEarningChains.js +13 -0
  208. package/services/migration-service/scripts/MigrateLedgerAccount.js +1 -1
  209. package/services/migration-service/scripts/MigrateTransactionHistory.js +1 -1
  210. package/services/migration-service/scripts/databases/MigrateEarningHistory.d.ts +4 -0
  211. package/services/migration-service/scripts/databases/MigrateEarningHistory.js +13 -0
  212. package/services/migration-service/scripts/databases/MigrateEarningVersion.d.ts +4 -0
  213. package/services/migration-service/scripts/databases/MigrateEarningVersion.js +13 -0
  214. package/services/migration-service/scripts/index.js +7 -1
  215. package/services/mint-campaign-service/campaigns/UnlockDotCampaign.d.ts +13 -0
  216. package/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +139 -0
  217. package/services/mint-campaign-service/campaigns/index.d.ts +1 -0
  218. package/services/mint-campaign-service/campaigns/index.js +4 -0
  219. package/services/mint-campaign-service/constants.d.ts +1 -0
  220. package/services/mint-campaign-service/constants.js +4 -0
  221. package/services/mint-campaign-service/index.d.ts +7 -0
  222. package/services/mint-campaign-service/index.js +11 -0
  223. package/services/notification-service/NotificationService.js +1 -1
  224. package/services/storage-service/DatabaseService.d.ts +18 -1
  225. package/services/storage-service/DatabaseService.js +51 -0
  226. package/services/storage-service/databases/index.d.ts +3 -1
  227. package/services/storage-service/databases/index.js +4 -0
  228. package/services/storage-service/db-stores/NominatorMetadata.js +3 -3
  229. package/services/storage-service/db-stores/YieldPoolStore.d.ts +10 -0
  230. package/services/storage-service/db-stores/YieldPoolStore.js +28 -0
  231. package/services/storage-service/db-stores/YieldPositionStore.d.ts +9 -0
  232. package/services/storage-service/db-stores/YieldPositionStore.js +57 -0
  233. package/services/subscan-service/index.d.ts +3 -2
  234. package/services/subscan-service/index.js +15 -0
  235. package/services/subscan-service/types.d.ts +20 -0
  236. package/services/transaction-service/event-parser/index.d.ts +3 -1
  237. package/services/transaction-service/event-parser/index.js +57 -1
  238. package/services/transaction-service/helpers/index.js +3 -1
  239. package/services/transaction-service/index.d.ts +4 -15
  240. package/services/transaction-service/index.js +183 -72
  241. package/services/transaction-service/types.d.ts +2 -0
  242. package/services/transaction-service/utils.js +1 -0
  243. package/types/campaigns/index.d.ts +1 -0
  244. package/types/campaigns/index.js +4 -0
  245. package/types/campaigns/unlock-dot.d.ts +71 -0
  246. package/types/campaigns/unlock-dot.js +1 -0
  247. package/types/index.d.ts +5 -0
  248. package/types/index.js +5 -1
  249. package/types/ordinal.d.ts +69 -0
  250. package/types/ordinal.js +1 -0
  251. package/types/transaction.d.ts +3 -0
  252. package/types/transaction.js +1 -0
  253. package/types/yield/actions/index.d.ts +2 -0
  254. package/types/yield/actions/index.js +5 -0
  255. package/types/yield/actions/join/index.d.ts +3 -0
  256. package/types/yield/actions/join/index.js +6 -0
  257. package/types/yield/actions/join/step.d.ts +94 -0
  258. package/types/yield/actions/join/step.js +46 -0
  259. package/types/yield/actions/join/submit.d.ts +53 -0
  260. package/types/yield/actions/join/submit.js +1 -0
  261. package/types/yield/actions/join/validate.d.ts +18 -0
  262. package/types/yield/actions/join/validate.js +10 -0
  263. package/types/yield/actions/others.d.ts +63 -0
  264. package/types/yield/actions/others.js +1 -0
  265. package/types/yield/index.d.ts +2 -0
  266. package/types/yield/index.js +5 -0
  267. package/types/yield/info/account/index.d.ts +4 -0
  268. package/types/yield/info/account/index.js +7 -0
  269. package/types/yield/info/account/info.d.ts +92 -0
  270. package/types/yield/info/account/info.js +1 -0
  271. package/types/yield/info/account/reward.d.ts +45 -0
  272. package/types/yield/info/account/reward.js +1 -0
  273. package/types/yield/info/account/target.d.ts +43 -0
  274. package/types/yield/info/account/target.js +27 -0
  275. package/types/yield/info/account/unstake.d.ts +31 -0
  276. package/types/yield/info/account/unstake.js +22 -0
  277. package/types/yield/info/base.d.ts +45 -0
  278. package/types/yield/info/base.js +36 -0
  279. package/types/yield/info/chain/index.d.ts +2 -0
  280. package/types/yield/info/chain/index.js +5 -0
  281. package/types/yield/info/chain/info.d.ts +243 -0
  282. package/types/yield/info/chain/info.js +1 -0
  283. package/types/yield/info/chain/target.d.ts +37 -0
  284. package/types/yield/info/chain/target.js +1 -0
  285. package/types/yield/info/index.d.ts +4 -0
  286. package/types/yield/info/index.js +7 -0
  287. package/types/yield/info/pallet.d.ts +143 -0
  288. package/types/yield/info/pallet.js +9 -0
  289. package/utils/fetchStaticData.js +2 -1
  290. package/utils/index.d.ts +5 -0
  291. package/utils/index.js +53 -1
  292. package/utils/object.d.ts +1 -0
  293. package/utils/object.js +6 -0
@@ -0,0 +1,14 @@
1
+ export declare const _STAKING_CHAIN_GROUP: {
2
+ relay: string[];
3
+ para: string[];
4
+ astar: string[];
5
+ amplitude: string[];
6
+ kilt: string[];
7
+ nominationPool: string[];
8
+ bifrost: string[];
9
+ aleph: string[];
10
+ ternoa: string[];
11
+ liquidStaking: string[];
12
+ lending: string[];
13
+ };
14
+ export declare const ST_LIQUID_TOKEN_ABI: Record<string, any>;
@@ -0,0 +1,21 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export const _STAKING_CHAIN_GROUP = {
5
+ relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'ternoa_alphanet', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet'],
6
+ para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari'],
7
+ astar: ['astar', 'shiden', 'shibuya'],
8
+ amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum'],
9
+ // amplitude and kilt only share some common logic
10
+ kilt: ['kilt', 'kilt_peregrine'],
11
+ nominationPool: ['polkadot', 'kusama', 'westend', 'alephTest', 'aleph', 'kate', 'vara_network', 'goldberg_testnet'],
12
+ bifrost: ['bifrost', 'bifrost_testnet'],
13
+ aleph: ['aleph', 'alephTest'],
14
+ // A0 has distinct tokenomics
15
+ ternoa: ['ternoa', 'ternoa_alphanet'],
16
+ liquidStaking: ['bifrost_dot', 'acala', 'parallel', 'moonbeam'],
17
+ lending: ['interlay']
18
+ };
19
+
20
+ // eslint-disable-next-line @typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-assignment
21
+ export const ST_LIQUID_TOKEN_ABI = require("./abis/st_liquid_token_abi.json");
@@ -0,0 +1,2 @@
1
+ export * from './chains';
2
+ export * from './step';
@@ -0,0 +1,5 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export * from "./chains.js";
5
+ export * from "./step.js";
@@ -0,0 +1,3 @@
1
+ import { YieldStepDetail } from '@subwallet/extension-base/types';
2
+ export declare const DEFAULT_YIELD_FIRST_STEP: YieldStepDetail;
3
+ export declare const fakeAddress = "15MLn9YQaHZ4GMkhK3qXqR5iGGSdULyJ995ctjeBgFRseyi6";
@@ -0,0 +1,10 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { YieldStepType } from '@subwallet/extension-base/types';
5
+ export const DEFAULT_YIELD_FIRST_STEP = {
6
+ id: 0,
7
+ name: 'Fill information',
8
+ type: YieldStepType.DEFAULT
9
+ };
10
+ export const fakeAddress = '15MLn9YQaHZ4GMkhK3qXqR5iGGSdULyJ995ctjeBgFRseyi6';
@@ -0,0 +1,112 @@
1
+ import { _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
2
+ import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
3
+ import { ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
4
+ import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
5
+ import { _EvmApi, _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
6
+ import { BasePoolInfo, BaseYieldPoolMetadata, EarningRewardHistoryItem, EarningRewardItem, HandleYieldStepData, OptimalYieldPath, OptimalYieldPathParams, RequestEarlyValidateYield, ResponseEarlyValidateYield, StakeCancelWithdrawalParams, SubmitYieldJoinData, TransactionData, UnstakingInfo, YieldPoolInfo, YieldPoolMethodInfo, YieldPoolTarget, YieldPoolType, YieldPositionInfo, YieldStepBaseInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
7
+ /**
8
+ * @class BasePoolHandler
9
+ * @description Base pool handler
10
+ * */
11
+ export default abstract class BasePoolHandler {
12
+ /** Koni state */
13
+ protected readonly state: KoniState;
14
+ /** Pool's chain */
15
+ readonly chain: string;
16
+ /** Pool's logo */
17
+ protected _logo: string;
18
+ /** Pool's slug */
19
+ abstract slug: string;
20
+ /** Pool's type */
21
+ abstract type: YieldPoolType;
22
+ /** Pool's name */
23
+ protected abstract name: string;
24
+ /** Pool's short name */
25
+ protected abstract shortName: string;
26
+ /** Pool's transaction type */
27
+ readonly transactionChainType: ChainType;
28
+ /** Pool's available method */
29
+ protected abstract readonly availableMethod: YieldPoolMethodInfo;
30
+ /**
31
+ * @constructor
32
+ * @param {KoniState} state - Koni state
33
+ * @param {string} chain - Pool's chain
34
+ * */
35
+ protected constructor(state: KoniState, chain: string);
36
+ get logo(): string;
37
+ get group(): string;
38
+ get isActive(): boolean;
39
+ protected get substrateApi(): _SubstrateApi;
40
+ protected get evmApi(): _EvmApi;
41
+ get chainInfo(): _ChainInfo;
42
+ protected get nativeToken(): _ChainAsset;
43
+ protected get baseInfo(): Omit<BasePoolInfo, 'type'>;
44
+ protected abstract getDescription(amount?: string): string;
45
+ protected get maintainBalance(): string;
46
+ protected get metadataInfo(): Omit<BaseYieldPoolMetadata, 'description'>;
47
+ /** Can mint when haven't enough native token (use input token for fee) */
48
+ get isPoolSupportAlternativeFee(): boolean;
49
+ getPoolInfo(): Promise<YieldPoolInfo | undefined>;
50
+ getPoolPosition(address: string): Promise<YieldPositionInfo | undefined>;
51
+ /** Subscribe pool info */
52
+ abstract subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
53
+ /** Subscribe pool position */
54
+ abstract subscribePoolPosition(useAddresses: string[], callback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
55
+ /** Get pool reward */
56
+ abstract getPoolReward(useAddresses: string[], callback: (rs: EarningRewardItem) => void): Promise<VoidFunction>;
57
+ /** Get pool reward history */
58
+ abstract getPoolRewardHistory(useAddresses: string[], callback: (rs: EarningRewardHistoryItem) => void): Promise<VoidFunction>;
59
+ /** Get pool target */
60
+ abstract getPoolTargets(): Promise<YieldPoolTarget[]>;
61
+ earlyValidate(request: RequestEarlyValidateYield): Promise<ResponseEarlyValidateYield>;
62
+ /**
63
+ * @function firstStepFee
64
+ * */
65
+ protected get firstStepFee(): YieldTokenBaseInfo;
66
+ /**
67
+ * @function defaultSubmitStep
68
+ * @description Default submit step data
69
+ * */
70
+ protected abstract get defaultSubmitStep(): YieldStepBaseInfo;
71
+ /**
72
+ * @async
73
+ * @function getTokenApproveStep
74
+ * @param {OptimalYieldPathParams} params - base param to join pool
75
+ * @description Generate token approve step data
76
+ * */
77
+ protected getTokenApproveStep(params: OptimalYieldPathParams): Promise<YieldStepBaseInfo | undefined>;
78
+ /**
79
+ * @async
80
+ * @function getXcmStep
81
+ * @param {OptimalYieldPathParams} params - base param to join pool
82
+ * @description Generate token approve step data
83
+ * */
84
+ protected getXcmStep(params: OptimalYieldPathParams): Promise<YieldStepBaseInfo | undefined>;
85
+ /**
86
+ * @async
87
+ * @function getSubmitStep
88
+ * @param {OptimalYieldPathParams} params - base param to join pool
89
+ * @description Generate token approve step data
90
+ * */
91
+ protected abstract getSubmitStep(params: OptimalYieldPathParams): Promise<YieldStepBaseInfo>;
92
+ /** Generate the optimal steps to join pool */
93
+ generateOptimalPath(params: OptimalYieldPathParams): Promise<OptimalYieldPath>;
94
+ /** Validate param to join the pool */
95
+ abstract validateYieldJoin(data: SubmitYieldJoinData, path: OptimalYieldPath): Promise<TransactionError[]>;
96
+ /** Create `transaction` to join the pool step-by-step */
97
+ abstract handleYieldJoin(data: SubmitYieldJoinData, path: OptimalYieldPath, currentStep: number): Promise<HandleYieldStepData>;
98
+ /** Validate param to leave the pool */
99
+ abstract validateYieldLeave(amount: string, address: string, fastLeave: boolean, selectedTarget?: string): Promise<TransactionError[]>;
100
+ /** Create `transaction` to leave the pool normal (default unstake) */
101
+ protected abstract handleYieldUnstake(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
102
+ /** Create `transaction` to leave the pool fast (swap token) */
103
+ protected abstract handleYieldRedeem(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
104
+ /** Create `transaction` to leave the pool */
105
+ handleYieldLeave(fastLeave: boolean, amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
106
+ /** Create `transaction` to withdraw unstaked amount */
107
+ abstract handleYieldWithdraw(address: string, unstakingInfo: UnstakingInfo): Promise<TransactionData>;
108
+ /** Create `transaction` to cancel unstake */
109
+ abstract handleYieldCancelUnstake(params: StakeCancelWithdrawalParams): Promise<TransactionData>;
110
+ /** Create `transaction` to claim reward */
111
+ abstract handleYieldClaimReward(address: string, bondReward?: boolean): Promise<TransactionData>;
112
+ }
@@ -0,0 +1,226 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { ChainType } from '@subwallet/extension-base/background/KoniTypes';
5
+ import { DEFAULT_YIELD_FIRST_STEP } from '@subwallet/extension-base/services/earning-service/constants';
6
+ import { BN, BN_TEN } from '@polkadot/util';
7
+
8
+ /**
9
+ * @class BasePoolHandler
10
+ * @description Base pool handler
11
+ * */
12
+ export default class BasePoolHandler {
13
+ /** Koni state */
14
+
15
+ /** Pool's chain */
16
+
17
+ /** Pool's logo */
18
+
19
+ /** Pool's slug */
20
+
21
+ /** Pool's type */
22
+
23
+ /** Pool's name */
24
+
25
+ /** Pool's short name */
26
+
27
+ /** Pool's transaction type */
28
+ transactionChainType = ChainType.SUBSTRATE;
29
+
30
+ /** Pool's available method */
31
+
32
+ /**
33
+ * @constructor
34
+ * @param {KoniState} state - Koni state
35
+ * @param {string} chain - Pool's chain
36
+ * */
37
+ constructor(state, chain) {
38
+ this.state = state;
39
+ this.chain = chain;
40
+ this._logo = chain;
41
+ }
42
+ get logo() {
43
+ return this._logo;
44
+ }
45
+ get group() {
46
+ const groupSlug = this.nativeToken.multiChainAsset;
47
+ return groupSlug || this.nativeToken.slug;
48
+ }
49
+ get isActive() {
50
+ return this.state.activeChainSlugs.includes(this.chain);
51
+ }
52
+ get substrateApi() {
53
+ return this.state.getSubstrateApi(this.chain);
54
+ }
55
+ get evmApi() {
56
+ return this.state.getEvmApi(this.chain);
57
+ }
58
+ get chainInfo() {
59
+ return this.state.getChainInfo(this.chain);
60
+ }
61
+ get nativeToken() {
62
+ return this.state.getNativeTokenInfo(this.chain);
63
+ }
64
+ get baseInfo() {
65
+ return {
66
+ group: this.group,
67
+ chain: this.chain,
68
+ slug: this.slug
69
+ };
70
+ }
71
+ get maintainBalance() {
72
+ const decimals = this.nativeToken.decimals || 0;
73
+ const defaultMaintainBalance = new BN(1).mul(BN_TEN.pow(new BN(decimals)));
74
+ const ed = new BN(this.nativeToken.minAmount || '0');
75
+ const maintainBalance = ed.gte(defaultMaintainBalance) ? ed.mul(new BN(1.5)) : defaultMaintainBalance;
76
+ return maintainBalance.toString();
77
+ }
78
+ get metadataInfo() {
79
+ return {
80
+ name: this.name,
81
+ shortName: this.shortName,
82
+ logo: this.logo,
83
+ inputAsset: this.nativeToken.slug,
84
+ isAvailable: true,
85
+ maintainAsset: this.nativeToken.slug,
86
+ maintainBalance: this.maintainBalance,
87
+ availableMethod: this.availableMethod
88
+ };
89
+ }
90
+
91
+ /** Can mint when haven't enough native token (use input token for fee) */
92
+ get isPoolSupportAlternativeFee() {
93
+ return false;
94
+ }
95
+ async getPoolInfo() {
96
+ return this.state.dbService.getYieldPool(this.slug);
97
+ }
98
+ async getPoolPosition(address) {
99
+ return this.state.dbService.getYieldPositionByAddressAndSlug(address, this.slug);
100
+ }
101
+
102
+ /* Subscribe data */
103
+
104
+ /** Subscribe pool info */
105
+
106
+ /* Subscribe data */
107
+
108
+ /* Join action */
109
+
110
+ /* Early validate */
111
+
112
+ earlyValidate(request) {
113
+ return Promise.resolve({
114
+ passed: false
115
+ });
116
+ }
117
+
118
+ /* Early validate */
119
+
120
+ /* Generate steps */
121
+
122
+ /**
123
+ * @function firstStepFee
124
+ * */
125
+ get firstStepFee() {
126
+ return {
127
+ slug: ''
128
+ };
129
+ }
130
+
131
+ /**
132
+ * @function defaultSubmitStep
133
+ * @description Default submit step data
134
+ * */
135
+
136
+ /**
137
+ * @async
138
+ * @function getTokenApproveStep
139
+ * @param {OptimalYieldPathParams} params - base param to join pool
140
+ * @description Generate token approve step data
141
+ * */
142
+ async getTokenApproveStep(params) {
143
+ return Promise.resolve(undefined);
144
+ }
145
+
146
+ /**
147
+ * @async
148
+ * @function getXcmStep
149
+ * @param {OptimalYieldPathParams} params - base param to join pool
150
+ * @description Generate token approve step data
151
+ * */
152
+ async getXcmStep(params) {
153
+ return Promise.resolve(undefined);
154
+ }
155
+
156
+ /**
157
+ * @async
158
+ * @function getSubmitStep
159
+ * @param {OptimalYieldPathParams} params - base param to join pool
160
+ * @description Generate token approve step data
161
+ * */
162
+
163
+ /** Generate the optimal steps to join pool */
164
+ async generateOptimalPath(params) {
165
+ const result = {
166
+ totalFee: [this.firstStepFee],
167
+ steps: [DEFAULT_YIELD_FIRST_STEP]
168
+ };
169
+ try {
170
+ const stepFunctions = [this.getTokenApproveStep, this.getXcmStep, this.getSubmitStep];
171
+ for (const stepFunction of stepFunctions) {
172
+ const step = await stepFunction.bind(this, params)();
173
+ if (step) {
174
+ const [info, fee] = step;
175
+ result.steps.push({
176
+ id: result.steps.length,
177
+ ...info
178
+ });
179
+ result.totalFee.push(fee);
180
+ }
181
+ }
182
+ return result;
183
+ } catch (e) {
184
+ const errorMessage = e.message;
185
+ if (errorMessage.includes('network')) {
186
+ result.connectionError = errorMessage.split(' ')[0];
187
+ }
188
+
189
+ /* Submit step */
190
+
191
+ const [step, fee] = this.defaultSubmitStep;
192
+ result.steps.push({
193
+ id: result.steps.length,
194
+ ...step
195
+ });
196
+ result.totalFee.push(fee);
197
+
198
+ /* Submit step */
199
+
200
+ return result;
201
+ }
202
+ }
203
+
204
+ /* Generate steps */
205
+
206
+ /* Validate */
207
+
208
+ /** Validate param to join the pool */
209
+
210
+ /** Create `transaction` to leave the pool */
211
+ async handleYieldLeave(fastLeave, amount, address, selectedTarget) {
212
+ if (fastLeave) {
213
+ return this.handleYieldRedeem(amount, address, selectedTarget);
214
+ } else {
215
+ return this.handleYieldUnstake(amount, address, selectedTarget);
216
+ }
217
+ }
218
+
219
+ /* Leave action */
220
+
221
+ /* Other actions */
222
+
223
+ /** Create `transaction` to withdraw unstaked amount */
224
+
225
+ /* Other actions */
226
+ }
@@ -0,0 +1,5 @@
1
+ export { default as BasePoolHandler } from './base';
2
+ export { default as NominationPoolHandler } from './nomination-pool';
3
+ export * from './lending';
4
+ export * from './liquid-staking';
5
+ export * from './native-staking';
@@ -0,0 +1,8 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export { default as BasePoolHandler } from "./base.js";
5
+ export { default as NominationPoolHandler } from "./nomination-pool/index.js";
6
+ export * from "./lending/index.js";
7
+ export * from "./liquid-staking/index.js";
8
+ export * from "./native-staking/index.js";
@@ -0,0 +1,6 @@
1
+ import { LendingYieldPoolInfo, YieldPoolType } from '@subwallet/extension-base/types';
2
+ import BaseSpecialStakingPoolHandler from '../special';
3
+ export default abstract class BaseLendingPoolHandler extends BaseSpecialStakingPoolHandler {
4
+ readonly type = YieldPoolType.LENDING;
5
+ abstract getPoolStat(): Promise<LendingYieldPoolInfo>;
6
+ }
@@ -0,0 +1,12 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { YieldPoolType } from '@subwallet/extension-base/types';
5
+ import BaseSpecialStakingPoolHandler from "../special.js";
6
+ export default class BaseLendingPoolHandler extends BaseSpecialStakingPoolHandler {
7
+ type = YieldPoolType.LENDING;
8
+
9
+ /* Subscribe pool info */
10
+
11
+ /* Subscribe pool info */
12
+ }
@@ -0,0 +1 @@
1
+ export { default as InterlayLendingPoolHandler } from './interlay';
@@ -0,0 +1,4 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export { default as InterlayLendingPoolHandler } from "./interlay.js";
@@ -0,0 +1,23 @@
1
+ import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
2
+ import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
3
+ import { BaseYieldStepDetail, HandleYieldStepData, LendingYieldPoolInfo, OptimalYieldPath, OptimalYieldPathParams, SubmitYieldJoinData, TransactionData, YieldPoolMethodInfo, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
4
+ import BaseLendingPoolHandler from './base';
5
+ export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
6
+ slug: string;
7
+ protected readonly name: string;
8
+ protected readonly shortName: string;
9
+ protected readonly altInputAsset: string;
10
+ protected readonly derivativeAssets: string[];
11
+ protected readonly inputAsset: string;
12
+ protected readonly rewardAssets: string[];
13
+ protected readonly feeAssets: string[];
14
+ protected readonly availableMethod: YieldPoolMethodInfo;
15
+ constructor(state: KoniState, chain: string);
16
+ protected getDescription(): string;
17
+ getPoolStat(): Promise<LendingYieldPoolInfo>;
18
+ subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
19
+ get submitJoinStepInfo(): BaseYieldStepDetail;
20
+ getSubmitStepFee(params: OptimalYieldPathParams): Promise<YieldTokenBaseInfo>;
21
+ handleSubmitStep(data: SubmitYieldJoinData, path: OptimalYieldPath): Promise<HandleYieldStepData>;
22
+ handleYieldRedeem(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
23
+ }
@@ -0,0 +1,176 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
5
+ import { BasicTxErrorType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
6
+ import { _getTokenOnChainInfo } from '@subwallet/extension-base/services/chain-service/utils';
7
+ import { EarningStatus, YieldStepType } from '@subwallet/extension-base/types';
8
+ import { BN, BN_ZERO } from '@polkadot/util';
9
+ import { fakeAddress } from "../../constants/index.js";
10
+ import BaseLendingPoolHandler from "./base.js";
11
+ export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
12
+ altInputAsset = 'polkadot-NATIVE-DOT';
13
+ derivativeAssets = ['interlay-LOCAL-qDOT'];
14
+ inputAsset = 'interlay-LOCAL-DOT';
15
+ rewardAssets = ['interlay-LOCAL-DOT'];
16
+ feeAssets = ['interlay-NATIVE-INTR', 'interlay-LOCAL-DOT'];
17
+ availableMethod = {
18
+ join: true,
19
+ defaultUnstake: false,
20
+ fastUnstake: true,
21
+ cancelUnstake: false,
22
+ withdraw: false,
23
+ claimReward: false
24
+ };
25
+ constructor(state, chain) {
26
+ super(state, chain);
27
+ const chainInfo = this.chainInfo;
28
+ this.slug = `DOT___lending___${chain}`;
29
+ this.name = `${chainInfo.name} Lending`;
30
+ this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
31
+ }
32
+ getDescription() {
33
+ return 'Earn rewards by lending DOT';
34
+ }
35
+
36
+ /* Subscribe pool info */
37
+
38
+ async getPoolStat() {
39
+ const substrateApi = await this.substrateApi.isReady;
40
+ const inputTokenSlug = this.inputAsset;
41
+ const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
42
+ const _exchangeRate = await substrateApi.api.query.loans.exchangeRate(_getTokenOnChainInfo(inputTokenInfo));
43
+ const exchangeRate = _exchangeRate.toPrimitive();
44
+ const decimals = 10 ** 18;
45
+ return {
46
+ ...this.baseInfo,
47
+ type: this.type,
48
+ metadata: {
49
+ ...this.metadataInfo,
50
+ description: this.getDescription()
51
+ },
52
+ statistic: {
53
+ assetEarning: [{
54
+ slug: this.rewardAssets[0],
55
+ apr: 1.29,
56
+ exchangeRate: exchangeRate / decimals
57
+ }],
58
+ maxCandidatePerFarmer: 1,
59
+ maxWithdrawalRequestPerFarmer: 1,
60
+ minJoinPool: '10000000000',
61
+ minWithdrawal: '0',
62
+ totalApr: 1.29,
63
+ tvl: '291890000000000'
64
+ }
65
+ };
66
+ }
67
+
68
+ /* Subscribe pool info */
69
+
70
+ /* Subscribe pool position */
71
+
72
+ async subscribePoolPosition(useAddresses, resultCallback) {
73
+ let cancel = false;
74
+ const substrateApi = this.substrateApi;
75
+ await substrateApi.isReady;
76
+ const derivativeTokenSlug = this.derivativeAssets[0];
77
+ const derivativeTokenInfo = this.state.getAssetBySlug(derivativeTokenSlug);
78
+ const unsub = await substrateApi.api.query.tokens.accounts.multi(useAddresses.map(address => [address, _getTokenOnChainInfo(derivativeTokenInfo)]), _balances => {
79
+ if (cancel) {
80
+ unsub();
81
+ return;
82
+ }
83
+ const balances = _balances;
84
+ for (let i = 0; i < balances.length; i++) {
85
+ const balanceItem = balances[i];
86
+ const address = useAddresses[i];
87
+ const bnTotalBalance = balanceItem.free || BN_ZERO;
88
+ const totalBalance = bnTotalBalance.toString();
89
+ const result = {
90
+ ...this.baseInfo,
91
+ type: this.type,
92
+ address,
93
+ balanceToken: this.inputAsset,
94
+ totalStake: totalBalance,
95
+ activeStake: totalBalance,
96
+ unstakeBalance: '0',
97
+ status: EarningStatus.EARNING_REWARD,
98
+ derivativeToken: derivativeTokenSlug,
99
+ isBondedBefore: bnTotalBalance.gt(BN_ZERO),
100
+ nominations: [],
101
+ unstakings: []
102
+ };
103
+ resultCallback(result);
104
+ }
105
+ });
106
+ return () => {
107
+ cancel = true;
108
+ unsub();
109
+ };
110
+ }
111
+
112
+ /* Subscribe pool position */
113
+
114
+ /* Join pool action */
115
+
116
+ get submitJoinStepInfo() {
117
+ return {
118
+ name: 'Mint qDOT',
119
+ type: YieldStepType.MINT_QDOT
120
+ };
121
+ }
122
+ async getSubmitStepFee(params) {
123
+ const poolOriginSubstrateApi = await this.substrateApi.isReady;
124
+ const inputTokenSlug = this.inputAsset;
125
+ const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
126
+ const defaultFeeTokenSlug = this.feeAssets[0];
127
+ if (new BN(params.amount).gt(BN_ZERO)) {
128
+ const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.loans.mint(_getTokenOnChainInfo(inputTokenInfo), params.amount).paymentInfo(fakeAddress);
129
+ const mintFeeInfo = _mintFeeInfo.toPrimitive();
130
+ return {
131
+ amount: mintFeeInfo.partialFee.toString(),
132
+ slug: defaultFeeTokenSlug
133
+ };
134
+ } else {
135
+ return {
136
+ amount: '0',
137
+ slug: defaultFeeTokenSlug
138
+ };
139
+ }
140
+ }
141
+ async handleSubmitStep(data, path) {
142
+ const substrateApi = await this.substrateApi.isReady;
143
+ const inputTokenSlug = this.inputAsset;
144
+ const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
145
+ const extrinsic = substrateApi.api.tx.loans.mint(_getTokenOnChainInfo(inputTokenInfo), data.amount);
146
+ return {
147
+ txChain: this.chain,
148
+ extrinsicType: ExtrinsicType.MINT_QDOT,
149
+ extrinsic,
150
+ txData: data,
151
+ transferNativeAmount: '0'
152
+ };
153
+ }
154
+
155
+ /* Join pool action */
156
+
157
+ /* Leave pool action */
158
+
159
+ async handleYieldRedeem(amount, address, selectedTarget) {
160
+ const substrateApi = await this.substrateApi.isReady;
161
+ // @ts-ignore
162
+ const inputTokenSlug = this.inputAsset;
163
+ const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
164
+ const yieldPositionInfo = await this.getPoolPosition(address);
165
+ if (!yieldPositionInfo) {
166
+ return Promise.reject(new TransactionError(BasicTxErrorType.INVALID_PARAMS));
167
+ }
168
+ const bnAmount = new BN(amount);
169
+ const bnActiveBalance = new BN(yieldPositionInfo.activeStake);
170
+ const redeemAll = bnAmount.eq(bnActiveBalance);
171
+ const extrinsic = !redeemAll ? substrateApi.api.tx.loans.redeem(_getTokenOnChainInfo(inputTokenInfo), amount) : substrateApi.api.tx.loans.redeemAll(_getTokenOnChainInfo(inputTokenInfo));
172
+ return [ExtrinsicType.REDEEM_QDOT, extrinsic];
173
+ }
174
+
175
+ /* Leave pool action */
176
+ }
@@ -0,0 +1,26 @@
1
+ import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
2
+ import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
3
+ import { BaseYieldStepDetail, HandleYieldStepData, LiquidYieldPoolInfo, OptimalYieldPath, OptimalYieldPathParams, SubmitYieldJoinData, TransactionData, UnstakingInfo, YieldPoolMethodInfo, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
4
+ import BaseLiquidStakingPoolHandler from './base';
5
+ export default class AcalaLiquidStakingPoolHandler extends BaseLiquidStakingPoolHandler {
6
+ protected readonly name: string;
7
+ protected readonly shortName: string;
8
+ protected readonly altInputAsset: string;
9
+ protected readonly derivativeAssets: string[];
10
+ protected readonly inputAsset: string;
11
+ protected readonly rewardAssets: string[];
12
+ protected readonly feeAssets: string[];
13
+ readonly minAmountPercent = 0.98;
14
+ protected readonly availableMethod: YieldPoolMethodInfo;
15
+ slug: string;
16
+ constructor(state: KoniState, chain: string);
17
+ protected getDescription(): string;
18
+ getPoolStat(): Promise<LiquidYieldPoolInfo>;
19
+ subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
20
+ get submitJoinStepInfo(): BaseYieldStepDetail;
21
+ getSubmitStepFee(params: OptimalYieldPathParams): Promise<YieldTokenBaseInfo>;
22
+ handleSubmitStep(data: SubmitYieldJoinData, path: OptimalYieldPath): Promise<HandleYieldStepData>;
23
+ handleYieldRedeem(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
24
+ handleYieldUnstake(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
25
+ handleYieldWithdraw(address: string, unstakingInfo: UnstakingInfo): Promise<TransactionData>;
26
+ }