@talismn/balances 1.4.0 → 1.5.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 +62 -12
- package/dist/index.d.ts +62 -12
- package/dist/index.js +462 -231
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +387 -168
- package/dist/index.mjs.map +1 -1
- package/package.json +17 -16
package/dist/index.js
CHANGED
|
@@ -81,7 +81,9 @@ __export(index_exports, {
|
|
|
81
81
|
excludeFromTransferableAmount: () => excludeFromTransferableAmount,
|
|
82
82
|
filterBaseLocks: () => filterBaseLocks,
|
|
83
83
|
filterMirrorTokens: () => filterMirrorTokens,
|
|
84
|
+
findDTaoConvictionLock: () => findDTaoConvictionLock,
|
|
84
85
|
getBalanceId: () => getBalanceId,
|
|
86
|
+
getConvictionLockLabel: () => getConvictionLockLabel,
|
|
85
87
|
getDTaoTokenRates: () => getDTaoTokenRates,
|
|
86
88
|
getLockTitle: () => getLockTitle,
|
|
87
89
|
getLockedType: () => getLockedType,
|
|
@@ -89,14 +91,20 @@ __export(index_exports, {
|
|
|
89
91
|
getValueId: () => getValueId,
|
|
90
92
|
includeInTotalExtraAmount: () => includeInTotalExtraAmount,
|
|
91
93
|
taoToAlpha: () => taoToAlpha,
|
|
94
|
+
taoToAlphaCeil: () => taoToAlphaCeil,
|
|
92
95
|
uniswapV2PairAbi: () => uniswapV2PairAbi
|
|
93
96
|
});
|
|
94
97
|
module.exports = __toCommonJS(index_exports);
|
|
95
98
|
|
|
99
|
+
// src/configureBigNumber.ts
|
|
100
|
+
var import_bignumber = __toESM(require("bignumber.js"));
|
|
101
|
+
import_bignumber.default.set({ STRICT: false });
|
|
102
|
+
var configureBigNumber_default = import_bignumber.default;
|
|
103
|
+
|
|
96
104
|
// src/BalancesProvider.ts
|
|
97
105
|
var import_chaindata_provider71 = require("@talismn/chaindata-provider");
|
|
98
106
|
var import_crypto8 = require("@talismn/crypto");
|
|
99
|
-
var
|
|
107
|
+
var import_util17 = require("@talismn/util");
|
|
100
108
|
var import_lodash_es30 = require("lodash-es");
|
|
101
109
|
var import_rxjs16 = require("rxjs");
|
|
102
110
|
var import_viem9 = require("viem");
|
|
@@ -110,7 +118,7 @@ var import_anylogger = __toESM(require("anylogger"));
|
|
|
110
118
|
// package.json
|
|
111
119
|
var package_default = {
|
|
112
120
|
name: "@talismn/balances",
|
|
113
|
-
version: "1.
|
|
121
|
+
version: "1.5.0",
|
|
114
122
|
author: "Talisman",
|
|
115
123
|
homepage: "https://talisman.xyz",
|
|
116
124
|
license: "GPL-3.0-or-later",
|
|
@@ -138,9 +146,9 @@ var package_default = {
|
|
|
138
146
|
},
|
|
139
147
|
dependencies: {
|
|
140
148
|
"@metaplex-foundation/mpl-token-metadata": "^3.4.0",
|
|
141
|
-
"@metaplex-foundation/umi": "^1.
|
|
149
|
+
"@metaplex-foundation/umi": "^1.5.1",
|
|
142
150
|
"@polkadot-api/utils": "0.2.0",
|
|
143
|
-
"@solana/spl-token": "^0.4.
|
|
151
|
+
"@solana/spl-token": "^0.4.14",
|
|
144
152
|
"@solana/web3.js": "^1.98.2",
|
|
145
153
|
"@talismn/chain-connectors": "workspace:*",
|
|
146
154
|
"@talismn/chaindata-provider": "workspace:*",
|
|
@@ -150,21 +158,22 @@ var package_default = {
|
|
|
150
158
|
"@talismn/token-rates": "workspace:*",
|
|
151
159
|
"@talismn/util": "workspace:*",
|
|
152
160
|
anylogger: "^1.0.11",
|
|
153
|
-
"bignumber.js": "^
|
|
154
|
-
"lodash-es": "4.
|
|
161
|
+
"bignumber.js": "^11.1.3",
|
|
162
|
+
"lodash-es": "4.18.1",
|
|
155
163
|
"p-queue": "8.1.0",
|
|
156
164
|
"polkadot-api": "1.23.3",
|
|
157
|
-
rxjs: "^7.8.
|
|
165
|
+
rxjs: "^7.8.2",
|
|
158
166
|
"scale-ts": "^1.6.1",
|
|
159
|
-
viem: "
|
|
160
|
-
zod: "^
|
|
167
|
+
viem: "2.52.2",
|
|
168
|
+
zod: "^4.4.3"
|
|
161
169
|
},
|
|
162
170
|
devDependencies: {
|
|
163
171
|
"@polkadot/api-contract": "16.1.2",
|
|
164
172
|
"@polkadot/types": "16.1.2",
|
|
165
173
|
"@talismn/tsconfig": "workspace:*",
|
|
166
174
|
"@types/lodash-es": "4.17.12",
|
|
167
|
-
|
|
175
|
+
"@types/node": "^24.5.1",
|
|
176
|
+
typescript: "^6.0.3"
|
|
168
177
|
},
|
|
169
178
|
peerDependencies: {
|
|
170
179
|
"@polkadot/api-contract": "*",
|
|
@@ -1088,6 +1097,7 @@ var import_lodash_es = require("lodash-es");
|
|
|
1088
1097
|
var import_v4 = __toESM(require("zod/v4"));
|
|
1089
1098
|
|
|
1090
1099
|
// src/modules/evm-erc20/utils.ts
|
|
1100
|
+
var import_util = require("@talismn/util");
|
|
1091
1101
|
var import_viem4 = require("viem");
|
|
1092
1102
|
var getErc20ContractData = async (client, contractAddress) => {
|
|
1093
1103
|
try {
|
|
@@ -1098,7 +1108,7 @@ var getErc20ContractData = async (client, contractAddress) => {
|
|
|
1098
1108
|
contract.read.name()
|
|
1099
1109
|
]);
|
|
1100
1110
|
} catch (e) {
|
|
1101
|
-
if (e
|
|
1111
|
+
if ((0, import_util.isErrorOfName)(e, "ContractFunctionExecutionError")) {
|
|
1102
1112
|
const contract = getTypedContract(client, import_viem4.erc20Abi_bytes32, contractAddress);
|
|
1103
1113
|
var [bytesSymbol, decimals, nameSymbol] = await Promise.all([
|
|
1104
1114
|
contract.read.symbol(),
|
|
@@ -1315,21 +1325,30 @@ var fetchBalances2 = async ({
|
|
|
1315
1325
|
}
|
|
1316
1326
|
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
1317
1327
|
if (client.chain?.contracts?.multicall3 && balanceDefs.length > 1) {
|
|
1318
|
-
|
|
1319
|
-
|
|
1328
|
+
try {
|
|
1329
|
+
return await fetchWithMulticall(
|
|
1330
|
+
client,
|
|
1331
|
+
balanceDefs,
|
|
1332
|
+
client.chain.contracts.multicall3.address
|
|
1333
|
+
);
|
|
1334
|
+
} catch {
|
|
1335
|
+
}
|
|
1320
1336
|
}
|
|
1321
|
-
return
|
|
1337
|
+
return fetchWithGetBalance(client, balanceDefs);
|
|
1322
1338
|
};
|
|
1323
|
-
var
|
|
1339
|
+
var fetchWithGetBalance = async (client, balanceDefs) => {
|
|
1324
1340
|
if (balanceDefs.length === 0) return { success: [], errors: [] };
|
|
1325
1341
|
const results = await Promise.allSettled(
|
|
1326
1342
|
balanceDefs.map(async ({ token, address }) => {
|
|
1327
1343
|
try {
|
|
1328
|
-
const result = await client.
|
|
1344
|
+
const result = await client.request({
|
|
1345
|
+
method: "eth_getBalance",
|
|
1346
|
+
params: [address, "latest"]
|
|
1347
|
+
});
|
|
1329
1348
|
const balance = {
|
|
1330
1349
|
address,
|
|
1331
1350
|
tokenId: token.id,
|
|
1332
|
-
value: result.toString(),
|
|
1351
|
+
value: BigInt(result).toString(),
|
|
1333
1352
|
source: MODULE_TYPE2,
|
|
1334
1353
|
networkId: (0, import_chaindata_provider8.parseTokenId)(token.id).networkId,
|
|
1335
1354
|
status: "live"
|
|
@@ -1363,55 +1382,28 @@ var fetchWithoutMulticall = async (client, balanceDefs) => {
|
|
|
1363
1382
|
};
|
|
1364
1383
|
var fetchWithMulticall = async (client, balanceDefs, multicall3Address) => {
|
|
1365
1384
|
if (balanceDefs.length === 0) return { success: [], errors: [] };
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
acc.errors.push({
|
|
1389
|
-
tokenId: balanceDefs[index].token.id,
|
|
1390
|
-
address: balanceDefs[index].address,
|
|
1391
|
-
error: new BalanceFetchError(
|
|
1392
|
-
`Failed to get balance for token ${balanceDefs[index].token.id} and address ${balanceDefs[index].address} on chain ${client.chain?.id}`,
|
|
1393
|
-
balanceDefs[index].token.id,
|
|
1394
|
-
balanceDefs[index].address,
|
|
1395
|
-
result.error
|
|
1396
|
-
)
|
|
1397
|
-
});
|
|
1398
|
-
}
|
|
1399
|
-
return acc;
|
|
1400
|
-
},
|
|
1401
|
-
{ success: [], errors: [] }
|
|
1402
|
-
);
|
|
1403
|
-
} catch (err) {
|
|
1404
|
-
const errors = balanceDefs.map((balanceDef) => ({
|
|
1405
|
-
tokenId: balanceDef.token.id,
|
|
1406
|
-
address: balanceDef.address,
|
|
1407
|
-
error: new BalanceFetchNetworkError(
|
|
1408
|
-
`Failed to get balances for evm-erc20 tokens on chain ${client.chain?.id}`,
|
|
1409
|
-
String(client.chain?.id),
|
|
1410
|
-
err
|
|
1411
|
-
)
|
|
1412
|
-
}));
|
|
1413
|
-
return { success: [], errors };
|
|
1414
|
-
}
|
|
1385
|
+
const results = await client.multicall({
|
|
1386
|
+
allowFailure: false,
|
|
1387
|
+
contracts: balanceDefs.map(({ address }) => ({
|
|
1388
|
+
address: multicall3Address,
|
|
1389
|
+
abi: abiMulticall,
|
|
1390
|
+
functionName: "getEthBalance",
|
|
1391
|
+
args: [address]
|
|
1392
|
+
}))
|
|
1393
|
+
});
|
|
1394
|
+
return {
|
|
1395
|
+
success: results.map(
|
|
1396
|
+
(value, index) => ({
|
|
1397
|
+
address: balanceDefs[index].address,
|
|
1398
|
+
tokenId: balanceDefs[index].token.id,
|
|
1399
|
+
value: String(value),
|
|
1400
|
+
source: MODULE_TYPE2,
|
|
1401
|
+
networkId: (0, import_chaindata_provider8.parseTokenId)(balanceDefs[index].token.id).networkId,
|
|
1402
|
+
status: "live"
|
|
1403
|
+
})
|
|
1404
|
+
),
|
|
1405
|
+
errors: []
|
|
1406
|
+
};
|
|
1415
1407
|
};
|
|
1416
1408
|
|
|
1417
1409
|
// src/modules/evm-native/fetchTokens.ts
|
|
@@ -1529,7 +1521,6 @@ var PLATFORM3 = import_chaindata_provider11.EvmUniswapV2TokenSchema.shape.platfo
|
|
|
1529
1521
|
// src/modules/evm-uniswapv2/fetchBalances.ts
|
|
1530
1522
|
var import_chaindata_provider12 = require("@talismn/chaindata-provider");
|
|
1531
1523
|
var import_crypto5 = require("@talismn/crypto");
|
|
1532
|
-
var import_bignumber = __toESM(require("bignumber.js"));
|
|
1533
1524
|
var import_lodash_es5 = require("lodash-es");
|
|
1534
1525
|
var import_viem6 = require("viem");
|
|
1535
1526
|
var fetchBalances3 = async ({
|
|
@@ -1621,7 +1612,7 @@ var fetchPoolBalances = async (client, balanceDefs) => {
|
|
|
1621
1612
|
label,
|
|
1622
1613
|
amount
|
|
1623
1614
|
});
|
|
1624
|
-
const ratio = (
|
|
1615
|
+
const ratio = configureBigNumber_default(String(balance)).div(totalSupply === 0n ? "1" : String(totalSupply));
|
|
1625
1616
|
acc.success.push({
|
|
1626
1617
|
address,
|
|
1627
1618
|
tokenId: token.id,
|
|
@@ -1650,6 +1641,7 @@ var import_lodash_es6 = require("lodash-es");
|
|
|
1650
1641
|
var import_v44 = __toESM(require("zod/v4"));
|
|
1651
1642
|
|
|
1652
1643
|
// src/modules/evm-uniswapv2/utils.ts
|
|
1644
|
+
var import_util2 = require("@talismn/util");
|
|
1653
1645
|
var import_viem7 = require("viem");
|
|
1654
1646
|
var getErc20ContractData2 = async (client, contractAddress) => {
|
|
1655
1647
|
try {
|
|
@@ -1660,7 +1652,7 @@ var getErc20ContractData2 = async (client, contractAddress) => {
|
|
|
1660
1652
|
contract.read.name()
|
|
1661
1653
|
]);
|
|
1662
1654
|
} catch (e) {
|
|
1663
|
-
if (e
|
|
1655
|
+
if ((0, import_util2.isErrorOfName)(e, "ContractFunctionExecutionError")) {
|
|
1664
1656
|
const contract = getTypedContract2(client, import_viem7.erc20Abi_bytes32, contractAddress);
|
|
1665
1657
|
var [bytesSymbol, decimals, nameSymbol] = await Promise.all([
|
|
1666
1658
|
contract.read.symbol(),
|
|
@@ -2056,7 +2048,7 @@ var PLATFORM5 = import_chaindata_provider19.SolSplTokenSchema.shape.platform.val
|
|
|
2056
2048
|
// src/modules/sol-spl/fetchBalances.ts
|
|
2057
2049
|
var import_web34 = require("@solana/web3.js");
|
|
2058
2050
|
var import_chaindata_provider22 = require("@talismn/chaindata-provider");
|
|
2059
|
-
var
|
|
2051
|
+
var import_util4 = require("@talismn/util");
|
|
2060
2052
|
var import_lodash_es12 = require("lodash-es");
|
|
2061
2053
|
|
|
2062
2054
|
// src/modules/shared/buildNetworkStorageCoders.ts
|
|
@@ -2094,9 +2086,9 @@ var buildNetworkStorageCoders = (chainId, miniMetadata, coders) => {
|
|
|
2094
2086
|
|
|
2095
2087
|
// src/modules/shared/fetchRuntimeCallResult.ts
|
|
2096
2088
|
var import_scale2 = require("@talismn/scale");
|
|
2097
|
-
var fetchRuntimeCallResult = async (connector, networkId,
|
|
2089
|
+
var fetchRuntimeCallResult = async (connector, networkId, metadataRpcOrBuilder, apiName, method, args) => {
|
|
2098
2090
|
try {
|
|
2099
|
-
const
|
|
2091
|
+
const builder = typeof metadataRpcOrBuilder === "string" ? (0, import_scale2.parseMetadataRpc)(metadataRpcOrBuilder).builder : metadataRpcOrBuilder;
|
|
2100
2092
|
const call = builder.buildRuntimeCall(apiName, method);
|
|
2101
2093
|
const hex = await connector.send(networkId, "state_call", [
|
|
2102
2094
|
`${apiName}_${method}`,
|
|
@@ -2111,11 +2103,11 @@ var fetchRuntimeCallResult = async (connector, networkId, metadataRpc, apiName,
|
|
|
2111
2103
|
};
|
|
2112
2104
|
|
|
2113
2105
|
// src/modules/shared/rpcQueryPack.ts
|
|
2114
|
-
var
|
|
2106
|
+
var import_util3 = require("@talismn/util");
|
|
2115
2107
|
var import_lodash_es10 = require("lodash-es");
|
|
2116
2108
|
var import_rxjs5 = require("rxjs");
|
|
2117
2109
|
var fetchRpcQueryPack = async (connector, networkId, queries) => {
|
|
2118
|
-
const allStateKeys = queries.flatMap(({ stateKeys }) => stateKeys).filter(
|
|
2110
|
+
const allStateKeys = queries.flatMap(({ stateKeys }) => stateKeys).filter(import_util3.isNotNil);
|
|
2119
2111
|
if (!allStateKeys.length)
|
|
2120
2112
|
return queries.map(({ stateKeys, decodeResult }) => decodeResult(stateKeys.map(() => null)));
|
|
2121
2113
|
const [result] = await connector.send(networkId, "state_queryStorageAt", [
|
|
@@ -2124,7 +2116,7 @@ var fetchRpcQueryPack = async (connector, networkId, queries) => {
|
|
|
2124
2116
|
return decodeRpcQueryPack(queries, result);
|
|
2125
2117
|
};
|
|
2126
2118
|
var getRpcQueryPack$ = (connector, networkId, queries, timeout = false) => {
|
|
2127
|
-
const allStateKeys = queries.flatMap(({ stateKeys }) => stateKeys).filter(
|
|
2119
|
+
const allStateKeys = queries.flatMap(({ stateKeys }) => stateKeys).filter(import_util3.isNotNil);
|
|
2128
2120
|
if (!allStateKeys.length)
|
|
2129
2121
|
return (0, import_rxjs5.of)(queries.map(({ stateKeys, decodeResult }) => decodeResult(stateKeys.map(() => null))));
|
|
2130
2122
|
return new import_rxjs5.Observable((subscriber) => {
|
|
@@ -2167,17 +2159,17 @@ var decodeRpcQueryPack = (queries, result) => {
|
|
|
2167
2159
|
var import_scale3 = require("@talismn/scale");
|
|
2168
2160
|
var hasStorageItem = (metadata, palletName, itemName) => {
|
|
2169
2161
|
const pallet = metadata.pallets.find((p) => p.name === palletName);
|
|
2170
|
-
if (!pallet
|
|
2162
|
+
if (!pallet?.storage) return false;
|
|
2171
2163
|
return pallet.storage.items.some((item) => item.name === itemName);
|
|
2172
2164
|
};
|
|
2173
2165
|
var hasStorageItems = (metadata, palletName, itemNames) => {
|
|
2174
2166
|
const pallet = metadata.pallets.find((p) => p.name === palletName);
|
|
2175
|
-
if (!pallet
|
|
2167
|
+
if (!pallet?.storage) return false;
|
|
2176
2168
|
return itemNames.every((itemName) => pallet.storage?.items.some((item) => item.name === itemName));
|
|
2177
2169
|
};
|
|
2178
2170
|
var hasRuntimeApi = (metadata, apiName, method) => {
|
|
2179
2171
|
const api = metadata.apis.find((api2) => api2.name === apiName);
|
|
2180
|
-
if (!api
|
|
2172
|
+
if (!api?.methods) return false;
|
|
2181
2173
|
return api.methods.some((m) => m.name === method);
|
|
2182
2174
|
};
|
|
2183
2175
|
var getConstantValue = (metadataRpc, pallet, constant) => {
|
|
@@ -2321,7 +2313,7 @@ var fetchBalances5 = async ({
|
|
|
2321
2313
|
});
|
|
2322
2314
|
return null;
|
|
2323
2315
|
}
|
|
2324
|
-
}).filter(
|
|
2316
|
+
}).filter(import_util4.isNotNil);
|
|
2325
2317
|
setDetectedTokenIds(
|
|
2326
2318
|
address,
|
|
2327
2319
|
MODULE_TYPE5,
|
|
@@ -2343,7 +2335,7 @@ var fetchBalances5 = async ({
|
|
|
2343
2335
|
cached = fetched;
|
|
2344
2336
|
}
|
|
2345
2337
|
}
|
|
2346
|
-
if (!cached
|
|
2338
|
+
if (!cached?.isValid) return;
|
|
2347
2339
|
const token = {
|
|
2348
2340
|
id: tokenId,
|
|
2349
2341
|
type: MODULE_TYPE5,
|
|
@@ -2549,7 +2541,7 @@ var PLATFORM6 = import_chaindata_provider26.SolToken2022TokenSchema.shape.platfo
|
|
|
2549
2541
|
// src/modules/sol-token2022/fetchBalances.ts
|
|
2550
2542
|
var import_web37 = require("@solana/web3.js");
|
|
2551
2543
|
var import_chaindata_provider28 = require("@talismn/chaindata-provider");
|
|
2552
|
-
var
|
|
2544
|
+
var import_util5 = require("@talismn/util");
|
|
2553
2545
|
var import_lodash_es15 = require("lodash-es");
|
|
2554
2546
|
|
|
2555
2547
|
// src/modules/sol-token2022/onChainTokenMetadata.ts
|
|
@@ -2703,7 +2695,7 @@ var fetchBalances6 = async ({
|
|
|
2703
2695
|
});
|
|
2704
2696
|
return null;
|
|
2705
2697
|
}
|
|
2706
|
-
}).filter(
|
|
2698
|
+
}).filter(import_util5.isNotNil);
|
|
2707
2699
|
setDetectedTokenIds(
|
|
2708
2700
|
address,
|
|
2709
2701
|
MODULE_TYPE6,
|
|
@@ -2725,7 +2717,7 @@ var fetchBalances6 = async ({
|
|
|
2725
2717
|
cached = fetched;
|
|
2726
2718
|
}
|
|
2727
2719
|
}
|
|
2728
|
-
if (!cached
|
|
2720
|
+
if (!cached?.isValid) return;
|
|
2729
2721
|
const token = {
|
|
2730
2722
|
id: tokenId,
|
|
2731
2723
|
type: MODULE_TYPE6,
|
|
@@ -3003,7 +2995,7 @@ var PLATFORM7 = import_chaindata_provider32.SubAssetsTokenSchema.shape.platform.
|
|
|
3003
2995
|
|
|
3004
2996
|
// src/modules/substrate-assets/buildQueries.ts
|
|
3005
2997
|
var import_scale4 = require("@talismn/scale");
|
|
3006
|
-
var
|
|
2998
|
+
var import_util6 = require("@talismn/util");
|
|
3007
2999
|
var buildQueries = (networkId, balanceDefs, miniMetadata) => {
|
|
3008
3000
|
const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
|
|
3009
3001
|
storage: ["Assets", "Account"]
|
|
@@ -3052,7 +3044,7 @@ var buildQueries = (networkId, balanceDefs, miniMetadata) => {
|
|
|
3052
3044
|
stateKeys: [stateKey],
|
|
3053
3045
|
decodeResult
|
|
3054
3046
|
};
|
|
3055
|
-
}).filter(
|
|
3047
|
+
}).filter(import_util6.isNotNil);
|
|
3056
3048
|
};
|
|
3057
3049
|
var tryEncode = (scaleCoder, ...args) => {
|
|
3058
3050
|
try {
|
|
@@ -3216,13 +3208,12 @@ var fetchTokens7 = async ({
|
|
|
3216
3208
|
|
|
3217
3209
|
// src/modules/substrate-assets/getMiniMetadata.ts
|
|
3218
3210
|
var import_chaindata_provider44 = require("@talismn/chaindata-provider");
|
|
3219
|
-
var
|
|
3211
|
+
var import_scale12 = require("@talismn/scale");
|
|
3220
3212
|
|
|
3221
3213
|
// src/types/balances.ts
|
|
3222
3214
|
var import_chaindata_provider42 = require("@talismn/chaindata-provider");
|
|
3223
3215
|
var import_token_rates2 = require("@talismn/token-rates");
|
|
3224
|
-
var
|
|
3225
|
-
var import_bignumber2 = __toESM(require("bignumber.js"));
|
|
3216
|
+
var import_util9 = require("@talismn/util");
|
|
3226
3217
|
|
|
3227
3218
|
// src/modules/substrate-dtao/alphaPrice.ts
|
|
3228
3219
|
var TAO_DECIMALS = 9n;
|
|
@@ -3239,12 +3230,189 @@ var taoToAlpha = (tao, scaledAlphaPrice) => {
|
|
|
3239
3230
|
if (!tao || !scaledAlphaPrice) return 0n;
|
|
3240
3231
|
return tao * ALPHA_PRICE_SCALE / scaledAlphaPrice;
|
|
3241
3232
|
};
|
|
3233
|
+
var taoToAlphaCeil = (tao, scaledAlphaPrice) => {
|
|
3234
|
+
if (!tao || !scaledAlphaPrice) return 0n;
|
|
3235
|
+
return (tao * ALPHA_PRICE_SCALE + scaledAlphaPrice - 1n) / scaledAlphaPrice;
|
|
3236
|
+
};
|
|
3237
|
+
|
|
3238
|
+
// src/modules/substrate-dtao/convictionLocks.ts
|
|
3239
|
+
var import_scale6 = require("@talismn/scale");
|
|
3240
|
+
var convictionLockKey = (address, netuid) => `${address}:${netuid}`;
|
|
3241
|
+
var getConvictionLockLabel = (lockType) => lockType === "perpetual" ? "Perpetual Conviction Lock" : "Decaying Conviction Lock";
|
|
3242
|
+
var findDTaoConvictionLock = (locks) => {
|
|
3243
|
+
for (const lock of locks ?? []) {
|
|
3244
|
+
const meta = lock.meta;
|
|
3245
|
+
if (meta?.convictionLock?.type !== "conviction-lock") continue;
|
|
3246
|
+
const lockType = meta.convictionLock.lockType;
|
|
3247
|
+
return {
|
|
3248
|
+
amount: lock.amount.planck,
|
|
3249
|
+
hotkey: meta.convictionLock.hotkey,
|
|
3250
|
+
lockType,
|
|
3251
|
+
label: getConvictionLockLabel(lockType)
|
|
3252
|
+
};
|
|
3253
|
+
}
|
|
3254
|
+
return null;
|
|
3255
|
+
};
|
|
3256
|
+
var toBigIntValue = (value) => {
|
|
3257
|
+
if (typeof value === "bigint") return value;
|
|
3258
|
+
if (value && typeof value === "object" && "bits" in value) {
|
|
3259
|
+
const bits = value.bits;
|
|
3260
|
+
if (typeof bits === "bigint") return bits;
|
|
3261
|
+
}
|
|
3262
|
+
return 0n;
|
|
3263
|
+
};
|
|
3264
|
+
var fetchConvictionLocks = async (connector, networkId, metadataRpc, addresses) => {
|
|
3265
|
+
if (!addresses.length) return [];
|
|
3266
|
+
const { unifiedMetadata, builder } = (0, import_scale6.parseMetadataRpc)(metadataRpc);
|
|
3267
|
+
if (!hasRuntimeApi(unifiedMetadata, "StakeInfoRuntimeApi", "get_coldkey_lock") || !hasStorageItems(unifiedMetadata, "SubtensorModule", ["Lock", "DecayingLock"])) {
|
|
3268
|
+
return [];
|
|
3269
|
+
}
|
|
3270
|
+
try {
|
|
3271
|
+
const lockStorageCoder = builder.buildStorage("SubtensorModule", "Lock");
|
|
3272
|
+
const decayingLockStorageCoder = builder.buildStorage("SubtensorModule", "DecayingLock");
|
|
3273
|
+
const lockStorageKeys = await fetchConvictionLockStorageKeys(
|
|
3274
|
+
connector,
|
|
3275
|
+
networkId,
|
|
3276
|
+
addresses,
|
|
3277
|
+
lockStorageCoder
|
|
3278
|
+
);
|
|
3279
|
+
if (!lockStorageKeys.length) return [];
|
|
3280
|
+
const hotkeyByPair = new Map(
|
|
3281
|
+
lockStorageKeys.map(({ address, netuid, hotkey }) => [
|
|
3282
|
+
convictionLockKey(address, netuid),
|
|
3283
|
+
hotkey
|
|
3284
|
+
])
|
|
3285
|
+
);
|
|
3286
|
+
const [lockModesByPair, lockStates] = await Promise.all([
|
|
3287
|
+
fetchConvictionLockModes(connector, networkId, lockStorageKeys, decayingLockStorageCoder),
|
|
3288
|
+
fetchColdkeyLockStates(connector, networkId, builder, lockStorageKeys)
|
|
3289
|
+
]);
|
|
3290
|
+
return lockStates.flatMap(({ address, netuid, lockState }) => {
|
|
3291
|
+
const amount = lockState?.locked_mass ?? 0n;
|
|
3292
|
+
const convictionRaw = toBigIntValue(lockState?.conviction);
|
|
3293
|
+
if (amount <= 0n && convictionRaw <= 0n) return [];
|
|
3294
|
+
const hotkey = hotkeyByPair.get(convictionLockKey(address, netuid));
|
|
3295
|
+
if (!hotkey) return [];
|
|
3296
|
+
return [
|
|
3297
|
+
{
|
|
3298
|
+
address,
|
|
3299
|
+
netuid,
|
|
3300
|
+
lock: {
|
|
3301
|
+
amount,
|
|
3302
|
+
hotkey,
|
|
3303
|
+
lockType: lockModesByPair.get(convictionLockKey(address, netuid)) ?? "decaying",
|
|
3304
|
+
convictionRaw: convictionRaw.toString()
|
|
3305
|
+
}
|
|
3306
|
+
}
|
|
3307
|
+
];
|
|
3308
|
+
});
|
|
3309
|
+
} catch (cause) {
|
|
3310
|
+
log_default.warn(`Failed to fetch Bittensor conviction locks on ${networkId}`, { cause });
|
|
3311
|
+
return [];
|
|
3312
|
+
}
|
|
3313
|
+
};
|
|
3314
|
+
var fetchConvictionLockStorageKeys = async (connector, networkId, addresses, storageCoder) => {
|
|
3315
|
+
const keysPerAddress = await Promise.all(
|
|
3316
|
+
addresses.map(async (address) => {
|
|
3317
|
+
let keyPrefix;
|
|
3318
|
+
try {
|
|
3319
|
+
keyPrefix = storageCoder.keys.enc(address);
|
|
3320
|
+
} catch (cause) {
|
|
3321
|
+
log_default.warn(
|
|
3322
|
+
`Failed to encode conviction Lock key prefix (address=${address}) on ${networkId}`,
|
|
3323
|
+
{ cause }
|
|
3324
|
+
);
|
|
3325
|
+
return [];
|
|
3326
|
+
}
|
|
3327
|
+
try {
|
|
3328
|
+
const stateKeys = await connector.send(networkId, "state_getKeys", [
|
|
3329
|
+
keyPrefix
|
|
3330
|
+
]);
|
|
3331
|
+
return stateKeys.flatMap((stateKey) => {
|
|
3332
|
+
try {
|
|
3333
|
+
const [, netuid, hotkey] = storageCoder.keys.dec(stateKey);
|
|
3334
|
+
return [{ address, netuid, hotkey }];
|
|
3335
|
+
} catch (cause) {
|
|
3336
|
+
log_default.warn(`Failed to decode conviction Lock key ${stateKey} on ${networkId}`, { cause });
|
|
3337
|
+
return [];
|
|
3338
|
+
}
|
|
3339
|
+
});
|
|
3340
|
+
} catch (cause) {
|
|
3341
|
+
log_default.warn(`Failed to fetch conviction Lock keys (address=${address}) on ${networkId}`, {
|
|
3342
|
+
cause
|
|
3343
|
+
});
|
|
3344
|
+
return [];
|
|
3345
|
+
}
|
|
3346
|
+
})
|
|
3347
|
+
);
|
|
3348
|
+
return keysPerAddress.flat();
|
|
3349
|
+
};
|
|
3350
|
+
var fetchConvictionLockModes = async (connector, networkId, pairs, storageCoder) => {
|
|
3351
|
+
const queries = pairs.map(
|
|
3352
|
+
({ address, netuid }) => {
|
|
3353
|
+
let stateKey = null;
|
|
3354
|
+
try {
|
|
3355
|
+
stateKey = storageCoder.keys.enc(address, netuid);
|
|
3356
|
+
} catch (cause) {
|
|
3357
|
+
log_default.warn(
|
|
3358
|
+
`Failed to encode conviction DecayingLock key (netuid=${netuid}, address=${address}) on ${networkId}`,
|
|
3359
|
+
{ cause }
|
|
3360
|
+
);
|
|
3361
|
+
}
|
|
3362
|
+
const key = convictionLockKey(address, netuid);
|
|
3363
|
+
return {
|
|
3364
|
+
stateKeys: [stateKey],
|
|
3365
|
+
decodeResult: (changes) => {
|
|
3366
|
+
const hexValue = changes[0];
|
|
3367
|
+
if (!hexValue) return [key, "decaying"];
|
|
3368
|
+
const decoded = (0, import_scale6.decodeScale)(
|
|
3369
|
+
storageCoder,
|
|
3370
|
+
hexValue,
|
|
3371
|
+
`Failed to decode DecayingLock for (netuid=${netuid}, address=${address}) on ${networkId}`
|
|
3372
|
+
);
|
|
3373
|
+
return [key, decoded === false ? "perpetual" : "decaying"];
|
|
3374
|
+
}
|
|
3375
|
+
};
|
|
3376
|
+
}
|
|
3377
|
+
);
|
|
3378
|
+
return new Map(await fetchRpcQueryPack(connector, networkId, queries));
|
|
3379
|
+
};
|
|
3380
|
+
var fetchColdkeyLockStates = async (connector, networkId, builder, pairs) => {
|
|
3381
|
+
return Promise.all(
|
|
3382
|
+
pairs.map(async ({ address, netuid }) => {
|
|
3383
|
+
try {
|
|
3384
|
+
const lockState = await fetchRuntimeCallResult(
|
|
3385
|
+
connector,
|
|
3386
|
+
networkId,
|
|
3387
|
+
builder,
|
|
3388
|
+
"StakeInfoRuntimeApi",
|
|
3389
|
+
"get_coldkey_lock",
|
|
3390
|
+
[address, netuid]
|
|
3391
|
+
);
|
|
3392
|
+
return { address, netuid, lockState };
|
|
3393
|
+
} catch (cause) {
|
|
3394
|
+
log_default.warn(
|
|
3395
|
+
`Failed to fetch get_coldkey_lock for (netuid=${netuid}, address=${address}) on ${networkId}`,
|
|
3396
|
+
{ cause }
|
|
3397
|
+
);
|
|
3398
|
+
return { address, netuid, lockState: null };
|
|
3399
|
+
}
|
|
3400
|
+
})
|
|
3401
|
+
);
|
|
3402
|
+
};
|
|
3242
3403
|
|
|
3243
3404
|
// src/modules/substrate-dtao/getDtaoTokenRates.ts
|
|
3244
3405
|
var import_chaindata_provider34 = require("@talismn/chaindata-provider");
|
|
3245
3406
|
var import_token_rates = require("@talismn/token-rates");
|
|
3246
3407
|
var ONE_ALPHA = 10n ** TAO_DECIMALS;
|
|
3247
|
-
var
|
|
3408
|
+
var getAlphaChange24h = (currency, taoChange24h, alphaPriceChange24h) => {
|
|
3409
|
+
if (typeof alphaPriceChange24h !== "number" || !Number.isFinite(alphaPriceChange24h))
|
|
3410
|
+
return void 0;
|
|
3411
|
+
if (currency === "tao") return alphaPriceChange24h;
|
|
3412
|
+
if (typeof taoChange24h !== "number" || !Number.isFinite(taoChange24h)) return void 0;
|
|
3413
|
+
return ((1 + alphaPriceChange24h / 100) * (1 + taoChange24h / 100) - 1) * 100;
|
|
3414
|
+
};
|
|
3415
|
+
var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice, alphaPriceChange24h) => {
|
|
3248
3416
|
try {
|
|
3249
3417
|
const taoTokenId = (0, import_chaindata_provider34.subNativeTokenId)(token.networkId);
|
|
3250
3418
|
const taoTokenRates = tokenRates[taoTokenId];
|
|
@@ -3260,8 +3428,7 @@ var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice) => {
|
|
|
3260
3428
|
alphaRates[currency] = {
|
|
3261
3429
|
price: taoRate.price * priceRatio,
|
|
3262
3430
|
marketCap: taoRate.marketCap ? taoRate.marketCap * priceRatio : void 0,
|
|
3263
|
-
change24h:
|
|
3264
|
-
// cannot be determined from TAO rates alone
|
|
3431
|
+
change24h: getAlphaChange24h(currency, taoRate.change24h, alphaPriceChange24h)
|
|
3265
3432
|
};
|
|
3266
3433
|
}
|
|
3267
3434
|
}
|
|
@@ -3279,8 +3446,8 @@ var PLATFORM8 = import_chaindata_provider35.SubDTaoTokenSchema.shape.platform.va
|
|
|
3279
3446
|
|
|
3280
3447
|
// src/modules/substrate-dtao/fetchBalances.ts
|
|
3281
3448
|
var import_chaindata_provider37 = require("@talismn/chaindata-provider");
|
|
3282
|
-
var
|
|
3283
|
-
var
|
|
3449
|
+
var import_scale7 = require("@talismn/scale");
|
|
3450
|
+
var import_util7 = require("@talismn/util");
|
|
3284
3451
|
var import_lodash_es19 = require("lodash-es");
|
|
3285
3452
|
|
|
3286
3453
|
// src/modules/substrate-dtao/calculatePendingRootClaimable.ts
|
|
@@ -3385,6 +3552,7 @@ var fetchBalances8 = async ({
|
|
|
3385
3552
|
[]
|
|
3386
3553
|
)
|
|
3387
3554
|
]);
|
|
3555
|
+
const dynamicInfoByNetuid = (0, import_lodash_es19.keyBy)(dynamicInfos.filter(import_util7.isNotNil), (info) => info.netuid);
|
|
3388
3556
|
const rootHotkeys = (0, import_lodash_es19.uniq)(
|
|
3389
3557
|
stakeInfos.flatMap(
|
|
3390
3558
|
([, stakes]) => stakes.filter((stake) => stake.netuid === ROOT_NETUID).map((stake) => stake.hotkey)
|
|
@@ -3404,13 +3572,10 @@ var fetchBalances8 = async ({
|
|
|
3404
3572
|
}
|
|
3405
3573
|
}
|
|
3406
3574
|
}
|
|
3407
|
-
const rootClaimedAmounts =
|
|
3408
|
-
connector,
|
|
3409
|
-
networkId,
|
|
3410
|
-
|
|
3411
|
-
addressHotkeyNetuidPairs
|
|
3412
|
-
) : /* @__PURE__ */ new Map();
|
|
3413
|
-
const dynamicInfoByNetuid = (0, import_lodash_es19.keyBy)(dynamicInfos.filter(import_util5.isNotNil), (info) => info.netuid);
|
|
3575
|
+
const [rootClaimedAmounts, convictionLocks] = await Promise.all([
|
|
3576
|
+
addressHotkeyNetuidPairs.length && miniMetadata.data ? fetchRootClaimedAmounts(connector, networkId, miniMetadata.data, addressHotkeyNetuidPairs) : Promise.resolve(/* @__PURE__ */ new Map()),
|
|
3577
|
+
miniMetadata.data ? fetchConvictionLocks(connector, networkId, miniMetadata.data, addresses) : Promise.resolve([])
|
|
3578
|
+
]);
|
|
3414
3579
|
const upsertBalance = (acc, address, tokenId, balance) => {
|
|
3415
3580
|
const key = `${address}:${tokenId}`;
|
|
3416
3581
|
const recordedBalance = acc[key];
|
|
@@ -3421,6 +3586,9 @@ var fetchBalances8 = async ({
|
|
|
3421
3586
|
// If the new balance has pendingRootClaim, use it (it's calculated from current state)
|
|
3422
3587
|
...balance.pendingRootClaim !== void 0 && {
|
|
3423
3588
|
pendingRootClaim: balance.pendingRootClaim
|
|
3589
|
+
},
|
|
3590
|
+
...balance.convictionLock !== void 0 && {
|
|
3591
|
+
convictionLock: balance.convictionLock
|
|
3424
3592
|
}
|
|
3425
3593
|
};
|
|
3426
3594
|
} else {
|
|
@@ -3463,6 +3631,21 @@ var fetchBalances8 = async ({
|
|
|
3463
3631
|
},
|
|
3464
3632
|
{}
|
|
3465
3633
|
);
|
|
3634
|
+
for (const { address, netuid, lock } of convictionLocks) {
|
|
3635
|
+
const dynamicInfo = dynamicInfoByNetuid[netuid];
|
|
3636
|
+
const scaledAlphaPrice = dynamicInfo ? getScaledAlphaPrice(dynamicInfo.alpha_in, dynamicInfo.tao_in) : 0n;
|
|
3637
|
+
const balance = {
|
|
3638
|
+
address,
|
|
3639
|
+
tokenId: (0, import_chaindata_provider37.subDTaoTokenId)(networkId, netuid),
|
|
3640
|
+
baseTokenId: (0, import_chaindata_provider37.subDTaoTokenId)(networkId, netuid),
|
|
3641
|
+
stake: 0n,
|
|
3642
|
+
hotkey: lock.hotkey,
|
|
3643
|
+
netuid,
|
|
3644
|
+
scaledAlphaPrice,
|
|
3645
|
+
convictionLock: lock
|
|
3646
|
+
};
|
|
3647
|
+
upsertBalance(balancesRaw, address, balance.tokenId, balance);
|
|
3648
|
+
}
|
|
3466
3649
|
const balances = Object.values(balancesRaw);
|
|
3467
3650
|
const tokensById = (0, import_lodash_es19.keyBy)(
|
|
3468
3651
|
tokensWithAddresses.map(([token]) => token),
|
|
@@ -3470,6 +3653,7 @@ var fetchBalances8 = async ({
|
|
|
3470
3653
|
);
|
|
3471
3654
|
const dynamicTokens = [];
|
|
3472
3655
|
for (const bal of balances) {
|
|
3656
|
+
if (bal.tokenId === bal.baseTokenId) continue;
|
|
3473
3657
|
if (!balanceDefs.some((def) => def.token.id === bal.tokenId)) {
|
|
3474
3658
|
const baseToken = tokensById[bal.baseTokenId];
|
|
3475
3659
|
if (baseToken) {
|
|
@@ -3490,6 +3674,8 @@ var fetchBalances8 = async ({
|
|
|
3490
3674
|
};
|
|
3491
3675
|
const stakeAmount = BigInt(stake?.stake?.toString() ?? "0");
|
|
3492
3676
|
const pendingRootClaimAmount = BigInt(stake?.pendingRootClaim?.toString() ?? "0");
|
|
3677
|
+
const convictionLockAmount = BigInt(stake?.convictionLock?.amount?.toString() ?? "0");
|
|
3678
|
+
const convictionLockConviction = BigInt(stake?.convictionLock?.convictionRaw ?? "0");
|
|
3493
3679
|
const hasZeroStake = stakeAmount === 0n;
|
|
3494
3680
|
const hasPendingRootClaim = pendingRootClaimAmount > 0n;
|
|
3495
3681
|
const balanceValue = {
|
|
@@ -3502,9 +3688,30 @@ var fetchBalances8 = async ({
|
|
|
3502
3688
|
type: "locked",
|
|
3503
3689
|
label: "Pending root claim",
|
|
3504
3690
|
amount: pendingRootClaimAmount.toString(),
|
|
3691
|
+
// The pending claim is not part of the stake (free amount): on-chain it only becomes
|
|
3692
|
+
// stake once claimed (root_claim_on_subnet). Since it was never included in `free`,
|
|
3693
|
+
// it must not be subtracted from it either: flag it so it does not reduce the staked
|
|
3694
|
+
// position's transferable amount.
|
|
3695
|
+
includeInTransferable: true,
|
|
3505
3696
|
meta
|
|
3506
3697
|
};
|
|
3507
3698
|
const values3 = [balanceValue, pendingRootClaimValue];
|
|
3699
|
+
if (stake?.convictionLock && (convictionLockAmount > 0n || convictionLockConviction > 0n)) {
|
|
3700
|
+
const convictionLockMeta = {
|
|
3701
|
+
...meta,
|
|
3702
|
+
convictionLock: {
|
|
3703
|
+
type: "conviction-lock",
|
|
3704
|
+
hotkey: stake.convictionLock.hotkey,
|
|
3705
|
+
lockType: stake.convictionLock.lockType
|
|
3706
|
+
}
|
|
3707
|
+
};
|
|
3708
|
+
values3.push({
|
|
3709
|
+
type: "locked",
|
|
3710
|
+
label: getConvictionLockLabel(stake.convictionLock.lockType),
|
|
3711
|
+
amount: convictionLockAmount.toString(),
|
|
3712
|
+
meta: convictionLockMeta
|
|
3713
|
+
});
|
|
3714
|
+
}
|
|
3508
3715
|
if (hasZeroStake && hasPendingRootClaim) {
|
|
3509
3716
|
values3.push({
|
|
3510
3717
|
type: "extra",
|
|
@@ -3542,7 +3749,7 @@ var fetchBalances8 = async ({
|
|
|
3542
3749
|
}
|
|
3543
3750
|
};
|
|
3544
3751
|
var buildStorageCoder = (metadataRpc, pallet, entry) => {
|
|
3545
|
-
const { builder } = (0,
|
|
3752
|
+
const { builder } = (0, import_scale7.parseMetadataRpc)(metadataRpc);
|
|
3546
3753
|
return builder.buildStorage(pallet, entry);
|
|
3547
3754
|
};
|
|
3548
3755
|
var buildRootClaimableStorageCoder = async (_connector, networkId, metadataRpc) => {
|
|
@@ -3586,7 +3793,7 @@ var buildRootClaimableQueries = (networkId, hotkeys, storageCoder) => {
|
|
|
3586
3793
|
if (!hexValue) {
|
|
3587
3794
|
return [hotkey, /* @__PURE__ */ new Map()];
|
|
3588
3795
|
}
|
|
3589
|
-
const decoded = (0,
|
|
3796
|
+
const decoded = (0, import_scale7.decodeScale)(
|
|
3590
3797
|
storageCoder,
|
|
3591
3798
|
hexValue,
|
|
3592
3799
|
`Failed to decode RootClaimable for hotkey ${hotkey} on ${networkId}`
|
|
@@ -3630,7 +3837,7 @@ var buildRootClaimedQueries = (networkId, addressHotkeyNetuidPairs, storageCoder
|
|
|
3630
3837
|
if (!hexValue) {
|
|
3631
3838
|
return [address, hotkey, netuid, 0n];
|
|
3632
3839
|
}
|
|
3633
|
-
const decoded = (0,
|
|
3840
|
+
const decoded = (0, import_scale7.decodeScale)(
|
|
3634
3841
|
storageCoder,
|
|
3635
3842
|
hexValue,
|
|
3636
3843
|
`Failed to decode RootClaimed for (netuid=${netuid}, hotkey=${hotkey}, address=${address}) on ${networkId}`
|
|
@@ -3686,8 +3893,8 @@ var fetchRootClaimedAmounts = async (connector, networkId, metadataRpc, addressH
|
|
|
3686
3893
|
|
|
3687
3894
|
// src/modules/substrate-dtao/fetchTokens.ts
|
|
3688
3895
|
var import_chaindata_provider38 = require("@talismn/chaindata-provider");
|
|
3689
|
-
var
|
|
3690
|
-
var
|
|
3896
|
+
var import_scale8 = require("@talismn/scale");
|
|
3897
|
+
var import_util8 = require("@talismn/util");
|
|
3691
3898
|
var import_lodash_es20 = require("lodash-es");
|
|
3692
3899
|
var NATIVE_TOKEN_SYMBOLS = {
|
|
3693
3900
|
"bittensor": "TAO",
|
|
@@ -3712,7 +3919,7 @@ var fetchTokens8 = async ({
|
|
|
3712
3919
|
[]
|
|
3713
3920
|
)
|
|
3714
3921
|
]);
|
|
3715
|
-
return dynamicInfos.filter(
|
|
3922
|
+
return dynamicInfos.filter(import_util8.isNotNil).map((info) => {
|
|
3716
3923
|
const config = tokens.find((t) => t.netuid === info.netuid);
|
|
3717
3924
|
let symbol = new TextDecoder().decode(Uint8Array.from(info.token_symbol));
|
|
3718
3925
|
const subnetName = info.subnet_identity?.subnet_name?.asText() ?? (info.netuid === 0 ? "Root" : `Subnet ${info.netuid}`);
|
|
@@ -3740,10 +3947,10 @@ var fetchTokens8 = async ({
|
|
|
3740
3947
|
});
|
|
3741
3948
|
};
|
|
3742
3949
|
var fetchTransferableTokensMap = async (connector, metadata, networkId) => {
|
|
3743
|
-
const { builder } = (0,
|
|
3950
|
+
const { builder } = (0, import_scale8.parseMetadataRpc)(metadata);
|
|
3744
3951
|
const transferToggleCodec = builder.buildStorage("SubtensorModule", "TransferToggle");
|
|
3745
3952
|
const transferToggleKeys = await connector.send(networkId, "state_getKeys", [
|
|
3746
|
-
(0,
|
|
3953
|
+
(0, import_scale8.getStorageKeyPrefix)("SubtensorModule", "TransferToggle")
|
|
3747
3954
|
]);
|
|
3748
3955
|
const transferToggleResults = await connector.send(
|
|
3749
3956
|
networkId,
|
|
@@ -3762,7 +3969,7 @@ var fetchTransferableTokensMap = async (connector, metadata, networkId) => {
|
|
|
3762
3969
|
|
|
3763
3970
|
// src/modules/substrate-dtao/getMiniMetadata.ts
|
|
3764
3971
|
var import_chaindata_provider39 = require("@talismn/chaindata-provider");
|
|
3765
|
-
var
|
|
3972
|
+
var import_scale9 = require("@talismn/scale");
|
|
3766
3973
|
var getMiniMetadata7 = ({
|
|
3767
3974
|
networkId,
|
|
3768
3975
|
specVersion,
|
|
@@ -3776,7 +3983,7 @@ var getMiniMetadata7 = ({
|
|
|
3776
3983
|
`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
|
|
3777
3984
|
);
|
|
3778
3985
|
const id = deriveMiniMetadataId({ source, chainId, specVersion });
|
|
3779
|
-
const { unifiedMetadata } = (0,
|
|
3986
|
+
const { unifiedMetadata } = (0, import_scale9.parseMetadataRpc)(metadataRpc);
|
|
3780
3987
|
if (unifiedMetadata.version < 14)
|
|
3781
3988
|
throw new Error(
|
|
3782
3989
|
`Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
|
|
@@ -3792,16 +3999,21 @@ var getMiniMetadata7 = ({
|
|
|
3792
3999
|
};
|
|
3793
4000
|
};
|
|
3794
4001
|
var getData = (metadataRpc) => {
|
|
3795
|
-
const { metadata, unifiedMetadata } = (0,
|
|
4002
|
+
const { metadata, unifiedMetadata } = (0, import_scale9.parseMetadataRpc)(metadataRpc);
|
|
3796
4003
|
const isBittensor = unifiedMetadata.pallets.some(({ name }) => name === "SubtensorModule");
|
|
3797
4004
|
if (!isBittensor) return null;
|
|
3798
|
-
(0,
|
|
4005
|
+
(0, import_scale9.compactMetadata)(
|
|
3799
4006
|
metadata,
|
|
3800
|
-
[
|
|
4007
|
+
[
|
|
4008
|
+
{
|
|
4009
|
+
pallet: "SubtensorModule",
|
|
4010
|
+
items: ["TransferToggle", "RootClaimable", "RootClaimed", "Lock", "DecayingLock"]
|
|
4011
|
+
}
|
|
4012
|
+
],
|
|
3801
4013
|
[
|
|
3802
4014
|
{
|
|
3803
4015
|
runtimeApi: "StakeInfoRuntimeApi",
|
|
3804
|
-
methods: ["get_stake_info_for_coldkeys"]
|
|
4016
|
+
methods: ["get_stake_info_for_coldkeys", "get_coldkey_lock"]
|
|
3805
4017
|
},
|
|
3806
4018
|
{
|
|
3807
4019
|
runtimeApi: "SubnetInfoRuntimeApi",
|
|
@@ -3809,13 +4021,13 @@ var getData = (metadataRpc) => {
|
|
|
3809
4021
|
}
|
|
3810
4022
|
]
|
|
3811
4023
|
);
|
|
3812
|
-
return (0,
|
|
4024
|
+
return (0, import_scale9.encodeMetadata)(metadata);
|
|
3813
4025
|
};
|
|
3814
4026
|
|
|
3815
4027
|
// src/modules/substrate-dtao/getTransferCallData.ts
|
|
3816
4028
|
var import_utils3 = require("@polkadot-api/utils");
|
|
3817
4029
|
var import_chaindata_provider40 = require("@talismn/chaindata-provider");
|
|
3818
|
-
var
|
|
4030
|
+
var import_scale10 = require("@talismn/scale");
|
|
3819
4031
|
var import_polkadot_api = require("polkadot-api");
|
|
3820
4032
|
var getTransferCallData7 = ({
|
|
3821
4033
|
from: from2,
|
|
@@ -3828,7 +4040,7 @@ var getTransferCallData7 = ({
|
|
|
3828
4040
|
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE8}.`);
|
|
3829
4041
|
const { netuid: subnetId, hotkey } = (0, import_chaindata_provider40.parseSubDTaoTokenId)(token.id);
|
|
3830
4042
|
if (!hotkey) throw new Error(`Missing hotkey`);
|
|
3831
|
-
const { builder } = (0,
|
|
4043
|
+
const { builder } = (0, import_scale10.parseMetadataRpc)(metadataRpc);
|
|
3832
4044
|
const { codec, location } = builder.buildCall("SubtensorModule", "transfer_stake");
|
|
3833
4045
|
const args = codec.enc({
|
|
3834
4046
|
origin_netuid: subnetId,
|
|
@@ -3855,6 +4067,7 @@ var subscribeBalances7 = ({
|
|
|
3855
4067
|
miniMetadata
|
|
3856
4068
|
}) => {
|
|
3857
4069
|
if (!tokensWithAddresses.length) return (0, import_rxjs9.of)({ success: [], errors: [] });
|
|
4070
|
+
const balanceDefs = getBalanceDefs(tokensWithAddresses);
|
|
3858
4071
|
return new import_rxjs9.Observable((subscriber) => {
|
|
3859
4072
|
const abortController = new AbortController();
|
|
3860
4073
|
const poll = async () => {
|
|
@@ -3868,8 +4081,8 @@ var subscribeBalances7 = ({
|
|
|
3868
4081
|
});
|
|
3869
4082
|
if (abortController.signal.aborted) return;
|
|
3870
4083
|
subscriber.next(balances);
|
|
3871
|
-
setTimeout(poll, SUBSCRIPTION_INTERVAL7);
|
|
3872
4084
|
} catch (error) {
|
|
4085
|
+
if (abortController.signal.aborted) return;
|
|
3873
4086
|
log_default.error("Error", {
|
|
3874
4087
|
module: MODULE_TYPE8,
|
|
3875
4088
|
networkId,
|
|
@@ -3877,8 +4090,17 @@ var subscribeBalances7 = ({
|
|
|
3877
4090
|
addressesByToken: tokensWithAddresses,
|
|
3878
4091
|
error
|
|
3879
4092
|
});
|
|
3880
|
-
|
|
4093
|
+
const fetchError = error instanceof Error ? error : new Error(String(error));
|
|
4094
|
+
subscriber.next({
|
|
4095
|
+
success: [],
|
|
4096
|
+
errors: balanceDefs.map((def) => ({
|
|
4097
|
+
tokenId: def.token.id,
|
|
4098
|
+
address: def.address,
|
|
4099
|
+
error: fetchError
|
|
4100
|
+
}))
|
|
4101
|
+
});
|
|
3881
4102
|
}
|
|
4103
|
+
if (!abortController.signal.aborted) setTimeout(poll, SUBSCRIPTION_INTERVAL7);
|
|
3882
4104
|
};
|
|
3883
4105
|
poll();
|
|
3884
4106
|
return () => {
|
|
@@ -3910,7 +4132,7 @@ var SubDTaoTokenConfigSchema = import_v411.default.strictObject({
|
|
|
3910
4132
|
function excludeFromTransferableAmount(locks) {
|
|
3911
4133
|
if (typeof locks === "string") return BigInt(locks);
|
|
3912
4134
|
if (!Array.isArray(locks)) locks = [locks];
|
|
3913
|
-
return locks.filter((lock) => lock.includeInTransferable !== true).map((lock) => lock.amount.planck).reduce((max, lock) =>
|
|
4135
|
+
return locks.filter((lock) => lock.includeInTransferable !== true).map((lock) => lock.amount.planck).reduce((max, lock) => import_util9.BigMath.max(max, lock), 0n);
|
|
3914
4136
|
}
|
|
3915
4137
|
function excludeFromFeePayableLocks(locks) {
|
|
3916
4138
|
if (typeof locks === "string") return [];
|
|
@@ -3938,7 +4160,7 @@ var Balances = class _Balances {
|
|
|
3938
4160
|
if (balances instanceof Balance) return new _Balances([balances], hydrate);
|
|
3939
4161
|
if (!Array.isArray(balances)) return new _Balances(Object.values(balances), hydrate);
|
|
3940
4162
|
if (balances.length === 0) return this;
|
|
3941
|
-
if (!(0,
|
|
4163
|
+
if (!(0, import_util9.isArrayOf)(balances, Balance))
|
|
3942
4164
|
return new _Balances(
|
|
3943
4165
|
balances.map((storage) => new Balance(storage)),
|
|
3944
4166
|
hydrate
|
|
@@ -4132,7 +4354,7 @@ var Balance = class {
|
|
|
4132
4354
|
if (hydrate !== void 0) this.#db = hydrate;
|
|
4133
4355
|
};
|
|
4134
4356
|
#format = (balance) => new BalanceFormatter(
|
|
4135
|
-
(0,
|
|
4357
|
+
(0, import_util9.isBigInt)(balance) ? balance.toString() : balance,
|
|
4136
4358
|
this.decimals || void 0,
|
|
4137
4359
|
this.rates
|
|
4138
4360
|
);
|
|
@@ -4181,9 +4403,9 @@ var Balance = class {
|
|
|
4181
4403
|
const totalSupply = extras.find((extra2) => extra2.label === "totalSupply")?.amount ?? "0";
|
|
4182
4404
|
const reserve0 = extras.find((extra2) => extra2.label === "reserve0")?.amount ?? "0";
|
|
4183
4405
|
const reserve1 = extras.find((extra2) => extra2.label === "reserve1")?.amount ?? "0";
|
|
4184
|
-
const totalSupplyTokens = (
|
|
4185
|
-
const reserve0Tokens = (
|
|
4186
|
-
const reserve1Tokens = (
|
|
4406
|
+
const totalSupplyTokens = configureBigNumber_default(totalSupply).times(10 ** (-1 * decimals));
|
|
4407
|
+
const reserve0Tokens = configureBigNumber_default(reserve0).times(10 ** (-1 * decimals0));
|
|
4408
|
+
const reserve1Tokens = configureBigNumber_default(reserve1).times(10 ** (-1 * decimals1));
|
|
4187
4409
|
const rates0Currencies = new Set(Object.keys(rates0));
|
|
4188
4410
|
const rates1Currencies = new Set(Object.keys(rates1));
|
|
4189
4411
|
const currencies = [...rates0Currencies].filter((c) => rates1Currencies.has(c));
|
|
@@ -4191,7 +4413,7 @@ var Balance = class {
|
|
|
4191
4413
|
(currency) => [
|
|
4192
4414
|
currency,
|
|
4193
4415
|
// tvl (in a given currency) == reserve0*currencyRate0 + reserve1*currencyRate1
|
|
4194
|
-
|
|
4416
|
+
configureBigNumber_default.sum(
|
|
4195
4417
|
reserve0Tokens.times(rates0[currency]?.price ?? 0),
|
|
4196
4418
|
reserve1Tokens.times(rates1[currency]?.price ?? 0)
|
|
4197
4419
|
)
|
|
@@ -4277,7 +4499,7 @@ var Balance = class {
|
|
|
4277
4499
|
/** The frozen balance of this token. Is included in the free amount. */
|
|
4278
4500
|
get locked() {
|
|
4279
4501
|
return this.#format(
|
|
4280
|
-
this.locks.map(({ amount }) => amount.planck).reduce((a, b) =>
|
|
4502
|
+
this.locks.map(({ amount }) => amount.planck).reduce((a, b) => import_util9.BigMath.max(a, b), 0n)
|
|
4281
4503
|
);
|
|
4282
4504
|
}
|
|
4283
4505
|
get locks() {
|
|
@@ -4301,15 +4523,15 @@ var Balance = class {
|
|
|
4301
4523
|
const oldTransferableCalculation = () => {
|
|
4302
4524
|
if (this.locks.length === 0) return this.free;
|
|
4303
4525
|
const excludeAmount = excludeFromTransferableAmount(this.locks);
|
|
4304
|
-
return this.#format(
|
|
4526
|
+
return this.#format(import_util9.BigMath.max(this.free.planck - excludeAmount, 0n));
|
|
4305
4527
|
};
|
|
4306
4528
|
const newTransferableCalculation = () => {
|
|
4307
4529
|
if (this.locks.length === 0) return this.free;
|
|
4308
|
-
const untouchableAmount =
|
|
4530
|
+
const untouchableAmount = import_util9.BigMath.max(
|
|
4309
4531
|
excludeFromTransferableAmount(this.locks) - this.reserved.planck,
|
|
4310
4532
|
0n
|
|
4311
4533
|
);
|
|
4312
|
-
return this.#format(
|
|
4534
|
+
return this.#format(import_util9.BigMath.max(this.free.planck - untouchableAmount, 0n));
|
|
4313
4535
|
};
|
|
4314
4536
|
if (this.#storage.useLegacyTransferableCalculation) return oldTransferableCalculation();
|
|
4315
4537
|
return newTransferableCalculation();
|
|
@@ -4321,7 +4543,7 @@ var Balance = class {
|
|
|
4321
4543
|
*/
|
|
4322
4544
|
get unavailable() {
|
|
4323
4545
|
const oldCalculation = () => this.locked.planck + this.reserved.planck;
|
|
4324
|
-
const newCalculation = () =>
|
|
4546
|
+
const newCalculation = () => import_util9.BigMath.max(this.locked.planck, this.reserved.planck);
|
|
4325
4547
|
const baseUnavailable = this.#storage.useLegacyTransferableCalculation ? oldCalculation() : newCalculation();
|
|
4326
4548
|
const nomPoolStakedPlancks = this.locks.some(
|
|
4327
4549
|
(lock) => lock.source === "substrate-native-holds" && lock.label === "DelegatedStaking"
|
|
@@ -4331,8 +4553,8 @@ var Balance = class {
|
|
|
4331
4553
|
/** The feePayable balance of this token. Is generally the free amount - the feeFrozen amount. */
|
|
4332
4554
|
get feePayable() {
|
|
4333
4555
|
if (this.locks.length === 0) return this.free;
|
|
4334
|
-
const excludeAmount = excludeFromFeePayableLocks(this.locked.planck.toString()).map((lock) => BigInt(lock.amount)).reduce((max, lock) =>
|
|
4335
|
-
return this.#format(
|
|
4556
|
+
const excludeAmount = excludeFromFeePayableLocks(this.locked.planck.toString()).map((lock) => BigInt(lock.amount)).reduce((max, lock) => import_util9.BigMath.max(max, lock), 0n);
|
|
4557
|
+
return this.#format(import_util9.BigMath.max(this.free.planck - excludeAmount, 0n));
|
|
4336
4558
|
}
|
|
4337
4559
|
};
|
|
4338
4560
|
var BalanceValueGetter = class {
|
|
@@ -4355,7 +4577,7 @@ var BalanceFormatter = class {
|
|
|
4355
4577
|
#decimals;
|
|
4356
4578
|
#tokenRates;
|
|
4357
4579
|
constructor(planck, decimals, fiatRatios) {
|
|
4358
|
-
this.#planck = (0,
|
|
4580
|
+
this.#planck = (0, import_util9.isBigInt)(planck) ? planck.toString() : planck ?? "0";
|
|
4359
4581
|
this.#decimals = decimals || 0;
|
|
4360
4582
|
this.#tokenRates = fiatRatios || null;
|
|
4361
4583
|
}
|
|
@@ -4364,7 +4586,7 @@ var BalanceFormatter = class {
|
|
|
4364
4586
|
return BigInt(this.#planck);
|
|
4365
4587
|
}
|
|
4366
4588
|
get tokens() {
|
|
4367
|
-
return (0,
|
|
4589
|
+
return (0, import_util9.planckToTokens)(this.#planck, this.#decimals);
|
|
4368
4590
|
}
|
|
4369
4591
|
fiat(currency) {
|
|
4370
4592
|
if (!this.#tokenRates) return null;
|
|
@@ -4559,13 +4781,13 @@ var getValueId = (amount) => {
|
|
|
4559
4781
|
|
|
4560
4782
|
// src/types/minimetadatas.ts
|
|
4561
4783
|
var import_chaindata_provider43 = require("@talismn/chaindata-provider");
|
|
4562
|
-
var
|
|
4784
|
+
var import_scale11 = require("@talismn/scale");
|
|
4563
4785
|
var deriveMiniMetadataId = ({
|
|
4564
4786
|
source,
|
|
4565
4787
|
chainId,
|
|
4566
4788
|
specVersion
|
|
4567
|
-
}) => (0,
|
|
4568
|
-
(0,
|
|
4789
|
+
}) => (0, import_scale11.toHex)(
|
|
4790
|
+
(0, import_scale11.Twox128)(new TextEncoder().encode(`${source}${chainId}${specVersion}${import_chaindata_provider43.MINIMETADATA_VERSION}`))
|
|
4569
4791
|
).slice(-32);
|
|
4570
4792
|
|
|
4571
4793
|
// src/modules/substrate-assets/getMiniMetadata.ts
|
|
@@ -4582,7 +4804,7 @@ var getMiniMetadata8 = ({
|
|
|
4582
4804
|
`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
|
|
4583
4805
|
);
|
|
4584
4806
|
const id = deriveMiniMetadataId({ source, chainId, specVersion });
|
|
4585
|
-
const { unifiedMetadata } = (0,
|
|
4807
|
+
const { unifiedMetadata } = (0, import_scale12.parseMetadataRpc)(metadataRpc);
|
|
4586
4808
|
if (unifiedMetadata.version < 14)
|
|
4587
4809
|
throw new Error(
|
|
4588
4810
|
`Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
|
|
@@ -4598,16 +4820,16 @@ var getMiniMetadata8 = ({
|
|
|
4598
4820
|
};
|
|
4599
4821
|
};
|
|
4600
4822
|
var getData2 = (metadataRpc) => {
|
|
4601
|
-
const { metadata, unifiedMetadata } = (0,
|
|
4823
|
+
const { metadata, unifiedMetadata } = (0, import_scale12.parseMetadataRpc)(metadataRpc);
|
|
4602
4824
|
if (!hasStorageItems(unifiedMetadata, "Assets", ["Account", "Asset", "Metadata"])) return null;
|
|
4603
|
-
(0,
|
|
4604
|
-
return (0,
|
|
4825
|
+
(0, import_scale12.compactMetadata)(metadata, [{ pallet: "Assets", items: ["Account", "Asset", "Metadata"] }]);
|
|
4826
|
+
return (0, import_scale12.encodeMetadata)(metadata);
|
|
4605
4827
|
};
|
|
4606
4828
|
|
|
4607
4829
|
// src/modules/substrate-assets/getTransferCallData.ts
|
|
4608
4830
|
var import_utils4 = require("@polkadot-api/utils");
|
|
4609
4831
|
var import_chaindata_provider45 = require("@talismn/chaindata-provider");
|
|
4610
|
-
var
|
|
4832
|
+
var import_scale13 = require("@talismn/scale");
|
|
4611
4833
|
var import_polkadot_api2 = require("polkadot-api");
|
|
4612
4834
|
var getTransferCallData8 = ({
|
|
4613
4835
|
from: from2,
|
|
@@ -4619,7 +4841,7 @@ var getTransferCallData8 = ({
|
|
|
4619
4841
|
}) => {
|
|
4620
4842
|
if (!(0, import_chaindata_provider45.isTokenOfType)(token, MODULE_TYPE7))
|
|
4621
4843
|
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE7}.`);
|
|
4622
|
-
const { builder } = (0,
|
|
4844
|
+
const { builder } = (0, import_scale13.parseMetadataRpc)(metadataRpc);
|
|
4623
4845
|
const method = getTransferMethod(type);
|
|
4624
4846
|
const { codec, location } = builder.buildCall("Assets", method);
|
|
4625
4847
|
const args = getEncodedArgs(method, token.assetId, to, value, codec);
|
|
@@ -4750,8 +4972,8 @@ var MODULE_TYPE9 = import_chaindata_provider47.SubForeignAssetsTokenSchema.shape
|
|
|
4750
4972
|
var PLATFORM9 = import_chaindata_provider47.SubForeignAssetsTokenSchema.shape.platform.value;
|
|
4751
4973
|
|
|
4752
4974
|
// src/modules/substrate-foreignassets/buildQueries.ts
|
|
4753
|
-
var
|
|
4754
|
-
var
|
|
4975
|
+
var import_scale14 = require("@talismn/scale");
|
|
4976
|
+
var import_util10 = require("@talismn/util");
|
|
4755
4977
|
var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
|
|
4756
4978
|
const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
|
|
4757
4979
|
storage: ["ForeignAssets", "Account"]
|
|
@@ -4760,7 +4982,7 @@ var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
|
|
|
4760
4982
|
const scaleCoder = networkStorageCoders?.storage;
|
|
4761
4983
|
const getStateKey = (onChainId) => {
|
|
4762
4984
|
try {
|
|
4763
|
-
return scaleCoder?.keys?.enc?.((0,
|
|
4985
|
+
return scaleCoder?.keys?.enc?.((0, import_scale14.papiParse)(onChainId), address);
|
|
4764
4986
|
} catch {
|
|
4765
4987
|
return null;
|
|
4766
4988
|
}
|
|
@@ -4773,7 +4995,7 @@ var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
|
|
|
4773
4995
|
return null;
|
|
4774
4996
|
}
|
|
4775
4997
|
const decodeResult = (changes) => {
|
|
4776
|
-
const decoded = (0,
|
|
4998
|
+
const decoded = (0, import_scale14.decodeScale)(
|
|
4777
4999
|
scaleCoder,
|
|
4778
5000
|
changes[0],
|
|
4779
5001
|
`Failed to decode substrate-assets balance on chain ${networkId}`
|
|
@@ -4806,7 +5028,7 @@ var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
|
|
|
4806
5028
|
stateKeys: [stateKey],
|
|
4807
5029
|
decodeResult
|
|
4808
5030
|
};
|
|
4809
|
-
}).filter(
|
|
5031
|
+
}).filter(import_util10.isNotNil);
|
|
4810
5032
|
};
|
|
4811
5033
|
|
|
4812
5034
|
// src/modules/substrate-foreignassets/fetchBalances.ts
|
|
@@ -4881,7 +5103,7 @@ var fetchBalances9 = async ({
|
|
|
4881
5103
|
|
|
4882
5104
|
// src/modules/substrate-foreignassets/fetchTokens.ts
|
|
4883
5105
|
var import_chaindata_provider48 = require("@talismn/chaindata-provider");
|
|
4884
|
-
var
|
|
5106
|
+
var import_scale15 = require("@talismn/scale");
|
|
4885
5107
|
var import_lodash_es22 = require("lodash-es");
|
|
4886
5108
|
var fetchTokens9 = async ({
|
|
4887
5109
|
networkId,
|
|
@@ -4891,15 +5113,15 @@ var fetchTokens9 = async ({
|
|
|
4891
5113
|
}) => {
|
|
4892
5114
|
const anyMiniMetadata = miniMetadata;
|
|
4893
5115
|
if (!anyMiniMetadata?.data) return [];
|
|
4894
|
-
const { builder } = (0,
|
|
5116
|
+
const { builder } = (0, import_scale15.parseMetadataRpc)(anyMiniMetadata.data);
|
|
4895
5117
|
const assetCodec = builder.buildStorage("ForeignAssets", "Asset");
|
|
4896
5118
|
const metadataCodec = builder.buildStorage("ForeignAssets", "Metadata");
|
|
4897
5119
|
const [allAssetStorageKeys, allMetadataStorageKeys] = await Promise.all([
|
|
4898
5120
|
connector.send(networkId, "state_getKeys", [
|
|
4899
|
-
(0,
|
|
5121
|
+
(0, import_scale15.getStorageKeyPrefix)("ForeignAssets", "Asset")
|
|
4900
5122
|
]),
|
|
4901
5123
|
connector.send(networkId, "state_getKeys", [
|
|
4902
|
-
(0,
|
|
5124
|
+
(0, import_scale15.getStorageKeyPrefix)("ForeignAssets", "Metadata")
|
|
4903
5125
|
])
|
|
4904
5126
|
]);
|
|
4905
5127
|
const [assetStorageResults, metadataStorageResults] = await Promise.all([
|
|
@@ -4911,7 +5133,7 @@ var fetchTokens9 = async ({
|
|
|
4911
5133
|
const assetByOnChainId = (0, import_lodash_es22.keyBy)(
|
|
4912
5134
|
assetStorageEntries.map(([key, value]) => {
|
|
4913
5135
|
const [decodedKey] = assetCodec.keys.dec(key);
|
|
4914
|
-
const onChainId = (0,
|
|
5136
|
+
const onChainId = (0, import_scale15.papiStringify)(decodedKey);
|
|
4915
5137
|
const asset = assetCodec.value.dec(value);
|
|
4916
5138
|
return { onChainId, existentialDeposit: asset.min_balance, isSufficient: asset.is_sufficient };
|
|
4917
5139
|
}),
|
|
@@ -4920,7 +5142,7 @@ var fetchTokens9 = async ({
|
|
|
4920
5142
|
const metadataByOnChainId = (0, import_lodash_es22.keyBy)(
|
|
4921
5143
|
metadataStorageEntries.map(([key, value]) => {
|
|
4922
5144
|
const [decodedKey] = metadataCodec.keys.dec(key);
|
|
4923
|
-
const onChainId = (0,
|
|
5145
|
+
const onChainId = (0, import_scale15.papiStringify)(decodedKey);
|
|
4924
5146
|
const metadata = metadataCodec.value.dec(value);
|
|
4925
5147
|
return {
|
|
4926
5148
|
onChainId,
|
|
@@ -4965,7 +5187,7 @@ var fetchTokens9 = async ({
|
|
|
4965
5187
|
|
|
4966
5188
|
// src/modules/substrate-foreignassets/getMiniMetadata.ts
|
|
4967
5189
|
var import_chaindata_provider49 = require("@talismn/chaindata-provider");
|
|
4968
|
-
var
|
|
5190
|
+
var import_scale16 = require("@talismn/scale");
|
|
4969
5191
|
var getMiniMetadata9 = ({
|
|
4970
5192
|
networkId,
|
|
4971
5193
|
specVersion,
|
|
@@ -4979,7 +5201,7 @@ var getMiniMetadata9 = ({
|
|
|
4979
5201
|
`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
|
|
4980
5202
|
);
|
|
4981
5203
|
const id = deriveMiniMetadataId({ source, chainId, specVersion });
|
|
4982
|
-
const { unifiedMetadata } = (0,
|
|
5204
|
+
const { unifiedMetadata } = (0, import_scale16.parseMetadataRpc)(metadataRpc);
|
|
4983
5205
|
if (unifiedMetadata.version < 14)
|
|
4984
5206
|
throw new Error(
|
|
4985
5207
|
`Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
|
|
@@ -4995,17 +5217,17 @@ var getMiniMetadata9 = ({
|
|
|
4995
5217
|
};
|
|
4996
5218
|
};
|
|
4997
5219
|
var getData3 = (metadataRpc) => {
|
|
4998
|
-
const { metadata, unifiedMetadata } = (0,
|
|
5220
|
+
const { metadata, unifiedMetadata } = (0, import_scale16.parseMetadataRpc)(metadataRpc);
|
|
4999
5221
|
if (!hasStorageItems(unifiedMetadata, "ForeignAssets", ["Account", "Asset", "Metadata"]))
|
|
5000
5222
|
return null;
|
|
5001
|
-
(0,
|
|
5002
|
-
return (0,
|
|
5223
|
+
(0, import_scale16.compactMetadata)(metadata, [{ pallet: "ForeignAssets", items: ["Account", "Asset", "Metadata"] }]);
|
|
5224
|
+
return (0, import_scale16.encodeMetadata)(metadata);
|
|
5003
5225
|
};
|
|
5004
5226
|
|
|
5005
5227
|
// src/modules/substrate-foreignassets/getTransferCallData.ts
|
|
5006
5228
|
var import_utils5 = require("@polkadot-api/utils");
|
|
5007
5229
|
var import_chaindata_provider50 = require("@talismn/chaindata-provider");
|
|
5008
|
-
var
|
|
5230
|
+
var import_scale17 = require("@talismn/scale");
|
|
5009
5231
|
var import_polkadot_api3 = require("polkadot-api");
|
|
5010
5232
|
var getTransferCallData9 = ({
|
|
5011
5233
|
from: from2,
|
|
@@ -5017,7 +5239,7 @@ var getTransferCallData9 = ({
|
|
|
5017
5239
|
}) => {
|
|
5018
5240
|
if (!(0, import_chaindata_provider50.isTokenOfType)(token, MODULE_TYPE9))
|
|
5019
5241
|
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE9}.`);
|
|
5020
|
-
const { builder } = (0,
|
|
5242
|
+
const { builder } = (0, import_scale17.parseMetadataRpc)(metadataRpc);
|
|
5021
5243
|
const method = getTransferMethod2(type);
|
|
5022
5244
|
const { codec, location } = builder.buildCall("ForeignAssets", method);
|
|
5023
5245
|
const args = getEncodedArgs2(method, token.onChainId, to, value, codec);
|
|
@@ -5064,13 +5286,13 @@ var getEncodedValue2 = (codec, possibleValue) => {
|
|
|
5064
5286
|
var getTransferEncodedArgs2 = (onChainId, to, value, codec) => {
|
|
5065
5287
|
return getEncodedValue2(codec, [
|
|
5066
5288
|
() => ({
|
|
5067
|
-
id: (0,
|
|
5289
|
+
id: (0, import_scale17.papiParse)(onChainId),
|
|
5068
5290
|
// for most networks
|
|
5069
5291
|
target: (0, import_polkadot_api3.Enum)("Id", to),
|
|
5070
5292
|
amount: BigInt(value)
|
|
5071
5293
|
}),
|
|
5072
5294
|
() => ({
|
|
5073
|
-
id: (0,
|
|
5295
|
+
id: (0, import_scale17.papiParse)(onChainId),
|
|
5074
5296
|
// for Neuroweb
|
|
5075
5297
|
target: to,
|
|
5076
5298
|
amount: BigInt(value)
|
|
@@ -5080,13 +5302,13 @@ var getTransferEncodedArgs2 = (onChainId, to, value, codec) => {
|
|
|
5080
5302
|
var getTransferAllEncodedArgs2 = (onChainId, to, codec) => {
|
|
5081
5303
|
return getEncodedValue2(codec, [
|
|
5082
5304
|
() => ({
|
|
5083
|
-
id: (0,
|
|
5305
|
+
id: (0, import_scale17.papiParse)(onChainId),
|
|
5084
5306
|
// for most networks
|
|
5085
5307
|
dest: (0, import_polkadot_api3.Enum)("Id", to),
|
|
5086
5308
|
keep_alive: false
|
|
5087
5309
|
}),
|
|
5088
5310
|
() => ({
|
|
5089
|
-
id: (0,
|
|
5311
|
+
id: (0, import_scale17.papiParse)(onChainId),
|
|
5090
5312
|
// for Neuroweb
|
|
5091
5313
|
dest: to,
|
|
5092
5314
|
keep_alive: false
|
|
@@ -5253,7 +5475,7 @@ var fetchBalances10 = async ({
|
|
|
5253
5475
|
|
|
5254
5476
|
// src/modules/substrate-hydration/fetchTokens.ts
|
|
5255
5477
|
var import_chaindata_provider53 = require("@talismn/chaindata-provider");
|
|
5256
|
-
var
|
|
5478
|
+
var import_scale18 = require("@talismn/scale");
|
|
5257
5479
|
var import_lodash_es24 = require("lodash-es");
|
|
5258
5480
|
var fetchTokens10 = async ({
|
|
5259
5481
|
networkId,
|
|
@@ -5263,10 +5485,10 @@ var fetchTokens10 = async ({
|
|
|
5263
5485
|
}) => {
|
|
5264
5486
|
const anyMiniMetadata = miniMetadata;
|
|
5265
5487
|
if (!anyMiniMetadata?.data) return [];
|
|
5266
|
-
const { builder } = (0,
|
|
5488
|
+
const { builder } = (0, import_scale18.parseMetadataRpc)(anyMiniMetadata.data);
|
|
5267
5489
|
const assetsCodec = builder.buildStorage("AssetRegistry", "Assets");
|
|
5268
5490
|
const allAssetStorageKeys = await connector.send(networkId, "state_getKeys", [
|
|
5269
|
-
(0,
|
|
5491
|
+
(0, import_scale18.getStorageKeyPrefix)("AssetRegistry", "Assets")
|
|
5270
5492
|
]);
|
|
5271
5493
|
const assetStorageResults = await connector.send(
|
|
5272
5494
|
networkId,
|
|
@@ -5317,7 +5539,7 @@ var fetchTokens10 = async ({
|
|
|
5317
5539
|
|
|
5318
5540
|
// src/modules/substrate-hydration/getMiniMetadata.ts
|
|
5319
5541
|
var import_chaindata_provider54 = require("@talismn/chaindata-provider");
|
|
5320
|
-
var
|
|
5542
|
+
var import_scale19 = require("@talismn/scale");
|
|
5321
5543
|
var getMiniMetadata10 = ({
|
|
5322
5544
|
networkId,
|
|
5323
5545
|
specVersion,
|
|
@@ -5331,7 +5553,7 @@ var getMiniMetadata10 = ({
|
|
|
5331
5553
|
`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
|
|
5332
5554
|
);
|
|
5333
5555
|
const id = deriveMiniMetadataId({ source, chainId, specVersion });
|
|
5334
|
-
const { unifiedMetadata } = (0,
|
|
5556
|
+
const { unifiedMetadata } = (0, import_scale19.parseMetadataRpc)(metadataRpc);
|
|
5335
5557
|
if (unifiedMetadata.version < 14)
|
|
5336
5558
|
throw new Error(
|
|
5337
5559
|
`Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
|
|
@@ -5347,10 +5569,10 @@ var getMiniMetadata10 = ({
|
|
|
5347
5569
|
};
|
|
5348
5570
|
};
|
|
5349
5571
|
var getData4 = (metadataRpc) => {
|
|
5350
|
-
const { metadata, unifiedMetadata } = (0,
|
|
5572
|
+
const { metadata, unifiedMetadata } = (0, import_scale19.parseMetadataRpc)(metadataRpc);
|
|
5351
5573
|
if (!hasStorageItem(unifiedMetadata, "AssetRegistry", "Assets") || !hasStorageItem(unifiedMetadata, "Tokens", "Accounts") || !hasRuntimeApi(unifiedMetadata, "CurrenciesApi", "accounts"))
|
|
5352
5574
|
return null;
|
|
5353
|
-
(0,
|
|
5575
|
+
(0, import_scale19.compactMetadata)(
|
|
5354
5576
|
metadata,
|
|
5355
5577
|
[
|
|
5356
5578
|
{ pallet: "AssetRegistry", items: ["Assets"] },
|
|
@@ -5365,13 +5587,13 @@ var getData4 = (metadataRpc) => {
|
|
|
5365
5587
|
}
|
|
5366
5588
|
]
|
|
5367
5589
|
);
|
|
5368
|
-
return (0,
|
|
5590
|
+
return (0, import_scale19.encodeMetadata)(metadata);
|
|
5369
5591
|
};
|
|
5370
5592
|
|
|
5371
5593
|
// src/modules/substrate-hydration/getTransferCallData.ts
|
|
5372
5594
|
var import_utils6 = require("@polkadot-api/utils");
|
|
5373
5595
|
var import_chaindata_provider55 = require("@talismn/chaindata-provider");
|
|
5374
|
-
var
|
|
5596
|
+
var import_scale20 = require("@talismn/scale");
|
|
5375
5597
|
var import_polkadot_api4 = require("polkadot-api");
|
|
5376
5598
|
var getTransferCallData10 = ({
|
|
5377
5599
|
from: from2,
|
|
@@ -5382,7 +5604,7 @@ var getTransferCallData10 = ({
|
|
|
5382
5604
|
}) => {
|
|
5383
5605
|
if (!(0, import_chaindata_provider55.isTokenOfType)(token, MODULE_TYPE10))
|
|
5384
5606
|
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE10}.`);
|
|
5385
|
-
const { builder } = (0,
|
|
5607
|
+
const { builder } = (0, import_scale20.parseMetadataRpc)(metadataRpc);
|
|
5386
5608
|
const { codec, location } = builder.buildCall("Currencies", "transfer");
|
|
5387
5609
|
const args = {
|
|
5388
5610
|
dest: to,
|
|
@@ -5464,8 +5686,8 @@ var MODULE_TYPE11 = import_chaindata_provider57.SubNativeTokenSchema.shape.type.
|
|
|
5464
5686
|
var PLATFORM11 = import_chaindata_provider57.SubNativeTokenSchema.shape.platform.value;
|
|
5465
5687
|
|
|
5466
5688
|
// src/modules/substrate-native/queries/buildBaseQueries.ts
|
|
5467
|
-
var
|
|
5468
|
-
var
|
|
5689
|
+
var import_scale21 = require("@talismn/scale");
|
|
5690
|
+
var import_util11 = require("@talismn/util");
|
|
5469
5691
|
|
|
5470
5692
|
// src/modules/substrate-native/util/lockTypes.ts
|
|
5471
5693
|
var import_upperFirst = __toESM(require("lodash-es/upperFirst"));
|
|
@@ -5626,10 +5848,10 @@ var buildBaseQueries = (networkId, balanceDefs, miniMetadata) => {
|
|
|
5626
5848
|
return { balance, nomPoolMemberInfo };
|
|
5627
5849
|
}
|
|
5628
5850
|
};
|
|
5629
|
-
}).filter(
|
|
5851
|
+
}).filter(import_util11.isNotNil);
|
|
5630
5852
|
};
|
|
5631
5853
|
var decodeBaseResult = (coder, value, networkId) => {
|
|
5632
|
-
const decoded = (0,
|
|
5854
|
+
const decoded = (0, import_scale21.decodeScale)(
|
|
5633
5855
|
coder,
|
|
5634
5856
|
value,
|
|
5635
5857
|
`Failed to decode base native balance on chain ${networkId}`
|
|
@@ -5649,7 +5871,7 @@ var decodeBaseResult = (coder, value, networkId) => {
|
|
|
5649
5871
|
return newValues;
|
|
5650
5872
|
};
|
|
5651
5873
|
var decodeLocksResult = (coder, value, networkId) => {
|
|
5652
|
-
const decoded = (0,
|
|
5874
|
+
const decoded = (0, import_scale21.decodeScale)(
|
|
5653
5875
|
coder,
|
|
5654
5876
|
value,
|
|
5655
5877
|
`Failed to decode lock on chain ${networkId}`
|
|
@@ -5664,7 +5886,7 @@ var decodeLocksResult = (coder, value, networkId) => {
|
|
|
5664
5886
|
return locksQueryLocks;
|
|
5665
5887
|
};
|
|
5666
5888
|
var decodeFreezesResult = (coder, value, networkId) => {
|
|
5667
|
-
const decoded = (0,
|
|
5889
|
+
const decoded = (0, import_scale21.decodeScale)(
|
|
5668
5890
|
coder,
|
|
5669
5891
|
value,
|
|
5670
5892
|
`Failed to decode freeze on chain ${networkId}`
|
|
@@ -5678,7 +5900,7 @@ var decodeFreezesResult = (coder, value, networkId) => {
|
|
|
5678
5900
|
return freezesValues;
|
|
5679
5901
|
};
|
|
5680
5902
|
var decodeHoldsResult = (coder, value, networkId) => {
|
|
5681
|
-
const decoded = (0,
|
|
5903
|
+
const decoded = (0, import_scale21.decodeScale)(
|
|
5682
5904
|
coder,
|
|
5683
5905
|
value,
|
|
5684
5906
|
`Failed to decode holds on chain ${networkId}`
|
|
@@ -5694,7 +5916,7 @@ var decodeHoldsResult = (coder, value, networkId) => {
|
|
|
5694
5916
|
return holdsValues;
|
|
5695
5917
|
};
|
|
5696
5918
|
var decodeStakingLedgerResult = (coder, value, networkId) => {
|
|
5697
|
-
const decoded = (0,
|
|
5919
|
+
const decoded = (0, import_scale21.decodeScale)(
|
|
5698
5920
|
coder,
|
|
5699
5921
|
value,
|
|
5700
5922
|
`Failed to decode unbonding query on chain ${networkId}`
|
|
@@ -5711,7 +5933,7 @@ var decodeStakingLedgerResult = (coder, value, networkId) => {
|
|
|
5711
5933
|
return stakingLedgerResults;
|
|
5712
5934
|
};
|
|
5713
5935
|
var decodePoolMemberResult = (coder, value, networkId) => {
|
|
5714
|
-
const decoded = (0,
|
|
5936
|
+
const decoded = (0, import_scale21.decodeScale)(
|
|
5715
5937
|
coder,
|
|
5716
5938
|
value,
|
|
5717
5939
|
`Failed to decode poolMembers on chain ${networkId}`
|
|
@@ -5733,7 +5955,7 @@ var decodePoolMemberResult = (coder, value, networkId) => {
|
|
|
5733
5955
|
};
|
|
5734
5956
|
|
|
5735
5957
|
// src/modules/substrate-native/queries/buildNomPoolQueries.ts
|
|
5736
|
-
var
|
|
5958
|
+
var import_scale22 = require("@talismn/scale");
|
|
5737
5959
|
|
|
5738
5960
|
// src/modules/substrate-native/util/nompoolAccountId.ts
|
|
5739
5961
|
var import_utils7 = require("@polkadot-api/utils");
|
|
@@ -5826,7 +6048,7 @@ var getNomPoolCoders = (networkId, miniMetadata) => {
|
|
|
5826
6048
|
});
|
|
5827
6049
|
};
|
|
5828
6050
|
var decodePoolPoints = (coder, value, networkId) => {
|
|
5829
|
-
const decoded = (0,
|
|
6051
|
+
const decoded = (0, import_scale22.decodeScale)(
|
|
5830
6052
|
coder,
|
|
5831
6053
|
value,
|
|
5832
6054
|
`Failed to decode bondedPools on chain ${networkId}`
|
|
@@ -5834,7 +6056,7 @@ var decodePoolPoints = (coder, value, networkId) => {
|
|
|
5834
6056
|
return { poolPoints: decoded?.points.toString() };
|
|
5835
6057
|
};
|
|
5836
6058
|
var decodePoolStake = (coder, value, networkId) => {
|
|
5837
|
-
const decoded = (0,
|
|
6059
|
+
const decoded = (0, import_scale22.decodeScale)(
|
|
5838
6060
|
coder,
|
|
5839
6061
|
value,
|
|
5840
6062
|
`Failed to decode ledger on chain ${networkId}`
|
|
@@ -5842,7 +6064,7 @@ var decodePoolStake = (coder, value, networkId) => {
|
|
|
5842
6064
|
return { poolTotalActiveStake: decoded?.active.toString() };
|
|
5843
6065
|
};
|
|
5844
6066
|
var decodePoolMeta = (coder, value, networkId) => {
|
|
5845
|
-
const decoded = (0,
|
|
6067
|
+
const decoded = (0, import_scale22.decodeScale)(
|
|
5846
6068
|
coder,
|
|
5847
6069
|
value,
|
|
5848
6070
|
`Failed to decode metadata on chain ${networkId}`
|
|
@@ -5961,7 +6183,7 @@ var getChainProperties = async (connector, networkId) => {
|
|
|
5961
6183
|
|
|
5962
6184
|
// src/modules/substrate-native/getMiniMetadata.ts
|
|
5963
6185
|
var import_chaindata_provider59 = require("@talismn/chaindata-provider");
|
|
5964
|
-
var
|
|
6186
|
+
var import_scale23 = require("@talismn/scale");
|
|
5965
6187
|
var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
5966
6188
|
const source = MODULE_TYPE11;
|
|
5967
6189
|
const chainId = networkId;
|
|
@@ -5971,7 +6193,7 @@ var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
|
5971
6193
|
`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
|
|
5972
6194
|
);
|
|
5973
6195
|
const id = deriveMiniMetadataId({ source, chainId, specVersion });
|
|
5974
|
-
const { metadata, unifiedMetadata } = (0,
|
|
6196
|
+
const { metadata, unifiedMetadata } = (0, import_scale23.parseMetadataRpc)(metadataRpc);
|
|
5975
6197
|
if (unifiedMetadata.version < 14)
|
|
5976
6198
|
throw new Error(
|
|
5977
6199
|
`Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
|
|
@@ -6000,7 +6222,7 @@ var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
|
6000
6222
|
unifiedMetadata.pallets.find(({ name }) => name === "Balances")?.storage?.items.find(({ name }) => name === "Freezes")
|
|
6001
6223
|
);
|
|
6002
6224
|
const useLegacyTransferableCalculation = !hasFreezesItem;
|
|
6003
|
-
(0,
|
|
6225
|
+
(0, import_scale23.compactMetadata)(metadata, [
|
|
6004
6226
|
{ pallet: "System", constants: ["Version", "SS58Prefix"], items: ["Account"] },
|
|
6005
6227
|
{ pallet: "Balances", items: ["Reserves", "Holds", "Locks", "Freezes"] },
|
|
6006
6228
|
{ pallet: "NominationPools", items: ["PoolMembers", "BondedPools", "Metadata"] },
|
|
@@ -6012,7 +6234,7 @@ var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
|
6012
6234
|
chainId,
|
|
6013
6235
|
specVersion,
|
|
6014
6236
|
version: import_chaindata_provider59.MINIMETADATA_VERSION,
|
|
6015
|
-
data: (0,
|
|
6237
|
+
data: (0, import_scale23.encodeMetadata)(metadata),
|
|
6016
6238
|
extra: {
|
|
6017
6239
|
useLegacyTransferableCalculation,
|
|
6018
6240
|
existentialDeposit,
|
|
@@ -6024,7 +6246,7 @@ var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
|
6024
6246
|
// src/modules/substrate-native/getTransferCallData.ts
|
|
6025
6247
|
var import_utils8 = require("@polkadot-api/utils");
|
|
6026
6248
|
var import_chaindata_provider60 = require("@talismn/chaindata-provider");
|
|
6027
|
-
var
|
|
6249
|
+
var import_scale24 = require("@talismn/scale");
|
|
6028
6250
|
var import_polkadot_api6 = require("polkadot-api");
|
|
6029
6251
|
var getTransferCallData11 = ({
|
|
6030
6252
|
from: from2,
|
|
@@ -6036,7 +6258,7 @@ var getTransferCallData11 = ({
|
|
|
6036
6258
|
}) => {
|
|
6037
6259
|
if (!(0, import_chaindata_provider60.isTokenOfType)(token, MODULE_TYPE11))
|
|
6038
6260
|
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE11}.`);
|
|
6039
|
-
const { unifiedMetadata, lookupFn, builder } = (0,
|
|
6261
|
+
const { unifiedMetadata, lookupFn, builder } = (0, import_scale24.parseMetadataRpc)(metadataRpc);
|
|
6040
6262
|
const method = getTransferMethod3(type, unifiedMetadata, lookupFn);
|
|
6041
6263
|
const { codec, location } = builder.buildCall("Balances", method);
|
|
6042
6264
|
const args = getEncodedArgs3(method, to, value, codec);
|
|
@@ -7336,7 +7558,7 @@ var fetchTokens12 = async ({
|
|
|
7336
7558
|
|
|
7337
7559
|
// src/modules/substrate-psp22/getMiniMetadata.ts
|
|
7338
7560
|
var import_chaindata_provider63 = require("@talismn/chaindata-provider");
|
|
7339
|
-
var
|
|
7561
|
+
var import_scale25 = require("@talismn/scale");
|
|
7340
7562
|
var getMiniMetadata12 = ({
|
|
7341
7563
|
networkId,
|
|
7342
7564
|
specVersion,
|
|
@@ -7350,7 +7572,7 @@ var getMiniMetadata12 = ({
|
|
|
7350
7572
|
`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
|
|
7351
7573
|
);
|
|
7352
7574
|
const id = deriveMiniMetadataId({ source, chainId, specVersion });
|
|
7353
|
-
const { unifiedMetadata } = (0,
|
|
7575
|
+
const { unifiedMetadata } = (0, import_scale25.parseMetadataRpc)(metadataRpc);
|
|
7354
7576
|
if (unifiedMetadata.version < 14)
|
|
7355
7577
|
throw new Error(
|
|
7356
7578
|
`Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
|
|
@@ -7371,13 +7593,13 @@ var import_api_contract3 = require("@polkadot/api-contract");
|
|
|
7371
7593
|
var import_types19 = require("@polkadot/types");
|
|
7372
7594
|
var import_utils9 = require("@polkadot-api/utils");
|
|
7373
7595
|
var import_chaindata_provider64 = require("@talismn/chaindata-provider");
|
|
7374
|
-
var
|
|
7596
|
+
var import_scale26 = require("@talismn/scale");
|
|
7375
7597
|
var import_polkadot_api7 = require("polkadot-api");
|
|
7376
7598
|
var getTransferCallData12 = async ({ from: from2, to, value, token, metadataRpc, connector }) => {
|
|
7377
7599
|
if (!(0, import_chaindata_provider64.isTokenOfType)(token, MODULE_TYPE12))
|
|
7378
7600
|
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE12}.`);
|
|
7379
7601
|
const networkId = (0, import_chaindata_provider64.parseTokenId)(token.id).networkId;
|
|
7380
|
-
const { builder } = (0,
|
|
7602
|
+
const { builder } = (0, import_scale26.parseMetadataRpc)(metadataRpc);
|
|
7381
7603
|
const { codec, location } = builder.buildCall("Contracts", "call");
|
|
7382
7604
|
const Psp22Abi = new import_api_contract3.Abi(psp22_default);
|
|
7383
7605
|
const registry = new import_types19.TypeRegistry();
|
|
@@ -7474,8 +7696,8 @@ var MODULE_TYPE13 = import_chaindata_provider66.SubTokensTokenSchema.shape.type.
|
|
|
7474
7696
|
var PLATFORM13 = import_chaindata_provider66.SubTokensTokenSchema.shape.platform.value;
|
|
7475
7697
|
|
|
7476
7698
|
// src/modules/substrate-tokens/buildQueries.ts
|
|
7477
|
-
var
|
|
7478
|
-
var
|
|
7699
|
+
var import_scale27 = require("@talismn/scale");
|
|
7700
|
+
var import_util15 = require("@talismn/util");
|
|
7479
7701
|
var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
|
|
7480
7702
|
const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
|
|
7481
7703
|
storage: [miniMetadata.extra.palletId, "Accounts"]
|
|
@@ -7484,7 +7706,7 @@ var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
|
|
|
7484
7706
|
const scaleCoder = networkStorageCoders?.storage;
|
|
7485
7707
|
const getStateKey = (onChainId) => {
|
|
7486
7708
|
try {
|
|
7487
|
-
return scaleCoder.keys.enc(address, (0,
|
|
7709
|
+
return scaleCoder.keys.enc(address, (0, import_scale27.papiParse)(onChainId));
|
|
7488
7710
|
} catch {
|
|
7489
7711
|
return null;
|
|
7490
7712
|
}
|
|
@@ -7497,7 +7719,7 @@ var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
|
|
|
7497
7719
|
return null;
|
|
7498
7720
|
}
|
|
7499
7721
|
const decodeResult = (changes) => {
|
|
7500
|
-
const decoded = (0,
|
|
7722
|
+
const decoded = (0, import_scale27.decodeScale)(
|
|
7501
7723
|
scaleCoder,
|
|
7502
7724
|
changes[0],
|
|
7503
7725
|
`Failed to decode substrate-tokens balance on chain ${networkId}`
|
|
@@ -7523,7 +7745,7 @@ var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
|
|
|
7523
7745
|
stateKeys: [stateKey],
|
|
7524
7746
|
decodeResult
|
|
7525
7747
|
};
|
|
7526
|
-
}).filter(
|
|
7748
|
+
}).filter(import_util15.isNotNil);
|
|
7527
7749
|
};
|
|
7528
7750
|
|
|
7529
7751
|
// src/modules/substrate-tokens/fetchBalances.ts
|
|
@@ -7621,7 +7843,7 @@ var fetchTokens13 = async ({
|
|
|
7621
7843
|
|
|
7622
7844
|
// src/modules/substrate-tokens/getMiniMetadata.ts
|
|
7623
7845
|
var import_chaindata_provider68 = require("@talismn/chaindata-provider");
|
|
7624
|
-
var
|
|
7846
|
+
var import_scale28 = require("@talismn/scale");
|
|
7625
7847
|
var getMiniMetadata13 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
7626
7848
|
const source = MODULE_TYPE13;
|
|
7627
7849
|
const chainId = networkId;
|
|
@@ -7631,7 +7853,7 @@ var getMiniMetadata13 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
|
7631
7853
|
`specVersion mismatch: expected ${specVersion}, metadata got ${systemVersion.spec_version}`
|
|
7632
7854
|
);
|
|
7633
7855
|
const id = deriveMiniMetadataId({ source, chainId, specVersion });
|
|
7634
|
-
const { unifiedMetadata } = (0,
|
|
7856
|
+
const { unifiedMetadata } = (0, import_scale28.parseMetadataRpc)(metadataRpc);
|
|
7635
7857
|
if (unifiedMetadata.version < 14)
|
|
7636
7858
|
throw new Error(
|
|
7637
7859
|
`Unsupported metadata version: ${unifiedMetadata.version}. Minimum required is 14.`
|
|
@@ -7648,21 +7870,21 @@ var getMiniMetadata13 = ({ networkId, specVersion, metadataRpc, config }) => {
|
|
|
7648
7870
|
};
|
|
7649
7871
|
};
|
|
7650
7872
|
var getData5 = (metadataRpc, pallet) => {
|
|
7651
|
-
const { metadata, unifiedMetadata } = (0,
|
|
7873
|
+
const { metadata, unifiedMetadata } = (0, import_scale28.parseMetadataRpc)(metadataRpc);
|
|
7652
7874
|
if (!hasStorageItems(unifiedMetadata, pallet, ["Accounts"])) return null;
|
|
7653
|
-
(0,
|
|
7654
|
-
return (0,
|
|
7875
|
+
(0, import_scale28.compactMetadata)(metadata, [{ pallet, items: ["Accounts"] }]);
|
|
7876
|
+
return (0, import_scale28.encodeMetadata)(metadata);
|
|
7655
7877
|
};
|
|
7656
7878
|
|
|
7657
7879
|
// src/modules/substrate-tokens/getTransferCallData.ts
|
|
7658
7880
|
var import_utils10 = require("@polkadot-api/utils");
|
|
7659
7881
|
var import_chaindata_provider69 = require("@talismn/chaindata-provider");
|
|
7660
|
-
var
|
|
7882
|
+
var import_scale29 = require("@talismn/scale");
|
|
7661
7883
|
var import_polkadot_api8 = require("polkadot-api");
|
|
7662
7884
|
var getTransferCallData13 = ({ from: from2, to, value, token, type, metadataRpc, config }) => {
|
|
7663
7885
|
if (!(0, import_chaindata_provider69.isTokenOfType)(token, MODULE_TYPE13))
|
|
7664
7886
|
throw new Error(`Token type ${token.type} is not ${MODULE_TYPE13}.`);
|
|
7665
|
-
const { builder } = (0,
|
|
7887
|
+
const { builder } = (0, import_scale29.parseMetadataRpc)(metadataRpc);
|
|
7666
7888
|
const options = getCallDataOptions(to, token, value, type, config);
|
|
7667
7889
|
const callData = getCallDataFromOptions(builder, options);
|
|
7668
7890
|
return {
|
|
@@ -7694,7 +7916,7 @@ var buildCallData = (builder, pallet, method, args) => {
|
|
|
7694
7916
|
return import_polkadot_api8.Binary.fromBytes((0, import_utils10.mergeUint8)([new Uint8Array(location), codec.enc(args)]));
|
|
7695
7917
|
};
|
|
7696
7918
|
var getCallDataOptions = (to, token, value, type, config) => {
|
|
7697
|
-
const onChainId = (0,
|
|
7919
|
+
const onChainId = (0, import_scale29.papiParse)(token.onChainId);
|
|
7698
7920
|
const method = getTransferMethod4(type);
|
|
7699
7921
|
return [
|
|
7700
7922
|
{
|
|
@@ -7835,7 +8057,7 @@ var BALANCE_MODULES = [
|
|
|
7835
8057
|
|
|
7836
8058
|
// src/getMiniMetadatas/getMetadataRpc.ts
|
|
7837
8059
|
var import_sapi = require("@talismn/sapi");
|
|
7838
|
-
var
|
|
8060
|
+
var import_util16 = require("@talismn/util");
|
|
7839
8061
|
var CACHE = /* @__PURE__ */ new Map();
|
|
7840
8062
|
var getMetadataRpc = async (chainConnector, networkId) => {
|
|
7841
8063
|
if (CACHE.has(networkId)) return CACHE.get(networkId);
|
|
@@ -7849,7 +8071,7 @@ var getMetadataRpc = async (chainConnector, networkId) => {
|
|
|
7849
8071
|
try {
|
|
7850
8072
|
return await pResult;
|
|
7851
8073
|
} catch (cause) {
|
|
7852
|
-
if ((0,
|
|
8074
|
+
if ((0, import_util16.isAbortError)(cause)) throw cause;
|
|
7853
8075
|
throw new Error(`Failed to fetch metadataRpc for network ${networkId}`, { cause });
|
|
7854
8076
|
} finally {
|
|
7855
8077
|
CACHE.delete(networkId);
|
|
@@ -7938,16 +8160,16 @@ var BalancesProvider = class {
|
|
|
7938
8160
|
this.#chaindataProvider = chaindataProvider;
|
|
7939
8161
|
this.#chainConnectors = chainConnectors;
|
|
7940
8162
|
this.#storage = new import_rxjs16.BehaviorSubject({
|
|
7941
|
-
balances: (0, import_lodash_es30.keyBy)(storage.balances.filter(
|
|
7942
|
-
miniMetadatas: (0, import_lodash_es30.keyBy)(storage.miniMetadatas.filter(
|
|
8163
|
+
balances: (0, import_lodash_es30.keyBy)(storage.balances.filter(import_util17.isNotNil), (b) => getBalanceId(b)),
|
|
8164
|
+
miniMetadatas: (0, import_lodash_es30.keyBy)(storage.miniMetadatas.filter(import_util17.isNotNil), (m) => m.id)
|
|
7943
8165
|
});
|
|
7944
8166
|
}
|
|
7945
8167
|
get storage$() {
|
|
7946
8168
|
return this.#storage.pipe(
|
|
7947
8169
|
(0, import_rxjs16.map)(
|
|
7948
8170
|
({ balances, miniMetadatas }) => ({
|
|
7949
|
-
balances: (0, import_lodash_es30.values)(balances).filter(
|
|
7950
|
-
miniMetadatas: (0, import_lodash_es30.values)(miniMetadatas).filter(
|
|
8171
|
+
balances: (0, import_lodash_es30.values)(balances).filter(import_util17.isNotNil).sort(sortByBalanceId),
|
|
8172
|
+
miniMetadatas: (0, import_lodash_es30.values)(miniMetadatas).filter(import_util17.isNotNil).sort(sortByMiniMetadataId)
|
|
7951
8173
|
}),
|
|
7952
8174
|
(0, import_rxjs16.shareReplay)(1)
|
|
7953
8175
|
)
|
|
@@ -8048,7 +8270,7 @@ var BalancesProvider = class {
|
|
|
8048
8270
|
}),
|
|
8049
8271
|
(0, import_rxjs16.map)((results) => {
|
|
8050
8272
|
const errorBalanceIds = results.flatMap((result) => result.failedBalanceIds);
|
|
8051
|
-
const staleBalances = errorBalanceIds.map((balanceId) => this.#storage.value.balances[balanceId]).filter(
|
|
8273
|
+
const staleBalances = errorBalanceIds.map((balanceId) => this.#storage.value.balances[balanceId]).filter(import_util17.isNotNil).map((b) => ({ ...b, status: "stale" }));
|
|
8052
8274
|
return {
|
|
8053
8275
|
status: results.some(({ status }) => status === "initialising") ? "initialising" : "live",
|
|
8054
8276
|
balances: results.flatMap((result) => result.balances).concat(staleBalances).sort(sortByBalanceId),
|
|
@@ -8059,7 +8281,7 @@ var BalancesProvider = class {
|
|
|
8059
8281
|
);
|
|
8060
8282
|
}
|
|
8061
8283
|
getPolkadotNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
|
|
8062
|
-
return (0,
|
|
8284
|
+
return (0, import_util17.getSharedObservable)(
|
|
8063
8285
|
`BalancesProvider.getPolkadotNetworkModuleBalances$`,
|
|
8064
8286
|
{ networkId, mod, tokensWithAddresses },
|
|
8065
8287
|
() => {
|
|
@@ -8101,8 +8323,14 @@ var BalancesProvider = class {
|
|
|
8101
8323
|
(0, import_rxjs16.map)(
|
|
8102
8324
|
(results) => ({
|
|
8103
8325
|
status: "live",
|
|
8104
|
-
// exclude zero balances
|
|
8105
|
-
|
|
8326
|
+
// exclude zero balances, but keep balances that only hold a lock
|
|
8327
|
+
// (eg dtao conviction locks, reported on the subnet's base token — including
|
|
8328
|
+
// zero-mass "ghost" locks with residual conviction, which still pin the hotkey
|
|
8329
|
+
// of future lock_stake calls)
|
|
8330
|
+
balances: results.success.filter((b) => {
|
|
8331
|
+
const balance = new Balance(b);
|
|
8332
|
+
return balance.total.planck > 0n || balance.locks.some((lock) => lock.amount.planck > 0n) || !!findDTaoConvictionLock(balance.locks);
|
|
8333
|
+
}),
|
|
8106
8334
|
failedBalanceIds: results.errors.map(
|
|
8107
8335
|
({ tokenId, address }) => getBalanceId({ tokenId, address })
|
|
8108
8336
|
)
|
|
@@ -8113,7 +8341,7 @@ var BalancesProvider = class {
|
|
|
8113
8341
|
}),
|
|
8114
8342
|
// shareReplay + keepAlive(0) keep the subscription alive while root observable is being unsubscribed+resubscribed, in case any input change
|
|
8115
8343
|
(0, import_rxjs16.shareReplay)({ refCount: true, bufferSize: 1 }),
|
|
8116
|
-
(0,
|
|
8344
|
+
(0, import_util17.keepAlive)(0)
|
|
8117
8345
|
);
|
|
8118
8346
|
return (0, import_rxjs16.defer)(
|
|
8119
8347
|
() => moduleBalances$.pipe(
|
|
@@ -8128,7 +8356,7 @@ var BalancesProvider = class {
|
|
|
8128
8356
|
);
|
|
8129
8357
|
}
|
|
8130
8358
|
getEthereumNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
|
|
8131
|
-
return (0,
|
|
8359
|
+
return (0, import_util17.getSharedObservable)(
|
|
8132
8360
|
`BalancesProvider.getEthereumNetworkModuleBalances$`,
|
|
8133
8361
|
{ networkId, mod, tokensWithAddresses },
|
|
8134
8362
|
() => {
|
|
@@ -8172,7 +8400,7 @@ var BalancesProvider = class {
|
|
|
8172
8400
|
}),
|
|
8173
8401
|
// shareReplay + keepAlive(0) keep the subscription alive while root observable is being unsubscribed+resubscribed, in case any input change
|
|
8174
8402
|
(0, import_rxjs16.shareReplay)({ refCount: true, bufferSize: 1 }),
|
|
8175
|
-
(0,
|
|
8403
|
+
(0, import_util17.keepAlive)(0)
|
|
8176
8404
|
);
|
|
8177
8405
|
return (0, import_rxjs16.defer)(
|
|
8178
8406
|
() => moduleBalances$.pipe(
|
|
@@ -8187,7 +8415,7 @@ var BalancesProvider = class {
|
|
|
8187
8415
|
);
|
|
8188
8416
|
}
|
|
8189
8417
|
getSolanaNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
|
|
8190
|
-
return (0,
|
|
8418
|
+
return (0, import_util17.getSharedObservable)(
|
|
8191
8419
|
`BalancesProvider.getSolanaNetworkModuleBalances$`,
|
|
8192
8420
|
{ networkId, mod, tokensWithAddresses },
|
|
8193
8421
|
() => {
|
|
@@ -8236,7 +8464,7 @@ var BalancesProvider = class {
|
|
|
8236
8464
|
}),
|
|
8237
8465
|
// shareReplay + keepAlive(0) keep the subscription alive while root observable is being unsubscribed+resubscribed, in case any input change
|
|
8238
8466
|
(0, import_rxjs16.shareReplay)({ refCount: true, bufferSize: 1 }),
|
|
8239
|
-
(0,
|
|
8467
|
+
(0, import_util17.keepAlive)(0)
|
|
8240
8468
|
);
|
|
8241
8469
|
return (0, import_rxjs16.defer)(
|
|
8242
8470
|
() => moduleBalances$.pipe(
|
|
@@ -8274,7 +8502,7 @@ var BalancesProvider = class {
|
|
|
8274
8502
|
this.#storage.next((0, import_lodash_es30.assign)({}, storage, { balances }));
|
|
8275
8503
|
}
|
|
8276
8504
|
getNetworkMiniMetadatas$(networkId) {
|
|
8277
|
-
return (0,
|
|
8505
|
+
return (0, import_util17.getSharedObservable)(`BalancesProvider.getNetworkMiniMetadatas$`, { networkId }, () => {
|
|
8278
8506
|
return this.#chaindataProvider.getNetworkById$(networkId).pipe(
|
|
8279
8507
|
(0, import_rxjs16.switchMap)(
|
|
8280
8508
|
(network) => (0, import_chaindata_provider71.isNetworkDot)(network) ? this.getNetworkSpecVersion$(networkId).pipe(
|
|
@@ -8368,7 +8596,7 @@ var BalancesProvider = class {
|
|
|
8368
8596
|
return this.storedMiniMetadataMapById$.pipe(
|
|
8369
8597
|
(0, import_rxjs16.map)((mapById) => {
|
|
8370
8598
|
const miniMetadatas = miniMetadataIds.map((id) => mapById[id]);
|
|
8371
|
-
return miniMetadatas.length && miniMetadatas.every(
|
|
8599
|
+
return miniMetadatas.length && miniMetadatas.every(import_util17.isTruthy) ? miniMetadatas : null;
|
|
8372
8600
|
}),
|
|
8373
8601
|
// source changes very often
|
|
8374
8602
|
(0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual)
|
|
@@ -8378,7 +8606,7 @@ var BalancesProvider = class {
|
|
|
8378
8606
|
return this.#chaindataProvider.miniMetadatasMapById$.pipe(
|
|
8379
8607
|
(0, import_rxjs16.map)((mapById) => {
|
|
8380
8608
|
const miniMetadatas = miniMetadataIds.map((id) => mapById[id]);
|
|
8381
|
-
return miniMetadatas.length && miniMetadatas.every(
|
|
8609
|
+
return miniMetadatas.length && miniMetadatas.every(import_util17.isTruthy) ? miniMetadatas : null;
|
|
8382
8610
|
})
|
|
8383
8611
|
);
|
|
8384
8612
|
}
|
|
@@ -8386,7 +8614,7 @@ var BalancesProvider = class {
|
|
|
8386
8614
|
const balanceDefs = (0, import_lodash_es30.toPairs)(addressesByToken).flatMap(
|
|
8387
8615
|
([tokenId, addresses]) => addresses.map((address) => [tokenId, address])
|
|
8388
8616
|
);
|
|
8389
|
-
return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({ address, tokenId })]).filter(
|
|
8617
|
+
return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({ address, tokenId })]).filter(import_util17.isNotNil).sort(sortByBalanceId);
|
|
8390
8618
|
}
|
|
8391
8619
|
cleanupAddressesByTokenId$(addressesByTokenId) {
|
|
8392
8620
|
return this.#chaindataProvider.getNetworksMapById$().pipe(
|
|
@@ -8490,7 +8718,9 @@ var import_chaindata_provider72 = require("@talismn/chaindata-provider");
|
|
|
8490
8718
|
excludeFromTransferableAmount,
|
|
8491
8719
|
filterBaseLocks,
|
|
8492
8720
|
filterMirrorTokens,
|
|
8721
|
+
findDTaoConvictionLock,
|
|
8493
8722
|
getBalanceId,
|
|
8723
|
+
getConvictionLockLabel,
|
|
8494
8724
|
getDTaoTokenRates,
|
|
8495
8725
|
getLockTitle,
|
|
8496
8726
|
getLockedType,
|
|
@@ -8498,6 +8728,7 @@ var import_chaindata_provider72 = require("@talismn/chaindata-provider");
|
|
|
8498
8728
|
getValueId,
|
|
8499
8729
|
includeInTotalExtraAmount,
|
|
8500
8730
|
taoToAlpha,
|
|
8731
|
+
taoToAlphaCeil,
|
|
8501
8732
|
uniswapV2PairAbi
|
|
8502
8733
|
});
|
|
8503
8734
|
//# sourceMappingURL=index.js.map
|