@talismn/balances 3.0.5 → 3.1.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.
package/dist/index.js CHANGED
@@ -45,10 +45,10 @@ let _metaplex_foundation_umi = require("@metaplex-foundation/umi");
45
45
  let _solana_program_token_2022 = require("@solana-program/token-2022");
46
46
  let _polkadot_api_substrate_bindings = require("@polkadot-api/substrate-bindings");
47
47
  let _polkadot_api_utils = require("@polkadot-api/utils");
48
+ let _talismn_sapi = require("@talismn/sapi");
48
49
  let lodash_es_upperFirst = require("lodash-es/upperFirst");
49
50
  lodash_es_upperFirst = __toESM(lodash_es_upperFirst);
50
51
  let scale_ts = require("scale-ts");
51
- let _talismn_sapi = require("@talismn/sapi");
52
52
  //#region src/configureBigNumber.ts
53
53
  bignumber_js.default.set({ STRICT: false });
54
54
  var configureBigNumber_default = bignumber_js.default;
@@ -443,7 +443,7 @@ var Balance = class {
443
443
  }
444
444
  /** The frozen balance of this token. Is included in the free amount. */
445
445
  get locked() {
446
- if (this.#cachedLocked === void 0) this.#cachedLocked = this.#format(this.locks.map(({ amount }) => amount.planck).reduce((a, b) => _talismn_util.BigMath.max(a, b), 0n));
446
+ if (this.#cachedLocked === void 0) this.#cachedLocked = this.#format(excludeFromTransferableAmount(this.locks));
447
447
  return this.#cachedLocked;
448
448
  }
449
449
  get locks() {
@@ -512,7 +512,8 @@ var Balance = class {
512
512
  const newCalculation = () => _talismn_util.BigMath.max(this.locked.planck, this.reserved.planck);
513
513
  const baseUnavailable = this.#storage.useLegacyTransferableCalculation ? oldCalculation() : newCalculation();
514
514
  const nomPoolStakedPlancks = this.locks.some((lock) => lock.source === "substrate-native-holds" && lock.label === "DelegatedStaking") ? 0n : this.nompools.map(({ amount }) => amount.planck).reduce((a, b) => a + b, 0n);
515
- return this.#format(baseUnavailable + nomPoolStakedPlancks);
515
+ const extra = this.getValue("extra");
516
+ return this.#format(baseUnavailable + nomPoolStakedPlancks + includeInTotalExtraAmount(extra));
516
517
  };
517
518
  /** The feePayable balance of this token. Is generally the free amount - the feeFrozen amount. */
518
519
  get feePayable() {
@@ -2590,15 +2591,16 @@ const hasRuntimeApi = (metadata, apiName, method) => {
2590
2591
  if (!api?.methods) return false;
2591
2592
  return api.methods.some((m) => m.name === method);
2592
2593
  };
2593
- const getConstantValue = (metadataRpc, pallet, constant) => {
2594
- const { unifiedMetadata, builder } = (0, _talismn_scale.parseMetadataRpc)(metadataRpc);
2594
+ const toParsedMetadata = (metadata) => typeof metadata === "string" ? (0, _talismn_scale.parseMetadataRpc)(metadata) : metadata;
2595
+ const getConstantValue = (metadata, pallet, constant) => {
2596
+ const { unifiedMetadata, builder } = toParsedMetadata(metadata);
2595
2597
  const codec = builder.buildConstant(pallet, constant);
2596
2598
  const encodedValue = unifiedMetadata.pallets.find(({ name }) => name === pallet)?.constants.find(({ name }) => name === constant)?.value;
2597
2599
  if (!encodedValue) throw new Error(`Constant ${pallet}.${constant} not found`);
2598
2600
  return codec.dec(encodedValue);
2599
2601
  };
2600
- const tryGetConstantValue = (metadataRpc, pallet, constant) => {
2601
- const { unifiedMetadata, builder } = (0, _talismn_scale.parseMetadataRpc)(metadataRpc);
2602
+ const tryGetConstantValue = (metadata, pallet, constant) => {
2603
+ const { unifiedMetadata, builder } = toParsedMetadata(metadata);
2602
2604
  const encodedValue = unifiedMetadata.pallets.find(({ name }) => name === pallet)?.constants.find(({ name }) => name === constant)?.value;
2603
2605
  if (!encodedValue) return null;
2604
2606
  return builder.buildConstant(pallet, constant).dec(encodedValue);
@@ -3648,14 +3650,15 @@ const deriveMiniMetadataId = ({ source, chainId, specVersion }) => (0, _talismn_
3648
3650
  const getMiniMetadata$6 = ({ networkId, specVersion, metadataRpc }) => {
3649
3651
  const source = MODULE_TYPE$6;
3650
3652
  const chainId = networkId;
3651
- const systemVersion = getConstantValue(metadataRpc, "System", "Version");
3653
+ const parsed = (0, _talismn_scale.parseMetadataRpc)(metadataRpc);
3654
+ const { unifiedMetadata } = parsed;
3655
+ const systemVersion = getConstantValue(parsed, "System", "Version");
3652
3656
  if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
3653
3657
  const id = deriveMiniMetadataId({
3654
3658
  source,
3655
3659
  chainId,
3656
3660
  specVersion
3657
3661
  });
3658
- const { unifiedMetadata } = (0, _talismn_scale.parseMetadataRpc)(metadataRpc);
3659
3662
  if (unifiedMetadata.version < 14) throw new Error(`Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`);
3660
3663
  return {
3661
3664
  id,
@@ -3663,12 +3666,11 @@ const getMiniMetadata$6 = ({ networkId, specVersion, metadataRpc }) => {
3663
3666
  chainId,
3664
3667
  specVersion,
3665
3668
  version: _talismn_chaindata_provider.MINIMETADATA_VERSION,
3666
- data: getData$4(metadataRpc),
3669
+ data: getData$4(parsed),
3667
3670
  extra: null
3668
3671
  };
3669
3672
  };
3670
- const getData$4 = (metadataRpc) => {
3671
- const { metadata, unifiedMetadata } = (0, _talismn_scale.parseMetadataRpc)(metadataRpc);
3673
+ const getData$4 = ({ metadata, unifiedMetadata }) => {
3672
3674
  if (!hasStorageItems(unifiedMetadata, "Assets", [
3673
3675
  "Account",
3674
3676
  "Asset",
@@ -3846,27 +3848,6 @@ const fetchBasketClaims = async (connector, networkId, metadataRpc, addresses, a
3846
3848
  }
3847
3849
  };
3848
3850
  //#endregion
3849
- //#region src/modules/substrate-dtao/fetchStorageKeysPaged.ts
3850
- const PAGE_SIZE = 1e3;
3851
- /**
3852
- * Prefix scan via state_getKeysPaged. The unpaged state_getKeys is classified as heavy storage
3853
- * work and rejected by some public nodes (eg the bittensor testnet one: "Storage work rate limit
3854
- * exceeded"), while the paged variant is universally allowed.
3855
- */
3856
- const fetchStorageKeysPaged = async (connector, networkId, keyPrefix, at) => {
3857
- const keys = [];
3858
- let startKey;
3859
- do {
3860
- const params = [keyPrefix, PAGE_SIZE];
3861
- if (startKey || at) params.push(startKey ?? null);
3862
- if (at) params.push(at);
3863
- const page = await connector.send(networkId, "state_getKeysPaged", params);
3864
- keys.push(...page);
3865
- startKey = page.length === PAGE_SIZE ? page[page.length - 1] : void 0;
3866
- } while (startKey);
3867
- return keys;
3868
- };
3869
- //#endregion
3870
3851
  //#region src/modules/substrate-dtao/convictionLocks.ts
3871
3852
  const convictionLockKey = (address, netuid) => `${address}:${netuid}`;
3872
3853
  const getConvictionLockLabel = (lockType) => lockType === "perpetual" ? "Perpetual Conviction Lock" : "Decaying Conviction Lock";
@@ -3963,7 +3944,7 @@ const fetchConvictionLockStorageKeys = async (connector, networkId, addresses, s
3963
3944
  }
3964
3945
  let stateKeys;
3965
3946
  try {
3966
- stateKeys = await fetchStorageKeysPaged(connector, networkId, keyPrefix, at);
3947
+ stateKeys = await (0, _talismn_sapi.fetchStorageKeysPaged)((method, params) => connector.send(networkId, method, params), keyPrefix, { at });
3967
3948
  } catch (cause) {
3968
3949
  log_default.warn(`Failed to fetch conviction Lock keys (address=${address}) on ${networkId}`, { cause });
3969
3950
  throw cause;
@@ -4387,7 +4368,7 @@ const fetchTokens$5 = async ({ networkId, connector, tokens, miniMetadata }) =>
4387
4368
  const fetchTransferableTokensMap = async (connector, metadata, networkId) => {
4388
4369
  const { builder } = parseMetadataRpcCached(metadata);
4389
4370
  const transferToggleCodec = builder.buildStorage("SubtensorModule", "TransferToggle");
4390
- const transferToggleKeys = await fetchStorageKeysPaged(connector, networkId, (0, _talismn_scale.getStorageKeyPrefix)("SubtensorModule", "TransferToggle"));
4371
+ const transferToggleKeys = await (0, _talismn_sapi.fetchStorageKeysPaged)((method, params) => connector.send(networkId, method, params), (0, _talismn_scale.getStorageKeyPrefix)("SubtensorModule", "TransferToggle"));
4391
4372
  const transferToggleResults = await connector.send(networkId, "state_queryStorageAt", [transferToggleKeys]);
4392
4373
  const transferToggleEntries = transferToggleResults.length ? transferToggleResults[0].changes : [];
4393
4374
  return (0, lodash_es.fromPairs)(transferToggleEntries.map(([key, value]) => {
@@ -4835,14 +4816,15 @@ const fetchTokens$4 = async ({ networkId, tokens, connector, miniMetadata }) =>
4835
4816
  const getMiniMetadata$4 = ({ networkId, specVersion, metadataRpc }) => {
4836
4817
  const source = MODULE_TYPE$4;
4837
4818
  const chainId = networkId;
4838
- const systemVersion = getConstantValue(metadataRpc, "System", "Version");
4819
+ const parsed = (0, _talismn_scale.parseMetadataRpc)(metadataRpc);
4820
+ const { unifiedMetadata } = parsed;
4821
+ const systemVersion = getConstantValue(parsed, "System", "Version");
4839
4822
  if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
4840
4823
  const id = deriveMiniMetadataId({
4841
4824
  source,
4842
4825
  chainId,
4843
4826
  specVersion
4844
4827
  });
4845
- const { unifiedMetadata } = (0, _talismn_scale.parseMetadataRpc)(metadataRpc);
4846
4828
  if (unifiedMetadata.version < 14) throw new Error(`Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`);
4847
4829
  return {
4848
4830
  id,
@@ -4850,12 +4832,11 @@ const getMiniMetadata$4 = ({ networkId, specVersion, metadataRpc }) => {
4850
4832
  chainId,
4851
4833
  specVersion,
4852
4834
  version: _talismn_chaindata_provider.MINIMETADATA_VERSION,
4853
- data: getData$2(metadataRpc),
4835
+ data: getData$2(parsed),
4854
4836
  extra: null
4855
4837
  };
4856
4838
  };
4857
- const getData$2 = (metadataRpc) => {
4858
- const { metadata, unifiedMetadata } = (0, _talismn_scale.parseMetadataRpc)(metadataRpc);
4839
+ const getData$2 = ({ metadata, unifiedMetadata }) => {
4859
4840
  if (!hasStorageItems(unifiedMetadata, "ForeignAssets", [
4860
4841
  "Account",
4861
4842
  "Asset",
@@ -5172,6 +5153,17 @@ const SubHydrationTokenConfigSchema = zod_v4.default.strictObject({
5172
5153
  ...TokenConfigBaseSchema.shape
5173
5154
  });
5174
5155
  //#endregion
5156
+ //#region src/modules/substrate-native/evmMirror.ts
5157
+ const EVM_MIRROR_LOCK_LABEL = "evm-mirror";
5158
+ const isEvmMirrorWithdrawableLock = (lock) => lock.meta?.type === "evm-mirror-withdrawable";
5159
+ const findEvmMirrorWithdrawable = (locks) => {
5160
+ const lock = locks?.find(isEvmMirrorWithdrawableLock);
5161
+ return lock ? {
5162
+ ...lock.meta,
5163
+ amount: lock.amount.planck
5164
+ } : null;
5165
+ };
5166
+ //#endregion
5175
5167
  //#region src/modules/substrate-native/config.ts
5176
5168
  const MODULE_TYPE$2 = _talismn_chaindata_provider.SubNativeTokenSchema.shape.type.value;
5177
5169
  const PLATFORM$2 = _talismn_chaindata_provider.SubNativeTokenSchema.shape.platform.value;
@@ -5217,7 +5209,7 @@ const baseLockLabels = ["fees", "misc"];
5217
5209
  const isBaseLock = (lock) => baseLockLabels.includes(lock.label);
5218
5210
  const isNonBaseLock = (lock) => !isBaseLock(lock);
5219
5211
  const filterBaseLocks = (locks) => {
5220
- if (!locks.some(isNonBaseLock)) return locks;
5212
+ if (!locks.some((lock) => isNonBaseLock(lock) && !lock.includeInTransferable)) return locks;
5221
5213
  return locks.filter(isNonBaseLock);
5222
5214
  };
5223
5215
  const getLockTitle = (lock, { balance } = {}) => {
@@ -5228,6 +5220,7 @@ const getLockTitle = (lock, { balance } = {}) => {
5228
5220
  if (lock.label === "nompools-unbonding") return "Pooled Staking";
5229
5221
  if (lock.label === "subtensor-staking") return "Root Staking";
5230
5222
  if (lock.label === "dapp-staking") return "DApp Staking";
5223
+ if (lock.label === "evm-mirror") return "EVM Balance";
5231
5224
  if (lock.label === "fees") return "Locked (Fees)";
5232
5225
  if (lock.label === "misc") return "Locked";
5233
5226
  if (lock.label.startsWith("other")) return "Locked";
@@ -5235,7 +5228,7 @@ const getLockTitle = (lock, { balance } = {}) => {
5235
5228
  };
5236
5229
  //#endregion
5237
5230
  //#region src/modules/substrate-native/queries/buildBaseQueries.ts
5238
- const buildBaseQueries = (networkId, balanceDefs, miniMetadata) => {
5231
+ const buildBaseQueries = (networkId, balanceDefs, miniMetadata, hasFrontierMirrorWithdraw = false) => {
5239
5232
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
5240
5233
  account: ["System", "Account"],
5241
5234
  stakingLedger: ["Staking", "Ledger"],
@@ -5247,6 +5240,7 @@ const buildBaseQueries = (networkId, balanceDefs, miniMetadata) => {
5247
5240
  });
5248
5241
  if (!networkStorageCoders) throw new Error(`No network storage coders found for networkId: ${networkId}`);
5249
5242
  return balanceDefs.map(({ token, address }) => {
5243
+ const evmMirror = hasFrontierMirrorWithdraw ? getEvmMirror(address) : null;
5250
5244
  const getStateKeys = () => {
5251
5245
  try {
5252
5246
  return [
@@ -5255,7 +5249,8 @@ const buildBaseQueries = (networkId, balanceDefs, miniMetadata) => {
5255
5249
  networkStorageCoders.freezes ? networkStorageCoders.freezes.keys.enc(address) : null,
5256
5250
  networkStorageCoders.holds ? networkStorageCoders.holds.keys.enc(address) : null,
5257
5251
  networkStorageCoders.stakingLedger ? networkStorageCoders.stakingLedger.keys.enc(address) : null,
5258
- networkStorageCoders.poolMembers ? networkStorageCoders.poolMembers.keys.enc(address) : null
5252
+ networkStorageCoders.poolMembers ? networkStorageCoders.poolMembers.keys.enc(address) : null,
5253
+ networkStorageCoders.account && evmMirror ? networkStorageCoders.account.keys.enc((0, _talismn_crypto.frontierH160ToSs58Mirror)(evmMirror.h160)) : null
5259
5254
  ];
5260
5255
  } catch {
5261
5256
  return [];
@@ -5274,7 +5269,7 @@ const buildBaseQueries = (networkId, balanceDefs, miniMetadata) => {
5274
5269
  useLegacyTransferableCalculation: miniMetadata.extra.useLegacyTransferableCalculation
5275
5270
  };
5276
5271
  let nomPoolMemberInfo = null;
5277
- const [accountChange, lockChange, freezesChange, holdsChange, stakingLedgerChange, nomPoolMemberChange] = changes;
5272
+ const [accountChange, lockChange, freezesChange, holdsChange, stakingLedgerChange, nomPoolMemberChange, evmMirrorAccountChange] = changes;
5278
5273
  if (networkStorageCoders.account) {
5279
5274
  const baseValues = decodeBaseResult(networkStorageCoders.account, accountChange, networkId);
5280
5275
  balance.values.push(...baseValues);
@@ -5299,6 +5294,10 @@ const buildBaseQueries = (networkId, balanceDefs, miniMetadata) => {
5299
5294
  const nomPoolMemberValue = decodePoolMemberResult(networkStorageCoders.poolMembers, nomPoolMemberChange, networkId);
5300
5295
  if (nomPoolMemberValue) nomPoolMemberInfo = nomPoolMemberValue;
5301
5296
  }
5297
+ if (networkStorageCoders.account && evmMirror && evmMirrorAccountChange) {
5298
+ const evmMirrorValues = decodeEvmMirrorResult(networkStorageCoders.account, evmMirrorAccountChange, evmMirror, networkId);
5299
+ balance.values.push(...evmMirrorValues);
5300
+ }
5302
5301
  return {
5303
5302
  balance,
5304
5303
  nomPoolMemberInfo
@@ -5336,6 +5335,35 @@ const decodeBaseResult = (coder, value, networkId) => {
5336
5335
  }
5337
5336
  ];
5338
5337
  };
5338
+ const getEvmMirror = (address) => {
5339
+ try {
5340
+ return {
5341
+ type: "evm-mirror-withdrawable",
5342
+ h160: (0, _talismn_crypto.frontierSs58ToTruncatedH160)(address)
5343
+ };
5344
+ } catch {
5345
+ return null;
5346
+ }
5347
+ };
5348
+ const decodeEvmMirrorResult = (coder, value, meta, networkId) => {
5349
+ const free = (0, _talismn_scale.decodeScale)(coder, value, `Failed to decode EVM mirror balance on chain ${networkId}`)?.data?.free ?? 0n;
5350
+ if (free <= 0n) return [];
5351
+ const withdrawable = {
5352
+ source: "substrate-native-evm-mirror",
5353
+ label: EVM_MIRROR_LOCK_LABEL,
5354
+ amount: free.toString(),
5355
+ meta
5356
+ };
5357
+ return [{
5358
+ ...withdrawable,
5359
+ type: "locked",
5360
+ includeInTransferable: true
5361
+ }, {
5362
+ ...withdrawable,
5363
+ type: "extra",
5364
+ includeInTotal: true
5365
+ }];
5366
+ };
5339
5367
  const decodeLocksResult = (coder, value, networkId) => {
5340
5368
  return (0, _talismn_scale.decodeScale)(coder, value, `Failed to decode lock on chain ${networkId}`)?.map?.((lock) => {
5341
5369
  const id = lock?.id ? _polkadot_api_substrate_bindings.Binary.toText(_polkadot_api_substrate_bindings.Binary.fromHex(lock.id)) : void 0;
@@ -5503,7 +5531,7 @@ const getNomPoolStateKeys = (coders, nomPoolMemberInfo, extra) => {
5503
5531
  };
5504
5532
  //#endregion
5505
5533
  //#region src/modules/substrate-native/fetchBalances.ts
5506
- const fetchBalances$2 = async ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
5534
+ const fetchBalances$2 = async ({ networkId, tokensWithAddresses, connector, miniMetadata, hasFrontierMirrorWithdraw }) => {
5507
5535
  if (!tokensWithAddresses.length) return {
5508
5536
  success: [],
5509
5537
  errors: []
@@ -5542,7 +5570,7 @@ const fetchBalances$2 = async ({ networkId, tokensWithAddresses, connector, mini
5542
5570
  }))
5543
5571
  };
5544
5572
  }
5545
- const baseQueries = buildBaseQueries(networkId, balanceDefs, miniMetadata);
5573
+ const baseQueries = buildBaseQueries(networkId, balanceDefs, miniMetadata, hasFrontierMirrorWithdraw);
5546
5574
  const partialBalances = await fetchRpcQueryPack(connector, networkId, baseQueries);
5547
5575
  const nomPoolQueries = buildNomPoolQueries(networkId, partialBalances, miniMetadata);
5548
5576
  return {
@@ -5594,14 +5622,15 @@ const getChainProperties = async (connector, networkId) => {
5594
5622
  const getMiniMetadata$2 = ({ networkId, specVersion, metadataRpc, config }) => {
5595
5623
  const source = MODULE_TYPE$2;
5596
5624
  const chainId = networkId;
5597
- const systemVersion = getConstantValue(metadataRpc, "System", "Version");
5625
+ const parsed = (0, _talismn_scale.parseMetadataRpc)(metadataRpc);
5626
+ const { metadata, unifiedMetadata } = parsed;
5627
+ const systemVersion = getConstantValue(parsed, "System", "Version");
5598
5628
  if (specVersion !== systemVersion.spec_version) throw new Error(`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`);
5599
5629
  const id = deriveMiniMetadataId({
5600
5630
  source,
5601
5631
  chainId,
5602
5632
  specVersion
5603
5633
  });
5604
- const { metadata, unifiedMetadata } = (0, _talismn_scale.parseMetadataRpc)(metadataRpc);
5605
5634
  if (unifiedMetadata.version < 14) throw new Error(`Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`);
5606
5635
  if (config?.disable) return {
5607
5636
  id,
@@ -5612,8 +5641,8 @@ const getMiniMetadata$2 = ({ networkId, specVersion, metadataRpc, config }) => {
5612
5641
  data: null,
5613
5642
  extra: { disable: true }
5614
5643
  };
5615
- const existentialDeposit = tryGetConstantValue(metadataRpc, "Balances", "ExistentialDeposit")?.toString();
5616
- const nominationPoolsPalletIdHex = tryGetConstantValue(metadataRpc, "NominationPools", "PalletId");
5644
+ const existentialDeposit = tryGetConstantValue(parsed, "Balances", "ExistentialDeposit")?.toString();
5645
+ const nominationPoolsPalletIdHex = tryGetConstantValue(parsed, "NominationPools", "PalletId");
5617
5646
  const nominationPoolsPalletId = nominationPoolsPalletIdHex ? _polkadot_api_substrate_bindings.Binary.toText(_polkadot_api_substrate_bindings.Binary.fromHex(nominationPoolsPalletIdHex)) : void 0;
5618
5647
  const useLegacyTransferableCalculation = !Boolean(unifiedMetadata.pallets.find(({ name }) => name === "Balances")?.storage?.items.find(({ name }) => name === "Freezes"));
5619
5648
  (0, _talismn_scale.compactMetadata)(metadata, [
@@ -5724,7 +5753,7 @@ const getTransferAllEncodedArgs = (to, codec) => {
5724
5753
  };
5725
5754
  //#endregion
5726
5755
  //#region src/modules/substrate-native/subscribeBalances.ts
5727
- const subscribeBalances$2 = ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
5756
+ const subscribeBalances$2 = ({ networkId, tokensWithAddresses, connector, miniMetadata, hasFrontierMirrorWithdraw }) => {
5728
5757
  if (!tokensWithAddresses.length) return (0, rxjs.of)({
5729
5758
  success: [],
5730
5759
  errors: []
@@ -5732,7 +5761,7 @@ const subscribeBalances$2 = ({ networkId, tokensWithAddresses, connector, miniMe
5732
5761
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
5733
5762
  return (0, rxjs.defer)(async () => {
5734
5763
  await (0, _talismn_util.yieldToEventLoop)();
5735
- return buildBaseQueries(networkId, balanceDefs, miniMetadata);
5764
+ return buildBaseQueries(networkId, balanceDefs, miniMetadata, hasFrontierMirrorWithdraw);
5736
5765
  }).pipe((0, rxjs.switchMap)((baseQueries) => getRpcQueryPack$(connector, networkId, baseQueries)), (0, rxjs.switchMap)((partialBalances) => {
5737
5766
  const nomPoolQueries = buildNomPoolQueries(networkId, partialBalances, miniMetadata);
5738
5767
  return getRpcQueryPack$(connector, networkId, nomPoolQueries);
@@ -6859,7 +6888,7 @@ var BalancesProvider = class {
6859
6888
  switch (mod.platform) {
6860
6889
  case "ethereum": return this.getEthereumNetworkModuleBalances$(networkId, tokensWithAddresses, mod);
6861
6890
  case "solana": return this.getSolanaNetworkModuleBalances$(networkId, tokensWithAddresses, mod);
6862
- case "polkadot": return this.getPolkadotNetworkModuleBalances$(networkId, tokensWithAddresses, mod);
6891
+ case "polkadot": return this.getPolkadotNetworkModuleBalances$(networkId, tokensWithAddresses, mod, (0, _talismn_chaindata_provider.isNetworkDot)(network) && !!network.hasFrontierMirrorWithdraw);
6863
6892
  default:
6864
6893
  log_default.warn("[balances] Unsupported network platform for module", {
6865
6894
  networkId,
@@ -6884,11 +6913,12 @@ var BalancesProvider = class {
6884
6913
  };
6885
6914
  }, { label: `network balances ${networkId}` }), (0, rxjs.distinctUntilChanged)(isEqualBalancesResult));
6886
6915
  }
6887
- getPolkadotNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
6916
+ getPolkadotNetworkModuleBalances$(networkId, tokensWithAddresses, mod, hasFrontierMirrorWithdraw) {
6888
6917
  return (0, _talismn_util.getSharedObservable)(`BalancesProvider.getPolkadotNetworkModuleBalances$`, {
6889
6918
  networkId,
6890
6919
  mod,
6891
- tokensWithAddresses
6920
+ tokensWithAddresses,
6921
+ hasFrontierMirrorWithdraw
6892
6922
  }, () => {
6893
6923
  if (!tokensWithAddresses.length) return (0, rxjs.of)({
6894
6924
  status: "live",
@@ -6912,7 +6942,8 @@ var BalancesProvider = class {
6912
6942
  networkId,
6913
6943
  tokensWithAddresses,
6914
6944
  connector: this.#chainConnectors.substrate,
6915
- miniMetadata
6945
+ miniMetadata,
6946
+ hasFrontierMirrorWithdraw
6916
6947
  })), stabilizeModuleResults(mod.type === "substrate-dtao" ? void 0 : classifySmallAmountDrift(GENERIC_DRIFT_TOLERANCE_BPS)), (0, rxjs.catchError)(() => rxjs.EMPTY), (0, rxjs.tap)((results) => {
6917
6948
  (0, _talismn_util.reportJsActivity)(`module ${mod.type} ${networkId} (${results.success.length})`);
6918
6949
  if (results.dynamicTokens?.length) this.#chaindataProvider.registerDynamicTokens(results.dynamicTokens);
@@ -7268,6 +7299,7 @@ exports.BalanceValueGetter = BalanceValueGetter;
7268
7299
  exports.Balances = Balances;
7269
7300
  exports.BalancesProvider = BalancesProvider;
7270
7301
  exports.Change24hCurrencyFormatter = Change24hCurrencyFormatter;
7302
+ exports.EVM_MIRROR_LOCK_LABEL = EVM_MIRROR_LOCK_LABEL;
7271
7303
  exports.EvmErc20BalanceModule = EvmErc20BalanceModule;
7272
7304
  exports.EvmErc20TokenConfigSchema = EvmErc20TokenConfigSchema;
7273
7305
  exports.EvmNativeBalanceModule = EvmNativeBalanceModule;
@@ -7320,6 +7352,7 @@ exports.filterMirrorTokens = filterMirrorTokens;
7320
7352
  exports.findDTaoClaimablePlancks = findDTaoClaimablePlancks;
7321
7353
  exports.findDTaoConvictionLock = findDTaoConvictionLock;
7322
7354
  exports.findDTaoRootStakeHold = findDTaoRootStakeHold;
7355
+ exports.findEvmMirrorWithdrawable = findEvmMirrorWithdrawable;
7323
7356
  exports.getBalanceFingerprint = getBalanceFingerprint;
7324
7357
  exports.getBalanceId = getBalanceId;
7325
7358
  exports.getBalanceStorageFingerprint = getBalanceStorageFingerprint;
@@ -7343,6 +7376,7 @@ exports.isEqualBalanceArrays = isEqualBalanceArrays;
7343
7376
  exports.isEqualBalancesResult = isEqualBalancesResult;
7344
7377
  exports.isEqualMiniMetadatas = isEqualMiniMetadatas;
7345
7378
  exports.isEqualModuleResults = isEqualModuleResults;
7379
+ exports.isEvmMirrorWithdrawableLock = isEvmMirrorWithdrawableLock;
7346
7380
  exports.isNonTransferable = isNonTransferable;
7347
7381
  exports.taoToAlpha = taoToAlpha;
7348
7382
  exports.taoToAlphaCeil = taoToAlphaCeil;