@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.d.mts +341 -31
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +356 -46
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +90 -56
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +89 -58
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -9
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
|
|
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
|
-
|
|
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
|
|
2594
|
-
|
|
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 = (
|
|
2601
|
-
const { unifiedMetadata, builder } = (
|
|
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
|
|
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(
|
|
3669
|
+
data: getData$4(parsed),
|
|
3667
3670
|
extra: null
|
|
3668
3671
|
};
|
|
3669
3672
|
};
|
|
3670
|
-
const getData$4 = (
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
4835
|
+
data: getData$2(parsed),
|
|
4854
4836
|
extra: null
|
|
4855
4837
|
};
|
|
4856
4838
|
};
|
|
4857
|
-
const getData$2 = (
|
|
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
|
|
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(
|
|
5616
|
-
const nominationPoolsPalletIdHex = tryGetConstantValue(
|
|
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;
|