@talismn/scale 0.3.5 → 1.0.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 +29 -18
- package/dist/index.d.ts +29 -18
- package/dist/index.js +8 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.d.mts
CHANGED
|
@@ -3,7 +3,7 @@ import { getDynamicBuilder } from '@polkadot-api/metadata-builders';
|
|
|
3
3
|
export { MetadataLookup, getDynamicBuilder, getLookupFn } from '@polkadot-api/metadata-builders';
|
|
4
4
|
import * as _polkadot_api_substrate_bindings from '@polkadot-api/substrate-bindings';
|
|
5
5
|
import { Metadata, UnifiedMetadata } from '@polkadot-api/substrate-bindings';
|
|
6
|
-
export { Binary, Blake2128, Blake2128Concat, Blake2256, Blake3256, Blake3256Concat, Codec,
|
|
6
|
+
export { Binary, Blake2128, Blake2128Concat, Blake2256, Blake3256, Blake3256Concat, Codec, SizedHex, Twox128, Twox256, Twox64Concat, UnifiedMetadata, decAnyMetadata, metadata, unifyMetadata } from '@polkadot-api/substrate-bindings';
|
|
7
7
|
import * as scale_ts from 'scale-ts';
|
|
8
8
|
export { fromHex, mergeUint8, toHex } from '@polkadot-api/utils';
|
|
9
9
|
|
|
@@ -899,27 +899,38 @@ declare const parseMetadataRpc: (metadataRpc: `0x${string}`) => {
|
|
|
899
899
|
* These queries are made to the tokens pallet.
|
|
900
900
|
* E.g. api.query.Tokens.Account(accountAddress, papiParse(onChainId))
|
|
901
901
|
*
|
|
902
|
-
* The `onChainId` field on chaindata must be a JSON-parseable string, but
|
|
903
|
-
*
|
|
902
|
+
* The `onChainId` field on chaindata must be a JSON-parseable string, but a decoded papi value can
|
|
903
|
+
* contain types that plain JSON cannot represent. `papiStringify`/`papiParse` are inverse functions
|
|
904
|
+
* that serialise *any* decoded papi value to a deterministic string and back.
|
|
904
905
|
*
|
|
905
|
-
*
|
|
906
|
-
*
|
|
907
|
-
*
|
|
906
|
+
* Only two decoded types are not valid JSON, so only these get a tag — everything else (numbers,
|
|
907
|
+
* objects, and strings, including the `0x…` hex strings papi v2 decodes fixed-size `[u8; N]` fields
|
|
908
|
+
* into) is already JSON and is left untouched:
|
|
909
|
+
* - `bigint` → `bigint:<n>`
|
|
910
|
+
* - `Uint8Array` → `u8a:0x<hex>` (papi v2 decodes variable-length `Vec<u8>` to a `Uint8Array`)
|
|
908
911
|
*
|
|
909
|
-
*
|
|
910
|
-
*
|
|
912
|
+
* Note on polkadot-api v2 byte fields. The `Binary` class was removed and the SCALE codecs split
|
|
913
|
+
* byte decoding into two distinct JS types, which `papiParse` must reproduce exactly or the codec
|
|
914
|
+
* silently builds a garbage statekey (→ no balance):
|
|
915
|
+
* - fixed-size `[u8; N]` (`AccountId32`, `AccountKey20`, `GeneralKey.data`, Erc20 addresses,
|
|
916
|
+
* Stellar code/issuer, …) → a plain `0x` hex **string** (`SizedHex`). The codec's `.enc`
|
|
917
|
+
* expects that string. So a fixed-size field is just a JSON string: no tag, round-trips as-is.
|
|
918
|
+
* - variable-length `Vec<u8>` → a **`Uint8Array`**. The codec's `.enc` expects a `Uint8Array`,
|
|
919
|
+
* NOT a hex string. Hence the dedicated `u8a:` tag, which `papiParse` restores to a `Uint8Array`.
|
|
911
920
|
*
|
|
912
|
-
*
|
|
913
|
-
*
|
|
921
|
+
* `hex:` and `bin:` are legacy/authoring **input** forms still accepted by `papiParse` (some
|
|
922
|
+
* chaindata token templates are hand-written with them), but `papiStringify` never emits them — it
|
|
923
|
+
* normalises to the bare canonical form. So the canonical output is deterministic and idempotent:
|
|
924
|
+
* `papiStringify(papiParse(canonical)) === canonical`.
|
|
914
925
|
*
|
|
915
|
-
*
|
|
916
|
-
*
|
|
917
|
-
*
|
|
918
|
-
* Input: `{ type: "
|
|
919
|
-
*
|
|
920
|
-
*
|
|
921
|
-
* Input: `{
|
|
922
|
-
*
|
|
926
|
+
* Some examples (input string → papiParse value):
|
|
927
|
+
* Input: `5` → `5`
|
|
928
|
+
* Input: `{ type: "LiquidCrowdloan", value: 13 }` → `Enum("LiquidCrowdloan", 13)`
|
|
929
|
+
* Input: `{ type: "NativeToken", value: "bigint:2" }` → `Enum("NativeToken", 2n)`
|
|
930
|
+
* Input: `{ type: "Erc20", value: "0x07df…bce" }` → `Enum("Erc20", "0x07df…bce")` (fixed → string)
|
|
931
|
+
* Input: `{ type: "Erc20", value: "hex:0x07df…bce" }` → `Enum("Erc20", "0x07df…bce")` (legacy input)
|
|
932
|
+
* Input: `{ code: "bin:TZS" }` → `{ code: "0x545a53" }` (legacy input)
|
|
933
|
+
* Input: `"u8a:0xdeadbeef"` → `Uint8Array([0xde,0xad,0xbe,0xef])` (variable bytes)
|
|
923
934
|
*/
|
|
924
935
|
declare const papiParse: <T = unknown>(text: string | T) => T;
|
|
925
936
|
declare const papiStringify: (value: unknown, space?: string | number) => string;
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { getDynamicBuilder } from '@polkadot-api/metadata-builders';
|
|
|
3
3
|
export { MetadataLookup, getDynamicBuilder, getLookupFn } from '@polkadot-api/metadata-builders';
|
|
4
4
|
import * as _polkadot_api_substrate_bindings from '@polkadot-api/substrate-bindings';
|
|
5
5
|
import { Metadata, UnifiedMetadata } from '@polkadot-api/substrate-bindings';
|
|
6
|
-
export { Binary, Blake2128, Blake2128Concat, Blake2256, Blake3256, Blake3256Concat, Codec,
|
|
6
|
+
export { Binary, Blake2128, Blake2128Concat, Blake2256, Blake3256, Blake3256Concat, Codec, SizedHex, Twox128, Twox256, Twox64Concat, UnifiedMetadata, decAnyMetadata, metadata, unifyMetadata } from '@polkadot-api/substrate-bindings';
|
|
7
7
|
import * as scale_ts from 'scale-ts';
|
|
8
8
|
export { fromHex, mergeUint8, toHex } from '@polkadot-api/utils';
|
|
9
9
|
|
|
@@ -899,27 +899,38 @@ declare const parseMetadataRpc: (metadataRpc: `0x${string}`) => {
|
|
|
899
899
|
* These queries are made to the tokens pallet.
|
|
900
900
|
* E.g. api.query.Tokens.Account(accountAddress, papiParse(onChainId))
|
|
901
901
|
*
|
|
902
|
-
* The `onChainId` field on chaindata must be a JSON-parseable string, but
|
|
903
|
-
*
|
|
902
|
+
* The `onChainId` field on chaindata must be a JSON-parseable string, but a decoded papi value can
|
|
903
|
+
* contain types that plain JSON cannot represent. `papiStringify`/`papiParse` are inverse functions
|
|
904
|
+
* that serialise *any* decoded papi value to a deterministic string and back.
|
|
904
905
|
*
|
|
905
|
-
*
|
|
906
|
-
*
|
|
907
|
-
*
|
|
906
|
+
* Only two decoded types are not valid JSON, so only these get a tag — everything else (numbers,
|
|
907
|
+
* objects, and strings, including the `0x…` hex strings papi v2 decodes fixed-size `[u8; N]` fields
|
|
908
|
+
* into) is already JSON and is left untouched:
|
|
909
|
+
* - `bigint` → `bigint:<n>`
|
|
910
|
+
* - `Uint8Array` → `u8a:0x<hex>` (papi v2 decodes variable-length `Vec<u8>` to a `Uint8Array`)
|
|
908
911
|
*
|
|
909
|
-
*
|
|
910
|
-
*
|
|
912
|
+
* Note on polkadot-api v2 byte fields. The `Binary` class was removed and the SCALE codecs split
|
|
913
|
+
* byte decoding into two distinct JS types, which `papiParse` must reproduce exactly or the codec
|
|
914
|
+
* silently builds a garbage statekey (→ no balance):
|
|
915
|
+
* - fixed-size `[u8; N]` (`AccountId32`, `AccountKey20`, `GeneralKey.data`, Erc20 addresses,
|
|
916
|
+
* Stellar code/issuer, …) → a plain `0x` hex **string** (`SizedHex`). The codec's `.enc`
|
|
917
|
+
* expects that string. So a fixed-size field is just a JSON string: no tag, round-trips as-is.
|
|
918
|
+
* - variable-length `Vec<u8>` → a **`Uint8Array`**. The codec's `.enc` expects a `Uint8Array`,
|
|
919
|
+
* NOT a hex string. Hence the dedicated `u8a:` tag, which `papiParse` restores to a `Uint8Array`.
|
|
911
920
|
*
|
|
912
|
-
*
|
|
913
|
-
*
|
|
921
|
+
* `hex:` and `bin:` are legacy/authoring **input** forms still accepted by `papiParse` (some
|
|
922
|
+
* chaindata token templates are hand-written with them), but `papiStringify` never emits them — it
|
|
923
|
+
* normalises to the bare canonical form. So the canonical output is deterministic and idempotent:
|
|
924
|
+
* `papiStringify(papiParse(canonical)) === canonical`.
|
|
914
925
|
*
|
|
915
|
-
*
|
|
916
|
-
*
|
|
917
|
-
*
|
|
918
|
-
* Input: `{ type: "
|
|
919
|
-
*
|
|
920
|
-
*
|
|
921
|
-
* Input: `{
|
|
922
|
-
*
|
|
926
|
+
* Some examples (input string → papiParse value):
|
|
927
|
+
* Input: `5` → `5`
|
|
928
|
+
* Input: `{ type: "LiquidCrowdloan", value: 13 }` → `Enum("LiquidCrowdloan", 13)`
|
|
929
|
+
* Input: `{ type: "NativeToken", value: "bigint:2" }` → `Enum("NativeToken", 2n)`
|
|
930
|
+
* Input: `{ type: "Erc20", value: "0x07df…bce" }` → `Enum("Erc20", "0x07df…bce")` (fixed → string)
|
|
931
|
+
* Input: `{ type: "Erc20", value: "hex:0x07df…bce" }` → `Enum("Erc20", "0x07df…bce")` (legacy input)
|
|
932
|
+
* Input: `{ code: "bin:TZS" }` → `{ code: "0x545a53" }` (legacy input)
|
|
933
|
+
* Input: `"u8a:0xdeadbeef"` → `Uint8Array([0xde,0xad,0xbe,0xef])` (variable bytes)
|
|
923
934
|
*/
|
|
924
935
|
declare const papiParse: <T = unknown>(text: string | T) => T;
|
|
925
936
|
declare const papiStringify: (value: unknown, space?: string | number) => string;
|
package/dist/index.js
CHANGED
|
@@ -36,7 +36,6 @@ __export(index_exports, {
|
|
|
36
36
|
Blake2256: () => import_substrate_bindings4.Blake2256,
|
|
37
37
|
Blake3256: () => import_substrate_bindings4.Blake3256,
|
|
38
38
|
Blake3256Concat: () => import_substrate_bindings4.Blake3256Concat,
|
|
39
|
-
FixedSizeBinary: () => import_substrate_bindings.FixedSizeBinary,
|
|
40
39
|
Twox128: () => import_substrate_bindings4.Twox128,
|
|
41
40
|
Twox256: () => import_substrate_bindings4.Twox256,
|
|
42
41
|
Twox64Concat: () => import_substrate_bindings4.Twox64Concat,
|
|
@@ -74,7 +73,7 @@ var import_anylogger = __toESM(require("anylogger"));
|
|
|
74
73
|
// package.json
|
|
75
74
|
var package_default = {
|
|
76
75
|
name: "@talismn/scale",
|
|
77
|
-
version: "0.
|
|
76
|
+
version: "1.0.0",
|
|
78
77
|
author: "Talisman",
|
|
79
78
|
homepage: "https://talisman.xyz",
|
|
80
79
|
license: "GPL-3.0-or-later",
|
|
@@ -101,9 +100,9 @@ var package_default = {
|
|
|
101
100
|
typecheck: "tsc --noEmit"
|
|
102
101
|
},
|
|
103
102
|
dependencies: {
|
|
104
|
-
"@polkadot-api/metadata-builders": "0.
|
|
105
|
-
"@polkadot-api/substrate-bindings": "0.
|
|
106
|
-
"@polkadot-api/utils": "0.
|
|
103
|
+
"@polkadot-api/metadata-builders": "0.14.3",
|
|
104
|
+
"@polkadot-api/substrate-bindings": "0.20.3",
|
|
105
|
+
"@polkadot-api/utils": "0.4.0",
|
|
107
106
|
anylogger: "^1.0.11",
|
|
108
107
|
"scale-ts": "^1.6.1"
|
|
109
108
|
},
|
|
@@ -446,8 +445,9 @@ var papiParse = (text) => {
|
|
|
446
445
|
const reviver = (_key, value) => {
|
|
447
446
|
if (typeof value !== "string") return value;
|
|
448
447
|
if (value.startsWith("bigint:")) return BigInt(value.slice("bigint:".length));
|
|
449
|
-
if (value.startsWith("
|
|
450
|
-
if (value.startsWith("
|
|
448
|
+
if (value.startsWith("u8a:")) return import_substrate_bindings5.Binary.fromHex(value.slice("u8a:".length));
|
|
449
|
+
if (value.startsWith("hex:")) return value.slice("hex:".length);
|
|
450
|
+
if (value.startsWith("bin:")) return import_substrate_bindings5.Binary.toHex(import_substrate_bindings5.Binary.fromText(value.slice("bin:".length)));
|
|
451
451
|
return value;
|
|
452
452
|
};
|
|
453
453
|
if (typeof text !== "string") return text;
|
|
@@ -456,7 +456,7 @@ var papiParse = (text) => {
|
|
|
456
456
|
var papiStringify = (value, space) => {
|
|
457
457
|
const replacer = (_key, value2) => {
|
|
458
458
|
if (typeof value2 === "bigint") return `bigint:${String(value2)}`;
|
|
459
|
-
if (value2 instanceof
|
|
459
|
+
if (value2 instanceof Uint8Array) return `u8a:${import_substrate_bindings5.Binary.toHex(value2)}`;
|
|
460
460
|
return value2;
|
|
461
461
|
};
|
|
462
462
|
return JSON.stringify(value, replacer, space);
|
|
@@ -469,7 +469,6 @@ var papiStringify = (value, space) => {
|
|
|
469
469
|
Blake2256,
|
|
470
470
|
Blake3256,
|
|
471
471
|
Blake3256Concat,
|
|
472
|
-
FixedSizeBinary,
|
|
473
472
|
Twox128,
|
|
474
473
|
Twox256,
|
|
475
474
|
Twox64Concat,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/papito.ts","../src/log.ts","../package.json","../src/util/compactMetadata.ts","../src/util/decodeScale.ts","../src/util/encodeMetadata.ts","../src/util/encodeStateKey.ts","../src/util/parseMetadataRpc.ts","../src/util/getConstantValueFromMetadata.ts","../src/util/getMetadataVersion.ts","../src/util/getStorageKeyPrefix.ts","../src/util/hash.ts","../src/util/serdePapi.ts"],"sourcesContent":["// TODO: Get the DX of this lib as close as possible to the DX of `const jsonResult = '{\"someKey\":\"someValue\"}'; JSON.decode(jsonResult)`\n\nexport * from \"./papito\"\nexport * from \"./util\"\n","import type { getDynamicBuilder } from \"@polkadot-api/metadata-builders\"\n\nexport {\n getDynamicBuilder,\n getLookupFn,\n type MetadataLookup,\n} from \"@polkadot-api/metadata-builders\"\nexport type { Codec, UnifiedMetadata } from \"@polkadot-api/substrate-bindings\"\nexport {\n Binary,\n decAnyMetadata,\n FixedSizeBinary,\n metadata,\n unifyMetadata,\n} from \"@polkadot-api/substrate-bindings\"\nexport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\n\n/** Constant: https://docs.substrate.io/build/application-development/#metadata-format */\nexport const magicNumber = 1635018093\n\nexport type MetadataBuilder = ReturnType<typeof getDynamicBuilder>\n","import anylogger from \"anylogger\"\n\nimport packageJson from \"../package.json\"\n\nexport default anylogger(packageJson.name)\n","{\n \"name\": \"@talismn/scale\",\n \"version\": \"0.3.5\",\n \"author\": \"Talisman\",\n \"homepage\": \"https://talisman.xyz\",\n \"license\": \"GPL-3.0-or-later\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"repository\": {\n \"directory\": \"packages/scale\",\n \"type\": \"git\",\n \"url\": \"https://github.com/TalismanSociety/talisman.git\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"files\": [\n \"dist\"\n ],\n \"engines\": {\n \"node\": \">=20\"\n },\n \"scripts\": {\n \"test\": \"vitest run\",\n \"clean\": \"rm -rf dist .turbo node_modules\",\n \"build\": \"tsup --silent\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@polkadot-api/metadata-builders\": \"0.13.9\",\n \"@polkadot-api/substrate-bindings\": \"0.17.0\",\n \"@polkadot-api/utils\": \"0.2.0\",\n \"anylogger\": \"^1.0.11\",\n \"scale-ts\": \"^1.6.1\"\n },\n \"devDependencies\": {\n \"@talismn/tsconfig\": \"workspace:*\",\n \"typescript\": \"^6.0.3\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"@talismn/source\": \"./src/index.ts\",\n \"import\": {\n \"types\": \"./dist/index.d.mts\",\n \"default\": \"./dist/index.mjs\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n }\n }\n}\n","import type { Metadata } from \"@polkadot-api/substrate-bindings\"\n\nimport log from \"../log\"\nimport type { Prettify } from \"./Prettify\"\n\nexport type MetadataType = SupportedMetadata[\"lookup\"][number]\nexport type MetadataPallet = SupportedMetadata[\"pallets\"][number]\nexport type MetadataStorageItem = NonNullable<MetadataPallet[\"storage\"]>[\"items\"][number]\n\ntype SupportedMetadata = Extract<Metadata[\"metadata\"], { tag: SupportedMetadataVersion }>[\"value\"]\ntype SupportedMetadataVersion = \"v14\" | \"v15\" | \"v16\"\n\n/**\n * Converts a `Metadata` into a `MiniMetadata`.\n *\n * A `MiniMetadata` only contains the types inside of its `lookup` which are relevant for\n * the storage queries specified in `palletsAndItems`.\n *\n * E.g. if `palletsAndItems` is `{ pallet: \"System\", items: [\"Account\"] }`, then only the\n * types used in the `System.Account` storage query will remain inside of metadata.lookups.\n */\nexport const compactMetadata = (\n anyMetadata: Metadata,\n palletsAndItems: Array<{ pallet: string; constants?: string[]; items: string[] }> = [],\n runtimeApisAndMethods: Array<{ runtimeApi: string; methods: string[] }> = [],\n extraKeepTypes: number[] = []\n) => {\n if (!isCompactableMetadata(anyMetadata))\n throw new Error(`Metadata version ${anyMetadata.metadata.tag} not supported in compactMetadata`)\n\n const metadata: SupportedMetadata = anyMetadata.metadata.value\n\n // remove pallets we don't care about\n metadata.pallets = metadata.pallets.filter((pallet) =>\n // keep this pallet if it's listed in `palletsAndItems`\n palletsAndItems.some(({ pallet: palletName }) => pallet.name === palletName)\n ) as typeof metadata.pallets\n\n // remove fields we don't care about from each pallet, and extract types for each storage item we care about\n const palletsKeepTypes = palletsAndItems.flatMap(\n ({ pallet: palletName, constants: constantNames, items: itemNames }) => {\n const pallet = metadata.pallets.find((pallet) => pallet.name === palletName)\n if (!pallet) return []\n\n // remove pallet fields we don't care about\n pallet.calls = undefined\n pallet.constants = constantNames\n ? pallet.constants.filter((constant) => constantNames.includes(constant.name))\n : []\n // v15 (NOT v14) has docs\n if (\"docs\" in pallet) pallet.docs = []\n pallet.errors = undefined\n pallet.events = undefined\n\n if (!pallet.storage) return []\n\n // filter and extract storage items we care about\n pallet.storage.items = pallet.storage.items.filter((item) =>\n itemNames.some((itemName) => item.name === itemName)\n )\n\n return [\n ...pallet.storage.items\n .flatMap((item) => [\n // each type can be either \"Plain\" or \"Map\"\n // if it's \"Plain\" we only need to get the value type\n // if it's a \"Map\" we want to keep both the key AND the value types\n item.type.tag === \"plain\" && item.type.value,\n item.type.tag === \"map\" && item.type.value.key,\n item.type.tag === \"map\" && item.type.value.value,\n ])\n .filter((type): type is number => typeof type === \"number\"),\n ...pallet.constants.flatMap((constant) => constant.type),\n ]\n }\n )\n\n // remove runtime apis we don't care about\n let runtimeApisKeepTypes: number[] = []\n if (\"apis\" in metadata) {\n // metadata is v15 (NOT v14)\n\n // keep this api if it's listed in `runtimeApisAndMethods`\n metadata.apis = metadata.apis.filter((runtimeApi) =>\n runtimeApisAndMethods.some(\n ({ runtimeApi: runtimeApiName }) => runtimeApi.name === runtimeApiName\n )\n )\n\n // remove methods we don't care about from each runtime api, and extract types for each call's params and result\n runtimeApisKeepTypes = runtimeApisAndMethods.flatMap(\n ({ runtimeApi: runtimeApiName, methods: methodNames }) => {\n const runtimeApi = metadata.apis.find((runtimeApi) => runtimeApi.name === runtimeApiName)\n if (!runtimeApi) return []\n\n // remove runtime fields we don't care about\n runtimeApi.docs = []\n\n if (!runtimeApi.methods) return []\n\n // filter and extract methods we care about\n runtimeApi.methods = runtimeApi.methods.filter((method) =>\n methodNames.some((methodName) => method.name === methodName)\n )\n\n return runtimeApi.methods.flatMap((method) => [\n // each method has an array of input types (for the params)\n ...method.inputs.map((input) => input.type),\n // and one output type (for the result)\n method.output,\n ])\n }\n )\n }\n\n // this is a set of type ids which we plan to keep in our compacted metadata\n // anything not in this set will be deleted\n // we start off with just the types of the state calls we plan to make,\n // then we run those types through a function (addDependentTypes) which will also include\n // all of the types which those types depend on - recursively\n const keepTypes = new Set([...palletsKeepTypes, ...runtimeApisKeepTypes])\n // biome-ignore lint/suspicious/useIterableCallbackReturn: legacy\n extraKeepTypes?.forEach((type) => keepTypes.add(type))\n\n // recursively find all the types which our keepTypes depend on and add them to the keepTypes set\n const metadataTysMap = new Map(metadata.lookup.map((ty) => [ty.id, ty]))\n addDependentTypes(metadataTysMap, keepTypes, [...keepTypes])\n\n // ditch the types we aren't keeping\n metadata.lookup = metadata.lookup.filter((type) => keepTypes.has(type.id))\n\n // update all type ids to be sequential (fill the gaps left by the deleted types)\n const newTypeIds = new Map<number, number>()\n // biome-ignore lint/suspicious/useIterableCallbackReturn: legacy\n metadata.lookup.forEach((type, index) => newTypeIds.set(type.id, index))\n const getNewTypeId = (oldTypeId: number): number => {\n const newTypeId = newTypeIds.get(oldTypeId)\n if (typeof newTypeId !== \"number\") log.error(`Failed to find newTypeId for type ${oldTypeId}`)\n return newTypeId ?? 0\n }\n remapTypeIds(metadata, getNewTypeId)\n\n if (\"address\" in metadata.extrinsic) metadata.extrinsic.address = 0\n if (\"call\" in metadata.extrinsic) metadata.extrinsic.call = 0\n if (\"signature\" in metadata.extrinsic) metadata.extrinsic.signature = 0\n if (\"extra\" in metadata.extrinsic) metadata.extrinsic.extra = 0\n if (\"signedExtensions\" in metadata.extrinsic) metadata.extrinsic.signedExtensions = []\n if (\"outerEnums\" in metadata) {\n // metadata is v15 (NOT v14)\n metadata.outerEnums.call = 0\n metadata.outerEnums.error = 0\n metadata.outerEnums.event = 0\n }\n}\n\ntype CompactableMetadata = Prettify<\n Omit<Metadata, \"metadata\"> & {\n metadata: Extract<Metadata[\"metadata\"], { tag: SupportedMetadataVersion }>\n }\n>\nconst isCompactableMetadata = (metadata: Metadata): metadata is CompactableMetadata => {\n switch (metadata.metadata.tag) {\n case \"v14\":\n case \"v15\":\n case \"v16\":\n return true\n default:\n return false\n }\n}\n\nconst addDependentTypes = (\n metadataTysMap: Map<MetadataType[\"id\"], MetadataType>,\n keepTypes: Set<number>,\n types: number[],\n // Prevent stack overflow when a type references itself\n addedTypes: Set<number> = new Set()\n) => {\n const addDependentSubTypes = (subTypes: number[]) =>\n addDependentTypes(metadataTysMap, keepTypes, subTypes, addedTypes)\n\n for (const typeId of types) {\n const type = metadataTysMap.get(typeId)\n if (!type) {\n log.warn(`Unable to find type with id ${typeId}`)\n continue\n }\n\n if (addedTypes.has(type.id)) continue\n keepTypes.add(type.id)\n addedTypes.add(type.id)\n\n const paramTypes = type.params\n .map((param) => param.type)\n .filter((type): type is number => typeof type === \"number\")\n addDependentSubTypes(paramTypes)\n\n switch (type.def.tag) {\n case \"array\":\n addDependentSubTypes([type.def.value.type])\n break\n\n case \"bitSequence\":\n addDependentSubTypes([type.def.value.bitOrderType, type.def.value.bitStoreType])\n break\n\n case \"compact\":\n addDependentSubTypes([type.def.value])\n break\n\n case \"composite\":\n addDependentSubTypes(\n type.def.value\n .map((field) => field.type)\n .filter((type): type is number => typeof type === \"number\")\n )\n break\n\n case \"primitive\":\n break\n\n case \"sequence\":\n addDependentSubTypes([type.def.value])\n break\n\n case \"tuple\":\n addDependentSubTypes(\n type.def.value.filter((type): type is number => typeof type === \"number\")\n )\n break\n\n case \"variant\":\n addDependentSubTypes(\n type.def.value\n .flatMap((member) => member.fields.map((field) => field.type))\n .filter((type): type is number => typeof type === \"number\")\n )\n break\n\n default: {\n // force compilation error if any types don't have a case\n const exhaustiveCheck: never = type.def\n log.error(`Unhandled V15Type type ${exhaustiveCheck}`)\n }\n }\n }\n}\n\nconst remapTypeIds = (metadata: SupportedMetadata, getNewTypeId: (oldTypeId: number) => number) => {\n remapLookupTypeIds(metadata, getNewTypeId)\n remapStorageTypeIds(metadata, getNewTypeId)\n remapRuntimeApisTypeIds(metadata, getNewTypeId)\n}\n\nconst remapLookupTypeIds = (\n metadata: SupportedMetadata,\n getNewTypeId: (oldTypeId: number) => number\n) => {\n for (const type of metadata.lookup) {\n type.id = getNewTypeId(type.id)\n\n for (const param of type.params) {\n if (typeof param.type !== \"number\") continue\n param.type = getNewTypeId(param.type)\n }\n\n switch (type.def.tag) {\n case \"array\":\n type.def.value.type = getNewTypeId(type.def.value.type)\n break\n\n case \"bitSequence\":\n type.def.value.bitOrderType = getNewTypeId(type.def.value.bitOrderType)\n type.def.value.bitStoreType = getNewTypeId(type.def.value.bitStoreType)\n break\n\n case \"compact\":\n type.def.value = getNewTypeId(type.def.value)\n break\n\n case \"composite\":\n for (const field of type.def.value) {\n if (typeof field.type !== \"number\") continue\n field.type = getNewTypeId(field.type)\n }\n break\n\n case \"primitive\":\n break\n\n case \"sequence\":\n type.def.value = getNewTypeId(type.def.value)\n break\n\n case \"tuple\":\n type.def.value = type.def.value.map((type) => {\n if (typeof type !== \"number\") return type\n return getNewTypeId(type)\n })\n break\n\n case \"variant\":\n for (const member of type.def.value) {\n for (const field of member.fields) {\n if (typeof field.type !== \"number\") continue\n field.type = getNewTypeId(field.type)\n }\n }\n break\n\n default: {\n // force compilation error if any types don't have a case\n const exhaustiveCheck: never = type.def\n log.error(`Unhandled V15Type type ${exhaustiveCheck}`)\n }\n }\n }\n}\n\nconst remapStorageTypeIds = (\n metadata: SupportedMetadata,\n getNewTypeId: (oldTypeId: number) => number\n) => {\n for (const pallet of metadata.pallets) {\n for (const item of pallet.storage?.items ?? []) {\n if (item.type.tag === \"plain\") item.type.value = getNewTypeId(item.type.value)\n if (item.type.tag === \"map\") {\n item.type.value.key = getNewTypeId(item.type.value.key)\n item.type.value.value = getNewTypeId(item.type.value.value)\n }\n }\n for (const constant of pallet.constants ?? []) {\n constant.type = getNewTypeId(constant.type)\n }\n }\n}\n\nconst remapRuntimeApisTypeIds = (\n metadata: SupportedMetadata,\n getNewTypeId: (oldTypeId: number) => number\n) => {\n for (const runtimeApi of metadata.apis) {\n for (const method of runtimeApi.methods ?? []) {\n for (const input of method.inputs) {\n input.type = getNewTypeId(input.type)\n }\n method.output = getNewTypeId(method.output)\n }\n }\n}\n","import log from \"../log\"\nimport type { MetadataBuilder } from \"../papito\"\n\ntype ScaleStorageCoder = ReturnType<MetadataBuilder[\"buildStorage\"]>\n\nexport const decodeScale = <T>(\n scaleCoder: ScaleStorageCoder | undefined,\n change: string | null,\n error?: string\n): T | null => {\n if (change === null) return null\n\n try {\n return (scaleCoder?.value?.dec(change) as T | undefined) ?? null\n } catch (cause) {\n log.warn(error ?? `Failed to decode ${change}`, cause)\n return null\n }\n}\n","import type { Metadata } from \"@polkadot-api/substrate-bindings\"\n\nimport { metadata as scaleMetadata, toHex } from \"../papito\"\n\nexport const encodeMetadata = (metadata: Metadata) =>\n toHex(scaleMetadata.enc(metadata)) as `0x${string}`\n","import log from \"../log\"\nimport type { MetadataBuilder } from \"../papito\"\n\nexport type ScaleStorageCoder = ReturnType<MetadataBuilder[\"buildStorage\"]>\n\nexport const encodeStateKey = (\n scaleCoder: ScaleStorageCoder | undefined,\n error?: string,\n ...args: unknown[]\n): `0x${string}` | undefined => {\n try {\n return scaleCoder?.keys?.enc(...args) as `0x${string}`\n } catch (cause) {\n log.warn(error ?? `Failed to encode stateKey ${JSON.stringify(args)}`, cause)\n return\n }\n}\n","import { getDynamicBuilder, getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport { decAnyMetadata, unifyMetadata } from \"@polkadot-api/substrate-bindings\"\n\nexport const parseMetadataRpc = (metadataRpc: `0x${string}`) => {\n const metadata = decAnyMetadata(metadataRpc)\n const unifiedMetadata = unifyMetadata(metadata)\n const lookupFn = getLookupFn(unifiedMetadata)\n const builder = getDynamicBuilder(lookupFn)\n\n return { metadata, unifiedMetadata, lookupFn, builder }\n}\n","import log from \"../log\"\nimport type { MetadataBuilder, UnifiedMetadata } from \"../papito\"\nimport { parseMetadataRpc } from \"./parseMetadataRpc\"\n\nexport const getConstantValueFromMetadata = <T>(\n metadata: `0x${string}` | { builder: MetadataBuilder; unifiedMetadata: UnifiedMetadata },\n pallet: string,\n constant: string\n) => {\n const { builder, unifiedMetadata } =\n typeof metadata === \"string\" ? parseMetadataRpc(metadata) : metadata\n\n return getConstantValueInner<T>(builder, unifiedMetadata, pallet, constant)\n}\n\nconst getConstantValueInner = <T>(\n builder: MetadataBuilder,\n unifiedMetadata: UnifiedMetadata,\n pallet: string,\n constant: string\n) => {\n try {\n const storageCodec = builder.buildConstant(pallet, constant)\n\n const encodedValue = unifiedMetadata.pallets\n .find(({ name }) => name === pallet)\n ?.constants.find(({ name }) => name === constant)?.value\n\n if (!encodedValue) throw new Error(`Constant ${pallet}.${constant} not found`)\n\n return storageCodec.dec(encodedValue) as T\n } catch (err) {\n log.error(\"Failed to get constant value from metadata\", {\n err,\n pallet,\n constant,\n })\n throw err\n }\n}\n","import { Struct, u8, u32 } from \"scale-ts\"\n\n/**\n * Extracts the `version` u8 from a SCALE-encoded metadata blob and returns it as a `number`.\n *\n * Only reads the first 40 bytes of the blob.\n */\nexport const getMetadataVersion = (metadataRpc: string | Uint8Array | ArrayBuffer) => {\n try {\n return Struct({\n magicNumber: u32,\n version: u8,\n }).dec(metadataRpc).version\n } catch {\n return 0\n }\n}\n","import { Twox128 } from \"@polkadot-api/substrate-bindings\"\nimport { toHex } from \"@polkadot-api/utils\"\n\nexport const getStorageKeyPrefix = (palletName: string, storageName: string) => {\n const palletHash = Twox128(new TextEncoder().encode(palletName))\n const storageHash = Twox128(new TextEncoder().encode(storageName))\n\n // Concatenate and convert to hex\n const combined = new Uint8Array(palletHash.length + storageHash.length)\n combined.set(palletHash, 0)\n combined.set(storageHash, palletHash.length)\n\n return toHex(combined)\n}\n","export {\n Blake2128,\n Blake2128Concat,\n Blake2256,\n Blake3256,\n Blake3256Concat,\n Twox64Concat,\n Twox128,\n Twox256,\n} from \"@polkadot-api/substrate-bindings\"\n","import { Binary } from \"@polkadot-api/substrate-bindings\"\n\n/**\n * For the substrate-tokens (and other) modules, we configure the `onChainId` field in chaindata to tell the module how to query each token.\n * These queries are made to the tokens pallet.\n * E.g. api.query.Tokens.Account(accountAddress, papiParse(onChainId))\n *\n * The `onChainId` field on chaindata must be a JSON-parseable string, but for some SCALE types (especially the Binary type) we must\n * use specific `polkadot-api` classes to handle SCALE-encoding the statekey.\n *\n * Some examples:\n * Input: `5`\n * Output: `5`\n *\n * Input: `{ type: \"DexShare\", value: [ { type: \"Token\", value: { type: \"ACA\" } }, { type: \"Token\", value: { type: \"AUSD\" } } ] }`\n * Output: `Enum(\"DexShare\", [Enum(\"Token\", Enum(\"ACA\")), Enum(\"Token\", Enum(\"AUSD\"))])`\n *\n * Input: `{ type: \"LiquidCrowdloan\", value: 13 }`\n * Output: `Enum(\"LiquidCrowdloan\", 13)`\n *\n * Input: `{ type: \"NativeToken\", value: \"bigint:2\" }`\n * Output: `Enum(\"NativeToken\", 2n)`\n *\n * Input: `{ type: \"Erc20\", value: \"hex:0x07df96d1341a7d16ba1ad431e2c847d978bc2bce\" }`\n * Output: `Enum(\"Erc20\", Binary.fromHex(\"0x07df96d1341a7d16ba1ad431e2c847d978bc2bce\"))`\n *\n * Input: `{ type: \"Stellar\", value: { code: \"bin:TZS\", issuer: \"hex:0x34c94b2a4ba9e8b57b22547dcbb30f443c4cb02da3829a89aa1bd4780e4466ba\" } }`\n * Output: `Enum(\"Stellar\", { code: Binary.fromText(\"TZS\"), issuer: Binary.fromHex(\"0x34c94b2a4ba9e8b57b22547dcbb30f443c4cb02da3829a89aa1bd4780e4466ba\") })`\n */\nexport const papiParse = <T = unknown>(text: string | T): T => {\n // biome-ignore lint/suspicious/noExplicitAny: legacy\n const reviver = (_key: string, value: any) => {\n if (typeof value !== \"string\") return value\n if (value.startsWith(\"bigint:\")) return BigInt(value.slice(\"bigint:\".length))\n if (value.startsWith(\"hex:\")) return Binary.fromHex(value.slice(\"hex:\".length))\n if (value.startsWith(\"bin:\")) return Binary.fromText(value.slice(\"bin:\".length))\n return value\n }\n\n if (typeof text !== \"string\") return text\n return JSON.parse(text, reviver)\n}\n\nexport const papiStringify = (value: unknown, space?: string | number): string => {\n // biome-ignore lint/suspicious/noExplicitAny: legacy\n const replacer = (_key: string, value: any) => {\n if (typeof value === \"bigint\") return `bigint:${String(value)}`\n if (value instanceof Binary) return `hex:${value.asHex()}`\n return value\n }\n\n return JSON.stringify(value, replacer, space)\n}\n"],"mappings":"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","names":["anylogger","metadata","pallet","runtimeApi","type","metadata","import_metadata_builders","import_substrate_bindings","metadata","metadata","import_substrate_bindings","import_utils","import_substrate_bindings","import_substrate_bindings","value"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/papito.ts","../src/log.ts","../package.json","../src/util/compactMetadata.ts","../src/util/decodeScale.ts","../src/util/encodeMetadata.ts","../src/util/encodeStateKey.ts","../src/util/parseMetadataRpc.ts","../src/util/getConstantValueFromMetadata.ts","../src/util/getMetadataVersion.ts","../src/util/getStorageKeyPrefix.ts","../src/util/hash.ts","../src/util/serdePapi.ts"],"sourcesContent":["// TODO: Get the DX of this lib as close as possible to the DX of `const jsonResult = '{\"someKey\":\"someValue\"}'; JSON.decode(jsonResult)`\n\nexport * from \"./papito\"\nexport * from \"./util\"\n","import type { getDynamicBuilder } from \"@polkadot-api/metadata-builders\"\n\nexport {\n getDynamicBuilder,\n getLookupFn,\n type MetadataLookup,\n} from \"@polkadot-api/metadata-builders\"\nexport type { Codec, SizedHex, UnifiedMetadata } from \"@polkadot-api/substrate-bindings\"\nexport {\n Binary,\n decAnyMetadata,\n metadata,\n unifyMetadata,\n} from \"@polkadot-api/substrate-bindings\"\nexport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\n\n/** Constant: https://docs.substrate.io/build/application-development/#metadata-format */\nexport const magicNumber = 1635018093\n\nexport type MetadataBuilder = ReturnType<typeof getDynamicBuilder>\n","import anylogger from \"anylogger\"\n\nimport packageJson from \"../package.json\"\n\nexport default anylogger(packageJson.name)\n","{\n \"name\": \"@talismn/scale\",\n \"version\": \"1.0.0\",\n \"author\": \"Talisman\",\n \"homepage\": \"https://talisman.xyz\",\n \"license\": \"GPL-3.0-or-later\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"repository\": {\n \"directory\": \"packages/scale\",\n \"type\": \"git\",\n \"url\": \"https://github.com/TalismanSociety/talisman.git\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"files\": [\n \"dist\"\n ],\n \"engines\": {\n \"node\": \">=20\"\n },\n \"scripts\": {\n \"test\": \"vitest run\",\n \"clean\": \"rm -rf dist .turbo node_modules\",\n \"build\": \"tsup --silent\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@polkadot-api/metadata-builders\": \"0.14.3\",\n \"@polkadot-api/substrate-bindings\": \"0.20.3\",\n \"@polkadot-api/utils\": \"0.4.0\",\n \"anylogger\": \"^1.0.11\",\n \"scale-ts\": \"^1.6.1\"\n },\n \"devDependencies\": {\n \"@talismn/tsconfig\": \"workspace:*\",\n \"typescript\": \"^6.0.3\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"@talismn/source\": \"./src/index.ts\",\n \"import\": {\n \"types\": \"./dist/index.d.mts\",\n \"default\": \"./dist/index.mjs\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n }\n }\n}\n","import type { Metadata } from \"@polkadot-api/substrate-bindings\"\n\nimport log from \"../log\"\nimport type { Prettify } from \"./Prettify\"\n\nexport type MetadataType = SupportedMetadata[\"lookup\"][number]\nexport type MetadataPallet = SupportedMetadata[\"pallets\"][number]\nexport type MetadataStorageItem = NonNullable<MetadataPallet[\"storage\"]>[\"items\"][number]\n\ntype SupportedMetadata = Extract<Metadata[\"metadata\"], { tag: SupportedMetadataVersion }>[\"value\"]\ntype SupportedMetadataVersion = \"v14\" | \"v15\" | \"v16\"\n\n/**\n * Converts a `Metadata` into a `MiniMetadata`.\n *\n * A `MiniMetadata` only contains the types inside of its `lookup` which are relevant for\n * the storage queries specified in `palletsAndItems`.\n *\n * E.g. if `palletsAndItems` is `{ pallet: \"System\", items: [\"Account\"] }`, then only the\n * types used in the `System.Account` storage query will remain inside of metadata.lookups.\n */\nexport const compactMetadata = (\n anyMetadata: Metadata,\n palletsAndItems: Array<{ pallet: string; constants?: string[]; items: string[] }> = [],\n runtimeApisAndMethods: Array<{ runtimeApi: string; methods: string[] }> = [],\n extraKeepTypes: number[] = []\n) => {\n if (!isCompactableMetadata(anyMetadata))\n throw new Error(`Metadata version ${anyMetadata.metadata.tag} not supported in compactMetadata`)\n\n const metadata: SupportedMetadata = anyMetadata.metadata.value\n\n // remove pallets we don't care about\n metadata.pallets = metadata.pallets.filter((pallet) =>\n // keep this pallet if it's listed in `palletsAndItems`\n palletsAndItems.some(({ pallet: palletName }) => pallet.name === palletName)\n ) as typeof metadata.pallets\n\n // remove fields we don't care about from each pallet, and extract types for each storage item we care about\n const palletsKeepTypes = palletsAndItems.flatMap(\n ({ pallet: palletName, constants: constantNames, items: itemNames }) => {\n const pallet = metadata.pallets.find((pallet) => pallet.name === palletName)\n if (!pallet) return []\n\n // remove pallet fields we don't care about\n pallet.calls = undefined\n pallet.constants = constantNames\n ? pallet.constants.filter((constant) => constantNames.includes(constant.name))\n : []\n // v15 (NOT v14) has docs\n if (\"docs\" in pallet) pallet.docs = []\n pallet.errors = undefined\n pallet.events = undefined\n\n if (!pallet.storage) return []\n\n // filter and extract storage items we care about\n pallet.storage.items = pallet.storage.items.filter((item) =>\n itemNames.some((itemName) => item.name === itemName)\n )\n\n return [\n ...pallet.storage.items\n .flatMap((item) => [\n // each type can be either \"Plain\" or \"Map\"\n // if it's \"Plain\" we only need to get the value type\n // if it's a \"Map\" we want to keep both the key AND the value types\n item.type.tag === \"plain\" && item.type.value,\n item.type.tag === \"map\" && item.type.value.key,\n item.type.tag === \"map\" && item.type.value.value,\n ])\n .filter((type): type is number => typeof type === \"number\"),\n ...pallet.constants.flatMap((constant) => constant.type),\n ]\n }\n )\n\n // remove runtime apis we don't care about\n let runtimeApisKeepTypes: number[] = []\n if (\"apis\" in metadata) {\n // metadata is v15 (NOT v14)\n\n // keep this api if it's listed in `runtimeApisAndMethods`\n metadata.apis = metadata.apis.filter((runtimeApi) =>\n runtimeApisAndMethods.some(\n ({ runtimeApi: runtimeApiName }) => runtimeApi.name === runtimeApiName\n )\n )\n\n // remove methods we don't care about from each runtime api, and extract types for each call's params and result\n runtimeApisKeepTypes = runtimeApisAndMethods.flatMap(\n ({ runtimeApi: runtimeApiName, methods: methodNames }) => {\n const runtimeApi = metadata.apis.find((runtimeApi) => runtimeApi.name === runtimeApiName)\n if (!runtimeApi) return []\n\n // remove runtime fields we don't care about\n runtimeApi.docs = []\n\n if (!runtimeApi.methods) return []\n\n // filter and extract methods we care about\n runtimeApi.methods = runtimeApi.methods.filter((method) =>\n methodNames.some((methodName) => method.name === methodName)\n )\n\n return runtimeApi.methods.flatMap((method) => [\n // each method has an array of input types (for the params)\n ...method.inputs.map((input) => input.type),\n // and one output type (for the result)\n method.output,\n ])\n }\n )\n }\n\n // this is a set of type ids which we plan to keep in our compacted metadata\n // anything not in this set will be deleted\n // we start off with just the types of the state calls we plan to make,\n // then we run those types through a function (addDependentTypes) which will also include\n // all of the types which those types depend on - recursively\n const keepTypes = new Set([...palletsKeepTypes, ...runtimeApisKeepTypes])\n // biome-ignore lint/suspicious/useIterableCallbackReturn: legacy\n extraKeepTypes?.forEach((type) => keepTypes.add(type))\n\n // recursively find all the types which our keepTypes depend on and add them to the keepTypes set\n const metadataTysMap = new Map(metadata.lookup.map((ty) => [ty.id, ty]))\n addDependentTypes(metadataTysMap, keepTypes, [...keepTypes])\n\n // ditch the types we aren't keeping\n metadata.lookup = metadata.lookup.filter((type) => keepTypes.has(type.id))\n\n // update all type ids to be sequential (fill the gaps left by the deleted types)\n const newTypeIds = new Map<number, number>()\n // biome-ignore lint/suspicious/useIterableCallbackReturn: legacy\n metadata.lookup.forEach((type, index) => newTypeIds.set(type.id, index))\n const getNewTypeId = (oldTypeId: number): number => {\n const newTypeId = newTypeIds.get(oldTypeId)\n if (typeof newTypeId !== \"number\") log.error(`Failed to find newTypeId for type ${oldTypeId}`)\n return newTypeId ?? 0\n }\n remapTypeIds(metadata, getNewTypeId)\n\n if (\"address\" in metadata.extrinsic) metadata.extrinsic.address = 0\n if (\"call\" in metadata.extrinsic) metadata.extrinsic.call = 0\n if (\"signature\" in metadata.extrinsic) metadata.extrinsic.signature = 0\n if (\"extra\" in metadata.extrinsic) metadata.extrinsic.extra = 0\n if (\"signedExtensions\" in metadata.extrinsic) metadata.extrinsic.signedExtensions = []\n if (\"outerEnums\" in metadata) {\n // metadata is v15 (NOT v14)\n metadata.outerEnums.call = 0\n metadata.outerEnums.error = 0\n metadata.outerEnums.event = 0\n }\n}\n\ntype CompactableMetadata = Prettify<\n Omit<Metadata, \"metadata\"> & {\n metadata: Extract<Metadata[\"metadata\"], { tag: SupportedMetadataVersion }>\n }\n>\nconst isCompactableMetadata = (metadata: Metadata): metadata is CompactableMetadata => {\n switch (metadata.metadata.tag) {\n case \"v14\":\n case \"v15\":\n case \"v16\":\n return true\n default:\n return false\n }\n}\n\nconst addDependentTypes = (\n metadataTysMap: Map<MetadataType[\"id\"], MetadataType>,\n keepTypes: Set<number>,\n types: number[],\n // Prevent stack overflow when a type references itself\n addedTypes: Set<number> = new Set()\n) => {\n const addDependentSubTypes = (subTypes: number[]) =>\n addDependentTypes(metadataTysMap, keepTypes, subTypes, addedTypes)\n\n for (const typeId of types) {\n const type = metadataTysMap.get(typeId)\n if (!type) {\n log.warn(`Unable to find type with id ${typeId}`)\n continue\n }\n\n if (addedTypes.has(type.id)) continue\n keepTypes.add(type.id)\n addedTypes.add(type.id)\n\n const paramTypes = type.params\n .map((param) => param.type)\n .filter((type): type is number => typeof type === \"number\")\n addDependentSubTypes(paramTypes)\n\n switch (type.def.tag) {\n case \"array\":\n addDependentSubTypes([type.def.value.type])\n break\n\n case \"bitSequence\":\n addDependentSubTypes([type.def.value.bitOrderType, type.def.value.bitStoreType])\n break\n\n case \"compact\":\n addDependentSubTypes([type.def.value])\n break\n\n case \"composite\":\n addDependentSubTypes(\n type.def.value\n .map((field) => field.type)\n .filter((type): type is number => typeof type === \"number\")\n )\n break\n\n case \"primitive\":\n break\n\n case \"sequence\":\n addDependentSubTypes([type.def.value])\n break\n\n case \"tuple\":\n addDependentSubTypes(\n type.def.value.filter((type): type is number => typeof type === \"number\")\n )\n break\n\n case \"variant\":\n addDependentSubTypes(\n type.def.value\n .flatMap((member) => member.fields.map((field) => field.type))\n .filter((type): type is number => typeof type === \"number\")\n )\n break\n\n default: {\n // force compilation error if any types don't have a case\n const exhaustiveCheck: never = type.def\n log.error(`Unhandled V15Type type ${exhaustiveCheck}`)\n }\n }\n }\n}\n\nconst remapTypeIds = (metadata: SupportedMetadata, getNewTypeId: (oldTypeId: number) => number) => {\n remapLookupTypeIds(metadata, getNewTypeId)\n remapStorageTypeIds(metadata, getNewTypeId)\n remapRuntimeApisTypeIds(metadata, getNewTypeId)\n}\n\nconst remapLookupTypeIds = (\n metadata: SupportedMetadata,\n getNewTypeId: (oldTypeId: number) => number\n) => {\n for (const type of metadata.lookup) {\n type.id = getNewTypeId(type.id)\n\n for (const param of type.params) {\n if (typeof param.type !== \"number\") continue\n param.type = getNewTypeId(param.type)\n }\n\n switch (type.def.tag) {\n case \"array\":\n type.def.value.type = getNewTypeId(type.def.value.type)\n break\n\n case \"bitSequence\":\n type.def.value.bitOrderType = getNewTypeId(type.def.value.bitOrderType)\n type.def.value.bitStoreType = getNewTypeId(type.def.value.bitStoreType)\n break\n\n case \"compact\":\n type.def.value = getNewTypeId(type.def.value)\n break\n\n case \"composite\":\n for (const field of type.def.value) {\n if (typeof field.type !== \"number\") continue\n field.type = getNewTypeId(field.type)\n }\n break\n\n case \"primitive\":\n break\n\n case \"sequence\":\n type.def.value = getNewTypeId(type.def.value)\n break\n\n case \"tuple\":\n type.def.value = type.def.value.map((type) => {\n if (typeof type !== \"number\") return type\n return getNewTypeId(type)\n })\n break\n\n case \"variant\":\n for (const member of type.def.value) {\n for (const field of member.fields) {\n if (typeof field.type !== \"number\") continue\n field.type = getNewTypeId(field.type)\n }\n }\n break\n\n default: {\n // force compilation error if any types don't have a case\n const exhaustiveCheck: never = type.def\n log.error(`Unhandled V15Type type ${exhaustiveCheck}`)\n }\n }\n }\n}\n\nconst remapStorageTypeIds = (\n metadata: SupportedMetadata,\n getNewTypeId: (oldTypeId: number) => number\n) => {\n for (const pallet of metadata.pallets) {\n for (const item of pallet.storage?.items ?? []) {\n if (item.type.tag === \"plain\") item.type.value = getNewTypeId(item.type.value)\n if (item.type.tag === \"map\") {\n item.type.value.key = getNewTypeId(item.type.value.key)\n item.type.value.value = getNewTypeId(item.type.value.value)\n }\n }\n for (const constant of pallet.constants ?? []) {\n constant.type = getNewTypeId(constant.type)\n }\n }\n}\n\nconst remapRuntimeApisTypeIds = (\n metadata: SupportedMetadata,\n getNewTypeId: (oldTypeId: number) => number\n) => {\n for (const runtimeApi of metadata.apis) {\n for (const method of runtimeApi.methods ?? []) {\n for (const input of method.inputs) {\n input.type = getNewTypeId(input.type)\n }\n method.output = getNewTypeId(method.output)\n }\n }\n}\n","import log from \"../log\"\nimport type { MetadataBuilder } from \"../papito\"\n\ntype ScaleStorageCoder = ReturnType<MetadataBuilder[\"buildStorage\"]>\n\nexport const decodeScale = <T>(\n scaleCoder: ScaleStorageCoder | undefined,\n change: string | null,\n error?: string\n): T | null => {\n if (change === null) return null\n\n try {\n return (scaleCoder?.value?.dec(change) as T | undefined) ?? null\n } catch (cause) {\n log.warn(error ?? `Failed to decode ${change}`, cause)\n return null\n }\n}\n","import type { Metadata } from \"@polkadot-api/substrate-bindings\"\n\nimport { metadata as scaleMetadata, toHex } from \"../papito\"\n\nexport const encodeMetadata = (metadata: Metadata) =>\n toHex(scaleMetadata.enc(metadata)) as `0x${string}`\n","import log from \"../log\"\nimport type { MetadataBuilder } from \"../papito\"\n\nexport type ScaleStorageCoder = ReturnType<MetadataBuilder[\"buildStorage\"]>\n\nexport const encodeStateKey = (\n scaleCoder: ScaleStorageCoder | undefined,\n error?: string,\n ...args: unknown[]\n): `0x${string}` | undefined => {\n try {\n return scaleCoder?.keys?.enc(...args) as `0x${string}`\n } catch (cause) {\n log.warn(error ?? `Failed to encode stateKey ${JSON.stringify(args)}`, cause)\n return\n }\n}\n","import { getDynamicBuilder, getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport { decAnyMetadata, unifyMetadata } from \"@polkadot-api/substrate-bindings\"\n\nexport const parseMetadataRpc = (metadataRpc: `0x${string}`) => {\n const metadata = decAnyMetadata(metadataRpc)\n const unifiedMetadata = unifyMetadata(metadata)\n const lookupFn = getLookupFn(unifiedMetadata)\n const builder = getDynamicBuilder(lookupFn)\n\n return { metadata, unifiedMetadata, lookupFn, builder }\n}\n","import log from \"../log\"\nimport type { MetadataBuilder, UnifiedMetadata } from \"../papito\"\nimport { parseMetadataRpc } from \"./parseMetadataRpc\"\n\nexport const getConstantValueFromMetadata = <T>(\n metadata: `0x${string}` | { builder: MetadataBuilder; unifiedMetadata: UnifiedMetadata },\n pallet: string,\n constant: string\n) => {\n const { builder, unifiedMetadata } =\n typeof metadata === \"string\" ? parseMetadataRpc(metadata) : metadata\n\n return getConstantValueInner<T>(builder, unifiedMetadata, pallet, constant)\n}\n\nconst getConstantValueInner = <T>(\n builder: MetadataBuilder,\n unifiedMetadata: UnifiedMetadata,\n pallet: string,\n constant: string\n) => {\n try {\n const storageCodec = builder.buildConstant(pallet, constant)\n\n const encodedValue = unifiedMetadata.pallets\n .find(({ name }) => name === pallet)\n ?.constants.find(({ name }) => name === constant)?.value\n\n if (!encodedValue) throw new Error(`Constant ${pallet}.${constant} not found`)\n\n return storageCodec.dec(encodedValue) as T\n } catch (err) {\n log.error(\"Failed to get constant value from metadata\", {\n err,\n pallet,\n constant,\n })\n throw err\n }\n}\n","import { Struct, u8, u32 } from \"scale-ts\"\n\n/**\n * Extracts the `version` u8 from a SCALE-encoded metadata blob and returns it as a `number`.\n *\n * Only reads the first 40 bytes of the blob.\n */\nexport const getMetadataVersion = (metadataRpc: string | Uint8Array | ArrayBuffer) => {\n try {\n return Struct({\n magicNumber: u32,\n version: u8,\n }).dec(metadataRpc).version\n } catch {\n return 0\n }\n}\n","import { Twox128 } from \"@polkadot-api/substrate-bindings\"\nimport { toHex } from \"@polkadot-api/utils\"\n\nexport const getStorageKeyPrefix = (palletName: string, storageName: string) => {\n const palletHash = Twox128(new TextEncoder().encode(palletName))\n const storageHash = Twox128(new TextEncoder().encode(storageName))\n\n // Concatenate and convert to hex\n const combined = new Uint8Array(palletHash.length + storageHash.length)\n combined.set(palletHash, 0)\n combined.set(storageHash, palletHash.length)\n\n return toHex(combined)\n}\n","export {\n Blake2128,\n Blake2128Concat,\n Blake2256,\n Blake3256,\n Blake3256Concat,\n Twox64Concat,\n Twox128,\n Twox256,\n} from \"@polkadot-api/substrate-bindings\"\n","import { Binary } from \"@polkadot-api/substrate-bindings\"\n\n/**\n * For the substrate-tokens (and other) modules, we configure the `onChainId` field in chaindata to tell the module how to query each token.\n * These queries are made to the tokens pallet.\n * E.g. api.query.Tokens.Account(accountAddress, papiParse(onChainId))\n *\n * The `onChainId` field on chaindata must be a JSON-parseable string, but a decoded papi value can\n * contain types that plain JSON cannot represent. `papiStringify`/`papiParse` are inverse functions\n * that serialise *any* decoded papi value to a deterministic string and back.\n *\n * Only two decoded types are not valid JSON, so only these get a tag — everything else (numbers,\n * objects, and strings, including the `0x…` hex strings papi v2 decodes fixed-size `[u8; N]` fields\n * into) is already JSON and is left untouched:\n * - `bigint` → `bigint:<n>`\n * - `Uint8Array` → `u8a:0x<hex>` (papi v2 decodes variable-length `Vec<u8>` to a `Uint8Array`)\n *\n * Note on polkadot-api v2 byte fields. The `Binary` class was removed and the SCALE codecs split\n * byte decoding into two distinct JS types, which `papiParse` must reproduce exactly or the codec\n * silently builds a garbage statekey (→ no balance):\n * - fixed-size `[u8; N]` (`AccountId32`, `AccountKey20`, `GeneralKey.data`, Erc20 addresses,\n * Stellar code/issuer, …) → a plain `0x` hex **string** (`SizedHex`). The codec's `.enc`\n * expects that string. So a fixed-size field is just a JSON string: no tag, round-trips as-is.\n * - variable-length `Vec<u8>` → a **`Uint8Array`**. The codec's `.enc` expects a `Uint8Array`,\n * NOT a hex string. Hence the dedicated `u8a:` tag, which `papiParse` restores to a `Uint8Array`.\n *\n * `hex:` and `bin:` are legacy/authoring **input** forms still accepted by `papiParse` (some\n * chaindata token templates are hand-written with them), but `papiStringify` never emits them — it\n * normalises to the bare canonical form. So the canonical output is deterministic and idempotent:\n * `papiStringify(papiParse(canonical)) === canonical`.\n *\n * Some examples (input string → papiParse value):\n * Input: `5` → `5`\n * Input: `{ type: \"LiquidCrowdloan\", value: 13 }` → `Enum(\"LiquidCrowdloan\", 13)`\n * Input: `{ type: \"NativeToken\", value: \"bigint:2\" }` → `Enum(\"NativeToken\", 2n)`\n * Input: `{ type: \"Erc20\", value: \"0x07df…bce\" }` → `Enum(\"Erc20\", \"0x07df…bce\")` (fixed → string)\n * Input: `{ type: \"Erc20\", value: \"hex:0x07df…bce\" }` → `Enum(\"Erc20\", \"0x07df…bce\")` (legacy input)\n * Input: `{ code: \"bin:TZS\" }` → `{ code: \"0x545a53\" }` (legacy input)\n * Input: `\"u8a:0xdeadbeef\"` → `Uint8Array([0xde,0xad,0xbe,0xef])` (variable bytes)\n */\nexport const papiParse = <T = unknown>(text: string | T): T => {\n // biome-ignore lint/suspicious/noExplicitAny: legacy\n const reviver = (_key: string, value: any) => {\n if (typeof value !== \"string\") return value\n if (value.startsWith(\"bigint:\")) return BigInt(value.slice(\"bigint:\".length))\n // variable-length `Vec<u8>` → restore the `Uint8Array` the papi v2 codec expects.\n if (value.startsWith(\"u8a:\")) return Binary.fromHex(value.slice(\"u8a:\".length) as `0x${string}`)\n // legacy/authoring input forms. Fixed-size `[u8; N]` codecs expect a `0x` hex string, so both\n // map to a bare hex string (the bare `0x` canonical form passes through unchanged below).\n if (value.startsWith(\"hex:\")) return value.slice(\"hex:\".length)\n if (value.startsWith(\"bin:\")) return Binary.toHex(Binary.fromText(value.slice(\"bin:\".length)))\n return value\n }\n\n if (typeof text !== \"string\") return text\n return JSON.parse(text, reviver)\n}\n\nexport const papiStringify = (value: unknown, space?: string | number): string => {\n // biome-ignore lint/suspicious/noExplicitAny: legacy\n const replacer = (_key: string, value: any) => {\n // Only tag the types JSON cannot represent. Strings (incl. `0x` fixed-size hex), numbers and\n // objects are already valid JSON and pass through untouched — keeping the form deterministic.\n if (typeof value === \"bigint\") return `bigint:${String(value)}`\n if (value instanceof Uint8Array) return `u8a:${Binary.toHex(value)}`\n return value\n }\n\n return JSON.stringify(value, replacer, space)\n}\n"],"mappings":"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","names":["anylogger","metadata","pallet","runtimeApi","type","metadata","import_metadata_builders","import_substrate_bindings","metadata","metadata","import_substrate_bindings","import_utils","import_substrate_bindings","import_substrate_bindings","value"]}
|
package/dist/index.mjs
CHANGED
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
Binary,
|
|
8
8
|
decAnyMetadata,
|
|
9
|
-
FixedSizeBinary,
|
|
10
9
|
metadata,
|
|
11
10
|
unifyMetadata
|
|
12
11
|
} from "@polkadot-api/substrate-bindings";
|
|
@@ -19,7 +18,7 @@ import anylogger from "anylogger";
|
|
|
19
18
|
// package.json
|
|
20
19
|
var package_default = {
|
|
21
20
|
name: "@talismn/scale",
|
|
22
|
-
version: "0.
|
|
21
|
+
version: "1.0.0",
|
|
23
22
|
author: "Talisman",
|
|
24
23
|
homepage: "https://talisman.xyz",
|
|
25
24
|
license: "GPL-3.0-or-later",
|
|
@@ -46,9 +45,9 @@ var package_default = {
|
|
|
46
45
|
typecheck: "tsc --noEmit"
|
|
47
46
|
},
|
|
48
47
|
dependencies: {
|
|
49
|
-
"@polkadot-api/metadata-builders": "0.
|
|
50
|
-
"@polkadot-api/substrate-bindings": "0.
|
|
51
|
-
"@polkadot-api/utils": "0.
|
|
48
|
+
"@polkadot-api/metadata-builders": "0.14.3",
|
|
49
|
+
"@polkadot-api/substrate-bindings": "0.20.3",
|
|
50
|
+
"@polkadot-api/utils": "0.4.0",
|
|
52
51
|
anylogger: "^1.0.11",
|
|
53
52
|
"scale-ts": "^1.6.1"
|
|
54
53
|
},
|
|
@@ -400,8 +399,9 @@ var papiParse = (text) => {
|
|
|
400
399
|
const reviver = (_key, value) => {
|
|
401
400
|
if (typeof value !== "string") return value;
|
|
402
401
|
if (value.startsWith("bigint:")) return BigInt(value.slice("bigint:".length));
|
|
403
|
-
if (value.startsWith("
|
|
404
|
-
if (value.startsWith("
|
|
402
|
+
if (value.startsWith("u8a:")) return Binary2.fromHex(value.slice("u8a:".length));
|
|
403
|
+
if (value.startsWith("hex:")) return value.slice("hex:".length);
|
|
404
|
+
if (value.startsWith("bin:")) return Binary2.toHex(Binary2.fromText(value.slice("bin:".length)));
|
|
405
405
|
return value;
|
|
406
406
|
};
|
|
407
407
|
if (typeof text !== "string") return text;
|
|
@@ -410,7 +410,7 @@ var papiParse = (text) => {
|
|
|
410
410
|
var papiStringify = (value, space) => {
|
|
411
411
|
const replacer = (_key, value2) => {
|
|
412
412
|
if (typeof value2 === "bigint") return `bigint:${String(value2)}`;
|
|
413
|
-
if (value2 instanceof
|
|
413
|
+
if (value2 instanceof Uint8Array) return `u8a:${Binary2.toHex(value2)}`;
|
|
414
414
|
return value2;
|
|
415
415
|
};
|
|
416
416
|
return JSON.stringify(value, replacer, space);
|
|
@@ -422,7 +422,6 @@ export {
|
|
|
422
422
|
Blake2256,
|
|
423
423
|
Blake3256,
|
|
424
424
|
Blake3256Concat,
|
|
425
|
-
FixedSizeBinary,
|
|
426
425
|
Twox1282 as Twox128,
|
|
427
426
|
Twox256,
|
|
428
427
|
Twox64Concat,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/papito.ts","../src/log.ts","../package.json","../src/util/compactMetadata.ts","../src/util/decodeScale.ts","../src/util/encodeMetadata.ts","../src/util/encodeStateKey.ts","../src/util/parseMetadataRpc.ts","../src/util/getConstantValueFromMetadata.ts","../src/util/getMetadataVersion.ts","../src/util/getStorageKeyPrefix.ts","../src/util/hash.ts","../src/util/serdePapi.ts"],"sourcesContent":["import type { getDynamicBuilder } from \"@polkadot-api/metadata-builders\"\n\nexport {\n getDynamicBuilder,\n getLookupFn,\n type MetadataLookup,\n} from \"@polkadot-api/metadata-builders\"\nexport type { Codec, UnifiedMetadata } from \"@polkadot-api/substrate-bindings\"\nexport {\n Binary,\n decAnyMetadata,\n FixedSizeBinary,\n metadata,\n unifyMetadata,\n} from \"@polkadot-api/substrate-bindings\"\nexport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\n\n/** Constant: https://docs.substrate.io/build/application-development/#metadata-format */\nexport const magicNumber = 1635018093\n\nexport type MetadataBuilder = ReturnType<typeof getDynamicBuilder>\n","import anylogger from \"anylogger\"\n\nimport packageJson from \"../package.json\"\n\nexport default anylogger(packageJson.name)\n","{\n \"name\": \"@talismn/scale\",\n \"version\": \"0.3.5\",\n \"author\": \"Talisman\",\n \"homepage\": \"https://talisman.xyz\",\n \"license\": \"GPL-3.0-or-later\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"repository\": {\n \"directory\": \"packages/scale\",\n \"type\": \"git\",\n \"url\": \"https://github.com/TalismanSociety/talisman.git\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"files\": [\n \"dist\"\n ],\n \"engines\": {\n \"node\": \">=20\"\n },\n \"scripts\": {\n \"test\": \"vitest run\",\n \"clean\": \"rm -rf dist .turbo node_modules\",\n \"build\": \"tsup --silent\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@polkadot-api/metadata-builders\": \"0.13.9\",\n \"@polkadot-api/substrate-bindings\": \"0.17.0\",\n \"@polkadot-api/utils\": \"0.2.0\",\n \"anylogger\": \"^1.0.11\",\n \"scale-ts\": \"^1.6.1\"\n },\n \"devDependencies\": {\n \"@talismn/tsconfig\": \"workspace:*\",\n \"typescript\": \"^6.0.3\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"@talismn/source\": \"./src/index.ts\",\n \"import\": {\n \"types\": \"./dist/index.d.mts\",\n \"default\": \"./dist/index.mjs\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n }\n }\n}\n","import type { Metadata } from \"@polkadot-api/substrate-bindings\"\n\nimport log from \"../log\"\nimport type { Prettify } from \"./Prettify\"\n\nexport type MetadataType = SupportedMetadata[\"lookup\"][number]\nexport type MetadataPallet = SupportedMetadata[\"pallets\"][number]\nexport type MetadataStorageItem = NonNullable<MetadataPallet[\"storage\"]>[\"items\"][number]\n\ntype SupportedMetadata = Extract<Metadata[\"metadata\"], { tag: SupportedMetadataVersion }>[\"value\"]\ntype SupportedMetadataVersion = \"v14\" | \"v15\" | \"v16\"\n\n/**\n * Converts a `Metadata` into a `MiniMetadata`.\n *\n * A `MiniMetadata` only contains the types inside of its `lookup` which are relevant for\n * the storage queries specified in `palletsAndItems`.\n *\n * E.g. if `palletsAndItems` is `{ pallet: \"System\", items: [\"Account\"] }`, then only the\n * types used in the `System.Account` storage query will remain inside of metadata.lookups.\n */\nexport const compactMetadata = (\n anyMetadata: Metadata,\n palletsAndItems: Array<{ pallet: string; constants?: string[]; items: string[] }> = [],\n runtimeApisAndMethods: Array<{ runtimeApi: string; methods: string[] }> = [],\n extraKeepTypes: number[] = []\n) => {\n if (!isCompactableMetadata(anyMetadata))\n throw new Error(`Metadata version ${anyMetadata.metadata.tag} not supported in compactMetadata`)\n\n const metadata: SupportedMetadata = anyMetadata.metadata.value\n\n // remove pallets we don't care about\n metadata.pallets = metadata.pallets.filter((pallet) =>\n // keep this pallet if it's listed in `palletsAndItems`\n palletsAndItems.some(({ pallet: palletName }) => pallet.name === palletName)\n ) as typeof metadata.pallets\n\n // remove fields we don't care about from each pallet, and extract types for each storage item we care about\n const palletsKeepTypes = palletsAndItems.flatMap(\n ({ pallet: palletName, constants: constantNames, items: itemNames }) => {\n const pallet = metadata.pallets.find((pallet) => pallet.name === palletName)\n if (!pallet) return []\n\n // remove pallet fields we don't care about\n pallet.calls = undefined\n pallet.constants = constantNames\n ? pallet.constants.filter((constant) => constantNames.includes(constant.name))\n : []\n // v15 (NOT v14) has docs\n if (\"docs\" in pallet) pallet.docs = []\n pallet.errors = undefined\n pallet.events = undefined\n\n if (!pallet.storage) return []\n\n // filter and extract storage items we care about\n pallet.storage.items = pallet.storage.items.filter((item) =>\n itemNames.some((itemName) => item.name === itemName)\n )\n\n return [\n ...pallet.storage.items\n .flatMap((item) => [\n // each type can be either \"Plain\" or \"Map\"\n // if it's \"Plain\" we only need to get the value type\n // if it's a \"Map\" we want to keep both the key AND the value types\n item.type.tag === \"plain\" && item.type.value,\n item.type.tag === \"map\" && item.type.value.key,\n item.type.tag === \"map\" && item.type.value.value,\n ])\n .filter((type): type is number => typeof type === \"number\"),\n ...pallet.constants.flatMap((constant) => constant.type),\n ]\n }\n )\n\n // remove runtime apis we don't care about\n let runtimeApisKeepTypes: number[] = []\n if (\"apis\" in metadata) {\n // metadata is v15 (NOT v14)\n\n // keep this api if it's listed in `runtimeApisAndMethods`\n metadata.apis = metadata.apis.filter((runtimeApi) =>\n runtimeApisAndMethods.some(\n ({ runtimeApi: runtimeApiName }) => runtimeApi.name === runtimeApiName\n )\n )\n\n // remove methods we don't care about from each runtime api, and extract types for each call's params and result\n runtimeApisKeepTypes = runtimeApisAndMethods.flatMap(\n ({ runtimeApi: runtimeApiName, methods: methodNames }) => {\n const runtimeApi = metadata.apis.find((runtimeApi) => runtimeApi.name === runtimeApiName)\n if (!runtimeApi) return []\n\n // remove runtime fields we don't care about\n runtimeApi.docs = []\n\n if (!runtimeApi.methods) return []\n\n // filter and extract methods we care about\n runtimeApi.methods = runtimeApi.methods.filter((method) =>\n methodNames.some((methodName) => method.name === methodName)\n )\n\n return runtimeApi.methods.flatMap((method) => [\n // each method has an array of input types (for the params)\n ...method.inputs.map((input) => input.type),\n // and one output type (for the result)\n method.output,\n ])\n }\n )\n }\n\n // this is a set of type ids which we plan to keep in our compacted metadata\n // anything not in this set will be deleted\n // we start off with just the types of the state calls we plan to make,\n // then we run those types through a function (addDependentTypes) which will also include\n // all of the types which those types depend on - recursively\n const keepTypes = new Set([...palletsKeepTypes, ...runtimeApisKeepTypes])\n // biome-ignore lint/suspicious/useIterableCallbackReturn: legacy\n extraKeepTypes?.forEach((type) => keepTypes.add(type))\n\n // recursively find all the types which our keepTypes depend on and add them to the keepTypes set\n const metadataTysMap = new Map(metadata.lookup.map((ty) => [ty.id, ty]))\n addDependentTypes(metadataTysMap, keepTypes, [...keepTypes])\n\n // ditch the types we aren't keeping\n metadata.lookup = metadata.lookup.filter((type) => keepTypes.has(type.id))\n\n // update all type ids to be sequential (fill the gaps left by the deleted types)\n const newTypeIds = new Map<number, number>()\n // biome-ignore lint/suspicious/useIterableCallbackReturn: legacy\n metadata.lookup.forEach((type, index) => newTypeIds.set(type.id, index))\n const getNewTypeId = (oldTypeId: number): number => {\n const newTypeId = newTypeIds.get(oldTypeId)\n if (typeof newTypeId !== \"number\") log.error(`Failed to find newTypeId for type ${oldTypeId}`)\n return newTypeId ?? 0\n }\n remapTypeIds(metadata, getNewTypeId)\n\n if (\"address\" in metadata.extrinsic) metadata.extrinsic.address = 0\n if (\"call\" in metadata.extrinsic) metadata.extrinsic.call = 0\n if (\"signature\" in metadata.extrinsic) metadata.extrinsic.signature = 0\n if (\"extra\" in metadata.extrinsic) metadata.extrinsic.extra = 0\n if (\"signedExtensions\" in metadata.extrinsic) metadata.extrinsic.signedExtensions = []\n if (\"outerEnums\" in metadata) {\n // metadata is v15 (NOT v14)\n metadata.outerEnums.call = 0\n metadata.outerEnums.error = 0\n metadata.outerEnums.event = 0\n }\n}\n\ntype CompactableMetadata = Prettify<\n Omit<Metadata, \"metadata\"> & {\n metadata: Extract<Metadata[\"metadata\"], { tag: SupportedMetadataVersion }>\n }\n>\nconst isCompactableMetadata = (metadata: Metadata): metadata is CompactableMetadata => {\n switch (metadata.metadata.tag) {\n case \"v14\":\n case \"v15\":\n case \"v16\":\n return true\n default:\n return false\n }\n}\n\nconst addDependentTypes = (\n metadataTysMap: Map<MetadataType[\"id\"], MetadataType>,\n keepTypes: Set<number>,\n types: number[],\n // Prevent stack overflow when a type references itself\n addedTypes: Set<number> = new Set()\n) => {\n const addDependentSubTypes = (subTypes: number[]) =>\n addDependentTypes(metadataTysMap, keepTypes, subTypes, addedTypes)\n\n for (const typeId of types) {\n const type = metadataTysMap.get(typeId)\n if (!type) {\n log.warn(`Unable to find type with id ${typeId}`)\n continue\n }\n\n if (addedTypes.has(type.id)) continue\n keepTypes.add(type.id)\n addedTypes.add(type.id)\n\n const paramTypes = type.params\n .map((param) => param.type)\n .filter((type): type is number => typeof type === \"number\")\n addDependentSubTypes(paramTypes)\n\n switch (type.def.tag) {\n case \"array\":\n addDependentSubTypes([type.def.value.type])\n break\n\n case \"bitSequence\":\n addDependentSubTypes([type.def.value.bitOrderType, type.def.value.bitStoreType])\n break\n\n case \"compact\":\n addDependentSubTypes([type.def.value])\n break\n\n case \"composite\":\n addDependentSubTypes(\n type.def.value\n .map((field) => field.type)\n .filter((type): type is number => typeof type === \"number\")\n )\n break\n\n case \"primitive\":\n break\n\n case \"sequence\":\n addDependentSubTypes([type.def.value])\n break\n\n case \"tuple\":\n addDependentSubTypes(\n type.def.value.filter((type): type is number => typeof type === \"number\")\n )\n break\n\n case \"variant\":\n addDependentSubTypes(\n type.def.value\n .flatMap((member) => member.fields.map((field) => field.type))\n .filter((type): type is number => typeof type === \"number\")\n )\n break\n\n default: {\n // force compilation error if any types don't have a case\n const exhaustiveCheck: never = type.def\n log.error(`Unhandled V15Type type ${exhaustiveCheck}`)\n }\n }\n }\n}\n\nconst remapTypeIds = (metadata: SupportedMetadata, getNewTypeId: (oldTypeId: number) => number) => {\n remapLookupTypeIds(metadata, getNewTypeId)\n remapStorageTypeIds(metadata, getNewTypeId)\n remapRuntimeApisTypeIds(metadata, getNewTypeId)\n}\n\nconst remapLookupTypeIds = (\n metadata: SupportedMetadata,\n getNewTypeId: (oldTypeId: number) => number\n) => {\n for (const type of metadata.lookup) {\n type.id = getNewTypeId(type.id)\n\n for (const param of type.params) {\n if (typeof param.type !== \"number\") continue\n param.type = getNewTypeId(param.type)\n }\n\n switch (type.def.tag) {\n case \"array\":\n type.def.value.type = getNewTypeId(type.def.value.type)\n break\n\n case \"bitSequence\":\n type.def.value.bitOrderType = getNewTypeId(type.def.value.bitOrderType)\n type.def.value.bitStoreType = getNewTypeId(type.def.value.bitStoreType)\n break\n\n case \"compact\":\n type.def.value = getNewTypeId(type.def.value)\n break\n\n case \"composite\":\n for (const field of type.def.value) {\n if (typeof field.type !== \"number\") continue\n field.type = getNewTypeId(field.type)\n }\n break\n\n case \"primitive\":\n break\n\n case \"sequence\":\n type.def.value = getNewTypeId(type.def.value)\n break\n\n case \"tuple\":\n type.def.value = type.def.value.map((type) => {\n if (typeof type !== \"number\") return type\n return getNewTypeId(type)\n })\n break\n\n case \"variant\":\n for (const member of type.def.value) {\n for (const field of member.fields) {\n if (typeof field.type !== \"number\") continue\n field.type = getNewTypeId(field.type)\n }\n }\n break\n\n default: {\n // force compilation error if any types don't have a case\n const exhaustiveCheck: never = type.def\n log.error(`Unhandled V15Type type ${exhaustiveCheck}`)\n }\n }\n }\n}\n\nconst remapStorageTypeIds = (\n metadata: SupportedMetadata,\n getNewTypeId: (oldTypeId: number) => number\n) => {\n for (const pallet of metadata.pallets) {\n for (const item of pallet.storage?.items ?? []) {\n if (item.type.tag === \"plain\") item.type.value = getNewTypeId(item.type.value)\n if (item.type.tag === \"map\") {\n item.type.value.key = getNewTypeId(item.type.value.key)\n item.type.value.value = getNewTypeId(item.type.value.value)\n }\n }\n for (const constant of pallet.constants ?? []) {\n constant.type = getNewTypeId(constant.type)\n }\n }\n}\n\nconst remapRuntimeApisTypeIds = (\n metadata: SupportedMetadata,\n getNewTypeId: (oldTypeId: number) => number\n) => {\n for (const runtimeApi of metadata.apis) {\n for (const method of runtimeApi.methods ?? []) {\n for (const input of method.inputs) {\n input.type = getNewTypeId(input.type)\n }\n method.output = getNewTypeId(method.output)\n }\n }\n}\n","import log from \"../log\"\nimport type { MetadataBuilder } from \"../papito\"\n\ntype ScaleStorageCoder = ReturnType<MetadataBuilder[\"buildStorage\"]>\n\nexport const decodeScale = <T>(\n scaleCoder: ScaleStorageCoder | undefined,\n change: string | null,\n error?: string\n): T | null => {\n if (change === null) return null\n\n try {\n return (scaleCoder?.value?.dec(change) as T | undefined) ?? null\n } catch (cause) {\n log.warn(error ?? `Failed to decode ${change}`, cause)\n return null\n }\n}\n","import type { Metadata } from \"@polkadot-api/substrate-bindings\"\n\nimport { metadata as scaleMetadata, toHex } from \"../papito\"\n\nexport const encodeMetadata = (metadata: Metadata) =>\n toHex(scaleMetadata.enc(metadata)) as `0x${string}`\n","import log from \"../log\"\nimport type { MetadataBuilder } from \"../papito\"\n\nexport type ScaleStorageCoder = ReturnType<MetadataBuilder[\"buildStorage\"]>\n\nexport const encodeStateKey = (\n scaleCoder: ScaleStorageCoder | undefined,\n error?: string,\n ...args: unknown[]\n): `0x${string}` | undefined => {\n try {\n return scaleCoder?.keys?.enc(...args) as `0x${string}`\n } catch (cause) {\n log.warn(error ?? `Failed to encode stateKey ${JSON.stringify(args)}`, cause)\n return\n }\n}\n","import { getDynamicBuilder, getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport { decAnyMetadata, unifyMetadata } from \"@polkadot-api/substrate-bindings\"\n\nexport const parseMetadataRpc = (metadataRpc: `0x${string}`) => {\n const metadata = decAnyMetadata(metadataRpc)\n const unifiedMetadata = unifyMetadata(metadata)\n const lookupFn = getLookupFn(unifiedMetadata)\n const builder = getDynamicBuilder(lookupFn)\n\n return { metadata, unifiedMetadata, lookupFn, builder }\n}\n","import log from \"../log\"\nimport type { MetadataBuilder, UnifiedMetadata } from \"../papito\"\nimport { parseMetadataRpc } from \"./parseMetadataRpc\"\n\nexport const getConstantValueFromMetadata = <T>(\n metadata: `0x${string}` | { builder: MetadataBuilder; unifiedMetadata: UnifiedMetadata },\n pallet: string,\n constant: string\n) => {\n const { builder, unifiedMetadata } =\n typeof metadata === \"string\" ? parseMetadataRpc(metadata) : metadata\n\n return getConstantValueInner<T>(builder, unifiedMetadata, pallet, constant)\n}\n\nconst getConstantValueInner = <T>(\n builder: MetadataBuilder,\n unifiedMetadata: UnifiedMetadata,\n pallet: string,\n constant: string\n) => {\n try {\n const storageCodec = builder.buildConstant(pallet, constant)\n\n const encodedValue = unifiedMetadata.pallets\n .find(({ name }) => name === pallet)\n ?.constants.find(({ name }) => name === constant)?.value\n\n if (!encodedValue) throw new Error(`Constant ${pallet}.${constant} not found`)\n\n return storageCodec.dec(encodedValue) as T\n } catch (err) {\n log.error(\"Failed to get constant value from metadata\", {\n err,\n pallet,\n constant,\n })\n throw err\n }\n}\n","import { Struct, u8, u32 } from \"scale-ts\"\n\n/**\n * Extracts the `version` u8 from a SCALE-encoded metadata blob and returns it as a `number`.\n *\n * Only reads the first 40 bytes of the blob.\n */\nexport const getMetadataVersion = (metadataRpc: string | Uint8Array | ArrayBuffer) => {\n try {\n return Struct({\n magicNumber: u32,\n version: u8,\n }).dec(metadataRpc).version\n } catch {\n return 0\n }\n}\n","import { Twox128 } from \"@polkadot-api/substrate-bindings\"\nimport { toHex } from \"@polkadot-api/utils\"\n\nexport const getStorageKeyPrefix = (palletName: string, storageName: string) => {\n const palletHash = Twox128(new TextEncoder().encode(palletName))\n const storageHash = Twox128(new TextEncoder().encode(storageName))\n\n // Concatenate and convert to hex\n const combined = new Uint8Array(palletHash.length + storageHash.length)\n combined.set(palletHash, 0)\n combined.set(storageHash, palletHash.length)\n\n return toHex(combined)\n}\n","export {\n Blake2128,\n Blake2128Concat,\n Blake2256,\n Blake3256,\n Blake3256Concat,\n Twox64Concat,\n Twox128,\n Twox256,\n} from \"@polkadot-api/substrate-bindings\"\n","import { Binary } from \"@polkadot-api/substrate-bindings\"\n\n/**\n * For the substrate-tokens (and other) modules, we configure the `onChainId` field in chaindata to tell the module how to query each token.\n * These queries are made to the tokens pallet.\n * E.g. api.query.Tokens.Account(accountAddress, papiParse(onChainId))\n *\n * The `onChainId` field on chaindata must be a JSON-parseable string, but for some SCALE types (especially the Binary type) we must\n * use specific `polkadot-api` classes to handle SCALE-encoding the statekey.\n *\n * Some examples:\n * Input: `5`\n * Output: `5`\n *\n * Input: `{ type: \"DexShare\", value: [ { type: \"Token\", value: { type: \"ACA\" } }, { type: \"Token\", value: { type: \"AUSD\" } } ] }`\n * Output: `Enum(\"DexShare\", [Enum(\"Token\", Enum(\"ACA\")), Enum(\"Token\", Enum(\"AUSD\"))])`\n *\n * Input: `{ type: \"LiquidCrowdloan\", value: 13 }`\n * Output: `Enum(\"LiquidCrowdloan\", 13)`\n *\n * Input: `{ type: \"NativeToken\", value: \"bigint:2\" }`\n * Output: `Enum(\"NativeToken\", 2n)`\n *\n * Input: `{ type: \"Erc20\", value: \"hex:0x07df96d1341a7d16ba1ad431e2c847d978bc2bce\" }`\n * Output: `Enum(\"Erc20\", Binary.fromHex(\"0x07df96d1341a7d16ba1ad431e2c847d978bc2bce\"))`\n *\n * Input: `{ type: \"Stellar\", value: { code: \"bin:TZS\", issuer: \"hex:0x34c94b2a4ba9e8b57b22547dcbb30f443c4cb02da3829a89aa1bd4780e4466ba\" } }`\n * Output: `Enum(\"Stellar\", { code: Binary.fromText(\"TZS\"), issuer: Binary.fromHex(\"0x34c94b2a4ba9e8b57b22547dcbb30f443c4cb02da3829a89aa1bd4780e4466ba\") })`\n */\nexport const papiParse = <T = unknown>(text: string | T): T => {\n // biome-ignore lint/suspicious/noExplicitAny: legacy\n const reviver = (_key: string, value: any) => {\n if (typeof value !== \"string\") return value\n if (value.startsWith(\"bigint:\")) return BigInt(value.slice(\"bigint:\".length))\n if (value.startsWith(\"hex:\")) return Binary.fromHex(value.slice(\"hex:\".length))\n if (value.startsWith(\"bin:\")) return Binary.fromText(value.slice(\"bin:\".length))\n return value\n }\n\n if (typeof text !== \"string\") return text\n return JSON.parse(text, reviver)\n}\n\nexport const papiStringify = (value: unknown, space?: string | number): string => {\n // biome-ignore lint/suspicious/noExplicitAny: legacy\n const replacer = (_key: string, value: any) => {\n if (typeof value === \"bigint\") return `bigint:${String(value)}`\n if (value instanceof Binary) return `hex:${value.asHex()}`\n return value\n }\n\n return JSON.stringify(value, replacer, space)\n}\n"],"mappings":"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","names":["metadata","pallet","runtimeApi","type","metadata","getDynamicBuilder","getLookupFn","decAnyMetadata","unifyMetadata","metadata","metadata","toHex","Twox128","Binary","value"]}
|
|
1
|
+
{"version":3,"sources":["../src/papito.ts","../src/log.ts","../package.json","../src/util/compactMetadata.ts","../src/util/decodeScale.ts","../src/util/encodeMetadata.ts","../src/util/encodeStateKey.ts","../src/util/parseMetadataRpc.ts","../src/util/getConstantValueFromMetadata.ts","../src/util/getMetadataVersion.ts","../src/util/getStorageKeyPrefix.ts","../src/util/hash.ts","../src/util/serdePapi.ts"],"sourcesContent":["import type { getDynamicBuilder } from \"@polkadot-api/metadata-builders\"\n\nexport {\n getDynamicBuilder,\n getLookupFn,\n type MetadataLookup,\n} from \"@polkadot-api/metadata-builders\"\nexport type { Codec, SizedHex, UnifiedMetadata } from \"@polkadot-api/substrate-bindings\"\nexport {\n Binary,\n decAnyMetadata,\n metadata,\n unifyMetadata,\n} from \"@polkadot-api/substrate-bindings\"\nexport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\n\n/** Constant: https://docs.substrate.io/build/application-development/#metadata-format */\nexport const magicNumber = 1635018093\n\nexport type MetadataBuilder = ReturnType<typeof getDynamicBuilder>\n","import anylogger from \"anylogger\"\n\nimport packageJson from \"../package.json\"\n\nexport default anylogger(packageJson.name)\n","{\n \"name\": \"@talismn/scale\",\n \"version\": \"1.0.0\",\n \"author\": \"Talisman\",\n \"homepage\": \"https://talisman.xyz\",\n \"license\": \"GPL-3.0-or-later\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"repository\": {\n \"directory\": \"packages/scale\",\n \"type\": \"git\",\n \"url\": \"https://github.com/TalismanSociety/talisman.git\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"files\": [\n \"dist\"\n ],\n \"engines\": {\n \"node\": \">=20\"\n },\n \"scripts\": {\n \"test\": \"vitest run\",\n \"clean\": \"rm -rf dist .turbo node_modules\",\n \"build\": \"tsup --silent\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@polkadot-api/metadata-builders\": \"0.14.3\",\n \"@polkadot-api/substrate-bindings\": \"0.20.3\",\n \"@polkadot-api/utils\": \"0.4.0\",\n \"anylogger\": \"^1.0.11\",\n \"scale-ts\": \"^1.6.1\"\n },\n \"devDependencies\": {\n \"@talismn/tsconfig\": \"workspace:*\",\n \"typescript\": \"^6.0.3\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"@talismn/source\": \"./src/index.ts\",\n \"import\": {\n \"types\": \"./dist/index.d.mts\",\n \"default\": \"./dist/index.mjs\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n }\n }\n}\n","import type { Metadata } from \"@polkadot-api/substrate-bindings\"\n\nimport log from \"../log\"\nimport type { Prettify } from \"./Prettify\"\n\nexport type MetadataType = SupportedMetadata[\"lookup\"][number]\nexport type MetadataPallet = SupportedMetadata[\"pallets\"][number]\nexport type MetadataStorageItem = NonNullable<MetadataPallet[\"storage\"]>[\"items\"][number]\n\ntype SupportedMetadata = Extract<Metadata[\"metadata\"], { tag: SupportedMetadataVersion }>[\"value\"]\ntype SupportedMetadataVersion = \"v14\" | \"v15\" | \"v16\"\n\n/**\n * Converts a `Metadata` into a `MiniMetadata`.\n *\n * A `MiniMetadata` only contains the types inside of its `lookup` which are relevant for\n * the storage queries specified in `palletsAndItems`.\n *\n * E.g. if `palletsAndItems` is `{ pallet: \"System\", items: [\"Account\"] }`, then only the\n * types used in the `System.Account` storage query will remain inside of metadata.lookups.\n */\nexport const compactMetadata = (\n anyMetadata: Metadata,\n palletsAndItems: Array<{ pallet: string; constants?: string[]; items: string[] }> = [],\n runtimeApisAndMethods: Array<{ runtimeApi: string; methods: string[] }> = [],\n extraKeepTypes: number[] = []\n) => {\n if (!isCompactableMetadata(anyMetadata))\n throw new Error(`Metadata version ${anyMetadata.metadata.tag} not supported in compactMetadata`)\n\n const metadata: SupportedMetadata = anyMetadata.metadata.value\n\n // remove pallets we don't care about\n metadata.pallets = metadata.pallets.filter((pallet) =>\n // keep this pallet if it's listed in `palletsAndItems`\n palletsAndItems.some(({ pallet: palletName }) => pallet.name === palletName)\n ) as typeof metadata.pallets\n\n // remove fields we don't care about from each pallet, and extract types for each storage item we care about\n const palletsKeepTypes = palletsAndItems.flatMap(\n ({ pallet: palletName, constants: constantNames, items: itemNames }) => {\n const pallet = metadata.pallets.find((pallet) => pallet.name === palletName)\n if (!pallet) return []\n\n // remove pallet fields we don't care about\n pallet.calls = undefined\n pallet.constants = constantNames\n ? pallet.constants.filter((constant) => constantNames.includes(constant.name))\n : []\n // v15 (NOT v14) has docs\n if (\"docs\" in pallet) pallet.docs = []\n pallet.errors = undefined\n pallet.events = undefined\n\n if (!pallet.storage) return []\n\n // filter and extract storage items we care about\n pallet.storage.items = pallet.storage.items.filter((item) =>\n itemNames.some((itemName) => item.name === itemName)\n )\n\n return [\n ...pallet.storage.items\n .flatMap((item) => [\n // each type can be either \"Plain\" or \"Map\"\n // if it's \"Plain\" we only need to get the value type\n // if it's a \"Map\" we want to keep both the key AND the value types\n item.type.tag === \"plain\" && item.type.value,\n item.type.tag === \"map\" && item.type.value.key,\n item.type.tag === \"map\" && item.type.value.value,\n ])\n .filter((type): type is number => typeof type === \"number\"),\n ...pallet.constants.flatMap((constant) => constant.type),\n ]\n }\n )\n\n // remove runtime apis we don't care about\n let runtimeApisKeepTypes: number[] = []\n if (\"apis\" in metadata) {\n // metadata is v15 (NOT v14)\n\n // keep this api if it's listed in `runtimeApisAndMethods`\n metadata.apis = metadata.apis.filter((runtimeApi) =>\n runtimeApisAndMethods.some(\n ({ runtimeApi: runtimeApiName }) => runtimeApi.name === runtimeApiName\n )\n )\n\n // remove methods we don't care about from each runtime api, and extract types for each call's params and result\n runtimeApisKeepTypes = runtimeApisAndMethods.flatMap(\n ({ runtimeApi: runtimeApiName, methods: methodNames }) => {\n const runtimeApi = metadata.apis.find((runtimeApi) => runtimeApi.name === runtimeApiName)\n if (!runtimeApi) return []\n\n // remove runtime fields we don't care about\n runtimeApi.docs = []\n\n if (!runtimeApi.methods) return []\n\n // filter and extract methods we care about\n runtimeApi.methods = runtimeApi.methods.filter((method) =>\n methodNames.some((methodName) => method.name === methodName)\n )\n\n return runtimeApi.methods.flatMap((method) => [\n // each method has an array of input types (for the params)\n ...method.inputs.map((input) => input.type),\n // and one output type (for the result)\n method.output,\n ])\n }\n )\n }\n\n // this is a set of type ids which we plan to keep in our compacted metadata\n // anything not in this set will be deleted\n // we start off with just the types of the state calls we plan to make,\n // then we run those types through a function (addDependentTypes) which will also include\n // all of the types which those types depend on - recursively\n const keepTypes = new Set([...palletsKeepTypes, ...runtimeApisKeepTypes])\n // biome-ignore lint/suspicious/useIterableCallbackReturn: legacy\n extraKeepTypes?.forEach((type) => keepTypes.add(type))\n\n // recursively find all the types which our keepTypes depend on and add them to the keepTypes set\n const metadataTysMap = new Map(metadata.lookup.map((ty) => [ty.id, ty]))\n addDependentTypes(metadataTysMap, keepTypes, [...keepTypes])\n\n // ditch the types we aren't keeping\n metadata.lookup = metadata.lookup.filter((type) => keepTypes.has(type.id))\n\n // update all type ids to be sequential (fill the gaps left by the deleted types)\n const newTypeIds = new Map<number, number>()\n // biome-ignore lint/suspicious/useIterableCallbackReturn: legacy\n metadata.lookup.forEach((type, index) => newTypeIds.set(type.id, index))\n const getNewTypeId = (oldTypeId: number): number => {\n const newTypeId = newTypeIds.get(oldTypeId)\n if (typeof newTypeId !== \"number\") log.error(`Failed to find newTypeId for type ${oldTypeId}`)\n return newTypeId ?? 0\n }\n remapTypeIds(metadata, getNewTypeId)\n\n if (\"address\" in metadata.extrinsic) metadata.extrinsic.address = 0\n if (\"call\" in metadata.extrinsic) metadata.extrinsic.call = 0\n if (\"signature\" in metadata.extrinsic) metadata.extrinsic.signature = 0\n if (\"extra\" in metadata.extrinsic) metadata.extrinsic.extra = 0\n if (\"signedExtensions\" in metadata.extrinsic) metadata.extrinsic.signedExtensions = []\n if (\"outerEnums\" in metadata) {\n // metadata is v15 (NOT v14)\n metadata.outerEnums.call = 0\n metadata.outerEnums.error = 0\n metadata.outerEnums.event = 0\n }\n}\n\ntype CompactableMetadata = Prettify<\n Omit<Metadata, \"metadata\"> & {\n metadata: Extract<Metadata[\"metadata\"], { tag: SupportedMetadataVersion }>\n }\n>\nconst isCompactableMetadata = (metadata: Metadata): metadata is CompactableMetadata => {\n switch (metadata.metadata.tag) {\n case \"v14\":\n case \"v15\":\n case \"v16\":\n return true\n default:\n return false\n }\n}\n\nconst addDependentTypes = (\n metadataTysMap: Map<MetadataType[\"id\"], MetadataType>,\n keepTypes: Set<number>,\n types: number[],\n // Prevent stack overflow when a type references itself\n addedTypes: Set<number> = new Set()\n) => {\n const addDependentSubTypes = (subTypes: number[]) =>\n addDependentTypes(metadataTysMap, keepTypes, subTypes, addedTypes)\n\n for (const typeId of types) {\n const type = metadataTysMap.get(typeId)\n if (!type) {\n log.warn(`Unable to find type with id ${typeId}`)\n continue\n }\n\n if (addedTypes.has(type.id)) continue\n keepTypes.add(type.id)\n addedTypes.add(type.id)\n\n const paramTypes = type.params\n .map((param) => param.type)\n .filter((type): type is number => typeof type === \"number\")\n addDependentSubTypes(paramTypes)\n\n switch (type.def.tag) {\n case \"array\":\n addDependentSubTypes([type.def.value.type])\n break\n\n case \"bitSequence\":\n addDependentSubTypes([type.def.value.bitOrderType, type.def.value.bitStoreType])\n break\n\n case \"compact\":\n addDependentSubTypes([type.def.value])\n break\n\n case \"composite\":\n addDependentSubTypes(\n type.def.value\n .map((field) => field.type)\n .filter((type): type is number => typeof type === \"number\")\n )\n break\n\n case \"primitive\":\n break\n\n case \"sequence\":\n addDependentSubTypes([type.def.value])\n break\n\n case \"tuple\":\n addDependentSubTypes(\n type.def.value.filter((type): type is number => typeof type === \"number\")\n )\n break\n\n case \"variant\":\n addDependentSubTypes(\n type.def.value\n .flatMap((member) => member.fields.map((field) => field.type))\n .filter((type): type is number => typeof type === \"number\")\n )\n break\n\n default: {\n // force compilation error if any types don't have a case\n const exhaustiveCheck: never = type.def\n log.error(`Unhandled V15Type type ${exhaustiveCheck}`)\n }\n }\n }\n}\n\nconst remapTypeIds = (metadata: SupportedMetadata, getNewTypeId: (oldTypeId: number) => number) => {\n remapLookupTypeIds(metadata, getNewTypeId)\n remapStorageTypeIds(metadata, getNewTypeId)\n remapRuntimeApisTypeIds(metadata, getNewTypeId)\n}\n\nconst remapLookupTypeIds = (\n metadata: SupportedMetadata,\n getNewTypeId: (oldTypeId: number) => number\n) => {\n for (const type of metadata.lookup) {\n type.id = getNewTypeId(type.id)\n\n for (const param of type.params) {\n if (typeof param.type !== \"number\") continue\n param.type = getNewTypeId(param.type)\n }\n\n switch (type.def.tag) {\n case \"array\":\n type.def.value.type = getNewTypeId(type.def.value.type)\n break\n\n case \"bitSequence\":\n type.def.value.bitOrderType = getNewTypeId(type.def.value.bitOrderType)\n type.def.value.bitStoreType = getNewTypeId(type.def.value.bitStoreType)\n break\n\n case \"compact\":\n type.def.value = getNewTypeId(type.def.value)\n break\n\n case \"composite\":\n for (const field of type.def.value) {\n if (typeof field.type !== \"number\") continue\n field.type = getNewTypeId(field.type)\n }\n break\n\n case \"primitive\":\n break\n\n case \"sequence\":\n type.def.value = getNewTypeId(type.def.value)\n break\n\n case \"tuple\":\n type.def.value = type.def.value.map((type) => {\n if (typeof type !== \"number\") return type\n return getNewTypeId(type)\n })\n break\n\n case \"variant\":\n for (const member of type.def.value) {\n for (const field of member.fields) {\n if (typeof field.type !== \"number\") continue\n field.type = getNewTypeId(field.type)\n }\n }\n break\n\n default: {\n // force compilation error if any types don't have a case\n const exhaustiveCheck: never = type.def\n log.error(`Unhandled V15Type type ${exhaustiveCheck}`)\n }\n }\n }\n}\n\nconst remapStorageTypeIds = (\n metadata: SupportedMetadata,\n getNewTypeId: (oldTypeId: number) => number\n) => {\n for (const pallet of metadata.pallets) {\n for (const item of pallet.storage?.items ?? []) {\n if (item.type.tag === \"plain\") item.type.value = getNewTypeId(item.type.value)\n if (item.type.tag === \"map\") {\n item.type.value.key = getNewTypeId(item.type.value.key)\n item.type.value.value = getNewTypeId(item.type.value.value)\n }\n }\n for (const constant of pallet.constants ?? []) {\n constant.type = getNewTypeId(constant.type)\n }\n }\n}\n\nconst remapRuntimeApisTypeIds = (\n metadata: SupportedMetadata,\n getNewTypeId: (oldTypeId: number) => number\n) => {\n for (const runtimeApi of metadata.apis) {\n for (const method of runtimeApi.methods ?? []) {\n for (const input of method.inputs) {\n input.type = getNewTypeId(input.type)\n }\n method.output = getNewTypeId(method.output)\n }\n }\n}\n","import log from \"../log\"\nimport type { MetadataBuilder } from \"../papito\"\n\ntype ScaleStorageCoder = ReturnType<MetadataBuilder[\"buildStorage\"]>\n\nexport const decodeScale = <T>(\n scaleCoder: ScaleStorageCoder | undefined,\n change: string | null,\n error?: string\n): T | null => {\n if (change === null) return null\n\n try {\n return (scaleCoder?.value?.dec(change) as T | undefined) ?? null\n } catch (cause) {\n log.warn(error ?? `Failed to decode ${change}`, cause)\n return null\n }\n}\n","import type { Metadata } from \"@polkadot-api/substrate-bindings\"\n\nimport { metadata as scaleMetadata, toHex } from \"../papito\"\n\nexport const encodeMetadata = (metadata: Metadata) =>\n toHex(scaleMetadata.enc(metadata)) as `0x${string}`\n","import log from \"../log\"\nimport type { MetadataBuilder } from \"../papito\"\n\nexport type ScaleStorageCoder = ReturnType<MetadataBuilder[\"buildStorage\"]>\n\nexport const encodeStateKey = (\n scaleCoder: ScaleStorageCoder | undefined,\n error?: string,\n ...args: unknown[]\n): `0x${string}` | undefined => {\n try {\n return scaleCoder?.keys?.enc(...args) as `0x${string}`\n } catch (cause) {\n log.warn(error ?? `Failed to encode stateKey ${JSON.stringify(args)}`, cause)\n return\n }\n}\n","import { getDynamicBuilder, getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport { decAnyMetadata, unifyMetadata } from \"@polkadot-api/substrate-bindings\"\n\nexport const parseMetadataRpc = (metadataRpc: `0x${string}`) => {\n const metadata = decAnyMetadata(metadataRpc)\n const unifiedMetadata = unifyMetadata(metadata)\n const lookupFn = getLookupFn(unifiedMetadata)\n const builder = getDynamicBuilder(lookupFn)\n\n return { metadata, unifiedMetadata, lookupFn, builder }\n}\n","import log from \"../log\"\nimport type { MetadataBuilder, UnifiedMetadata } from \"../papito\"\nimport { parseMetadataRpc } from \"./parseMetadataRpc\"\n\nexport const getConstantValueFromMetadata = <T>(\n metadata: `0x${string}` | { builder: MetadataBuilder; unifiedMetadata: UnifiedMetadata },\n pallet: string,\n constant: string\n) => {\n const { builder, unifiedMetadata } =\n typeof metadata === \"string\" ? parseMetadataRpc(metadata) : metadata\n\n return getConstantValueInner<T>(builder, unifiedMetadata, pallet, constant)\n}\n\nconst getConstantValueInner = <T>(\n builder: MetadataBuilder,\n unifiedMetadata: UnifiedMetadata,\n pallet: string,\n constant: string\n) => {\n try {\n const storageCodec = builder.buildConstant(pallet, constant)\n\n const encodedValue = unifiedMetadata.pallets\n .find(({ name }) => name === pallet)\n ?.constants.find(({ name }) => name === constant)?.value\n\n if (!encodedValue) throw new Error(`Constant ${pallet}.${constant} not found`)\n\n return storageCodec.dec(encodedValue) as T\n } catch (err) {\n log.error(\"Failed to get constant value from metadata\", {\n err,\n pallet,\n constant,\n })\n throw err\n }\n}\n","import { Struct, u8, u32 } from \"scale-ts\"\n\n/**\n * Extracts the `version` u8 from a SCALE-encoded metadata blob and returns it as a `number`.\n *\n * Only reads the first 40 bytes of the blob.\n */\nexport const getMetadataVersion = (metadataRpc: string | Uint8Array | ArrayBuffer) => {\n try {\n return Struct({\n magicNumber: u32,\n version: u8,\n }).dec(metadataRpc).version\n } catch {\n return 0\n }\n}\n","import { Twox128 } from \"@polkadot-api/substrate-bindings\"\nimport { toHex } from \"@polkadot-api/utils\"\n\nexport const getStorageKeyPrefix = (palletName: string, storageName: string) => {\n const palletHash = Twox128(new TextEncoder().encode(palletName))\n const storageHash = Twox128(new TextEncoder().encode(storageName))\n\n // Concatenate and convert to hex\n const combined = new Uint8Array(palletHash.length + storageHash.length)\n combined.set(palletHash, 0)\n combined.set(storageHash, palletHash.length)\n\n return toHex(combined)\n}\n","export {\n Blake2128,\n Blake2128Concat,\n Blake2256,\n Blake3256,\n Blake3256Concat,\n Twox64Concat,\n Twox128,\n Twox256,\n} from \"@polkadot-api/substrate-bindings\"\n","import { Binary } from \"@polkadot-api/substrate-bindings\"\n\n/**\n * For the substrate-tokens (and other) modules, we configure the `onChainId` field in chaindata to tell the module how to query each token.\n * These queries are made to the tokens pallet.\n * E.g. api.query.Tokens.Account(accountAddress, papiParse(onChainId))\n *\n * The `onChainId` field on chaindata must be a JSON-parseable string, but a decoded papi value can\n * contain types that plain JSON cannot represent. `papiStringify`/`papiParse` are inverse functions\n * that serialise *any* decoded papi value to a deterministic string and back.\n *\n * Only two decoded types are not valid JSON, so only these get a tag — everything else (numbers,\n * objects, and strings, including the `0x…` hex strings papi v2 decodes fixed-size `[u8; N]` fields\n * into) is already JSON and is left untouched:\n * - `bigint` → `bigint:<n>`\n * - `Uint8Array` → `u8a:0x<hex>` (papi v2 decodes variable-length `Vec<u8>` to a `Uint8Array`)\n *\n * Note on polkadot-api v2 byte fields. The `Binary` class was removed and the SCALE codecs split\n * byte decoding into two distinct JS types, which `papiParse` must reproduce exactly or the codec\n * silently builds a garbage statekey (→ no balance):\n * - fixed-size `[u8; N]` (`AccountId32`, `AccountKey20`, `GeneralKey.data`, Erc20 addresses,\n * Stellar code/issuer, …) → a plain `0x` hex **string** (`SizedHex`). The codec's `.enc`\n * expects that string. So a fixed-size field is just a JSON string: no tag, round-trips as-is.\n * - variable-length `Vec<u8>` → a **`Uint8Array`**. The codec's `.enc` expects a `Uint8Array`,\n * NOT a hex string. Hence the dedicated `u8a:` tag, which `papiParse` restores to a `Uint8Array`.\n *\n * `hex:` and `bin:` are legacy/authoring **input** forms still accepted by `papiParse` (some\n * chaindata token templates are hand-written with them), but `papiStringify` never emits them — it\n * normalises to the bare canonical form. So the canonical output is deterministic and idempotent:\n * `papiStringify(papiParse(canonical)) === canonical`.\n *\n * Some examples (input string → papiParse value):\n * Input: `5` → `5`\n * Input: `{ type: \"LiquidCrowdloan\", value: 13 }` → `Enum(\"LiquidCrowdloan\", 13)`\n * Input: `{ type: \"NativeToken\", value: \"bigint:2\" }` → `Enum(\"NativeToken\", 2n)`\n * Input: `{ type: \"Erc20\", value: \"0x07df…bce\" }` → `Enum(\"Erc20\", \"0x07df…bce\")` (fixed → string)\n * Input: `{ type: \"Erc20\", value: \"hex:0x07df…bce\" }` → `Enum(\"Erc20\", \"0x07df…bce\")` (legacy input)\n * Input: `{ code: \"bin:TZS\" }` → `{ code: \"0x545a53\" }` (legacy input)\n * Input: `\"u8a:0xdeadbeef\"` → `Uint8Array([0xde,0xad,0xbe,0xef])` (variable bytes)\n */\nexport const papiParse = <T = unknown>(text: string | T): T => {\n // biome-ignore lint/suspicious/noExplicitAny: legacy\n const reviver = (_key: string, value: any) => {\n if (typeof value !== \"string\") return value\n if (value.startsWith(\"bigint:\")) return BigInt(value.slice(\"bigint:\".length))\n // variable-length `Vec<u8>` → restore the `Uint8Array` the papi v2 codec expects.\n if (value.startsWith(\"u8a:\")) return Binary.fromHex(value.slice(\"u8a:\".length) as `0x${string}`)\n // legacy/authoring input forms. Fixed-size `[u8; N]` codecs expect a `0x` hex string, so both\n // map to a bare hex string (the bare `0x` canonical form passes through unchanged below).\n if (value.startsWith(\"hex:\")) return value.slice(\"hex:\".length)\n if (value.startsWith(\"bin:\")) return Binary.toHex(Binary.fromText(value.slice(\"bin:\".length)))\n return value\n }\n\n if (typeof text !== \"string\") return text\n return JSON.parse(text, reviver)\n}\n\nexport const papiStringify = (value: unknown, space?: string | number): string => {\n // biome-ignore lint/suspicious/noExplicitAny: legacy\n const replacer = (_key: string, value: any) => {\n // Only tag the types JSON cannot represent. Strings (incl. `0x` fixed-size hex), numbers and\n // objects are already valid JSON and pass through untouched — keeping the form deterministic.\n if (typeof value === \"bigint\") return `bigint:${String(value)}`\n if (value instanceof Uint8Array) return `u8a:${Binary.toHex(value)}`\n return value\n }\n\n return JSON.stringify(value, replacer, space)\n}\n"],"mappings":"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","names":["metadata","pallet","runtimeApi","type","metadata","getDynamicBuilder","getLookupFn","decAnyMetadata","unifyMetadata","metadata","metadata","toHex","Twox128","Binary","value"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@talismn/scale",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"author": "Talisman",
|
|
5
5
|
"homepage": "https://talisman.xyz",
|
|
6
6
|
"license": "GPL-3.0-or-later",
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"node": ">=20"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@polkadot-api/metadata-builders": "0.
|
|
25
|
-
"@polkadot-api/substrate-bindings": "0.
|
|
26
|
-
"@polkadot-api/utils": "0.
|
|
24
|
+
"@polkadot-api/metadata-builders": "0.14.3",
|
|
25
|
+
"@polkadot-api/substrate-bindings": "0.20.3",
|
|
26
|
+
"@polkadot-api/utils": "0.4.0",
|
|
27
27
|
"anylogger": "^1.0.11",
|
|
28
28
|
"scale-ts": "^1.6.1"
|
|
29
29
|
},
|