@talismn/balances 0.0.0-pr2043-20250619072437 → 0.0.0-pr2043-20250619151012

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 (23) hide show
  1. package/dist/declarations/src/BalanceModule.d.ts +7 -3
  2. package/dist/declarations/src/getMiniMetadata/index.d.ts +2 -1
  3. package/dist/declarations/src/modules/SubstrateAssetsModule.d.ts +2 -4
  4. package/dist/declarations/src/modules/SubstrateForeignAssetsModule.d.ts +2 -4
  5. package/dist/declarations/src/modules/SubstrateNativeModule/subscribeCrowdloans.d.ts +1 -1
  6. package/dist/declarations/src/modules/SubstrateNativeModule/subscribeNompoolStaking.d.ts +1 -1
  7. package/dist/declarations/src/modules/SubstrateNativeModule/subscribeSubtensorStaking.d.ts +1 -1
  8. package/dist/declarations/src/modules/SubstrateNativeModule/types.d.ts +3 -4
  9. package/dist/declarations/src/modules/SubstrateNativeModule/util/QueryCache.d.ts +4 -4
  10. package/dist/declarations/src/modules/SubstrateNativeModule/util/buildQueries.d.ts +3 -2
  11. package/dist/declarations/src/modules/SubstrateTokensModule.d.ts +3 -4
  12. package/dist/declarations/src/modules/index.d.ts +5 -17
  13. package/dist/declarations/src/modules/util/buildStorageCoders.d.ts +3 -4
  14. package/dist/declarations/src/modules/util/getAddresssesByTokenByNetwork.d.ts +3 -0
  15. package/dist/declarations/src/modules/util/index.d.ts +0 -1
  16. package/dist/declarations/src/types/balances.d.ts +0 -11
  17. package/dist/declarations/src/types/minimetadatas.d.ts +13 -8
  18. package/dist/talismn-balances.cjs.dev.js +178 -209
  19. package/dist/talismn-balances.cjs.prod.js +178 -209
  20. package/dist/talismn-balances.esm.js +175 -206
  21. package/package.json +6 -6
  22. package/dist/declarations/src/modules/SubstrateNativeModule/util/detectMiniMetadataChanges.d.ts +0 -2
  23. package/dist/declarations/src/modules/util/findChainMeta.d.ts +0 -8
@@ -8,12 +8,14 @@ var util = require('@talismn/util');
8
8
  var BigNumber = require('bignumber.js');
9
9
  var util$1 = require('@polkadot/util');
10
10
  var utilCrypto = require('@polkadot/util-crypto');
11
+ var shared = require('@talismn/chaindata-provider/src/chaindata/shared');
12
+ var z = require('zod/v4');
11
13
  var pako = require('pako');
12
14
  var viem = require('viem');
15
+ var lodash = require('lodash');
13
16
  var isEqual = require('lodash/isEqual');
14
17
  var txwrapperCore = require('@substrate/txwrapper-core');
15
18
  var scale = require('@talismn/scale');
16
- var lodash = require('lodash');
17
19
  var camelCase = require('lodash/camelCase');
18
20
  var PQueue = require('p-queue');
19
21
  var sapi = require('@talismn/sapi');
@@ -26,13 +28,13 @@ var chainConnector = require('@talismn/chain-connector');
26
28
  var rxjs = require('rxjs');
27
29
  var scaleTs = require('scale-ts');
28
30
  var upperFirst = require('lodash/upperFirst');
29
- var z = require('zod/v4');
30
31
  var apiContract = require('@polkadot/api-contract');
31
32
 
32
33
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
33
34
 
34
35
  var anylogger__default = /*#__PURE__*/_interopDefault(anylogger);
35
36
  var BigNumber__default = /*#__PURE__*/_interopDefault(BigNumber);
37
+ var z__default = /*#__PURE__*/_interopDefault(z);
36
38
  var pako__default = /*#__PURE__*/_interopDefault(pako);
37
39
  var isEqual__default = /*#__PURE__*/_interopDefault(isEqual);
38
40
  var camelCase__default = /*#__PURE__*/_interopDefault(camelCase);
@@ -40,7 +42,8 @@ var PQueue__default = /*#__PURE__*/_interopDefault(PQueue);
40
42
  var groupBy__default = /*#__PURE__*/_interopDefault(groupBy);
41
43
  var PromisePool__default = /*#__PURE__*/_interopDefault(PromisePool);
42
44
  var upperFirst__default = /*#__PURE__*/_interopDefault(upperFirst);
43
- var z__default = /*#__PURE__*/_interopDefault(z);
45
+
46
+ // Record<string, unknown> | undefined
44
47
 
45
48
  // TODO: Document default balances module purpose/usage
46
49
  const DefaultBalanceModule = type => ({
@@ -126,7 +129,7 @@ class EvmTokenFetcher {
126
129
 
127
130
  var pkg = {
128
131
  name: "@talismn/balances",
129
- version: "0.0.0-pr2043-20250619072437"};
132
+ version: "0.0.0-pr2043-20250619151012"};
130
133
 
131
134
  var log = anylogger__default.default(pkg.name);
132
135
 
@@ -410,13 +413,13 @@ class Balance {
410
413
  return this.#storage.networkId;
411
414
  }
412
415
  get network() {
413
- return this.#db?.networks && this.networkId && this.#db?.networks[this.networkId] || null;
416
+ return this.#db?.networks?.[this.networkId] || null;
414
417
  }
415
418
  get tokenId() {
416
419
  return this.#storage.tokenId;
417
420
  }
418
421
  get token() {
419
- return this.#db?.tokens && this.#db?.tokens[this.tokenId] || null;
422
+ return this.#db?.tokens?.[this.tokenId] || null;
420
423
  }
421
424
  get decimals() {
422
425
  return this.token?.decimals || null;
@@ -936,6 +939,23 @@ const deriveMiniMetadataId = ({
936
939
  specVersion,
937
940
  libVersion
938
941
  }) => util$1.u8aToHex(utilCrypto.xxhashAsU8a(new TextEncoder().encode(`${source}${chainId}${specVersion}${libVersion}`), 64), undefined, false);
942
+ const MiniMetadataBaseSchema = z__default.default.strictObject({
943
+ /** The DB id for this metadata */
944
+ id: z__default.default.string().nonempty(),
945
+ /** The balance module which created this miniMetadata */
946
+ source: z__default.default.string().nonempty(),
947
+ // TODO make it an enum of balance module types
948
+ /** The chain this miniMetadata came from */
949
+ chainId: chaindataProvider.DotNetworkSchema.shape.id,
950
+ /** The chain specVersion which this miniMetadata is valid for */
951
+ specVersion: chaindataProvider.DotNetworkSchema.shape.specVersion,
952
+ /** the version of the balances library used to craft the mini metadata */
953
+ libVersion: z__default.default.string().nonempty(),
954
+ /** The miniMetadata encoded as a hex string */
955
+ data: shared.HexStringSchema.nullable(),
956
+ // /** module specific information about the chain, such as pallet ids for specific features */
957
+ extra: z__default.default.any().nullable()
958
+ });
939
959
 
940
960
  // for DB version 3, Wallet version 1.21.0
941
961
  const upgradeRemoveSymbolFromNativeTokenId = async tx => {
@@ -1297,10 +1317,10 @@ const EvmErc20Module = hydrate => {
1297
1317
  * In a future version of the balance libraries, we may build some kind of async scheduling system which will keep the chainmeta for each chain up to date without relying on a squid.
1298
1318
  */
1299
1319
  async fetchEvmChainMeta(_chainId) {
1300
- return undefined;
1301
- // const isTestnet = (await chaindataProvider.evmNetworkById(chainId))?.isTestnet || false
1302
-
1303
- // return { isTestnet }
1320
+ return {
1321
+ miniMetadata: null,
1322
+ extra: null
1323
+ };
1304
1324
  },
1305
1325
  /**
1306
1326
  * This method is currently executed on [a squid](https://github.com/TalismanSociety/chaindata-squid/blob/0ee02818bf5caa7362e3f3664e55ef05ec8df078/src/steps/updateEvmNetworksFromGithub.ts#L338-L343).
@@ -1509,7 +1529,6 @@ const fetchBalances$3 = async (evmChainConnector, tokenAddressesByNetwork, erc20
1509
1529
  source: "evm-erc20",
1510
1530
  status: "live",
1511
1531
  address: networkParams[i].address,
1512
- // multiChainId: { evmChainId: evmNetworkId },
1513
1532
  networkId,
1514
1533
  tokenId: networkParams[i].token.id,
1515
1534
  value: free
@@ -1595,15 +1614,6 @@ function groupAddressesByTokenByEvmNetwork$1(addressesByToken, tokens) {
1595
1614
  const abiMulticall = viem.parseAbi(["struct Call { address target; bytes callData; }", "struct Call3 { address target; bool allowFailure; bytes callData; }", "struct Call3Value { address target; bool allowFailure; uint256 value; bytes callData; }", "struct Result { bool success; bytes returnData; }", "function aggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes[] memory returnData)", "function aggregate3(Call3[] calldata calls) public payable returns (Result[] memory returnData)", "function aggregate3Value(Call3Value[] calldata calls) public payable returns (Result[] memory returnData)", "function blockAndAggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData)", "function getBasefee() view returns (uint256 basefee)", "function getBlockHash(uint256 blockNumber) view returns (bytes32 blockHash)", "function getBlockNumber() view returns (uint256 blockNumber)", "function getChainId() view returns (uint256 chainid)", "function getCurrentBlockCoinbase() view returns (address coinbase)", "function getCurrentBlockDifficulty() view returns (uint256 difficulty)", "function getCurrentBlockGasLimit() view returns (uint256 gaslimit)", "function getCurrentBlockTimestamp() view returns (uint256 timestamp)", "function getEthBalance(address addr) view returns (uint256 balance)", "function getLastBlockHash() view returns (bytes32 blockHash)", "function tryAggregate(bool requireSuccess, Call[] calldata calls) public payable returns (Result[] memory returnData)", "function tryBlockAndAggregate(bool requireSuccess, Call[] calldata calls) public payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData)"]);
1596
1615
 
1597
1616
  const moduleType$6 = "evm-native";
1598
-
1599
- // export const evmNativeTokenId = (chainId: EvmNetworkId) =>
1600
- // `${chainId}-evm-native`.toLowerCase().replace(/ /g, "-")
1601
-
1602
- const getEvmNetworkIdFromTokenId = tokenId => {
1603
- const evmNetworkId = tokenId.split(":")[0];
1604
- if (!evmNetworkId) throw new Error(`Can't detect chainId for token ${tokenId}`);
1605
- return evmNetworkId;
1606
- };
1607
1617
  const EvmNativeModule = hydrate => {
1608
1618
  const {
1609
1619
  chainConnectors,
@@ -1622,10 +1632,10 @@ const EvmNativeModule = hydrate => {
1622
1632
  * In a future version of the balance libraries, we may build some kind of async scheduling system which will keep the chainmeta for each chain up to date without relying on a squid.
1623
1633
  */
1624
1634
  async fetchEvmChainMeta(_chainId) {
1625
- // const isTestnet = (await chaindataProvider.evmNetworkById(chainId))?.isTestnet || false
1626
-
1627
- // return { isTestnet }
1628
- return undefined;
1635
+ return {
1636
+ miniMetadata: null,
1637
+ extra: null
1638
+ };
1629
1639
  },
1630
1640
  /**
1631
1641
  * This method is currently executed on [a squid](https://github.com/TalismanSociety/chaindata-squid/blob/0ee02818bf5caa7362e3f3664e55ef05ec8df078/src/steps/updateEvmNetworksFromGithub.ts#L338-L343).
@@ -1664,7 +1674,7 @@ const EvmNativeModule = hydrate => {
1664
1674
  const initDelay = 500; // 500ms == 0.5 seconds
1665
1675
 
1666
1676
  const tokens = await getModuleTokens();
1667
- const ethAddressesByToken = Object.fromEntries(Object.entries(addressesByToken).map(([tokenId, addresses]) => {
1677
+ const ethAddressesByToken = lodash.fromPairs(lodash.toPairs(addressesByToken).map(([tokenId, addresses]) => {
1668
1678
  const ethAddresses = addresses.filter(util.isEthereumAddress);
1669
1679
  if (ethAddresses.length === 0) return null;
1670
1680
  const token = tokens[tokenId];
@@ -1678,7 +1688,7 @@ const EvmNativeModule = hydrate => {
1678
1688
  let zeroBalanceSubscriptionIntervalCounter = 0;
1679
1689
 
1680
1690
  // setup initialising balances for all active evm networks
1681
- const activeEvmNetworkIds = Object.keys(ethAddressesByToken).map(getEvmNetworkIdFromTokenId);
1691
+ const activeEvmNetworkIds = lodash.keys(ethAddressesByToken).map(chaindataProvider.networkIdFromTokenId);
1682
1692
  const initialisingBalances = new Set(activeEvmNetworkIds);
1683
1693
  const positiveBalanceNetworks = new Set(initialBalances?.map(b => b.networkId));
1684
1694
  const poll = async () => {
@@ -1687,7 +1697,7 @@ const EvmNativeModule = hydrate => {
1687
1697
  try {
1688
1698
  // fetch balance for each network sequentially to prevent creating a big queue of http requests (browser can only handle 2 at a time)
1689
1699
  for (const [tokenId, addresses] of Object.entries(ethAddressesByToken)) {
1690
- const evmNetworkId = getEvmNetworkIdFromTokenId(tokenId);
1700
+ const evmNetworkId = chaindataProvider.networkIdFromTokenId(tokenId);
1691
1701
 
1692
1702
  // a zero balance network is one that has initialised and does not have a positive balance
1693
1703
  const isZeroBalanceNetwork = !initialisingBalances.has(evmNetworkId) && !positiveBalanceNetworks.has(evmNetworkId);
@@ -2405,14 +2415,12 @@ const EvmUniswapV2Module = hydrate => {
2405
2415
  return {
2406
2416
  ...DefaultBalanceModule(moduleType$5),
2407
2417
  async fetchEvmChainMeta(_chainId) {
2408
- // const isTestnet = (await chaindataProvider.evmNetworkById(chainId))?.isTestnet || false
2409
-
2410
- // return { isTestnet }
2411
- return undefined;
2418
+ return {
2419
+ miniMetadata: null,
2420
+ extra: null
2421
+ };
2412
2422
  },
2413
2423
  async fetchEvmChainTokens(chainId, _chainMeta, moduleConfig) {
2414
- //const { isTestnet } = chainMeta
2415
-
2416
2424
  const tokens = {};
2417
2425
  for (const tokenConfig of moduleConfig?.pools ?? []) {
2418
2426
  const {
@@ -2769,7 +2777,8 @@ const fetchMiniMetadatas = async (chainConnector, chaindataProvider, chainId, sp
2769
2777
  chainId,
2770
2778
  specVersion,
2771
2779
  libVersion,
2772
- data: chainMeta?.miniMetadata ?? null
2780
+ data: chainMeta?.miniMetadata ?? null,
2781
+ extra: chainMeta?.extra ?? null
2773
2782
  };
2774
2783
  }));
2775
2784
  } finally {
@@ -2838,40 +2847,15 @@ async function balances(balanceModule, addressesByToken, callback) {
2838
2847
  return await balanceModule.fetchBalances(addressesByToken);
2839
2848
  }
2840
2849
 
2841
- /**
2842
- * Given a `moduleType` and a `chain` from a chaindataProvider, this function will find the chainMeta
2843
- * associated with the given balanceModule for the given chain.
2844
- */
2845
- const findChainMeta = (miniMetadatas, moduleType, chain) => {
2846
- if (!chain) return [undefined, undefined];
2847
- if (!chain.specVersion) return [undefined, undefined];
2848
-
2849
- // TODO: This is spaghetti to import this here, it should be injected into each balance module or something.
2850
- const metadataId = deriveMiniMetadataId({
2851
- source: moduleType,
2852
- chainId: chain.id,
2853
- specVersion: chain.specVersion,
2854
- libVersion
2855
- });
2856
-
2857
- // TODO: Fix this (needs to fetch miniMetadata without being async)
2858
- const miniMetadata = miniMetadatas.get(metadataId);
2859
- const chainMeta = miniMetadata ? {
2860
- miniMetadata: miniMetadata.data
2861
- } : undefined;
2862
- return [chainMeta, miniMetadata];
2863
- };
2864
-
2865
2850
  const buildStorageCoders = ({
2866
2851
  chainIds,
2867
2852
  chains,
2868
2853
  miniMetadatas,
2869
- moduleType,
2870
2854
  coders
2871
2855
  }) => new Map([...chainIds].flatMap(chainId => {
2872
2856
  const chain = chains[chainId];
2873
2857
  if (!chain) return [];
2874
- const [, miniMetadata] = findChainMeta(miniMetadatas, moduleType, chain);
2858
+ const miniMetadata = miniMetadatas.get(chainId); // findMiniMetadata<TBalanceModule>(miniMetadatas, moduleType, chain)
2875
2859
  if (!miniMetadata) return [];
2876
2860
  if (!miniMetadata.data) return [];
2877
2861
  const metadata = scale.unifyMetadata(scale.decAnyMetadata(miniMetadata.data));
@@ -3107,6 +3091,10 @@ const decompress = data => {
3107
3091
  };
3108
3092
 
3109
3093
  const moduleType$4 = "substrate-assets";
3094
+ const UNSUPPORTED_CHAIN_META$3 = {
3095
+ miniMetadata: null,
3096
+ extra: null
3097
+ };
3110
3098
  const SubAssetsModule = hydrate => {
3111
3099
  const {
3112
3100
  chainConnectors,
@@ -3118,7 +3106,7 @@ const SubAssetsModule = hydrate => {
3118
3106
  ...DefaultBalanceModule(moduleType$4),
3119
3107
  // TODO make synchronous at the module definition level ?
3120
3108
  async fetchSubstrateChainMeta(chainId, moduleConfig, metadataRpc) {
3121
- if (!metadataRpc) return {};
3109
+ if (!metadataRpc) return UNSUPPORTED_CHAIN_META$3;
3122
3110
  const metadata = scale.decAnyMetadata(metadataRpc);
3123
3111
  scale.compactMetadata(metadata, [{
3124
3112
  pallet: "Assets",
@@ -3126,7 +3114,8 @@ const SubAssetsModule = hydrate => {
3126
3114
  }]);
3127
3115
  const miniMetadata = scale.encodeMetadata(metadata);
3128
3116
  return {
3129
- miniMetadata
3117
+ miniMetadata,
3118
+ extra: null
3130
3119
  };
3131
3120
  },
3132
3121
  async fetchSubstrateChainTokens(chainId, chainMeta, moduleConfig) {
@@ -3391,6 +3380,10 @@ const tryEncode = (scaleCoder, ...args) => {
3391
3380
  };
3392
3381
 
3393
3382
  const moduleType$3 = "substrate-foreignassets";
3383
+ const UNSUPPORTED_CHAIN_META$2 = {
3384
+ miniMetadata: null,
3385
+ extra: null
3386
+ };
3394
3387
  const SubForeignAssetsModule = hydrate => {
3395
3388
  const {
3396
3389
  chainConnectors,
@@ -3401,9 +3394,9 @@ const SubForeignAssetsModule = hydrate => {
3401
3394
  return {
3402
3395
  ...DefaultBalanceModule(moduleType$3),
3403
3396
  async fetchSubstrateChainMeta(chainId, moduleConfig, metadataRpc) {
3404
- if (metadataRpc === undefined) return {};
3397
+ if (metadataRpc === undefined) return UNSUPPORTED_CHAIN_META$2;
3405
3398
  const metadataVersion = scale.getMetadataVersion(metadataRpc);
3406
- if (metadataVersion < 14) return {};
3399
+ if (metadataVersion < 14) return UNSUPPORTED_CHAIN_META$2;
3407
3400
  const metadata = scale.decAnyMetadata(metadataRpc);
3408
3401
  scale.compactMetadata(metadata, [{
3409
3402
  pallet: "ForeignAssets",
@@ -3411,7 +3404,8 @@ const SubForeignAssetsModule = hydrate => {
3411
3404
  }]);
3412
3405
  const miniMetadata = scale.encodeMetadata(metadata);
3413
3406
  return {
3414
- miniMetadata
3407
+ miniMetadata,
3408
+ extra: null
3415
3409
  };
3416
3410
  },
3417
3411
  async fetchSubstrateChainTokens(chainId, chainMeta, moduleConfig) {
@@ -3655,6 +3649,16 @@ async function buildQueries$2(chainConnector, chaindataProvider$1, addressesByTo
3655
3649
  }))).flat();
3656
3650
  }
3657
3651
 
3652
+ const getAddresssesByTokenByNetwork = addressesByToken => {
3653
+ const addressesByTokenByNetwork = lodash.toPairs(addressesByToken).reduce((acc, [tokenId, addresses]) => {
3654
+ const networkId = chaindataProvider.parseTokenId(tokenId).networkId;
3655
+ if (!acc[networkId]) acc[networkId] = {};
3656
+ acc[networkId][tokenId] = addresses;
3657
+ return acc;
3658
+ }, {});
3659
+ return addressesByTokenByNetwork;
3660
+ };
3661
+
3658
3662
  async function subscribeBase(queries, chainConnector, callback) {
3659
3663
  const unsubscribe = await new RpcStateQueryHelper(chainConnector, queries).subscribe((error, result) => {
3660
3664
  if (error) callback(error);
@@ -3681,16 +3685,21 @@ const asObservable = handler => (...args) => new rxjs.Observable(subscriber => {
3681
3685
  */
3682
3686
  const crowdloanFundContributionsChildKey = fundIndex => util$1.u8aToHex(util$1.u8aConcat(":child_storage:default:", utilCrypto.blake2AsU8a(util$1.u8aConcat("crowdloan", scaleTs.u32.enc(fundIndex)))));
3683
3687
 
3684
- async function subscribeCrowdloans(chaindataProvider, chainConnector, addressesByToken, callback) {
3685
- const allChains = await chaindataProvider.chainsById();
3686
- const tokens = await chaindataProvider.tokensById();
3687
- const miniMetadatas = new Map((await db.miniMetadatas.toArray()).map(miniMetadata => [miniMetadata.id, miniMetadata]));
3688
+ // TODO make this method chain-specific
3689
+ async function subscribeCrowdloans(chaindataProvider$1, chainConnector, addressesByToken, callback, signal) {
3690
+ const allChains = await chaindataProvider$1.chainsById();
3691
+ const tokens = await chaindataProvider$1.tokensById();
3692
+
3693
+ // there should be only one network here when subscribing to balances, we've split it up by network at the top level
3694
+ const networkIds = lodash.keys(addressesByToken).map(tokenId => chaindataProvider.parseTokenId(tokenId).networkId);
3695
+ const miniMetadatas = new Map();
3696
+ for (const networkId of networkIds) miniMetadatas.set(networkId, await getMiniMetadata(chaindataProvider$1, chainConnector, networkId, "substrate-native"));
3688
3697
  const crowdloanTokenIds = Object.entries(tokens).filter(([, token]) => {
3689
3698
  // ignore non-native tokens
3690
3699
  if (token.type !== "substrate-native") return;
3691
3700
  // ignore tokens on chains with no crowdloans pallet
3692
- const [chainMeta] = findChainMeta(miniMetadatas, "substrate-native", allChains[token.networkId]);
3693
- return typeof chainMeta?.crowdloanPalletId === "string";
3701
+ const miniMetadata = miniMetadatas.get(token.networkId);
3702
+ return typeof miniMetadata?.extra?.crowdloanPalletId === "string";
3694
3703
  }).map(([tokenId]) => tokenId);
3695
3704
 
3696
3705
  // crowdloan contributions can only be done by the native token on chains with the crowdloan pallet
@@ -3705,7 +3714,6 @@ async function subscribeCrowdloans(chaindataProvider, chainConnector, addressesB
3705
3714
  chainIds: uniqueChainIds,
3706
3715
  chains,
3707
3716
  miniMetadatas,
3708
- moduleType: "substrate-native",
3709
3717
  coders: {
3710
3718
  parachains: ["Paras", "Parachains"],
3711
3719
  funds: ["Crowdloan", "Funds"]
@@ -3948,16 +3956,25 @@ const nompoolAccountId = (palletId, poolId, index) => {
3948
3956
  /** The stash account for the nomination pool */
3949
3957
  const nompoolStashAccountId = (palletId, poolId) => nompoolAccountId(palletId, poolId, 0);
3950
3958
 
3951
- async function subscribeNompoolStaking(chaindataProvider, chainConnector, addressesByToken, callback) {
3952
- const allChains = await chaindataProvider.chainsById();
3953
- const tokens = await chaindataProvider.tokensById();
3954
- const miniMetadatas = new Map((await db.miniMetadatas.toArray()).map(miniMetadata => [miniMetadata.id, miniMetadata]));
3959
+ // TODO make this method chain-specific
3960
+ async function subscribeNompoolStaking(chaindataProvider$1, chainConnector, addressesByToken, callback, signal) {
3961
+ const allChains = await chaindataProvider$1.chainsById();
3962
+ const tokens = await chaindataProvider$1.tokensById();
3963
+
3964
+ // there should be only one network here when subscribing to balances, we've split it up by network at the top level
3965
+ const networkIds = lodash.keys(addressesByToken).map(tokenId => chaindataProvider.parseTokenId(tokenId).networkId);
3966
+ const miniMetadatas = new Map();
3967
+ for (const networkId of networkIds) {
3968
+ const miniMetadata = await getMiniMetadata(chaindataProvider$1, chainConnector, networkId, "substrate-native");
3969
+ miniMetadatas.set(networkId, miniMetadata);
3970
+ }
3955
3971
  const nomPoolTokenIds = Object.entries(tokens).filter(([, token]) => {
3956
3972
  // ignore non-native tokens
3957
3973
  if (token.type !== "substrate-native") return false;
3974
+
3958
3975
  // ignore tokens on chains with no nompools pallet
3959
- const [chainMeta] = findChainMeta(miniMetadatas, "substrate-native", allChains[token.networkId]);
3960
- return typeof chainMeta?.nominationPoolsPalletId === "string";
3976
+ const miniMetadata = miniMetadatas.get(token.networkId);
3977
+ return typeof miniMetadata?.extra?.nominationPoolsPalletId === "string";
3961
3978
  }).map(([tokenId]) => tokenId);
3962
3979
 
3963
3980
  // staking can only be done by the native token on chains with the staking pallet
@@ -3972,7 +3989,6 @@ async function subscribeNompoolStaking(chaindataProvider, chainConnector, addres
3972
3989
  chainIds: uniqueChainIds,
3973
3990
  chains,
3974
3991
  miniMetadatas,
3975
- moduleType: "substrate-native",
3976
3992
  coders: {
3977
3993
  poolMembers: ["NominationPools", "PoolMembers"],
3978
3994
  bondedPools: ["NominationPools", "BondedPools"],
@@ -4001,10 +4017,10 @@ async function subscribeNompoolStaking(chaindataProvider, chainConnector, addres
4001
4017
  log.warn(`Chain ${chainId} for token ${tokenId} not found`);
4002
4018
  continue;
4003
4019
  }
4004
- const [chainMeta] = findChainMeta(miniMetadatas, "substrate-native", chain);
4020
+ const miniMetadata = miniMetadatas.get(chainId);
4005
4021
  const {
4006
4022
  nominationPoolsPalletId
4007
- } = chainMeta ?? {};
4023
+ } = miniMetadata?.extra ?? {};
4008
4024
  const subscribePoolMembers = (addresses, callback) => {
4009
4025
  const scaleCoder = chainStorageCoders.get(chainId)?.poolMembers;
4010
4026
  const queries = addresses.flatMap(address => {
@@ -4260,16 +4276,24 @@ const calculateTaoFromDynamicInfo = ({
4260
4276
  });
4261
4277
  };
4262
4278
 
4263
- async function subscribeSubtensorStaking(chaindataProvider, chainConnector, addressesByToken, callback) {
4264
- const allChains = await chaindataProvider.chainsById();
4265
- const tokens = await chaindataProvider.tokensById();
4266
- const miniMetadatas = new Map((await db.miniMetadatas.toArray()).map(miniMetadata => [miniMetadata.id, miniMetadata]));
4279
+ // TODO make this method chain-specific
4280
+ async function subscribeSubtensorStaking(chaindataProvider$1, chainConnector, addressesByToken, callback, signal) {
4281
+ const allChains = await chaindataProvider$1.chainsById();
4282
+ const tokens = await chaindataProvider$1.tokensById();
4283
+
4284
+ // there should be only one network here when subscribing to balances, we've split it up by network at the top level
4285
+ const networkIds = lodash.keys(addressesByToken).map(tokenId => chaindataProvider.parseTokenId(tokenId).networkId);
4286
+ const miniMetadatas = new Map();
4287
+ for (const networkId of networkIds) {
4288
+ const miniMetadata = await getMiniMetadata(chaindataProvider$1, chainConnector, networkId, "substrate-native");
4289
+ miniMetadatas.set(networkId, miniMetadata);
4290
+ }
4267
4291
  const subtensorTokenIds = Object.entries(tokens).filter(([, token]) => {
4268
4292
  // ignore non-native tokens
4269
4293
  if (token.type !== "substrate-native") return false;
4270
4294
  // ignore tokens on chains with no subtensor pallet
4271
- const [chainMeta] = findChainMeta(miniMetadatas, "substrate-native", allChains[token.networkId]);
4272
- return chainMeta?.hasSubtensorPallet === true;
4295
+ const miniMetadata = miniMetadatas.get(token.networkId);
4296
+ return miniMetadata?.extra?.hasSubtensorPallet === true;
4273
4297
  }).map(([tokenId]) => tokenId);
4274
4298
 
4275
4299
  // staking can only be done by the native token on chains with the subtensor pallet
@@ -4292,17 +4316,13 @@ async function subscribeSubtensorStaking(chaindataProvider, chainConnector, addr
4292
4316
  continue;
4293
4317
  }
4294
4318
  const chainId = token.networkId;
4295
- if (!chainId) {
4296
- log.warn(`Token ${tokenId} has no chain`);
4297
- continue;
4298
- }
4299
4319
  const chain = chains[chainId];
4300
4320
  if (!chain) {
4301
4321
  log.warn(`Chain ${chainId} for token ${tokenId} not found`);
4302
4322
  continue;
4303
4323
  }
4304
- const [chainMeta] = findChainMeta(miniMetadatas, "substrate-native", chain);
4305
- if (!chainMeta?.miniMetadata) {
4324
+ const miniMetadata = miniMetadatas.get(token.networkId);
4325
+ if (!miniMetadata?.data) {
4306
4326
  log.warn(`MiniMetadata for chain ${chainId} not found`);
4307
4327
  continue;
4308
4328
  }
@@ -4312,7 +4332,7 @@ async function subscribeSubtensorStaking(chaindataProvider, chainConnector, addr
4312
4332
  expectErrors: true
4313
4333
  } // don't pollute the wallet logs when this request fails
4314
4334
  )
4315
- }, chainMeta.miniMetadata, token, chain.hasCheckMetadataHash, chain.signedExtensions, chain.registryTypes);
4335
+ }, miniMetadata.data, token, chain.hasCheckMetadataHash, chain.signedExtensions, chain.registryTypes);
4316
4336
 
4317
4337
  // sets the number of addresses to query in parallel (per chain, since each chain runs in parallel to the others)
4318
4338
  const concurrency = 4;
@@ -4559,9 +4579,6 @@ const getLockTitle = (lock, {
4559
4579
 
4560
4580
  const moduleType$2 = "substrate-native";
4561
4581
 
4562
- // export const subNativeTokenId = (chainId: ChainId) =>
4563
- // `${chainId}-substrate-native`.toLowerCase().replace(/ /g, "-")
4564
-
4565
4582
  /**
4566
4583
  * Function to merge two 'sub sources' of the same balance together, or
4567
4584
  * two instances of the same balance with different values.
@@ -4648,10 +4665,10 @@ async function buildQueries$1(chains, tokens, chainStorageCoders, miniMetadatas,
4648
4665
  log.warn(`Chain ${chainId} for token ${tokenId} not found`);
4649
4666
  return outerResult;
4650
4667
  }
4651
- const [chainMeta] = findChainMeta(miniMetadatas, "substrate-native", chain);
4668
+ const miniMetadata = miniMetadatas.get(chainId);
4652
4669
  const {
4653
4670
  useLegacyTransferableCalculation
4654
- } = chainMeta ?? {};
4671
+ } = miniMetadata?.extra ?? {};
4655
4672
  addresses.flat().forEach(address => {
4656
4673
  const queryKey = `${tokenId}-${address}`;
4657
4674
  // We share this balanceJson between the base and the lock query for this address
@@ -4931,73 +4948,19 @@ const updateStakingLocksUsingUnbondingLocks = values => {
4931
4948
  return [...otherValues, ...stakingLocks];
4932
4949
  };
4933
4950
 
4934
- const detectMiniMetadataChanges = () => {
4935
- let previousMap = null;
4936
- return rxjs.pipe(rxjs.map(currMap => {
4937
- if (!currMap) return null;
4938
- const changes = new Set();
4939
- if (previousMap) {
4940
- // Check for added or changed keys/values
4941
- for (const [key, value] of currMap) {
4942
- if (!previousMap.has(key) || !isEqual__default.default(previousMap.get(key), value)) {
4943
- changes.add(value.chainId);
4944
- }
4945
- }
4946
-
4947
- // Check for removed keys
4948
- for (const [key, value] of previousMap) {
4949
- if (!currMap.has(key)) {
4950
- changes.add(value.chainId);
4951
- }
4952
- }
4953
- }
4954
- previousMap = currMap;
4955
- return changes.size > 0 ? changes : null;
4956
- }),
4957
- // Filter out null emissions (no changes)
4958
- rxjs.filter(changes => changes !== null));
4959
- };
4960
-
4961
- // NOTE: `liveQuery` is not initialized until commonMetadataObservable is subscribed to.
4962
- const commonMetadataObservable = rxjs.from(dexie.liveQuery(() => db.miniMetadatas.where("source").equals("substrate-native").toArray())).pipe(rxjs.map(items => new Map(items.map(item => [item.id, item]))),
4963
- // `refCount: true` will unsubscribe from the DB when commonMetadataObservable has no more subscribers
4964
- rxjs.shareReplay({
4965
- bufferSize: 1,
4966
- refCount: true
4967
- }));
4968
4951
  class QueryCache {
4952
+ #chaindataProvider;
4953
+ #chainConnector;
4954
+ miniMetadatas = new Map();
4969
4955
  balanceQueryCache = new Map();
4970
- metadataSub = null;
4971
- constructor(chaindataProvider) {
4956
+ // private metadataSub: Subscription | null = null
4957
+
4958
+ constructor(chaindataProvider, chainConnector) {
4972
4959
  this.chaindataProvider = chaindataProvider;
4973
- }
4974
- ensureSetup() {
4975
- if (this.metadataSub) return;
4976
- this.metadataSub = commonMetadataObservable.pipe(util.firstThenDebounce(500), detectMiniMetadataChanges(), rxjs.combineLatestWith(this.chaindataProvider.tokensObservable), rxjs.distinctUntilChanged()).subscribe(([miniMetadataChanges, tokens]) => {
4977
- // invalidate cache entries for any chains with new metadata
4978
- const tokensByChainId = tokens.filter(token => token.type === "substrate-native").reduce((result, token) => {
4979
- if (!token.networkId) return result;
4980
- result[token.networkId] ? result[token.networkId].push(token) : result[token.networkId] = [token];
4981
- return result;
4982
- }, {});
4983
- miniMetadataChanges.forEach(chainId => {
4984
- const chainTokens = tokensByChainId[chainId];
4985
- if (!chainTokens) return;
4986
- chainTokens.forEach(token => {
4987
- const tokenId = token.id;
4988
- const cacheKeys = this.balanceQueryCache.keys();
4989
- for (const key of cacheKeys) {
4990
- if (key.startsWith(`${tokenId}-`)) this.balanceQueryCache.delete(key);
4991
- }
4992
- });
4993
- });
4994
- });
4995
- }
4996
- destroy() {
4997
- this.metadataSub?.unsubscribe();
4960
+ this.#chaindataProvider = chaindataProvider;
4961
+ this.#chainConnector = chainConnector;
4998
4962
  }
4999
4963
  async getQueries(addressesByToken) {
5000
- this.ensureSetup();
5001
4964
  const chains = await this.chaindataProvider.chainsById();
5002
4965
  const tokens = await this.chaindataProvider.tokensById();
5003
4966
  const queryResults = Object.entries(addressesByToken).reduce((result, [tokenId, addresses]) => {
@@ -5015,15 +4978,20 @@ class QueryCache {
5015
4978
  existing: [],
5016
4979
  newAddressesByToken: {}
5017
4980
  });
4981
+ const byNetwork = getAddresssesByTokenByNetwork(addressesByToken);
4982
+ for (const networkId of lodash.keys(byNetwork)) {
4983
+ if (this.miniMetadatas.has(networkId)) continue;
4984
+ const miniMetadata = await getMiniMetadata(this.#chaindataProvider, this.#chainConnector, networkId, "substrate-native");
4985
+ this.miniMetadatas.set(networkId, miniMetadata);
4986
+ }
5018
4987
 
5019
4988
  // build queries for token/address pairs which have not been queried before
5020
- const miniMetadatas = await rxjs.firstValueFrom(commonMetadataObservable);
5021
- const uniqueChainIds = getUniqueChainIds(queryResults.newAddressesByToken, tokens);
4989
+ // const miniMetadatas = await firstValueFrom(commonMetadataObservable)
4990
+ const uniqueChainIds = lodash.keys(byNetwork); // getUniqueChainIds(queryResults.newAddressesByToken, tokens)
5022
4991
  const chainStorageCoders = buildStorageCoders({
5023
4992
  chainIds: uniqueChainIds,
5024
4993
  chains,
5025
- miniMetadatas,
5026
- moduleType: "substrate-native",
4994
+ miniMetadatas: this.miniMetadatas,
5027
4995
  coders: {
5028
4996
  base: ["System", "Account"],
5029
4997
  stakingLedger: ["Staking", "Ledger"],
@@ -5033,7 +5001,7 @@ class QueryCache {
5033
5001
  freezes: ["Balances", "Freezes"]
5034
5002
  }
5035
5003
  });
5036
- const queries = await buildQueries$1(chains, tokens, chainStorageCoders, miniMetadatas, queryResults.newAddressesByToken);
5004
+ const queries = await buildQueries$1(chains, tokens, chainStorageCoders, this.miniMetadatas, queryResults.newAddressesByToken);
5037
5005
  // now update the cache
5038
5006
  Object.entries(queries).forEach(([key, query]) => {
5039
5007
  this.balanceQueryCache.set(key, query);
@@ -5084,6 +5052,10 @@ const getChainProperties = async (chainConnector, networkId) => {
5084
5052
 
5085
5053
  const POLLING_WINDOW_SIZE = 20;
5086
5054
  const MAX_SUBSCRIPTION_SIZE = 40;
5055
+ const UNSUPPORTED_CHAIN_META$1 = {
5056
+ miniMetadata: null,
5057
+ extra: null
5058
+ };
5087
5059
  const SubNativeModule = hydrate => {
5088
5060
  const {
5089
5061
  chainConnectors,
@@ -5091,7 +5063,7 @@ const SubNativeModule = hydrate => {
5091
5063
  } = hydrate;
5092
5064
  const chainConnector$1 = chainConnectors.substrate;
5093
5065
  util$1.assert(chainConnector$1, "This module requires a substrate chain connector");
5094
- const queryCache = new QueryCache(chaindataProvider$1);
5066
+ const queryCache = new QueryCache(chaindataProvider$1, chainConnector$1);
5095
5067
  const getModuleTokens = async () => {
5096
5068
  return await chaindataProvider$1.tokensByIdForType(moduleType$2);
5097
5069
  };
@@ -5269,13 +5241,13 @@ const SubNativeModule = hydrate => {
5269
5241
  return {
5270
5242
  ...DefaultBalanceModule(moduleType$2),
5271
5243
  async fetchSubstrateChainMeta(chainId, moduleConfig, metadataRpc) {
5272
- if (!metadataRpc) return {};
5244
+ if (!metadataRpc) return UNSUPPORTED_CHAIN_META$1;
5273
5245
 
5274
5246
  //
5275
5247
  // process metadata into SCALE encoders/decoders
5276
5248
  //
5277
5249
  const metadataVersion = scale.getMetadataVersion(metadataRpc);
5278
- if (metadataVersion < 14) return {};
5250
+ if (metadataVersion < 14) return UNSUPPORTED_CHAIN_META$1;
5279
5251
  const metadata = scale.decAnyMetadata(metadataRpc);
5280
5252
  const unifiedMetadata = scale.unifyMetadata(metadata);
5281
5253
 
@@ -5342,18 +5314,17 @@ const SubNativeModule = hydrate => {
5342
5314
  }) => name === "Freezes"));
5343
5315
  const useLegacyTransferableCalculation = !hasFreezesItem;
5344
5316
  const chainMeta = {
5345
- // isTestnet,
5346
- useLegacyTransferableCalculation,
5347
- // symbol,
5348
- // decimals,
5349
- existentialDeposit,
5350
- nominationPoolsPalletId,
5351
- crowdloanPalletId,
5352
- hasSubtensorPallet,
5353
- miniMetadata
5317
+ miniMetadata,
5318
+ extra: {
5319
+ useLegacyTransferableCalculation,
5320
+ existentialDeposit,
5321
+ nominationPoolsPalletId,
5322
+ crowdloanPalletId,
5323
+ hasSubtensorPallet
5324
+ }
5354
5325
  };
5355
- if (!useLegacyTransferableCalculation) delete chainMeta.useLegacyTransferableCalculation;
5356
- if (!hasSubtensorPallet) delete chainMeta.hasSubtensorPallet;
5326
+ if (!useLegacyTransferableCalculation) delete chainMeta.extra?.useLegacyTransferableCalculation;
5327
+ if (!hasSubtensorPallet) delete chainMeta.extra?.hasSubtensorPallet;
5357
5328
  return chainMeta;
5358
5329
  },
5359
5330
  async fetchSubstrateChainTokens(chainId, chainMeta, moduleConfig) {
@@ -5364,7 +5335,7 @@ const SubNativeModule = hydrate => {
5364
5335
  } = await getChainProperties(chainConnector$1, chainId);
5365
5336
  const {
5366
5337
  existentialDeposit
5367
- } = chainMeta;
5338
+ } = chainMeta.extra ?? {};
5368
5339
  const id = chaindataProvider.subNativeTokenId(chainId);
5369
5340
  const nativeToken = {
5370
5341
  id,
@@ -5390,19 +5361,11 @@ const SubNativeModule = hydrate => {
5390
5361
  initialBalances
5391
5362
  }, callback) {
5392
5363
  util$1.assert(chainConnectors.substrate, "This module requires a substrate chain connector");
5393
- const addressesByTokenByNetwork = lodash.keys(addressesByToken).reduce((acc, tokenId) => {
5394
- const networkId = chaindataProvider.parseSubNativeTokenId(tokenId).networkId;
5395
- if (!acc[networkId]) acc[networkId] = {};
5396
- acc[networkId][tokenId] = addressesByToken[tokenId];
5397
- return acc;
5398
- }, {});
5364
+ const addressesByTokenByNetwork = getAddresssesByTokenByNetwork(addressesByToken);
5399
5365
  const initialBalancesByNetwork = lodash.groupBy(initialBalances ?? [], "networkId");
5400
- const {
5401
- abort,
5402
- signal
5403
- } = new AbortController();
5366
+ const controller = new AbortController();
5404
5367
  const safeCallback = (error, result) => {
5405
- if (signal.aborted) return;
5368
+ if (controller.signal.aborted) return;
5406
5369
  // typescript isnt happy with fowarding parameters as is
5407
5370
  return error ? callback(error, undefined) : callback(error, result);
5408
5371
  };
@@ -5410,19 +5373,19 @@ const SubNativeModule = hydrate => {
5410
5373
  try {
5411
5374
  // this is what we want to be done separately for each network
5412
5375
  // this will update the DB so minimetadata will be available when it's used, veeeeery far down the tree of subscribeChainBalances
5413
- await getMiniMetadata(chaindataProvider$1, chainConnector$1, networkId, moduleType$2, signal);
5376
+ await getMiniMetadata(chaindataProvider$1, chainConnector$1, networkId, moduleType$2, controller.signal);
5414
5377
  } catch (err) {
5415
- if (!signal.aborted) log.warn("Failed to get native token miniMetadata for network", networkId, err);
5378
+ if (!controller.signal.aborted) log.warn("Failed to get native token miniMetadata for network", networkId, err);
5416
5379
  return () => {};
5417
5380
  }
5418
- if (signal.aborted) return () => {};
5381
+ if (controller.signal.aborted) return () => {};
5419
5382
  return subscribeChainBalances(networkId, {
5420
5383
  addressesByToken: addressesByTokenByNetwork[networkId] ?? {},
5421
5384
  initialBalances: initialBalancesByNetwork[networkId] ?? []
5422
5385
  }, safeCallback);
5423
5386
  }));
5424
5387
  return () => {
5425
- abort();
5388
+ controller.abort();
5426
5389
  unsubsribeFns.then(fns => fns.forEach(unsubscribe => unsubscribe()));
5427
5390
  };
5428
5391
  },
@@ -6651,7 +6614,11 @@ const SubPsp22Module = hydrate => {
6651
6614
  return {
6652
6615
  ...DefaultBalanceModule(moduleType$1),
6653
6616
  async fetchSubstrateChainMeta(_chainId) {
6654
- return undefined;
6617
+ // we dont need anything
6618
+ return {
6619
+ miniMetadata: null,
6620
+ extra: null
6621
+ };
6655
6622
  },
6656
6623
  async fetchSubstrateChainTokens(chainId, _chainMeta, moduleConfig) {
6657
6624
  // const { isTestnet } = chainMeta
@@ -6885,6 +6852,10 @@ const fetchBalances = async (chainConnector, tokens, addressesByToken) => {
6885
6852
 
6886
6853
  const moduleType = "substrate-tokens";
6887
6854
  const defaultPalletId = "Tokens";
6855
+ const UNSUPPORTED_CHAIN_META = {
6856
+ miniMetadata: null,
6857
+ extra: {}
6858
+ };
6888
6859
  const SubTokensModule = hydrate => {
6889
6860
  const {
6890
6861
  chainConnectors,
@@ -6895,7 +6866,7 @@ const SubTokensModule = hydrate => {
6895
6866
  return {
6896
6867
  ...DefaultBalanceModule(moduleType),
6897
6868
  async fetchSubstrateChainMeta(chainId, moduleConfig, metadataRpc) {
6898
- if (metadataRpc === undefined) return {};
6869
+ if (metadataRpc === undefined) return UNSUPPORTED_CHAIN_META;
6899
6870
  const metadata = scale.decAnyMetadata(metadataRpc);
6900
6871
  const palletId = moduleConfig?.palletId ?? defaultPalletId;
6901
6872
  scale.compactMetadata(metadata, [{
@@ -6903,11 +6874,11 @@ const SubTokensModule = hydrate => {
6903
6874
  items: ["Accounts"]
6904
6875
  }]);
6905
6876
  const miniMetadata = scale.encodeMetadata(metadata);
6906
- return palletId === defaultPalletId ? {
6907
- miniMetadata
6908
- } : {
6909
- palletId,
6910
- miniMetadata
6877
+ return {
6878
+ miniMetadata,
6879
+ extra: {
6880
+ palletId
6881
+ }
6911
6882
  };
6912
6883
  },
6913
6884
  async fetchSubstrateChainTokens(chainId, chainMeta, moduleConfig) {
@@ -6997,9 +6968,8 @@ const SubTokensModule = hydrate => {
6997
6968
  const chainId = token.networkId;
6998
6969
  const chain = await chaindataProvider$1.chainById(chainId);
6999
6970
  util$1.assert(chain?.genesisHash, `Chain ${chainId} not found in store`);
7000
- const miniMetadatas = new Map((await db.miniMetadatas.toArray()).map(miniMetadata => [miniMetadata.id, miniMetadata]));
7001
- const [chainMeta] = findChainMeta(miniMetadatas, moduleType, chain);
7002
- const tokensPallet = chainMeta?.palletId ?? defaultPalletId;
6971
+ const miniMetadata = await getMiniMetadata(chaindataProvider$1, chainConnector, chainId, moduleType);
6972
+ const tokensPallet = miniMetadata?.extra?.palletId ?? defaultPalletId;
7003
6973
  const onChainId = (() => {
7004
6974
  try {
7005
6975
  return scale.papiParse(token.onChainId);
@@ -7104,8 +7074,7 @@ async function buildNetworkQueries(networkId, chainConnector, chaindataProvider,
7104
7074
  const tokens = await chaindataProvider.tokensById();
7105
7075
  if (!chain) return [];
7106
7076
  signal?.throwIfAborted();
7107
- const tokensMetadata = miniMetadata;
7108
- const palletId = tokensMetadata.palletId ?? defaultPalletId;
7077
+ const palletId = miniMetadata.extra.palletId ?? defaultPalletId;
7109
7078
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
7110
7079
  storage: [palletId, "Accounts"]
7111
7080
  });
@@ -7196,6 +7165,7 @@ exports.EvmNativeModule = EvmNativeModule;
7196
7165
  exports.EvmTokenFetcher = EvmTokenFetcher;
7197
7166
  exports.EvmUniswapV2Module = EvmUniswapV2Module;
7198
7167
  exports.FiatSumBalancesFormatter = FiatSumBalancesFormatter;
7168
+ exports.MiniMetadataBaseSchema = MiniMetadataBaseSchema;
7199
7169
  exports.ONE_ALPHA_TOKEN = ONE_ALPHA_TOKEN;
7200
7170
  exports.PlanckSumBalancesFormatter = PlanckSumBalancesFormatter;
7201
7171
  exports.RpcStateQueryHelper = RpcStateQueryHelper;
@@ -7230,7 +7200,6 @@ exports.excludeFromFeePayableLocks = excludeFromFeePayableLocks;
7230
7200
  exports.excludeFromTransferableAmount = excludeFromTransferableAmount;
7231
7201
  exports.filterBaseLocks = filterBaseLocks;
7232
7202
  exports.filterMirrorTokens = filterMirrorTokens;
7233
- exports.findChainMeta = findChainMeta;
7234
7203
  exports.getBalanceId = getBalanceId;
7235
7204
  exports.getLockTitle = getLockTitle;
7236
7205
  exports.getUniqueChainIds = getUniqueChainIds;