@subwallet/extension-base 1.0.1 → 1.0.2-1b

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 (220) hide show
  1. package/background/KoniTypes.d.ts +25 -36
  2. package/background/KoniTypes.js +12 -7
  3. package/background/errors/TransactionError.js +21 -1
  4. package/cjs/background/KoniTypes.js +14 -8
  5. package/cjs/background/errors/TransactionError.js +20 -0
  6. package/cjs/constants/index.js +13 -28
  7. package/cjs/koni/api/dotsama/balance.js +60 -224
  8. package/cjs/koni/api/dotsama/transfer.js +30 -29
  9. package/cjs/koni/api/nft/acala_nft/index.js +4 -1
  10. package/cjs/koni/api/nft/bit.country/index.js +4 -1
  11. package/cjs/koni/api/nft/evm_nft/index.js +7 -3
  12. package/cjs/koni/api/nft/index.js +3 -6
  13. package/cjs/koni/api/nft/karura_nft/index.js +4 -1
  14. package/cjs/koni/api/nft/rmrk_nft/index.js +8 -1
  15. package/cjs/koni/api/nft/statemine_nft/index.js +4 -1
  16. package/cjs/koni/api/nft/unique_nft/index.js +6 -1
  17. package/cjs/koni/api/nft/wasm_nft/index.js +169 -111
  18. package/cjs/koni/api/nft/wasm_nft/utils.js +11 -7
  19. package/cjs/koni/api/staking/bonding/amplitude.js +18 -10
  20. package/cjs/koni/api/staking/bonding/astar.js +37 -238
  21. package/cjs/koni/api/staking/bonding/index.js +26 -14
  22. package/cjs/koni/api/staking/bonding/paraChain.js +100 -11
  23. package/cjs/koni/api/staking/bonding/relayChain.js +174 -16
  24. package/cjs/koni/api/staking/bonding/utils.js +55 -10
  25. package/cjs/koni/api/tokens/wasm/index.js +5 -4
  26. package/cjs/koni/api/tokens/wasm/utils.js +63 -0
  27. package/cjs/koni/api/xcm/index.js +0 -111
  28. package/cjs/koni/api/xcm/polkadotXcm.js +2 -2
  29. package/cjs/koni/api/xcm/utils.js +18 -13
  30. package/cjs/koni/api/xcm/xTokens.js +3 -5
  31. package/cjs/koni/api/xcm/xcmPallet.js +9 -6
  32. package/cjs/koni/background/cron.js +179 -77
  33. package/cjs/koni/background/handlers/Extension.js +231 -195
  34. package/cjs/koni/background/handlers/State.js +147 -111
  35. package/cjs/koni/background/handlers/Tabs.js +48 -39
  36. package/cjs/koni/background/subscription.js +64 -56
  37. package/cjs/packageInfo.js +1 -1
  38. package/cjs/page/index.js +5 -0
  39. package/cjs/services/chain-service/constants.js +1 -11
  40. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +13 -8
  41. package/cjs/services/chain-service/handler/light-client/index.js +2 -0
  42. package/cjs/services/chain-service/index.js +39 -6
  43. package/cjs/services/chain-service/utils.js +4 -0
  44. package/cjs/services/event-service/index.js +75 -0
  45. package/cjs/services/event-service/types.js +11 -0
  46. package/cjs/services/history-service/index.js +46 -21
  47. package/cjs/services/history-service/subsquid-multi-chain-history.js +19 -11
  48. package/cjs/services/keyring-service/index.js +101 -0
  49. package/cjs/services/migration-service/index.js +13 -10
  50. package/cjs/{koni/migration/scripts/RemoveWrongCrowdloan.js → services/migration-service/scripts/AutoEnableChainsTokens.js} +11 -6
  51. package/cjs/services/migration-service/scripts/MigrateNetworkSettings.js +39 -19
  52. package/cjs/services/migration-service/scripts/MigrateSettings.js +31 -0
  53. package/cjs/services/migration-service/scripts/MigrateTransactionHistory.js +72 -0
  54. package/cjs/services/migration-service/scripts/index.js +13 -4
  55. package/cjs/services/price-service/coingecko.js +15 -3
  56. package/cjs/services/price-service/index.js +15 -18
  57. package/cjs/services/request-service/constants.js +8 -2
  58. package/cjs/services/request-service/handler/AuthRequestHandler.js +43 -12
  59. package/cjs/services/request-service/index.js +3 -0
  60. package/cjs/services/storage-service/DatabaseService.js +53 -34
  61. package/cjs/services/storage-service/databases/index.js +1 -1
  62. package/cjs/services/storage-service/db-stores/BaseStoreWithAddressAndChain.js +2 -8
  63. package/cjs/services/storage-service/db-stores/Nft.js +8 -18
  64. package/cjs/services/storage-service/db-stores/Transaction.js +10 -7
  65. package/cjs/services/subscan-service/index.js +107 -0
  66. package/cjs/services/subscan-service/subscan-chain-map.js +74 -0
  67. package/cjs/services/subscan-service/types.js +1 -0
  68. package/cjs/services/transaction-service/event-parser/index.js +20 -48
  69. package/cjs/services/transaction-service/index.js +66 -22
  70. package/cjs/services/transaction-service/utils.js +4 -6
  71. package/cjs/utils/address.js +9 -1
  72. package/cjs/utils/index.js +30 -26
  73. package/constants/index.d.ts +8 -13
  74. package/constants/index.js +8 -13
  75. package/koni/api/dotsama/balance.d.ts +0 -1
  76. package/koni/api/dotsama/balance.js +33 -197
  77. package/koni/api/dotsama/transfer.js +5 -4
  78. package/koni/api/nft/acala_nft/index.js +3 -1
  79. package/koni/api/nft/bit.country/index.js +3 -1
  80. package/koni/api/nft/evm_nft/index.js +6 -3
  81. package/koni/api/nft/index.d.ts +1 -2
  82. package/koni/api/nft/index.js +3 -6
  83. package/koni/api/nft/karura_nft/index.js +3 -1
  84. package/koni/api/nft/nft.d.ts +1 -0
  85. package/koni/api/nft/rmrk_nft/index.js +8 -1
  86. package/koni/api/nft/statemine_nft/index.js +3 -1
  87. package/koni/api/nft/unique_nft/index.js +5 -1
  88. package/koni/api/nft/wasm_nft/index.d.ts +0 -2
  89. package/koni/api/nft/wasm_nft/index.js +167 -109
  90. package/koni/api/nft/wasm_nft/utils.d.ts +7 -5
  91. package/koni/api/nft/wasm_nft/utils.js +7 -5
  92. package/koni/api/staking/bonding/amplitude.d.ts +1 -2
  93. package/koni/api/staking/bonding/amplitude.js +22 -13
  94. package/koni/api/staking/bonding/astar.d.ts +2 -11
  95. package/koni/api/staking/bonding/astar.js +39 -231
  96. package/koni/api/staking/bonding/index.d.ts +5 -2
  97. package/koni/api/staking/bonding/index.js +27 -17
  98. package/koni/api/staking/bonding/paraChain.d.ts +4 -1
  99. package/koni/api/staking/bonding/paraChain.js +101 -14
  100. package/koni/api/staking/bonding/relayChain.d.ts +6 -2
  101. package/koni/api/staking/bonding/relayChain.js +172 -17
  102. package/koni/api/staking/bonding/utils.d.ts +15 -2
  103. package/koni/api/staking/bonding/utils.js +53 -11
  104. package/koni/api/tokens/wasm/index.js +5 -4
  105. package/koni/api/tokens/wasm/utils.d.ts +6 -0
  106. package/koni/api/tokens/wasm/utils.js +54 -0
  107. package/koni/api/xcm/index.js +1 -112
  108. package/koni/api/xcm/polkadotXcm.js +3 -3
  109. package/koni/api/xcm/utils.d.ts +5 -6
  110. package/koni/api/xcm/utils.js +15 -10
  111. package/koni/api/xcm/xTokens.js +5 -7
  112. package/koni/api/xcm/xcmPallet.js +10 -9
  113. package/koni/background/cron.d.ts +6 -1
  114. package/koni/background/cron.js +179 -76
  115. package/koni/background/handlers/Extension.d.ts +2 -2
  116. package/koni/background/handlers/Extension.js +161 -125
  117. package/koni/background/handlers/State.d.ts +21 -20
  118. package/koni/background/handlers/State.js +144 -111
  119. package/koni/background/handlers/Tabs.js +30 -20
  120. package/koni/background/subscription.d.ts +1 -1
  121. package/koni/background/subscription.js +64 -58
  122. package/package.json +63 -18
  123. package/packageInfo.js +1 -1
  124. package/page/index.d.ts +2 -0
  125. package/page/index.js +4 -0
  126. package/services/chain-service/constants.d.ts +0 -1
  127. package/services/chain-service/constants.js +0 -9
  128. package/services/chain-service/handler/SubstrateChainHandler.js +14 -9
  129. package/services/chain-service/handler/light-client/index.d.ts +17 -1
  130. package/services/chain-service/handler/light-client/index.js +1 -1
  131. package/services/chain-service/helper/psp22_abi.json +1041 -881
  132. package/services/chain-service/helper/psp34_abi.json +2963 -1807
  133. package/services/chain-service/index.d.ts +6 -4
  134. package/services/chain-service/index.js +40 -9
  135. package/services/chain-service/utils.d.ts +1 -0
  136. package/services/chain-service/utils.js +3 -0
  137. package/services/event-service/index.d.ts +22 -0
  138. package/services/event-service/index.js +63 -0
  139. package/services/event-service/types.d.ts +28 -0
  140. package/services/event-service/types.js +4 -0
  141. package/services/history-service/index.d.ts +5 -3
  142. package/services/history-service/index.js +46 -21
  143. package/services/history-service/subsquid-multi-chain-history.js +22 -13
  144. package/services/keyring-service/index.d.ts +19 -0
  145. package/services/keyring-service/index.js +93 -0
  146. package/services/migration-service/index.js +11 -9
  147. package/services/migration-service/scripts/AutoEnableChainsTokens.d.ts +4 -0
  148. package/services/migration-service/scripts/AutoEnableChainsTokens.js +13 -0
  149. package/services/migration-service/scripts/MigrateNetworkSettings.js +37 -18
  150. package/services/migration-service/scripts/MigrateSettings.d.ts +4 -0
  151. package/services/migration-service/scripts/MigrateSettings.js +23 -0
  152. package/services/migration-service/scripts/MigrateTransactionHistory.d.ts +4 -0
  153. package/services/migration-service/scripts/MigrateTransactionHistory.js +64 -0
  154. package/services/migration-service/scripts/index.d.ts +1 -0
  155. package/services/migration-service/scripts/index.js +10 -3
  156. package/services/price-service/coingecko.js +15 -3
  157. package/services/price-service/index.d.ts +5 -3
  158. package/services/price-service/index.js +15 -18
  159. package/services/request-service/constants.d.ts +1 -0
  160. package/services/request-service/constants.js +6 -1
  161. package/services/request-service/handler/AuthRequestHandler.d.ts +8 -1
  162. package/services/request-service/handler/AuthRequestHandler.js +44 -13
  163. package/services/request-service/index.d.ts +7 -1
  164. package/services/request-service/index.js +3 -0
  165. package/services/storage-service/DatabaseService.d.ts +1 -0
  166. package/services/storage-service/DatabaseService.js +53 -34
  167. package/services/storage-service/databases/index.js +1 -1
  168. package/services/storage-service/db-stores/BaseStoreWithAddressAndChain.d.ts +1 -1
  169. package/services/storage-service/db-stores/BaseStoreWithAddressAndChain.js +2 -8
  170. package/services/storage-service/db-stores/Nft.d.ts +3 -3
  171. package/services/storage-service/db-stores/Nft.js +8 -17
  172. package/services/storage-service/db-stores/Transaction.js +10 -7
  173. package/services/subscan-service/index.d.ts +20 -0
  174. package/services/subscan-service/index.js +99 -0
  175. package/services/subscan-service/subscan-chain-map.d.ts +5 -0
  176. package/services/subscan-service/subscan-chain-map.js +63 -0
  177. package/services/subscan-service/types.d.ts +27 -0
  178. package/services/subscan-service/types.js +1 -0
  179. package/services/transaction-service/event-parser/index.d.ts +2 -2
  180. package/services/transaction-service/event-parser/index.js +21 -49
  181. package/services/transaction-service/index.d.ts +4 -2
  182. package/services/transaction-service/index.js +66 -22
  183. package/services/transaction-service/utils.js +5 -6
  184. package/utils/address.d.ts +1 -0
  185. package/utils/address.js +9 -2
  186. package/utils/index.d.ts +2 -1
  187. package/utils/index.js +26 -23
  188. package/cjs/background/errors/EvmRpcError.js +0 -21
  189. package/cjs/background/errors/SubWalletProviderError.js +0 -17
  190. package/cjs/constants/ethereum.js +0 -19
  191. package/cjs/errors/SubWalletProviderError.js +0 -17
  192. package/cjs/koni/api/xcm/astar.js +0 -160
  193. package/cjs/koni/api/xcm/moonbeamXcm.js +0 -80
  194. package/cjs/koni/api/xcm/statemintXcm.js +0 -197
  195. package/cjs/koni/api/xcm/substrateXcm.js +0 -213
  196. package/cjs/koni/migration/Base.js +0 -20
  197. package/cjs/koni/migration/index.js +0 -45
  198. package/cjs/koni/migration/scripts/ChangeRouteToHome.js +0 -22
  199. package/cjs/koni/migration/scripts/ClearOldStorage.js +0 -24
  200. package/cjs/koni/migration/scripts/RemoveWrongTransactionHistoriesFromStore.js +0 -36
  201. package/cjs/koni/migration/scripts/ResetTransactionHistoryEventIdx.js +0 -21
  202. package/cjs/koni/migration/scripts/index.js +0 -22
  203. package/cjs/koni/page/index.js +0 -16
  204. package/cjs/services/asset-service/index.js +0 -91
  205. package/cjs/services/storage-service/db-stores/ExtraDelegationInfo.js +0 -17
  206. package/cjs/stores/Balance.js +0 -18
  207. package/cjs/stores/Crowdloan.js +0 -18
  208. package/cjs/stores/CustomEvmToken.js +0 -18
  209. package/cjs/stores/NetworkMap.js +0 -18
  210. package/cjs/stores/Nft.js +0 -18
  211. package/cjs/stores/NftCollection.js +0 -18
  212. package/cjs/stores/Price.js +0 -18
  213. package/cjs/stores/Staking.js +0 -18
  214. package/cjs/stores/StakingReward.js +0 -18
  215. package/cjs/utils/eth/parseTransactionData.js +0 -284
  216. package/koni/page/index.d.ts +0 -2
  217. package/koni/page/index.js +0 -9
  218. /package/cjs/{koni/page → page}/SubWalleEvmProvider.js +0 -0
  219. /package/{koni/page → page}/SubWalleEvmProvider.d.ts +0 -0
  220. /package/{koni/page → page}/SubWalleEvmProvider.js +0 -0
@@ -5,25 +5,15 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.getAstarBondingExtrinsic = getAstarBondingExtrinsic;
8
- exports.getAstarBondingTxInfo = getAstarBondingTxInfo;
9
8
  exports.getAstarClaimRewardExtrinsic = getAstarClaimRewardExtrinsic;
10
- exports.getAstarClaimRewardTxInfo = getAstarClaimRewardTxInfo;
11
9
  exports.getAstarDappsInfo = getAstarDappsInfo;
12
10
  exports.getAstarNominatorMetadata = getAstarNominatorMetadata;
13
11
  exports.getAstarStakingMetadata = getAstarStakingMetadata;
14
12
  exports.getAstarUnbondingExtrinsic = getAstarUnbondingExtrinsic;
15
- exports.getAstarUnbondingTxInfo = getAstarUnbondingTxInfo;
16
13
  exports.getAstarWithdrawalExtrinsic = getAstarWithdrawalExtrinsic;
17
- exports.getAstarWithdrawalTxInfo = getAstarWithdrawalTxInfo;
18
- exports.handleAstarBondingTxInfo = handleAstarBondingTxInfo;
19
- exports.handleAstarClaimRewardTxInfo = handleAstarClaimRewardTxInfo;
20
- exports.handleAstarUnbondingTxInfo = handleAstarUnbondingTxInfo;
21
- exports.handleAstarUnlockingInfo = handleAstarUnlockingInfo;
22
- exports.handleAstarWithdrawalTxInfo = handleAstarWithdrawalTxInfo;
23
14
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
24
- var _balance = require("@subwallet/extension-base/koni/api/dotsama/balance");
15
+ var _utils = require("@subwallet/extension-base/koni/api/staking/bonding/utils");
25
16
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
26
- var _utils = require("@subwallet/extension-base/services/chain-service/utils");
27
17
  var _utils2 = require("@subwallet/extension-base/utils");
28
18
  var _crossFetch = _interopRequireDefault(require("cross-fetch"));
29
19
  var _util = require("@polkadot/util");
@@ -84,6 +74,7 @@ async function getAstarNominatorMetadata(chainInfo, address, substrateApi) {
84
74
  const [_ledger, _era, _stakerInfo] = await Promise.all([chainApi.api.query.dappsStaking.ledger(address), chainApi.api.query.dappsStaking.currentEra(), chainApi.api.query.dappsStaking.generalStakerInfo.entries(address)]);
85
75
  const ledger = _ledger.toPrimitive();
86
76
  const currentEra = _era.toString();
77
+ const minDelegatorStake = chainApi.api.consts.dappsStaking.minimumStakingAmount.toString();
87
78
  let bnTotalActiveStake = _util.BN_ZERO;
88
79
  if (_stakerInfo.length > 0) {
89
80
  const dAppInfoMap = {};
@@ -100,11 +91,13 @@ async function getAstarNominatorMetadata(chainInfo, address, substrateApi) {
100
91
  const currentStake = stakeList.slice(-1)[0].staked.toString() || '0';
101
92
  const bnCurrentStake = new _util.BN(currentStake);
102
93
  if (bnCurrentStake.gt(_util.BN_ZERO)) {
94
+ const dappStakingStatus = bnCurrentStake.gt(_util.BN_ZERO) && bnCurrentStake.gte(new _util.BN(minDelegatorStake)) ? _KoniTypes.StakingStatus.EARNING_REWARD : _KoniTypes.StakingStatus.NOT_EARNING;
103
95
  bnTotalActiveStake = bnTotalActiveStake.add(bnCurrentStake);
104
96
  const dappInfo = dAppInfoMap[dappAddress];
105
97
  nominationList.push({
98
+ status: dappStakingStatus,
106
99
  chain,
107
- validatorAddress: dappAddress,
100
+ validatorAddress: dappAddress.toLowerCase(),
108
101
  activeStake: currentStake,
109
102
  validatorMinStake: '0',
110
103
  validatorIdentity: dappInfo === null || dappInfo === void 0 ? void 0 : dappInfo.name,
@@ -131,13 +124,15 @@ async function getAstarNominatorMetadata(chainInfo, address, substrateApi) {
131
124
  if (nominationList.length === 0 && unstakingList.length === 0) {
132
125
  return;
133
126
  }
127
+ const stakingStatus = (0, _utils.getStakingStatusByNominations)(bnTotalActiveStake, nominationList);
134
128
  return {
135
129
  chain,
136
130
  type: _KoniTypes.StakingType.NOMINATED,
137
131
  address: address,
138
132
  activeStake: bnTotalActiveStake.toString(),
139
133
  nominations: nominationList,
140
- unstakings: unstakingList
134
+ unstakings: unstakingList,
135
+ status: stakingStatus
141
136
  };
142
137
  }
143
138
  async function getAstarDappsInfo(networkKey, substrateApi) {
@@ -159,21 +154,26 @@ async function getAstarDappsInfo(networkKey, substrateApi) {
159
154
  const dappName = dapp.name;
160
155
  const dappAddress = dapp.address;
161
156
  const dappIcon = (0, _utils2.isUrl)(dapp.iconUrl) ? dapp.iconUrl : undefined;
162
- const _contractInfo = await chainApi.api.query.dappsStaking.contractEraStake({
157
+ const contractParam = (0, _utilCrypto.isEthereumAddress)(dappAddress) ? {
163
158
  Evm: dappAddress
164
- }, era);
165
- const contractInfo = _contractInfo.toHuman();
166
- let totalStake = 0;
159
+ } : {
160
+ Wasm: dappAddress
161
+ };
162
+ const _contractInfo = await chainApi.api.query.dappsStaking.contractEraStake(contractParam, era);
163
+ const contractInfo = _contractInfo.toPrimitive();
164
+ let totalStake = '0';
167
165
  let stakerCount = 0;
168
166
  if (contractInfo !== null) {
169
- totalStake = (0, _utils2.parseRawNumber)(contractInfo.total);
170
- stakerCount = (0, _utils2.parseRawNumber)(contractInfo.numberOfStakers);
167
+ var _contractInfo$total;
168
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
169
+ totalStake = contractInfo === null || contractInfo === void 0 ? void 0 : (_contractInfo$total = contractInfo.total) === null || _contractInfo$total === void 0 ? void 0 : _contractInfo$total.toString();
170
+ stakerCount = contractInfo.numberOfStakers;
171
171
  }
172
172
  allDappsInfo.push({
173
173
  commission: 0,
174
174
  expectedReturn: 0,
175
- address: dappAddress,
176
- totalStake: totalStake.toString(),
175
+ address: dappAddress.toLowerCase(),
176
+ totalStake: totalStake,
177
177
  ownStake: '0',
178
178
  otherStake: totalStake.toString(),
179
179
  nominatorCount: stakerCount,
@@ -188,172 +188,31 @@ async function getAstarDappsInfo(networkKey, substrateApi) {
188
188
  }));
189
189
  return allDappsInfo;
190
190
  }
191
- async function getAstarBondingTxInfo(chainInfo, substrateApi, stakerAddress, amount, dappInfo) {
192
- const apiPromise = await substrateApi.isReady;
193
- const {
194
- decimals
195
- } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
196
- const parsedAmount = amount * 10 ** decimals;
197
- const binaryAmount = new _util.BN(parsedAmount.toString());
198
- const extrinsic = apiPromise.api.tx.dappsStaking.bondAndStake({
199
- Evm: dappInfo.address
200
- }, binaryAmount);
201
- return extrinsic.paymentInfo(stakerAddress);
202
- }
203
- async function handleAstarBondingTxInfo(chainInfo, amount, networkKey, stakerAddress, dappInfo, substrateApiMap, evmApiMap) {
204
- const {
205
- decimals,
206
- symbol
207
- } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
208
- try {
209
- const [txInfo, balance] = await Promise.all([getAstarBondingTxInfo(chainInfo, substrateApiMap[networkKey], stakerAddress, amount, dappInfo), (0, _balance.getFreeBalance)(networkKey, stakerAddress, substrateApiMap, evmApiMap)]);
210
- const feeString = (0, _utils2.parseNumberToDisplay)(txInfo.partialFee, decimals) + ` ${symbol}`;
211
- const rawFee = (0, _utils2.parseRawNumber)(txInfo.partialFee.toString());
212
- const binaryBalance = new _util.BN(balance);
213
- const sumAmount = txInfo.partialFee.addn(amount);
214
- const balanceError = sumAmount.gt(binaryBalance);
215
- return {
216
- rawFee,
217
- fee: feeString,
218
- balanceError
219
- };
220
- } catch (e) {
221
- return {
222
- fee: `0.0000 ${symbol}`,
223
- balanceError: false
224
- };
225
- }
226
- }
227
191
  async function getAstarBondingExtrinsic(substrateApi, amount, dappInfo) {
228
192
  const chainApi = await substrateApi.isReady;
229
193
  const binaryAmount = new _util.BN(amount);
230
- return chainApi.api.tx.dappsStaking.bondAndStake({
194
+ const dappParam = (0, _utilCrypto.isEthereumAddress)(dappInfo.address) ? {
231
195
  Evm: dappInfo.address
232
- }, binaryAmount);
233
- }
234
- async function getAstarUnbondingTxInfo(chainInfo, substrateApi, stakerAddress, amount, dappAddress) {
235
- const apiPromise = await substrateApi.isReady;
236
- const {
237
- decimals
238
- } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
239
- const parsedAmount = amount * 10 ** decimals;
240
- const binaryAmount = new _util.BN(parsedAmount.toString());
241
- const extrinsic = apiPromise.api.tx.dappsStaking.unbondAndUnstake({
242
- Evm: dappAddress
243
- }, binaryAmount);
244
- return extrinsic.paymentInfo(stakerAddress);
245
- }
246
- async function handleAstarUnbondingTxInfo(chainInfo, amount, networkKey, stakerAddress, dappAddress, substrateApiMap, evmApiMap) {
247
- const {
248
- decimals,
249
- symbol
250
- } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
251
- try {
252
- const [txInfo, balance] = await Promise.all([getAstarUnbondingTxInfo(chainInfo, substrateApiMap[networkKey], stakerAddress, amount, dappAddress), (0, _balance.getFreeBalance)(networkKey, stakerAddress, substrateApiMap, evmApiMap)]);
253
- const feeString = (0, _utils2.parseNumberToDisplay)(txInfo.partialFee, decimals) + ` ${symbol}`;
254
- const rawFee = (0, _utils2.parseRawNumber)(txInfo.partialFee.toString());
255
- const binaryBalance = new _util.BN(balance);
256
- const balanceError = txInfo.partialFee.gt(binaryBalance);
257
- return {
258
- rawFee,
259
- fee: feeString,
260
- balanceError
261
- };
262
- } catch (e) {
263
- return {
264
- fee: `0.0000 ${symbol}`,
265
- balanceError: false
266
- };
267
- }
196
+ } : {
197
+ Wasm: dappInfo.address
198
+ };
199
+ return chainApi.api.tx.dappsStaking.bondAndStake(dappParam, binaryAmount);
268
200
  }
269
201
  async function getAstarUnbondingExtrinsic(substrateApi, amount, dappAddress) {
270
202
  const apiPromise = await substrateApi.isReady;
271
203
  const binaryAmount = new _util.BN(amount);
272
- return apiPromise.api.tx.dappsStaking.unbondAndUnstake({
204
+ const dappParam = (0, _utilCrypto.isEthereumAddress)(dappAddress) ? {
273
205
  Evm: dappAddress
274
- }, binaryAmount);
275
- }
276
- async function getAstarUnlockingInfo(substrateApi, address, networkKey) {
277
- const chainApi = await substrateApi.isReady;
278
- const [_stakingInfo, _era] = await Promise.all([chainApi.api.query.dappsStaking.ledger(address), chainApi.api.query.dappsStaking.currentEra()]);
279
- const currentEra = (0, _utils2.parseRawNumber)(_era.toHuman());
280
- const stakingInfo = _stakingInfo.toHuman();
281
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
282
- const unlockingChunks = stakingInfo.unbondingInfo.unlockingChunks;
283
- let nextWithdrawalEra = -1;
284
- let nextWithdrawalAmount = 0;
285
- let redeemable = 0;
286
- for (const chunk of unlockingChunks) {
287
- const unlockEra = (0, _utils2.parseRawNumber)(chunk.unlockEra);
288
- const amount = (0, _utils2.parseRawNumber)(chunk.amount);
289
-
290
- // Find next withdrawal
291
- if (nextWithdrawalEra === -1) {
292
- nextWithdrawalEra = unlockEra;
293
- nextWithdrawalAmount = amount;
294
- } else if (unlockEra <= nextWithdrawalEra) {
295
- nextWithdrawalEra = unlockEra;
296
- nextWithdrawalAmount += amount;
297
- }
298
-
299
- // Find redeemable
300
- if (unlockEra - currentEra <= 0) {
301
- redeemable += amount;
302
- }
303
- }
304
- const nextWithdrawal = (nextWithdrawalEra - currentEra) * _constants._STAKING_ERA_LENGTH_MAP[networkKey];
305
- return {
306
- nextWithdrawal,
307
- nextWithdrawalAmount,
308
- redeemable
309
- };
310
- }
311
- async function handleAstarUnlockingInfo(substrateApi, chainInfo, networkKey, address, type) {
312
- const {
313
- nextWithdrawal,
314
- nextWithdrawalAmount,
315
- redeemable
316
- } = await getAstarUnlockingInfo(substrateApi, address, networkKey);
317
- const {
318
- decimals
319
- } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
320
- const parsedRedeemable = redeemable / 10 ** decimals;
321
- const parsedNextWithdrawalAmount = nextWithdrawalAmount / 10 ** decimals;
322
- return {
323
- address,
324
- type,
325
- chain: networkKey,
326
- nextWithdrawal: nextWithdrawal,
327
- redeemable: parsedRedeemable,
328
- nextWithdrawalAmount: parsedNextWithdrawalAmount
329
- };
330
- }
331
- async function getAstarWithdrawalTxInfo(substrateApi, address) {
332
- const apiPromise = await substrateApi.isReady;
333
- const extrinsic = apiPromise.api.tx.dappsStaking.withdrawUnbonded();
334
- return extrinsic.paymentInfo(address);
335
- }
336
- async function handleAstarWithdrawalTxInfo(networkKey, chainInfo, substrateApiMap, evmApiMap, address) {
337
- const [txInfo, balance] = await Promise.all([getAstarWithdrawalTxInfo(substrateApiMap[networkKey], address), (0, _balance.getFreeBalance)(networkKey, address, substrateApiMap, evmApiMap)]);
338
- const {
339
- decimals,
340
- symbol
341
- } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
342
- const feeString = (0, _utils2.parseNumberToDisplay)(txInfo.partialFee, decimals) + ` ${symbol}`;
343
- const rawFee = (0, _utils2.parseRawNumber)(txInfo.partialFee.toString());
344
- const binaryBalance = new _util.BN(balance);
345
- const balanceError = txInfo.partialFee.gt(binaryBalance);
346
- return {
347
- rawFee,
348
- fee: feeString,
349
- balanceError
206
+ } : {
207
+ Wasm: dappAddress
350
208
  };
209
+ return apiPromise.api.tx.dappsStaking.unbondAndUnstake(dappParam, binaryAmount);
351
210
  }
352
211
  async function getAstarWithdrawalExtrinsic(substrateApi) {
353
212
  const chainApi = await substrateApi.isReady;
354
213
  return chainApi.api.tx.dappsStaking.withdrawUnbonded();
355
214
  }
356
- async function getAstarClaimRewardTxInfo(substrateApi, address) {
215
+ async function getAstarClaimRewardExtrinsic(substrateApi, address) {
357
216
  const apiPromise = await substrateApi.isReady;
358
217
  const [_stakedDapps, _currentEra] = await Promise.all([apiPromise.api.query.dappsStaking.generalStakerInfo.entries(address), apiPromise.api.query.dappsStaking.currentEra()]);
359
218
  const currentEra = (0, _utils2.parseRawNumber)(_currentEra.toHuman());
@@ -365,6 +224,7 @@ async function getAstarClaimRewardTxInfo(substrateApi, address) {
365
224
  const stakes = stakeData.stakes;
366
225
  const dappAddress = stakedDapp.Evm.toLowerCase();
367
226
  let numberOfUnclaimedEra = 0;
227
+ const maxTx = 50;
368
228
  for (let i = 0; i < stakes.length; i++) {
369
229
  var _stakes;
370
230
  const {
@@ -382,74 +242,13 @@ async function getAstarClaimRewardTxInfo(substrateApi, address) {
382
242
  const eraToClaim = isLastEra ? currentEra - parsedEra : nextEra - parsedEra;
383
243
  numberOfUnclaimedEra += eraToClaim;
384
244
  }
385
- for (let i = 0; i < numberOfUnclaimedEra; i++) {
386
- const tx = apiPromise.api.tx.dappsStaking.claimStaker({
387
- Evm: dappAddress
388
- });
389
- transactions.push(tx);
390
- }
391
- }
392
- console.log('no of tx: ', transactions.length);
393
- const extrinsic = apiPromise.api.tx.utility.batch(transactions);
394
- return extrinsic.paymentInfo(address);
395
- }
396
- async function handleAstarClaimRewardTxInfo(address, networkKey, chainInfo, substrateApiMap, evmApiMap) {
397
- const {
398
- decimals,
399
- symbol
400
- } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
401
- try {
402
- const [txInfo, balance] = await Promise.all([getAstarClaimRewardTxInfo(substrateApiMap[networkKey], address), (0, _balance.getFreeBalance)(networkKey, address, substrateApiMap, evmApiMap)]);
403
- const feeString = (0, _utils2.parseNumberToDisplay)(txInfo.partialFee, decimals) + ` ${symbol}`;
404
- const rawFee = (0, _utils2.parseRawNumber)(txInfo.partialFee.toString());
405
- const binaryBalance = new _util.BN(balance);
406
- const balanceError = txInfo.partialFee.gt(binaryBalance);
407
- return {
408
- rawFee,
409
- fee: feeString,
410
- balanceError
411
- };
412
- } catch (e) {
413
- return {
414
- fee: `0.0000 ${symbol}`,
415
- balanceError: false
245
+ const dappParam = (0, _utilCrypto.isEthereumAddress)(dappAddress) ? {
246
+ Evm: dappAddress
247
+ } : {
248
+ Wasm: dappAddress
416
249
  };
417
- }
418
- }
419
- async function getAstarClaimRewardExtrinsic(substrateApi, address) {
420
- const apiPromise = await substrateApi.isReady;
421
- const [_stakedDapps, _currentEra] = await Promise.all([apiPromise.api.query.dappsStaking.generalStakerInfo.entries(address), apiPromise.api.query.dappsStaking.currentEra()]);
422
- const currentEra = (0, _utils2.parseRawNumber)(_currentEra.toHuman());
423
- const transactions = [];
424
- for (const item of _stakedDapps) {
425
- const data = item[0].toHuman();
426
- const stakedDapp = data[1];
427
- const stakeData = item[1].toHuman();
428
- const stakes = stakeData.stakes;
429
- const dappAddress = stakedDapp.Evm.toLowerCase();
430
- let numberOfUnclaimedEra = 0;
431
- const maxTx = 50;
432
- for (let i = 0; i < stakes.length; i++) {
433
- var _stakes2;
434
- const {
435
- era,
436
- staked
437
- } = stakes[i];
438
- const bnStaked = new _util.BN(staked.replaceAll(',', ''));
439
- const parsedEra = (0, _utils2.parseRawNumber)(era);
440
- if (bnStaked.eq(new _util.BN(0))) {
441
- continue;
442
- }
443
- const nextEraData = (_stakes2 = stakes[i + 1]) !== null && _stakes2 !== void 0 ? _stakes2 : null;
444
- const nextEra = nextEraData && (0, _utils2.parseRawNumber)(nextEraData.era);
445
- const isLastEra = i === stakes.length - 1;
446
- const eraToClaim = isLastEra ? currentEra - parsedEra : nextEra - parsedEra;
447
- numberOfUnclaimedEra += eraToClaim;
448
- }
449
250
  for (let i = 0; i < Math.min(numberOfUnclaimedEra, maxTx); i++) {
450
- const tx = apiPromise.api.tx.dappsStaking.claimStaker({
451
- Evm: dappAddress
452
- });
251
+ const tx = apiPromise.api.tx.dappsStaking.claimStaker(dappParam);
453
252
  transactions.push(tx);
454
253
  }
455
254
  }
@@ -12,6 +12,8 @@ exports.getNominatorMetadata = getNominatorMetadata;
12
12
  exports.getUnbondingExtrinsic = getUnbondingExtrinsic;
13
13
  exports.getValidatorsInfo = getValidatorsInfo;
14
14
  exports.getWithdrawalExtrinsic = getWithdrawalExtrinsic;
15
+ exports.validateBondingCondition = validateBondingCondition;
16
+ exports.validateUnbondingCondition = validateUnbondingCondition;
15
17
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
16
18
  var _amplitude = require("@subwallet/extension-base/koni/api/staking/bonding/amplitude");
17
19
  var _astar = require("@subwallet/extension-base/koni/api/staking/bonding/astar");
@@ -23,15 +25,27 @@ var _constants = require("@subwallet/extension-base/services/chain-service/const
23
25
 
24
26
  // all addresses must be converted to its chain format
25
27
 
26
- async function getChainStakingMetadata(chain, substrateApi) {
27
- if (_constants._STAKING_CHAIN_GROUP.astar.includes(chain)) {
28
- return (0, _astar.getAstarStakingMetadata)(chain, substrateApi);
29
- } else if (_constants._STAKING_CHAIN_GROUP.para.includes(chain)) {
30
- return (0, _paraChain.getParaChainStakingMetadata)(chain, substrateApi);
31
- } else if (_constants._STAKING_CHAIN_GROUP.amplitude.includes(chain)) {
32
- return (0, _amplitude.getAmplitudeStakingMetadata)(chain, substrateApi);
28
+ function validateUnbondingCondition(nominatorMetadata, amount, chain, chainStakingMetadata, selectedValidator) {
29
+ if (_constants._STAKING_CHAIN_GROUP.relay.includes(chain)) {
30
+ return (0, _relayChain.validateRelayUnbondingCondition)(amount, chainStakingMetadata, nominatorMetadata);
31
+ }
32
+ return (0, _paraChain.validateParaChainUnbondingCondition)(amount, nominatorMetadata, chainStakingMetadata, selectedValidator);
33
+ }
34
+ function validateBondingCondition(chainInfo, amount, selectedValidators, address, chainStakingMetadata, nominatorMetadata) {
35
+ if (_constants._STAKING_CHAIN_GROUP.relay.includes(chainInfo.slug)) {
36
+ return (0, _relayChain.validateRelayBondingCondition)(chainInfo, amount, selectedValidators, address, chainStakingMetadata, nominatorMetadata);
33
37
  }
34
- return (0, _relayChain.getRelayChainStakingMetadata)(chain, substrateApi);
38
+ return (0, _paraChain.validateParaChainBondingCondition)(chainInfo, amount, selectedValidators, address, chainStakingMetadata, nominatorMetadata);
39
+ }
40
+ async function getChainStakingMetadata(chainInfo, substrateApi) {
41
+ if (_constants._STAKING_CHAIN_GROUP.astar.includes(chainInfo.slug)) {
42
+ return (0, _astar.getAstarStakingMetadata)(chainInfo.slug, substrateApi);
43
+ } else if (_constants._STAKING_CHAIN_GROUP.para.includes(chainInfo.slug)) {
44
+ return (0, _paraChain.getParaChainStakingMetadata)(chainInfo.slug, substrateApi);
45
+ } else if (_constants._STAKING_CHAIN_GROUP.amplitude.includes(chainInfo.slug)) {
46
+ return (0, _amplitude.getAmplitudeStakingMetadata)(chainInfo.slug, substrateApi);
47
+ }
48
+ return (0, _relayChain.getRelayChainStakingMetadata)(chainInfo, substrateApi);
35
49
  }
36
50
  async function getNominatorMetadata(chainInfo, address, substrateApi) {
37
51
  if (_constants._STAKING_CHAIN_GROUP.astar.includes(chainInfo.slug)) {
@@ -56,15 +70,15 @@ async function getValidatorsInfo(networkKey, substrateApi, decimals, chainStakin
56
70
  async function getNominationPoolsInfo(chain, substrateApi) {
57
71
  return (0, _relayChain.getRelayPoolsInfo)(chain, substrateApi);
58
72
  }
59
- async function getBondingExtrinsic(chainInfo, amount, nominatorMetadata, selectedValidators, substrateApi) {
73
+ async function getBondingExtrinsic(chainInfo, amount, selectedValidators, substrateApi, address, nominatorMetadata) {
60
74
  if (_constants._STAKING_CHAIN_GROUP.para.includes(chainInfo.slug)) {
61
- return (0, _paraChain.getParaBondingExtrinsic)(nominatorMetadata, chainInfo, substrateApi, amount, selectedValidators[0]); // only select 1 validator at a time
75
+ return (0, _paraChain.getParaBondingExtrinsic)(chainInfo, substrateApi, amount, selectedValidators[0], nominatorMetadata); // only select 1 validator at a time
62
76
  } else if (_constants._STAKING_CHAIN_GROUP.astar.includes(chainInfo.slug)) {
63
77
  return (0, _astar.getAstarBondingExtrinsic)(substrateApi, amount, selectedValidators[0]);
64
78
  } else if (_constants._STAKING_CHAIN_GROUP.amplitude.includes(chainInfo.slug)) {
65
- return (0, _amplitude.getAmplitudeBondingExtrinsic)(nominatorMetadata, substrateApi, amount, selectedValidators[0]);
79
+ return (0, _amplitude.getAmplitudeBondingExtrinsic)(substrateApi, amount, selectedValidators[0], nominatorMetadata);
66
80
  }
67
- return (0, _relayChain.getRelayBondingExtrinsic)(substrateApi, amount, selectedValidators, nominatorMetadata, chainInfo);
81
+ return (0, _relayChain.getRelayBondingExtrinsic)(substrateApi, amount, selectedValidators, chainInfo, address, nominatorMetadata);
68
82
  }
69
83
  async function getUnbondingExtrinsic(nominatorMetadata, amount, chain, substrateApi, selectedValidator) {
70
84
  if (_constants._STAKING_CHAIN_GROUP.para.includes(chain)) {
@@ -101,8 +115,6 @@ async function getClaimRewardExtrinsic(substrateApi, chain, address, stakingType
101
115
  async function getCancelWithdrawalExtrinsic(substrateApi, chain, selectedUnstaking) {
102
116
  if (_constants._STAKING_CHAIN_GROUP.para.includes(chain)) {
103
117
  return (0, _paraChain.getParaCancelWithdrawalExtrinsic)(substrateApi, selectedUnstaking);
104
- } else if (_constants._STAKING_CHAIN_GROUP.amplitude.includes(chain)) {
105
- return (0, _amplitude.getAmplitudeCancelWithdrawalExtrinsic)(substrateApi);
106
118
  }
107
119
  return (0, _relayChain.getRelayCancelWithdrawalExtrinsic)(substrateApi, selectedUnstaking);
108
120
  }
@@ -12,6 +12,9 @@ exports.getParaWithdrawalExtrinsic = getParaWithdrawalExtrinsic;
12
12
  exports.getParachainCollatorsInfo = getParachainCollatorsInfo;
13
13
  exports.getTuringCancelCompoundingExtrinsic = getTuringCancelCompoundingExtrinsic;
14
14
  exports.getTuringCompoundExtrinsic = getTuringCompoundExtrinsic;
15
+ exports.validateParaChainBondingCondition = validateParaChainBondingCondition;
16
+ exports.validateParaChainUnbondingCondition = validateParaChainUnbondingCondition;
17
+ var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
15
18
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
16
19
  var _utils = require("@subwallet/extension-base/koni/api/staking/bonding/utils");
17
20
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
@@ -22,6 +25,78 @@ var _utilCrypto = require("@polkadot/util-crypto");
22
25
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
23
26
  // SPDX-License-Identifier: Apache-2.0
24
27
 
28
+ function validateParaChainUnbondingCondition(amount, nominatorMetadata, chainStakingMetadata, selectedCollator) {
29
+ const errors = [];
30
+ let targetNomination;
31
+ for (const nomination of nominatorMetadata.nominations) {
32
+ if ((0, _utils3.isSameAddress)(nomination.validatorAddress, selectedCollator)) {
33
+ targetNomination = nomination;
34
+ break;
35
+ }
36
+ }
37
+ if (!targetNomination) {
38
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR));
39
+ return errors;
40
+ }
41
+ const bnActiveStake = new _util.BN(targetNomination.activeStake);
42
+ const bnRemainingStake = bnActiveStake.sub(new _util.BN(amount));
43
+ const bnChainMinStake = new _util.BN(chainStakingMetadata.minStake || '0');
44
+ const bnCollatorMinStake = new _util.BN(targetNomination.validatorMinStake || '0');
45
+ const bnMinStake = bnCollatorMinStake > bnChainMinStake ? bnCollatorMinStake : bnChainMinStake;
46
+ if (targetNomination.hasUnstaking) {
47
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXIST_UNSTAKING_REQUEST));
48
+ }
49
+ if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(bnMinStake))) {
50
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.INVALID_ACTIVE_STAKE));
51
+ }
52
+ return errors;
53
+ }
54
+ function validateParaChainBondingCondition(chainInfo, amount, selectedCollators, address, chainStakingMetadata, nominatorMetadata) {
55
+ const errors = [];
56
+ const selectedCollator = selectedCollators[0];
57
+ let bnTotalStake = new _util.BN(amount);
58
+ const bnChainMinStake = new _util.BN(chainStakingMetadata.minStake || '0');
59
+ const bnCollatorMinStake = new _util.BN(selectedCollator.minBond || '0');
60
+ const bnMinStake = bnCollatorMinStake > bnChainMinStake ? bnCollatorMinStake : bnChainMinStake;
61
+ if (!nominatorMetadata) {
62
+ if (!bnTotalStake.gte(bnMinStake)) {
63
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
64
+ }
65
+ return errors;
66
+ }
67
+ const {
68
+ bondedValidators
69
+ } = (0, _utils.getBondedValidators)(nominatorMetadata.nominations);
70
+ const parsedSelectedCollatorAddress = (0, _utils3.reformatAddress)(selectedCollator.address, 0);
71
+ if (!bondedValidators.includes(parsedSelectedCollatorAddress)) {
72
+ // new delegation
73
+ if (!bnTotalStake.gte(bnMinStake)) {
74
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
75
+ }
76
+ const delegationCount = nominatorMetadata.nominations.length + 1;
77
+ if (delegationCount > chainStakingMetadata.maxValidatorPerNominator) {
78
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXCEED_MAX_NOMINATIONS));
79
+ }
80
+ } else {
81
+ let currentDelegationAmount = '0';
82
+ let hasUnstaking = false;
83
+ for (const delegation of nominatorMetadata.nominations) {
84
+ if ((0, _utils3.reformatAddress)(delegation.validatorAddress, 0) === parsedSelectedCollatorAddress) {
85
+ currentDelegationAmount = delegation.activeStake;
86
+ hasUnstaking = !!delegation.hasUnstaking && delegation.hasUnstaking;
87
+ break;
88
+ }
89
+ }
90
+ bnTotalStake = bnTotalStake.add(new _util.BN(currentDelegationAmount));
91
+ if (!bnTotalStake.gte(bnMinStake)) {
92
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
93
+ }
94
+ if (hasUnstaking) {
95
+ errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXIST_UNSTAKING_REQUEST));
96
+ }
97
+ }
98
+ return errors;
99
+ }
25
100
  async function getParaChainStakingMetadata(chain, substrateApi) {
26
101
  const chainApi = await substrateApi.isReady;
27
102
  const _round = (await chainApi.api.query.parachainStaking.round()).toHuman();
@@ -75,13 +150,16 @@ async function getParaChainNominatorMetadata(chainInfo, address, substrateApi) {
75
150
  }
76
151
  let bnTotalActiveStake = _util.BN_ZERO;
77
152
  await Promise.all(delegatorState.delegations.map(async delegation => {
78
- const [_delegationScheduledRequests, _identity, _roundInfo] = await Promise.all([chainApi.api.query.parachainStaking.delegationScheduledRequests(delegation.owner), chainApi.api.query.identity.identityOf(delegation.owner), chainApi.api.query.parachainStaking.round()]);
153
+ const [_delegationScheduledRequests, _identity, _roundInfo, _collatorInfo] = await Promise.all([chainApi.api.query.parachainStaking.delegationScheduledRequests(delegation.owner), chainApi.api.query.identity.identityOf(delegation.owner), chainApi.api.query.parachainStaking.round(), chainApi.api.query.parachainStaking.candidateInfo(delegation.owner)]);
154
+ const rawCollatorInfo = _collatorInfo.toHuman();
155
+ const minDelegation = (rawCollatorInfo === null || rawCollatorInfo === void 0 ? void 0 : rawCollatorInfo.lowestTopDelegationAmount).replaceAll(',', '');
79
156
  const identityInfo = _identity.toHuman();
80
157
  const roundInfo = _roundInfo.toPrimitive();
81
158
  const delegationScheduledRequests = _delegationScheduledRequests.toPrimitive();
82
159
  const currentRound = roundInfo.current;
83
160
  const identity = (0, _utils.parseIdentity)(identityInfo);
84
161
  let hasUnstaking = false;
162
+ let delegationStatus = _KoniTypes.StakingStatus.NOT_EARNING;
85
163
 
86
164
  // parse unstaking info
87
165
  if (delegationScheduledRequests) {
@@ -108,9 +186,13 @@ async function getParaChainNominatorMetadata(chainInfo, address, substrateApi) {
108
186
  const bnStake = new _util.BN(delegation.amount);
109
187
  const bnUnstakeBalance = unstakingMap[delegation.owner] ? new _util.BN(unstakingMap[delegation.owner].claimable) : _util.BN_ZERO;
110
188
  const bnActiveStake = bnStake.sub(bnUnstakeBalance);
189
+ if (bnActiveStake.gt(_util.BN_ZERO) && bnActiveStake.gte(new _util.BN(minDelegation))) {
190
+ delegationStatus = _KoniTypes.StakingStatus.EARNING_REWARD;
191
+ }
111
192
  bnTotalActiveStake = bnTotalActiveStake.add(bnActiveStake);
112
193
  nominationList.push({
113
194
  chain,
195
+ status: delegationStatus,
114
196
  validatorAddress: delegation.owner,
115
197
  validatorIdentity: identity,
116
198
  activeStake: bnActiveStake.toString(),
@@ -122,9 +204,11 @@ async function getParaChainNominatorMetadata(chainInfo, address, substrateApi) {
122
204
  const collatorInfo = _collatorInfo.toPrimitive();
123
205
  nomination.validatorMinStake = collatorInfo.lowestTopDelegationAmount.toString();
124
206
  }));
207
+ const stakingStatus = (0, _utils.getStakingStatusByNominations)(bnTotalActiveStake, nominationList);
125
208
  return {
126
209
  chain,
127
210
  type: _KoniTypes.StakingType.NOMINATED,
211
+ status: stakingStatus,
128
212
  address: address,
129
213
  activeStake: bnTotalActiveStake.toString(),
130
214
  nominations: nominationList,
@@ -133,15 +217,16 @@ async function getParaChainNominatorMetadata(chainInfo, address, substrateApi) {
133
217
  }
134
218
  async function getParachainCollatorsInfo(chain, substrateApi) {
135
219
  const apiProps = await substrateApi.isReady;
136
- const allValidators = [];
220
+ const allCollators = [];
137
221
  const [_allCollators, _collatorCommission] = await Promise.all([apiProps.api.query.parachainStaking.candidateInfo.entries(), apiProps.api.query.parachainStaking.collatorCommission()]);
138
222
  const maxDelegationPerCollator = apiProps.api.consts.parachainStaking.maxTopDelegationsPerCandidate.toString();
139
223
  const rawCollatorCommission = _collatorCommission.toHuman();
140
224
  const collatorCommission = parseFloat(rawCollatorCommission.split('%')[0]);
141
225
  for (const collator of _allCollators) {
142
- const collatorAddress = collator[0].toPrimitive();
226
+ const _collatorAddress = collator[0].toHuman();
227
+ const collatorAddress = _collatorAddress[0];
143
228
  const collatorInfo = collator[1].toPrimitive();
144
- allValidators.push({
229
+ allCollators.push({
145
230
  commission: 0,
146
231
  expectedReturn: 0,
147
232
  address: collatorAddress,
@@ -157,9 +242,9 @@ async function getParachainCollatorsInfo(chain, substrateApi) {
157
242
  });
158
243
  }
159
244
  const extraInfoMap = {};
160
- await Promise.all(allValidators.map(async validator => {
245
+ await Promise.all(allCollators.map(async collator => {
161
246
  var _apiProps$api$query, _apiProps$api$query$i;
162
- const [_info, _identity] = await Promise.all([apiProps.api.query.parachainStaking.candidateInfo(validator.address), (_apiProps$api$query = apiProps.api.query) === null || _apiProps$api$query === void 0 ? void 0 : (_apiProps$api$query$i = _apiProps$api$query.identity) === null || _apiProps$api$query$i === void 0 ? void 0 : _apiProps$api$query$i.identityOf(validator.address) // some chains might not have identity pallet
247
+ const [_info, _identity] = await Promise.all([apiProps.api.query.parachainStaking.candidateInfo(collator.address), (_apiProps$api$query = apiProps.api.query) === null || _apiProps$api$query === void 0 ? void 0 : (_apiProps$api$query$i = _apiProps$api$query.identity) === null || _apiProps$api$query$i === void 0 ? void 0 : _apiProps$api$query$i.identityOf(collator.address) // some chains might not have identity pallet
163
248
  ]);
164
249
  const rawInfo = _info.toHuman();
165
250
  const rawIdentity = _identity ? _identity.toHuman() : null;
@@ -175,7 +260,7 @@ async function getParachainCollatorsInfo(chain, substrateApi) {
175
260
  isReasonable = rawIdentity.judgements.length > 0;
176
261
  identity = (0, _utils.parseIdentity)(rawIdentity);
177
262
  }
178
- extraInfoMap[validator.address] = {
263
+ extraInfoMap[collator.address] = {
179
264
  identity,
180
265
  isVerified: isReasonable,
181
266
  bond: bond.toString(),
@@ -184,7 +269,7 @@ async function getParachainCollatorsInfo(chain, substrateApi) {
184
269
  active
185
270
  };
186
271
  }));
187
- for (const validator of allValidators) {
272
+ for (const validator of allCollators) {
188
273
  validator.minBond = extraInfoMap[validator.address].minDelegation.toString();
189
274
  validator.ownStake = extraInfoMap[validator.address].bond.toString();
190
275
  validator.blocked = !extraInfoMap[validator.address].active;
@@ -195,16 +280,20 @@ async function getParachainCollatorsInfo(chain, substrateApi) {
195
280
  validator.nominatorCount = extraInfoMap[validator.address].delegationCount;
196
281
  validator.commission = collatorCommission;
197
282
  }
198
- return allValidators;
283
+ return allCollators;
199
284
  }
200
- async function getParaBondingExtrinsic(nominatorMetadata, chainInfo, substrateApi, amount, selectedCollatorInfo) {
285
+ async function getParaBondingExtrinsic(chainInfo, substrateApi, amount, selectedCollatorInfo, nominatorMetadata) {
201
286
  const apiPromise = await substrateApi.isReady;
202
287
  const binaryAmount = new _util.BN(amount);
288
+ if (!nominatorMetadata) {
289
+ return apiPromise.api.tx.parachainStaking.delegate(selectedCollatorInfo.address, binaryAmount, new _util.BN(selectedCollatorInfo.nominatorCount), 0);
290
+ }
203
291
  const {
204
292
  bondedValidators,
205
293
  nominationCount
206
294
  } = (0, _utils.getBondedValidators)(nominatorMetadata.nominations);
207
- if (!bondedValidators.includes((0, _utils3.reformatAddress)(selectedCollatorInfo.address, 0))) {
295
+ const parsedSelectedCollatorAddress = (0, _utils3.reformatAddress)(selectedCollatorInfo.address, 0);
296
+ if (!bondedValidators.includes(parsedSelectedCollatorAddress)) {
208
297
  return apiPromise.api.tx.parachainStaking.delegate(selectedCollatorInfo.address, binaryAmount, new _util.BN(selectedCollatorInfo.nominatorCount), nominationCount);
209
298
  } else {
210
299
  return apiPromise.api.tx.parachainStaking.delegatorBondMore(selectedCollatorInfo.address, binaryAmount);