@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
@@ -1,11 +1,10 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import { StakingType, UnstakingStatus } from '@subwallet/extension-base/background/KoniTypes';
5
- import { getFreeBalance } from '@subwallet/extension-base/koni/api/dotsama/balance';
4
+ import { StakingStatus, StakingType, UnstakingStatus } from '@subwallet/extension-base/background/KoniTypes';
5
+ import { getStakingStatusByNominations } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
6
6
  import { _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
7
- import { _getChainNativeTokenBasicInfo } from '@subwallet/extension-base/services/chain-service/utils';
8
- import { isUrl, parseNumberToDisplay, parseRawNumber } from '@subwallet/extension-base/utils';
7
+ import { isUrl, parseRawNumber } from '@subwallet/extension-base/utils';
9
8
  import fetch from 'cross-fetch';
10
9
  import { BN, BN_ZERO } from '@polkadot/util';
11
10
  import { isEthereumAddress } from '@polkadot/util-crypto';
@@ -62,6 +61,7 @@ export async function getAstarNominatorMetadata(chainInfo, address, substrateApi
62
61
  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)]);
63
62
  const ledger = _ledger.toPrimitive();
64
63
  const currentEra = _era.toString();
64
+ const minDelegatorStake = chainApi.api.consts.dappsStaking.minimumStakingAmount.toString();
65
65
  let bnTotalActiveStake = BN_ZERO;
66
66
  if (_stakerInfo.length > 0) {
67
67
  const dAppInfoMap = {};
@@ -78,11 +78,13 @@ export async function getAstarNominatorMetadata(chainInfo, address, substrateApi
78
78
  const currentStake = stakeList.slice(-1)[0].staked.toString() || '0';
79
79
  const bnCurrentStake = new BN(currentStake);
80
80
  if (bnCurrentStake.gt(BN_ZERO)) {
81
+ const dappStakingStatus = bnCurrentStake.gt(BN_ZERO) && bnCurrentStake.gte(new BN(minDelegatorStake)) ? StakingStatus.EARNING_REWARD : StakingStatus.NOT_EARNING;
81
82
  bnTotalActiveStake = bnTotalActiveStake.add(bnCurrentStake);
82
83
  const dappInfo = dAppInfoMap[dappAddress];
83
84
  nominationList.push({
85
+ status: dappStakingStatus,
84
86
  chain,
85
- validatorAddress: dappAddress,
87
+ validatorAddress: dappAddress.toLowerCase(),
86
88
  activeStake: currentStake,
87
89
  validatorMinStake: '0',
88
90
  validatorIdentity: dappInfo === null || dappInfo === void 0 ? void 0 : dappInfo.name,
@@ -109,13 +111,15 @@ export async function getAstarNominatorMetadata(chainInfo, address, substrateApi
109
111
  if (nominationList.length === 0 && unstakingList.length === 0) {
110
112
  return;
111
113
  }
114
+ const stakingStatus = getStakingStatusByNominations(bnTotalActiveStake, nominationList);
112
115
  return {
113
116
  chain,
114
117
  type: StakingType.NOMINATED,
115
118
  address: address,
116
119
  activeStake: bnTotalActiveStake.toString(),
117
120
  nominations: nominationList,
118
- unstakings: unstakingList
121
+ unstakings: unstakingList,
122
+ status: stakingStatus
119
123
  };
120
124
  }
121
125
  export async function getAstarDappsInfo(networkKey, substrateApi) {
@@ -137,21 +141,26 @@ export async function getAstarDappsInfo(networkKey, substrateApi) {
137
141
  const dappName = dapp.name;
138
142
  const dappAddress = dapp.address;
139
143
  const dappIcon = isUrl(dapp.iconUrl) ? dapp.iconUrl : undefined;
140
- const _contractInfo = await chainApi.api.query.dappsStaking.contractEraStake({
144
+ const contractParam = isEthereumAddress(dappAddress) ? {
141
145
  Evm: dappAddress
142
- }, era);
143
- const contractInfo = _contractInfo.toHuman();
144
- let totalStake = 0;
146
+ } : {
147
+ Wasm: dappAddress
148
+ };
149
+ const _contractInfo = await chainApi.api.query.dappsStaking.contractEraStake(contractParam, era);
150
+ const contractInfo = _contractInfo.toPrimitive();
151
+ let totalStake = '0';
145
152
  let stakerCount = 0;
146
153
  if (contractInfo !== null) {
147
- totalStake = parseRawNumber(contractInfo.total);
148
- stakerCount = parseRawNumber(contractInfo.numberOfStakers);
154
+ var _contractInfo$total;
155
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
156
+ totalStake = contractInfo === null || contractInfo === void 0 ? void 0 : (_contractInfo$total = contractInfo.total) === null || _contractInfo$total === void 0 ? void 0 : _contractInfo$total.toString();
157
+ stakerCount = contractInfo.numberOfStakers;
149
158
  }
150
159
  allDappsInfo.push({
151
160
  commission: 0,
152
161
  expectedReturn: 0,
153
- address: dappAddress,
154
- totalStake: totalStake.toString(),
162
+ address: dappAddress.toLowerCase(),
163
+ totalStake: totalStake,
155
164
  ownStake: '0',
156
165
  otherStake: totalStake.toString(),
157
166
  nominatorCount: stakerCount,
@@ -166,172 +175,31 @@ export async function getAstarDappsInfo(networkKey, substrateApi) {
166
175
  }));
167
176
  return allDappsInfo;
168
177
  }
169
- export async function getAstarBondingTxInfo(chainInfo, substrateApi, stakerAddress, amount, dappInfo) {
170
- const apiPromise = await substrateApi.isReady;
171
- const {
172
- decimals
173
- } = _getChainNativeTokenBasicInfo(chainInfo);
174
- const parsedAmount = amount * 10 ** decimals;
175
- const binaryAmount = new BN(parsedAmount.toString());
176
- const extrinsic = apiPromise.api.tx.dappsStaking.bondAndStake({
177
- Evm: dappInfo.address
178
- }, binaryAmount);
179
- return extrinsic.paymentInfo(stakerAddress);
180
- }
181
- export async function handleAstarBondingTxInfo(chainInfo, amount, networkKey, stakerAddress, dappInfo, substrateApiMap, evmApiMap) {
182
- const {
183
- decimals,
184
- symbol
185
- } = _getChainNativeTokenBasicInfo(chainInfo);
186
- try {
187
- const [txInfo, balance] = await Promise.all([getAstarBondingTxInfo(chainInfo, substrateApiMap[networkKey], stakerAddress, amount, dappInfo), getFreeBalance(networkKey, stakerAddress, substrateApiMap, evmApiMap)]);
188
- const feeString = parseNumberToDisplay(txInfo.partialFee, decimals) + ` ${symbol}`;
189
- const rawFee = parseRawNumber(txInfo.partialFee.toString());
190
- const binaryBalance = new BN(balance);
191
- const sumAmount = txInfo.partialFee.addn(amount);
192
- const balanceError = sumAmount.gt(binaryBalance);
193
- return {
194
- rawFee,
195
- fee: feeString,
196
- balanceError
197
- };
198
- } catch (e) {
199
- return {
200
- fee: `0.0000 ${symbol}`,
201
- balanceError: false
202
- };
203
- }
204
- }
205
178
  export async function getAstarBondingExtrinsic(substrateApi, amount, dappInfo) {
206
179
  const chainApi = await substrateApi.isReady;
207
180
  const binaryAmount = new BN(amount);
208
- return chainApi.api.tx.dappsStaking.bondAndStake({
181
+ const dappParam = isEthereumAddress(dappInfo.address) ? {
209
182
  Evm: dappInfo.address
210
- }, binaryAmount);
211
- }
212
- export async function getAstarUnbondingTxInfo(chainInfo, substrateApi, stakerAddress, amount, dappAddress) {
213
- const apiPromise = await substrateApi.isReady;
214
- const {
215
- decimals
216
- } = _getChainNativeTokenBasicInfo(chainInfo);
217
- const parsedAmount = amount * 10 ** decimals;
218
- const binaryAmount = new BN(parsedAmount.toString());
219
- const extrinsic = apiPromise.api.tx.dappsStaking.unbondAndUnstake({
220
- Evm: dappAddress
221
- }, binaryAmount);
222
- return extrinsic.paymentInfo(stakerAddress);
223
- }
224
- export async function handleAstarUnbondingTxInfo(chainInfo, amount, networkKey, stakerAddress, dappAddress, substrateApiMap, evmApiMap) {
225
- const {
226
- decimals,
227
- symbol
228
- } = _getChainNativeTokenBasicInfo(chainInfo);
229
- try {
230
- const [txInfo, balance] = await Promise.all([getAstarUnbondingTxInfo(chainInfo, substrateApiMap[networkKey], stakerAddress, amount, dappAddress), getFreeBalance(networkKey, stakerAddress, substrateApiMap, evmApiMap)]);
231
- const feeString = parseNumberToDisplay(txInfo.partialFee, decimals) + ` ${symbol}`;
232
- const rawFee = parseRawNumber(txInfo.partialFee.toString());
233
- const binaryBalance = new BN(balance);
234
- const balanceError = txInfo.partialFee.gt(binaryBalance);
235
- return {
236
- rawFee,
237
- fee: feeString,
238
- balanceError
239
- };
240
- } catch (e) {
241
- return {
242
- fee: `0.0000 ${symbol}`,
243
- balanceError: false
244
- };
245
- }
183
+ } : {
184
+ Wasm: dappInfo.address
185
+ };
186
+ return chainApi.api.tx.dappsStaking.bondAndStake(dappParam, binaryAmount);
246
187
  }
247
188
  export async function getAstarUnbondingExtrinsic(substrateApi, amount, dappAddress) {
248
189
  const apiPromise = await substrateApi.isReady;
249
190
  const binaryAmount = new BN(amount);
250
- return apiPromise.api.tx.dappsStaking.unbondAndUnstake({
191
+ const dappParam = isEthereumAddress(dappAddress) ? {
251
192
  Evm: dappAddress
252
- }, binaryAmount);
253
- }
254
- async function getAstarUnlockingInfo(substrateApi, address, networkKey) {
255
- const chainApi = await substrateApi.isReady;
256
- const [_stakingInfo, _era] = await Promise.all([chainApi.api.query.dappsStaking.ledger(address), chainApi.api.query.dappsStaking.currentEra()]);
257
- const currentEra = parseRawNumber(_era.toHuman());
258
- const stakingInfo = _stakingInfo.toHuman();
259
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
260
- const unlockingChunks = stakingInfo.unbondingInfo.unlockingChunks;
261
- let nextWithdrawalEra = -1;
262
- let nextWithdrawalAmount = 0;
263
- let redeemable = 0;
264
- for (const chunk of unlockingChunks) {
265
- const unlockEra = parseRawNumber(chunk.unlockEra);
266
- const amount = parseRawNumber(chunk.amount);
267
-
268
- // Find next withdrawal
269
- if (nextWithdrawalEra === -1) {
270
- nextWithdrawalEra = unlockEra;
271
- nextWithdrawalAmount = amount;
272
- } else if (unlockEra <= nextWithdrawalEra) {
273
- nextWithdrawalEra = unlockEra;
274
- nextWithdrawalAmount += amount;
275
- }
276
-
277
- // Find redeemable
278
- if (unlockEra - currentEra <= 0) {
279
- redeemable += amount;
280
- }
281
- }
282
- const nextWithdrawal = (nextWithdrawalEra - currentEra) * _STAKING_ERA_LENGTH_MAP[networkKey];
283
- return {
284
- nextWithdrawal,
285
- nextWithdrawalAmount,
286
- redeemable
287
- };
288
- }
289
- export async function handleAstarUnlockingInfo(substrateApi, chainInfo, networkKey, address, type) {
290
- const {
291
- nextWithdrawal,
292
- nextWithdrawalAmount,
293
- redeemable
294
- } = await getAstarUnlockingInfo(substrateApi, address, networkKey);
295
- const {
296
- decimals
297
- } = _getChainNativeTokenBasicInfo(chainInfo);
298
- const parsedRedeemable = redeemable / 10 ** decimals;
299
- const parsedNextWithdrawalAmount = nextWithdrawalAmount / 10 ** decimals;
300
- return {
301
- address,
302
- type,
303
- chain: networkKey,
304
- nextWithdrawal: nextWithdrawal,
305
- redeemable: parsedRedeemable,
306
- nextWithdrawalAmount: parsedNextWithdrawalAmount
307
- };
308
- }
309
- export async function getAstarWithdrawalTxInfo(substrateApi, address) {
310
- const apiPromise = await substrateApi.isReady;
311
- const extrinsic = apiPromise.api.tx.dappsStaking.withdrawUnbonded();
312
- return extrinsic.paymentInfo(address);
313
- }
314
- export async function handleAstarWithdrawalTxInfo(networkKey, chainInfo, substrateApiMap, evmApiMap, address) {
315
- const [txInfo, balance] = await Promise.all([getAstarWithdrawalTxInfo(substrateApiMap[networkKey], address), getFreeBalance(networkKey, address, substrateApiMap, evmApiMap)]);
316
- const {
317
- decimals,
318
- symbol
319
- } = _getChainNativeTokenBasicInfo(chainInfo);
320
- const feeString = parseNumberToDisplay(txInfo.partialFee, decimals) + ` ${symbol}`;
321
- const rawFee = parseRawNumber(txInfo.partialFee.toString());
322
- const binaryBalance = new BN(balance);
323
- const balanceError = txInfo.partialFee.gt(binaryBalance);
324
- return {
325
- rawFee,
326
- fee: feeString,
327
- balanceError
193
+ } : {
194
+ Wasm: dappAddress
328
195
  };
196
+ return apiPromise.api.tx.dappsStaking.unbondAndUnstake(dappParam, binaryAmount);
329
197
  }
330
198
  export async function getAstarWithdrawalExtrinsic(substrateApi) {
331
199
  const chainApi = await substrateApi.isReady;
332
200
  return chainApi.api.tx.dappsStaking.withdrawUnbonded();
333
201
  }
334
- export async function getAstarClaimRewardTxInfo(substrateApi, address) {
202
+ export async function getAstarClaimRewardExtrinsic(substrateApi, address) {
335
203
  const apiPromise = await substrateApi.isReady;
336
204
  const [_stakedDapps, _currentEra] = await Promise.all([apiPromise.api.query.dappsStaking.generalStakerInfo.entries(address), apiPromise.api.query.dappsStaking.currentEra()]);
337
205
  const currentEra = parseRawNumber(_currentEra.toHuman());
@@ -343,6 +211,7 @@ export async function getAstarClaimRewardTxInfo(substrateApi, address) {
343
211
  const stakes = stakeData.stakes;
344
212
  const dappAddress = stakedDapp.Evm.toLowerCase();
345
213
  let numberOfUnclaimedEra = 0;
214
+ const maxTx = 50;
346
215
  for (let i = 0; i < stakes.length; i++) {
347
216
  var _stakes;
348
217
  const {
@@ -360,74 +229,13 @@ export async function getAstarClaimRewardTxInfo(substrateApi, address) {
360
229
  const eraToClaim = isLastEra ? currentEra - parsedEra : nextEra - parsedEra;
361
230
  numberOfUnclaimedEra += eraToClaim;
362
231
  }
363
- for (let i = 0; i < numberOfUnclaimedEra; i++) {
364
- const tx = apiPromise.api.tx.dappsStaking.claimStaker({
365
- Evm: dappAddress
366
- });
367
- transactions.push(tx);
368
- }
369
- }
370
- console.log('no of tx: ', transactions.length);
371
- const extrinsic = apiPromise.api.tx.utility.batch(transactions);
372
- return extrinsic.paymentInfo(address);
373
- }
374
- export async function handleAstarClaimRewardTxInfo(address, networkKey, chainInfo, substrateApiMap, evmApiMap) {
375
- const {
376
- decimals,
377
- symbol
378
- } = _getChainNativeTokenBasicInfo(chainInfo);
379
- try {
380
- const [txInfo, balance] = await Promise.all([getAstarClaimRewardTxInfo(substrateApiMap[networkKey], address), getFreeBalance(networkKey, address, substrateApiMap, evmApiMap)]);
381
- const feeString = parseNumberToDisplay(txInfo.partialFee, decimals) + ` ${symbol}`;
382
- const rawFee = parseRawNumber(txInfo.partialFee.toString());
383
- const binaryBalance = new BN(balance);
384
- const balanceError = txInfo.partialFee.gt(binaryBalance);
385
- return {
386
- rawFee,
387
- fee: feeString,
388
- balanceError
389
- };
390
- } catch (e) {
391
- return {
392
- fee: `0.0000 ${symbol}`,
393
- balanceError: false
232
+ const dappParam = isEthereumAddress(dappAddress) ? {
233
+ Evm: dappAddress
234
+ } : {
235
+ Wasm: dappAddress
394
236
  };
395
- }
396
- }
397
- export async function getAstarClaimRewardExtrinsic(substrateApi, address) {
398
- const apiPromise = await substrateApi.isReady;
399
- const [_stakedDapps, _currentEra] = await Promise.all([apiPromise.api.query.dappsStaking.generalStakerInfo.entries(address), apiPromise.api.query.dappsStaking.currentEra()]);
400
- const currentEra = parseRawNumber(_currentEra.toHuman());
401
- const transactions = [];
402
- for (const item of _stakedDapps) {
403
- const data = item[0].toHuman();
404
- const stakedDapp = data[1];
405
- const stakeData = item[1].toHuman();
406
- const stakes = stakeData.stakes;
407
- const dappAddress = stakedDapp.Evm.toLowerCase();
408
- let numberOfUnclaimedEra = 0;
409
- const maxTx = 50;
410
- for (let i = 0; i < stakes.length; i++) {
411
- var _stakes2;
412
- const {
413
- era,
414
- staked
415
- } = stakes[i];
416
- const bnStaked = new BN(staked.replaceAll(',', ''));
417
- const parsedEra = parseRawNumber(era);
418
- if (bnStaked.eq(new BN(0))) {
419
- continue;
420
- }
421
- const nextEraData = (_stakes2 = stakes[i + 1]) !== null && _stakes2 !== void 0 ? _stakes2 : null;
422
- const nextEra = nextEraData && parseRawNumber(nextEraData.era);
423
- const isLastEra = i === stakes.length - 1;
424
- const eraToClaim = isLastEra ? currentEra - parsedEra : nextEra - parsedEra;
425
- numberOfUnclaimedEra += eraToClaim;
426
- }
427
237
  for (let i = 0; i < Math.min(numberOfUnclaimedEra, maxTx); i++) {
428
- const tx = apiPromise.api.tx.dappsStaking.claimStaker({
429
- Evm: dappAddress
430
- });
238
+ const tx = apiPromise.api.tx.dappsStaking.claimStaker(dappParam);
431
239
  transactions.push(tx);
432
240
  }
433
241
  }
@@ -1,11 +1,14 @@
1
1
  import { _ChainInfo } from '@subwallet/chain-list/types';
2
+ import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
2
3
  import { ChainStakingMetadata, NominatorMetadata, StakingType, UnstakingInfo, ValidatorInfo } from '@subwallet/extension-base/background/KoniTypes';
3
4
  import { _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
4
- export declare function getChainStakingMetadata(chain: string, substrateApi: _SubstrateApi): Promise<ChainStakingMetadata>;
5
+ export declare function validateUnbondingCondition(nominatorMetadata: NominatorMetadata, amount: string, chain: string, chainStakingMetadata: ChainStakingMetadata, selectedValidator?: string): TransactionError[];
6
+ export declare function validateBondingCondition(chainInfo: _ChainInfo, amount: string, selectedValidators: ValidatorInfo[], address: string, chainStakingMetadata: ChainStakingMetadata, nominatorMetadata?: NominatorMetadata): TransactionError[];
7
+ export declare function getChainStakingMetadata(chainInfo: _ChainInfo, substrateApi: _SubstrateApi): Promise<ChainStakingMetadata>;
5
8
  export declare function getNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi): Promise<NominatorMetadata | undefined>;
6
9
  export declare function getValidatorsInfo(networkKey: string, substrateApi: _SubstrateApi, decimals: number, chainStakingMetadata: ChainStakingMetadata): Promise<ValidatorInfo[]>;
7
10
  export declare function getNominationPoolsInfo(chain: string, substrateApi: _SubstrateApi): Promise<import("@subwallet/extension-base/background/KoniTypes").NominationPoolInfo[]>;
8
- export declare function getBondingExtrinsic(chainInfo: _ChainInfo, amount: string, nominatorMetadata: NominatorMetadata, selectedValidators: ValidatorInfo[], substrateApi: _SubstrateApi): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
11
+ export declare function getBondingExtrinsic(chainInfo: _ChainInfo, amount: string, selectedValidators: ValidatorInfo[], substrateApi: _SubstrateApi, address: string, nominatorMetadata?: NominatorMetadata): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
9
12
  export declare function getUnbondingExtrinsic(nominatorMetadata: NominatorMetadata, amount: string, chain: string, substrateApi: _SubstrateApi, selectedValidator?: string): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
10
13
  export declare function getWithdrawalExtrinsic(substrateApi: _SubstrateApi, chain: string, nominatorMetadata: NominatorMetadata, validatorAddress?: string): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
11
14
  export declare function getClaimRewardExtrinsic(substrateApi: _SubstrateApi, chain: string, address: string, stakingType: StakingType, bondReward?: boolean): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
@@ -2,22 +2,34 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { StakingType } from '@subwallet/extension-base/background/KoniTypes';
5
- import { getAmplitudeBondingExtrinsic, getAmplitudeCancelWithdrawalExtrinsic, getAmplitudeClaimRewardExtrinsic, getAmplitudeCollatorsInfo, getAmplitudeNominatorMetadata, getAmplitudeStakingMetadata, getAmplitudeUnbondingExtrinsic, getAmplitudeWithdrawalExtrinsic } from '@subwallet/extension-base/koni/api/staking/bonding/amplitude';
5
+ import { getAmplitudeBondingExtrinsic, getAmplitudeClaimRewardExtrinsic, getAmplitudeCollatorsInfo, getAmplitudeNominatorMetadata, getAmplitudeStakingMetadata, getAmplitudeUnbondingExtrinsic, getAmplitudeWithdrawalExtrinsic } from '@subwallet/extension-base/koni/api/staking/bonding/amplitude';
6
6
  import { getAstarBondingExtrinsic, getAstarClaimRewardExtrinsic, getAstarDappsInfo, getAstarNominatorMetadata, getAstarStakingMetadata, getAstarUnbondingExtrinsic, getAstarWithdrawalExtrinsic } from '@subwallet/extension-base/koni/api/staking/bonding/astar';
7
- import { getParaBondingExtrinsic, getParaCancelWithdrawalExtrinsic, getParachainCollatorsInfo, getParaChainNominatorMetadata, getParaChainStakingMetadata, getParaUnbondingExtrinsic, getParaWithdrawalExtrinsic } from '@subwallet/extension-base/koni/api/staking/bonding/paraChain';
8
- import { getPoolingClaimRewardExtrinsic, getPoolingWithdrawalExtrinsic, getRelayBondingExtrinsic, getRelayCancelWithdrawalExtrinsic, getRelayChainNominatorMetadata, getRelayChainStakingMetadata, getRelayPoolsInfo, getRelayUnbondingExtrinsic, getRelayValidatorsInfo, getRelayWithdrawalExtrinsic } from '@subwallet/extension-base/koni/api/staking/bonding/relayChain';
7
+ import { getParaBondingExtrinsic, getParaCancelWithdrawalExtrinsic, getParachainCollatorsInfo, getParaChainNominatorMetadata, getParaChainStakingMetadata, getParaUnbondingExtrinsic, getParaWithdrawalExtrinsic, validateParaChainBondingCondition, validateParaChainUnbondingCondition } from '@subwallet/extension-base/koni/api/staking/bonding/paraChain';
8
+ import { getPoolingClaimRewardExtrinsic, getPoolingWithdrawalExtrinsic, getRelayBondingExtrinsic, getRelayCancelWithdrawalExtrinsic, getRelayChainNominatorMetadata, getRelayChainStakingMetadata, getRelayPoolsInfo, getRelayUnbondingExtrinsic, getRelayValidatorsInfo, getRelayWithdrawalExtrinsic, validateRelayBondingCondition, validateRelayUnbondingCondition } from '@subwallet/extension-base/koni/api/staking/bonding/relayChain';
9
9
  import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/chain-service/constants';
10
10
  // all addresses must be converted to its chain format
11
11
 
12
- export async function getChainStakingMetadata(chain, substrateApi) {
13
- if (_STAKING_CHAIN_GROUP.astar.includes(chain)) {
14
- return getAstarStakingMetadata(chain, substrateApi);
15
- } else if (_STAKING_CHAIN_GROUP.para.includes(chain)) {
16
- return getParaChainStakingMetadata(chain, substrateApi);
17
- } else if (_STAKING_CHAIN_GROUP.amplitude.includes(chain)) {
18
- return getAmplitudeStakingMetadata(chain, substrateApi);
12
+ export function validateUnbondingCondition(nominatorMetadata, amount, chain, chainStakingMetadata, selectedValidator) {
13
+ if (_STAKING_CHAIN_GROUP.relay.includes(chain)) {
14
+ return validateRelayUnbondingCondition(amount, chainStakingMetadata, nominatorMetadata);
15
+ }
16
+ return validateParaChainUnbondingCondition(amount, nominatorMetadata, chainStakingMetadata, selectedValidator);
17
+ }
18
+ export function validateBondingCondition(chainInfo, amount, selectedValidators, address, chainStakingMetadata, nominatorMetadata) {
19
+ if (_STAKING_CHAIN_GROUP.relay.includes(chainInfo.slug)) {
20
+ return validateRelayBondingCondition(chainInfo, amount, selectedValidators, address, chainStakingMetadata, nominatorMetadata);
19
21
  }
20
- return getRelayChainStakingMetadata(chain, substrateApi);
22
+ return validateParaChainBondingCondition(chainInfo, amount, selectedValidators, address, chainStakingMetadata, nominatorMetadata);
23
+ }
24
+ export async function getChainStakingMetadata(chainInfo, substrateApi) {
25
+ if (_STAKING_CHAIN_GROUP.astar.includes(chainInfo.slug)) {
26
+ return getAstarStakingMetadata(chainInfo.slug, substrateApi);
27
+ } else if (_STAKING_CHAIN_GROUP.para.includes(chainInfo.slug)) {
28
+ return getParaChainStakingMetadata(chainInfo.slug, substrateApi);
29
+ } else if (_STAKING_CHAIN_GROUP.amplitude.includes(chainInfo.slug)) {
30
+ return getAmplitudeStakingMetadata(chainInfo.slug, substrateApi);
31
+ }
32
+ return getRelayChainStakingMetadata(chainInfo, substrateApi);
21
33
  }
22
34
  export async function getNominatorMetadata(chainInfo, address, substrateApi) {
23
35
  if (_STAKING_CHAIN_GROUP.astar.includes(chainInfo.slug)) {
@@ -42,15 +54,15 @@ export async function getValidatorsInfo(networkKey, substrateApi, decimals, chai
42
54
  export async function getNominationPoolsInfo(chain, substrateApi) {
43
55
  return getRelayPoolsInfo(chain, substrateApi);
44
56
  }
45
- export async function getBondingExtrinsic(chainInfo, amount, nominatorMetadata, selectedValidators, substrateApi) {
57
+ export async function getBondingExtrinsic(chainInfo, amount, selectedValidators, substrateApi, address, nominatorMetadata) {
46
58
  if (_STAKING_CHAIN_GROUP.para.includes(chainInfo.slug)) {
47
- return getParaBondingExtrinsic(nominatorMetadata, chainInfo, substrateApi, amount, selectedValidators[0]); // only select 1 validator at a time
59
+ return getParaBondingExtrinsic(chainInfo, substrateApi, amount, selectedValidators[0], nominatorMetadata); // only select 1 validator at a time
48
60
  } else if (_STAKING_CHAIN_GROUP.astar.includes(chainInfo.slug)) {
49
61
  return getAstarBondingExtrinsic(substrateApi, amount, selectedValidators[0]);
50
62
  } else if (_STAKING_CHAIN_GROUP.amplitude.includes(chainInfo.slug)) {
51
- return getAmplitudeBondingExtrinsic(nominatorMetadata, substrateApi, amount, selectedValidators[0]);
63
+ return getAmplitudeBondingExtrinsic(substrateApi, amount, selectedValidators[0], nominatorMetadata);
52
64
  }
53
- return getRelayBondingExtrinsic(substrateApi, amount, selectedValidators, nominatorMetadata, chainInfo);
65
+ return getRelayBondingExtrinsic(substrateApi, amount, selectedValidators, chainInfo, address, nominatorMetadata);
54
66
  }
55
67
  export async function getUnbondingExtrinsic(nominatorMetadata, amount, chain, substrateApi, selectedValidator) {
56
68
  if (_STAKING_CHAIN_GROUP.para.includes(chain)) {
@@ -86,8 +98,6 @@ export async function getClaimRewardExtrinsic(substrateApi, chain, address, stak
86
98
  export async function getCancelWithdrawalExtrinsic(substrateApi, chain, selectedUnstaking) {
87
99
  if (_STAKING_CHAIN_GROUP.para.includes(chain)) {
88
100
  return getParaCancelWithdrawalExtrinsic(substrateApi, selectedUnstaking);
89
- } else if (_STAKING_CHAIN_GROUP.amplitude.includes(chain)) {
90
- return getAmplitudeCancelWithdrawalExtrinsic(substrateApi);
91
101
  }
92
102
  return getRelayCancelWithdrawalExtrinsic(substrateApi, selectedUnstaking);
93
103
  }
@@ -1,10 +1,13 @@
1
1
  import { _ChainInfo } from '@subwallet/chain-list/types';
2
+ import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
2
3
  import { ChainStakingMetadata, NominatorMetadata, UnstakingInfo, ValidatorInfo } from '@subwallet/extension-base/background/KoniTypes';
3
4
  import { _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
5
+ export declare function validateParaChainUnbondingCondition(amount: string, nominatorMetadata: NominatorMetadata, chainStakingMetadata: ChainStakingMetadata, selectedCollator: string): TransactionError[];
6
+ export declare function validateParaChainBondingCondition(chainInfo: _ChainInfo, amount: string, selectedCollators: ValidatorInfo[], address: string, chainStakingMetadata: ChainStakingMetadata, nominatorMetadata?: NominatorMetadata): TransactionError[];
4
7
  export declare function getParaChainStakingMetadata(chain: string, substrateApi: _SubstrateApi): Promise<ChainStakingMetadata>;
5
8
  export declare function getParaChainNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi): Promise<NominatorMetadata | undefined>;
6
9
  export declare function getParachainCollatorsInfo(chain: string, substrateApi: _SubstrateApi): Promise<ValidatorInfo[]>;
7
- export declare function getParaBondingExtrinsic(nominatorMetadata: NominatorMetadata, chainInfo: _ChainInfo, substrateApi: _SubstrateApi, amount: string, selectedCollatorInfo: ValidatorInfo): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
10
+ export declare function getParaBondingExtrinsic(chainInfo: _ChainInfo, substrateApi: _SubstrateApi, amount: string, selectedCollatorInfo: ValidatorInfo, nominatorMetadata?: NominatorMetadata): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
8
11
  export declare function getParaUnbondingExtrinsic(substrateApi: _SubstrateApi, amount: string, nominatorMetadata: NominatorMetadata, selectedValidator: string): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
9
12
  export declare function getParaWithdrawalExtrinsic(substrateApi: _SubstrateApi, address: string, collatorAddress: string): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
10
13
  export declare function getTuringCompoundExtrinsic(substrateApi: _SubstrateApi, address: string, collatorAddress: string, accountMinimum: string, bondedAmount: string): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;