@talismn/balances 1.3.7 → 1.4.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 +56 -11
- package/dist/index.d.ts +56 -11
- package/dist/index.js +1109 -589
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +940 -406
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -9
package/dist/index.js
CHANGED
|
@@ -45,12 +45,14 @@ __export(index_exports, {
|
|
|
45
45
|
EvmUniswapV2BalanceModule: () => EvmUniswapV2BalanceModule,
|
|
46
46
|
EvmUniswapV2TokenConfigSchema: () => EvmUniswapV2TokenConfigSchema,
|
|
47
47
|
FiatSumBalancesFormatter: () => FiatSumBalancesFormatter,
|
|
48
|
-
MINIMETADATA_VERSION: () =>
|
|
48
|
+
MINIMETADATA_VERSION: () => import_chaindata_provider72.MINIMETADATA_VERSION,
|
|
49
49
|
PlanckSumBalancesFormatter: () => PlanckSumBalancesFormatter,
|
|
50
50
|
SolNativeBalanceModule: () => SolNativeBalanceModule,
|
|
51
51
|
SolNativeTokenConfigSchema: () => SolNativeTokenConfigSchema,
|
|
52
52
|
SolSplBalanceModule: () => SolSplBalanceModule,
|
|
53
53
|
SolSplTokenConfigSchema: () => SolSplTokenConfigSchema,
|
|
54
|
+
SolToken2022BalanceModule: () => SolToken2022BalanceModule,
|
|
55
|
+
SolToken2022TokenConfigSchema: () => SolToken2022TokenConfigSchema,
|
|
54
56
|
SubAssetsBalanceModule: () => SubAssetsBalanceModule,
|
|
55
57
|
SubAssetsTokenConfigSchema: () => SubAssetsTokenConfigSchema,
|
|
56
58
|
SubDTaoBalanceModule: () => SubDTaoBalanceModule,
|
|
@@ -92,11 +94,11 @@ __export(index_exports, {
|
|
|
92
94
|
module.exports = __toCommonJS(index_exports);
|
|
93
95
|
|
|
94
96
|
// src/BalancesProvider.ts
|
|
95
|
-
var
|
|
97
|
+
var import_chaindata_provider71 = require("@talismn/chaindata-provider");
|
|
96
98
|
var import_crypto8 = require("@talismn/crypto");
|
|
97
|
-
var
|
|
98
|
-
var
|
|
99
|
-
var
|
|
99
|
+
var import_util15 = require("@talismn/util");
|
|
100
|
+
var import_lodash_es30 = require("lodash-es");
|
|
101
|
+
var import_rxjs16 = require("rxjs");
|
|
100
102
|
var import_viem9 = require("viem");
|
|
101
103
|
|
|
102
104
|
// src/getMiniMetadatas/index.ts
|
|
@@ -108,7 +110,7 @@ var import_anylogger = __toESM(require("anylogger"));
|
|
|
108
110
|
// package.json
|
|
109
111
|
var package_default = {
|
|
110
112
|
name: "@talismn/balances",
|
|
111
|
-
version: "1.
|
|
113
|
+
version: "1.4.0",
|
|
112
114
|
author: "Talisman",
|
|
113
115
|
homepage: "https://talisman.xyz",
|
|
114
116
|
license: "GPL-3.0-or-later",
|
|
@@ -160,7 +162,6 @@ var package_default = {
|
|
|
160
162
|
devDependencies: {
|
|
161
163
|
"@polkadot/api-contract": "16.1.2",
|
|
162
164
|
"@polkadot/types": "16.1.2",
|
|
163
|
-
"@polkadot/util": "13.5.3",
|
|
164
165
|
"@talismn/tsconfig": "workspace:*",
|
|
165
166
|
"@types/lodash-es": "4.17.12",
|
|
166
167
|
typescript: "^5.6.3"
|
|
@@ -168,8 +169,6 @@ var package_default = {
|
|
|
168
169
|
peerDependencies: {
|
|
169
170
|
"@polkadot/api-contract": "*",
|
|
170
171
|
"@polkadot/types": "*",
|
|
171
|
-
"@polkadot/util": "*",
|
|
172
|
-
"@polkadot/util-crypto": "*",
|
|
173
172
|
"@substrate/txwrapper-core": "*"
|
|
174
173
|
},
|
|
175
174
|
types: "./dist/index.d.ts",
|
|
@@ -1901,8 +1900,8 @@ var fetchBalances4 = async ({
|
|
|
1901
1900
|
const results = await Promise.allSettled(
|
|
1902
1901
|
balanceDefs.map(async ({ token, address }) => {
|
|
1903
1902
|
try {
|
|
1904
|
-
const
|
|
1905
|
-
const lamports = await connection.getBalance(
|
|
1903
|
+
const publicKey3 = new import_web3.PublicKey(address);
|
|
1904
|
+
const lamports = await connection.getBalance(publicKey3);
|
|
1906
1905
|
return {
|
|
1907
1906
|
address,
|
|
1908
1907
|
tokenId: token.id,
|
|
@@ -2055,8 +2054,8 @@ var MODULE_TYPE5 = import_chaindata_provider19.SolSplTokenSchema.shape.type.valu
|
|
|
2055
2054
|
var PLATFORM5 = import_chaindata_provider19.SolSplTokenSchema.shape.platform.value;
|
|
2056
2055
|
|
|
2057
2056
|
// src/modules/sol-spl/fetchBalances.ts
|
|
2058
|
-
var
|
|
2059
|
-
var
|
|
2057
|
+
var import_web34 = require("@solana/web3.js");
|
|
2058
|
+
var import_chaindata_provider22 = require("@talismn/chaindata-provider");
|
|
2060
2059
|
var import_util2 = require("@talismn/util");
|
|
2061
2060
|
var import_lodash_es12 = require("lodash-es");
|
|
2062
2061
|
|
|
@@ -2213,8 +2212,77 @@ var getDetectedTokensIds$ = (address) => tokenIdsByAddress.pipe(
|
|
|
2213
2212
|
(0, import_rxjs6.distinctUntilChanged)(import_lodash_es11.isEqual)
|
|
2214
2213
|
);
|
|
2215
2214
|
|
|
2215
|
+
// src/modules/sol-spl/onChainTokenMetadata.ts
|
|
2216
|
+
var import_mpl_token_metadata = require("@metaplex-foundation/mpl-token-metadata");
|
|
2217
|
+
var import_umi = require("@metaplex-foundation/umi");
|
|
2218
|
+
var import_spl_token = require("@solana/spl-token");
|
|
2219
|
+
var import_web33 = require("@solana/web3.js");
|
|
2220
|
+
var import_chaindata_provider21 = require("@talismn/chaindata-provider");
|
|
2221
|
+
var import_v47 = __toESM(require("zod/v4"));
|
|
2222
|
+
var TokenCacheSchema3 = import_v47.default.discriminatedUnion("isValid", [
|
|
2223
|
+
import_v47.default.strictObject({
|
|
2224
|
+
id: import_chaindata_provider21.SolSplTokenSchema.shape.id,
|
|
2225
|
+
isValid: import_v47.default.literal(true),
|
|
2226
|
+
...import_chaindata_provider21.SolSplTokenSchema.pick({ symbol: true, decimals: true, name: true, logo: true }).shape
|
|
2227
|
+
}),
|
|
2228
|
+
import_v47.default.strictObject({
|
|
2229
|
+
id: import_chaindata_provider21.SolSplTokenSchema.shape.id,
|
|
2230
|
+
isValid: import_v47.default.literal(false)
|
|
2231
|
+
})
|
|
2232
|
+
]);
|
|
2233
|
+
var METAPLEX_PROGRAM_ID = new import_web33.PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
|
|
2234
|
+
var ERROR_NO_MINT = "No mint info available";
|
|
2235
|
+
var ERROR_NO_METADATA = "No metadata account found";
|
|
2236
|
+
var ERROR_INVALID_DATA = "Invalid on-chain data";
|
|
2237
|
+
var fetchOnChainTokenData = async (connector, tokenId) => {
|
|
2238
|
+
try {
|
|
2239
|
+
const { networkId, mintAddress } = (0, import_chaindata_provider21.parseSolSplTokenId)(tokenId);
|
|
2240
|
+
const connection = await connector.getConnection(networkId);
|
|
2241
|
+
if (!connection) {
|
|
2242
|
+
log_default.warn(`No connection found for network ${networkId}`);
|
|
2243
|
+
return null;
|
|
2244
|
+
}
|
|
2245
|
+
const mintPubKey = new import_web33.PublicKey(mintAddress);
|
|
2246
|
+
const mintInfo = await connection.getAccountInfo(mintPubKey);
|
|
2247
|
+
if (!mintInfo?.data) throw new Error(ERROR_NO_MINT);
|
|
2248
|
+
const mint = import_spl_token.MintLayout.decode(mintInfo.data);
|
|
2249
|
+
const [metadataPDA] = import_web33.PublicKey.findProgramAddressSync(
|
|
2250
|
+
[Buffer.from("metadata"), METAPLEX_PROGRAM_ID.toBuffer(), mintPubKey.toBuffer()],
|
|
2251
|
+
METAPLEX_PROGRAM_ID
|
|
2252
|
+
);
|
|
2253
|
+
const metadataAccount = await connection.getAccountInfo(new import_web33.PublicKey(metadataPDA));
|
|
2254
|
+
if (!metadataAccount) throw new Error(ERROR_NO_METADATA);
|
|
2255
|
+
const metadata = (0, import_mpl_token_metadata.deserializeMetadata)({
|
|
2256
|
+
publicKey: (0, import_umi.publicKey)(metadataPDA),
|
|
2257
|
+
executable: metadataAccount.executable,
|
|
2258
|
+
owner: (0, import_umi.publicKey)(metadataAccount.owner),
|
|
2259
|
+
lamports: (0, import_umi.sol)(metadataAccount.lamports),
|
|
2260
|
+
data: metadataAccount.data
|
|
2261
|
+
});
|
|
2262
|
+
const parsed = TokenCacheSchema3.safeParse({
|
|
2263
|
+
id: tokenId,
|
|
2264
|
+
symbol: metadata.symbol.trim(),
|
|
2265
|
+
name: metadata.name.trim(),
|
|
2266
|
+
decimals: mint.decimals,
|
|
2267
|
+
isValid: true
|
|
2268
|
+
});
|
|
2269
|
+
if (!parsed.success) throw new Error(ERROR_INVALID_DATA);
|
|
2270
|
+
return parsed.data;
|
|
2271
|
+
} catch (err) {
|
|
2272
|
+
const msg = err.message;
|
|
2273
|
+
if ([ERROR_NO_MINT, ERROR_NO_METADATA, ERROR_INVALID_DATA].includes(msg))
|
|
2274
|
+
return TokenCacheSchema3.parse({
|
|
2275
|
+
id: tokenId,
|
|
2276
|
+
isValid: false
|
|
2277
|
+
});
|
|
2278
|
+
log_default.warn("Failed to fetch sol-spl token data for %s", tokenId, { err });
|
|
2279
|
+
}
|
|
2280
|
+
return null;
|
|
2281
|
+
};
|
|
2282
|
+
|
|
2216
2283
|
// src/modules/sol-spl/fetchBalances.ts
|
|
2217
2284
|
var SPL_PROGRAM_ID = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
|
|
2285
|
+
var dynamicTokenMetadataCache = /* @__PURE__ */ new Map();
|
|
2218
2286
|
var fetchBalances5 = async ({
|
|
2219
2287
|
networkId,
|
|
2220
2288
|
tokensWithAddresses,
|
|
@@ -2224,18 +2292,22 @@ var fetchBalances5 = async ({
|
|
|
2224
2292
|
const connection = await connector.getConnection(networkId);
|
|
2225
2293
|
if (!connection) throw new Error(`Could not get connection for Solana network ${networkId}`);
|
|
2226
2294
|
const accountAddresses = (0, import_lodash_es12.uniq)(tokensWithAddresses.flatMap(([, addresses]) => addresses));
|
|
2295
|
+
const knownTokenIds = new Set(tokensWithAddresses.map(([token]) => token.id));
|
|
2296
|
+
const unknownMints = /* @__PURE__ */ new Set();
|
|
2227
2297
|
const balancesPerAddress = await Promise.all(
|
|
2228
2298
|
accountAddresses.map(async (address) => {
|
|
2229
|
-
const tokenAccounts = await connection.getParsedTokenAccountsByOwner(new
|
|
2230
|
-
programId: new
|
|
2299
|
+
const tokenAccounts = await connection.getParsedTokenAccountsByOwner(new import_web34.PublicKey(address), {
|
|
2300
|
+
programId: new import_web34.PublicKey(SPL_PROGRAM_ID)
|
|
2231
2301
|
// SPL Token Program ID
|
|
2232
2302
|
});
|
|
2233
2303
|
const balances = tokenAccounts.value.map((d) => {
|
|
2234
2304
|
try {
|
|
2235
2305
|
const mintAddress = d.account.data.parsed.info.mint;
|
|
2236
2306
|
const value = d.account.data.parsed.info.tokenAmount.amount ?? "0";
|
|
2307
|
+
const tokenId = (0, import_chaindata_provider22.solSplTokenId)(networkId, mintAddress);
|
|
2308
|
+
if (!knownTokenIds.has(tokenId) && value !== "0") unknownMints.add(mintAddress);
|
|
2237
2309
|
return {
|
|
2238
|
-
tokenId
|
|
2310
|
+
tokenId,
|
|
2239
2311
|
networkId,
|
|
2240
2312
|
address,
|
|
2241
2313
|
source: MODULE_TYPE5,
|
|
@@ -2258,6 +2330,42 @@ var fetchBalances5 = async ({
|
|
|
2258
2330
|
return [address, balances];
|
|
2259
2331
|
})
|
|
2260
2332
|
);
|
|
2333
|
+
const dynamicTokens = [];
|
|
2334
|
+
if (unknownMints.size) {
|
|
2335
|
+
await Promise.all(
|
|
2336
|
+
Array.from(unknownMints).map(async (mintAddress) => {
|
|
2337
|
+
const tokenId = (0, import_chaindata_provider22.solSplTokenId)(networkId, mintAddress);
|
|
2338
|
+
let cached = dynamicTokenMetadataCache.get(tokenId);
|
|
2339
|
+
if (!cached) {
|
|
2340
|
+
const fetched = await fetchOnChainTokenData(connector, tokenId);
|
|
2341
|
+
if (fetched) {
|
|
2342
|
+
dynamicTokenMetadataCache.set(tokenId, fetched);
|
|
2343
|
+
cached = fetched;
|
|
2344
|
+
}
|
|
2345
|
+
}
|
|
2346
|
+
if (!cached || !cached.isValid) return;
|
|
2347
|
+
const token = {
|
|
2348
|
+
id: tokenId,
|
|
2349
|
+
type: MODULE_TYPE5,
|
|
2350
|
+
platform: PLATFORM5,
|
|
2351
|
+
networkId,
|
|
2352
|
+
mintAddress,
|
|
2353
|
+
isDefault: true,
|
|
2354
|
+
symbol: cached.symbol,
|
|
2355
|
+
decimals: cached.decimals,
|
|
2356
|
+
...cached.name !== void 0 ? { name: cached.name } : {},
|
|
2357
|
+
...cached.logo !== void 0 ? { logo: cached.logo } : {}
|
|
2358
|
+
};
|
|
2359
|
+
const parsed = import_chaindata_provider22.SolSplTokenSchema.safeParse(token);
|
|
2360
|
+
if (!parsed.success) {
|
|
2361
|
+
log_default.warn("Ignoring dynamic sol-spl token with invalid schema", { token });
|
|
2362
|
+
return;
|
|
2363
|
+
}
|
|
2364
|
+
dynamicTokens.push(parsed.data);
|
|
2365
|
+
})
|
|
2366
|
+
);
|
|
2367
|
+
}
|
|
2368
|
+
const registeredDynamicIds = new Set(dynamicTokens.map((t) => t.id));
|
|
2261
2369
|
const allBalancesByKey = (0, import_lodash_es12.keyBy)(
|
|
2262
2370
|
balancesPerAddress.flatMap(([, addressBalances]) => addressBalances),
|
|
2263
2371
|
(b) => getBalanceKey(b.tokenId, b.address)
|
|
@@ -2274,30 +2382,16 @@ var fetchBalances5 = async ({
|
|
|
2274
2382
|
value: "0"
|
|
2275
2383
|
};
|
|
2276
2384
|
});
|
|
2277
|
-
|
|
2385
|
+
for (const balance of balancesPerAddress.flatMap(([, addressBalances]) => addressBalances)) {
|
|
2386
|
+
if (registeredDynamicIds.has(balance.tokenId)) success.push(balance);
|
|
2387
|
+
}
|
|
2388
|
+
return { success, errors: [], dynamicTokens };
|
|
2278
2389
|
};
|
|
2279
2390
|
var getBalanceKey = (tokenId, address) => `${tokenId}:${address}`;
|
|
2280
2391
|
|
|
2281
2392
|
// src/modules/sol-spl/fetchTokens.ts
|
|
2282
|
-
var
|
|
2283
|
-
var import_umi = require("@metaplex-foundation/umi");
|
|
2284
|
-
var import_spl_token = require("@solana/spl-token");
|
|
2285
|
-
var import_web34 = require("@solana/web3.js");
|
|
2286
|
-
var import_chaindata_provider22 = require("@talismn/chaindata-provider");
|
|
2393
|
+
var import_chaindata_provider23 = require("@talismn/chaindata-provider");
|
|
2287
2394
|
var import_lodash_es13 = require("lodash-es");
|
|
2288
|
-
var import_v47 = __toESM(require("zod/v4"));
|
|
2289
|
-
var TokenCacheSchema3 = import_v47.default.discriminatedUnion("isValid", [
|
|
2290
|
-
import_v47.default.strictObject({
|
|
2291
|
-
id: import_chaindata_provider22.SolSplTokenSchema.shape.id,
|
|
2292
|
-
isValid: import_v47.default.literal(true),
|
|
2293
|
-
...import_chaindata_provider22.SolSplTokenSchema.pick({ symbol: true, decimals: true, name: true, logo: true }).shape
|
|
2294
|
-
}),
|
|
2295
|
-
import_v47.default.strictObject({
|
|
2296
|
-
id: import_chaindata_provider22.SolSplTokenSchema.shape.id,
|
|
2297
|
-
isValid: import_v47.default.literal(false)
|
|
2298
|
-
})
|
|
2299
|
-
]);
|
|
2300
|
-
var METAPLEX_PROGRAM_ID = new import_web34.PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
|
|
2301
2395
|
var fetchTokens5 = async ({
|
|
2302
2396
|
networkId,
|
|
2303
2397
|
tokens,
|
|
@@ -2306,7 +2400,7 @@ var fetchTokens5 = async ({
|
|
|
2306
2400
|
}) => {
|
|
2307
2401
|
const result = [];
|
|
2308
2402
|
for (const tokenConfig of tokens) {
|
|
2309
|
-
const tokenId = (0,
|
|
2403
|
+
const tokenId = (0, import_chaindata_provider23.solSplTokenId)(networkId, tokenConfig.mintAddress);
|
|
2310
2404
|
let cached = cache[tokenId] && TokenCacheSchema3.safeParse(cache[tokenId]).data;
|
|
2311
2405
|
if (!cached) {
|
|
2312
2406
|
const tokenInfo = await fetchOnChainTokenData(connector, tokenId);
|
|
@@ -2325,7 +2419,7 @@ var fetchTokens5 = async ({
|
|
|
2325
2419
|
cached?.isValid ? (0, import_lodash_es13.omit)(cached, ["isValid"]) : {},
|
|
2326
2420
|
tokenConfig
|
|
2327
2421
|
);
|
|
2328
|
-
const parsed =
|
|
2422
|
+
const parsed = import_chaindata_provider23.SolSplTokenSchema.safeParse(token);
|
|
2329
2423
|
if (!parsed.success) {
|
|
2330
2424
|
log_default.warn("Ignoring token with invalid SolSplTokenSchema", {
|
|
2331
2425
|
token
|
|
@@ -2336,54 +2430,6 @@ var fetchTokens5 = async ({
|
|
|
2336
2430
|
}
|
|
2337
2431
|
return result;
|
|
2338
2432
|
};
|
|
2339
|
-
var ERROR_NO_MINT = "No mint info available";
|
|
2340
|
-
var ERROR_NO_METADATA = "No metadata account found";
|
|
2341
|
-
var ERROR_INVALID_DATA = "Invalid on-chain data";
|
|
2342
|
-
var fetchOnChainTokenData = async (connector, tokenId) => {
|
|
2343
|
-
try {
|
|
2344
|
-
const { networkId, mintAddress } = (0, import_chaindata_provider22.parseSolSplTokenId)(tokenId);
|
|
2345
|
-
const connection = await connector.getConnection(networkId);
|
|
2346
|
-
if (!connection) {
|
|
2347
|
-
log_default.warn(`No connection found for network ${networkId}`);
|
|
2348
|
-
return null;
|
|
2349
|
-
}
|
|
2350
|
-
const mintPubKey = new import_web34.PublicKey(mintAddress);
|
|
2351
|
-
const mintInfo = await connection.getAccountInfo(mintPubKey);
|
|
2352
|
-
if (!mintInfo?.data) throw new Error(ERROR_NO_MINT);
|
|
2353
|
-
const mint = import_spl_token.MintLayout.decode(mintInfo.data);
|
|
2354
|
-
const [metadataPDA] = import_web34.PublicKey.findProgramAddressSync(
|
|
2355
|
-
[Buffer.from("metadata"), METAPLEX_PROGRAM_ID.toBuffer(), mintPubKey.toBuffer()],
|
|
2356
|
-
METAPLEX_PROGRAM_ID
|
|
2357
|
-
);
|
|
2358
|
-
const metadataAccount = await connection.getAccountInfo(new import_web34.PublicKey(metadataPDA));
|
|
2359
|
-
if (!metadataAccount) throw new Error(ERROR_NO_METADATA);
|
|
2360
|
-
const metadata = (0, import_mpl_token_metadata.deserializeMetadata)({
|
|
2361
|
-
publicKey: (0, import_umi.publicKey)(metadataPDA),
|
|
2362
|
-
executable: metadataAccount.executable,
|
|
2363
|
-
owner: (0, import_umi.publicKey)(metadataAccount.owner),
|
|
2364
|
-
lamports: (0, import_umi.sol)(metadataAccount.lamports),
|
|
2365
|
-
data: metadataAccount.data
|
|
2366
|
-
});
|
|
2367
|
-
const parsed = TokenCacheSchema3.safeParse({
|
|
2368
|
-
id: tokenId,
|
|
2369
|
-
symbol: metadata.symbol.trim(),
|
|
2370
|
-
name: metadata.name.trim(),
|
|
2371
|
-
decimals: mint.decimals,
|
|
2372
|
-
isValid: true
|
|
2373
|
-
});
|
|
2374
|
-
if (!parsed.success) throw new Error(ERROR_INVALID_DATA);
|
|
2375
|
-
return parsed.data;
|
|
2376
|
-
} catch (err) {
|
|
2377
|
-
const msg = err.message;
|
|
2378
|
-
if ([ERROR_NO_MINT, ERROR_NO_METADATA, ERROR_INVALID_DATA].includes(msg))
|
|
2379
|
-
return TokenCacheSchema3.parse({
|
|
2380
|
-
id: tokenId,
|
|
2381
|
-
isValid: false
|
|
2382
|
-
});
|
|
2383
|
-
log_default.warn("Failed to fetch sol-spl token data for %s", tokenId, { err });
|
|
2384
|
-
}
|
|
2385
|
-
return null;
|
|
2386
|
-
};
|
|
2387
2433
|
|
|
2388
2434
|
// src/modules/sol-spl/getMiniMetadata.ts
|
|
2389
2435
|
var getMiniMetadata5 = () => {
|
|
@@ -2393,9 +2439,9 @@ var getMiniMetadata5 = () => {
|
|
|
2393
2439
|
// src/modules/sol-spl/getTransferCallData.ts
|
|
2394
2440
|
var import_spl_token2 = require("@solana/spl-token");
|
|
2395
2441
|
var import_web35 = require("@solana/web3.js");
|
|
2396
|
-
var
|
|
2442
|
+
var import_chaindata_provider24 = require("@talismn/chaindata-provider");
|
|
2397
2443
|
var getTransferCallData5 = async ({ from: from2, to, value, token, connector }) => {
|
|
2398
|
-
if (!(0,
|
|
2444
|
+
if (!(0, import_chaindata_provider24.isTokenOfType)(token, MODULE_TYPE5))
|
|
2399
2445
|
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE5}.`);
|
|
2400
2446
|
const connection = await connector.getConnection(token.networkId);
|
|
2401
2447
|
const instructions = [];
|
|
@@ -2488,21 +2534,476 @@ var SolSplBalanceModule = {
|
|
|
2488
2534
|
};
|
|
2489
2535
|
|
|
2490
2536
|
// src/modules/sol-spl/types.ts
|
|
2491
|
-
var
|
|
2537
|
+
var import_chaindata_provider25 = require("@talismn/chaindata-provider");
|
|
2492
2538
|
var import_v48 = __toESM(require("zod/v4"));
|
|
2493
2539
|
var SolSplTokenConfigSchema = import_v48.default.strictObject({
|
|
2494
|
-
mintAddress:
|
|
2540
|
+
mintAddress: import_chaindata_provider25.SolSplTokenSchema.shape.mintAddress,
|
|
2541
|
+
...TokenConfigBaseSchema.shape
|
|
2542
|
+
});
|
|
2543
|
+
|
|
2544
|
+
// src/modules/sol-token2022/config.ts
|
|
2545
|
+
var import_chaindata_provider26 = require("@talismn/chaindata-provider");
|
|
2546
|
+
var MODULE_TYPE6 = import_chaindata_provider26.SolToken2022TokenSchema.shape.type.value;
|
|
2547
|
+
var PLATFORM6 = import_chaindata_provider26.SolToken2022TokenSchema.shape.platform.value;
|
|
2548
|
+
|
|
2549
|
+
// src/modules/sol-token2022/fetchBalances.ts
|
|
2550
|
+
var import_web37 = require("@solana/web3.js");
|
|
2551
|
+
var import_chaindata_provider28 = require("@talismn/chaindata-provider");
|
|
2552
|
+
var import_util3 = require("@talismn/util");
|
|
2553
|
+
var import_lodash_es15 = require("lodash-es");
|
|
2554
|
+
|
|
2555
|
+
// src/modules/sol-token2022/onChainTokenMetadata.ts
|
|
2556
|
+
var import_mpl_token_metadata2 = require("@metaplex-foundation/mpl-token-metadata");
|
|
2557
|
+
var import_umi2 = require("@metaplex-foundation/umi");
|
|
2558
|
+
var import_spl_token3 = require("@solana/spl-token");
|
|
2559
|
+
var import_web36 = require("@solana/web3.js");
|
|
2560
|
+
var import_chaindata_provider27 = require("@talismn/chaindata-provider");
|
|
2561
|
+
var import_v49 = __toESM(require("zod/v4"));
|
|
2562
|
+
var TokenCacheSchema4 = import_v49.default.discriminatedUnion("isValid", [
|
|
2563
|
+
import_v49.default.strictObject({
|
|
2564
|
+
id: import_chaindata_provider27.SolToken2022TokenSchema.shape.id,
|
|
2565
|
+
isValid: import_v49.default.literal(true),
|
|
2566
|
+
...import_chaindata_provider27.SolToken2022TokenSchema.pick({ symbol: true, decimals: true, name: true, logo: true }).shape
|
|
2567
|
+
}),
|
|
2568
|
+
import_v49.default.strictObject({
|
|
2569
|
+
id: import_chaindata_provider27.SolToken2022TokenSchema.shape.id,
|
|
2570
|
+
isValid: import_v49.default.literal(false)
|
|
2571
|
+
})
|
|
2572
|
+
]);
|
|
2573
|
+
var METAPLEX_PROGRAM_ID2 = new import_web36.PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
|
|
2574
|
+
var ERROR_NO_MINT2 = "No mint info available";
|
|
2575
|
+
var ERROR_NO_METADATA2 = "No metadata account found";
|
|
2576
|
+
var ERROR_INVALID_DATA2 = "Invalid on-chain data";
|
|
2577
|
+
var fetchOnChainTokenData2 = async (connector, tokenId) => {
|
|
2578
|
+
try {
|
|
2579
|
+
const { networkId, mintAddress } = (0, import_chaindata_provider27.parseSolToken2022TokenId)(tokenId);
|
|
2580
|
+
const connection = await connector.getConnection(networkId);
|
|
2581
|
+
if (!connection) {
|
|
2582
|
+
log_default.warn(`No connection found for network ${networkId}`);
|
|
2583
|
+
return null;
|
|
2584
|
+
}
|
|
2585
|
+
const mintPubKey = new import_web36.PublicKey(mintAddress);
|
|
2586
|
+
const mintInfo = await connection.getAccountInfo(mintPubKey);
|
|
2587
|
+
if (!mintInfo?.data) throw new Error(ERROR_NO_MINT2);
|
|
2588
|
+
const mint = import_spl_token3.MintLayout.decode(mintInfo.data);
|
|
2589
|
+
const token2022Metadata = tryParseToken2022Metadata(mintInfo.data);
|
|
2590
|
+
if (token2022Metadata) {
|
|
2591
|
+
const parsed2 = TokenCacheSchema4.safeParse({
|
|
2592
|
+
id: tokenId,
|
|
2593
|
+
symbol: token2022Metadata.symbol.trim(),
|
|
2594
|
+
name: token2022Metadata.name.trim(),
|
|
2595
|
+
decimals: mint.decimals,
|
|
2596
|
+
isValid: true
|
|
2597
|
+
});
|
|
2598
|
+
if (parsed2.success) return parsed2.data;
|
|
2599
|
+
}
|
|
2600
|
+
const [metadataPDA] = import_web36.PublicKey.findProgramAddressSync(
|
|
2601
|
+
[Buffer.from("metadata"), METAPLEX_PROGRAM_ID2.toBuffer(), mintPubKey.toBuffer()],
|
|
2602
|
+
METAPLEX_PROGRAM_ID2
|
|
2603
|
+
);
|
|
2604
|
+
const metadataAccount = await connection.getAccountInfo(new import_web36.PublicKey(metadataPDA));
|
|
2605
|
+
if (!metadataAccount) throw new Error(ERROR_NO_METADATA2);
|
|
2606
|
+
const metadata = (0, import_mpl_token_metadata2.deserializeMetadata)({
|
|
2607
|
+
publicKey: (0, import_umi2.publicKey)(metadataPDA),
|
|
2608
|
+
executable: metadataAccount.executable,
|
|
2609
|
+
owner: (0, import_umi2.publicKey)(metadataAccount.owner),
|
|
2610
|
+
lamports: (0, import_umi2.sol)(metadataAccount.lamports),
|
|
2611
|
+
data: metadataAccount.data
|
|
2612
|
+
});
|
|
2613
|
+
const parsed = TokenCacheSchema4.safeParse({
|
|
2614
|
+
id: tokenId,
|
|
2615
|
+
symbol: metadata.symbol.trim(),
|
|
2616
|
+
name: metadata.name.trim(),
|
|
2617
|
+
decimals: mint.decimals,
|
|
2618
|
+
isValid: true
|
|
2619
|
+
});
|
|
2620
|
+
if (!parsed.success) throw new Error(ERROR_INVALID_DATA2);
|
|
2621
|
+
return parsed.data;
|
|
2622
|
+
} catch (err) {
|
|
2623
|
+
const msg = err.message;
|
|
2624
|
+
if ([ERROR_NO_MINT2, ERROR_NO_METADATA2, ERROR_INVALID_DATA2].includes(msg))
|
|
2625
|
+
return TokenCacheSchema4.parse({
|
|
2626
|
+
id: tokenId,
|
|
2627
|
+
isValid: false
|
|
2628
|
+
});
|
|
2629
|
+
log_default.warn("Failed to fetch sol-token2022 token data for %s", tokenId, { err });
|
|
2630
|
+
}
|
|
2631
|
+
return null;
|
|
2632
|
+
};
|
|
2633
|
+
var tryParseToken2022Metadata = (data) => {
|
|
2634
|
+
try {
|
|
2635
|
+
const TLV_START = 166;
|
|
2636
|
+
if (data.length <= TLV_START) return null;
|
|
2637
|
+
let offset = TLV_START;
|
|
2638
|
+
while (offset + 4 <= data.length) {
|
|
2639
|
+
const extType = data.readUInt16LE(offset);
|
|
2640
|
+
const extLen = data.readUInt16LE(offset + 2);
|
|
2641
|
+
const extDataStart = offset + 4;
|
|
2642
|
+
if (extType === 19 && extDataStart + extLen <= data.length) {
|
|
2643
|
+
let pos = extDataStart;
|
|
2644
|
+
pos += 64;
|
|
2645
|
+
const readLenPrefixed = () => {
|
|
2646
|
+
if (pos + 4 > data.length) throw new Error("out of bounds");
|
|
2647
|
+
const len = data.readUInt32LE(pos);
|
|
2648
|
+
pos += 4;
|
|
2649
|
+
if (pos + len > data.length) throw new Error("out of bounds");
|
|
2650
|
+
const str = data.subarray(pos, pos + len).toString("utf8");
|
|
2651
|
+
pos += len;
|
|
2652
|
+
return str;
|
|
2653
|
+
};
|
|
2654
|
+
const name = readLenPrefixed();
|
|
2655
|
+
const symbol = readLenPrefixed();
|
|
2656
|
+
const uri = readLenPrefixed();
|
|
2657
|
+
if (name && symbol) return { name, symbol, uri };
|
|
2658
|
+
}
|
|
2659
|
+
offset = extDataStart + extLen;
|
|
2660
|
+
}
|
|
2661
|
+
} catch {
|
|
2662
|
+
}
|
|
2663
|
+
return null;
|
|
2664
|
+
};
|
|
2665
|
+
|
|
2666
|
+
// src/modules/sol-token2022/fetchBalances.ts
|
|
2667
|
+
var TOKEN_2022_PROGRAM_ID = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb";
|
|
2668
|
+
var dynamicTokenMetadataCache2 = /* @__PURE__ */ new Map();
|
|
2669
|
+
var fetchBalances6 = async ({
|
|
2670
|
+
networkId,
|
|
2671
|
+
tokensWithAddresses,
|
|
2672
|
+
connector
|
|
2673
|
+
}) => {
|
|
2674
|
+
if (!tokensWithAddresses.length) return { success: [], errors: [] };
|
|
2675
|
+
const connection = await connector.getConnection(networkId);
|
|
2676
|
+
if (!connection) throw new Error(`Could not get connection for Solana network ${networkId}`);
|
|
2677
|
+
const accountAddresses = (0, import_lodash_es15.uniq)(tokensWithAddresses.flatMap(([, addresses]) => addresses));
|
|
2678
|
+
const knownTokenIds = new Set(tokensWithAddresses.map(([token]) => token.id));
|
|
2679
|
+
const unknownMints = /* @__PURE__ */ new Set();
|
|
2680
|
+
const balancesPerAddress = await Promise.all(
|
|
2681
|
+
accountAddresses.map(async (address) => {
|
|
2682
|
+
const tokenAccounts = await connection.getParsedTokenAccountsByOwner(new import_web37.PublicKey(address), {
|
|
2683
|
+
programId: new import_web37.PublicKey(TOKEN_2022_PROGRAM_ID)
|
|
2684
|
+
});
|
|
2685
|
+
const balances = tokenAccounts.value.map((d) => {
|
|
2686
|
+
try {
|
|
2687
|
+
const mintAddress = d.account.data.parsed.info.mint;
|
|
2688
|
+
const value = d.account.data.parsed.info.tokenAmount.amount ?? "0";
|
|
2689
|
+
const tokenId = (0, import_chaindata_provider28.solToken2022TokenId)(networkId, mintAddress);
|
|
2690
|
+
if (!knownTokenIds.has(tokenId) && value !== "0") unknownMints.add(mintAddress);
|
|
2691
|
+
return {
|
|
2692
|
+
tokenId,
|
|
2693
|
+
networkId,
|
|
2694
|
+
address,
|
|
2695
|
+
source: MODULE_TYPE6,
|
|
2696
|
+
status: "live",
|
|
2697
|
+
value
|
|
2698
|
+
};
|
|
2699
|
+
} catch {
|
|
2700
|
+
log_default.warn("Failed to parse token amount", {
|
|
2701
|
+
address,
|
|
2702
|
+
d
|
|
2703
|
+
});
|
|
2704
|
+
return null;
|
|
2705
|
+
}
|
|
2706
|
+
}).filter(import_util3.isNotNil);
|
|
2707
|
+
setDetectedTokenIds(
|
|
2708
|
+
address,
|
|
2709
|
+
MODULE_TYPE6,
|
|
2710
|
+
balances.map((b) => b.tokenId)
|
|
2711
|
+
);
|
|
2712
|
+
return [address, balances];
|
|
2713
|
+
})
|
|
2714
|
+
);
|
|
2715
|
+
const dynamicTokens = [];
|
|
2716
|
+
if (unknownMints.size) {
|
|
2717
|
+
await Promise.all(
|
|
2718
|
+
Array.from(unknownMints).map(async (mintAddress) => {
|
|
2719
|
+
const tokenId = (0, import_chaindata_provider28.solToken2022TokenId)(networkId, mintAddress);
|
|
2720
|
+
let cached = dynamicTokenMetadataCache2.get(tokenId);
|
|
2721
|
+
if (!cached) {
|
|
2722
|
+
const fetched = await fetchOnChainTokenData2(connector, tokenId);
|
|
2723
|
+
if (fetched) {
|
|
2724
|
+
dynamicTokenMetadataCache2.set(tokenId, fetched);
|
|
2725
|
+
cached = fetched;
|
|
2726
|
+
}
|
|
2727
|
+
}
|
|
2728
|
+
if (!cached || !cached.isValid) return;
|
|
2729
|
+
const token = {
|
|
2730
|
+
id: tokenId,
|
|
2731
|
+
type: MODULE_TYPE6,
|
|
2732
|
+
platform: PLATFORM6,
|
|
2733
|
+
networkId,
|
|
2734
|
+
mintAddress,
|
|
2735
|
+
isDefault: true,
|
|
2736
|
+
symbol: cached.symbol,
|
|
2737
|
+
decimals: cached.decimals,
|
|
2738
|
+
...cached.name !== void 0 ? { name: cached.name } : {},
|
|
2739
|
+
...cached.logo !== void 0 ? { logo: cached.logo } : {}
|
|
2740
|
+
};
|
|
2741
|
+
const parsed = import_chaindata_provider28.SolToken2022TokenSchema.safeParse(token);
|
|
2742
|
+
if (!parsed.success) {
|
|
2743
|
+
log_default.warn("Ignoring dynamic sol-token2022 token with invalid schema", { token });
|
|
2744
|
+
return;
|
|
2745
|
+
}
|
|
2746
|
+
dynamicTokens.push(parsed.data);
|
|
2747
|
+
})
|
|
2748
|
+
);
|
|
2749
|
+
}
|
|
2750
|
+
const registeredDynamicIds = new Set(dynamicTokens.map((t) => t.id));
|
|
2751
|
+
const allBalancesByKey = (0, import_lodash_es15.keyBy)(
|
|
2752
|
+
balancesPerAddress.flatMap(([, addressBalances]) => addressBalances),
|
|
2753
|
+
(b) => getBalanceKey2(b.tokenId, b.address)
|
|
2754
|
+
);
|
|
2755
|
+
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
2756
|
+
const success = balanceDefs.map((bd) => {
|
|
2757
|
+
const found = allBalancesByKey[getBalanceKey2(bd.token.id, bd.address)];
|
|
2758
|
+
return found ?? {
|
|
2759
|
+
tokenId: bd.token.id,
|
|
2760
|
+
networkId: bd.token.networkId,
|
|
2761
|
+
address: bd.address,
|
|
2762
|
+
source: MODULE_TYPE6,
|
|
2763
|
+
status: "live",
|
|
2764
|
+
value: "0"
|
|
2765
|
+
};
|
|
2766
|
+
});
|
|
2767
|
+
for (const balance of balancesPerAddress.flatMap(([, addressBalances]) => addressBalances)) {
|
|
2768
|
+
if (registeredDynamicIds.has(balance.tokenId)) success.push(balance);
|
|
2769
|
+
}
|
|
2770
|
+
return { success, errors: [], dynamicTokens };
|
|
2771
|
+
};
|
|
2772
|
+
var getBalanceKey2 = (tokenId, address) => `${tokenId}:${address}`;
|
|
2773
|
+
|
|
2774
|
+
// src/modules/sol-token2022/fetchTokens.ts
|
|
2775
|
+
var import_chaindata_provider29 = require("@talismn/chaindata-provider");
|
|
2776
|
+
var import_lodash_es16 = require("lodash-es");
|
|
2777
|
+
var fetchTokens6 = async ({
|
|
2778
|
+
networkId,
|
|
2779
|
+
tokens,
|
|
2780
|
+
connector,
|
|
2781
|
+
cache
|
|
2782
|
+
}) => {
|
|
2783
|
+
const result = [];
|
|
2784
|
+
for (const tokenConfig of tokens) {
|
|
2785
|
+
const tokenId = (0, import_chaindata_provider29.solToken2022TokenId)(networkId, tokenConfig.mintAddress);
|
|
2786
|
+
let cached = cache[tokenId] && TokenCacheSchema4.safeParse(cache[tokenId]).data;
|
|
2787
|
+
if (!cached) {
|
|
2788
|
+
const tokenInfo = await fetchOnChainTokenData2(connector, tokenId);
|
|
2789
|
+
if (tokenInfo) cache[tokenId] = tokenInfo;
|
|
2790
|
+
}
|
|
2791
|
+
cached = cache[tokenId] && TokenCacheSchema4.safeParse(cache[tokenId]).data;
|
|
2792
|
+
if (cached?.isValid === false) continue;
|
|
2793
|
+
const base = {
|
|
2794
|
+
id: tokenId,
|
|
2795
|
+
type: MODULE_TYPE6,
|
|
2796
|
+
platform: PLATFORM6,
|
|
2797
|
+
networkId
|
|
2798
|
+
};
|
|
2799
|
+
const token = (0, import_lodash_es16.assign)(
|
|
2800
|
+
base,
|
|
2801
|
+
cached?.isValid ? (0, import_lodash_es16.omit)(cached, ["isValid"]) : {},
|
|
2802
|
+
tokenConfig
|
|
2803
|
+
);
|
|
2804
|
+
const parsed = import_chaindata_provider29.SolToken2022TokenSchema.safeParse(token);
|
|
2805
|
+
if (!parsed.success) {
|
|
2806
|
+
log_default.warn("Ignoring token with invalid SolToken2022TokenSchema", {
|
|
2807
|
+
token
|
|
2808
|
+
});
|
|
2809
|
+
continue;
|
|
2810
|
+
}
|
|
2811
|
+
result.push(parsed.data);
|
|
2812
|
+
}
|
|
2813
|
+
return result;
|
|
2814
|
+
};
|
|
2815
|
+
|
|
2816
|
+
// src/modules/sol-token2022/getMiniMetadata.ts
|
|
2817
|
+
var getMiniMetadata6 = () => {
|
|
2818
|
+
throw new Error("MiniMetadata is not supported for solana tokens");
|
|
2819
|
+
};
|
|
2820
|
+
|
|
2821
|
+
// src/modules/sol-token2022/getTransferCallData.ts
|
|
2822
|
+
var import_spl_token4 = require("@solana/spl-token");
|
|
2823
|
+
var import_web38 = require("@solana/web3.js");
|
|
2824
|
+
var import_chaindata_provider30 = require("@talismn/chaindata-provider");
|
|
2825
|
+
var getTransferCallData6 = async ({ from: from2, to, value, token, connector }) => {
|
|
2826
|
+
if (!(0, import_chaindata_provider30.isTokenOfType)(token, MODULE_TYPE6))
|
|
2827
|
+
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE6}.`);
|
|
2828
|
+
const connection = await connector.getConnection(token.networkId);
|
|
2829
|
+
const mintPubkey = new import_web38.PublicKey(token.mintAddress);
|
|
2830
|
+
const fromWallet = new import_web38.PublicKey(from2);
|
|
2831
|
+
const toWallet = new import_web38.PublicKey(to);
|
|
2832
|
+
const mintAccount = await (0, import_spl_token4.getMint)(connection, mintPubkey, void 0, import_spl_token4.TOKEN_2022_PROGRAM_ID);
|
|
2833
|
+
const nonTransferable = (0, import_spl_token4.getNonTransferable)(mintAccount);
|
|
2834
|
+
if (nonTransferable) throw new Error("This token is non-transferable.");
|
|
2835
|
+
const transferFeeConfig = (0, import_spl_token4.getTransferFeeConfig)(mintAccount);
|
|
2836
|
+
const transferHook = (0, import_spl_token4.getTransferHook)(mintAccount);
|
|
2837
|
+
const instructions = [];
|
|
2838
|
+
const fromTokenAccount = await (0, import_spl_token4.getAssociatedTokenAddress)(
|
|
2839
|
+
mintPubkey,
|
|
2840
|
+
fromWallet,
|
|
2841
|
+
false,
|
|
2842
|
+
import_spl_token4.TOKEN_2022_PROGRAM_ID
|
|
2843
|
+
);
|
|
2844
|
+
const toTokenAccount = await (0, import_spl_token4.getAssociatedTokenAddress)(
|
|
2845
|
+
mintPubkey,
|
|
2846
|
+
toWallet,
|
|
2847
|
+
false,
|
|
2848
|
+
import_spl_token4.TOKEN_2022_PROGRAM_ID
|
|
2849
|
+
);
|
|
2850
|
+
if (!await tokenAccountExists2(connection, toTokenAccount)) {
|
|
2851
|
+
instructions.push(
|
|
2852
|
+
(0, import_spl_token4.createAssociatedTokenAccountInstruction)(
|
|
2853
|
+
fromWallet,
|
|
2854
|
+
toTokenAccount,
|
|
2855
|
+
toWallet,
|
|
2856
|
+
mintPubkey,
|
|
2857
|
+
import_spl_token4.TOKEN_2022_PROGRAM_ID
|
|
2858
|
+
)
|
|
2859
|
+
);
|
|
2860
|
+
}
|
|
2861
|
+
const amount = BigInt(value);
|
|
2862
|
+
const transferFee = transferFeeConfig ? await calculateCurrentEpochTransferFee(connection, transferFeeConfig, amount) : 0n;
|
|
2863
|
+
if (transferFeeConfig && transferHook) {
|
|
2864
|
+
instructions.push(
|
|
2865
|
+
await (0, import_spl_token4.createTransferCheckedWithFeeAndTransferHookInstruction)(
|
|
2866
|
+
connection,
|
|
2867
|
+
fromTokenAccount,
|
|
2868
|
+
mintPubkey,
|
|
2869
|
+
toTokenAccount,
|
|
2870
|
+
fromWallet,
|
|
2871
|
+
amount,
|
|
2872
|
+
token.decimals,
|
|
2873
|
+
transferFee,
|
|
2874
|
+
[],
|
|
2875
|
+
void 0,
|
|
2876
|
+
import_spl_token4.TOKEN_2022_PROGRAM_ID
|
|
2877
|
+
)
|
|
2878
|
+
);
|
|
2879
|
+
} else if (transferFeeConfig) {
|
|
2880
|
+
instructions.push(
|
|
2881
|
+
(0, import_spl_token4.createTransferCheckedWithFeeInstruction)(
|
|
2882
|
+
fromTokenAccount,
|
|
2883
|
+
mintPubkey,
|
|
2884
|
+
toTokenAccount,
|
|
2885
|
+
fromWallet,
|
|
2886
|
+
amount,
|
|
2887
|
+
token.decimals,
|
|
2888
|
+
transferFee,
|
|
2889
|
+
[],
|
|
2890
|
+
import_spl_token4.TOKEN_2022_PROGRAM_ID
|
|
2891
|
+
)
|
|
2892
|
+
);
|
|
2893
|
+
} else if (transferHook) {
|
|
2894
|
+
instructions.push(
|
|
2895
|
+
await (0, import_spl_token4.createTransferCheckedWithTransferHookInstruction)(
|
|
2896
|
+
connection,
|
|
2897
|
+
fromTokenAccount,
|
|
2898
|
+
mintPubkey,
|
|
2899
|
+
toTokenAccount,
|
|
2900
|
+
fromWallet,
|
|
2901
|
+
amount,
|
|
2902
|
+
token.decimals,
|
|
2903
|
+
[],
|
|
2904
|
+
void 0,
|
|
2905
|
+
import_spl_token4.TOKEN_2022_PROGRAM_ID
|
|
2906
|
+
)
|
|
2907
|
+
);
|
|
2908
|
+
} else {
|
|
2909
|
+
instructions.push(
|
|
2910
|
+
(0, import_spl_token4.createTransferCheckedInstruction)(
|
|
2911
|
+
fromTokenAccount,
|
|
2912
|
+
mintPubkey,
|
|
2913
|
+
toTokenAccount,
|
|
2914
|
+
fromWallet,
|
|
2915
|
+
amount,
|
|
2916
|
+
token.decimals,
|
|
2917
|
+
[],
|
|
2918
|
+
import_spl_token4.TOKEN_2022_PROGRAM_ID
|
|
2919
|
+
)
|
|
2920
|
+
);
|
|
2921
|
+
}
|
|
2922
|
+
return instructions;
|
|
2923
|
+
};
|
|
2924
|
+
var tokenAccountExists2 = async (connection, address) => {
|
|
2925
|
+
try {
|
|
2926
|
+
await (0, import_spl_token4.getAccount)(connection, address, void 0, import_spl_token4.TOKEN_2022_PROGRAM_ID);
|
|
2927
|
+
return true;
|
|
2928
|
+
} catch {
|
|
2929
|
+
return false;
|
|
2930
|
+
}
|
|
2931
|
+
};
|
|
2932
|
+
var calculateToken2022TransferFee = (transferFeeConfig, epoch, amount) => {
|
|
2933
|
+
return (0, import_spl_token4.calculateEpochFee)(transferFeeConfig, epoch, amount);
|
|
2934
|
+
};
|
|
2935
|
+
var calculateCurrentEpochTransferFee = async (connection, transferFeeConfig, amount) => {
|
|
2936
|
+
const { epoch } = await connection.getEpochInfo();
|
|
2937
|
+
return calculateToken2022TransferFee(transferFeeConfig, BigInt(epoch), amount);
|
|
2938
|
+
};
|
|
2939
|
+
|
|
2940
|
+
// src/modules/sol-token2022/subscribeBalances.ts
|
|
2941
|
+
var import_lodash_es17 = require("lodash-es");
|
|
2942
|
+
var import_rxjs8 = require("rxjs");
|
|
2943
|
+
var SUBSCRIPTION_INTERVAL6 = 6e3;
|
|
2944
|
+
var subscribeBalances6 = ({
|
|
2945
|
+
networkId,
|
|
2946
|
+
tokensWithAddresses,
|
|
2947
|
+
connector
|
|
2948
|
+
}) => {
|
|
2949
|
+
if (!tokensWithAddresses.length) return (0, import_rxjs8.of)({ success: [], errors: [] });
|
|
2950
|
+
return new import_rxjs8.Observable((subscriber) => {
|
|
2951
|
+
const abortController = new AbortController();
|
|
2952
|
+
const poll = async () => {
|
|
2953
|
+
try {
|
|
2954
|
+
if (abortController.signal.aborted) return;
|
|
2955
|
+
const balances = await fetchBalances6({
|
|
2956
|
+
networkId,
|
|
2957
|
+
tokensWithAddresses,
|
|
2958
|
+
connector
|
|
2959
|
+
});
|
|
2960
|
+
if (abortController.signal.aborted) return;
|
|
2961
|
+
subscriber.next(balances);
|
|
2962
|
+
setTimeout(poll, SUBSCRIPTION_INTERVAL6);
|
|
2963
|
+
} catch (error) {
|
|
2964
|
+
log_default.error("Error", {
|
|
2965
|
+
module: MODULE_TYPE6,
|
|
2966
|
+
networkId,
|
|
2967
|
+
addressesByToken: tokensWithAddresses,
|
|
2968
|
+
error
|
|
2969
|
+
});
|
|
2970
|
+
subscriber.error(error);
|
|
2971
|
+
}
|
|
2972
|
+
};
|
|
2973
|
+
poll();
|
|
2974
|
+
return () => {
|
|
2975
|
+
abortController.abort();
|
|
2976
|
+
};
|
|
2977
|
+
}).pipe((0, import_rxjs8.distinctUntilChanged)(import_lodash_es17.isEqual));
|
|
2978
|
+
};
|
|
2979
|
+
|
|
2980
|
+
// src/modules/sol-token2022/module.ts
|
|
2981
|
+
var SolToken2022BalanceModule = {
|
|
2982
|
+
type: MODULE_TYPE6,
|
|
2983
|
+
platform: PLATFORM6,
|
|
2984
|
+
getMiniMetadata: getMiniMetadata6,
|
|
2985
|
+
fetchTokens: fetchTokens6,
|
|
2986
|
+
fetchBalances: fetchBalances6,
|
|
2987
|
+
subscribeBalances: subscribeBalances6,
|
|
2988
|
+
getTransferCallData: getTransferCallData6
|
|
2989
|
+
};
|
|
2990
|
+
|
|
2991
|
+
// src/modules/sol-token2022/types.ts
|
|
2992
|
+
var import_chaindata_provider31 = require("@talismn/chaindata-provider");
|
|
2993
|
+
var import_v410 = __toESM(require("zod/v4"));
|
|
2994
|
+
var SolToken2022TokenConfigSchema = import_v410.default.strictObject({
|
|
2995
|
+
mintAddress: import_chaindata_provider31.SolToken2022TokenSchema.shape.mintAddress,
|
|
2495
2996
|
...TokenConfigBaseSchema.shape
|
|
2496
2997
|
});
|
|
2497
2998
|
|
|
2498
2999
|
// src/modules/substrate-assets/config.ts
|
|
2499
|
-
var
|
|
2500
|
-
var
|
|
2501
|
-
var
|
|
3000
|
+
var import_chaindata_provider32 = require("@talismn/chaindata-provider");
|
|
3001
|
+
var MODULE_TYPE7 = import_chaindata_provider32.SubAssetsTokenSchema.shape.type.value;
|
|
3002
|
+
var PLATFORM7 = import_chaindata_provider32.SubAssetsTokenSchema.shape.platform.value;
|
|
2502
3003
|
|
|
2503
3004
|
// src/modules/substrate-assets/buildQueries.ts
|
|
2504
3005
|
var import_scale4 = require("@talismn/scale");
|
|
2505
|
-
var
|
|
3006
|
+
var import_util4 = require("@talismn/util");
|
|
2506
3007
|
var buildQueries = (networkId, balanceDefs, miniMetadata) => {
|
|
2507
3008
|
const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
|
|
2508
3009
|
storage: ["Assets", "Account"]
|
|
@@ -2551,7 +3052,7 @@ var buildQueries = (networkId, balanceDefs, miniMetadata) => {
|
|
|
2551
3052
|
stateKeys: [stateKey],
|
|
2552
3053
|
decodeResult
|
|
2553
3054
|
};
|
|
2554
|
-
}).filter(
|
|
3055
|
+
}).filter(import_util4.isNotNil);
|
|
2555
3056
|
};
|
|
2556
3057
|
var tryEncode = (scaleCoder, ...args) => {
|
|
2557
3058
|
try {
|
|
@@ -2562,7 +3063,7 @@ var tryEncode = (scaleCoder, ...args) => {
|
|
|
2562
3063
|
};
|
|
2563
3064
|
|
|
2564
3065
|
// src/modules/substrate-assets/fetchBalances.ts
|
|
2565
|
-
var
|
|
3066
|
+
var fetchBalances7 = async ({
|
|
2566
3067
|
networkId,
|
|
2567
3068
|
tokensWithAddresses,
|
|
2568
3069
|
connector,
|
|
@@ -2571,7 +3072,7 @@ var fetchBalances6 = async ({
|
|
|
2571
3072
|
if (!tokensWithAddresses.length) return { success: [], errors: [] };
|
|
2572
3073
|
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
2573
3074
|
if (!miniMetadata?.data) {
|
|
2574
|
-
log_default.warn(`MiniMetadata is required for fetching ${
|
|
3075
|
+
log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE7} balances on ${networkId}.`);
|
|
2575
3076
|
return {
|
|
2576
3077
|
success: [],
|
|
2577
3078
|
errors: balanceDefs.map((def) => ({
|
|
@@ -2581,20 +3082,20 @@ var fetchBalances6 = async ({
|
|
|
2581
3082
|
}))
|
|
2582
3083
|
};
|
|
2583
3084
|
}
|
|
2584
|
-
if (miniMetadata.source !==
|
|
2585
|
-
log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${
|
|
3085
|
+
if (miniMetadata.source !== MODULE_TYPE7) {
|
|
3086
|
+
log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE7}.`);
|
|
2586
3087
|
return {
|
|
2587
3088
|
success: [],
|
|
2588
3089
|
errors: balanceDefs.map((def) => ({
|
|
2589
3090
|
tokenId: def.token.id,
|
|
2590
3091
|
address: def.address,
|
|
2591
|
-
error: new Error(`Invalid request: miniMetadata source is not ${
|
|
3092
|
+
error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE7}`)
|
|
2592
3093
|
}))
|
|
2593
3094
|
};
|
|
2594
3095
|
}
|
|
2595
3096
|
if (miniMetadata.chainId !== networkId) {
|
|
2596
3097
|
log_default.warn(
|
|
2597
|
-
`Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${
|
|
3098
|
+
`Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE7}. Expected chainId is ${networkId}`
|
|
2598
3099
|
);
|
|
2599
3100
|
return {
|
|
2600
3101
|
success: [],
|
|
@@ -2618,7 +3119,7 @@ var fetchBalances6 = async ({
|
|
|
2618
3119
|
address: def.address,
|
|
2619
3120
|
networkId,
|
|
2620
3121
|
tokenId: def.token.id,
|
|
2621
|
-
source:
|
|
3122
|
+
source: MODULE_TYPE7,
|
|
2622
3123
|
status: "live",
|
|
2623
3124
|
values: [
|
|
2624
3125
|
{ type: "free", label: "free", amount: "0" },
|
|
@@ -2632,10 +3133,10 @@ var fetchBalances6 = async ({
|
|
|
2632
3133
|
};
|
|
2633
3134
|
|
|
2634
3135
|
// src/modules/substrate-assets/fetchTokens.ts
|
|
2635
|
-
var
|
|
3136
|
+
var import_chaindata_provider33 = require("@talismn/chaindata-provider");
|
|
2636
3137
|
var import_scale5 = require("@talismn/scale");
|
|
2637
|
-
var
|
|
2638
|
-
var
|
|
3138
|
+
var import_lodash_es18 = require("lodash-es");
|
|
3139
|
+
var fetchTokens7 = async ({
|
|
2639
3140
|
networkId,
|
|
2640
3141
|
tokens,
|
|
2641
3142
|
connector,
|
|
@@ -2660,7 +3161,7 @@ var fetchTokens6 = async ({
|
|
|
2660
3161
|
]);
|
|
2661
3162
|
const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
|
|
2662
3163
|
const metadataStorageEntries = metadataStorageResults.length ? metadataStorageResults[0].changes : [];
|
|
2663
|
-
const assetByAssetId = (0,
|
|
3164
|
+
const assetByAssetId = (0, import_lodash_es18.keyBy)(
|
|
2664
3165
|
assetStorageEntries.map(([key, value]) => {
|
|
2665
3166
|
const [assetId] = assetCodec.keys.dec(key);
|
|
2666
3167
|
const asset = assetCodec.value.dec(value);
|
|
@@ -2668,7 +3169,7 @@ var fetchTokens6 = async ({
|
|
|
2668
3169
|
}),
|
|
2669
3170
|
(a) => a.assetId
|
|
2670
3171
|
);
|
|
2671
|
-
const metadataByAssetId = (0,
|
|
3172
|
+
const metadataByAssetId = (0, import_lodash_es18.keyBy)(
|
|
2672
3173
|
metadataStorageEntries.map(([key, value]) => {
|
|
2673
3174
|
const [assetId] = metadataCodec.keys.dec(key);
|
|
2674
3175
|
const metadata = metadataCodec.value.dec(value);
|
|
@@ -2682,14 +3183,14 @@ var fetchTokens6 = async ({
|
|
|
2682
3183
|
}),
|
|
2683
3184
|
(a) => a.assetId
|
|
2684
3185
|
);
|
|
2685
|
-
const allTokens = (0,
|
|
2686
|
-
(assetId) => (0,
|
|
3186
|
+
const allTokens = (0, import_lodash_es18.keys)(assetByAssetId).map(
|
|
3187
|
+
(assetId) => (0, import_lodash_es18.assign)({}, assetByAssetId[assetId], metadataByAssetId[assetId] ?? void 0)
|
|
2687
3188
|
);
|
|
2688
|
-
const configTokenByAssetId = (0,
|
|
3189
|
+
const configTokenByAssetId = (0, import_lodash_es18.keyBy)(tokens, (t) => t.assetId);
|
|
2689
3190
|
return allTokens.map(
|
|
2690
3191
|
(asset) => ({
|
|
2691
|
-
id: (0,
|
|
2692
|
-
type:
|
|
3192
|
+
id: (0, import_chaindata_provider33.subAssetTokenId)(networkId, String(asset.assetId)),
|
|
3193
|
+
type: MODULE_TYPE7,
|
|
2693
3194
|
platform: "polkadot",
|
|
2694
3195
|
networkId,
|
|
2695
3196
|
assetId: String(asset.assetId),
|
|
@@ -2706,21 +3207,21 @@ var fetchTokens6 = async ({
|
|
|
2706
3207
|
return configToken || token.isSufficient;
|
|
2707
3208
|
}).map((token) => {
|
|
2708
3209
|
const configToken = configTokenByAssetId[token.assetId];
|
|
2709
|
-
return configToken ? (0,
|
|
3210
|
+
return configToken ? (0, import_lodash_es18.assign)({}, token, configToken) : token;
|
|
2710
3211
|
}).filter((t) => {
|
|
2711
|
-
const parsed =
|
|
3212
|
+
const parsed = import_chaindata_provider33.SubAssetsTokenSchema.safeParse(t);
|
|
2712
3213
|
return parsed.success;
|
|
2713
3214
|
});
|
|
2714
3215
|
};
|
|
2715
3216
|
|
|
2716
3217
|
// src/modules/substrate-assets/getMiniMetadata.ts
|
|
2717
|
-
var
|
|
3218
|
+
var import_chaindata_provider44 = require("@talismn/chaindata-provider");
|
|
2718
3219
|
var import_scale11 = require("@talismn/scale");
|
|
2719
3220
|
|
|
2720
3221
|
// src/types/balances.ts
|
|
2721
|
-
var
|
|
3222
|
+
var import_chaindata_provider42 = require("@talismn/chaindata-provider");
|
|
2722
3223
|
var import_token_rates2 = require("@talismn/token-rates");
|
|
2723
|
-
var
|
|
3224
|
+
var import_util7 = require("@talismn/util");
|
|
2724
3225
|
var import_bignumber2 = __toESM(require("bignumber.js"));
|
|
2725
3226
|
|
|
2726
3227
|
// src/modules/substrate-dtao/alphaPrice.ts
|
|
@@ -2740,12 +3241,12 @@ var taoToAlpha = (tao, scaledAlphaPrice) => {
|
|
|
2740
3241
|
};
|
|
2741
3242
|
|
|
2742
3243
|
// src/modules/substrate-dtao/getDtaoTokenRates.ts
|
|
2743
|
-
var
|
|
3244
|
+
var import_chaindata_provider34 = require("@talismn/chaindata-provider");
|
|
2744
3245
|
var import_token_rates = require("@talismn/token-rates");
|
|
2745
3246
|
var ONE_ALPHA = 10n ** TAO_DECIMALS;
|
|
2746
3247
|
var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice) => {
|
|
2747
3248
|
try {
|
|
2748
|
-
const taoTokenId = (0,
|
|
3249
|
+
const taoTokenId = (0, import_chaindata_provider34.subNativeTokenId)(token.networkId);
|
|
2749
3250
|
const taoTokenRates = tokenRates[taoTokenId];
|
|
2750
3251
|
if (!taoTokenRates) return null;
|
|
2751
3252
|
if (token.netuid === 0) return structuredClone(taoTokenRates);
|
|
@@ -2772,18 +3273,18 @@ var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice) => {
|
|
|
2772
3273
|
};
|
|
2773
3274
|
|
|
2774
3275
|
// src/modules/substrate-dtao/config.ts
|
|
2775
|
-
var
|
|
2776
|
-
var
|
|
2777
|
-
var
|
|
3276
|
+
var import_chaindata_provider35 = require("@talismn/chaindata-provider");
|
|
3277
|
+
var MODULE_TYPE8 = import_chaindata_provider35.SubDTaoTokenSchema.shape.type.value;
|
|
3278
|
+
var PLATFORM8 = import_chaindata_provider35.SubDTaoTokenSchema.shape.platform.value;
|
|
2778
3279
|
|
|
2779
3280
|
// src/modules/substrate-dtao/fetchBalances.ts
|
|
2780
|
-
var
|
|
3281
|
+
var import_chaindata_provider37 = require("@talismn/chaindata-provider");
|
|
2781
3282
|
var import_scale6 = require("@talismn/scale");
|
|
2782
|
-
var
|
|
2783
|
-
var
|
|
3283
|
+
var import_util5 = require("@talismn/util");
|
|
3284
|
+
var import_lodash_es19 = require("lodash-es");
|
|
2784
3285
|
|
|
2785
3286
|
// src/modules/substrate-dtao/calculatePendingRootClaimable.ts
|
|
2786
|
-
var
|
|
3287
|
+
var import_chaindata_provider36 = require("@talismn/chaindata-provider");
|
|
2787
3288
|
var calculatePendingRootClaimable = ({
|
|
2788
3289
|
stake,
|
|
2789
3290
|
hotkey,
|
|
@@ -2805,8 +3306,8 @@ var calculatePendingRootClaimable = ({
|
|
|
2805
3306
|
const pendingRootClaim = totalClaimable > alreadyClaimed ? totalClaimable - alreadyClaimed : 0n;
|
|
2806
3307
|
pendingRootClaimBalances.push({
|
|
2807
3308
|
address,
|
|
2808
|
-
tokenId: (0,
|
|
2809
|
-
baseTokenId: (0,
|
|
3309
|
+
tokenId: (0, import_chaindata_provider36.subDTaoTokenId)(networkId, netuid, hotkey),
|
|
3310
|
+
baseTokenId: (0, import_chaindata_provider36.subDTaoTokenId)(networkId, netuid),
|
|
2810
3311
|
hotkey,
|
|
2811
3312
|
netuid,
|
|
2812
3313
|
scaledAlphaPrice,
|
|
@@ -2819,7 +3320,7 @@ var calculatePendingRootClaimable = ({
|
|
|
2819
3320
|
|
|
2820
3321
|
// src/modules/substrate-dtao/fetchBalances.ts
|
|
2821
3322
|
var ROOT_NETUID = 0;
|
|
2822
|
-
var
|
|
3323
|
+
var fetchBalances8 = async ({
|
|
2823
3324
|
networkId,
|
|
2824
3325
|
tokensWithAddresses,
|
|
2825
3326
|
connector,
|
|
@@ -2828,7 +3329,7 @@ var fetchBalances7 = async ({
|
|
|
2828
3329
|
if (!tokensWithAddresses.length) return { success: [], errors: [] };
|
|
2829
3330
|
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
2830
3331
|
if (!miniMetadata?.data) {
|
|
2831
|
-
log_default.warn(`MiniMetadata is required for fetching ${
|
|
3332
|
+
log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE8} balances on ${networkId}.`, {
|
|
2832
3333
|
tokensWithAddresses
|
|
2833
3334
|
});
|
|
2834
3335
|
return {
|
|
@@ -2840,20 +3341,20 @@ var fetchBalances7 = async ({
|
|
|
2840
3341
|
}))
|
|
2841
3342
|
};
|
|
2842
3343
|
}
|
|
2843
|
-
if (miniMetadata.source !==
|
|
2844
|
-
log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${
|
|
3344
|
+
if (miniMetadata.source !== MODULE_TYPE8) {
|
|
3345
|
+
log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE8}.`);
|
|
2845
3346
|
return {
|
|
2846
3347
|
success: [],
|
|
2847
3348
|
errors: balanceDefs.map((def) => ({
|
|
2848
3349
|
tokenId: def.token.id,
|
|
2849
3350
|
address: def.address,
|
|
2850
|
-
error: new Error(`Invalid request: miniMetadata source is not ${
|
|
3351
|
+
error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE8}`)
|
|
2851
3352
|
}))
|
|
2852
3353
|
};
|
|
2853
3354
|
}
|
|
2854
3355
|
if (miniMetadata.chainId !== networkId) {
|
|
2855
3356
|
log_default.warn(
|
|
2856
|
-
`Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${
|
|
3357
|
+
`Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE8}. Expected chainId is ${networkId}`
|
|
2857
3358
|
);
|
|
2858
3359
|
return {
|
|
2859
3360
|
success: [],
|
|
@@ -2864,7 +3365,7 @@ var fetchBalances7 = async ({
|
|
|
2864
3365
|
}))
|
|
2865
3366
|
};
|
|
2866
3367
|
}
|
|
2867
|
-
const addresses = (0,
|
|
3368
|
+
const addresses = (0, import_lodash_es19.uniq)(balanceDefs.map((def) => def.address));
|
|
2868
3369
|
try {
|
|
2869
3370
|
const [stakeInfos, dynamicInfos] = await Promise.all([
|
|
2870
3371
|
fetchRuntimeCallResult(
|
|
@@ -2884,7 +3385,7 @@ var fetchBalances7 = async ({
|
|
|
2884
3385
|
[]
|
|
2885
3386
|
)
|
|
2886
3387
|
]);
|
|
2887
|
-
const rootHotkeys = (0,
|
|
3388
|
+
const rootHotkeys = (0, import_lodash_es19.uniq)(
|
|
2888
3389
|
stakeInfos.flatMap(
|
|
2889
3390
|
([, stakes]) => stakes.filter((stake) => stake.netuid === ROOT_NETUID).map((stake) => stake.hotkey)
|
|
2890
3391
|
)
|
|
@@ -2909,7 +3410,7 @@ var fetchBalances7 = async ({
|
|
|
2909
3410
|
miniMetadata.data,
|
|
2910
3411
|
addressHotkeyNetuidPairs
|
|
2911
3412
|
) : /* @__PURE__ */ new Map();
|
|
2912
|
-
const dynamicInfoByNetuid = (0,
|
|
3413
|
+
const dynamicInfoByNetuid = (0, import_lodash_es19.keyBy)(dynamicInfos.filter(import_util5.isNotNil), (info) => info.netuid);
|
|
2913
3414
|
const upsertBalance = (acc, address, tokenId, balance) => {
|
|
2914
3415
|
const key = `${address}:${tokenId}`;
|
|
2915
3416
|
const recordedBalance = acc[key];
|
|
@@ -2933,8 +3434,8 @@ var fetchBalances7 = async ({
|
|
|
2933
3434
|
const scaledAlphaPrice = dynamicInfo ? getScaledAlphaPrice(dynamicInfo.alpha_in, dynamicInfo.tao_in) : 0n;
|
|
2934
3435
|
const balance = {
|
|
2935
3436
|
address,
|
|
2936
|
-
tokenId: (0,
|
|
2937
|
-
baseTokenId: (0,
|
|
3437
|
+
tokenId: (0, import_chaindata_provider37.subDTaoTokenId)(networkId, stake.netuid, stake.hotkey),
|
|
3438
|
+
baseTokenId: (0, import_chaindata_provider37.subDTaoTokenId)(networkId, stake.netuid),
|
|
2938
3439
|
stake: stake.stake,
|
|
2939
3440
|
hotkey: stake.hotkey,
|
|
2940
3441
|
netuid: stake.netuid,
|
|
@@ -2963,7 +3464,7 @@ var fetchBalances7 = async ({
|
|
|
2963
3464
|
{}
|
|
2964
3465
|
);
|
|
2965
3466
|
const balances = Object.values(balancesRaw);
|
|
2966
|
-
const tokensById = (0,
|
|
3467
|
+
const tokensById = (0, import_lodash_es19.keyBy)(
|
|
2967
3468
|
tokensWithAddresses.map(([token]) => token),
|
|
2968
3469
|
(t) => t.id
|
|
2969
3470
|
);
|
|
@@ -2972,8 +3473,8 @@ var fetchBalances7 = async ({
|
|
|
2972
3473
|
if (!balanceDefs.some((def) => def.token.id === bal.tokenId)) {
|
|
2973
3474
|
const baseToken = tokensById[bal.baseTokenId];
|
|
2974
3475
|
if (baseToken) {
|
|
2975
|
-
const cleanToken = (0,
|
|
2976
|
-
const newToken =
|
|
3476
|
+
const cleanToken = (0, import_chaindata_provider37.getCleanToken)(baseToken);
|
|
3477
|
+
const newToken = import_chaindata_provider37.TokenSchema.parse({
|
|
2977
3478
|
...cleanToken,
|
|
2978
3479
|
id: bal.tokenId,
|
|
2979
3480
|
hotkey: bal.hotkey
|
|
@@ -3017,7 +3518,7 @@ var fetchBalances7 = async ({
|
|
|
3017
3518
|
address: def.address,
|
|
3018
3519
|
networkId,
|
|
3019
3520
|
tokenId: def.token.id,
|
|
3020
|
-
source:
|
|
3521
|
+
source: MODULE_TYPE8,
|
|
3021
3522
|
status: "live",
|
|
3022
3523
|
values: values3
|
|
3023
3524
|
};
|
|
@@ -3184,15 +3685,15 @@ var fetchRootClaimedAmounts = async (connector, networkId, metadataRpc, addressH
|
|
|
3184
3685
|
};
|
|
3185
3686
|
|
|
3186
3687
|
// src/modules/substrate-dtao/fetchTokens.ts
|
|
3187
|
-
var
|
|
3688
|
+
var import_chaindata_provider38 = require("@talismn/chaindata-provider");
|
|
3188
3689
|
var import_scale7 = require("@talismn/scale");
|
|
3189
|
-
var
|
|
3190
|
-
var
|
|
3690
|
+
var import_util6 = require("@talismn/util");
|
|
3691
|
+
var import_lodash_es20 = require("lodash-es");
|
|
3191
3692
|
var NATIVE_TOKEN_SYMBOLS = {
|
|
3192
3693
|
"bittensor": "TAO",
|
|
3193
3694
|
"bittensor-testnet": "testTAO"
|
|
3194
3695
|
};
|
|
3195
|
-
var
|
|
3696
|
+
var fetchTokens8 = async ({
|
|
3196
3697
|
networkId,
|
|
3197
3698
|
connector,
|
|
3198
3699
|
tokens,
|
|
@@ -3211,7 +3712,7 @@ var fetchTokens7 = async ({
|
|
|
3211
3712
|
[]
|
|
3212
3713
|
)
|
|
3213
3714
|
]);
|
|
3214
|
-
return dynamicInfos.filter(
|
|
3715
|
+
return dynamicInfos.filter(import_util6.isNotNil).map((info) => {
|
|
3215
3716
|
const config = tokens.find((t) => t.netuid === info.netuid);
|
|
3216
3717
|
let symbol = new TextDecoder().decode(Uint8Array.from(info.token_symbol));
|
|
3217
3718
|
const subnetName = info.subnet_identity?.subnet_name?.asText() ?? (info.netuid === 0 ? "Root" : `Subnet ${info.netuid}`);
|
|
@@ -3220,9 +3721,9 @@ var fetchTokens7 = async ({
|
|
|
3220
3721
|
symbol = NATIVE_TOKEN_SYMBOLS[networkId];
|
|
3221
3722
|
const isTransferable = transferableTokensMap[info.netuid] ?? true;
|
|
3222
3723
|
const token = {
|
|
3223
|
-
id: (0,
|
|
3224
|
-
type:
|
|
3225
|
-
platform:
|
|
3724
|
+
id: (0, import_chaindata_provider38.subDTaoTokenId)(networkId, info.netuid),
|
|
3725
|
+
type: MODULE_TYPE8,
|
|
3726
|
+
platform: PLATFORM8,
|
|
3226
3727
|
networkId,
|
|
3227
3728
|
netuid: info.netuid,
|
|
3228
3729
|
isDefault: true,
|
|
@@ -3234,7 +3735,7 @@ var fetchTokens7 = async ({
|
|
|
3234
3735
|
};
|
|
3235
3736
|
return Object.assign({}, token, config);
|
|
3236
3737
|
}).filter((t) => {
|
|
3237
|
-
const parsed =
|
|
3738
|
+
const parsed = import_chaindata_provider38.SubDTaoTokenSchema.safeParse(t);
|
|
3238
3739
|
return parsed.success;
|
|
3239
3740
|
});
|
|
3240
3741
|
};
|
|
@@ -3250,7 +3751,7 @@ var fetchTransferableTokensMap = async (connector, metadata, networkId) => {
|
|
|
3250
3751
|
[transferToggleKeys]
|
|
3251
3752
|
);
|
|
3252
3753
|
const transferToggleEntries = transferToggleResults.length ? transferToggleResults[0].changes : [];
|
|
3253
|
-
return (0,
|
|
3754
|
+
return (0, import_lodash_es20.fromPairs)(
|
|
3254
3755
|
transferToggleEntries.map(([key, value]) => {
|
|
3255
3756
|
const [netuid] = transferToggleCodec.keys.dec(key);
|
|
3256
3757
|
const isTransferable = transferToggleCodec.value.dec(value);
|
|
@@ -3260,14 +3761,14 @@ var fetchTransferableTokensMap = async (connector, metadata, networkId) => {
|
|
|
3260
3761
|
};
|
|
3261
3762
|
|
|
3262
3763
|
// src/modules/substrate-dtao/getMiniMetadata.ts
|
|
3263
|
-
var
|
|
3764
|
+
var import_chaindata_provider39 = require("@talismn/chaindata-provider");
|
|
3264
3765
|
var import_scale8 = require("@talismn/scale");
|
|
3265
|
-
var
|
|
3766
|
+
var getMiniMetadata7 = ({
|
|
3266
3767
|
networkId,
|
|
3267
3768
|
specVersion,
|
|
3268
3769
|
metadataRpc
|
|
3269
3770
|
}) => {
|
|
3270
|
-
const source =
|
|
3771
|
+
const source = MODULE_TYPE8;
|
|
3271
3772
|
const chainId = networkId;
|
|
3272
3773
|
const systemVersion = getConstantValue(metadataRpc, "System", "Version");
|
|
3273
3774
|
if (specVersion !== systemVersion.spec_version)
|
|
@@ -3285,7 +3786,7 @@ var getMiniMetadata6 = ({
|
|
|
3285
3786
|
source,
|
|
3286
3787
|
chainId,
|
|
3287
3788
|
specVersion,
|
|
3288
|
-
version:
|
|
3789
|
+
version: import_chaindata_provider39.MINIMETADATA_VERSION,
|
|
3289
3790
|
data: getData(metadataRpc),
|
|
3290
3791
|
extra: null
|
|
3291
3792
|
};
|
|
@@ -3313,19 +3814,19 @@ var getData = (metadataRpc) => {
|
|
|
3313
3814
|
|
|
3314
3815
|
// src/modules/substrate-dtao/getTransferCallData.ts
|
|
3315
3816
|
var import_utils3 = require("@polkadot-api/utils");
|
|
3316
|
-
var
|
|
3817
|
+
var import_chaindata_provider40 = require("@talismn/chaindata-provider");
|
|
3317
3818
|
var import_scale9 = require("@talismn/scale");
|
|
3318
3819
|
var import_polkadot_api = require("polkadot-api");
|
|
3319
|
-
var
|
|
3820
|
+
var getTransferCallData7 = ({
|
|
3320
3821
|
from: from2,
|
|
3321
3822
|
to,
|
|
3322
3823
|
value,
|
|
3323
3824
|
token,
|
|
3324
3825
|
metadataRpc
|
|
3325
3826
|
}) => {
|
|
3326
|
-
if (!(0,
|
|
3327
|
-
throw new Error(`Token type ${token.type} is not ${
|
|
3328
|
-
const { netuid: subnetId, hotkey } = (0,
|
|
3827
|
+
if (!(0, import_chaindata_provider40.isTokenOfType)(token, MODULE_TYPE8))
|
|
3828
|
+
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE8}.`);
|
|
3829
|
+
const { netuid: subnetId, hotkey } = (0, import_chaindata_provider40.parseSubDTaoTokenId)(token.id);
|
|
3329
3830
|
if (!hotkey) throw new Error(`Missing hotkey`);
|
|
3330
3831
|
const { builder } = (0, import_scale9.parseMetadataRpc)(metadataRpc);
|
|
3331
3832
|
const { codec, location } = builder.buildCall("SubtensorModule", "transfer_stake");
|
|
@@ -3344,22 +3845,22 @@ var getTransferCallData6 = ({
|
|
|
3344
3845
|
};
|
|
3345
3846
|
|
|
3346
3847
|
// src/modules/substrate-dtao/subscribeBalances.ts
|
|
3347
|
-
var
|
|
3348
|
-
var
|
|
3349
|
-
var
|
|
3350
|
-
var
|
|
3848
|
+
var import_lodash_es21 = require("lodash-es");
|
|
3849
|
+
var import_rxjs9 = require("rxjs");
|
|
3850
|
+
var SUBSCRIPTION_INTERVAL7 = 6e3;
|
|
3851
|
+
var subscribeBalances7 = ({
|
|
3351
3852
|
networkId,
|
|
3352
3853
|
tokensWithAddresses,
|
|
3353
3854
|
connector,
|
|
3354
3855
|
miniMetadata
|
|
3355
3856
|
}) => {
|
|
3356
|
-
if (!tokensWithAddresses.length) return (0,
|
|
3357
|
-
return new
|
|
3857
|
+
if (!tokensWithAddresses.length) return (0, import_rxjs9.of)({ success: [], errors: [] });
|
|
3858
|
+
return new import_rxjs9.Observable((subscriber) => {
|
|
3358
3859
|
const abortController = new AbortController();
|
|
3359
3860
|
const poll = async () => {
|
|
3360
3861
|
try {
|
|
3361
3862
|
if (abortController.signal.aborted) return;
|
|
3362
|
-
const balances = await
|
|
3863
|
+
const balances = await fetchBalances8({
|
|
3363
3864
|
networkId,
|
|
3364
3865
|
tokensWithAddresses,
|
|
3365
3866
|
connector,
|
|
@@ -3367,10 +3868,10 @@ var subscribeBalances6 = ({
|
|
|
3367
3868
|
});
|
|
3368
3869
|
if (abortController.signal.aborted) return;
|
|
3369
3870
|
subscriber.next(balances);
|
|
3370
|
-
setTimeout(poll,
|
|
3871
|
+
setTimeout(poll, SUBSCRIPTION_INTERVAL7);
|
|
3371
3872
|
} catch (error) {
|
|
3372
3873
|
log_default.error("Error", {
|
|
3373
|
-
module:
|
|
3874
|
+
module: MODULE_TYPE8,
|
|
3374
3875
|
networkId,
|
|
3375
3876
|
miniMetadata,
|
|
3376
3877
|
addressesByToken: tokensWithAddresses,
|
|
@@ -3383,25 +3884,25 @@ var subscribeBalances6 = ({
|
|
|
3383
3884
|
return () => {
|
|
3384
3885
|
abortController.abort();
|
|
3385
3886
|
};
|
|
3386
|
-
}).pipe((0,
|
|
3887
|
+
}).pipe((0, import_rxjs9.distinctUntilChanged)(import_lodash_es21.isEqual));
|
|
3387
3888
|
};
|
|
3388
3889
|
|
|
3389
3890
|
// src/modules/substrate-dtao/module.ts
|
|
3390
3891
|
var SubDTaoBalanceModule = {
|
|
3391
|
-
type:
|
|
3392
|
-
platform:
|
|
3393
|
-
getMiniMetadata:
|
|
3394
|
-
fetchTokens:
|
|
3395
|
-
fetchBalances:
|
|
3396
|
-
subscribeBalances:
|
|
3397
|
-
getTransferCallData:
|
|
3892
|
+
type: MODULE_TYPE8,
|
|
3893
|
+
platform: PLATFORM8,
|
|
3894
|
+
getMiniMetadata: getMiniMetadata7,
|
|
3895
|
+
fetchTokens: fetchTokens8,
|
|
3896
|
+
fetchBalances: fetchBalances8,
|
|
3897
|
+
subscribeBalances: subscribeBalances7,
|
|
3898
|
+
getTransferCallData: getTransferCallData7
|
|
3398
3899
|
};
|
|
3399
3900
|
|
|
3400
3901
|
// src/modules/substrate-dtao/types.ts
|
|
3401
|
-
var
|
|
3402
|
-
var
|
|
3403
|
-
var SubDTaoTokenConfigSchema =
|
|
3404
|
-
netuid:
|
|
3902
|
+
var import_chaindata_provider41 = require("@talismn/chaindata-provider");
|
|
3903
|
+
var import_v411 = __toESM(require("zod/v4"));
|
|
3904
|
+
var SubDTaoTokenConfigSchema = import_v411.default.strictObject({
|
|
3905
|
+
netuid: import_chaindata_provider41.SubDTaoTokenSchema.shape.netuid,
|
|
3405
3906
|
...TokenConfigBaseSchema.shape
|
|
3406
3907
|
});
|
|
3407
3908
|
|
|
@@ -3409,7 +3910,7 @@ var SubDTaoTokenConfigSchema = import_v49.default.strictObject({
|
|
|
3409
3910
|
function excludeFromTransferableAmount(locks) {
|
|
3410
3911
|
if (typeof locks === "string") return BigInt(locks);
|
|
3411
3912
|
if (!Array.isArray(locks)) locks = [locks];
|
|
3412
|
-
return locks.filter((lock) => lock.includeInTransferable !== true).map((lock) => lock.amount.planck).reduce((max, lock) =>
|
|
3913
|
+
return locks.filter((lock) => lock.includeInTransferable !== true).map((lock) => lock.amount.planck).reduce((max, lock) => import_util7.BigMath.max(max, lock), 0n);
|
|
3413
3914
|
}
|
|
3414
3915
|
function excludeFromFeePayableLocks(locks) {
|
|
3415
3916
|
if (typeof locks === "string") return [];
|
|
@@ -3437,7 +3938,7 @@ var Balances = class _Balances {
|
|
|
3437
3938
|
if (balances instanceof Balance) return new _Balances([balances], hydrate);
|
|
3438
3939
|
if (!Array.isArray(balances)) return new _Balances(Object.values(balances), hydrate);
|
|
3439
3940
|
if (balances.length === 0) return this;
|
|
3440
|
-
if (!(0,
|
|
3941
|
+
if (!(0, import_util7.isArrayOf)(balances, Balance))
|
|
3441
3942
|
return new _Balances(
|
|
3442
3943
|
balances.map((storage) => new Balance(storage)),
|
|
3443
3944
|
hydrate
|
|
@@ -3631,7 +4132,7 @@ var Balance = class {
|
|
|
3631
4132
|
if (hydrate !== void 0) this.#db = hydrate;
|
|
3632
4133
|
};
|
|
3633
4134
|
#format = (balance) => new BalanceFormatter(
|
|
3634
|
-
(0,
|
|
4135
|
+
(0, import_util7.isBigInt)(balance) ? balance.toString() : balance,
|
|
3635
4136
|
this.decimals || void 0,
|
|
3636
4137
|
this.rates
|
|
3637
4138
|
);
|
|
@@ -3667,8 +4168,8 @@ var Balance = class {
|
|
|
3667
4168
|
}
|
|
3668
4169
|
get rates() {
|
|
3669
4170
|
if (this.isSource("evm-uniswapv2") && this.token?.type === "evm-uniswapv2") {
|
|
3670
|
-
const tokenId0 = (0,
|
|
3671
|
-
const tokenId1 = (0,
|
|
4171
|
+
const tokenId0 = (0, import_chaindata_provider42.evmErc20TokenId)(this.networkId, this.token.tokenAddress0);
|
|
4172
|
+
const tokenId1 = (0, import_chaindata_provider42.evmErc20TokenId)(this.networkId, this.token.tokenAddress1);
|
|
3672
4173
|
const decimals = this.token.decimals;
|
|
3673
4174
|
const decimals0 = this.token.decimals0;
|
|
3674
4175
|
const decimals1 = this.token.decimals1;
|
|
@@ -3776,7 +4277,7 @@ var Balance = class {
|
|
|
3776
4277
|
/** The frozen balance of this token. Is included in the free amount. */
|
|
3777
4278
|
get locked() {
|
|
3778
4279
|
return this.#format(
|
|
3779
|
-
this.locks.map(({ amount }) => amount.planck).reduce((a, b) =>
|
|
4280
|
+
this.locks.map(({ amount }) => amount.planck).reduce((a, b) => import_util7.BigMath.max(a, b), 0n)
|
|
3780
4281
|
);
|
|
3781
4282
|
}
|
|
3782
4283
|
get locks() {
|
|
@@ -3800,15 +4301,15 @@ var Balance = class {
|
|
|
3800
4301
|
const oldTransferableCalculation = () => {
|
|
3801
4302
|
if (this.locks.length === 0) return this.free;
|
|
3802
4303
|
const excludeAmount = excludeFromTransferableAmount(this.locks);
|
|
3803
|
-
return this.#format(
|
|
4304
|
+
return this.#format(import_util7.BigMath.max(this.free.planck - excludeAmount, 0n));
|
|
3804
4305
|
};
|
|
3805
4306
|
const newTransferableCalculation = () => {
|
|
3806
4307
|
if (this.locks.length === 0) return this.free;
|
|
3807
|
-
const untouchableAmount =
|
|
4308
|
+
const untouchableAmount = import_util7.BigMath.max(
|
|
3808
4309
|
excludeFromTransferableAmount(this.locks) - this.reserved.planck,
|
|
3809
4310
|
0n
|
|
3810
4311
|
);
|
|
3811
|
-
return this.#format(
|
|
4312
|
+
return this.#format(import_util7.BigMath.max(this.free.planck - untouchableAmount, 0n));
|
|
3812
4313
|
};
|
|
3813
4314
|
if (this.#storage.useLegacyTransferableCalculation) return oldTransferableCalculation();
|
|
3814
4315
|
return newTransferableCalculation();
|
|
@@ -3820,7 +4321,7 @@ var Balance = class {
|
|
|
3820
4321
|
*/
|
|
3821
4322
|
get unavailable() {
|
|
3822
4323
|
const oldCalculation = () => this.locked.planck + this.reserved.planck;
|
|
3823
|
-
const newCalculation = () =>
|
|
4324
|
+
const newCalculation = () => import_util7.BigMath.max(this.locked.planck, this.reserved.planck);
|
|
3824
4325
|
const baseUnavailable = this.#storage.useLegacyTransferableCalculation ? oldCalculation() : newCalculation();
|
|
3825
4326
|
const nomPoolStakedPlancks = this.locks.some(
|
|
3826
4327
|
(lock) => lock.source === "substrate-native-holds" && lock.label === "DelegatedStaking"
|
|
@@ -3830,8 +4331,8 @@ var Balance = class {
|
|
|
3830
4331
|
/** The feePayable balance of this token. Is generally the free amount - the feeFrozen amount. */
|
|
3831
4332
|
get feePayable() {
|
|
3832
4333
|
if (this.locks.length === 0) return this.free;
|
|
3833
|
-
const excludeAmount = excludeFromFeePayableLocks(this.locked.planck.toString()).map((lock) => BigInt(lock.amount)).reduce((max, lock) =>
|
|
3834
|
-
return this.#format(
|
|
4334
|
+
const excludeAmount = excludeFromFeePayableLocks(this.locked.planck.toString()).map((lock) => BigInt(lock.amount)).reduce((max, lock) => import_util7.BigMath.max(max, lock), 0n);
|
|
4335
|
+
return this.#format(import_util7.BigMath.max(this.free.planck - excludeAmount, 0n));
|
|
3835
4336
|
}
|
|
3836
4337
|
};
|
|
3837
4338
|
var BalanceValueGetter = class {
|
|
@@ -3854,7 +4355,7 @@ var BalanceFormatter = class {
|
|
|
3854
4355
|
#decimals;
|
|
3855
4356
|
#tokenRates;
|
|
3856
4357
|
constructor(planck, decimals, fiatRatios) {
|
|
3857
|
-
this.#planck = (0,
|
|
4358
|
+
this.#planck = (0, import_util7.isBigInt)(planck) ? planck.toString() : planck ?? "0";
|
|
3858
4359
|
this.#decimals = decimals || 0;
|
|
3859
4360
|
this.#tokenRates = fiatRatios || null;
|
|
3860
4361
|
}
|
|
@@ -3863,7 +4364,7 @@ var BalanceFormatter = class {
|
|
|
3863
4364
|
return BigInt(this.#planck);
|
|
3864
4365
|
}
|
|
3865
4366
|
get tokens() {
|
|
3866
|
-
return (0,
|
|
4367
|
+
return (0, import_util7.planckToTokens)(this.#planck, this.#decimals);
|
|
3867
4368
|
}
|
|
3868
4369
|
fiat(currency) {
|
|
3869
4370
|
if (!this.#tokenRates) return null;
|
|
@@ -4057,23 +4558,23 @@ var getValueId = (amount) => {
|
|
|
4057
4558
|
};
|
|
4058
4559
|
|
|
4059
4560
|
// src/types/minimetadatas.ts
|
|
4060
|
-
var
|
|
4561
|
+
var import_chaindata_provider43 = require("@talismn/chaindata-provider");
|
|
4061
4562
|
var import_scale10 = require("@talismn/scale");
|
|
4062
4563
|
var deriveMiniMetadataId = ({
|
|
4063
4564
|
source,
|
|
4064
4565
|
chainId,
|
|
4065
4566
|
specVersion
|
|
4066
4567
|
}) => (0, import_scale10.toHex)(
|
|
4067
|
-
(0, import_scale10.Twox128)(new TextEncoder().encode(`${source}${chainId}${specVersion}${
|
|
4568
|
+
(0, import_scale10.Twox128)(new TextEncoder().encode(`${source}${chainId}${specVersion}${import_chaindata_provider43.MINIMETADATA_VERSION}`))
|
|
4068
4569
|
).slice(-32);
|
|
4069
4570
|
|
|
4070
4571
|
// src/modules/substrate-assets/getMiniMetadata.ts
|
|
4071
|
-
var
|
|
4572
|
+
var getMiniMetadata8 = ({
|
|
4072
4573
|
networkId,
|
|
4073
4574
|
specVersion,
|
|
4074
4575
|
metadataRpc
|
|
4075
4576
|
}) => {
|
|
4076
|
-
const source =
|
|
4577
|
+
const source = MODULE_TYPE7;
|
|
4077
4578
|
const chainId = networkId;
|
|
4078
4579
|
const systemVersion = getConstantValue(metadataRpc, "System", "Version");
|
|
4079
4580
|
if (specVersion !== systemVersion.spec_version)
|
|
@@ -4091,7 +4592,7 @@ var getMiniMetadata7 = ({
|
|
|
4091
4592
|
source,
|
|
4092
4593
|
chainId,
|
|
4093
4594
|
specVersion,
|
|
4094
|
-
version:
|
|
4595
|
+
version: import_chaindata_provider44.MINIMETADATA_VERSION,
|
|
4095
4596
|
data: getData2(metadataRpc),
|
|
4096
4597
|
extra: null
|
|
4097
4598
|
};
|
|
@@ -4105,10 +4606,10 @@ var getData2 = (metadataRpc) => {
|
|
|
4105
4606
|
|
|
4106
4607
|
// src/modules/substrate-assets/getTransferCallData.ts
|
|
4107
4608
|
var import_utils4 = require("@polkadot-api/utils");
|
|
4108
|
-
var
|
|
4609
|
+
var import_chaindata_provider45 = require("@talismn/chaindata-provider");
|
|
4109
4610
|
var import_scale12 = require("@talismn/scale");
|
|
4110
4611
|
var import_polkadot_api2 = require("polkadot-api");
|
|
4111
|
-
var
|
|
4612
|
+
var getTransferCallData8 = ({
|
|
4112
4613
|
from: from2,
|
|
4113
4614
|
to,
|
|
4114
4615
|
value,
|
|
@@ -4116,8 +4617,8 @@ var getTransferCallData7 = ({
|
|
|
4116
4617
|
type,
|
|
4117
4618
|
metadataRpc
|
|
4118
4619
|
}) => {
|
|
4119
|
-
if (!(0,
|
|
4120
|
-
throw new Error(`Token type ${token.type} is not ${
|
|
4620
|
+
if (!(0, import_chaindata_provider45.isTokenOfType)(token, MODULE_TYPE7))
|
|
4621
|
+
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE7}.`);
|
|
4121
4622
|
const { builder } = (0, import_scale12.parseMetadataRpc)(metadataRpc);
|
|
4122
4623
|
const method = getTransferMethod(type);
|
|
4123
4624
|
const { codec, location } = builder.buildCall("Assets", method);
|
|
@@ -4206,18 +4707,18 @@ var getTransferAllEncodedArgs = (assetId, to, codec) => {
|
|
|
4206
4707
|
};
|
|
4207
4708
|
|
|
4208
4709
|
// src/modules/substrate-assets/subscribeBalances.ts
|
|
4209
|
-
var
|
|
4210
|
-
var
|
|
4710
|
+
var import_rxjs10 = require("rxjs");
|
|
4711
|
+
var subscribeBalances8 = ({
|
|
4211
4712
|
networkId,
|
|
4212
4713
|
tokensWithAddresses,
|
|
4213
4714
|
connector,
|
|
4214
4715
|
miniMetadata
|
|
4215
4716
|
}) => {
|
|
4216
|
-
if (!tokensWithAddresses.length) return (0,
|
|
4717
|
+
if (!tokensWithAddresses.length) return (0, import_rxjs10.of)({ success: [], errors: [] });
|
|
4217
4718
|
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
4218
4719
|
const queries = buildQueries(networkId, balanceDefs, miniMetadata);
|
|
4219
4720
|
return getRpcQueryPack$(connector, networkId, queries).pipe(
|
|
4220
|
-
(0,
|
|
4721
|
+
(0, import_rxjs10.map)((balances) => ({
|
|
4221
4722
|
success: balances,
|
|
4222
4723
|
errors: []
|
|
4223
4724
|
}))
|
|
@@ -4226,31 +4727,31 @@ var subscribeBalances7 = ({
|
|
|
4226
4727
|
|
|
4227
4728
|
// src/modules/substrate-assets/module.ts
|
|
4228
4729
|
var SubAssetsBalanceModule = {
|
|
4229
|
-
type:
|
|
4230
|
-
platform:
|
|
4231
|
-
getMiniMetadata:
|
|
4232
|
-
fetchTokens:
|
|
4233
|
-
fetchBalances:
|
|
4234
|
-
subscribeBalances:
|
|
4235
|
-
getTransferCallData:
|
|
4730
|
+
type: MODULE_TYPE7,
|
|
4731
|
+
platform: PLATFORM7,
|
|
4732
|
+
getMiniMetadata: getMiniMetadata8,
|
|
4733
|
+
fetchTokens: fetchTokens7,
|
|
4734
|
+
fetchBalances: fetchBalances7,
|
|
4735
|
+
subscribeBalances: subscribeBalances8,
|
|
4736
|
+
getTransferCallData: getTransferCallData8
|
|
4236
4737
|
};
|
|
4237
4738
|
|
|
4238
4739
|
// src/modules/substrate-assets/types.ts
|
|
4239
|
-
var
|
|
4240
|
-
var
|
|
4241
|
-
var SubAssetsTokenConfigSchema =
|
|
4242
|
-
assetId:
|
|
4740
|
+
var import_chaindata_provider46 = require("@talismn/chaindata-provider");
|
|
4741
|
+
var import_v412 = __toESM(require("zod/v4"));
|
|
4742
|
+
var SubAssetsTokenConfigSchema = import_v412.default.strictObject({
|
|
4743
|
+
assetId: import_chaindata_provider46.SubAssetsTokenSchema.shape.assetId,
|
|
4243
4744
|
...TokenConfigBaseSchema.shape
|
|
4244
4745
|
});
|
|
4245
4746
|
|
|
4246
4747
|
// src/modules/substrate-foreignassets/config.ts
|
|
4247
|
-
var
|
|
4248
|
-
var
|
|
4249
|
-
var
|
|
4748
|
+
var import_chaindata_provider47 = require("@talismn/chaindata-provider");
|
|
4749
|
+
var MODULE_TYPE9 = import_chaindata_provider47.SubForeignAssetsTokenSchema.shape.type.value;
|
|
4750
|
+
var PLATFORM9 = import_chaindata_provider47.SubForeignAssetsTokenSchema.shape.platform.value;
|
|
4250
4751
|
|
|
4251
4752
|
// src/modules/substrate-foreignassets/buildQueries.ts
|
|
4252
4753
|
var import_scale13 = require("@talismn/scale");
|
|
4253
|
-
var
|
|
4754
|
+
var import_util8 = require("@talismn/util");
|
|
4254
4755
|
var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
|
|
4255
4756
|
const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
|
|
4256
4757
|
storage: ["ForeignAssets", "Account"]
|
|
@@ -4305,11 +4806,11 @@ var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
|
|
|
4305
4806
|
stateKeys: [stateKey],
|
|
4306
4807
|
decodeResult
|
|
4307
4808
|
};
|
|
4308
|
-
}).filter(
|
|
4809
|
+
}).filter(import_util8.isNotNil);
|
|
4309
4810
|
};
|
|
4310
4811
|
|
|
4311
4812
|
// src/modules/substrate-foreignassets/fetchBalances.ts
|
|
4312
|
-
var
|
|
4813
|
+
var fetchBalances9 = async ({
|
|
4313
4814
|
networkId,
|
|
4314
4815
|
tokensWithAddresses,
|
|
4315
4816
|
connector,
|
|
@@ -4318,7 +4819,7 @@ var fetchBalances8 = async ({
|
|
|
4318
4819
|
if (!tokensWithAddresses.length) return { success: [], errors: [] };
|
|
4319
4820
|
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
4320
4821
|
if (!miniMetadata?.data) {
|
|
4321
|
-
log_default.warn(`MiniMetadata is required for fetching ${
|
|
4822
|
+
log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE9} balances on ${networkId}.`);
|
|
4322
4823
|
return {
|
|
4323
4824
|
success: [],
|
|
4324
4825
|
errors: balanceDefs.map((def) => ({
|
|
@@ -4328,20 +4829,20 @@ var fetchBalances8 = async ({
|
|
|
4328
4829
|
}))
|
|
4329
4830
|
};
|
|
4330
4831
|
}
|
|
4331
|
-
if (miniMetadata.source !==
|
|
4332
|
-
log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${
|
|
4832
|
+
if (miniMetadata.source !== MODULE_TYPE9) {
|
|
4833
|
+
log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE9}.`);
|
|
4333
4834
|
return {
|
|
4334
4835
|
success: [],
|
|
4335
4836
|
errors: balanceDefs.map((def) => ({
|
|
4336
4837
|
tokenId: def.token.id,
|
|
4337
4838
|
address: def.address,
|
|
4338
|
-
error: new Error(`Invalid request: miniMetadata source is not ${
|
|
4839
|
+
error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE9}`)
|
|
4339
4840
|
}))
|
|
4340
4841
|
};
|
|
4341
4842
|
}
|
|
4342
4843
|
if (miniMetadata.chainId !== networkId) {
|
|
4343
4844
|
log_default.warn(
|
|
4344
|
-
`Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${
|
|
4845
|
+
`Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE9}. Expected chainId is ${networkId}`
|
|
4345
4846
|
);
|
|
4346
4847
|
return {
|
|
4347
4848
|
success: [],
|
|
@@ -4365,7 +4866,7 @@ var fetchBalances8 = async ({
|
|
|
4365
4866
|
address: def.address,
|
|
4366
4867
|
networkId,
|
|
4367
4868
|
tokenId: def.token.id,
|
|
4368
|
-
source:
|
|
4869
|
+
source: MODULE_TYPE9,
|
|
4369
4870
|
status: "live",
|
|
4370
4871
|
values: [
|
|
4371
4872
|
{ type: "free", label: "free", amount: "0" },
|
|
@@ -4379,10 +4880,10 @@ var fetchBalances8 = async ({
|
|
|
4379
4880
|
};
|
|
4380
4881
|
|
|
4381
4882
|
// src/modules/substrate-foreignassets/fetchTokens.ts
|
|
4382
|
-
var
|
|
4883
|
+
var import_chaindata_provider48 = require("@talismn/chaindata-provider");
|
|
4383
4884
|
var import_scale14 = require("@talismn/scale");
|
|
4384
|
-
var
|
|
4385
|
-
var
|
|
4885
|
+
var import_lodash_es22 = require("lodash-es");
|
|
4886
|
+
var fetchTokens9 = async ({
|
|
4386
4887
|
networkId,
|
|
4387
4888
|
tokens,
|
|
4388
4889
|
connector,
|
|
@@ -4407,7 +4908,7 @@ var fetchTokens8 = async ({
|
|
|
4407
4908
|
]);
|
|
4408
4909
|
const assetStorageEntries = assetStorageResults[0]?.changes ?? [];
|
|
4409
4910
|
const metadataStorageEntries = metadataStorageResults[0]?.changes ?? [];
|
|
4410
|
-
const assetByOnChainId = (0,
|
|
4911
|
+
const assetByOnChainId = (0, import_lodash_es22.keyBy)(
|
|
4411
4912
|
assetStorageEntries.map(([key, value]) => {
|
|
4412
4913
|
const [decodedKey] = assetCodec.keys.dec(key);
|
|
4413
4914
|
const onChainId = (0, import_scale14.papiStringify)(decodedKey);
|
|
@@ -4416,7 +4917,7 @@ var fetchTokens8 = async ({
|
|
|
4416
4917
|
}),
|
|
4417
4918
|
(a) => a.onChainId
|
|
4418
4919
|
);
|
|
4419
|
-
const metadataByOnChainId = (0,
|
|
4920
|
+
const metadataByOnChainId = (0, import_lodash_es22.keyBy)(
|
|
4420
4921
|
metadataStorageEntries.map(([key, value]) => {
|
|
4421
4922
|
const [decodedKey] = metadataCodec.keys.dec(key);
|
|
4422
4923
|
const onChainId = (0, import_scale14.papiStringify)(decodedKey);
|
|
@@ -4431,14 +4932,14 @@ var fetchTokens8 = async ({
|
|
|
4431
4932
|
}),
|
|
4432
4933
|
(a) => a.onChainId
|
|
4433
4934
|
);
|
|
4434
|
-
const allTokens = (0,
|
|
4435
|
-
(onChainId) => (0,
|
|
4935
|
+
const allTokens = (0, import_lodash_es22.keys)(assetByOnChainId).map(
|
|
4936
|
+
(onChainId) => (0, import_lodash_es22.assign)({}, assetByOnChainId[onChainId], metadataByOnChainId[onChainId] ?? void 0)
|
|
4436
4937
|
);
|
|
4437
|
-
const configTokenByOnChainId = (0,
|
|
4938
|
+
const configTokenByOnChainId = (0, import_lodash_es22.keyBy)(tokens, (t) => t.onChainId);
|
|
4438
4939
|
return allTokens.map(
|
|
4439
4940
|
(asset) => ({
|
|
4440
|
-
id: (0,
|
|
4441
|
-
type:
|
|
4941
|
+
id: (0, import_chaindata_provider48.subForeignAssetTokenId)(networkId, asset.onChainId),
|
|
4942
|
+
type: MODULE_TYPE9,
|
|
4442
4943
|
platform: "polkadot",
|
|
4443
4944
|
networkId,
|
|
4444
4945
|
onChainId: String(asset.onChainId),
|
|
@@ -4455,22 +4956,22 @@ var fetchTokens8 = async ({
|
|
|
4455
4956
|
return configToken || token.isSufficient;
|
|
4456
4957
|
}).map((token) => {
|
|
4457
4958
|
const configToken = configTokenByOnChainId[token.onChainId];
|
|
4458
|
-
return configToken ? (0,
|
|
4959
|
+
return configToken ? (0, import_lodash_es22.assign)({}, token, configToken) : token;
|
|
4459
4960
|
}).filter((t) => {
|
|
4460
|
-
const parsed =
|
|
4961
|
+
const parsed = import_chaindata_provider48.SubForeignAssetsTokenSchema.safeParse(t);
|
|
4461
4962
|
return parsed.success;
|
|
4462
4963
|
});
|
|
4463
4964
|
};
|
|
4464
4965
|
|
|
4465
4966
|
// src/modules/substrate-foreignassets/getMiniMetadata.ts
|
|
4466
|
-
var
|
|
4967
|
+
var import_chaindata_provider49 = require("@talismn/chaindata-provider");
|
|
4467
4968
|
var import_scale15 = require("@talismn/scale");
|
|
4468
|
-
var
|
|
4969
|
+
var getMiniMetadata9 = ({
|
|
4469
4970
|
networkId,
|
|
4470
4971
|
specVersion,
|
|
4471
4972
|
metadataRpc
|
|
4472
4973
|
}) => {
|
|
4473
|
-
const source =
|
|
4974
|
+
const source = MODULE_TYPE9;
|
|
4474
4975
|
const chainId = networkId;
|
|
4475
4976
|
const systemVersion = getConstantValue(metadataRpc, "System", "Version");
|
|
4476
4977
|
if (specVersion !== systemVersion.spec_version)
|
|
@@ -4488,7 +4989,7 @@ var getMiniMetadata8 = ({
|
|
|
4488
4989
|
source,
|
|
4489
4990
|
chainId,
|
|
4490
4991
|
specVersion,
|
|
4491
|
-
version:
|
|
4992
|
+
version: import_chaindata_provider49.MINIMETADATA_VERSION,
|
|
4492
4993
|
data: getData3(metadataRpc),
|
|
4493
4994
|
extra: null
|
|
4494
4995
|
};
|
|
@@ -4503,10 +5004,10 @@ var getData3 = (metadataRpc) => {
|
|
|
4503
5004
|
|
|
4504
5005
|
// src/modules/substrate-foreignassets/getTransferCallData.ts
|
|
4505
5006
|
var import_utils5 = require("@polkadot-api/utils");
|
|
4506
|
-
var
|
|
5007
|
+
var import_chaindata_provider50 = require("@talismn/chaindata-provider");
|
|
4507
5008
|
var import_scale16 = require("@talismn/scale");
|
|
4508
5009
|
var import_polkadot_api3 = require("polkadot-api");
|
|
4509
|
-
var
|
|
5010
|
+
var getTransferCallData9 = ({
|
|
4510
5011
|
from: from2,
|
|
4511
5012
|
to,
|
|
4512
5013
|
value,
|
|
@@ -4514,8 +5015,8 @@ var getTransferCallData8 = ({
|
|
|
4514
5015
|
type,
|
|
4515
5016
|
metadataRpc
|
|
4516
5017
|
}) => {
|
|
4517
|
-
if (!(0,
|
|
4518
|
-
throw new Error(`Token type ${token.type} is not ${
|
|
5018
|
+
if (!(0, import_chaindata_provider50.isTokenOfType)(token, MODULE_TYPE9))
|
|
5019
|
+
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE9}.`);
|
|
4519
5020
|
const { builder } = (0, import_scale16.parseMetadataRpc)(metadataRpc);
|
|
4520
5021
|
const method = getTransferMethod2(type);
|
|
4521
5022
|
const { codec, location } = builder.buildCall("ForeignAssets", method);
|
|
@@ -4594,18 +5095,18 @@ var getTransferAllEncodedArgs2 = (onChainId, to, codec) => {
|
|
|
4594
5095
|
};
|
|
4595
5096
|
|
|
4596
5097
|
// src/modules/substrate-foreignassets/subscribeBalances.ts
|
|
4597
|
-
var
|
|
4598
|
-
var
|
|
5098
|
+
var import_rxjs11 = require("rxjs");
|
|
5099
|
+
var subscribeBalances9 = ({
|
|
4599
5100
|
networkId,
|
|
4600
5101
|
tokensWithAddresses,
|
|
4601
5102
|
connector,
|
|
4602
5103
|
miniMetadata
|
|
4603
5104
|
}) => {
|
|
4604
|
-
if (!tokensWithAddresses.length) return (0,
|
|
5105
|
+
if (!tokensWithAddresses.length) return (0, import_rxjs11.of)({ success: [], errors: [] });
|
|
4605
5106
|
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
4606
5107
|
const queries = buildQueries2(networkId, balanceDefs, miniMetadata);
|
|
4607
5108
|
return getRpcQueryPack$(connector, networkId, queries).pipe(
|
|
4608
|
-
(0,
|
|
5109
|
+
(0, import_rxjs11.map)((balances) => ({
|
|
4609
5110
|
success: balances,
|
|
4610
5111
|
errors: []
|
|
4611
5112
|
}))
|
|
@@ -4614,31 +5115,31 @@ var subscribeBalances8 = ({
|
|
|
4614
5115
|
|
|
4615
5116
|
// src/modules/substrate-foreignassets/module.ts
|
|
4616
5117
|
var SubForeignAssetsBalanceModule = {
|
|
4617
|
-
type:
|
|
4618
|
-
platform:
|
|
4619
|
-
getMiniMetadata:
|
|
4620
|
-
fetchTokens:
|
|
4621
|
-
fetchBalances:
|
|
4622
|
-
subscribeBalances:
|
|
4623
|
-
getTransferCallData:
|
|
5118
|
+
type: MODULE_TYPE9,
|
|
5119
|
+
platform: PLATFORM9,
|
|
5120
|
+
getMiniMetadata: getMiniMetadata9,
|
|
5121
|
+
fetchTokens: fetchTokens9,
|
|
5122
|
+
fetchBalances: fetchBalances9,
|
|
5123
|
+
subscribeBalances: subscribeBalances9,
|
|
5124
|
+
getTransferCallData: getTransferCallData9
|
|
4624
5125
|
};
|
|
4625
5126
|
|
|
4626
5127
|
// src/modules/substrate-foreignassets/types.ts
|
|
4627
|
-
var
|
|
4628
|
-
var
|
|
4629
|
-
var SubForeignAssetsTokenConfigSchema =
|
|
4630
|
-
onChainId:
|
|
5128
|
+
var import_chaindata_provider51 = require("@talismn/chaindata-provider");
|
|
5129
|
+
var import_v413 = __toESM(require("zod/v4"));
|
|
5130
|
+
var SubForeignAssetsTokenConfigSchema = import_v413.default.strictObject({
|
|
5131
|
+
onChainId: import_chaindata_provider51.SubForeignAssetsTokenSchema.shape.onChainId,
|
|
4631
5132
|
...TokenConfigBaseSchema.shape
|
|
4632
5133
|
});
|
|
4633
5134
|
|
|
4634
5135
|
// src/modules/substrate-hydration/config.ts
|
|
4635
|
-
var
|
|
4636
|
-
var
|
|
4637
|
-
var
|
|
5136
|
+
var import_chaindata_provider52 = require("@talismn/chaindata-provider");
|
|
5137
|
+
var MODULE_TYPE10 = import_chaindata_provider52.SubHydrationTokenSchema.shape.type.value;
|
|
5138
|
+
var PLATFORM10 = import_chaindata_provider52.SubHydrationTokenSchema.shape.platform.value;
|
|
4638
5139
|
|
|
4639
5140
|
// src/modules/substrate-hydration/fetchBalances.ts
|
|
4640
|
-
var
|
|
4641
|
-
var
|
|
5141
|
+
var import_lodash_es23 = require("lodash-es");
|
|
5142
|
+
var fetchBalances10 = async ({
|
|
4642
5143
|
networkId,
|
|
4643
5144
|
tokensWithAddresses,
|
|
4644
5145
|
connector,
|
|
@@ -4647,7 +5148,7 @@ var fetchBalances9 = async ({
|
|
|
4647
5148
|
if (!tokensWithAddresses.length) return { success: [], errors: [] };
|
|
4648
5149
|
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
4649
5150
|
if (!miniMetadata?.data) {
|
|
4650
|
-
log_default.warn(`MiniMetadata is required for fetching ${
|
|
5151
|
+
log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE10} balances on ${networkId}.`, {
|
|
4651
5152
|
tokensWithAddresses
|
|
4652
5153
|
});
|
|
4653
5154
|
return {
|
|
@@ -4659,20 +5160,20 @@ var fetchBalances9 = async ({
|
|
|
4659
5160
|
}))
|
|
4660
5161
|
};
|
|
4661
5162
|
}
|
|
4662
|
-
if (miniMetadata.source !==
|
|
4663
|
-
log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${
|
|
5163
|
+
if (miniMetadata.source !== MODULE_TYPE10) {
|
|
5164
|
+
log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE10}.`);
|
|
4664
5165
|
return {
|
|
4665
5166
|
success: [],
|
|
4666
5167
|
errors: balanceDefs.map((def) => ({
|
|
4667
5168
|
tokenId: def.token.id,
|
|
4668
5169
|
address: def.address,
|
|
4669
|
-
error: new Error(`Invalid request: miniMetadata source is not ${
|
|
5170
|
+
error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE10}`)
|
|
4670
5171
|
}))
|
|
4671
5172
|
};
|
|
4672
5173
|
}
|
|
4673
5174
|
if (miniMetadata.chainId !== networkId) {
|
|
4674
5175
|
log_default.warn(
|
|
4675
|
-
`Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${
|
|
5176
|
+
`Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE10}. Expected chainId is ${networkId}`
|
|
4676
5177
|
);
|
|
4677
5178
|
return {
|
|
4678
5179
|
success: [],
|
|
@@ -4683,7 +5184,7 @@ var fetchBalances9 = async ({
|
|
|
4683
5184
|
}))
|
|
4684
5185
|
};
|
|
4685
5186
|
}
|
|
4686
|
-
const addresses = (0,
|
|
5187
|
+
const addresses = (0, import_lodash_es23.uniq)(balanceDefs.map((def) => def.address));
|
|
4687
5188
|
try {
|
|
4688
5189
|
const res = await Promise.all(
|
|
4689
5190
|
addresses.map(
|
|
@@ -4699,16 +5200,16 @@ var fetchBalances9 = async ({
|
|
|
4699
5200
|
frozen: balance.frozen.toString()
|
|
4700
5201
|
})).filter((b) => b.onChainId !== void 0);
|
|
4701
5202
|
});
|
|
4702
|
-
const balancesByKey = (0,
|
|
5203
|
+
const balancesByKey = (0, import_lodash_es23.keyBy)(fetchedBalances, (b) => `${b.address}:${b.onChainId}`);
|
|
4703
5204
|
const success = tokensWithAddresses.reduce((acc, [token, addresses2]) => {
|
|
4704
|
-
if (token.type ===
|
|
5205
|
+
if (token.type === MODULE_TYPE10)
|
|
4705
5206
|
for (const address of addresses2) {
|
|
4706
5207
|
const rawBalance = balancesByKey[`${address}:${token.onChainId}`];
|
|
4707
5208
|
const balance = {
|
|
4708
5209
|
address,
|
|
4709
5210
|
networkId,
|
|
4710
5211
|
tokenId: token.id,
|
|
4711
|
-
source:
|
|
5212
|
+
source: MODULE_TYPE10,
|
|
4712
5213
|
status: "live",
|
|
4713
5214
|
values: [
|
|
4714
5215
|
{
|
|
@@ -4751,10 +5252,10 @@ var fetchBalances9 = async ({
|
|
|
4751
5252
|
};
|
|
4752
5253
|
|
|
4753
5254
|
// src/modules/substrate-hydration/fetchTokens.ts
|
|
4754
|
-
var
|
|
5255
|
+
var import_chaindata_provider53 = require("@talismn/chaindata-provider");
|
|
4755
5256
|
var import_scale17 = require("@talismn/scale");
|
|
4756
|
-
var
|
|
4757
|
-
var
|
|
5257
|
+
var import_lodash_es24 = require("lodash-es");
|
|
5258
|
+
var fetchTokens10 = async ({
|
|
4758
5259
|
networkId,
|
|
4759
5260
|
tokens,
|
|
4760
5261
|
connector,
|
|
@@ -4773,7 +5274,7 @@ var fetchTokens9 = async ({
|
|
|
4773
5274
|
[allAssetStorageKeys]
|
|
4774
5275
|
);
|
|
4775
5276
|
const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
|
|
4776
|
-
const configTokenByAssetId = (0,
|
|
5277
|
+
const configTokenByAssetId = (0, import_lodash_es24.keyBy)(tokens, (t) => t.onChainId);
|
|
4777
5278
|
return assetStorageEntries.map(([key, value]) => {
|
|
4778
5279
|
const [onChainId] = assetsCodec.keys.dec(key);
|
|
4779
5280
|
const asset = assetsCodec.value.dec(value);
|
|
@@ -4788,8 +5289,8 @@ var fetchTokens9 = async ({
|
|
|
4788
5289
|
};
|
|
4789
5290
|
}).map(
|
|
4790
5291
|
(asset) => ({
|
|
4791
|
-
id: (0,
|
|
4792
|
-
type:
|
|
5292
|
+
id: (0, import_chaindata_provider53.subHydrationTokenId)(networkId, asset.onChainId),
|
|
5293
|
+
type: MODULE_TYPE10,
|
|
4793
5294
|
platform: "polkadot",
|
|
4794
5295
|
networkId,
|
|
4795
5296
|
onChainId: asset.onChainId,
|
|
@@ -4807,22 +5308,22 @@ var fetchTokens9 = async ({
|
|
|
4807
5308
|
return configToken || token.isSufficient;
|
|
4808
5309
|
}).map((token) => {
|
|
4809
5310
|
const configToken = configTokenByAssetId[token.onChainId];
|
|
4810
|
-
return configToken ? (0,
|
|
5311
|
+
return configToken ? (0, import_lodash_es24.assign)({}, token, configToken) : token;
|
|
4811
5312
|
}).filter((t) => {
|
|
4812
|
-
const parsed =
|
|
5313
|
+
const parsed = import_chaindata_provider53.SubHydrationTokenSchema.safeParse(t);
|
|
4813
5314
|
return parsed.success;
|
|
4814
5315
|
});
|
|
4815
5316
|
};
|
|
4816
5317
|
|
|
4817
5318
|
// src/modules/substrate-hydration/getMiniMetadata.ts
|
|
4818
|
-
var
|
|
5319
|
+
var import_chaindata_provider54 = require("@talismn/chaindata-provider");
|
|
4819
5320
|
var import_scale18 = require("@talismn/scale");
|
|
4820
|
-
var
|
|
5321
|
+
var getMiniMetadata10 = ({
|
|
4821
5322
|
networkId,
|
|
4822
5323
|
specVersion,
|
|
4823
5324
|
metadataRpc
|
|
4824
5325
|
}) => {
|
|
4825
|
-
const source =
|
|
5326
|
+
const source = MODULE_TYPE10;
|
|
4826
5327
|
const chainId = networkId;
|
|
4827
5328
|
const systemVersion = getConstantValue(metadataRpc, "System", "Version");
|
|
4828
5329
|
if (specVersion !== systemVersion.spec_version)
|
|
@@ -4840,7 +5341,7 @@ var getMiniMetadata9 = ({
|
|
|
4840
5341
|
source,
|
|
4841
5342
|
chainId,
|
|
4842
5343
|
specVersion,
|
|
4843
|
-
version:
|
|
5344
|
+
version: import_chaindata_provider54.MINIMETADATA_VERSION,
|
|
4844
5345
|
data: getData4(metadataRpc),
|
|
4845
5346
|
extra: null
|
|
4846
5347
|
};
|
|
@@ -4869,18 +5370,18 @@ var getData4 = (metadataRpc) => {
|
|
|
4869
5370
|
|
|
4870
5371
|
// src/modules/substrate-hydration/getTransferCallData.ts
|
|
4871
5372
|
var import_utils6 = require("@polkadot-api/utils");
|
|
4872
|
-
var
|
|
5373
|
+
var import_chaindata_provider55 = require("@talismn/chaindata-provider");
|
|
4873
5374
|
var import_scale19 = require("@talismn/scale");
|
|
4874
5375
|
var import_polkadot_api4 = require("polkadot-api");
|
|
4875
|
-
var
|
|
5376
|
+
var getTransferCallData10 = ({
|
|
4876
5377
|
from: from2,
|
|
4877
5378
|
to,
|
|
4878
5379
|
value,
|
|
4879
5380
|
token,
|
|
4880
5381
|
metadataRpc
|
|
4881
5382
|
}) => {
|
|
4882
|
-
if (!(0,
|
|
4883
|
-
throw new Error(`Token type ${token.type} is not ${
|
|
5383
|
+
if (!(0, import_chaindata_provider55.isTokenOfType)(token, MODULE_TYPE10))
|
|
5384
|
+
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE10}.`);
|
|
4884
5385
|
const { builder } = (0, import_scale19.parseMetadataRpc)(metadataRpc);
|
|
4885
5386
|
const { codec, location } = builder.buildCall("Currencies", "transfer");
|
|
4886
5387
|
const args = {
|
|
@@ -4896,22 +5397,22 @@ var getTransferCallData9 = ({
|
|
|
4896
5397
|
};
|
|
4897
5398
|
|
|
4898
5399
|
// src/modules/substrate-hydration/subscribeBalances.ts
|
|
4899
|
-
var
|
|
4900
|
-
var
|
|
4901
|
-
var
|
|
4902
|
-
var
|
|
5400
|
+
var import_lodash_es25 = require("lodash-es");
|
|
5401
|
+
var import_rxjs12 = require("rxjs");
|
|
5402
|
+
var SUBSCRIPTION_INTERVAL8 = 6e3;
|
|
5403
|
+
var subscribeBalances10 = ({
|
|
4903
5404
|
networkId,
|
|
4904
5405
|
tokensWithAddresses,
|
|
4905
5406
|
connector,
|
|
4906
5407
|
miniMetadata
|
|
4907
5408
|
}) => {
|
|
4908
|
-
if (!tokensWithAddresses.length) return (0,
|
|
4909
|
-
return new
|
|
5409
|
+
if (!tokensWithAddresses.length) return (0, import_rxjs12.of)({ success: [], errors: [] });
|
|
5410
|
+
return new import_rxjs12.Observable((subscriber) => {
|
|
4910
5411
|
const abortController = new AbortController();
|
|
4911
5412
|
const poll = async () => {
|
|
4912
5413
|
try {
|
|
4913
5414
|
if (abortController.signal.aborted) return;
|
|
4914
|
-
const balances = await
|
|
5415
|
+
const balances = await fetchBalances10({
|
|
4915
5416
|
networkId,
|
|
4916
5417
|
tokensWithAddresses,
|
|
4917
5418
|
connector,
|
|
@@ -4919,10 +5420,10 @@ var subscribeBalances9 = ({
|
|
|
4919
5420
|
});
|
|
4920
5421
|
if (abortController.signal.aborted) return;
|
|
4921
5422
|
subscriber.next(balances);
|
|
4922
|
-
setTimeout(poll,
|
|
5423
|
+
setTimeout(poll, SUBSCRIPTION_INTERVAL8);
|
|
4923
5424
|
} catch (error) {
|
|
4924
5425
|
log_default.error("Error", {
|
|
4925
|
-
module:
|
|
5426
|
+
module: MODULE_TYPE10,
|
|
4926
5427
|
networkId,
|
|
4927
5428
|
miniMetadata,
|
|
4928
5429
|
addressesByToken: tokensWithAddresses,
|
|
@@ -4935,36 +5436,36 @@ var subscribeBalances9 = ({
|
|
|
4935
5436
|
return () => {
|
|
4936
5437
|
abortController.abort();
|
|
4937
5438
|
};
|
|
4938
|
-
}).pipe((0,
|
|
5439
|
+
}).pipe((0, import_rxjs12.distinctUntilChanged)(import_lodash_es25.isEqual));
|
|
4939
5440
|
};
|
|
4940
5441
|
|
|
4941
5442
|
// src/modules/substrate-hydration/module.ts
|
|
4942
5443
|
var SubHydrationBalanceModule = {
|
|
4943
|
-
type:
|
|
4944
|
-
platform:
|
|
4945
|
-
getMiniMetadata:
|
|
4946
|
-
fetchTokens:
|
|
4947
|
-
fetchBalances:
|
|
4948
|
-
subscribeBalances:
|
|
4949
|
-
getTransferCallData:
|
|
5444
|
+
type: MODULE_TYPE10,
|
|
5445
|
+
platform: PLATFORM10,
|
|
5446
|
+
getMiniMetadata: getMiniMetadata10,
|
|
5447
|
+
fetchTokens: fetchTokens10,
|
|
5448
|
+
fetchBalances: fetchBalances10,
|
|
5449
|
+
subscribeBalances: subscribeBalances10,
|
|
5450
|
+
getTransferCallData: getTransferCallData10
|
|
4950
5451
|
};
|
|
4951
5452
|
|
|
4952
5453
|
// src/modules/substrate-hydration/types.ts
|
|
4953
|
-
var
|
|
4954
|
-
var
|
|
4955
|
-
var SubHydrationTokenConfigSchema =
|
|
4956
|
-
onChainId:
|
|
5454
|
+
var import_chaindata_provider56 = require("@talismn/chaindata-provider");
|
|
5455
|
+
var import_v414 = __toESM(require("zod/v4"));
|
|
5456
|
+
var SubHydrationTokenConfigSchema = import_v414.default.strictObject({
|
|
5457
|
+
onChainId: import_chaindata_provider56.SubHydrationTokenSchema.shape.onChainId,
|
|
4957
5458
|
...TokenConfigBaseSchema.shape
|
|
4958
5459
|
});
|
|
4959
5460
|
|
|
4960
5461
|
// src/modules/substrate-native/config.ts
|
|
4961
|
-
var
|
|
4962
|
-
var
|
|
4963
|
-
var
|
|
5462
|
+
var import_chaindata_provider57 = require("@talismn/chaindata-provider");
|
|
5463
|
+
var MODULE_TYPE11 = import_chaindata_provider57.SubNativeTokenSchema.shape.type.value;
|
|
5464
|
+
var PLATFORM11 = import_chaindata_provider57.SubNativeTokenSchema.shape.platform.value;
|
|
4964
5465
|
|
|
4965
5466
|
// src/modules/substrate-native/queries/buildBaseQueries.ts
|
|
4966
5467
|
var import_scale20 = require("@talismn/scale");
|
|
4967
|
-
var
|
|
5468
|
+
var import_util9 = require("@talismn/util");
|
|
4968
5469
|
|
|
4969
5470
|
// src/modules/substrate-native/util/lockTypes.ts
|
|
4970
5471
|
var import_upperFirst = __toESM(require("lodash-es/upperFirst"));
|
|
@@ -5125,7 +5626,7 @@ var buildBaseQueries = (networkId, balanceDefs, miniMetadata) => {
|
|
|
5125
5626
|
return { balance, nomPoolMemberInfo };
|
|
5126
5627
|
}
|
|
5127
5628
|
};
|
|
5128
|
-
}).filter(
|
|
5629
|
+
}).filter(import_util9.isNotNil);
|
|
5129
5630
|
};
|
|
5130
5631
|
var decodeBaseResult = (coder, value, networkId) => {
|
|
5131
5632
|
const decoded = (0, import_scale20.decodeScale)(
|
|
@@ -5365,11 +5866,11 @@ var getNomPoolStateKeys = (coders, nomPoolMemberInfo, extra) => {
|
|
|
5365
5866
|
};
|
|
5366
5867
|
|
|
5367
5868
|
// src/modules/substrate-native/fetchBalances.ts
|
|
5368
|
-
var
|
|
5869
|
+
var fetchBalances11 = async ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
|
|
5369
5870
|
if (!tokensWithAddresses.length) return { success: [], errors: [] };
|
|
5370
5871
|
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
5371
5872
|
if (!miniMetadata?.data) {
|
|
5372
|
-
log_default.warn(`MiniMetadata is required for fetching ${
|
|
5873
|
+
log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE11} balances on ${networkId}.`);
|
|
5373
5874
|
return {
|
|
5374
5875
|
success: [],
|
|
5375
5876
|
errors: balanceDefs.map((def) => ({
|
|
@@ -5379,20 +5880,20 @@ var fetchBalances10 = async ({ networkId, tokensWithAddresses, connector, miniMe
|
|
|
5379
5880
|
}))
|
|
5380
5881
|
};
|
|
5381
5882
|
}
|
|
5382
|
-
if (miniMetadata.source !==
|
|
5383
|
-
log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${
|
|
5883
|
+
if (miniMetadata.source !== MODULE_TYPE11) {
|
|
5884
|
+
log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE11}.`);
|
|
5384
5885
|
return {
|
|
5385
5886
|
success: [],
|
|
5386
5887
|
errors: balanceDefs.map((def) => ({
|
|
5387
5888
|
tokenId: def.token.id,
|
|
5388
5889
|
address: def.address,
|
|
5389
|
-
error: new Error(`Invalid request: miniMetadata source is not ${
|
|
5890
|
+
error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE11}`)
|
|
5390
5891
|
}))
|
|
5391
5892
|
};
|
|
5392
5893
|
}
|
|
5393
5894
|
if (miniMetadata.chainId !== networkId) {
|
|
5394
5895
|
log_default.warn(
|
|
5395
|
-
`Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${
|
|
5896
|
+
`Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE11}. Expected chainId is ${networkId}`
|
|
5396
5897
|
);
|
|
5397
5898
|
return {
|
|
5398
5899
|
success: [],
|
|
@@ -5411,10 +5912,10 @@ var fetchBalances10 = async ({ networkId, tokensWithAddresses, connector, miniMe
|
|
|
5411
5912
|
};
|
|
5412
5913
|
|
|
5413
5914
|
// src/modules/substrate-native/fetchTokens.ts
|
|
5414
|
-
var
|
|
5415
|
-
var
|
|
5416
|
-
var
|
|
5417
|
-
var
|
|
5915
|
+
var import_chaindata_provider58 = require("@talismn/chaindata-provider");
|
|
5916
|
+
var import_lodash_es26 = require("lodash-es");
|
|
5917
|
+
var import_v415 = __toESM(require("zod/v4"));
|
|
5918
|
+
var fetchTokens11 = async ({ networkId, tokens, connector, miniMetadata }) => {
|
|
5418
5919
|
if (miniMetadata.extra.disable) return [];
|
|
5419
5920
|
const { tokenSymbol: symbol, tokenDecimals: decimals } = await getChainProperties(
|
|
5420
5921
|
connector,
|
|
@@ -5424,7 +5925,7 @@ var fetchTokens10 = async ({ networkId, tokens, connector, miniMetadata }) => {
|
|
|
5424
5925
|
log_default.warn(`Substrate native module: existentialDeposit is undefined for ${networkId}, using 0`);
|
|
5425
5926
|
const tokenConfig = tokens[0];
|
|
5426
5927
|
const nativeToken = {
|
|
5427
|
-
id: (0,
|
|
5928
|
+
id: (0, import_chaindata_provider58.subNativeTokenId)(networkId),
|
|
5428
5929
|
type: "substrate-native",
|
|
5429
5930
|
platform: "polkadot",
|
|
5430
5931
|
networkId,
|
|
@@ -5434,22 +5935,22 @@ var fetchTokens10 = async ({ networkId, tokens, connector, miniMetadata }) => {
|
|
|
5434
5935
|
decimals,
|
|
5435
5936
|
existentialDeposit: miniMetadata.extra.existentialDeposit ?? "0"
|
|
5436
5937
|
};
|
|
5437
|
-
const token = (0,
|
|
5438
|
-
const parsed =
|
|
5938
|
+
const token = (0, import_lodash_es26.assign)(nativeToken, tokenConfig);
|
|
5939
|
+
const parsed = import_chaindata_provider58.SubNativeTokenSchema.safeParse(token);
|
|
5439
5940
|
if (!parsed.success) {
|
|
5440
5941
|
return [];
|
|
5441
5942
|
}
|
|
5442
5943
|
return [parsed.data];
|
|
5443
5944
|
};
|
|
5444
|
-
var DotNetworkPropertiesSimple =
|
|
5445
|
-
tokenDecimals:
|
|
5446
|
-
tokenSymbol:
|
|
5945
|
+
var DotNetworkPropertiesSimple = import_v415.default.object({
|
|
5946
|
+
tokenDecimals: import_v415.default.number().optional().default(0),
|
|
5947
|
+
tokenSymbol: import_v415.default.string().optional().default("Unit")
|
|
5447
5948
|
});
|
|
5448
|
-
var DotNetworkPropertiesArray =
|
|
5449
|
-
tokenDecimals:
|
|
5450
|
-
tokenSymbol:
|
|
5949
|
+
var DotNetworkPropertiesArray = import_v415.default.object({
|
|
5950
|
+
tokenDecimals: import_v415.default.array(import_v415.default.number()).nonempty(),
|
|
5951
|
+
tokenSymbol: import_v415.default.array(import_v415.default.string()).nonempty()
|
|
5451
5952
|
});
|
|
5452
|
-
var DotNetworkPropertiesSchema =
|
|
5953
|
+
var DotNetworkPropertiesSchema = import_v415.default.union([DotNetworkPropertiesSimple, DotNetworkPropertiesArray]).transform((val) => ({
|
|
5453
5954
|
tokenDecimals: Array.isArray(val.tokenDecimals) ? val.tokenDecimals[0] : val.tokenDecimals,
|
|
5454
5955
|
tokenSymbol: Array.isArray(val.tokenSymbol) ? val.tokenSymbol[0] : val.tokenSymbol
|
|
5455
5956
|
}));
|
|
@@ -5459,10 +5960,10 @@ var getChainProperties = async (connector, networkId) => {
|
|
|
5459
5960
|
};
|
|
5460
5961
|
|
|
5461
5962
|
// src/modules/substrate-native/getMiniMetadata.ts
|
|
5462
|
-
var
|
|
5963
|
+
var import_chaindata_provider59 = require("@talismn/chaindata-provider");
|
|
5463
5964
|
var import_scale22 = require("@talismn/scale");
|
|
5464
|
-
var
|
|
5465
|
-
const source =
|
|
5965
|
+
var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
5966
|
+
const source = MODULE_TYPE11;
|
|
5466
5967
|
const chainId = networkId;
|
|
5467
5968
|
const systemVersion = getConstantValue(metadataRpc, "System", "Version");
|
|
5468
5969
|
if (specVersion !== systemVersion.spec_version)
|
|
@@ -5481,7 +5982,7 @@ var getMiniMetadata10 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
|
5481
5982
|
source,
|
|
5482
5983
|
chainId,
|
|
5483
5984
|
specVersion,
|
|
5484
|
-
version:
|
|
5985
|
+
version: import_chaindata_provider59.MINIMETADATA_VERSION,
|
|
5485
5986
|
data: null,
|
|
5486
5987
|
extra: { disable: true }
|
|
5487
5988
|
};
|
|
@@ -5510,7 +6011,7 @@ var getMiniMetadata10 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
|
5510
6011
|
source,
|
|
5511
6012
|
chainId,
|
|
5512
6013
|
specVersion,
|
|
5513
|
-
version:
|
|
6014
|
+
version: import_chaindata_provider59.MINIMETADATA_VERSION,
|
|
5514
6015
|
data: (0, import_scale22.encodeMetadata)(metadata),
|
|
5515
6016
|
extra: {
|
|
5516
6017
|
useLegacyTransferableCalculation,
|
|
@@ -5522,10 +6023,10 @@ var getMiniMetadata10 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
|
5522
6023
|
|
|
5523
6024
|
// src/modules/substrate-native/getTransferCallData.ts
|
|
5524
6025
|
var import_utils8 = require("@polkadot-api/utils");
|
|
5525
|
-
var
|
|
6026
|
+
var import_chaindata_provider60 = require("@talismn/chaindata-provider");
|
|
5526
6027
|
var import_scale23 = require("@talismn/scale");
|
|
5527
6028
|
var import_polkadot_api6 = require("polkadot-api");
|
|
5528
|
-
var
|
|
6029
|
+
var getTransferCallData11 = ({
|
|
5529
6030
|
from: from2,
|
|
5530
6031
|
to,
|
|
5531
6032
|
value,
|
|
@@ -5533,8 +6034,8 @@ var getTransferCallData10 = ({
|
|
|
5533
6034
|
type,
|
|
5534
6035
|
metadataRpc
|
|
5535
6036
|
}) => {
|
|
5536
|
-
if (!(0,
|
|
5537
|
-
throw new Error(`Token type ${token.type} is not ${
|
|
6037
|
+
if (!(0, import_chaindata_provider60.isTokenOfType)(token, MODULE_TYPE11))
|
|
6038
|
+
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE11}.`);
|
|
5538
6039
|
const { unifiedMetadata, lookupFn, builder } = (0, import_scale23.parseMetadataRpc)(metadataRpc);
|
|
5539
6040
|
const method = getTransferMethod3(type, unifiedMetadata, lookupFn);
|
|
5540
6041
|
const { codec, location } = builder.buildCall("Balances", method);
|
|
@@ -5612,17 +6113,17 @@ var getTransferAllEncodedArgs3 = (to, codec) => {
|
|
|
5612
6113
|
};
|
|
5613
6114
|
|
|
5614
6115
|
// src/modules/substrate-native/subscribeBalances.ts
|
|
5615
|
-
var
|
|
5616
|
-
var
|
|
5617
|
-
if (!tokensWithAddresses.length) return (0,
|
|
6116
|
+
var import_rxjs13 = require("rxjs");
|
|
6117
|
+
var subscribeBalances11 = ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
|
|
6118
|
+
if (!tokensWithAddresses.length) return (0, import_rxjs13.of)({ success: [], errors: [] });
|
|
5618
6119
|
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
5619
6120
|
const baseQueries = buildBaseQueries(networkId, balanceDefs, miniMetadata);
|
|
5620
6121
|
return getRpcQueryPack$(connector, networkId, baseQueries).pipe(
|
|
5621
|
-
(0,
|
|
6122
|
+
(0, import_rxjs13.switchMap)((partialBalances) => {
|
|
5622
6123
|
const nomPoolQueries = buildNomPoolQueries(networkId, partialBalances, miniMetadata);
|
|
5623
6124
|
return getRpcQueryPack$(connector, networkId, nomPoolQueries);
|
|
5624
6125
|
}),
|
|
5625
|
-
(0,
|
|
6126
|
+
(0, import_rxjs13.map)((balances) => ({
|
|
5626
6127
|
success: balances,
|
|
5627
6128
|
errors: []
|
|
5628
6129
|
}))
|
|
@@ -5631,34 +6132,34 @@ var subscribeBalances10 = ({ networkId, tokensWithAddresses, connector, miniMeta
|
|
|
5631
6132
|
|
|
5632
6133
|
// src/modules/substrate-native/module.ts
|
|
5633
6134
|
var SubNativeBalanceModule = {
|
|
5634
|
-
type:
|
|
5635
|
-
platform:
|
|
5636
|
-
getMiniMetadata:
|
|
5637
|
-
fetchTokens:
|
|
5638
|
-
fetchBalances:
|
|
5639
|
-
subscribeBalances:
|
|
5640
|
-
getTransferCallData:
|
|
6135
|
+
type: MODULE_TYPE11,
|
|
6136
|
+
platform: PLATFORM11,
|
|
6137
|
+
getMiniMetadata: getMiniMetadata11,
|
|
6138
|
+
fetchTokens: fetchTokens11,
|
|
6139
|
+
fetchBalances: fetchBalances11,
|
|
6140
|
+
subscribeBalances: subscribeBalances11,
|
|
6141
|
+
getTransferCallData: getTransferCallData11
|
|
5641
6142
|
};
|
|
5642
6143
|
|
|
5643
6144
|
// src/modules/substrate-native/types.ts
|
|
5644
|
-
var
|
|
5645
|
-
var SubNativeTokenConfigSchema =
|
|
6145
|
+
var import_v416 = __toESM(require("zod/v4"));
|
|
6146
|
+
var SubNativeTokenConfigSchema = import_v416.default.strictObject({
|
|
5646
6147
|
...TokenConfigBaseSchema.shape
|
|
5647
6148
|
});
|
|
5648
|
-
var SubNativeModuleConfigSchema =
|
|
5649
|
-
disable:
|
|
6149
|
+
var SubNativeModuleConfigSchema = import_v416.default.strictObject({
|
|
6150
|
+
disable: import_v416.default.boolean().optional()
|
|
5650
6151
|
});
|
|
5651
|
-
var SubNativeMiniMetadataExtraSchema =
|
|
5652
|
-
disable:
|
|
5653
|
-
useLegacyTransferableCalculation:
|
|
5654
|
-
existentialDeposit:
|
|
5655
|
-
nominationPoolsPalletId:
|
|
6152
|
+
var SubNativeMiniMetadataExtraSchema = import_v416.default.strictObject({
|
|
6153
|
+
disable: import_v416.default.boolean().optional(),
|
|
6154
|
+
useLegacyTransferableCalculation: import_v416.default.boolean().optional(),
|
|
6155
|
+
existentialDeposit: import_v416.default.string().optional(),
|
|
6156
|
+
nominationPoolsPalletId: import_v416.default.string().optional()
|
|
5656
6157
|
});
|
|
5657
6158
|
|
|
5658
6159
|
// src/modules/substrate-psp22/config.ts
|
|
5659
|
-
var
|
|
5660
|
-
var
|
|
5661
|
-
var
|
|
6160
|
+
var import_chaindata_provider61 = require("@talismn/chaindata-provider");
|
|
6161
|
+
var MODULE_TYPE12 = import_chaindata_provider61.SubPsp22TokenSchema.shape.type.value;
|
|
6162
|
+
var PLATFORM12 = import_chaindata_provider61.SubPsp22TokenSchema.shape.platform.value;
|
|
5662
6163
|
|
|
5663
6164
|
// src/modules/substrate-psp22/fetchBalances.ts
|
|
5664
6165
|
var import_api_contract = require("@polkadot/api-contract");
|
|
@@ -6662,7 +7163,17 @@ var psp22_default = {
|
|
|
6662
7163
|
};
|
|
6663
7164
|
|
|
6664
7165
|
// src/modules/substrate-psp22/util.ts
|
|
6665
|
-
var
|
|
7166
|
+
var u8aToHex = (value) => `0x${Array.from(value, (b) => b.toString(16).padStart(2, "0")).join("")}`;
|
|
7167
|
+
var u8aConcatStrict = (arrays) => {
|
|
7168
|
+
const length = arrays.reduce((total, arr) => total + arr.length, 0);
|
|
7169
|
+
const result = new Uint8Array(length);
|
|
7170
|
+
let offset = 0;
|
|
7171
|
+
for (const arr of arrays) {
|
|
7172
|
+
result.set(arr, offset);
|
|
7173
|
+
offset += arr.length;
|
|
7174
|
+
}
|
|
7175
|
+
return result;
|
|
7176
|
+
};
|
|
6666
7177
|
var makeContractCaller = ({
|
|
6667
7178
|
chainConnector,
|
|
6668
7179
|
chainId,
|
|
@@ -6671,8 +7182,8 @@ var makeContractCaller = ({
|
|
|
6671
7182
|
"ContractExecResult",
|
|
6672
7183
|
await chainConnector.send(chainId, "state_call", [
|
|
6673
7184
|
"ContractsApi_call",
|
|
6674
|
-
|
|
6675
|
-
|
|
7185
|
+
u8aToHex(
|
|
7186
|
+
u8aConcatStrict([
|
|
6676
7187
|
// origin
|
|
6677
7188
|
registry.createType("AccountId", callFrom).toU8a(),
|
|
6678
7189
|
// dest
|
|
@@ -6691,7 +7202,7 @@ var makeContractCaller = ({
|
|
|
6691
7202
|
);
|
|
6692
7203
|
|
|
6693
7204
|
// src/modules/substrate-psp22/fetchBalances.ts
|
|
6694
|
-
var
|
|
7205
|
+
var fetchBalances12 = async ({
|
|
6695
7206
|
networkId,
|
|
6696
7207
|
tokensWithAddresses,
|
|
6697
7208
|
connector
|
|
@@ -6746,10 +7257,11 @@ var fetchBalances11 = async ({
|
|
|
6746
7257
|
// src/modules/substrate-psp22/fetchTokens.ts
|
|
6747
7258
|
var import_api_contract2 = require("@polkadot/api-contract");
|
|
6748
7259
|
var import_types17 = require("@polkadot/types");
|
|
6749
|
-
var
|
|
6750
|
-
var
|
|
6751
|
-
var
|
|
6752
|
-
var
|
|
7260
|
+
var import_chaindata_provider62 = require("@talismn/chaindata-provider");
|
|
7261
|
+
var import_lodash_es27 = require("lodash-es");
|
|
7262
|
+
var hexToNumber = (hex) => Number(hex);
|
|
7263
|
+
var u8aToString = (value) => new TextDecoder().decode(value);
|
|
7264
|
+
var fetchTokens12 = async ({
|
|
6753
7265
|
networkId,
|
|
6754
7266
|
tokens,
|
|
6755
7267
|
connector
|
|
@@ -6783,7 +7295,7 @@ var fetchTokens11 = async ({
|
|
|
6783
7295
|
)
|
|
6784
7296
|
]);
|
|
6785
7297
|
const symbolData = symbolResult.toJSON()?.result?.ok?.data;
|
|
6786
|
-
symbol = typeof symbolData === "string" && symbolData.startsWith("0x") ?
|
|
7298
|
+
symbol = typeof symbolData === "string" && symbolData.startsWith("0x") ? u8aToString(
|
|
6787
7299
|
registry.createType(
|
|
6788
7300
|
"Option<Vec<u8>>",
|
|
6789
7301
|
// biome-ignore lint/suspicious/noExplicitAny: legacy
|
|
@@ -6791,9 +7303,9 @@ var fetchTokens11 = async ({
|
|
|
6791
7303
|
)?.value
|
|
6792
7304
|
)?.replace(/\p{C}/gu, "") : symbol;
|
|
6793
7305
|
const decimalsData = decimalsResult.toJSON()?.result?.ok?.data;
|
|
6794
|
-
decimals = typeof decimalsData === "string" && decimalsData.startsWith("0x") ?
|
|
7306
|
+
decimals = typeof decimalsData === "string" && decimalsData.startsWith("0x") ? hexToNumber(decimalsData) : decimals;
|
|
6795
7307
|
})();
|
|
6796
|
-
const id = (0,
|
|
7308
|
+
const id = (0, import_chaindata_provider62.subPsp22TokenId)(networkId, contractAddress);
|
|
6797
7309
|
const token = {
|
|
6798
7310
|
id,
|
|
6799
7311
|
type: "substrate-psp22",
|
|
@@ -6816,21 +7328,21 @@ var fetchTokens11 = async ({
|
|
|
6816
7328
|
);
|
|
6817
7329
|
}
|
|
6818
7330
|
}
|
|
6819
|
-
return (0,
|
|
6820
|
-
const parsed =
|
|
7331
|
+
return (0, import_lodash_es27.values)(tokenList).filter((t) => {
|
|
7332
|
+
const parsed = import_chaindata_provider62.SubPsp22TokenSchema.safeParse(t);
|
|
6821
7333
|
return parsed.success;
|
|
6822
7334
|
});
|
|
6823
7335
|
};
|
|
6824
7336
|
|
|
6825
7337
|
// src/modules/substrate-psp22/getMiniMetadata.ts
|
|
6826
|
-
var
|
|
7338
|
+
var import_chaindata_provider63 = require("@talismn/chaindata-provider");
|
|
6827
7339
|
var import_scale24 = require("@talismn/scale");
|
|
6828
|
-
var
|
|
7340
|
+
var getMiniMetadata12 = ({
|
|
6829
7341
|
networkId,
|
|
6830
7342
|
specVersion,
|
|
6831
7343
|
metadataRpc
|
|
6832
7344
|
}) => {
|
|
6833
|
-
const source =
|
|
7345
|
+
const source = MODULE_TYPE12;
|
|
6834
7346
|
const chainId = networkId;
|
|
6835
7347
|
const systemVersion = getConstantValue(metadataRpc, "System", "Version");
|
|
6836
7348
|
if (specVersion !== systemVersion.spec_version)
|
|
@@ -6848,7 +7360,7 @@ var getMiniMetadata11 = ({
|
|
|
6848
7360
|
source,
|
|
6849
7361
|
chainId,
|
|
6850
7362
|
specVersion,
|
|
6851
|
-
version:
|
|
7363
|
+
version: import_chaindata_provider63.MINIMETADATA_VERSION,
|
|
6852
7364
|
data: null,
|
|
6853
7365
|
extra: null
|
|
6854
7366
|
};
|
|
@@ -6858,13 +7370,13 @@ var getMiniMetadata11 = ({
|
|
|
6858
7370
|
var import_api_contract3 = require("@polkadot/api-contract");
|
|
6859
7371
|
var import_types19 = require("@polkadot/types");
|
|
6860
7372
|
var import_utils9 = require("@polkadot-api/utils");
|
|
6861
|
-
var
|
|
7373
|
+
var import_chaindata_provider64 = require("@talismn/chaindata-provider");
|
|
6862
7374
|
var import_scale25 = require("@talismn/scale");
|
|
6863
7375
|
var import_polkadot_api7 = require("polkadot-api");
|
|
6864
|
-
var
|
|
6865
|
-
if (!(0,
|
|
6866
|
-
throw new Error(`Token type ${token.type} is not ${
|
|
6867
|
-
const networkId = (0,
|
|
7376
|
+
var getTransferCallData12 = async ({ from: from2, to, value, token, metadataRpc, connector }) => {
|
|
7377
|
+
if (!(0, import_chaindata_provider64.isTokenOfType)(token, MODULE_TYPE12))
|
|
7378
|
+
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE12}.`);
|
|
7379
|
+
const networkId = (0, import_chaindata_provider64.parseTokenId)(token.id).networkId;
|
|
6868
7380
|
const { builder } = (0, import_scale25.parseMetadataRpc)(metadataRpc);
|
|
6869
7381
|
const { codec, location } = builder.buildCall("Contracts", "call");
|
|
6870
7382
|
const Psp22Abi = new import_api_contract3.Abi(psp22_default);
|
|
@@ -6895,22 +7407,22 @@ var getTransferCallData11 = async ({ from: from2, to, value, token, metadataRpc,
|
|
|
6895
7407
|
};
|
|
6896
7408
|
|
|
6897
7409
|
// src/modules/substrate-psp22/subscribeBalances.ts
|
|
6898
|
-
var
|
|
6899
|
-
var
|
|
6900
|
-
var
|
|
6901
|
-
var
|
|
7410
|
+
var import_lodash_es28 = require("lodash-es");
|
|
7411
|
+
var import_rxjs14 = require("rxjs");
|
|
7412
|
+
var SUBSCRIPTION_INTERVAL9 = 6e3;
|
|
7413
|
+
var subscribeBalances12 = ({
|
|
6902
7414
|
networkId,
|
|
6903
7415
|
tokensWithAddresses,
|
|
6904
7416
|
connector,
|
|
6905
7417
|
miniMetadata
|
|
6906
7418
|
}) => {
|
|
6907
|
-
if (!tokensWithAddresses.length) return (0,
|
|
6908
|
-
return new
|
|
7419
|
+
if (!tokensWithAddresses.length) return (0, import_rxjs14.of)({ success: [], errors: [] });
|
|
7420
|
+
return new import_rxjs14.Observable((subscriber) => {
|
|
6909
7421
|
const abortController = new AbortController();
|
|
6910
7422
|
const poll = async () => {
|
|
6911
7423
|
try {
|
|
6912
7424
|
if (abortController.signal.aborted) return;
|
|
6913
|
-
const balances = await
|
|
7425
|
+
const balances = await fetchBalances12({
|
|
6914
7426
|
networkId,
|
|
6915
7427
|
tokensWithAddresses,
|
|
6916
7428
|
connector,
|
|
@@ -6918,10 +7430,10 @@ var subscribeBalances11 = ({
|
|
|
6918
7430
|
});
|
|
6919
7431
|
if (abortController.signal.aborted) return;
|
|
6920
7432
|
subscriber.next(balances);
|
|
6921
|
-
setTimeout(poll,
|
|
7433
|
+
setTimeout(poll, SUBSCRIPTION_INTERVAL9);
|
|
6922
7434
|
} catch (error) {
|
|
6923
7435
|
log_default.error("Error", {
|
|
6924
|
-
module:
|
|
7436
|
+
module: MODULE_TYPE12,
|
|
6925
7437
|
networkId,
|
|
6926
7438
|
miniMetadata,
|
|
6927
7439
|
addressesByToken: tokensWithAddresses,
|
|
@@ -6934,36 +7446,36 @@ var subscribeBalances11 = ({
|
|
|
6934
7446
|
return () => {
|
|
6935
7447
|
abortController.abort();
|
|
6936
7448
|
};
|
|
6937
|
-
}).pipe((0,
|
|
7449
|
+
}).pipe((0, import_rxjs14.distinctUntilChanged)(import_lodash_es28.isEqual));
|
|
6938
7450
|
};
|
|
6939
7451
|
|
|
6940
7452
|
// src/modules/substrate-psp22/module.ts
|
|
6941
7453
|
var SubPsp22BalanceModule = {
|
|
6942
|
-
type:
|
|
6943
|
-
platform:
|
|
6944
|
-
getMiniMetadata:
|
|
6945
|
-
fetchTokens:
|
|
6946
|
-
fetchBalances:
|
|
6947
|
-
subscribeBalances:
|
|
6948
|
-
getTransferCallData:
|
|
7454
|
+
type: MODULE_TYPE12,
|
|
7455
|
+
platform: PLATFORM12,
|
|
7456
|
+
getMiniMetadata: getMiniMetadata12,
|
|
7457
|
+
fetchTokens: fetchTokens12,
|
|
7458
|
+
fetchBalances: fetchBalances12,
|
|
7459
|
+
subscribeBalances: subscribeBalances12,
|
|
7460
|
+
getTransferCallData: getTransferCallData12
|
|
6949
7461
|
};
|
|
6950
7462
|
|
|
6951
7463
|
// src/modules/substrate-psp22/types.ts
|
|
6952
|
-
var
|
|
6953
|
-
var
|
|
6954
|
-
var SubPsp22TokenConfigSchema =
|
|
6955
|
-
contractAddress:
|
|
7464
|
+
var import_chaindata_provider65 = require("@talismn/chaindata-provider");
|
|
7465
|
+
var import_v417 = __toESM(require("zod/v4"));
|
|
7466
|
+
var SubPsp22TokenConfigSchema = import_v417.default.strictObject({
|
|
7467
|
+
contractAddress: import_chaindata_provider65.SubPsp22TokenSchema.shape.contractAddress,
|
|
6956
7468
|
...TokenConfigBaseSchema.shape
|
|
6957
7469
|
});
|
|
6958
7470
|
|
|
6959
7471
|
// src/modules/substrate-tokens/config.ts
|
|
6960
|
-
var
|
|
6961
|
-
var
|
|
6962
|
-
var
|
|
7472
|
+
var import_chaindata_provider66 = require("@talismn/chaindata-provider");
|
|
7473
|
+
var MODULE_TYPE13 = import_chaindata_provider66.SubTokensTokenSchema.shape.type.value;
|
|
7474
|
+
var PLATFORM13 = import_chaindata_provider66.SubTokensTokenSchema.shape.platform.value;
|
|
6963
7475
|
|
|
6964
7476
|
// src/modules/substrate-tokens/buildQueries.ts
|
|
6965
7477
|
var import_scale26 = require("@talismn/scale");
|
|
6966
|
-
var
|
|
7478
|
+
var import_util13 = require("@talismn/util");
|
|
6967
7479
|
var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
|
|
6968
7480
|
const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
|
|
6969
7481
|
storage: [miniMetadata.extra.palletId, "Accounts"]
|
|
@@ -7011,15 +7523,15 @@ var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
|
|
|
7011
7523
|
stateKeys: [stateKey],
|
|
7012
7524
|
decodeResult
|
|
7013
7525
|
};
|
|
7014
|
-
}).filter(
|
|
7526
|
+
}).filter(import_util13.isNotNil);
|
|
7015
7527
|
};
|
|
7016
7528
|
|
|
7017
7529
|
// src/modules/substrate-tokens/fetchBalances.ts
|
|
7018
|
-
var
|
|
7530
|
+
var fetchBalances13 = async ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
|
|
7019
7531
|
if (!tokensWithAddresses.length) return { success: [], errors: [] };
|
|
7020
7532
|
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
7021
7533
|
if (!miniMetadata?.data) {
|
|
7022
|
-
log_default.warn(`MiniMetadata is required for fetching ${
|
|
7534
|
+
log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE13} balances on ${networkId}.`);
|
|
7023
7535
|
return {
|
|
7024
7536
|
success: [],
|
|
7025
7537
|
errors: balanceDefs.map((def) => ({
|
|
@@ -7029,20 +7541,20 @@ var fetchBalances12 = async ({ networkId, tokensWithAddresses, connector, miniMe
|
|
|
7029
7541
|
}))
|
|
7030
7542
|
};
|
|
7031
7543
|
}
|
|
7032
|
-
if (miniMetadata.source !==
|
|
7033
|
-
log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${
|
|
7544
|
+
if (miniMetadata.source !== MODULE_TYPE13) {
|
|
7545
|
+
log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE13}.`);
|
|
7034
7546
|
return {
|
|
7035
7547
|
success: [],
|
|
7036
7548
|
errors: balanceDefs.map((def) => ({
|
|
7037
7549
|
tokenId: def.token.id,
|
|
7038
7550
|
address: def.address,
|
|
7039
|
-
error: new Error(`Invalid request: miniMetadata source is not ${
|
|
7551
|
+
error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE13}`)
|
|
7040
7552
|
}))
|
|
7041
7553
|
};
|
|
7042
7554
|
}
|
|
7043
7555
|
if (miniMetadata.chainId !== networkId) {
|
|
7044
7556
|
log_default.warn(
|
|
7045
|
-
`Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${
|
|
7557
|
+
`Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE13}. Expected chainId is ${networkId}`
|
|
7046
7558
|
);
|
|
7047
7559
|
return {
|
|
7048
7560
|
success: [],
|
|
@@ -7066,7 +7578,7 @@ var fetchBalances12 = async ({ networkId, tokensWithAddresses, connector, miniMe
|
|
|
7066
7578
|
address: def.address,
|
|
7067
7579
|
networkId,
|
|
7068
7580
|
tokenId: def.token.id,
|
|
7069
|
-
source:
|
|
7581
|
+
source: MODULE_TYPE13,
|
|
7070
7582
|
status: "live",
|
|
7071
7583
|
values: [
|
|
7072
7584
|
{ type: "free", label: "free", amount: "0" },
|
|
@@ -7080,20 +7592,20 @@ var fetchBalances12 = async ({ networkId, tokensWithAddresses, connector, miniMe
|
|
|
7080
7592
|
};
|
|
7081
7593
|
|
|
7082
7594
|
// src/modules/substrate-tokens/fetchTokens.ts
|
|
7083
|
-
var
|
|
7084
|
-
var
|
|
7085
|
-
var
|
|
7595
|
+
var import_chaindata_provider67 = require("@talismn/chaindata-provider");
|
|
7596
|
+
var import_lodash_es29 = require("lodash-es");
|
|
7597
|
+
var fetchTokens13 = async ({
|
|
7086
7598
|
networkId,
|
|
7087
7599
|
tokens,
|
|
7088
7600
|
miniMetadata
|
|
7089
7601
|
}) => {
|
|
7090
7602
|
if (!miniMetadata?.data) return [];
|
|
7091
7603
|
return tokens.map(
|
|
7092
|
-
(tokenConfig) => (0,
|
|
7604
|
+
(tokenConfig) => (0, import_lodash_es29.assign)(
|
|
7093
7605
|
{
|
|
7094
|
-
id: (0,
|
|
7095
|
-
type:
|
|
7096
|
-
platform:
|
|
7606
|
+
id: (0, import_chaindata_provider67.subTokensTokenId)(networkId, tokenConfig.onChainId),
|
|
7607
|
+
type: MODULE_TYPE13,
|
|
7608
|
+
platform: PLATFORM13,
|
|
7097
7609
|
networkId,
|
|
7098
7610
|
onChainId: tokenConfig.onChainId,
|
|
7099
7611
|
symbol: tokenConfig.symbol ?? "Unit",
|
|
@@ -7108,10 +7620,10 @@ var fetchTokens12 = async ({
|
|
|
7108
7620
|
};
|
|
7109
7621
|
|
|
7110
7622
|
// src/modules/substrate-tokens/getMiniMetadata.ts
|
|
7111
|
-
var
|
|
7623
|
+
var import_chaindata_provider68 = require("@talismn/chaindata-provider");
|
|
7112
7624
|
var import_scale27 = require("@talismn/scale");
|
|
7113
|
-
var
|
|
7114
|
-
const source =
|
|
7625
|
+
var getMiniMetadata13 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
7626
|
+
const source = MODULE_TYPE13;
|
|
7115
7627
|
const chainId = networkId;
|
|
7116
7628
|
const systemVersion = getConstantValue(metadataRpc, "System", "Version");
|
|
7117
7629
|
if (specVersion !== systemVersion.spec_version)
|
|
@@ -7130,7 +7642,7 @@ var getMiniMetadata12 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
|
7130
7642
|
source,
|
|
7131
7643
|
chainId,
|
|
7132
7644
|
specVersion,
|
|
7133
|
-
version:
|
|
7645
|
+
version: import_chaindata_provider68.MINIMETADATA_VERSION,
|
|
7134
7646
|
data: getData5(metadataRpc, extra.palletId),
|
|
7135
7647
|
extra
|
|
7136
7648
|
};
|
|
@@ -7144,12 +7656,12 @@ var getData5 = (metadataRpc, pallet) => {
|
|
|
7144
7656
|
|
|
7145
7657
|
// src/modules/substrate-tokens/getTransferCallData.ts
|
|
7146
7658
|
var import_utils10 = require("@polkadot-api/utils");
|
|
7147
|
-
var
|
|
7659
|
+
var import_chaindata_provider69 = require("@talismn/chaindata-provider");
|
|
7148
7660
|
var import_scale28 = require("@talismn/scale");
|
|
7149
7661
|
var import_polkadot_api8 = require("polkadot-api");
|
|
7150
|
-
var
|
|
7151
|
-
if (!(0,
|
|
7152
|
-
throw new Error(`Token type ${token.type} is not ${
|
|
7662
|
+
var getTransferCallData13 = ({ from: from2, to, value, token, type, metadataRpc, config }) => {
|
|
7663
|
+
if (!(0, import_chaindata_provider69.isTokenOfType)(token, MODULE_TYPE13))
|
|
7664
|
+
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE13}.`);
|
|
7153
7665
|
const { builder } = (0, import_scale28.parseMetadataRpc)(metadataRpc);
|
|
7154
7666
|
const options = getCallDataOptions(to, token, value, type, config);
|
|
7155
7667
|
const callData = getCallDataFromOptions(builder, options);
|
|
@@ -7262,13 +7774,13 @@ var getCallDataOptions = (to, token, value, type, config) => {
|
|
|
7262
7774
|
};
|
|
7263
7775
|
|
|
7264
7776
|
// src/modules/substrate-tokens/subscribeBalances.ts
|
|
7265
|
-
var
|
|
7266
|
-
var
|
|
7267
|
-
if (!tokensWithAddresses.length) return (0,
|
|
7777
|
+
var import_rxjs15 = require("rxjs");
|
|
7778
|
+
var subscribeBalances13 = ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
|
|
7779
|
+
if (!tokensWithAddresses.length) return (0, import_rxjs15.of)({ success: [], errors: [] });
|
|
7268
7780
|
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
7269
7781
|
const queries = buildQueries3(networkId, balanceDefs, miniMetadata);
|
|
7270
7782
|
return getRpcQueryPack$(connector, networkId, queries).pipe(
|
|
7271
|
-
(0,
|
|
7783
|
+
(0, import_rxjs15.map)((balances) => ({
|
|
7272
7784
|
success: balances,
|
|
7273
7785
|
errors: []
|
|
7274
7786
|
}))
|
|
@@ -7277,31 +7789,31 @@ var subscribeBalances12 = ({ networkId, tokensWithAddresses, connector, miniMeta
|
|
|
7277
7789
|
|
|
7278
7790
|
// src/modules/substrate-tokens/module.ts
|
|
7279
7791
|
var SubTokensBalanceModule = {
|
|
7280
|
-
type:
|
|
7281
|
-
platform:
|
|
7282
|
-
getMiniMetadata:
|
|
7283
|
-
fetchTokens:
|
|
7284
|
-
fetchBalances:
|
|
7285
|
-
subscribeBalances:
|
|
7286
|
-
getTransferCallData:
|
|
7792
|
+
type: MODULE_TYPE13,
|
|
7793
|
+
platform: PLATFORM13,
|
|
7794
|
+
getMiniMetadata: getMiniMetadata13,
|
|
7795
|
+
fetchTokens: fetchTokens13,
|
|
7796
|
+
fetchBalances: fetchBalances13,
|
|
7797
|
+
subscribeBalances: subscribeBalances13,
|
|
7798
|
+
getTransferCallData: getTransferCallData13
|
|
7287
7799
|
};
|
|
7288
7800
|
|
|
7289
7801
|
// src/modules/substrate-tokens/types.ts
|
|
7290
|
-
var
|
|
7291
|
-
var
|
|
7292
|
-
var SubTokensTokenConfigSchema =
|
|
7293
|
-
onChainId:
|
|
7802
|
+
var import_chaindata_provider70 = require("@talismn/chaindata-provider");
|
|
7803
|
+
var import_v418 = __toESM(require("zod/v4"));
|
|
7804
|
+
var SubTokensTokenConfigSchema = import_v418.default.strictObject({
|
|
7805
|
+
onChainId: import_chaindata_provider70.SubTokensTokenSchema.shape.onChainId,
|
|
7294
7806
|
...TokenConfigBaseSchema.shape,
|
|
7295
7807
|
// force these 3 fields because in this module we wont pull anything from chain
|
|
7296
|
-
symbol:
|
|
7297
|
-
decimals:
|
|
7298
|
-
existentialDeposit:
|
|
7808
|
+
symbol: import_v418.default.string().nonempty(),
|
|
7809
|
+
decimals: import_v418.default.number(),
|
|
7810
|
+
existentialDeposit: import_v418.default.string().nonempty()
|
|
7299
7811
|
});
|
|
7300
|
-
var SubTokensModuleConfigSchema =
|
|
7301
|
-
palletId:
|
|
7812
|
+
var SubTokensModuleConfigSchema = import_v418.default.strictObject({
|
|
7813
|
+
palletId: import_v418.default.string().optional()
|
|
7302
7814
|
});
|
|
7303
|
-
var SubTokensMiniMetadataExtraSchema =
|
|
7304
|
-
palletId:
|
|
7815
|
+
var SubTokensMiniMetadataExtraSchema = import_v418.default.strictObject({
|
|
7816
|
+
palletId: import_v418.default.string()
|
|
7305
7817
|
});
|
|
7306
7818
|
|
|
7307
7819
|
// src/modules/index.ts
|
|
@@ -7317,12 +7829,13 @@ var BALANCE_MODULES = [
|
|
|
7317
7829
|
EvmUniswapV2BalanceModule,
|
|
7318
7830
|
EvmNativeBalanceModule,
|
|
7319
7831
|
SolNativeBalanceModule,
|
|
7320
|
-
SolSplBalanceModule
|
|
7832
|
+
SolSplBalanceModule,
|
|
7833
|
+
SolToken2022BalanceModule
|
|
7321
7834
|
];
|
|
7322
7835
|
|
|
7323
7836
|
// src/getMiniMetadatas/getMetadataRpc.ts
|
|
7324
7837
|
var import_sapi = require("@talismn/sapi");
|
|
7325
|
-
var
|
|
7838
|
+
var import_util14 = require("@talismn/util");
|
|
7326
7839
|
var CACHE = /* @__PURE__ */ new Map();
|
|
7327
7840
|
var getMetadataRpc = async (chainConnector, networkId) => {
|
|
7328
7841
|
if (CACHE.has(networkId)) return CACHE.get(networkId);
|
|
@@ -7336,7 +7849,7 @@ var getMetadataRpc = async (chainConnector, networkId) => {
|
|
|
7336
7849
|
try {
|
|
7337
7850
|
return await pResult;
|
|
7338
7851
|
} catch (cause) {
|
|
7339
|
-
if ((0,
|
|
7852
|
+
if ((0, import_util14.isAbortError)(cause)) throw cause;
|
|
7340
7853
|
throw new Error(`Failed to fetch metadataRpc for network ${networkId}`, { cause });
|
|
7341
7854
|
} finally {
|
|
7342
7855
|
CACHE.delete(networkId);
|
|
@@ -7424,37 +7937,37 @@ var BalancesProvider = class {
|
|
|
7424
7937
|
constructor(chaindataProvider, chainConnectors, storage = DEFAULT_STORAGE) {
|
|
7425
7938
|
this.#chaindataProvider = chaindataProvider;
|
|
7426
7939
|
this.#chainConnectors = chainConnectors;
|
|
7427
|
-
this.#storage = new
|
|
7428
|
-
balances: (0,
|
|
7429
|
-
miniMetadatas: (0,
|
|
7940
|
+
this.#storage = new import_rxjs16.BehaviorSubject({
|
|
7941
|
+
balances: (0, import_lodash_es30.keyBy)(storage.balances.filter(import_util15.isNotNil), (b) => getBalanceId(b)),
|
|
7942
|
+
miniMetadatas: (0, import_lodash_es30.keyBy)(storage.miniMetadatas.filter(import_util15.isNotNil), (m) => m.id)
|
|
7430
7943
|
});
|
|
7431
7944
|
}
|
|
7432
7945
|
get storage$() {
|
|
7433
7946
|
return this.#storage.pipe(
|
|
7434
|
-
(0,
|
|
7947
|
+
(0, import_rxjs16.map)(
|
|
7435
7948
|
({ balances, miniMetadatas }) => ({
|
|
7436
|
-
balances: (0,
|
|
7437
|
-
miniMetadatas: (0,
|
|
7949
|
+
balances: (0, import_lodash_es30.values)(balances).filter(import_util15.isNotNil).sort(sortByBalanceId),
|
|
7950
|
+
miniMetadatas: (0, import_lodash_es30.values)(miniMetadatas).filter(import_util15.isNotNil).sort(sortByMiniMetadataId)
|
|
7438
7951
|
}),
|
|
7439
|
-
(0,
|
|
7952
|
+
(0, import_rxjs16.shareReplay)(1)
|
|
7440
7953
|
)
|
|
7441
7954
|
);
|
|
7442
7955
|
}
|
|
7443
7956
|
get storedMiniMetadataMapById$() {
|
|
7444
7957
|
return this.#storage.pipe(
|
|
7445
|
-
(0,
|
|
7446
|
-
(0,
|
|
7447
|
-
(0,
|
|
7958
|
+
(0, import_rxjs16.map)((storage) => (0, import_lodash_es30.keyBy)(storage.miniMetadatas, (m) => m.id)),
|
|
7959
|
+
(0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual),
|
|
7960
|
+
(0, import_rxjs16.shareReplay)(1)
|
|
7448
7961
|
);
|
|
7449
7962
|
}
|
|
7450
7963
|
// this is the only public method
|
|
7451
7964
|
getBalances$(addressesByTokenId) {
|
|
7452
7965
|
return this.cleanupAddressesByTokenId$(addressesByTokenId).pipe(
|
|
7453
|
-
(0,
|
|
7966
|
+
(0, import_rxjs16.map)(
|
|
7454
7967
|
// split by network
|
|
7455
|
-
(addressesByTokenId2) => (0,
|
|
7968
|
+
(addressesByTokenId2) => (0, import_lodash_es30.toPairs)(addressesByTokenId2).reduce(
|
|
7456
7969
|
(acc, [tokenId, addresses]) => {
|
|
7457
|
-
const networkId = (0,
|
|
7970
|
+
const networkId = (0, import_chaindata_provider71.parseTokenId)(tokenId).networkId;
|
|
7458
7971
|
if (!acc[networkId]) acc[networkId] = {};
|
|
7459
7972
|
acc[networkId][tokenId] = addresses;
|
|
7460
7973
|
return acc;
|
|
@@ -7462,21 +7975,21 @@ var BalancesProvider = class {
|
|
|
7462
7975
|
{}
|
|
7463
7976
|
)
|
|
7464
7977
|
),
|
|
7465
|
-
(0,
|
|
7466
|
-
if (!(0,
|
|
7467
|
-
return (0,
|
|
7468
|
-
isStale: (0,
|
|
7469
|
-
(0,
|
|
7470
|
-
(0,
|
|
7978
|
+
(0, import_rxjs16.switchMap)((addressesByTokenIdByNetworkId) => {
|
|
7979
|
+
if (!(0, import_lodash_es30.keys)(addressesByTokenIdByNetworkId).length) return (0, import_rxjs16.of)({ isStale: false, results: [] });
|
|
7980
|
+
return (0, import_rxjs16.combineLatest)({
|
|
7981
|
+
isStale: (0, import_rxjs16.timer)(3e4).pipe(
|
|
7982
|
+
(0, import_rxjs16.map)(() => true),
|
|
7983
|
+
(0, import_rxjs16.startWith)(false)
|
|
7471
7984
|
),
|
|
7472
|
-
results: (0,
|
|
7473
|
-
(0,
|
|
7985
|
+
results: (0, import_rxjs16.combineLatest)(
|
|
7986
|
+
(0, import_lodash_es30.toPairs)(addressesByTokenIdByNetworkId).map(
|
|
7474
7987
|
([networkId]) => this.getNetworkBalances$(networkId, addressesByTokenIdByNetworkId[networkId])
|
|
7475
7988
|
)
|
|
7476
7989
|
)
|
|
7477
7990
|
});
|
|
7478
7991
|
}),
|
|
7479
|
-
(0,
|
|
7992
|
+
(0, import_rxjs16.map)(
|
|
7480
7993
|
// combine
|
|
7481
7994
|
({ isStale, results }) => ({
|
|
7482
7995
|
status: !isStale && results.some(({ status }) => status === "initialising") ? "initialising" : "live",
|
|
@@ -7488,14 +8001,14 @@ var BalancesProvider = class {
|
|
|
7488
8001
|
failedBalanceIds: results.flatMap((result) => result.failedBalanceIds)
|
|
7489
8002
|
})
|
|
7490
8003
|
),
|
|
7491
|
-
(0,
|
|
8004
|
+
(0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual)
|
|
7492
8005
|
);
|
|
7493
8006
|
}
|
|
7494
8007
|
fetchBalances(addressesByTokenId) {
|
|
7495
|
-
return (0,
|
|
8008
|
+
return (0, import_rxjs16.firstValueFrom)(
|
|
7496
8009
|
this.getBalances$(addressesByTokenId).pipe(
|
|
7497
|
-
(0,
|
|
7498
|
-
(0,
|
|
8010
|
+
(0, import_rxjs16.filter)(({ status }) => status === "live"),
|
|
8011
|
+
(0, import_rxjs16.map)(({ balances }) => balances)
|
|
7499
8012
|
)
|
|
7500
8013
|
);
|
|
7501
8014
|
}
|
|
@@ -7505,12 +8018,12 @@ var BalancesProvider = class {
|
|
|
7505
8018
|
getNetworkBalances$(networkId, addressesByTokenId) {
|
|
7506
8019
|
const network$ = this.#chaindataProvider.getNetworkById$(networkId);
|
|
7507
8020
|
const tokensMapById$ = this.#chaindataProvider.getTokensMapById$();
|
|
7508
|
-
return (0,
|
|
7509
|
-
(0,
|
|
7510
|
-
const tokensAndAddresses = (0,
|
|
8021
|
+
return (0, import_rxjs16.combineLatest)([network$, tokensMapById$]).pipe(
|
|
8022
|
+
(0, import_rxjs16.switchMap)(([network, tokensMapById]) => {
|
|
8023
|
+
const tokensAndAddresses = (0, import_lodash_es30.toPairs)(addressesByTokenId).map(
|
|
7511
8024
|
([tokenId, addresses]) => [tokensMapById[tokenId], addresses]
|
|
7512
8025
|
);
|
|
7513
|
-
return (0,
|
|
8026
|
+
return (0, import_rxjs16.combineLatest)(
|
|
7514
8027
|
BALANCE_MODULES.filter((mod) => mod.platform === network?.platform).map((mod) => {
|
|
7515
8028
|
const tokensWithAddresses = tokensAndAddresses.filter(
|
|
7516
8029
|
([token]) => token.type === mod.type
|
|
@@ -7527,41 +8040,41 @@ var BalancesProvider = class {
|
|
|
7527
8040
|
}
|
|
7528
8041
|
default: {
|
|
7529
8042
|
log_default.warn("[balances] Unsupported network platform for module", { networkId, mod });
|
|
7530
|
-
return (0,
|
|
8043
|
+
return (0, import_rxjs16.of)({ status: "live", balances: [], failedBalanceIds: [] });
|
|
7531
8044
|
}
|
|
7532
8045
|
}
|
|
7533
8046
|
})
|
|
7534
8047
|
);
|
|
7535
8048
|
}),
|
|
7536
|
-
(0,
|
|
8049
|
+
(0, import_rxjs16.map)((results) => {
|
|
7537
8050
|
const errorBalanceIds = results.flatMap((result) => result.failedBalanceIds);
|
|
7538
|
-
const staleBalances = errorBalanceIds.map((balanceId) => this.#storage.value.balances[balanceId]).filter(
|
|
8051
|
+
const staleBalances = errorBalanceIds.map((balanceId) => this.#storage.value.balances[balanceId]).filter(import_util15.isNotNil).map((b) => ({ ...b, status: "stale" }));
|
|
7539
8052
|
return {
|
|
7540
8053
|
status: results.some(({ status }) => status === "initialising") ? "initialising" : "live",
|
|
7541
8054
|
balances: results.flatMap((result) => result.balances).concat(staleBalances).sort(sortByBalanceId),
|
|
7542
8055
|
failedBalanceIds: []
|
|
7543
8056
|
};
|
|
7544
8057
|
}),
|
|
7545
|
-
(0,
|
|
8058
|
+
(0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual)
|
|
7546
8059
|
);
|
|
7547
8060
|
}
|
|
7548
8061
|
getPolkadotNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
|
|
7549
|
-
return (0,
|
|
8062
|
+
return (0, import_util15.getSharedObservable)(
|
|
7550
8063
|
`BalancesProvider.getPolkadotNetworkModuleBalances$`,
|
|
7551
8064
|
{ networkId, mod, tokensWithAddresses },
|
|
7552
8065
|
() => {
|
|
7553
8066
|
if (!tokensWithAddresses.length)
|
|
7554
|
-
return (0,
|
|
7555
|
-
const moduleAddressesByTokenId = (0,
|
|
8067
|
+
return (0, import_rxjs16.of)({ status: "live", balances: [], failedBalanceIds: [] });
|
|
8068
|
+
const moduleAddressesByTokenId = (0, import_lodash_es30.fromPairs)(
|
|
7556
8069
|
tokensWithAddresses.map(([token, addresses]) => [token.id, addresses])
|
|
7557
8070
|
);
|
|
7558
|
-
const balanceIds = (0,
|
|
8071
|
+
const balanceIds = (0, import_lodash_es30.toPairs)(moduleAddressesByTokenId).flatMap(
|
|
7559
8072
|
([tokenId, addresses]) => addresses.map((address) => getBalanceId({ tokenId, address }))
|
|
7560
8073
|
);
|
|
7561
8074
|
if (!this.#chainConnectors.substrate) {
|
|
7562
8075
|
log_default.warn("[balances] no substrate connector or miniMetadata for module", mod.type);
|
|
7563
|
-
return (0,
|
|
7564
|
-
() => (0,
|
|
8076
|
+
return (0, import_rxjs16.defer)(
|
|
8077
|
+
() => (0, import_rxjs16.of)({
|
|
7565
8078
|
status: "initialising",
|
|
7566
8079
|
balances: this.getStoredBalances(moduleAddressesByTokenId),
|
|
7567
8080
|
failedBalanceIds: []
|
|
@@ -7569,8 +8082,8 @@ var BalancesProvider = class {
|
|
|
7569
8082
|
);
|
|
7570
8083
|
}
|
|
7571
8084
|
const moduleBalances$ = this.getNetworkMiniMetadatas$(networkId).pipe(
|
|
7572
|
-
(0,
|
|
7573
|
-
(0,
|
|
8085
|
+
(0, import_rxjs16.map)((miniMetadatas) => miniMetadatas.find((m) => m.source === mod.type)),
|
|
8086
|
+
(0, import_rxjs16.switchMap)(
|
|
7574
8087
|
(miniMetadata) => mod.subscribeBalances({
|
|
7575
8088
|
networkId,
|
|
7576
8089
|
tokensWithAddresses,
|
|
@@ -7578,14 +8091,14 @@ var BalancesProvider = class {
|
|
|
7578
8091
|
miniMetadata
|
|
7579
8092
|
})
|
|
7580
8093
|
),
|
|
7581
|
-
(0,
|
|
8094
|
+
(0, import_rxjs16.catchError)(() => import_rxjs16.EMPTY),
|
|
7582
8095
|
// don't emit, let provider mark balances stale
|
|
7583
|
-
(0,
|
|
8096
|
+
(0, import_rxjs16.tap)((results) => {
|
|
7584
8097
|
if (results.dynamicTokens?.length) {
|
|
7585
8098
|
this.#chaindataProvider.registerDynamicTokens(results.dynamicTokens);
|
|
7586
8099
|
}
|
|
7587
8100
|
}),
|
|
7588
|
-
(0,
|
|
8101
|
+
(0, import_rxjs16.map)(
|
|
7589
8102
|
(results) => ({
|
|
7590
8103
|
status: "live",
|
|
7591
8104
|
// exclude zero balances
|
|
@@ -7595,16 +8108,16 @@ var BalancesProvider = class {
|
|
|
7595
8108
|
)
|
|
7596
8109
|
})
|
|
7597
8110
|
),
|
|
7598
|
-
(0,
|
|
8111
|
+
(0, import_rxjs16.tap)((results) => {
|
|
7599
8112
|
this.updateStorage$(balanceIds, results);
|
|
7600
8113
|
}),
|
|
7601
8114
|
// shareReplay + keepAlive(0) keep the subscription alive while root observable is being unsubscribed+resubscribed, in case any input change
|
|
7602
|
-
(0,
|
|
7603
|
-
(0,
|
|
8115
|
+
(0, import_rxjs16.shareReplay)({ refCount: true, bufferSize: 1 }),
|
|
8116
|
+
(0, import_util15.keepAlive)(0)
|
|
7604
8117
|
);
|
|
7605
|
-
return (0,
|
|
8118
|
+
return (0, import_rxjs16.defer)(
|
|
7606
8119
|
() => moduleBalances$.pipe(
|
|
7607
|
-
(0,
|
|
8120
|
+
(0, import_rxjs16.startWith)({
|
|
7608
8121
|
status: "initialising",
|
|
7609
8122
|
balances: this.getStoredBalances(moduleAddressesByTokenId),
|
|
7610
8123
|
failedBalanceIds: []
|
|
@@ -7615,22 +8128,22 @@ var BalancesProvider = class {
|
|
|
7615
8128
|
);
|
|
7616
8129
|
}
|
|
7617
8130
|
getEthereumNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
|
|
7618
|
-
return (0,
|
|
8131
|
+
return (0, import_util15.getSharedObservable)(
|
|
7619
8132
|
`BalancesProvider.getEthereumNetworkModuleBalances$`,
|
|
7620
8133
|
{ networkId, mod, tokensWithAddresses },
|
|
7621
8134
|
() => {
|
|
7622
8135
|
if (!tokensWithAddresses.length)
|
|
7623
|
-
return (0,
|
|
7624
|
-
const moduleAddressesByTokenId = (0,
|
|
8136
|
+
return (0, import_rxjs16.of)({ status: "live", balances: [], failedBalanceIds: [] });
|
|
8137
|
+
const moduleAddressesByTokenId = (0, import_lodash_es30.fromPairs)(
|
|
7625
8138
|
tokensWithAddresses.map(([token, addresses]) => [token.id, addresses])
|
|
7626
8139
|
);
|
|
7627
|
-
const balanceIds = (0,
|
|
8140
|
+
const balanceIds = (0, import_lodash_es30.toPairs)(moduleAddressesByTokenId).flatMap(
|
|
7628
8141
|
([tokenId, addresses]) => addresses.map((address) => getBalanceId({ tokenId, address }))
|
|
7629
8142
|
);
|
|
7630
8143
|
if (!this.#chainConnectors.evm) {
|
|
7631
8144
|
log_default.warn("[balances] no ethereum connector for module", mod.type);
|
|
7632
|
-
return (0,
|
|
7633
|
-
() => (0,
|
|
8145
|
+
return (0, import_rxjs16.defer)(
|
|
8146
|
+
() => (0, import_rxjs16.of)({
|
|
7634
8147
|
status: "initialising",
|
|
7635
8148
|
balances: this.getStoredBalances(moduleAddressesByTokenId),
|
|
7636
8149
|
failedBalanceIds: []
|
|
@@ -7642,9 +8155,9 @@ var BalancesProvider = class {
|
|
|
7642
8155
|
tokensWithAddresses,
|
|
7643
8156
|
connector: this.#chainConnectors.evm
|
|
7644
8157
|
}).pipe(
|
|
7645
|
-
(0,
|
|
8158
|
+
(0, import_rxjs16.catchError)(() => import_rxjs16.EMPTY),
|
|
7646
8159
|
// don't emit, let provider mark balances stale
|
|
7647
|
-
(0,
|
|
8160
|
+
(0, import_rxjs16.map)(
|
|
7648
8161
|
(results) => ({
|
|
7649
8162
|
status: "live",
|
|
7650
8163
|
// exclude zero balances
|
|
@@ -7654,16 +8167,16 @@ var BalancesProvider = class {
|
|
|
7654
8167
|
)
|
|
7655
8168
|
})
|
|
7656
8169
|
),
|
|
7657
|
-
(0,
|
|
8170
|
+
(0, import_rxjs16.tap)((results) => {
|
|
7658
8171
|
this.updateStorage$(balanceIds, results);
|
|
7659
8172
|
}),
|
|
7660
8173
|
// shareReplay + keepAlive(0) keep the subscription alive while root observable is being unsubscribed+resubscribed, in case any input change
|
|
7661
|
-
(0,
|
|
7662
|
-
(0,
|
|
8174
|
+
(0, import_rxjs16.shareReplay)({ refCount: true, bufferSize: 1 }),
|
|
8175
|
+
(0, import_util15.keepAlive)(0)
|
|
7663
8176
|
);
|
|
7664
|
-
return (0,
|
|
8177
|
+
return (0, import_rxjs16.defer)(
|
|
7665
8178
|
() => moduleBalances$.pipe(
|
|
7666
|
-
(0,
|
|
8179
|
+
(0, import_rxjs16.startWith)({
|
|
7667
8180
|
status: "initialising",
|
|
7668
8181
|
balances: this.getStoredBalances(moduleAddressesByTokenId),
|
|
7669
8182
|
failedBalanceIds: []
|
|
@@ -7674,22 +8187,22 @@ var BalancesProvider = class {
|
|
|
7674
8187
|
);
|
|
7675
8188
|
}
|
|
7676
8189
|
getSolanaNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
|
|
7677
|
-
return (0,
|
|
8190
|
+
return (0, import_util15.getSharedObservable)(
|
|
7678
8191
|
`BalancesProvider.getSolanaNetworkModuleBalances$`,
|
|
7679
8192
|
{ networkId, mod, tokensWithAddresses },
|
|
7680
8193
|
() => {
|
|
7681
8194
|
if (!tokensWithAddresses.length)
|
|
7682
|
-
return (0,
|
|
7683
|
-
const moduleAddressesByTokenId = (0,
|
|
8195
|
+
return (0, import_rxjs16.of)({ status: "live", balances: [], failedBalanceIds: [] });
|
|
8196
|
+
const moduleAddressesByTokenId = (0, import_lodash_es30.fromPairs)(
|
|
7684
8197
|
tokensWithAddresses.map(([token, addresses]) => [token.id, addresses])
|
|
7685
8198
|
);
|
|
7686
|
-
const balanceIds = (0,
|
|
8199
|
+
const balanceIds = (0, import_lodash_es30.toPairs)(moduleAddressesByTokenId).flatMap(
|
|
7687
8200
|
([tokenId, addresses]) => addresses.map((address) => getBalanceId({ tokenId, address }))
|
|
7688
8201
|
);
|
|
7689
8202
|
if (!this.#chainConnectors.solana) {
|
|
7690
8203
|
log_default.warn("[balances] no solana connector for module", mod.type);
|
|
7691
|
-
return (0,
|
|
7692
|
-
() => (0,
|
|
8204
|
+
return (0, import_rxjs16.defer)(
|
|
8205
|
+
() => (0, import_rxjs16.of)({
|
|
7693
8206
|
status: "initialising",
|
|
7694
8207
|
balances: this.getStoredBalances(moduleAddressesByTokenId),
|
|
7695
8208
|
failedBalanceIds: []
|
|
@@ -7701,9 +8214,14 @@ var BalancesProvider = class {
|
|
|
7701
8214
|
tokensWithAddresses,
|
|
7702
8215
|
connector: this.#chainConnectors.solana
|
|
7703
8216
|
}).pipe(
|
|
7704
|
-
(0,
|
|
8217
|
+
(0, import_rxjs16.catchError)(() => import_rxjs16.EMPTY),
|
|
7705
8218
|
// don't emit, let provider mark balances stale
|
|
7706
|
-
(0,
|
|
8219
|
+
(0, import_rxjs16.tap)((results) => {
|
|
8220
|
+
if (results.dynamicTokens?.length) {
|
|
8221
|
+
this.#chaindataProvider.registerDynamicTokens(results.dynamicTokens);
|
|
8222
|
+
}
|
|
8223
|
+
}),
|
|
8224
|
+
(0, import_rxjs16.map)(
|
|
7707
8225
|
(results) => ({
|
|
7708
8226
|
status: "live",
|
|
7709
8227
|
// exclude zero balances
|
|
@@ -7713,16 +8231,16 @@ var BalancesProvider = class {
|
|
|
7713
8231
|
)
|
|
7714
8232
|
})
|
|
7715
8233
|
),
|
|
7716
|
-
(0,
|
|
8234
|
+
(0, import_rxjs16.tap)((results) => {
|
|
7717
8235
|
this.updateStorage$(balanceIds, results);
|
|
7718
8236
|
}),
|
|
7719
8237
|
// shareReplay + keepAlive(0) keep the subscription alive while root observable is being unsubscribed+resubscribed, in case any input change
|
|
7720
|
-
(0,
|
|
7721
|
-
(0,
|
|
8238
|
+
(0, import_rxjs16.shareReplay)({ refCount: true, bufferSize: 1 }),
|
|
8239
|
+
(0, import_util15.keepAlive)(0)
|
|
7722
8240
|
);
|
|
7723
|
-
return (0,
|
|
8241
|
+
return (0, import_rxjs16.defer)(
|
|
7724
8242
|
() => moduleBalances$.pipe(
|
|
7725
|
-
(0,
|
|
8243
|
+
(0, import_rxjs16.startWith)({
|
|
7726
8244
|
status: "initialising",
|
|
7727
8245
|
balances: this.getStoredBalances(moduleAddressesByTokenId),
|
|
7728
8246
|
failedBalanceIds: []
|
|
@@ -7736,14 +8254,14 @@ var BalancesProvider = class {
|
|
|
7736
8254
|
if (balancesResult.status !== "live") return;
|
|
7737
8255
|
const storage = this.#storage.getValue();
|
|
7738
8256
|
const failedIds = new Set(balancesResult.failedBalanceIds);
|
|
7739
|
-
const balances = (0,
|
|
8257
|
+
const balances = (0, import_lodash_es30.assign)(
|
|
7740
8258
|
{},
|
|
7741
8259
|
storage.balances,
|
|
7742
8260
|
// delete all balances expected in the result set (except the ones that failed). because if they are not present it means they are empty.
|
|
7743
|
-
(0,
|
|
8261
|
+
(0, import_lodash_es30.fromPairs)(
|
|
7744
8262
|
balanceIds.filter((bid) => !failedIds.has(bid)).map((balanceId) => [balanceId, void 0])
|
|
7745
8263
|
),
|
|
7746
|
-
(0,
|
|
8264
|
+
(0, import_lodash_es30.keyBy)(
|
|
7747
8265
|
// storage balances must have status "cache", because they are used as start value when initialising subsequent subscriptions
|
|
7748
8266
|
balancesResult.balances.map((b) => ({ ...b, status: "cache" })),
|
|
7749
8267
|
(b) => getBalanceId(b)
|
|
@@ -7753,24 +8271,24 @@ var BalancesProvider = class {
|
|
|
7753
8271
|
const balance = balances[errorBalanceId];
|
|
7754
8272
|
if (balance) balance.status = "stale";
|
|
7755
8273
|
}
|
|
7756
|
-
this.#storage.next((0,
|
|
8274
|
+
this.#storage.next((0, import_lodash_es30.assign)({}, storage, { balances }));
|
|
7757
8275
|
}
|
|
7758
8276
|
getNetworkMiniMetadatas$(networkId) {
|
|
7759
|
-
return (0,
|
|
8277
|
+
return (0, import_util15.getSharedObservable)(`BalancesProvider.getNetworkMiniMetadatas$`, { networkId }, () => {
|
|
7760
8278
|
return this.#chaindataProvider.getNetworkById$(networkId).pipe(
|
|
7761
|
-
(0,
|
|
7762
|
-
(network) => (0,
|
|
7763
|
-
(0,
|
|
7764
|
-
(specVersion) => specVersion === null ? (0,
|
|
8279
|
+
(0, import_rxjs16.switchMap)(
|
|
8280
|
+
(network) => (0, import_chaindata_provider71.isNetworkDot)(network) ? this.getNetworkSpecVersion$(networkId).pipe(
|
|
8281
|
+
(0, import_rxjs16.switchMap)(
|
|
8282
|
+
(specVersion) => specVersion === null ? (0, import_rxjs16.of)([]) : this.getMiniMetadatas$(networkId, specVersion)
|
|
7765
8283
|
)
|
|
7766
|
-
) : (0,
|
|
8284
|
+
) : (0, import_rxjs16.of)([])
|
|
7767
8285
|
),
|
|
7768
|
-
(0,
|
|
8286
|
+
(0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual)
|
|
7769
8287
|
);
|
|
7770
8288
|
});
|
|
7771
8289
|
}
|
|
7772
8290
|
getNetworkSpecVersion$(networkId) {
|
|
7773
|
-
return (0,
|
|
8291
|
+
return (0, import_rxjs16.from)(
|
|
7774
8292
|
(0, import_viem9.withRetry)(() => getSpecVersion(this.#chainConnectors.substrate, networkId), {
|
|
7775
8293
|
delay: 2e3,
|
|
7776
8294
|
shouldRetry: (err) => {
|
|
@@ -7779,9 +8297,9 @@ var BalancesProvider = class {
|
|
|
7779
8297
|
}
|
|
7780
8298
|
})
|
|
7781
8299
|
).pipe(
|
|
7782
|
-
(0,
|
|
8300
|
+
(0, import_rxjs16.catchError)(() => {
|
|
7783
8301
|
log_default.warn("Failed to fetch spec version for network", networkId);
|
|
7784
|
-
return (0,
|
|
8302
|
+
return (0, import_rxjs16.of)(null);
|
|
7785
8303
|
})
|
|
7786
8304
|
);
|
|
7787
8305
|
}
|
|
@@ -7793,15 +8311,15 @@ var BalancesProvider = class {
|
|
|
7793
8311
|
source: mod.type
|
|
7794
8312
|
})
|
|
7795
8313
|
);
|
|
7796
|
-
return (0,
|
|
8314
|
+
return (0, import_rxjs16.combineLatest)({
|
|
7797
8315
|
defaultMiniMetadatas: this.getDefaultMiniMetadatas$(miniMetadataIds),
|
|
7798
8316
|
storedMiniMetadatas: this.getStoredMiniMetadatas$(miniMetadataIds)
|
|
7799
8317
|
}).pipe(
|
|
7800
|
-
(0,
|
|
7801
|
-
if (defaultMiniMetadatas) return (0,
|
|
7802
|
-
if (storedMiniMetadatas) return (0,
|
|
7803
|
-
if (!this.#chainConnectors.substrate) return (0,
|
|
7804
|
-
return (0,
|
|
8318
|
+
(0, import_rxjs16.switchMap)(({ storedMiniMetadatas, defaultMiniMetadatas }) => {
|
|
8319
|
+
if (defaultMiniMetadatas) return (0, import_rxjs16.of)(defaultMiniMetadatas);
|
|
8320
|
+
if (storedMiniMetadatas) return (0, import_rxjs16.of)(storedMiniMetadatas);
|
|
8321
|
+
if (!this.#chainConnectors.substrate) return (0, import_rxjs16.of)([]);
|
|
8322
|
+
return (0, import_rxjs16.from)(
|
|
7805
8323
|
(0, import_viem9.withRetry)(
|
|
7806
8324
|
() => (
|
|
7807
8325
|
// can fail if metadata cant be fetched
|
|
@@ -7821,65 +8339,65 @@ var BalancesProvider = class {
|
|
|
7821
8339
|
}
|
|
7822
8340
|
)
|
|
7823
8341
|
).pipe(
|
|
7824
|
-
(0,
|
|
8342
|
+
(0, import_rxjs16.catchError)(() => {
|
|
7825
8343
|
log_default.warn("Failed to fetch metadata for network", networkId);
|
|
7826
|
-
return (0,
|
|
8344
|
+
return (0, import_rxjs16.of)([]);
|
|
7827
8345
|
}),
|
|
7828
8346
|
// and persist in storage for later reuse
|
|
7829
|
-
(0,
|
|
8347
|
+
(0, import_rxjs16.tap)((newMiniMetadatas) => {
|
|
7830
8348
|
if (!newMiniMetadatas.length) return;
|
|
7831
8349
|
const storage = this.#storage.getValue();
|
|
7832
|
-
const miniMetadatas = (0,
|
|
8350
|
+
const miniMetadatas = (0, import_lodash_es30.assign)(
|
|
7833
8351
|
// keep minimetadatas of other networks
|
|
7834
|
-
(0,
|
|
7835
|
-
(0,
|
|
8352
|
+
(0, import_lodash_es30.keyBy)(
|
|
8353
|
+
(0, import_lodash_es30.values)(storage.miniMetadatas).filter((m) => m.chainId !== networkId),
|
|
7836
8354
|
(m) => m.id
|
|
7837
8355
|
),
|
|
7838
8356
|
// add the ones for our network
|
|
7839
|
-
(0,
|
|
8357
|
+
(0, import_lodash_es30.keyBy)(newMiniMetadatas, (m) => m.id)
|
|
7840
8358
|
);
|
|
7841
|
-
this.#storage.next((0,
|
|
8359
|
+
this.#storage.next((0, import_lodash_es30.assign)({}, storage, { miniMetadatas }));
|
|
7842
8360
|
})
|
|
7843
8361
|
);
|
|
7844
8362
|
}),
|
|
7845
8363
|
// emit only when mini metadata changes, as a change here would restart all subscriptions for the network
|
|
7846
|
-
(0,
|
|
8364
|
+
(0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual)
|
|
7847
8365
|
);
|
|
7848
8366
|
}
|
|
7849
8367
|
getStoredMiniMetadatas$(miniMetadataIds) {
|
|
7850
8368
|
return this.storedMiniMetadataMapById$.pipe(
|
|
7851
|
-
(0,
|
|
8369
|
+
(0, import_rxjs16.map)((mapById) => {
|
|
7852
8370
|
const miniMetadatas = miniMetadataIds.map((id) => mapById[id]);
|
|
7853
|
-
return miniMetadatas.length && miniMetadatas.every(
|
|
8371
|
+
return miniMetadatas.length && miniMetadatas.every(import_util15.isTruthy) ? miniMetadatas : null;
|
|
7854
8372
|
}),
|
|
7855
8373
|
// source changes very often
|
|
7856
|
-
(0,
|
|
8374
|
+
(0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual)
|
|
7857
8375
|
);
|
|
7858
8376
|
}
|
|
7859
8377
|
getDefaultMiniMetadatas$(miniMetadataIds) {
|
|
7860
8378
|
return this.#chaindataProvider.miniMetadatasMapById$.pipe(
|
|
7861
|
-
(0,
|
|
8379
|
+
(0, import_rxjs16.map)((mapById) => {
|
|
7862
8380
|
const miniMetadatas = miniMetadataIds.map((id) => mapById[id]);
|
|
7863
|
-
return miniMetadatas.length && miniMetadatas.every(
|
|
8381
|
+
return miniMetadatas.length && miniMetadatas.every(import_util15.isTruthy) ? miniMetadatas : null;
|
|
7864
8382
|
})
|
|
7865
8383
|
);
|
|
7866
8384
|
}
|
|
7867
8385
|
getStoredBalances(addressesByToken) {
|
|
7868
|
-
const balanceDefs = (0,
|
|
8386
|
+
const balanceDefs = (0, import_lodash_es30.toPairs)(addressesByToken).flatMap(
|
|
7869
8387
|
([tokenId, addresses]) => addresses.map((address) => [tokenId, address])
|
|
7870
8388
|
);
|
|
7871
|
-
return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({ address, tokenId })]).filter(
|
|
8389
|
+
return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({ address, tokenId })]).filter(import_util15.isNotNil).sort(sortByBalanceId);
|
|
7872
8390
|
}
|
|
7873
8391
|
cleanupAddressesByTokenId$(addressesByTokenId) {
|
|
7874
8392
|
return this.#chaindataProvider.getNetworksMapById$().pipe(
|
|
7875
|
-
(0,
|
|
7876
|
-
return (0,
|
|
7877
|
-
(0,
|
|
7878
|
-
const networkId = (0,
|
|
8393
|
+
(0, import_rxjs16.map)((networksById) => {
|
|
8394
|
+
return (0, import_lodash_es30.fromPairs)(
|
|
8395
|
+
(0, import_lodash_es30.toPairs)(addressesByTokenId).map(([tokenId, addresses]) => {
|
|
8396
|
+
const networkId = (0, import_chaindata_provider71.parseTokenId)(tokenId).networkId;
|
|
7879
8397
|
const network = networksById[networkId];
|
|
7880
8398
|
return [
|
|
7881
8399
|
tokenId,
|
|
7882
|
-
(0,
|
|
8400
|
+
(0, import_lodash_es30.uniq)(addresses.map(import_crypto8.normalizeAddress)).filter(
|
|
7883
8401
|
(address) => network && isAddressCompatibleWithNetwork(network, address)
|
|
7884
8402
|
)
|
|
7885
8403
|
];
|
|
@@ -7918,7 +8436,7 @@ var sortByBalanceId = (a, b) => getBalanceId(a).localeCompare(getBalanceId(b));
|
|
|
7918
8436
|
var sortByMiniMetadataId = (a, b) => a.id.localeCompare(b.id);
|
|
7919
8437
|
|
|
7920
8438
|
// src/version.ts
|
|
7921
|
-
var
|
|
8439
|
+
var import_chaindata_provider72 = require("@talismn/chaindata-provider");
|
|
7922
8440
|
// Annotate the CommonJS export names for ESM import in node:
|
|
7923
8441
|
0 && (module.exports = {
|
|
7924
8442
|
ALPHA_PRICE_SCALE,
|
|
@@ -7942,6 +8460,8 @@ var import_chaindata_provider65 = require("@talismn/chaindata-provider");
|
|
|
7942
8460
|
SolNativeTokenConfigSchema,
|
|
7943
8461
|
SolSplBalanceModule,
|
|
7944
8462
|
SolSplTokenConfigSchema,
|
|
8463
|
+
SolToken2022BalanceModule,
|
|
8464
|
+
SolToken2022TokenConfigSchema,
|
|
7945
8465
|
SubAssetsBalanceModule,
|
|
7946
8466
|
SubAssetsTokenConfigSchema,
|
|
7947
8467
|
SubDTaoBalanceModule,
|