@subwallet/extension-base 1.3.78-0 → 1.3.80-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/background/KoniTypes.d.ts +16 -6
  2. package/cjs/core/logic-validation/index.js +0 -12
  3. package/cjs/core/substrate/system-pallet.js +3 -0
  4. package/cjs/koni/api/nft/index.js +0 -14
  5. package/cjs/koni/background/cron.js +0 -17
  6. package/cjs/koni/background/handlers/Extension.js +13 -7
  7. package/cjs/koni/background/handlers/State.js +24 -6
  8. package/cjs/packageInfo.js +1 -1
  9. package/cjs/services/balance-service/helpers/process.js +49 -21
  10. package/cjs/services/balance-service/index.js +2 -2
  11. package/cjs/services/balance-service/transfer/xcm/utils.js +9 -9
  12. package/cjs/services/chain-service/constants.js +6 -2
  13. package/cjs/services/earning-service/handlers/native-staking/dtao.js +13 -13
  14. package/cjs/services/earning-service/handlers/native-staking/tao.js +16 -10
  15. package/cjs/services/earning-service/handlers/special.js +12 -4
  16. package/cjs/services/nft-service/index.js +219 -150
  17. package/cjs/services/nft-service/multi-chain-nft-fetcher.js +145 -0
  18. package/cjs/services/nft-service/nft-handlers/base-nft-handler.js +28 -0
  19. package/cjs/services/nft-service/nft-handlers/evm/evm-nft-handler.js +179 -0
  20. package/cjs/services/nft-service/nft-handlers/registry.js +37 -0
  21. package/cjs/services/nft-service/nft-handlers/unique/unique-nft-handler.js +187 -0
  22. package/cjs/services/storage-service/DatabaseService.js +1 -1
  23. package/cjs/services/swap-service/handler/asset-hub/handler.js +7 -4
  24. package/cjs/services/swap-service/handler/asset-hub/router.js +2 -66
  25. package/cjs/services/swap-service/handler/base-handler.js +4 -3
  26. package/cjs/services/swap-service/handler/hydradx-handler.js +9 -5
  27. package/cjs/services/swap-service/index.js +5 -4
  28. package/cjs/types/swap/index.js +4 -9
  29. package/cjs/utils/account/common.js +44 -8
  30. package/core/logic-validation/index.d.ts +0 -1
  31. package/core/logic-validation/index.js +0 -1
  32. package/core/substrate/system-pallet.js +3 -0
  33. package/koni/api/nft/index.js +1 -15
  34. package/koni/background/cron.d.ts +0 -1
  35. package/koni/background/cron.js +1 -18
  36. package/koni/background/handlers/Extension.d.ts +4 -0
  37. package/koni/background/handlers/Extension.js +13 -7
  38. package/koni/background/handlers/State.d.ts +8 -2
  39. package/koni/background/handlers/State.js +24 -6
  40. package/package.json +31 -11
  41. package/packageInfo.js +1 -1
  42. package/services/balance-service/helpers/process.d.ts +1 -1
  43. package/services/balance-service/helpers/process.js +48 -21
  44. package/services/balance-service/index.js +2 -2
  45. package/services/balance-service/transfer/xcm/utils.js +9 -9
  46. package/services/chain-service/constants.d.ts +3 -0
  47. package/services/chain-service/constants.js +3 -0
  48. package/services/earning-service/handlers/native-staking/dtao.js +12 -13
  49. package/services/earning-service/handlers/native-staking/tao.d.ts +2 -1
  50. package/services/earning-service/handlers/native-staking/tao.js +15 -10
  51. package/services/earning-service/handlers/special.js +13 -5
  52. package/services/nft-service/index.d.ts +42 -6
  53. package/services/nft-service/index.js +219 -151
  54. package/services/nft-service/multi-chain-nft-fetcher.d.ts +13 -0
  55. package/services/nft-service/multi-chain-nft-fetcher.js +138 -0
  56. package/services/nft-service/nft-handlers/base-nft-handler.d.ts +13 -0
  57. package/services/nft-service/nft-handlers/base-nft-handler.js +21 -0
  58. package/services/nft-service/nft-handlers/evm/evm-nft-handler.d.ts +9 -0
  59. package/services/nft-service/nft-handlers/evm/evm-nft-handler.js +171 -0
  60. package/services/nft-service/nft-handlers/registry.d.ts +11 -0
  61. package/services/nft-service/nft-handlers/registry.js +29 -0
  62. package/services/nft-service/nft-handlers/unique/unique-nft-handler.d.ts +12 -0
  63. package/services/nft-service/nft-handlers/unique/unique-nft-handler.js +177 -0
  64. package/services/storage-service/DatabaseService.d.ts +1 -1
  65. package/services/storage-service/DatabaseService.js +1 -1
  66. package/services/swap-service/handler/asset-hub/handler.js +7 -4
  67. package/services/swap-service/handler/asset-hub/router.d.ts +0 -4
  68. package/services/swap-service/handler/asset-hub/router.js +1 -64
  69. package/services/swap-service/handler/base-handler.js +4 -3
  70. package/services/swap-service/handler/hydradx-handler.js +9 -5
  71. package/services/swap-service/index.js +5 -4
  72. package/types/swap/index.d.ts +7 -35
  73. package/types/swap/index.js +3 -8
  74. package/types/yield/actions/join/step.d.ts +1 -0
  75. package/types/yield/actions/join/submit.d.ts +2 -1
  76. package/utils/account/common.d.ts +22 -1
  77. package/utils/account/common.js +44 -8
  78. package/cjs/core/logic-validation/swap.js +0 -235
  79. package/core/logic-validation/swap.d.ts +0 -26
  80. package/core/logic-validation/swap.js +0 -219
@@ -17,7 +17,7 @@ import { AuthUrls } from '@subwallet/extension-base/services/request-service/typ
17
17
  import { CrowdloanContributionsResponse } from '@subwallet/extension-base/services/subscan-service/types';
18
18
  import { BitcoinTransactionData, SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
19
19
  import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
20
- import { AccountChainType, AccountJson, AccountsWithCurrentAddress, AddressJson, BalanceJson, BalanceType, BaseRequestSign, BuyServiceInfo, BuyTokenInfo, CommonOptimalTransferPath, CurrentAccountInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleSubstrateProxyWrappedTxResponse, HandleYieldStepParams, InternalRequestSign, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestAccountProxyEdit, RequestAccountProxyForget, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeAllowOneSign, RequestChangeBittensorRootClaimType, RequestChangeTonWalletContractVersion, RequestCheckCrossChainTransfer, RequestCheckPublicAndSecretKey, RequestCheckTransfer, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestEarningImpact, RequestExportAccountProxyMnemonic, RequestGetAllTonWalletContractVersion, RequestGetAmountForPair, RequestGetDeriveAccounts, RequestGetDeriveSuggestion, RequestGetTokensCanPayFee, RequestGetYieldPoolTargets, RequestInputAccountSubscribe, RequestJsonGetAccountInfo, RequestJsonRestoreV2, RequestMetadataHash, RequestMnemonicCreateV2, RequestMnemonicValidateV2, RequestPrivateKeyValidateV2, RequestShortenMetadata, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestSubmitProcessTransaction, RequestSubscribeProcessById, RequestTransfer, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseAccountBatchExportV2, ResponseAccountCreateSuriV2, ResponseAccountNameValidate, ResponseBatchJsonGetAccountInfo, ResponseCheckPublicAndSecretKey, ResponseDeriveValidateV2, ResponseEarlyValidateYield, ResponseExportAccountProxyMnemonic, ResponseGetAllTonWalletContractVersion, ResponseGetDeriveAccounts, ResponseGetDeriveSuggestion, ResponseGetYieldPoolTargets, ResponseInputAccountSubscribe, ResponseJsonGetAccountInfo, ResponseMetadataHash, ResponseMnemonicCreateV2, ResponseMnemonicValidateV2, ResponsePrivateKeyValidateV2, ResponseShortenMetadata, ResponseSubscribeProcessAlive, ResponseSubscribeProcessById, StorageDataInterface, SubmitChangeValidatorStaking, SubmitYieldJoinData, SubmitYieldStepData, SubnetYieldPositionInfo, SwapPair, SwapQuoteResponse, SwapRequest, SwapRequestResult, SwapRequestV2, SwapSubmitParams, SwapTxData, TokenSpendingApprovalParams, UnlockDotTransactionNft, UnstakingStatus, ValidateSwapProcessParams, ValidateYieldProcessParams, YieldPoolInfo, YieldPoolType, YieldPositionInfo } from '@subwallet/extension-base/types';
20
+ import { AccountChainType, AccountJson, AccountsWithCurrentAddress, AddressJson, BalanceJson, BalanceType, BaseRequestSign, BuyServiceInfo, BuyTokenInfo, CommonOptimalTransferPath, CurrentAccountInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleSubstrateProxyWrappedTxResponse, HandleYieldStepParams, InternalRequestSign, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestAccountProxyEdit, RequestAccountProxyForget, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeAllowOneSign, RequestChangeBittensorRootClaimType, RequestChangeTonWalletContractVersion, RequestCheckCrossChainTransfer, RequestCheckPublicAndSecretKey, RequestCheckTransfer, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestEarningImpact, RequestExportAccountProxyMnemonic, RequestGetAllTonWalletContractVersion, RequestGetAmountForPair, RequestGetDeriveAccounts, RequestGetDeriveSuggestion, RequestGetTokensCanPayFee, RequestGetYieldPoolTargets, RequestInputAccountSubscribe, RequestJsonGetAccountInfo, RequestJsonRestoreV2, RequestMetadataHash, RequestMnemonicCreateV2, RequestMnemonicValidateV2, RequestPrivateKeyValidateV2, RequestShortenMetadata, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestSubmitProcessTransaction, RequestSubscribeProcessById, RequestTransfer, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseAccountBatchExportV2, ResponseAccountCreateSuriV2, ResponseAccountNameValidate, ResponseBatchJsonGetAccountInfo, ResponseCheckPublicAndSecretKey, ResponseDeriveValidateV2, ResponseEarlyValidateYield, ResponseExportAccountProxyMnemonic, ResponseGetAllTonWalletContractVersion, ResponseGetDeriveAccounts, ResponseGetDeriveSuggestion, ResponseGetYieldPoolTargets, ResponseInputAccountSubscribe, ResponseJsonGetAccountInfo, ResponseMetadataHash, ResponseMnemonicCreateV2, ResponseMnemonicValidateV2, ResponsePrivateKeyValidateV2, ResponseShortenMetadata, ResponseSubscribeProcessAlive, ResponseSubscribeProcessById, StorageDataInterface, SubmitChangeValidatorStaking, SubmitYieldJoinData, SubmitYieldStepData, SubnetYieldPositionInfo, SwapPair, SwapQuoteResponse, SwapRequestResult, SwapRequestV2, SwapSubmitParams, SwapTxData, TokenSpendingApprovalParams, UnlockDotTransactionNft, UnstakingStatus, ValidateSwapProcessParams, ValidateYieldProcessParams, YieldPoolInfo, YieldPoolType, YieldPositionInfo } from '@subwallet/extension-base/types';
21
21
  import { RequestSubmitSignPsbtTransfer, RequestSubmitTransfer, RequestSubmitTransferWithId, RequestSubscribeTransfer, ResponseSubscribeTransfer, ResponseSubscribeTransferConfirmation } from '@subwallet/extension-base/types/balance/transfer';
22
22
  import { RequestClaimBridge } from '@subwallet/extension-base/types/bridge';
23
23
  import { ApprovePendingTxRequest, CancelPendingTxRequest, ExecutePendingTxRequest, InitMultisigTxRequest, InitMultisigTxResponse, PrepareMultisigSignRequest, PrepareMultisigSignResponse, RequestGetSignableAccountInfos, ResponseGetSignableAccountInfos } from '@subwallet/extension-base/types/multisig';
@@ -204,6 +204,11 @@ export interface NftItem extends NftItemExtraInfo {
204
204
  rarity?: string;
205
205
  description?: string;
206
206
  properties?: Record<any, any> | null;
207
+ isBundle?: boolean;
208
+ nestingLevel?: number;
209
+ nestingTokens?: NftItem[];
210
+ parent?: NftItem;
211
+ parentId?: string;
207
212
  }
208
213
  interface NftItemExtraInfo {
209
214
  type?: _AssetType.ERC721 | _AssetType.PSP34 | RMRK_VER;
@@ -817,9 +822,15 @@ export interface NftTransactionRequest extends BaseRequestSign {
817
822
  nftItem: NftItem;
818
823
  }
819
824
  export interface NftFullListRequest {
820
- contractAddress: string;
825
+ collectionId: string;
821
826
  owners: string[];
822
827
  chainInfo: _ChainInfo;
828
+ tokenIds?: string[];
829
+ }
830
+ export interface NftDetailRequest {
831
+ collectionId: string;
832
+ chainSlug: string;
833
+ tokenId: string;
823
834
  }
824
835
  export interface EvmNftTransaction extends ValidateTransactionResponse {
825
836
  tx: Record<string, any> | null;
@@ -1875,11 +1886,10 @@ export interface KoniRequestSignatures {
1875
1886
  'pri(evmNft.getTransaction)': [NftTransactionRequest, EvmNftTransaction];
1876
1887
  'pri(substrateNft.submitTransaction)': [NftTransactionRequest, SWTransactionResponse];
1877
1888
  'pri(substrateNft.getTransaction)': [NftTransactionRequest, SubstrateNftTransaction];
1878
- 'pri(nft.getNft)': [null, NftJson];
1879
1889
  'pri(nft.getSubscription)': [RequestSubscribeNft, NftJson, NftJson];
1880
- 'pri(nftCollection.getNftCollection)': [null, NftCollectionJson];
1881
1890
  'pri(nftCollection.getSubscription)': [null, NftCollection[], NftCollection[]];
1882
1891
  'pri(nft.getFullList)': [NftFullListRequest, boolean];
1892
+ 'pri(nft.getNftdetail)': [NftDetailRequest, NftItem];
1883
1893
  'pri(staking.getStaking)': [null, StakingJson];
1884
1894
  'pri(staking.getSubscription)': [RequestSubscribeStaking, StakingJson, StakingJson];
1885
1895
  'pri(stakingReward.getStakingReward)': [null, StakingRewardJson];
@@ -2117,10 +2127,10 @@ export interface KoniRequestSignatures {
2117
2127
  'pri(database.setLocalStorage)': [StorageDataInterface, boolean];
2118
2128
  'pri(database.getLocalStorage)': [string, string | null];
2119
2129
  'pri(swapService.subscribePairs)': [null, SwapPair[], SwapPair[]];
2120
- 'pri(swapService.handleSwapRequest)': [SwapRequest, SwapRequestResult];
2130
+ 'pri(swapService.handleSwapRequest)': [SwapRequestV2, SwapRequestResult];
2121
2131
  'pri(swapService.handleSwapRequestV2)': [SwapRequestV2, SwapRequestResult];
2122
2132
  'pri(swapService.handleSwapStep)': [SwapSubmitParams, SWTransactionResponse];
2123
- 'pri(swapService.getLatestQuote)': [SwapRequest, SwapQuoteResponse];
2133
+ 'pri(swapService.getLatestQuote)': [SwapRequestV2, SwapQuoteResponse];
2124
2134
  'pri(swapService.validateSwapProcess)': [ValidateSwapProcessParams, TransactionError[]];
2125
2135
  'pri(inappNotification.subscribeUnreadNotificationCountMap)': [null, Record<string, number>, Record<string, number>];
2126
2136
  'pri(inappNotification.markAllReadNotification)': [MarkAllReadParams, null];
@@ -11,18 +11,6 @@ var _TransactionError = require("@subwallet/extension-base/background/errors/Tra
11
11
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
12
12
  var _types = require("@subwallet/extension-base/types");
13
13
  var _i18next = require("i18next");
14
- var _swap = require("./swap");
15
- Object.keys(_swap).forEach(function (key) {
16
- if (key === "default" || key === "__esModule") return;
17
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
18
- if (key in exports && exports[key] === _swap[key]) return;
19
- Object.defineProperty(exports, key, {
20
- enumerable: true,
21
- get: function () {
22
- return _swap[key];
23
- }
24
- });
25
- });
26
14
  var _request = require("./request");
27
15
  Object.keys(_request).forEach(function (key) {
28
16
  if (key === "default" || key === "__esModule") return;
@@ -54,6 +54,9 @@ function _getAppliedExistentialDeposit(accountInfo, existentialDeposit, strictMo
54
54
  if (strictMode) {
55
55
  return bnExistentialDeposit;
56
56
  }
57
+ if (accountInfo.data.free.toString() === existentialDeposit) {
58
+ return BigInt(0);
59
+ }
57
60
  return _canAccountBeReaped(accountInfo) ? BigInt(0) : bnExistentialDeposit; // account for ED here will go better with max transfer logic
58
61
  }
59
62
  function _getSystemPalletTransferableV2(accountInfo, existentialDeposit, strictMode) {
@@ -40,8 +40,6 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
40
40
  return [new _assethub_unique.default(substrateApi, substrateAddresses, chain), new _assethub_nft.default(substrateApi, substrateAddresses, chain)];
41
41
  } else if (_constants._NFT_CHAIN_GROUP.statemint.includes(chain)) {
42
42
  return [new _assethub_unique.default(substrateApi, substrateAddresses, chain), new _assethub_nft.default(substrateApi, substrateAddresses, chain)];
43
- } else if (_constants._NFT_CHAIN_GROUP.unique_network.includes(chain)) {
44
- return [new _unique_network_nft.UniqueNftApi(chain, substrateAddresses)];
45
43
  } else if (_constants._NFT_CHAIN_GROUP.unique_evm.includes(chain)) {
46
44
  return [new _unique_network_nft.UniqueNftApi(chain, evmAddresses)];
47
45
  } else if (_constants._NFT_CHAIN_GROUP.bitcountry.includes(chain)) {
@@ -63,10 +61,6 @@ function createWasmNftApi(chain, apiProps, addresses) {
63
61
  const substrateAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.SUBSTRATE]);
64
62
  return new _wasm_nft.WasmNftApi(apiProps, substrateAddresses, chain);
65
63
  }
66
- function createWeb3NftApi(chain, evmApi, addresses) {
67
- const evmAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.EVM]);
68
- return new _evm_nft.EvmNftApi(evmApi, evmAddresses, chain);
69
- }
70
64
  const createOrdinalApi = (chain, subscanChain, addresses) => {
71
65
  return new _ordinal_nft.default(addresses, chain, subscanChain);
72
66
  };
@@ -136,14 +130,6 @@ class NftHandler {
136
130
  }
137
131
  }
138
132
  }
139
- if ((0, _utils._isChainSupportEvmNft)(chainInfo)) {
140
- if (this.evmApiMap[chain]) {
141
- const handler = createWeb3NftApi(chain, this.evmApiMap[chain], evmAddresses);
142
- if (handler) {
143
- this.handlers.push(handler);
144
- }
145
- }
146
- }
147
133
  if (chain === 'unique_evm') {
148
134
  const handlers = createSubstrateNftApi(chain, null, evmAddresses);
149
135
  if (handlers && !!handlers.length) {
@@ -98,7 +98,6 @@ class KoniCron {
98
98
  // NFT
99
99
  (commonReload || needUpdateNft) && this.resetNft(address);
100
100
  (commonReload || needUpdateNft) && this.removeCron('refreshNft');
101
- (commonReload || needUpdateNft) && this.removeCron('detectNft');
102
101
  commonReload && this.removeCron('refreshPoolingStakingReward');
103
102
  if (mktCampaignNeedReload) {
104
103
  this.removeCron('fetchMktCampaignData');
@@ -114,7 +113,6 @@ class KoniCron {
114
113
  if (this.checkNetworkAvailable(serviceInfo)) {
115
114
  // only add cron jobs if there's at least 1 active network
116
115
  (commonReload || needUpdateNft) && this.addCron('refreshNft', this.refreshNft(address, serviceInfo.chainApiMap, this.state.getSmartContractNfts(), this.state.getActiveChainInfoMap()), _constants.CRON_REFRESH_NFT_INTERVAL);
117
- (commonReload || needUpdateNft) && this.addCron('detectNft', this.detectEvmCollectionNft(address), _constants.CRON_NFT_DETECT_INTERVAL);
118
116
  reloadMantaPay && this.addCron('syncMantaPay', this.syncMantaPay, _constants.CRON_SYNC_MANTA_PAY);
119
117
  }
120
118
  };
@@ -127,8 +125,6 @@ class KoniCron {
127
125
  if (Object.keys(this.state.getSubstrateApiMap()).length !== 0 || Object.keys(this.state.getEvmApiMap()).length !== 0) {
128
126
  this.resetNft(currentAccountInfo.proxyId);
129
127
  this.addCron('refreshNft', this.refreshNft(currentAccountInfo.proxyId, this.state.getApiMap(), this.state.getSmartContractNfts(), this.state.getActiveChainInfoMap()), _constants.CRON_REFRESH_NFT_INTERVAL);
130
- this.addCron('detectNft', this.detectEvmCollectionNft(currentAccountInfo.proxyId), _constants.CRON_NFT_DETECT_INTERVAL);
131
- // this.addCron('refreshStakingReward', this.refreshStakingReward(currentAccountInfo.address), CRON_REFRESH_STAKING_REWARD_INTERVAL);
132
128
  this.addCron('syncMantaPay', this.syncMantaPay, _constants.CRON_SYNC_MANTA_PAY);
133
129
  }
134
130
  this.status = 'running';
@@ -177,25 +173,12 @@ class KoniCron {
177
173
  checkNetworkAvailable = serviceInfo => {
178
174
  return Object.keys(serviceInfo.chainApiMap.substrate).length > 0 || Object.keys(serviceInfo.chainApiMap.evm).length > 0;
179
175
  };
180
- detectEvmCollectionNft = address => {
181
- return () => {
182
- let addresses = [];
183
- addresses = this.state.keyringService.context.getDecodedAddresses();
184
- if (!addresses.length) {
185
- console.warn('[Cron] No decoded addresses found for ALL_ACCOUNT_KEY');
186
- return;
187
- }
188
- this.state.nftDetectionService.fetchEvmCollectionsWithPreview(addresses).catch(err => console.warn(`[Cron] NFT detection failed for ${address}:`, err));
189
- };
190
- };
191
176
  async reloadNft() {
192
177
  const address = this.state.keyringService.context.currentAccount.proxyId;
193
178
  const serviceInfo = this.state.getServiceInfo();
194
179
  this.resetNft(address);
195
180
  this.removeCron('refreshNft');
196
- this.removeCron('detectNft');
197
181
  this.addCron('refreshNft', this.refreshNft(address, serviceInfo.chainApiMap, this.state.getSmartContractNfts(), this.state.getActiveChainInfoMap()), _constants.CRON_REFRESH_NFT_INTERVAL);
198
- this.addCron('detectNft', this.detectEvmCollectionNft(address), _constants.CRON_NFT_DETECT_INTERVAL);
199
182
  await (0, _utils2.waitTimeout)(1800);
200
183
  return true;
201
184
  }
@@ -1008,7 +1008,7 @@ class KoniExtension {
1008
1008
  this.#koniState.eventService.emit('asset.updateState', params.tokenSlug);
1009
1009
  return true;
1010
1010
  } catch (e) {
1011
- console.error(e);
1011
+ console.error('[updateAssetSetting] Error:', e);
1012
1012
  return false;
1013
1013
  }
1014
1014
  }
@@ -1198,7 +1198,10 @@ class KoniExtension {
1198
1198
  return this.getNft();
1199
1199
  }
1200
1200
  async handleGetNftFullList(request) {
1201
- return this.#koniState.nftDetectionService.getFullNftInstancesByCollection(request);
1201
+ return this.#koniState.nftService.fetchFullListNftOfACollection(request);
1202
+ }
1203
+ async handleGetNftDetail(request) {
1204
+ return this.#koniState.nftService.fetchNftDetail(request);
1202
1205
  }
1203
1206
  getStakingReward() {
1204
1207
  return new Promise((resolve, reject) => {
@@ -4636,7 +4639,8 @@ class KoniExtension {
4636
4639
  ...this.createPassConfirmationParams(isPassConfirmation),
4637
4640
  eventsHandler,
4638
4641
  step,
4639
- xcmFeeDryRun: extrinsicType === _KoniTypes.ExtrinsicType.TRANSFER_XCM ? submitData.xcmStepFee : undefined
4642
+ xcmFeeDryRun: extrinsicType === _KoniTypes.ExtrinsicType.TRANSFER_XCM ? submitData.xcmStepFee : undefined,
4643
+ xcmDestinationFee: submitData.xcmDestinationFee
4640
4644
  });
4641
4645
  }
4642
4646
  async handleYieldLeave(params) {
@@ -5019,6 +5023,10 @@ class KoniExtension {
5019
5023
  ready = true;
5020
5024
  return this.#koniState.swapService.getSwapPairs();
5021
5025
  }
5026
+
5027
+ /**
5028
+ * @deprecated Use function `handleSwapRequestV2` instead.
5029
+ */
5022
5030
  async handleSwapRequest(request) {
5023
5031
  // @ts-ignore
5024
5032
  return Promise.resolve(null);
@@ -5753,16 +5761,14 @@ class KoniExtension {
5753
5761
  return this.getCrowdloanContributions(request);
5754
5762
  case 'pri(crowdloan.getSubscription)':
5755
5763
  return this.subscribeCrowdloan(id, port);
5756
- case 'pri(nft.getNft)':
5757
- return await this.getNft();
5758
5764
  case 'pri(nft.getSubscription)':
5759
5765
  return await this.subscribeNft(id, port);
5760
- case 'pri(nftCollection.getNftCollection)':
5761
- return await this.getNftCollection();
5762
5766
  case 'pri(nftCollection.getSubscription)':
5763
5767
  return await this.subscribeNftCollection(id, port);
5764
5768
  case 'pri(nft.getFullList)':
5765
5769
  return await this.handleGetNftFullList(request);
5770
+ case 'pri(nft.getNftdetail)':
5771
+ return await this.handleGetNftDetail(request);
5766
5772
  case 'pri(staking.getStaking)':
5767
5773
  return this.getStaking();
5768
5774
  case 'pri(staking.getSubscription)':
@@ -33,7 +33,7 @@ var _migrationService = _interopRequireDefault(require("@subwallet/extension-bas
33
33
  var _mintCampaignService = _interopRequireDefault(require("@subwallet/extension-base/services/mint-campaign-service"));
34
34
  var _mktCampaignService = _interopRequireDefault(require("@subwallet/extension-base/services/mkt-campaign-service"));
35
35
  var _multisigService = require("@subwallet/extension-base/services/multisig-service");
36
- var _nftService = _interopRequireDefault(require("@subwallet/extension-base/services/nft-service"));
36
+ var _nftService = require("@subwallet/extension-base/services/nft-service");
37
37
  var _NotificationService = _interopRequireDefault(require("@subwallet/extension-base/services/notification-service/NotificationService"));
38
38
  var _openGov = _interopRequireDefault(require("@subwallet/extension-base/services/open-gov"));
39
39
  var _priceService = require("@subwallet/extension-base/services/price-service");
@@ -86,6 +86,12 @@ class KoniState {
86
86
  externalRequest = {};
87
87
  crowdloanMap = generateDefaultCrowdloanMap();
88
88
  crowdloanSubject = new _rxjs.Subject();
89
+
90
+ /**
91
+ * TODO: Remove this subject once NFT migration to the service layer is completed.
92
+ * The state manager should not handle the internal state of the NFT service.
93
+ * The NFT service will manage its own state independently.
94
+ */
89
95
  nftSubject = new _rxjs.Subject();
90
96
  mantaPayConfigSubject = new _rxjs.Subject();
91
97
  isMantaPayEnabled = false;
@@ -123,13 +129,13 @@ class KoniState {
123
129
  this.requestService = new _requestService.default(this.chainService, this.settingService, this.keyringService, this.transactionService);
124
130
  this.priceService = new _priceService.PriceService(this.dbService, this.eventService, this.chainService);
125
131
  this.balanceService = new _balanceService.BalanceService(this);
132
+ this.nftService = new _nftService.NftService(this);
126
133
  this.historyService = new _historyService.HistoryService(this.dbService, this.chainService, this.eventService, this.keyringService, this.subscanService);
127
134
  this.mintCampaignService = new _mintCampaignService.default(this);
128
135
  this.walletConnectService = new _walletConnectService.default(this, this.requestService);
129
136
  this.migrationService = new _migrationService.default(this, this.eventService);
130
137
  this.campaignService = new _campaignService.default(this);
131
138
  this.mktCampaignService = new _mktCampaignService.default(this);
132
- this.nftDetectionService = new _nftService.default(this);
133
139
  this.buyService = new _buyService.default(this);
134
140
  this.earningService = new _service.default(this);
135
141
  this.swapService = new _swapService.SwapService(this);
@@ -241,6 +247,7 @@ class KoniState {
241
247
  this.mktCampaignService.init();
242
248
  this.eventService.emit('chain.ready', true);
243
249
  await this.balanceService.init();
250
+ await this.nftService.init();
244
251
  await this.earningService.init();
245
252
  await this.swapService.init();
246
253
  await this.inappNotificationService.init();
@@ -398,6 +405,7 @@ class KoniState {
398
405
  return this.dbService.getAllNftCollection(this.activeChainSlugs);
399
406
  }
400
407
  subscribeNftCollection() {
408
+ // TODO: Move this logic to the NFT service once migration is complete.
401
409
  const getChains = () => this.activeChainSlugs;
402
410
  return this.dbService.stores.nftCollection.subscribeNftCollection(getChains);
403
411
  }
@@ -1799,7 +1807,7 @@ class KoniState {
1799
1807
  this.campaignService.stop();
1800
1808
  await Promise.all([this.cron.stop(), this.subscription.stop()]);
1801
1809
  await this.pauseAllNetworks(undefined, 'IDLE mode');
1802
- await Promise.all([this.historyService.stop(), this.priceService.stop(), this.balanceService.stop(), this.earningService.stop(), this.swapService.stop(), this.inappNotificationService.stop(), this.openGovService.stop(), this.multisigService.stop()]);
1810
+ await Promise.all([this.historyService.stop(), this.priceService.stop(), this.balanceService.stop(), this.nftService.stop(), this.earningService.stop(), this.swapService.stop(), this.inappNotificationService.stop(), this.openGovService.stop(), this.multisigService.stop()]);
1803
1811
 
1804
1812
  // Complete sleeping
1805
1813
  sleeping.resolve();
@@ -1855,7 +1863,7 @@ class KoniState {
1855
1863
  this.generalStatus = _types.ServiceStatus.STARTING_FULL;
1856
1864
  const startingFull = (0, _promise.createPromiseHandler)();
1857
1865
  this.waitStartingFull = startingFull.promise;
1858
- await Promise.all([this.cron.start(), this.subscription.start(), this.historyService.start(), this.priceService.start(), this.balanceService.start(), this.earningService.start(), this.swapService.start(), this.inappNotificationService.start(), this.openGovService.start(), this.multisigService.start()]);
1866
+ await Promise.all([this.cron.start(), this.subscription.start(), this.historyService.start(), this.priceService.start(), this.balanceService.start(), this.nftService.start(), this.earningService.start(), this.swapService.start(), this.inappNotificationService.start(), this.openGovService.start(), this.multisigService.start()]);
1859
1867
  this.eventService.emit('general.start_full', true);
1860
1868
  this.waitStartingFull = null;
1861
1869
  this.generalStatus = _types.ServiceStatus.STARTED_FULL;
@@ -1917,9 +1925,19 @@ class KoniState {
1917
1925
  });
1918
1926
  }
1919
1927
  async reloadNft() {
1920
- const currentAddress = this.keyringService.context.currentAccount.proxyId;
1928
+ const currentProxyId = this.keyringService.context.currentAccount.proxyId;
1929
+ const currentAddress = this.keyringService.context.addressesByProxyId(currentProxyId);
1921
1930
  await this.dbService.removeNftsByAddress(currentAddress);
1922
- return await this.cron.reloadNft();
1931
+ await this.cron.reloadNft();
1932
+ await this.reloadNftV2();
1933
+ return true;
1934
+ }
1935
+ async reloadNftV2() {
1936
+ // TODO: Recheck: Uncomment this block when migration is complete
1937
+ // const currentAddress = this.keyringService.context.currentAccount.proxyId;
1938
+ //
1939
+ // await this.dbService.removeNftsByAddress(currentAddress);
1940
+ await this.nftService.forceReload();
1923
1941
  }
1924
1942
  async reloadStaking() {
1925
1943
  await this.earningService.reloadEarning(true);
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.3.78-0'
16
+ version: '1.3.80-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
@@ -7,7 +8,11 @@ exports.getAcrossbridgeTransferProcessFromEvm = getAcrossbridgeTransferProcessFr
7
8
  exports.getDefaultTransferProcess = getDefaultTransferProcess;
8
9
  exports.getSnowbridgeTransferProcessFromEvm = getSnowbridgeTransferProcessFromEvm;
9
10
  var _chainList = require("@subwallet/chain-list");
11
+ var _web = require("@subwallet/extension-base/koni/api/contract-handler/evm/web3");
12
+ var _utils = require("@subwallet/extension-base/koni/api/contract-handler/utils");
13
+ var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
10
14
  var _serviceBase = require("@subwallet/extension-base/types/service-base");
15
+ var _bignumber = _interopRequireDefault(require("bignumber.js"));
11
16
  // Copyright 2019-2022 @subwallet/extension-base
12
17
  // SPDX-License-Identifier: Apache-2.0
13
18
 
@@ -30,18 +35,25 @@ async function getSnowbridgeTransferProcessFromEvm(address, evmApi, tokenInfo, a
30
35
  totalFee: [_serviceBase.MOCK_STEP_FEE],
31
36
  steps: [_serviceBase.DEFAULT_FIRST_STEP]
32
37
  };
33
- // const allowance = await getERC20Allowance(getSnowBridgeGatewayContract(evmApi.chainSlug), address, _getContractAddressOfToken(tokenInfo), evmApi);
34
-
35
- result.steps.push({
36
- // always approve spending because sometimes allowance check fails
37
- id: result.steps.length,
38
- type: _serviceBase.CommonStepType.TOKEN_APPROVAL,
39
- name: 'Approve spending'
40
- });
41
- result.totalFee.push(_serviceBase.MOCK_STEP_FEE);
42
- // if (!allowance || BigInt(allowance) < BigInt(amount)) {
43
- // }
44
-
38
+ try {
39
+ const allowance = await (0, _web.getERC20Allowance)((0, _utils.getSnowBridgeGatewayContract)(evmApi.chainSlug), address, (0, _utils2._getContractAddressOfToken)(tokenInfo), evmApi);
40
+ if (!allowance || new _bignumber.default(allowance).lt(amount)) {
41
+ result.steps.push({
42
+ id: result.steps.length,
43
+ type: _serviceBase.CommonStepType.TOKEN_APPROVAL,
44
+ name: 'Approve spending'
45
+ });
46
+ result.totalFee.push(_serviceBase.MOCK_STEP_FEE);
47
+ }
48
+ } catch (e) {
49
+ console.error(e);
50
+ result.steps.push({
51
+ id: result.steps.length,
52
+ type: _serviceBase.CommonStepType.TOKEN_APPROVAL,
53
+ name: 'Approve spending'
54
+ });
55
+ result.totalFee.push(_serviceBase.MOCK_STEP_FEE);
56
+ }
45
57
  result.steps.push({
46
58
  id: result.steps.length,
47
59
  type: _serviceBase.CommonStepType.TRANSFER,
@@ -50,20 +62,36 @@ async function getSnowbridgeTransferProcessFromEvm(address, evmApi, tokenInfo, a
50
62
  result.totalFee.push(_serviceBase.MOCK_STEP_FEE);
51
63
  return Promise.resolve(result);
52
64
  }
53
- async function getAcrossbridgeTransferProcessFromEvm(SpokePoolAddress) {
65
+ async function getAcrossbridgeTransferProcessFromEvm(SpokePoolAddress, address, tokenInfo, evmApi, amount) {
54
66
  const result = {
55
67
  totalFee: [_serviceBase.MOCK_STEP_FEE],
56
68
  steps: [_serviceBase.DEFAULT_FIRST_STEP]
57
69
  };
58
- result.steps.push({
59
- id: result.steps.length,
60
- type: _serviceBase.CommonStepType.TOKEN_APPROVAL,
61
- name: 'Approve spending',
62
- metadata: {
63
- SpokePoolAddress
70
+ try {
71
+ const allowance = await (0, _web.getERC20Allowance)(SpokePoolAddress, address, (0, _utils2._getContractAddressOfToken)(tokenInfo), evmApi);
72
+ if (!allowance || new _bignumber.default(allowance).lt(amount)) {
73
+ result.steps.push({
74
+ id: result.steps.length,
75
+ type: _serviceBase.CommonStepType.TOKEN_APPROVAL,
76
+ name: 'Approve spending',
77
+ metadata: {
78
+ SpokePoolAddress
79
+ }
80
+ });
81
+ result.totalFee.push(_serviceBase.MOCK_STEP_FEE);
64
82
  }
65
- });
66
- result.totalFee.push(_serviceBase.MOCK_STEP_FEE);
83
+ } catch (e) {
84
+ console.error(e);
85
+ result.steps.push({
86
+ id: result.steps.length,
87
+ type: _serviceBase.CommonStepType.TOKEN_APPROVAL,
88
+ name: 'Approve spending',
89
+ metadata: {
90
+ SpokePoolAddress
91
+ }
92
+ });
93
+ result.totalFee.push(_serviceBase.MOCK_STEP_FEE);
94
+ }
67
95
  result.steps.push({
68
96
  id: result.steps.length,
69
97
  type: _serviceBase.CommonStepType.TRANSFER,
@@ -627,10 +627,10 @@ class BalanceService {
627
627
  return (0, _process.getDefaultTransferProcess)();
628
628
  }
629
629
  const destChainInfo = this.state.chainService.getChainInfoByKey(params.destChain);
630
+ const evmApi = this.state.chainService.getEvmApi(originChainInfo.slug);
630
631
 
631
632
  // xcm
632
633
  if (!(0, _xcmParser._isXcmWithinSameConsensus)(originChainInfo, destChainInfo) && (0, _utils._isPureEvmChain)(originChainInfo)) {
633
- const evmApi = this.state.chainService.getEvmApi(originChainInfo.slug);
634
634
  const tokenInfo = this.state.chainService.getAssetBySlug(params.tokenSlug);
635
635
  return (0, _process.getSnowbridgeTransferProcessFromEvm)(params.address, evmApi, tokenInfo, params.amount);
636
636
  }
@@ -658,7 +658,7 @@ class BalanceService {
658
658
  if (!data) {
659
659
  throw new Error('Failed to fetch Across Bridge Data. Please try again later');
660
660
  }
661
- return (0, _process.getAcrossbridgeTransferProcessFromEvm)(data.to);
661
+ return (0, _process.getAcrossbridgeTransferProcessFromEvm)(data.to, params.address, originTokenInfo, evmApi, params.amount);
662
662
  }
663
663
  }
664
664
  return (0, _process.getDefaultTransferProcess)();
@@ -27,7 +27,7 @@ var _bittensorBridge = require("./bittensorBridge");
27
27
  // Copyright 2019-2022 @subwallet/extension-base
28
28
  // SPDX-License-Identifier: Apache-2.0
29
29
 
30
- const version = '/v5';
30
+ const version = '/v1';
31
31
  const paraSpellApi = {
32
32
  buildXcm: `${version}/x-transfer`,
33
33
  feeXcm: `${version}/xcm-fee`,
@@ -107,8 +107,8 @@ async function buildXcm(request) {
107
107
  }
108
108
  const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
109
109
  const bodyData = {
110
- senderAddress: sender,
111
- address: recipient,
110
+ sender,
111
+ recipient,
112
112
  from: paraSpellChainMap[originChain.slug],
113
113
  to: paraSpellChainMap[destinationChain.slug],
114
114
  currency: createParaSpellCurrency(paraSpellIdentifyV4, sendingValue),
@@ -148,8 +148,8 @@ async function dryRunXcm(request) {
148
148
  throw new Error('Token is not support XCM at this time');
149
149
  }
150
150
  const bodyData = {
151
- senderAddress: sender,
152
- address: recipient,
151
+ sender,
152
+ recipient,
153
153
  from: paraSpellChainMap[originChain.slug],
154
154
  to: paraSpellChainMap[destinationChain.slug],
155
155
  currency: createParaSpellCurrency(paraSpellIdentifyV4, sendingValue),
@@ -192,8 +192,8 @@ async function dryRunPreviewXcm(request) {
192
192
  throw new Error('Token is not support XCM at this time');
193
193
  }
194
194
  const bodyData = {
195
- senderAddress: sender,
196
- address: recipient,
195
+ sender,
196
+ recipient,
197
197
  from: paraSpellChainMap[originChain.slug],
198
198
  to: paraSpellChainMap[destinationChain.slug],
199
199
  currency: createParaSpellCurrency(paraSpellIdentifyV4, sendingValue),
@@ -240,8 +240,8 @@ async function estimateXcmFee(request) {
240
240
  return undefined;
241
241
  }
242
242
  const bodyData = {
243
- senderAddress: sender,
244
- address: recipient,
243
+ sender,
244
+ recipient,
245
245
  from: paraSpellChainMap[fromChainInfo.slug],
246
246
  to: paraSpellChainMap[toChainInfo.slug],
247
247
  currency: createParaSpellCurrency(paraSpellIdentifyV4, requestValue),
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports._ZK_ASSET_PREFIX = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._GOVERNANCE_CHAIN_GROUP = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._BTC_SERVICE_TOKEN = exports._BITCOIN_TESTNET_NAME = exports._BITCOIN_TESTNET_CHAIN_SLUG = exports._BITCOIN_NAME = exports._BITCOIN_CHAIN_SLUG = exports._BALANCE_LOCKED_ID_GROUP = exports._BALANCE_CHAIN_GROUP = exports._API_OPTIONS_CHAIN_GROUP = exports.USE_MULTILOCATION_INDEX = exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
6
+ exports._ZK_ASSET_PREFIX = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._GOVERNANCE_CHAIN_GROUP = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._BTC_SERVICE_TOKEN = exports._BITCOIN_TESTNET_NAME = exports._BITCOIN_TESTNET_CHAIN_SLUG = exports._BITCOIN_NAME = exports._BITCOIN_CHAIN_SLUG = exports._BALANCE_LOCKED_ID_GROUP = exports._BALANCE_CHAIN_GROUP = exports._API_OPTIONS_CHAIN_GROUP = exports.USE_MULTILOCATION_INDEX = exports.NFT_CHAIN_GROUPS_MIGRATED = exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
7
7
  var _chainList = require("@subwallet/chain-list");
8
8
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
9
  // Copyright 2019-2022 @subwallet/extension-base
@@ -80,9 +80,13 @@ const _NFT_CHAIN_GROUP = {
80
80
  rari: ['rari'],
81
81
  story_odyssey: ['storyOdyssey', 'storyOdyssey_testnet']
82
82
  };
83
+ exports._NFT_CHAIN_GROUP = _NFT_CHAIN_GROUP;
84
+ const NFT_CHAIN_GROUPS_MIGRATED = {
85
+ unique_network: ['unique_network']
86
+ };
83
87
 
84
88
  // Staking--------------------------------------------------------------------------------------------------------------
85
- exports._NFT_CHAIN_GROUP = _NFT_CHAIN_GROUP;
89
+ exports.NFT_CHAIN_GROUPS_MIGRATED = NFT_CHAIN_GROUPS_MIGRATED;
86
90
  const _STAKING_ERA_LENGTH_MAP = {
87
91
  // in hours
88
92
  alephTest: 24,
@@ -17,20 +17,20 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
17
17
  // Copyright 2019-2022 @subwallet/extension-base
18
18
  // SPDX-License-Identifier: Apache-2.0
19
19
 
20
- const getAlphaToTaoRateMap = async substrateApi => {
21
- const allSubnets = (await substrateApi.api.call.subnetInfoRuntimeApi.getAllDynamicInfo()).toJSON();
22
- if (!allSubnets || allSubnets.length === 0) {
23
- return {};
24
- }
20
+ const getAlphaToTaoRateMap = async function (substrateApi) {
21
+ let priceScaleDecimals = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 9;
25
22
  const result = Object.create(null);
26
- for (const subnet of allSubnets) {
27
- const netuid = subnet === null || subnet === void 0 ? void 0 : subnet.netuid;
28
- if (netuid === undefined) {
29
- continue;
23
+ const PRICE_SCALE = new _bignumber.default(10).pow(priceScaleDecimals);
24
+ const allSubnetPrices = (await substrateApi.api.call.swapRuntimeApi.currentAlphaPriceAll()).toJSON();
25
+ if (allSubnetPrices && allSubnetPrices.length > 0) {
26
+ for (const subnetPrice of allSubnetPrices) {
27
+ const netuid = subnetPrice === null || subnetPrice === void 0 ? void 0 : subnetPrice.netuid;
28
+ if (netuid === undefined) {
29
+ continue;
30
+ }
31
+ const rawPrice = subnetPrice !== null && subnetPrice !== void 0 && subnetPrice.price ? new _bignumber.default(subnetPrice.price) : new _bignumber.default(0);
32
+ result[netuid] = netuid === 0 ? '1' : rawPrice.dividedBy(PRICE_SCALE).toFixed();
30
33
  }
31
- const taoIn = subnet !== null && subnet !== void 0 && subnet.taoIn ? new _bignumber.default(subnet.taoIn) : new _bignumber.default(0);
32
- const alphaIn = subnet !== null && subnet !== void 0 && subnet.alphaIn ? new _bignumber.default(subnet.alphaIn) : new _bignumber.default(0);
33
- result[netuid] = netuid === 0 || alphaIn.lte(0) ? '1' : taoIn.dividedBy(alphaIn).toString();
34
34
  }
35
35
  return result;
36
36
  };
@@ -213,7 +213,7 @@ class SubnetTaoStakingPoolHandler extends _tao.default {
213
213
  const getPoolPosition = async () => {
214
214
  const rawDelegateStateInfos = await substrateApi.api.call.stakeInfoRuntimeApi.getStakeInfoForColdkeys(useAddresses);
215
215
  const delegateStateInfos = rawDelegateStateInfos.toPrimitive();
216
- const alphaToTaoRateMap = await getAlphaToTaoRateMap(this.substrateApi);
216
+ const alphaToTaoRateMap = await getAlphaToTaoRateMap(this.substrateApi, this.getAlphaPriceScaleDecimals());
217
217
  if (!delegateStateInfos || delegateStateInfos.length === 0) {
218
218
  return;
219
219
  }