@talismn/balances 0.0.0-pr2043-20250619003406 → 0.0.0-pr2043-20250619043542
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.
@@ -10,7 +10,7 @@ export type SubPsp22ModuleConfig = {
|
|
10
10
|
symbol?: string;
|
11
11
|
decimals?: number;
|
12
12
|
ed?: string;
|
13
|
-
contractAddress
|
13
|
+
contractAddress: string;
|
14
14
|
} & BalancesConfigTokenParams>;
|
15
15
|
};
|
16
16
|
export type SubPsp22Balance = NewBalanceType<ModuleType, "simple">;
|
@@ -126,7 +126,7 @@ class EvmTokenFetcher {
|
|
126
126
|
|
127
127
|
var pkg = {
|
128
128
|
name: "@talismn/balances",
|
129
|
-
version: "0.0.0-pr2043-
|
129
|
+
version: "0.0.0-pr2043-20250619043542"};
|
130
130
|
|
131
131
|
var log = anylogger__default.default(pkg.name);
|
132
132
|
|
@@ -406,28 +406,6 @@ class Balance {
|
|
406
406
|
get address() {
|
407
407
|
return this.#storage.address;
|
408
408
|
}
|
409
|
-
|
410
|
-
// /** @deprecated */
|
411
|
-
// get chainId() {
|
412
|
-
// return isBalanceEvm(this.#storage) ? undefined : this.#storage.chainId
|
413
|
-
// }
|
414
|
-
// /** @deprecated */
|
415
|
-
// get chain() {
|
416
|
-
// return (this.#db?.networks && this.networkId && this.#db?.networks[this.networkId]) || null
|
417
|
-
// }
|
418
|
-
|
419
|
-
// /** @deprecated */
|
420
|
-
// get evmNetworkId() {
|
421
|
-
// return isBalanceEvm(this.#storage) ? this.#storage.evmNetworkId : undefined
|
422
|
-
// }
|
423
|
-
// /** @deprecated */
|
424
|
-
// get evmNetwork() {
|
425
|
-
// return (
|
426
|
-
// (this.#db?.networks && this.networkId && this.#db?.networks[this.networkId]) ||
|
427
|
-
// null
|
428
|
-
// )
|
429
|
-
// }
|
430
|
-
|
431
409
|
get networkId() {
|
432
410
|
return this.#storage.networkId;
|
433
411
|
}
|
@@ -3219,7 +3197,7 @@ const SubAssetsModule = hydrate => {
|
|
3219
3197
|
const controller = new AbortController();
|
3220
3198
|
const pUnsubs = Promise.all(lodash.toPairs(byNetwork).map(async ([networkId, addressesByToken]) => {
|
3221
3199
|
try {
|
3222
|
-
const queries = await buildNetworkQueries$
|
3200
|
+
const queries = await buildNetworkQueries$2(networkId, chainConnector, chaindataProvider$1, addressesByToken, controller.signal);
|
3223
3201
|
if (controller.signal.aborted) return () => {};
|
3224
3202
|
const stateHelper = new RpcStateQueryHelper(chainConnector, queries);
|
3225
3203
|
return await stateHelper.subscribe((error, result) => {
|
@@ -3312,7 +3290,7 @@ const SubAssetsModule = hydrate => {
|
|
3312
3290
|
}
|
3313
3291
|
};
|
3314
3292
|
};
|
3315
|
-
async function buildNetworkQueries$
|
3293
|
+
async function buildNetworkQueries$2(networkId, chainConnector, chaindataProvider, addressesByToken, signal) {
|
3316
3294
|
const miniMetadata = await getMiniMetadata(chaindataProvider, chainConnector, networkId, moduleType$4, signal);
|
3317
3295
|
// console.log("Fetched miniMetadata for network", networkId, { miniMetadata })
|
3318
3296
|
const chain = await chaindataProvider.chainById(networkId);
|
@@ -3401,7 +3379,7 @@ async function buildQueries$3(chainConnector, chaindataProvider$1, addressesByTo
|
|
3401
3379
|
return acc;
|
3402
3380
|
}, {});
|
3403
3381
|
return (await Promise.all(lodash.toPairs(byNetwork).map(([networkId, addressesByToken]) => {
|
3404
|
-
return buildNetworkQueries$
|
3382
|
+
return buildNetworkQueries$2(networkId, chainConnector, chaindataProvider$1, addressesByToken, signal);
|
3405
3383
|
}))).flat();
|
3406
3384
|
}
|
3407
3385
|
// NOTE: Different chains need different formats for assetId when encoding the stateKey
|
@@ -3427,10 +3405,7 @@ const SubForeignAssetsModule = hydrate => {
|
|
3427
3405
|
return {
|
3428
3406
|
...DefaultBalanceModule(moduleType$3),
|
3429
3407
|
async fetchSubstrateChainMeta(chainId, moduleConfig, metadataRpc) {
|
3430
|
-
// const isTestnet = (await chaindataProvider.chainById(chainId))?.isTestnet || false
|
3431
3408
|
if (metadataRpc === undefined) return {};
|
3432
|
-
// if ((moduleConfig?.tokens ?? []).length < 1) return { isTestnet }
|
3433
|
-
|
3434
3409
|
const metadataVersion = scale.getMetadataVersion(metadataRpc);
|
3435
3410
|
if (metadataVersion < 14) return {};
|
3436
3411
|
const metadata = scale.decAnyMetadata(metadataRpc);
|
@@ -3449,9 +3424,6 @@ const SubForeignAssetsModule = hydrate => {
|
|
3449
3424
|
miniMetadata
|
3450
3425
|
} = chainMeta;
|
3451
3426
|
if (!miniMetadata) return {};
|
3452
|
-
// if (miniMetadata === undefined || metadataVersion === undefined) return {}
|
3453
|
-
// if (metadataVersion < 14) return {}
|
3454
|
-
|
3455
3427
|
const metadata = scale.decAnyMetadata(miniMetadata);
|
3456
3428
|
const unifiedMetadata = scale.unifyMetadata(metadata);
|
3457
3429
|
const scaleBuilder = scale.getDynamicBuilder(scale.getLookupFn(unifiedMetadata));
|
@@ -3505,17 +3477,38 @@ const SubForeignAssetsModule = hydrate => {
|
|
3505
3477
|
async subscribeBalances({
|
3506
3478
|
addressesByToken
|
3507
3479
|
}, callback) {
|
3508
|
-
const
|
3509
|
-
|
3510
|
-
if (
|
3511
|
-
|
3512
|
-
|
3513
|
-
});
|
3514
|
-
|
3480
|
+
const byNetwork = lodash.keys(addressesByToken).reduce((acc, tokenId) => {
|
3481
|
+
const networkId = chaindataProvider.parseSubForeignAssetTokenId(tokenId).networkId;
|
3482
|
+
if (!acc[networkId]) acc[networkId] = {};
|
3483
|
+
acc[networkId][tokenId] = addressesByToken[tokenId];
|
3484
|
+
return acc;
|
3485
|
+
}, {});
|
3486
|
+
const controller = new AbortController();
|
3487
|
+
const pUnsubs = Promise.all(lodash.toPairs(byNetwork).map(async ([networkId, addressesByToken]) => {
|
3488
|
+
try {
|
3489
|
+
const queries = await buildNetworkQueries$1(networkId, chainConnector, chaindataProvider$1, addressesByToken, controller.signal);
|
3490
|
+
if (controller.signal.aborted) return () => {};
|
3491
|
+
const stateHelper = new RpcStateQueryHelper(chainConnector, queries);
|
3492
|
+
return await stateHelper.subscribe((error, result) => {
|
3493
|
+
if (error) return callback(error);
|
3494
|
+
const balances = result?.filter(b => b !== null) ?? [];
|
3495
|
+
if (balances.length > 0) callback(null, new Balances(balances));
|
3496
|
+
});
|
3497
|
+
} catch (err) {
|
3498
|
+
if (!controller.signal.aborted) log.error(`Failed to subscribe ${moduleType$3} balances for network ${networkId}`, err);
|
3499
|
+
return () => {};
|
3500
|
+
}
|
3501
|
+
}));
|
3502
|
+
return () => {
|
3503
|
+
controller.abort();
|
3504
|
+
pUnsubs.then(unsubs => {
|
3505
|
+
unsubs.forEach(unsubscribe => unsubscribe());
|
3506
|
+
});
|
3507
|
+
};
|
3515
3508
|
},
|
3516
3509
|
async fetchBalances(addressesByToken) {
|
3517
3510
|
util$1.assert(chainConnectors.substrate, "This module requires a substrate chain connector");
|
3518
|
-
const queries = await buildQueries$2(chaindataProvider$1, addressesByToken);
|
3511
|
+
const queries = await buildQueries$2(chainConnector, chaindataProvider$1, addressesByToken);
|
3519
3512
|
const result = await new RpcStateQueryHelper(chainConnectors.substrate, queries).fetch();
|
3520
3513
|
const balances = result?.filter(b => b !== null) ?? [];
|
3521
3514
|
return new Balances(balances);
|
@@ -3571,23 +3564,16 @@ const SubForeignAssetsModule = hydrate => {
|
|
3571
3564
|
}
|
3572
3565
|
};
|
3573
3566
|
};
|
3574
|
-
async function
|
3575
|
-
const
|
3576
|
-
const
|
3577
|
-
const
|
3578
|
-
|
3579
|
-
const
|
3580
|
-
|
3581
|
-
chainIds: uniqueChainIds,
|
3582
|
-
chains,
|
3583
|
-
miniMetadatas,
|
3584
|
-
moduleType: "substrate-foreignassets",
|
3585
|
-
coders: {
|
3586
|
-
storage: ["ForeignAssets", "Account"]
|
3587
|
-
}
|
3567
|
+
async function buildNetworkQueries$1(networkId, chainConnector, chaindataProvider, addressesByToken, signal) {
|
3568
|
+
const miniMetadata = await getMiniMetadata(chaindataProvider, chainConnector, networkId, moduleType$3, signal);
|
3569
|
+
const chain = await chaindataProvider.chainById(networkId);
|
3570
|
+
const tokensById = await chaindataProvider.tokensById();
|
3571
|
+
signal?.throwIfAborted();
|
3572
|
+
const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
|
3573
|
+
storage: ["ForeignAssets", "Account"]
|
3588
3574
|
});
|
3589
3575
|
return Object.entries(addressesByToken).flatMap(([tokenId, addresses]) => {
|
3590
|
-
const token =
|
3576
|
+
const token = tokensById[tokenId];
|
3591
3577
|
if (!token) {
|
3592
3578
|
log.warn(`Token ${tokenId} not found`);
|
3593
3579
|
return [];
|
@@ -3596,18 +3582,12 @@ async function buildQueries$2(chaindataProvider, addressesByToken) {
|
|
3596
3582
|
log.debug(`This module doesn't handle tokens of type ${token.type}`);
|
3597
3583
|
return [];
|
3598
3584
|
}
|
3599
|
-
const networkId = token.networkId;
|
3600
|
-
if (!networkId) {
|
3601
|
-
log.warn(`Token ${tokenId} has no chain`);
|
3602
|
-
return [];
|
3603
|
-
}
|
3604
|
-
const chain = chains[networkId];
|
3605
3585
|
if (!chain) {
|
3606
3586
|
log.warn(`Chain ${networkId} for token ${tokenId} not found`);
|
3607
3587
|
return [];
|
3608
3588
|
}
|
3609
3589
|
return addresses.flatMap(address => {
|
3610
|
-
const scaleCoder =
|
3590
|
+
const scaleCoder = networkStorageCoders?.storage;
|
3611
3591
|
const onChainId = (() => {
|
3612
3592
|
try {
|
3613
3593
|
return scale.papiParse(token.onChainId);
|
@@ -3667,6 +3647,17 @@ async function buildQueries$2(chaindataProvider, addressesByToken) {
|
|
3667
3647
|
});
|
3668
3648
|
});
|
3669
3649
|
}
|
3650
|
+
async function buildQueries$2(chainConnector, chaindataProvider$1, addressesByToken, signal) {
|
3651
|
+
const byNetwork = lodash.keys(addressesByToken).reduce((acc, tokenId) => {
|
3652
|
+
const networkId = chaindataProvider.parseSubForeignAssetTokenId(tokenId).networkId;
|
3653
|
+
if (!acc[networkId]) acc[networkId] = {};
|
3654
|
+
acc[networkId][tokenId] = addressesByToken[tokenId];
|
3655
|
+
return acc;
|
3656
|
+
}, {});
|
3657
|
+
return (await Promise.all(lodash.toPairs(byNetwork).map(([networkId, addressesByToken]) => {
|
3658
|
+
return buildNetworkQueries$1(networkId, chainConnector, chaindataProvider$1, addressesByToken, signal);
|
3659
|
+
}))).flat();
|
3660
|
+
}
|
3670
3661
|
|
3671
3662
|
async function subscribeBase(queries, chainConnector, callback) {
|
3672
3663
|
const unsubscribe = await new RpcStateQueryHelper(chainConnector, queries).subscribe((error, result) => {
|
@@ -6664,8 +6655,6 @@ const SubPsp22Module = hydrate => {
|
|
6664
6655
|
return {
|
6665
6656
|
...DefaultBalanceModule(moduleType$1),
|
6666
6657
|
async fetchSubstrateChainMeta(_chainId) {
|
6667
|
-
// const isTestnet = (await chaindataProvider.chainById(chainId))?.isTestnet || false
|
6668
|
-
// return { isTestnet }
|
6669
6658
|
return undefined;
|
6670
6659
|
},
|
6671
6660
|
async fetchSubstrateChainTokens(chainId, _chainMeta, moduleConfig) {
|
@@ -126,7 +126,7 @@ class EvmTokenFetcher {
|
|
126
126
|
|
127
127
|
var pkg = {
|
128
128
|
name: "@talismn/balances",
|
129
|
-
version: "0.0.0-pr2043-
|
129
|
+
version: "0.0.0-pr2043-20250619043542"};
|
130
130
|
|
131
131
|
var log = anylogger__default.default(pkg.name);
|
132
132
|
|
@@ -406,28 +406,6 @@ class Balance {
|
|
406
406
|
get address() {
|
407
407
|
return this.#storage.address;
|
408
408
|
}
|
409
|
-
|
410
|
-
// /** @deprecated */
|
411
|
-
// get chainId() {
|
412
|
-
// return isBalanceEvm(this.#storage) ? undefined : this.#storage.chainId
|
413
|
-
// }
|
414
|
-
// /** @deprecated */
|
415
|
-
// get chain() {
|
416
|
-
// return (this.#db?.networks && this.networkId && this.#db?.networks[this.networkId]) || null
|
417
|
-
// }
|
418
|
-
|
419
|
-
// /** @deprecated */
|
420
|
-
// get evmNetworkId() {
|
421
|
-
// return isBalanceEvm(this.#storage) ? this.#storage.evmNetworkId : undefined
|
422
|
-
// }
|
423
|
-
// /** @deprecated */
|
424
|
-
// get evmNetwork() {
|
425
|
-
// return (
|
426
|
-
// (this.#db?.networks && this.networkId && this.#db?.networks[this.networkId]) ||
|
427
|
-
// null
|
428
|
-
// )
|
429
|
-
// }
|
430
|
-
|
431
409
|
get networkId() {
|
432
410
|
return this.#storage.networkId;
|
433
411
|
}
|
@@ -3219,7 +3197,7 @@ const SubAssetsModule = hydrate => {
|
|
3219
3197
|
const controller = new AbortController();
|
3220
3198
|
const pUnsubs = Promise.all(lodash.toPairs(byNetwork).map(async ([networkId, addressesByToken]) => {
|
3221
3199
|
try {
|
3222
|
-
const queries = await buildNetworkQueries$
|
3200
|
+
const queries = await buildNetworkQueries$2(networkId, chainConnector, chaindataProvider$1, addressesByToken, controller.signal);
|
3223
3201
|
if (controller.signal.aborted) return () => {};
|
3224
3202
|
const stateHelper = new RpcStateQueryHelper(chainConnector, queries);
|
3225
3203
|
return await stateHelper.subscribe((error, result) => {
|
@@ -3312,7 +3290,7 @@ const SubAssetsModule = hydrate => {
|
|
3312
3290
|
}
|
3313
3291
|
};
|
3314
3292
|
};
|
3315
|
-
async function buildNetworkQueries$
|
3293
|
+
async function buildNetworkQueries$2(networkId, chainConnector, chaindataProvider, addressesByToken, signal) {
|
3316
3294
|
const miniMetadata = await getMiniMetadata(chaindataProvider, chainConnector, networkId, moduleType$4, signal);
|
3317
3295
|
// console.log("Fetched miniMetadata for network", networkId, { miniMetadata })
|
3318
3296
|
const chain = await chaindataProvider.chainById(networkId);
|
@@ -3401,7 +3379,7 @@ async function buildQueries$3(chainConnector, chaindataProvider$1, addressesByTo
|
|
3401
3379
|
return acc;
|
3402
3380
|
}, {});
|
3403
3381
|
return (await Promise.all(lodash.toPairs(byNetwork).map(([networkId, addressesByToken]) => {
|
3404
|
-
return buildNetworkQueries$
|
3382
|
+
return buildNetworkQueries$2(networkId, chainConnector, chaindataProvider$1, addressesByToken, signal);
|
3405
3383
|
}))).flat();
|
3406
3384
|
}
|
3407
3385
|
// NOTE: Different chains need different formats for assetId when encoding the stateKey
|
@@ -3427,10 +3405,7 @@ const SubForeignAssetsModule = hydrate => {
|
|
3427
3405
|
return {
|
3428
3406
|
...DefaultBalanceModule(moduleType$3),
|
3429
3407
|
async fetchSubstrateChainMeta(chainId, moduleConfig, metadataRpc) {
|
3430
|
-
// const isTestnet = (await chaindataProvider.chainById(chainId))?.isTestnet || false
|
3431
3408
|
if (metadataRpc === undefined) return {};
|
3432
|
-
// if ((moduleConfig?.tokens ?? []).length < 1) return { isTestnet }
|
3433
|
-
|
3434
3409
|
const metadataVersion = scale.getMetadataVersion(metadataRpc);
|
3435
3410
|
if (metadataVersion < 14) return {};
|
3436
3411
|
const metadata = scale.decAnyMetadata(metadataRpc);
|
@@ -3449,9 +3424,6 @@ const SubForeignAssetsModule = hydrate => {
|
|
3449
3424
|
miniMetadata
|
3450
3425
|
} = chainMeta;
|
3451
3426
|
if (!miniMetadata) return {};
|
3452
|
-
// if (miniMetadata === undefined || metadataVersion === undefined) return {}
|
3453
|
-
// if (metadataVersion < 14) return {}
|
3454
|
-
|
3455
3427
|
const metadata = scale.decAnyMetadata(miniMetadata);
|
3456
3428
|
const unifiedMetadata = scale.unifyMetadata(metadata);
|
3457
3429
|
const scaleBuilder = scale.getDynamicBuilder(scale.getLookupFn(unifiedMetadata));
|
@@ -3505,17 +3477,38 @@ const SubForeignAssetsModule = hydrate => {
|
|
3505
3477
|
async subscribeBalances({
|
3506
3478
|
addressesByToken
|
3507
3479
|
}, callback) {
|
3508
|
-
const
|
3509
|
-
|
3510
|
-
if (
|
3511
|
-
|
3512
|
-
|
3513
|
-
});
|
3514
|
-
|
3480
|
+
const byNetwork = lodash.keys(addressesByToken).reduce((acc, tokenId) => {
|
3481
|
+
const networkId = chaindataProvider.parseSubForeignAssetTokenId(tokenId).networkId;
|
3482
|
+
if (!acc[networkId]) acc[networkId] = {};
|
3483
|
+
acc[networkId][tokenId] = addressesByToken[tokenId];
|
3484
|
+
return acc;
|
3485
|
+
}, {});
|
3486
|
+
const controller = new AbortController();
|
3487
|
+
const pUnsubs = Promise.all(lodash.toPairs(byNetwork).map(async ([networkId, addressesByToken]) => {
|
3488
|
+
try {
|
3489
|
+
const queries = await buildNetworkQueries$1(networkId, chainConnector, chaindataProvider$1, addressesByToken, controller.signal);
|
3490
|
+
if (controller.signal.aborted) return () => {};
|
3491
|
+
const stateHelper = new RpcStateQueryHelper(chainConnector, queries);
|
3492
|
+
return await stateHelper.subscribe((error, result) => {
|
3493
|
+
if (error) return callback(error);
|
3494
|
+
const balances = result?.filter(b => b !== null) ?? [];
|
3495
|
+
if (balances.length > 0) callback(null, new Balances(balances));
|
3496
|
+
});
|
3497
|
+
} catch (err) {
|
3498
|
+
if (!controller.signal.aborted) log.error(`Failed to subscribe ${moduleType$3} balances for network ${networkId}`, err);
|
3499
|
+
return () => {};
|
3500
|
+
}
|
3501
|
+
}));
|
3502
|
+
return () => {
|
3503
|
+
controller.abort();
|
3504
|
+
pUnsubs.then(unsubs => {
|
3505
|
+
unsubs.forEach(unsubscribe => unsubscribe());
|
3506
|
+
});
|
3507
|
+
};
|
3515
3508
|
},
|
3516
3509
|
async fetchBalances(addressesByToken) {
|
3517
3510
|
util$1.assert(chainConnectors.substrate, "This module requires a substrate chain connector");
|
3518
|
-
const queries = await buildQueries$2(chaindataProvider$1, addressesByToken);
|
3511
|
+
const queries = await buildQueries$2(chainConnector, chaindataProvider$1, addressesByToken);
|
3519
3512
|
const result = await new RpcStateQueryHelper(chainConnectors.substrate, queries).fetch();
|
3520
3513
|
const balances = result?.filter(b => b !== null) ?? [];
|
3521
3514
|
return new Balances(balances);
|
@@ -3571,23 +3564,16 @@ const SubForeignAssetsModule = hydrate => {
|
|
3571
3564
|
}
|
3572
3565
|
};
|
3573
3566
|
};
|
3574
|
-
async function
|
3575
|
-
const
|
3576
|
-
const
|
3577
|
-
const
|
3578
|
-
|
3579
|
-
const
|
3580
|
-
|
3581
|
-
chainIds: uniqueChainIds,
|
3582
|
-
chains,
|
3583
|
-
miniMetadatas,
|
3584
|
-
moduleType: "substrate-foreignassets",
|
3585
|
-
coders: {
|
3586
|
-
storage: ["ForeignAssets", "Account"]
|
3587
|
-
}
|
3567
|
+
async function buildNetworkQueries$1(networkId, chainConnector, chaindataProvider, addressesByToken, signal) {
|
3568
|
+
const miniMetadata = await getMiniMetadata(chaindataProvider, chainConnector, networkId, moduleType$3, signal);
|
3569
|
+
const chain = await chaindataProvider.chainById(networkId);
|
3570
|
+
const tokensById = await chaindataProvider.tokensById();
|
3571
|
+
signal?.throwIfAborted();
|
3572
|
+
const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
|
3573
|
+
storage: ["ForeignAssets", "Account"]
|
3588
3574
|
});
|
3589
3575
|
return Object.entries(addressesByToken).flatMap(([tokenId, addresses]) => {
|
3590
|
-
const token =
|
3576
|
+
const token = tokensById[tokenId];
|
3591
3577
|
if (!token) {
|
3592
3578
|
log.warn(`Token ${tokenId} not found`);
|
3593
3579
|
return [];
|
@@ -3596,18 +3582,12 @@ async function buildQueries$2(chaindataProvider, addressesByToken) {
|
|
3596
3582
|
log.debug(`This module doesn't handle tokens of type ${token.type}`);
|
3597
3583
|
return [];
|
3598
3584
|
}
|
3599
|
-
const networkId = token.networkId;
|
3600
|
-
if (!networkId) {
|
3601
|
-
log.warn(`Token ${tokenId} has no chain`);
|
3602
|
-
return [];
|
3603
|
-
}
|
3604
|
-
const chain = chains[networkId];
|
3605
3585
|
if (!chain) {
|
3606
3586
|
log.warn(`Chain ${networkId} for token ${tokenId} not found`);
|
3607
3587
|
return [];
|
3608
3588
|
}
|
3609
3589
|
return addresses.flatMap(address => {
|
3610
|
-
const scaleCoder =
|
3590
|
+
const scaleCoder = networkStorageCoders?.storage;
|
3611
3591
|
const onChainId = (() => {
|
3612
3592
|
try {
|
3613
3593
|
return scale.papiParse(token.onChainId);
|
@@ -3667,6 +3647,17 @@ async function buildQueries$2(chaindataProvider, addressesByToken) {
|
|
3667
3647
|
});
|
3668
3648
|
});
|
3669
3649
|
}
|
3650
|
+
async function buildQueries$2(chainConnector, chaindataProvider$1, addressesByToken, signal) {
|
3651
|
+
const byNetwork = lodash.keys(addressesByToken).reduce((acc, tokenId) => {
|
3652
|
+
const networkId = chaindataProvider.parseSubForeignAssetTokenId(tokenId).networkId;
|
3653
|
+
if (!acc[networkId]) acc[networkId] = {};
|
3654
|
+
acc[networkId][tokenId] = addressesByToken[tokenId];
|
3655
|
+
return acc;
|
3656
|
+
}, {});
|
3657
|
+
return (await Promise.all(lodash.toPairs(byNetwork).map(([networkId, addressesByToken]) => {
|
3658
|
+
return buildNetworkQueries$1(networkId, chainConnector, chaindataProvider$1, addressesByToken, signal);
|
3659
|
+
}))).flat();
|
3660
|
+
}
|
3670
3661
|
|
3671
3662
|
async function subscribeBase(queries, chainConnector, callback) {
|
3672
3663
|
const unsubscribe = await new RpcStateQueryHelper(chainConnector, queries).subscribe((error, result) => {
|
@@ -6664,8 +6655,6 @@ const SubPsp22Module = hydrate => {
|
|
6664
6655
|
return {
|
6665
6656
|
...DefaultBalanceModule(moduleType$1),
|
6666
6657
|
async fetchSubstrateChainMeta(_chainId) {
|
6667
|
-
// const isTestnet = (await chaindataProvider.chainById(chainId))?.isTestnet || false
|
6668
|
-
// return { isTestnet }
|
6669
6658
|
return undefined;
|
6670
6659
|
},
|
6671
6660
|
async fetchSubstrateChainTokens(chainId, _chainMeta, moduleConfig) {
|
@@ -6,7 +6,7 @@ import BigNumber from 'bignumber.js';
|
|
6
6
|
import { u8aToHex, assert, stringCamelCase, u8aConcatStrict, u8aConcat, arrayChunk, u8aToString, hexToNumber, hexToU8a } from '@polkadot/util';
|
7
7
|
import { xxhashAsU8a, blake2AsU8a } from '@polkadot/util-crypto';
|
8
8
|
import pako from 'pako';
|
9
|
-
import { evmErc20TokenId as evmErc20TokenId$1, EvmErc20TokenSchema, evmNativeTokenId, evmUniswapV2TokenId, githubTokenLogoUrl, parseSubAssetTokenId, subAssetTokenId, subForeignAssetTokenId, parseSubNativeTokenId, subNativeTokenId, subPsp22TokenId, parseSubTokensTokenId, subTokensTokenId } from '@talismn/chaindata-provider';
|
9
|
+
import { evmErc20TokenId as evmErc20TokenId$1, EvmErc20TokenSchema, evmNativeTokenId, evmUniswapV2TokenId, githubTokenLogoUrl, parseSubAssetTokenId, subAssetTokenId, parseSubForeignAssetTokenId, subForeignAssetTokenId, parseSubNativeTokenId, subNativeTokenId, subPsp22TokenId, parseSubTokensTokenId, subTokensTokenId } from '@talismn/chaindata-provider';
|
10
10
|
import { parseAbi, isHex, hexToBigInt } from 'viem';
|
11
11
|
import isEqual from 'lodash/isEqual';
|
12
12
|
import { defineMethod } from '@substrate/txwrapper-core';
|
@@ -111,7 +111,7 @@ class EvmTokenFetcher {
|
|
111
111
|
|
112
112
|
var pkg = {
|
113
113
|
name: "@talismn/balances",
|
114
|
-
version: "0.0.0-pr2043-
|
114
|
+
version: "0.0.0-pr2043-20250619043542"};
|
115
115
|
|
116
116
|
var log = anylogger(pkg.name);
|
117
117
|
|
@@ -391,28 +391,6 @@ class Balance {
|
|
391
391
|
get address() {
|
392
392
|
return this.#storage.address;
|
393
393
|
}
|
394
|
-
|
395
|
-
// /** @deprecated */
|
396
|
-
// get chainId() {
|
397
|
-
// return isBalanceEvm(this.#storage) ? undefined : this.#storage.chainId
|
398
|
-
// }
|
399
|
-
// /** @deprecated */
|
400
|
-
// get chain() {
|
401
|
-
// return (this.#db?.networks && this.networkId && this.#db?.networks[this.networkId]) || null
|
402
|
-
// }
|
403
|
-
|
404
|
-
// /** @deprecated */
|
405
|
-
// get evmNetworkId() {
|
406
|
-
// return isBalanceEvm(this.#storage) ? this.#storage.evmNetworkId : undefined
|
407
|
-
// }
|
408
|
-
// /** @deprecated */
|
409
|
-
// get evmNetwork() {
|
410
|
-
// return (
|
411
|
-
// (this.#db?.networks && this.networkId && this.#db?.networks[this.networkId]) ||
|
412
|
-
// null
|
413
|
-
// )
|
414
|
-
// }
|
415
|
-
|
416
394
|
get networkId() {
|
417
395
|
return this.#storage.networkId;
|
418
396
|
}
|
@@ -3204,7 +3182,7 @@ const SubAssetsModule = hydrate => {
|
|
3204
3182
|
const controller = new AbortController();
|
3205
3183
|
const pUnsubs = Promise.all(toPairs(byNetwork).map(async ([networkId, addressesByToken]) => {
|
3206
3184
|
try {
|
3207
|
-
const queries = await buildNetworkQueries$
|
3185
|
+
const queries = await buildNetworkQueries$2(networkId, chainConnector, chaindataProvider, addressesByToken, controller.signal);
|
3208
3186
|
if (controller.signal.aborted) return () => {};
|
3209
3187
|
const stateHelper = new RpcStateQueryHelper(chainConnector, queries);
|
3210
3188
|
return await stateHelper.subscribe((error, result) => {
|
@@ -3297,7 +3275,7 @@ const SubAssetsModule = hydrate => {
|
|
3297
3275
|
}
|
3298
3276
|
};
|
3299
3277
|
};
|
3300
|
-
async function buildNetworkQueries$
|
3278
|
+
async function buildNetworkQueries$2(networkId, chainConnector, chaindataProvider, addressesByToken, signal) {
|
3301
3279
|
const miniMetadata = await getMiniMetadata(chaindataProvider, chainConnector, networkId, moduleType$4, signal);
|
3302
3280
|
// console.log("Fetched miniMetadata for network", networkId, { miniMetadata })
|
3303
3281
|
const chain = await chaindataProvider.chainById(networkId);
|
@@ -3386,7 +3364,7 @@ async function buildQueries$3(chainConnector, chaindataProvider, addressesByToke
|
|
3386
3364
|
return acc;
|
3387
3365
|
}, {});
|
3388
3366
|
return (await Promise.all(toPairs(byNetwork).map(([networkId, addressesByToken]) => {
|
3389
|
-
return buildNetworkQueries$
|
3367
|
+
return buildNetworkQueries$2(networkId, chainConnector, chaindataProvider, addressesByToken, signal);
|
3390
3368
|
}))).flat();
|
3391
3369
|
}
|
3392
3370
|
// NOTE: Different chains need different formats for assetId when encoding the stateKey
|
@@ -3412,10 +3390,7 @@ const SubForeignAssetsModule = hydrate => {
|
|
3412
3390
|
return {
|
3413
3391
|
...DefaultBalanceModule(moduleType$3),
|
3414
3392
|
async fetchSubstrateChainMeta(chainId, moduleConfig, metadataRpc) {
|
3415
|
-
// const isTestnet = (await chaindataProvider.chainById(chainId))?.isTestnet || false
|
3416
3393
|
if (metadataRpc === undefined) return {};
|
3417
|
-
// if ((moduleConfig?.tokens ?? []).length < 1) return { isTestnet }
|
3418
|
-
|
3419
3394
|
const metadataVersion = getMetadataVersion(metadataRpc);
|
3420
3395
|
if (metadataVersion < 14) return {};
|
3421
3396
|
const metadata = decAnyMetadata(metadataRpc);
|
@@ -3434,9 +3409,6 @@ const SubForeignAssetsModule = hydrate => {
|
|
3434
3409
|
miniMetadata
|
3435
3410
|
} = chainMeta;
|
3436
3411
|
if (!miniMetadata) return {};
|
3437
|
-
// if (miniMetadata === undefined || metadataVersion === undefined) return {}
|
3438
|
-
// if (metadataVersion < 14) return {}
|
3439
|
-
|
3440
3412
|
const metadata = decAnyMetadata(miniMetadata);
|
3441
3413
|
const unifiedMetadata = unifyMetadata(metadata);
|
3442
3414
|
const scaleBuilder = getDynamicBuilder(getLookupFn(unifiedMetadata));
|
@@ -3490,17 +3462,38 @@ const SubForeignAssetsModule = hydrate => {
|
|
3490
3462
|
async subscribeBalances({
|
3491
3463
|
addressesByToken
|
3492
3464
|
}, callback) {
|
3493
|
-
const
|
3494
|
-
|
3495
|
-
if (
|
3496
|
-
|
3497
|
-
|
3498
|
-
});
|
3499
|
-
|
3465
|
+
const byNetwork = keys(addressesByToken).reduce((acc, tokenId) => {
|
3466
|
+
const networkId = parseSubForeignAssetTokenId(tokenId).networkId;
|
3467
|
+
if (!acc[networkId]) acc[networkId] = {};
|
3468
|
+
acc[networkId][tokenId] = addressesByToken[tokenId];
|
3469
|
+
return acc;
|
3470
|
+
}, {});
|
3471
|
+
const controller = new AbortController();
|
3472
|
+
const pUnsubs = Promise.all(toPairs(byNetwork).map(async ([networkId, addressesByToken]) => {
|
3473
|
+
try {
|
3474
|
+
const queries = await buildNetworkQueries$1(networkId, chainConnector, chaindataProvider, addressesByToken, controller.signal);
|
3475
|
+
if (controller.signal.aborted) return () => {};
|
3476
|
+
const stateHelper = new RpcStateQueryHelper(chainConnector, queries);
|
3477
|
+
return await stateHelper.subscribe((error, result) => {
|
3478
|
+
if (error) return callback(error);
|
3479
|
+
const balances = result?.filter(b => b !== null) ?? [];
|
3480
|
+
if (balances.length > 0) callback(null, new Balances(balances));
|
3481
|
+
});
|
3482
|
+
} catch (err) {
|
3483
|
+
if (!controller.signal.aborted) log.error(`Failed to subscribe ${moduleType$3} balances for network ${networkId}`, err);
|
3484
|
+
return () => {};
|
3485
|
+
}
|
3486
|
+
}));
|
3487
|
+
return () => {
|
3488
|
+
controller.abort();
|
3489
|
+
pUnsubs.then(unsubs => {
|
3490
|
+
unsubs.forEach(unsubscribe => unsubscribe());
|
3491
|
+
});
|
3492
|
+
};
|
3500
3493
|
},
|
3501
3494
|
async fetchBalances(addressesByToken) {
|
3502
3495
|
assert(chainConnectors.substrate, "This module requires a substrate chain connector");
|
3503
|
-
const queries = await buildQueries$2(chaindataProvider, addressesByToken);
|
3496
|
+
const queries = await buildQueries$2(chainConnector, chaindataProvider, addressesByToken);
|
3504
3497
|
const result = await new RpcStateQueryHelper(chainConnectors.substrate, queries).fetch();
|
3505
3498
|
const balances = result?.filter(b => b !== null) ?? [];
|
3506
3499
|
return new Balances(balances);
|
@@ -3556,23 +3549,16 @@ const SubForeignAssetsModule = hydrate => {
|
|
3556
3549
|
}
|
3557
3550
|
};
|
3558
3551
|
};
|
3559
|
-
async function
|
3560
|
-
const
|
3561
|
-
const
|
3562
|
-
const
|
3563
|
-
|
3564
|
-
const
|
3565
|
-
|
3566
|
-
chainIds: uniqueChainIds,
|
3567
|
-
chains,
|
3568
|
-
miniMetadatas,
|
3569
|
-
moduleType: "substrate-foreignassets",
|
3570
|
-
coders: {
|
3571
|
-
storage: ["ForeignAssets", "Account"]
|
3572
|
-
}
|
3552
|
+
async function buildNetworkQueries$1(networkId, chainConnector, chaindataProvider, addressesByToken, signal) {
|
3553
|
+
const miniMetadata = await getMiniMetadata(chaindataProvider, chainConnector, networkId, moduleType$3, signal);
|
3554
|
+
const chain = await chaindataProvider.chainById(networkId);
|
3555
|
+
const tokensById = await chaindataProvider.tokensById();
|
3556
|
+
signal?.throwIfAborted();
|
3557
|
+
const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
|
3558
|
+
storage: ["ForeignAssets", "Account"]
|
3573
3559
|
});
|
3574
3560
|
return Object.entries(addressesByToken).flatMap(([tokenId, addresses]) => {
|
3575
|
-
const token =
|
3561
|
+
const token = tokensById[tokenId];
|
3576
3562
|
if (!token) {
|
3577
3563
|
log.warn(`Token ${tokenId} not found`);
|
3578
3564
|
return [];
|
@@ -3581,18 +3567,12 @@ async function buildQueries$2(chaindataProvider, addressesByToken) {
|
|
3581
3567
|
log.debug(`This module doesn't handle tokens of type ${token.type}`);
|
3582
3568
|
return [];
|
3583
3569
|
}
|
3584
|
-
const networkId = token.networkId;
|
3585
|
-
if (!networkId) {
|
3586
|
-
log.warn(`Token ${tokenId} has no chain`);
|
3587
|
-
return [];
|
3588
|
-
}
|
3589
|
-
const chain = chains[networkId];
|
3590
3570
|
if (!chain) {
|
3591
3571
|
log.warn(`Chain ${networkId} for token ${tokenId} not found`);
|
3592
3572
|
return [];
|
3593
3573
|
}
|
3594
3574
|
return addresses.flatMap(address => {
|
3595
|
-
const scaleCoder =
|
3575
|
+
const scaleCoder = networkStorageCoders?.storage;
|
3596
3576
|
const onChainId = (() => {
|
3597
3577
|
try {
|
3598
3578
|
return papiParse(token.onChainId);
|
@@ -3652,6 +3632,17 @@ async function buildQueries$2(chaindataProvider, addressesByToken) {
|
|
3652
3632
|
});
|
3653
3633
|
});
|
3654
3634
|
}
|
3635
|
+
async function buildQueries$2(chainConnector, chaindataProvider, addressesByToken, signal) {
|
3636
|
+
const byNetwork = keys(addressesByToken).reduce((acc, tokenId) => {
|
3637
|
+
const networkId = parseSubForeignAssetTokenId(tokenId).networkId;
|
3638
|
+
if (!acc[networkId]) acc[networkId] = {};
|
3639
|
+
acc[networkId][tokenId] = addressesByToken[tokenId];
|
3640
|
+
return acc;
|
3641
|
+
}, {});
|
3642
|
+
return (await Promise.all(toPairs(byNetwork).map(([networkId, addressesByToken]) => {
|
3643
|
+
return buildNetworkQueries$1(networkId, chainConnector, chaindataProvider, addressesByToken, signal);
|
3644
|
+
}))).flat();
|
3645
|
+
}
|
3655
3646
|
|
3656
3647
|
async function subscribeBase(queries, chainConnector, callback) {
|
3657
3648
|
const unsubscribe = await new RpcStateQueryHelper(chainConnector, queries).subscribe((error, result) => {
|
@@ -6649,8 +6640,6 @@ const SubPsp22Module = hydrate => {
|
|
6649
6640
|
return {
|
6650
6641
|
...DefaultBalanceModule(moduleType$1),
|
6651
6642
|
async fetchSubstrateChainMeta(_chainId) {
|
6652
|
-
// const isTestnet = (await chaindataProvider.chainById(chainId))?.isTestnet || false
|
6653
|
-
// return { isTestnet }
|
6654
6643
|
return undefined;
|
6655
6644
|
},
|
6656
6645
|
async fetchSubstrateChainTokens(chainId, _chainMeta, moduleConfig) {
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@talismn/balances",
|
3
|
-
"version": "0.0.0-pr2043-
|
3
|
+
"version": "0.0.0-pr2043-20250619043542",
|
4
4
|
"author": "Talisman",
|
5
5
|
"homepage": "https://talisman.xyz",
|
6
6
|
"license": "GPL-3.0-or-later",
|
@@ -35,13 +35,13 @@
|
|
35
35
|
"scale-ts": "^1.6.1",
|
36
36
|
"viem": "^2.27.3",
|
37
37
|
"zod": "^3.25.62",
|
38
|
-
"@talismn/chain-connector": "0.0.0-pr2043-
|
39
|
-
"@talismn/
|
40
|
-
"@talismn/
|
41
|
-
"@talismn/
|
38
|
+
"@talismn/chain-connector": "0.0.0-pr2043-20250619043542",
|
39
|
+
"@talismn/sapi": "0.0.0-pr2043-20250619043542",
|
40
|
+
"@talismn/token-rates": "0.0.0-pr2043-20250619043542",
|
41
|
+
"@talismn/chaindata-provider": "0.0.0-pr2043-20250619043542",
|
42
42
|
"@talismn/util": "0.4.2",
|
43
43
|
"@talismn/scale": "0.1.2",
|
44
|
-
"@talismn/
|
44
|
+
"@talismn/chain-connector-evm": "0.0.0-pr2043-20250619043542"
|
45
45
|
},
|
46
46
|
"devDependencies": {
|
47
47
|
"@polkadot/api-contract": "16.1.2",
|