@polkadot-api/metadata-builders 0.0.1 → 0.2.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 +8 -5
- package/dist/index.d.ts +8 -5
- package/dist/index.js +18 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +18 -4
- package/dist/index.mjs.map +1 -1
- package/dist/min/index.d.ts +8 -5
- package/dist/min/index.js +1 -1
- package/dist/min/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as scale from '@polkadot-api/substrate-bindings';
|
|
2
|
-
import { StringRecord, V15, Codec } from '@polkadot-api/substrate-bindings';
|
|
2
|
+
import { StringRecord, V14, V15, Codec } from '@polkadot-api/substrate-bindings';
|
|
3
3
|
|
|
4
4
|
type MetadataPrimitives = "bool" | "char" | "str" | "u8" | "u16" | "u32" | "u64" | "u128" | "u256" | "i8" | "i16" | "i32" | "i64" | "i128" | "i256";
|
|
5
5
|
type PrimitiveVar = {
|
|
@@ -19,7 +19,10 @@ type BitSequenceVar = {
|
|
|
19
19
|
type AccountId32 = {
|
|
20
20
|
type: "AccountId32";
|
|
21
21
|
};
|
|
22
|
-
type
|
|
22
|
+
type AccountId20 = {
|
|
23
|
+
type: "AccountId20";
|
|
24
|
+
};
|
|
25
|
+
type TerminalVar = PrimitiveVar | VoidVar | CompactVar | BitSequenceVar | AccountId32 | AccountId20;
|
|
23
26
|
type TupleVar = {
|
|
24
27
|
type: "tuple";
|
|
25
28
|
value: LookupEntry[];
|
|
@@ -166,7 +169,7 @@ declare const getLookupFn: (lookupData: {
|
|
|
166
169
|
docs: string[];
|
|
167
170
|
}[]) => (id: number) => LookupEntry;
|
|
168
171
|
|
|
169
|
-
declare const getDynamicBuilder: (metadata: V15) => {
|
|
172
|
+
declare const getDynamicBuilder: (metadata: V14 | V15) => {
|
|
170
173
|
buildDefinition: (id: number) => Codec<any>;
|
|
171
174
|
buildStorage: (pallet: string, entry: string) => {
|
|
172
175
|
len: number;
|
|
@@ -204,7 +207,7 @@ declare const getDynamicBuilder: (metadata: V15) => {
|
|
|
204
207
|
ss58Prefix: number | undefined;
|
|
205
208
|
};
|
|
206
209
|
|
|
207
|
-
declare const getChecksumBuilder: (metadata: V15) => {
|
|
210
|
+
declare const getChecksumBuilder: (metadata: V14 | V15) => {
|
|
208
211
|
buildDefinition: (id: number) => string | null;
|
|
209
212
|
buildRuntimeCall: (api: string, method: string) => string | null;
|
|
210
213
|
buildStorage: (pallet: string, entry: string) => string | null;
|
|
@@ -217,4 +220,4 @@ declare const getChecksumBuilder: (metadata: V15) => {
|
|
|
217
220
|
getAllGeneratedChecksums: () => string[];
|
|
218
221
|
};
|
|
219
222
|
|
|
220
|
-
export { type AccountId32, type ArrayVar, type BitSequenceVar, type CompactVar, type ComposedVar, type EnumVar, type LookupEntry, type MetadataPrimitives, type OptionVar, type PrimitiveVar, type ResultVar, type SequenceVar, type StructVar, type TerminalVar, type TupleVar, type Var, type VoidVar, getChecksumBuilder, getDynamicBuilder, getLookupFn };
|
|
223
|
+
export { type AccountId20, type AccountId32, type ArrayVar, type BitSequenceVar, type CompactVar, type ComposedVar, type EnumVar, type LookupEntry, type MetadataPrimitives, type OptionVar, type PrimitiveVar, type ResultVar, type SequenceVar, type StructVar, type TerminalVar, type TupleVar, type Var, type VoidVar, getChecksumBuilder, getDynamicBuilder, getLookupFn };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as scale from '@polkadot-api/substrate-bindings';
|
|
2
|
-
import { StringRecord, V15, Codec } from '@polkadot-api/substrate-bindings';
|
|
2
|
+
import { StringRecord, V14, V15, Codec } from '@polkadot-api/substrate-bindings';
|
|
3
3
|
|
|
4
4
|
type MetadataPrimitives = "bool" | "char" | "str" | "u8" | "u16" | "u32" | "u64" | "u128" | "u256" | "i8" | "i16" | "i32" | "i64" | "i128" | "i256";
|
|
5
5
|
type PrimitiveVar = {
|
|
@@ -19,7 +19,10 @@ type BitSequenceVar = {
|
|
|
19
19
|
type AccountId32 = {
|
|
20
20
|
type: "AccountId32";
|
|
21
21
|
};
|
|
22
|
-
type
|
|
22
|
+
type AccountId20 = {
|
|
23
|
+
type: "AccountId20";
|
|
24
|
+
};
|
|
25
|
+
type TerminalVar = PrimitiveVar | VoidVar | CompactVar | BitSequenceVar | AccountId32 | AccountId20;
|
|
23
26
|
type TupleVar = {
|
|
24
27
|
type: "tuple";
|
|
25
28
|
value: LookupEntry[];
|
|
@@ -166,7 +169,7 @@ declare const getLookupFn: (lookupData: {
|
|
|
166
169
|
docs: string[];
|
|
167
170
|
}[]) => (id: number) => LookupEntry;
|
|
168
171
|
|
|
169
|
-
declare const getDynamicBuilder: (metadata: V15) => {
|
|
172
|
+
declare const getDynamicBuilder: (metadata: V14 | V15) => {
|
|
170
173
|
buildDefinition: (id: number) => Codec<any>;
|
|
171
174
|
buildStorage: (pallet: string, entry: string) => {
|
|
172
175
|
len: number;
|
|
@@ -204,7 +207,7 @@ declare const getDynamicBuilder: (metadata: V15) => {
|
|
|
204
207
|
ss58Prefix: number | undefined;
|
|
205
208
|
};
|
|
206
209
|
|
|
207
|
-
declare const getChecksumBuilder: (metadata: V15) => {
|
|
210
|
+
declare const getChecksumBuilder: (metadata: V14 | V15) => {
|
|
208
211
|
buildDefinition: (id: number) => string | null;
|
|
209
212
|
buildRuntimeCall: (api: string, method: string) => string | null;
|
|
210
213
|
buildStorage: (pallet: string, entry: string) => string | null;
|
|
@@ -217,4 +220,4 @@ declare const getChecksumBuilder: (metadata: V15) => {
|
|
|
217
220
|
getAllGeneratedChecksums: () => string[];
|
|
218
221
|
};
|
|
219
222
|
|
|
220
|
-
export { type AccountId32, type ArrayVar, type BitSequenceVar, type CompactVar, type ComposedVar, type EnumVar, type LookupEntry, type MetadataPrimitives, type OptionVar, type PrimitiveVar, type ResultVar, type SequenceVar, type StructVar, type TerminalVar, type TupleVar, type Var, type VoidVar, getChecksumBuilder, getDynamicBuilder, getLookupFn };
|
|
223
|
+
export { type AccountId20, type AccountId32, type ArrayVar, type BitSequenceVar, type CompactVar, type ComposedVar, type EnumVar, type LookupEntry, type MetadataPrimitives, type OptionVar, type PrimitiveVar, type ResultVar, type SequenceVar, type StructVar, type TerminalVar, type TupleVar, type Var, type VoidVar, getChecksumBuilder, getDynamicBuilder, getLookupFn };
|
package/dist/index.js
CHANGED
|
@@ -37,6 +37,7 @@ __export(src_exports, {
|
|
|
37
37
|
module.exports = __toCommonJS(src_exports);
|
|
38
38
|
|
|
39
39
|
// src/lookups.ts
|
|
40
|
+
var isBytes = (value, nBytes) => value.type === "array" && value.len === nBytes && value.value.type === "primitive" && value.value.value === "u8";
|
|
40
41
|
var getLookupFn = (lookupData) => {
|
|
41
42
|
const lookups = /* @__PURE__ */ new Map();
|
|
42
43
|
const from = /* @__PURE__ */ new Set();
|
|
@@ -69,17 +70,23 @@ var getLookupFn = (lookupData) => {
|
|
|
69
70
|
};
|
|
70
71
|
};
|
|
71
72
|
let isAccountId32SearchOn = true;
|
|
73
|
+
let isAccountId20SearchOn = true;
|
|
72
74
|
const getLookupEntryDef = withCache2((id) => {
|
|
73
75
|
const { def, path, params } = lookupData[id];
|
|
74
76
|
if (def.tag === "composite") {
|
|
75
77
|
if (def.value.length === 0)
|
|
76
78
|
return { type: "void" };
|
|
77
79
|
if (def.value.length === 1) {
|
|
78
|
-
|
|
80
|
+
const inner = getLookupEntryDef(def.value[0].type);
|
|
81
|
+
if (isAccountId32SearchOn && path.at(-1) === "AccountId32" && isBytes(inner, 32)) {
|
|
79
82
|
isAccountId32SearchOn = false;
|
|
80
83
|
return { type: "AccountId32" };
|
|
81
84
|
}
|
|
82
|
-
|
|
85
|
+
if (isAccountId20SearchOn && path.at(-1) === "AccountId20" && isBytes(inner, 20)) {
|
|
86
|
+
isAccountId20SearchOn = false;
|
|
87
|
+
return { type: "AccountId20" };
|
|
88
|
+
}
|
|
89
|
+
return inner;
|
|
83
90
|
}
|
|
84
91
|
let allKey = true;
|
|
85
92
|
const values = {};
|
|
@@ -263,6 +270,8 @@ var _buildCodec = (input, cache, stack, _accountId) => {
|
|
|
263
270
|
return scale._void;
|
|
264
271
|
if (input.type === "AccountId32")
|
|
265
272
|
return _accountId;
|
|
273
|
+
if (input.type === "AccountId20")
|
|
274
|
+
return scale.ethAccount;
|
|
266
275
|
if (input.type === "compact")
|
|
267
276
|
return scale.compact;
|
|
268
277
|
if (input.type === "bitSequence")
|
|
@@ -445,8 +454,10 @@ var runtimePrimitiveIds = {
|
|
|
445
454
|
// {bitsLen: number, bytes: Uint8Array}
|
|
446
455
|
byteSequence: 6n,
|
|
447
456
|
// Binary
|
|
448
|
-
|
|
457
|
+
accountId32: 7n,
|
|
449
458
|
// SS58String
|
|
459
|
+
accountId20: 8n
|
|
460
|
+
// EthAccount
|
|
450
461
|
};
|
|
451
462
|
var metadataPrimitiveIds = {
|
|
452
463
|
bool: runtimePrimitiveIds.boolean,
|
|
@@ -538,7 +549,10 @@ var _buildChecksum = (input, buildNextChecksum) => {
|
|
|
538
549
|
if (input.type === "bitSequence")
|
|
539
550
|
return getChecksum([shapeIds.primitive, runtimePrimitiveIds.bitSequence]);
|
|
540
551
|
if (input.type === "AccountId32") {
|
|
541
|
-
return getChecksum([shapeIds.primitive, runtimePrimitiveIds.
|
|
552
|
+
return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId32]);
|
|
553
|
+
}
|
|
554
|
+
if (input.type === "AccountId20") {
|
|
555
|
+
return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId20]);
|
|
542
556
|
}
|
|
543
557
|
if (input.type === "array") {
|
|
544
558
|
const innerValue = input.value;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/lookups.ts","../src/dynamic-builder.ts","../src/with-cache.ts","../src/checksum-builder.ts"],"sourcesContent":["export * from \"./lookups\"\nexport * from \"./dynamic-builder\"\nexport * from \"./checksum-builder\"\n","import type { StringRecord, V14Lookup } from \"@polkadot-api/substrate-bindings\"\n\nexport type MetadataPrimitives =\n | \"bool\"\n | \"char\"\n | \"str\"\n | \"u8\"\n | \"u16\"\n | \"u32\"\n | \"u64\"\n | \"u128\"\n | \"u256\"\n | \"i8\"\n | \"i16\"\n | \"i32\"\n | \"i64\"\n | \"i128\"\n | \"i256\"\n\nexport type PrimitiveVar = {\n type: \"primitive\"\n value: MetadataPrimitives\n}\n\nexport type VoidVar = { type: \"void\" }\nexport type CompactVar = { type: \"compact\"; isBig: boolean | null }\nexport type BitSequenceVar = { type: \"bitSequence\" }\nexport type AccountId32 = { type: \"AccountId32\" }\nexport type TerminalVar =\n | PrimitiveVar\n | VoidVar\n | CompactVar\n | BitSequenceVar\n | AccountId32\n\n/* Array-like vars:\n * - TupleVar: Mixed types, fixed length\n * - Sequence: One type, arbitrary length\n * - Array: One type, fixed length\n */\nexport type TupleVar = {\n type: \"tuple\"\n value: LookupEntry[]\n innerDocs: Array<string[]>\n}\nexport type StructVar = {\n type: \"struct\"\n value: StringRecord<LookupEntry>\n innerDocs: StringRecord<string[]>\n}\nexport type EnumVar = {\n type: \"enum\"\n value: StringRecord<\n (\n | { type: \"lookupEntry\"; value: LookupEntry }\n | VoidVar\n | TupleVar\n | StructVar\n ) & { idx: number }\n >\n innerDocs: StringRecord<string[]>\n}\nexport type OptionVar = {\n type: \"option\"\n value: LookupEntry\n}\nexport type ResultVar = {\n type: \"result\"\n value: { ok: LookupEntry; ko: LookupEntry }\n}\nexport type SequenceVar = {\n type: \"sequence\"\n value: LookupEntry\n}\nexport type ArrayVar = {\n type: \"array\"\n value: LookupEntry\n len: number\n}\n\nexport type ComposedVar =\n | TupleVar\n | StructVar\n | SequenceVar\n | ArrayVar\n | OptionVar\n | ResultVar\n | EnumVar\n\nexport type Var = TerminalVar | ComposedVar\n\nexport type LookupEntry = {\n id: number\n} & Var\n\nexport const getLookupFn = (lookupData: V14Lookup) => {\n const lookups = new Map<number, LookupEntry>()\n const from = new Set<number>()\n\n const withCache = (\n fn: (id: number) => Var,\n ): ((id: number) => LookupEntry) => {\n return (id) => {\n let entry = lookups.get(id)\n\n if (entry) return entry\n\n if (from.has(id)) {\n const entry = {\n id,\n } as LookupEntry\n\n lookups.set(id, entry)\n return entry\n }\n\n from.add(id)\n const value = fn(id)\n entry = lookups.get(id)\n\n if (entry) {\n Object.assign(entry, value)\n } else {\n entry = {\n id,\n ...value,\n }\n lookups.set(id, entry!)\n }\n from.delete(id)\n return entry\n }\n }\n\n let isAccountId32SearchOn = true\n const getLookupEntryDef = withCache((id): Var => {\n const { def, path, params } = lookupData[id]\n\n if (def.tag === \"composite\") {\n if (def.value.length === 0) return { type: \"void\" }\n\n // used to be a \"pointer\"\n if (def.value.length === 1) {\n if (\n isAccountId32SearchOn &&\n path.join(\",\") === \"sp_core,crypto,AccountId32\"\n ) {\n isAccountId32SearchOn = false\n return { type: \"AccountId32\" }\n }\n return getLookupEntryDef(def.value[0].type as number)\n }\n\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n def.value.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n values[key] = getLookupEntryDef(x.type)\n innerDocs[key] = x.docs\n })\n\n return allKey\n ? {\n type: \"struct\",\n value: values as StringRecord<LookupEntry>,\n innerDocs: innerDocs as StringRecord<string[]>,\n }\n : {\n type: \"tuple\",\n value: Object.values(values),\n innerDocs: Object.values(innerDocs),\n }\n }\n\n if (def.tag === \"variant\") {\n if (\n path.length === 1 &&\n path[0] === \"Option\" &&\n params.length === 1 &&\n params[0].name === \"T\"\n ) {\n const value = getLookupEntryDef(params[0].type!)\n return value.type === \"void\"\n ? // Option<void> would return a Codec<undefined> which makes no sense\n // Therefore, we better treat it as a bool\n { type: \"primitive\", value: \"bool\" }\n : {\n type: \"option\",\n value,\n }\n }\n\n if (\n path.length === 1 &&\n path[0] === \"Result\" &&\n params.length === 2 &&\n params[0].name === \"T\" &&\n params[1].name === \"E\"\n ) {\n return {\n type: \"result\",\n value: {\n ok: getLookupEntryDef(params[0].type as number),\n ko: getLookupEntryDef(params[1].type as number),\n },\n }\n }\n if (def.value.length === 0) return { type: \"void\" }\n\n const enumValue: StringRecord<EnumVar[\"value\"][keyof EnumVar[\"value\"]]> =\n {}\n const enumDocs: StringRecord<string[]> = {}\n\n def.value.forEach((x) => {\n const key = x.name\n enumDocs[key] = x.docs\n\n if (x.fields.length === 0) {\n enumValue[key] = { type: \"void\", idx: x.index }\n return\n }\n\n if (x.fields.length === 1 && !x.fields[0].name) {\n enumValue[key] = {\n type: \"lookupEntry\",\n value: getLookupEntryDef(x.fields[0].type),\n idx: x.index,\n }\n return\n }\n\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n\n x.fields.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n values[key] = getLookupEntryDef(x.type as number)\n innerDocs[key] = x.docs\n })\n\n enumValue[key] = allKey\n ? {\n type: \"struct\",\n value: values as StringRecord<LookupEntry>,\n innerDocs: innerDocs as StringRecord<string[]>,\n idx: x.index,\n }\n : {\n type: \"tuple\",\n value: Object.values(values),\n innerDocs: Object.values(innerDocs),\n idx: x.index,\n }\n })\n\n return {\n type: \"enum\",\n value: enumValue,\n innerDocs: enumDocs,\n }\n }\n\n if (def.tag === \"sequence\") {\n const value = getLookupEntryDef(def.value as number)\n return {\n type: \"sequence\",\n value,\n }\n }\n\n if (def.tag === \"array\") {\n const { len } = def.value\n const value = getLookupEntryDef(def.value.type)\n\n if (len === 0) return { type: \"void\" }\n if (len === 1) return value\n\n return {\n type: \"array\",\n value,\n len: def.value.len,\n }\n }\n\n if (def.tag === \"tuple\") {\n if (def.value.length === 0) return { type: \"void\" }\n\n // use to be a \"pointer\"\n if (def.value.length === 1)\n return getLookupEntryDef(def.value[0] as number)\n\n const value = def.value.map((x) => getLookupEntryDef(x as number))\n const innerDocs = def.value.map((x) => lookupData[x].docs)\n\n const areAllSame = value.every((v) => v.id === value[0].id)\n if (areAllSame && innerDocs.every((doc) => doc.length === 0)) {\n return {\n type: \"array\",\n value: value[0],\n len: value.length,\n }\n }\n\n return {\n type: \"tuple\",\n value,\n innerDocs,\n }\n }\n\n if (def.tag === \"primitive\") {\n return {\n type: \"primitive\",\n value: def.value.tag,\n }\n }\n\n if (def.tag === \"compact\") {\n const translated = getLookupEntryDef(def.value) as PrimitiveVar | VoidVar\n if (translated.type === \"void\") return { type: \"compact\", isBig: null }\n\n const isBig = Number(translated.value.slice(1)) > 32\n\n return {\n type: \"compact\",\n isBig,\n }\n }\n\n // bitSequence\n return {\n type: def.tag,\n }\n })\n\n return getLookupEntryDef\n}\n","import type { Codec, StringRecord, V15 } from \"@polkadot-api/substrate-bindings\"\nimport type { EnumVar, LookupEntry, TupleVar } from \"./lookups\"\nimport { getLookupFn } from \"./lookups\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport { withCache } from \"./with-cache\"\nimport { mapObject } from \"@polkadot-api/utils\"\n\nconst _bytes = scale.Bin()\n\nconst _buildCodec = (\n input: LookupEntry,\n cache: Map<number, Codec<any>>,\n stack: Set<number>,\n _accountId: Codec<scale.SS58String>,\n): Codec<any> => {\n if (input.type === \"primitive\") return scale[input.value]\n if (input.type === \"void\") return scale._void\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"compact\") return scale.compact\n if (input.type === \"bitSequence\") return scale.bitSequence\n\n const buildNextCodec = (nextInput: LookupEntry): Codec<any> =>\n buildCodec(nextInput, cache, stack, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const innerCodec = buildNextCodec(inner)\n return len ? scale.Vector(innerCodec, len) : scale.Vector(innerCodec)\n }\n\n const buildTuple = (value: LookupEntry[]) =>\n scale.Tuple(...value.map(buildNextCodec))\n\n const buildStruct = (value: StringRecord<LookupEntry>) => {\n const inner = Object.fromEntries(\n Object.entries(value).map(([key, value]) => [key, buildNextCodec(value)]),\n ) as StringRecord<Codec<any>>\n return scale.Struct(inner)\n }\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return _bytes\n }\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\")\n return scale.Bin(input.len)\n\n return buildVector(input.value, input.len)\n }\n\n if (input.type === \"sequence\") return buildVector(input.value)\n if (input.type === \"tuple\") return buildTuple(input.value)\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\") return scale.Option(buildNextCodec(input.value))\n\n if (input.type === \"result\")\n return scale.Result(\n buildNextCodec(input.value.ok),\n buildNextCodec(input.value.ko),\n )\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n if (v.type === \"void\") return scale._void\n if (v.type === \"lookupEntry\") return buildNextCodec(v.value)\n return v.type === \"tuple\" ? buildTuple(v.value) : buildStruct(v.value)\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => {\n return [key, dependencies[idx]]\n }),\n ) as StringRecord<Codec<any>>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n return areIndexesSorted\n ? scale.Variant(inner)\n : scale.Variant(inner, indexes as any)\n}\nconst buildCodec = withCache(_buildCodec, scale.Self, (res) => res)\n\nexport const getDynamicBuilder = (metadata: V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n let _accountId = scale.AccountId()\n\n const cache = new Map()\n const buildDefinition = (id: number): Codec<any> =>\n buildCodec(getLookupEntryDef(id), cache, new Set(), _accountId)\n\n const prefix = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"SS58Prefix\")\n\n let ss58Prefix: number | undefined\n if (prefix) {\n try {\n const prefixVal = buildDefinition(prefix.type).dec(prefix.value)\n if (typeof prefixVal === \"number\") {\n ss58Prefix = prefixVal\n _accountId = scale.AccountId(prefixVal)\n }\n } catch (_) {}\n }\n\n const storagePallets = new Map<string, ReturnType<typeof scale.Storage>>()\n\n const buildStorage = (pallet: string, entry: string) => {\n let storagePallet = storagePallets.get(pallet)\n if (!storagePallet)\n storagePallets.set(pallet, (storagePallet = scale.Storage(pallet)))\n\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .storage!.items.find((s) => s.name === entry)!\n\n const storageWithFallback = (\n len: number,\n ...args: Parameters<ReturnType<typeof scale.Storage>>\n ) => {\n const result = storagePallet!(...args)\n return {\n ...result,\n len,\n fallback:\n storageEntry.modifier === 1\n ? result.dec(storageEntry.fallback)\n : undefined,\n }\n }\n\n if (storageEntry.type.tag === \"plain\")\n return storageWithFallback(\n 0,\n entry,\n buildDefinition(storageEntry.type.value).dec,\n )\n\n const { key, value, hashers } = storageEntry.type.value\n const val = buildDefinition(value)\n const hashes = hashers.map((x) => scale[x.tag])\n\n const hashArgs: Array<scale.EncoderWithHash<any>> =\n hashes.length === 1\n ? [[buildDefinition(key), hashes[0]]]\n : (getLookupEntryDef(key) as TupleVar).value.map(\n (x, idx): scale.EncoderWithHash<any> => [\n buildDefinition(x.id),\n hashes[idx],\n ],\n )\n return storageWithFallback(hashes.length, entry, val.dec, ...hashArgs)\n }\n\n const buildEnumEntry = (\n entry: EnumVar[\"value\"][keyof EnumVar[\"value\"]],\n ): Codec<any> => {\n if (entry.type === \"void\") return scale._void\n if (entry.type === \"lookupEntry\") return buildDefinition(entry.value.id)\n return entry.type === \"tuple\"\n ? scale.Tuple(\n ...Object.values(entry.value).map((l) => buildDefinition(l.id)),\n )\n : scale.Struct(\n mapObject(entry.value, (x) => buildDefinition(x.id)) as StringRecord<\n Codec<any>\n >,\n )\n }\n\n const buildConstant = (pallet: string, constantName: string) => {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type as number)\n }\n\n const buildVariant =\n (type: \"errors\" | \"events\" | \"calls\") =>\n (\n pallet: string,\n name: string,\n ): {\n codec: Codec<any>\n location: [number, number]\n } => {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n const lookup = getLookupEntryDef(palletEntry[type]!)\n if (lookup.type !== \"enum\") throw null\n const entry = lookup.value[name]\n\n return {\n location: [palletEntry.index, entry.idx],\n codec: buildEnumEntry(lookup.value[name]),\n }\n }\n\n const buildRuntimeCall = (api: string, method: string) => {\n const entry = metadata.apis\n .find((x) => x.name === api)\n ?.methods.find((x) => x.name === method)\n if (!entry) throw null\n\n return {\n args: scale.Tuple(...entry.inputs.map((x) => buildDefinition(x.type))),\n value: buildDefinition(entry.output),\n }\n }\n\n return {\n buildDefinition,\n buildStorage,\n buildEvent: buildVariant(\"events\"),\n buildError: buildVariant(\"errors\"),\n buildRuntimeCall,\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n ss58Prefix,\n }\n}\n","import { LookupEntry } from \"./lookups\"\n\ntype FnWithStack<Other extends Array<any>, T> = (\n input: LookupEntry,\n cache: Map<number, T>,\n stack: Set<number>,\n ...rest: Other\n) => T\n\nexport const withCache =\n <Other extends Array<any>, T>(\n fn: FnWithStack<Other, T>,\n onEnterCircular: (\n cacheGetter: () => T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n onExitCircular: (\n outter: T,\n inner: T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n ): FnWithStack<Other, T> =>\n (input, cache, stack, ...rest) => {\n const { id } = input\n if (cache.has(id)) return cache.get(id)!\n\n if (stack.has(id)) {\n const res = onEnterCircular(() => cache.get(id)!, input, ...rest)\n cache.set(id, res)\n return res\n }\n\n stack.add(id)\n let result = fn(input, cache, stack, ...rest)\n stack.delete(id)\n\n if (cache.has(id))\n result = onExitCircular(result, cache.get(id)!, input, ...rest)\n\n cache.set(id, result)\n return result\n }\n","import type { StringRecord, V15 } from \"@polkadot-api/substrate-bindings\"\nimport { h64 } from \"@polkadot-api/substrate-bindings\"\nimport {\n LookupEntry,\n MetadataPrimitives,\n StructVar,\n TupleVar,\n VoidVar,\n getLookupFn,\n} from \"./lookups\"\n\nconst textEncoder = new TextEncoder()\nconst encodeText = textEncoder.encode.bind(textEncoder)\n\nconst getChecksum = (values: Array<bigint>) => {\n const res = new Uint8Array(values.length * 8)\n const dv = new DataView(res.buffer)\n\n for (let i = 0; i < values.length; i++) dv.setBigUint64(i * 8, values[i])\n\n return h64(res)\n}\nconst getStringChecksum = (values: Array<string>) =>\n getChecksum(values.map((v) => h64(encodeText(v))))\n\ntype Shape =\n | \"primitive\"\n | \"void\"\n | \"vector\"\n | \"tuple\"\n | \"struct\"\n | \"option\"\n | \"result\"\n | \"enum\"\nconst shapeIds: Record<Shape, bigint> = {\n primitive: 0n,\n vector: 1n,\n tuple: 2n,\n struct: 3n,\n option: 4n,\n result: 5n,\n enum: 6n,\n void: 7n,\n}\n\ntype RuntimePrimitives =\n | \"undefined\"\n | \"number\"\n | \"string\"\n | \"bigint\"\n | \"boolean\"\n | \"bitSequence\"\n | \"byteSequence\"\n | \"accountId\"\n\nconst runtimePrimitiveIds: Record<RuntimePrimitives, bigint> = {\n undefined: 0n,\n number: 1n,\n string: 2n,\n bigint: 3n,\n boolean: 4n,\n bitSequence: 5n, // {bitsLen: number, bytes: Uint8Array}\n byteSequence: 6n, // Binary\n accountId: 7n, // SS58String\n}\n\nconst metadataPrimitiveIds: Record<MetadataPrimitives, bigint> = {\n bool: runtimePrimitiveIds.boolean,\n char: runtimePrimitiveIds.string,\n str: runtimePrimitiveIds.string,\n u8: runtimePrimitiveIds.number,\n u16: runtimePrimitiveIds.number,\n u32: runtimePrimitiveIds.number,\n u64: runtimePrimitiveIds.bigint,\n u128: runtimePrimitiveIds.bigint,\n u256: runtimePrimitiveIds.bigint,\n i8: runtimePrimitiveIds.number,\n i16: runtimePrimitiveIds.number,\n i32: runtimePrimitiveIds.number,\n i64: runtimePrimitiveIds.bigint,\n i128: runtimePrimitiveIds.bigint,\n i256: runtimePrimitiveIds.bigint,\n}\n\nconst structLikeBuilder = <T>(\n shapeId: bigint,\n input: StringRecord<T>,\n innerChecksum: (value: T) => bigint,\n) => {\n const sortedEntries = Object.entries(input).sort(([a], [b]) =>\n a.localeCompare(b),\n )\n const keysChecksum = getStringChecksum(sortedEntries.map(([key]) => key))\n const valuesChecksum = getChecksum(\n sortedEntries.map(([, entry]) => innerChecksum(entry)),\n )\n\n return getChecksum([shapeId, keysChecksum, valuesChecksum])\n}\n\ntype Graph = Map<number, [LookupEntry, Set<number>]>\nconst buildGraph = (entry: LookupEntry, result: Graph = new Map()) => {\n if (result.has(entry.id)) return result\n\n switch (entry.type) {\n case \"array\":\n case \"option\":\n case \"sequence\":\n result.set(entry.id, [entry, new Set([entry.value.id])])\n buildGraph(entry.value, result)\n break\n case \"enum\": {\n const children = Object.values(entry.value).flatMap((value) => {\n if (value.type === \"void\") return []\n if (value.type === \"lookupEntry\") return value.value\n if (value.type === \"struct\") return Object.values(value.value)\n return value.value\n })\n result.set(entry.id, [entry, new Set(children.map((child) => child.id))])\n children.forEach((child) => buildGraph(child, result))\n break\n }\n case \"result\":\n result.set(entry.id, [\n entry,\n new Set([entry.value.ok.id, entry.value.ko.id]),\n ])\n buildGraph(entry.value.ok, result)\n buildGraph(entry.value.ko, result)\n break\n case \"struct\": {\n const children = Object.values(entry.value)\n result.set(entry.id, [entry, new Set(children.map((child) => child.id))])\n children.forEach((child) => buildGraph(child, result))\n break\n }\n case \"tuple\":\n result.set(entry.id, [\n entry,\n new Set(entry.value.map((child) => child.id)),\n ])\n entry.value.forEach((child) => buildGraph(child, result))\n break\n default:\n result.set(entry.id, [entry, new Set()])\n }\n return result\n}\n\nconst _buildChecksum = (\n input: LookupEntry,\n buildNextChecksum: (entry: LookupEntry) => bigint,\n): bigint => {\n if (input.type === \"primitive\")\n return getChecksum([shapeIds.primitive, metadataPrimitiveIds[input.value]])\n\n if (input.type === \"void\") return getChecksum([shapeIds.void])\n\n if (input.type === \"compact\")\n return getChecksum([\n shapeIds.primitive,\n runtimePrimitiveIds[\n input.isBig || input.isBig === null ? \"bigint\" : \"number\"\n ],\n ])\n\n if (input.type === \"bitSequence\")\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.bitSequence])\n\n if (input.type === \"AccountId32\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId])\n }\n\n if (input.type === \"array\") {\n const innerValue = input.value\n if (innerValue.type === \"primitive\" && innerValue.value === \"u8\") {\n return getChecksum([\n shapeIds.primitive,\n runtimePrimitiveIds.byteSequence,\n BigInt(input.len),\n ])\n }\n const innerChecksum = buildNextChecksum(innerValue)\n\n return getChecksum([shapeIds.vector, innerChecksum, BigInt(input.len)])\n }\n\n if (input.type === \"sequence\") {\n const innerValue = input.value\n if (innerValue.type === \"primitive\" && innerValue.value === \"u8\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.byteSequence])\n }\n const innerChecksum = buildNextChecksum(innerValue)\n\n return getChecksum([shapeIds.vector, innerChecksum])\n }\n\n const buildTuple = (entries: LookupEntry[]) =>\n getChecksum([shapeIds.tuple, ...entries.map(buildNextChecksum)])\n\n const buildStruct = (entries: StringRecord<LookupEntry>) =>\n structLikeBuilder(shapeIds.struct, entries, buildNextChecksum)\n\n if (input.type === \"tuple\") return buildTuple(input.value)\n\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\")\n return getChecksum([shapeIds.option, buildNextChecksum(input.value)])\n\n if (input.type === \"result\")\n return getChecksum([\n shapeIds.result,\n buildNextChecksum(input.value.ok),\n buildNextChecksum(input.value.ko),\n ])\n\n return structLikeBuilder(shapeIds.enum, input.value, (entry) => {\n if (entry.type === \"lookupEntry\") return buildNextChecksum(entry.value)\n switch (entry.type) {\n case \"void\":\n return getChecksum([shapeIds.void])\n case \"tuple\":\n return buildTuple(entry.value)\n case \"struct\":\n return buildStruct(entry.value)\n }\n })\n}\n\nconst getCycles = (graph: Graph) => {\n // Tarjan's strongly connected components\n const tarjanState = new Map<\n number,\n {\n index: number\n lowLink: number\n onStack: boolean\n }\n >()\n let index = 0\n const stack: number[] = []\n const result: Array<Set<number>> = []\n\n function strongConnect(v: number): void {\n const state = {\n index: index,\n lowLink: index,\n onStack: true,\n }\n tarjanState.set(v, state)\n index++\n stack.push(v)\n\n const edges = graph.get(v)![1]\n for (let w of edges) {\n const edgeState = tarjanState.get(w)\n if (!edgeState) {\n strongConnect(w)\n state.lowLink = Math.min(state.lowLink, tarjanState.get(w)!.lowLink)\n } else if (edgeState.onStack) {\n state.lowLink = Math.min(state.lowLink, edgeState.index)\n }\n }\n\n if (state.lowLink === state.index) {\n const component = new Set<number>()\n\n let poppedNode = -1\n do {\n poppedNode = stack.pop()!\n tarjanState.get(poppedNode)!.onStack = false\n component.add(poppedNode)\n } while (poppedNode !== v)\n\n if (component.size > 1) result.push(component)\n }\n }\n\n for (const node of graph.keys()) {\n if (!tarjanState.has(node)) {\n strongConnect(node)\n }\n }\n\n return result\n}\n\nconst getCyclicGroups = (cycles: Array<Set<number>>) => {\n const ungroupedCycles = new Set(cycles.map((_, i) => i))\n const edges = new Map(cycles.map((_, i) => [i, new Set<number>()]))\n cycles.forEach((cycle, i) => {\n cycles.slice(i + 1).forEach((otherCycle, _j) => {\n const j = _j + i + 1\n const combined = new Set([...cycle, ...otherCycle])\n if (combined.size !== cycle.size + otherCycle.size) {\n edges.get(i)!.add(j)\n edges.get(j)!.add(i)\n }\n })\n })\n const groups: Array<Set<number>> = []\n\n while (ungroupedCycles.size) {\n const group = new Set<number>()\n const toVisit = [ungroupedCycles.values().next().value]\n while (toVisit.length) {\n const idx = toVisit.pop()\n if (!ungroupedCycles.has(idx)) continue\n ungroupedCycles.delete(idx)\n\n const cycle = cycles[idx]\n cycle.forEach((v) => group.add(Number(v)))\n edges.get(idx)!.forEach((n) => toVisit.push(n))\n }\n groups.push(group)\n }\n\n return groups\n}\n\nconst sortCyclicGroups = (groups: Array<Set<number>>, graph: Graph) => {\n const getReachableNodes = (group: Set<number>) => {\n const first = group.values().next().value as number\n const entry = graph.get(first)![0]\n return Array.from(buildGraph(entry).keys())\n }\n\n const result: Array<Set<number>> = new Array()\n\n function dependentsFirst(group: Set<number>) {\n if (result.includes(group)) return\n const dependents = groups.filter(\n (candidate) =>\n candidate !== group &&\n getReachableNodes(group).some((node) => candidate.has(node)),\n )\n dependents.forEach((group) => dependentsFirst(group))\n if (result.includes(group)) return\n result.push(group)\n }\n\n groups.forEach((group) => dependentsFirst(group))\n return result\n}\n\nconst buildChecksum = (entry: LookupEntry, cache: Map<number, bigint>) => {\n if (cache.has(entry.id)) return cache.get(entry.id)!\n\n const graph = buildGraph(entry)\n const cycles = getCycles(graph)\n const cyclicGroups = getCyclicGroups(cycles)\n const sortedCyclicGroups = sortCyclicGroups(cyclicGroups, graph)\n\n // separate writeCache since we might want to not override the current cache to ensure deterministic result regardless of order\n const recursiveBuildChecksum = (\n entry: LookupEntry,\n writeCache: (id: number, value: bigint) => void,\n skipCache = false,\n ): bigint => {\n if (!skipCache && cache.has(entry.id)) {\n return cache.get(entry.id)!\n }\n const result = _buildChecksum(entry, (nextEntry) =>\n recursiveBuildChecksum(nextEntry, writeCache),\n )\n writeCache(entry.id, result)\n return result\n }\n\n sortedCyclicGroups.forEach((group) => {\n group.forEach((id) => cache.set(id, 0n))\n for (let i = 0; i < group.size; i++) {\n const results = new Map<number, bigint>()\n group.forEach((id) =>\n recursiveBuildChecksum(\n graph.get(id)![0],\n (id, value) => {\n // only store onto the actual cache results from other nodes\n // cyclic nodes would depend on sorting order.\n const writeCache = group.has(id) ? results : cache\n writeCache.set(id, value)\n },\n true,\n ),\n )\n Array.from(results.entries()).forEach(([id, checksum]) =>\n cache.set(id, checksum),\n )\n }\n })\n\n return recursiveBuildChecksum(entry, (id, value) => cache.set(id, value))\n}\n\nexport const getChecksumBuilder = (metadata: V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n\n const cache = new Map<number, bigint>()\n\n const buildDefinition = (id: number): bigint =>\n buildChecksum(getLookupEntryDef(id), cache)\n\n const buildStorage = (pallet: string, entry: string): bigint | null => {\n try {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .storage!.items.find((s) => s.name === entry)!\n\n if (storageEntry.type.tag === \"plain\")\n return buildDefinition(storageEntry.type.value)\n\n const { key, value } = storageEntry.type.value\n const val = buildDefinition(value)\n const returnKey = buildDefinition(key)\n return getChecksum([val, returnKey])\n } catch (_) {\n return null\n }\n }\n\n const buildRuntimeCall = (api: string, method: string): bigint | null => {\n try {\n const entry = metadata.apis\n .find((x) => x.name === api)\n ?.methods.find((x) => x.name === method)\n if (!entry) throw null\n\n const argNamesChecksum = getStringChecksum(\n entry.inputs.map((x) => x.name),\n )\n const argValuesChecksum = getChecksum(\n entry.inputs.map((x) => buildDefinition(x.type)),\n )\n const outputChecksum = buildDefinition(entry.output)\n\n return getChecksum([argNamesChecksum, argValuesChecksum, outputChecksum])\n } catch (_) {\n return null\n }\n }\n\n const buildComposite = (input: TupleVar | StructVar | VoidVar): bigint => {\n if (input.type === \"void\") return getChecksum([0n])\n\n if (input.type === \"tuple\") {\n const values = Object.values(input.value).map((entry) =>\n buildDefinition(entry.id),\n )\n\n return getChecksum([shapeIds.tuple, ...values])\n }\n\n // Otherwise struct\n return structLikeBuilder(shapeIds.struct, input.value, (entry) =>\n buildDefinition(entry.id),\n )\n }\n\n const buildNamedTuple = (input: StructVar): bigint => {\n return structLikeBuilder(shapeIds.tuple, input.value, (entry) =>\n buildDefinition(entry.id),\n )\n }\n\n const buildVariant =\n (variantType: \"errors\" | \"events\" | \"calls\") =>\n (pallet: string, name: string): bigint | null => {\n try {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n const enumLookup = getLookupEntryDef(\n palletEntry[variantType]! as number,\n )\n buildDefinition(enumLookup.id)\n\n if (enumLookup.type !== \"enum\") throw null\n const entry = enumLookup.value[name]\n return entry.type === \"lookupEntry\"\n ? buildDefinition(entry.value.id)\n : buildComposite(entry)\n } catch (_) {\n return null\n }\n }\n\n const buildConstant = (\n pallet: string,\n constantName: string,\n ): bigint | null => {\n try {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type)\n } catch (_) {\n return null\n }\n }\n\n const toStringEnhancer =\n <Args extends Array<any>>(\n fn: (...args: Args) => bigint | null,\n ): ((...args: Args) => string | null) =>\n (...args) =>\n fn(...args)?.toString(32) ?? null\n\n return {\n buildDefinition: toStringEnhancer(buildDefinition),\n buildRuntimeCall: toStringEnhancer(buildRuntimeCall),\n buildStorage: toStringEnhancer(buildStorage),\n buildCall: toStringEnhancer(buildVariant(\"calls\")),\n buildEvent: toStringEnhancer(buildVariant(\"events\")),\n buildError: toStringEnhancer(buildVariant(\"errors\")),\n buildConstant: toStringEnhancer(buildConstant),\n buildComposite: toStringEnhancer(buildComposite),\n buildNamedTuple: toStringEnhancer(buildNamedTuple),\n getAllGeneratedChecksums: () =>\n Array.from(cache.values()).map((v) => v.toString(32)),\n }\n}\n"],"mappings":"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","names":["withCache","entry","x","key","inner","value","group","entry","id"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lookups.ts","../src/dynamic-builder.ts","../src/with-cache.ts","../src/checksum-builder.ts"],"sourcesContent":["export * from \"./lookups\"\nexport * from \"./dynamic-builder\"\nexport * from \"./checksum-builder\"\n","import type { StringRecord, V14Lookup } from \"@polkadot-api/substrate-bindings\"\n\nexport type MetadataPrimitives =\n | \"bool\"\n | \"char\"\n | \"str\"\n | \"u8\"\n | \"u16\"\n | \"u32\"\n | \"u64\"\n | \"u128\"\n | \"u256\"\n | \"i8\"\n | \"i16\"\n | \"i32\"\n | \"i64\"\n | \"i128\"\n | \"i256\"\n\nexport type PrimitiveVar = {\n type: \"primitive\"\n value: MetadataPrimitives\n}\n\nexport type VoidVar = { type: \"void\" }\nexport type CompactVar = { type: \"compact\"; isBig: boolean | null }\nexport type BitSequenceVar = { type: \"bitSequence\" }\nexport type AccountId32 = { type: \"AccountId32\" }\nexport type AccountId20 = { type: \"AccountId20\" }\nexport type TerminalVar =\n | PrimitiveVar\n | VoidVar\n | CompactVar\n | BitSequenceVar\n | AccountId32\n | AccountId20\n\n/* Array-like vars:\n * - TupleVar: Mixed types, fixed length\n * - Sequence: One type, arbitrary length\n * - Array: One type, fixed length\n */\nexport type TupleVar = {\n type: \"tuple\"\n value: LookupEntry[]\n innerDocs: Array<string[]>\n}\nexport type StructVar = {\n type: \"struct\"\n value: StringRecord<LookupEntry>\n innerDocs: StringRecord<string[]>\n}\nexport type EnumVar = {\n type: \"enum\"\n value: StringRecord<\n (\n | { type: \"lookupEntry\"; value: LookupEntry }\n | VoidVar\n | TupleVar\n | StructVar\n ) & { idx: number }\n >\n innerDocs: StringRecord<string[]>\n}\nexport type OptionVar = {\n type: \"option\"\n value: LookupEntry\n}\nexport type ResultVar = {\n type: \"result\"\n value: { ok: LookupEntry; ko: LookupEntry }\n}\nexport type SequenceVar = {\n type: \"sequence\"\n value: LookupEntry\n}\nexport type ArrayVar = {\n type: \"array\"\n value: LookupEntry\n len: number\n}\n\nexport type ComposedVar =\n | TupleVar\n | StructVar\n | SequenceVar\n | ArrayVar\n | OptionVar\n | ResultVar\n | EnumVar\n\nexport type Var = TerminalVar | ComposedVar\n\nexport type LookupEntry = {\n id: number\n} & Var\n\nconst isBytes = (value: LookupEntry, nBytes: number) =>\n value.type === \"array\" &&\n value.len === nBytes &&\n value.value.type === \"primitive\" &&\n value.value.value === \"u8\"\n\nexport const getLookupFn = (lookupData: V14Lookup) => {\n const lookups = new Map<number, LookupEntry>()\n const from = new Set<number>()\n\n const withCache = (\n fn: (id: number) => Var,\n ): ((id: number) => LookupEntry) => {\n return (id) => {\n let entry = lookups.get(id)\n\n if (entry) return entry\n\n if (from.has(id)) {\n const entry = {\n id,\n } as LookupEntry\n\n lookups.set(id, entry)\n return entry\n }\n\n from.add(id)\n const value = fn(id)\n entry = lookups.get(id)\n\n if (entry) {\n Object.assign(entry, value)\n } else {\n entry = {\n id,\n ...value,\n }\n lookups.set(id, entry!)\n }\n from.delete(id)\n return entry\n }\n }\n\n let isAccountId32SearchOn = true\n let isAccountId20SearchOn = true\n const getLookupEntryDef = withCache((id): Var => {\n const { def, path, params } = lookupData[id]\n\n if (def.tag === \"composite\") {\n if (def.value.length === 0) return { type: \"void\" }\n\n // used to be a \"pointer\"\n if (def.value.length === 1) {\n const inner = getLookupEntryDef(def.value[0].type as number)\n\n if (\n isAccountId32SearchOn &&\n path.at(-1) === \"AccountId32\" &&\n isBytes(inner, 32)\n ) {\n isAccountId32SearchOn = false\n return { type: \"AccountId32\" }\n }\n\n if (\n isAccountId20SearchOn &&\n path.at(-1) === \"AccountId20\" &&\n isBytes(inner, 20)\n ) {\n isAccountId20SearchOn = false\n return { type: \"AccountId20\" }\n }\n\n return inner\n }\n\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n def.value.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n values[key] = getLookupEntryDef(x.type)\n innerDocs[key] = x.docs\n })\n\n return allKey\n ? {\n type: \"struct\",\n value: values as StringRecord<LookupEntry>,\n innerDocs: innerDocs as StringRecord<string[]>,\n }\n : {\n type: \"tuple\",\n value: Object.values(values),\n innerDocs: Object.values(innerDocs),\n }\n }\n\n if (def.tag === \"variant\") {\n if (\n path.length === 1 &&\n path[0] === \"Option\" &&\n params.length === 1 &&\n params[0].name === \"T\"\n ) {\n const value = getLookupEntryDef(params[0].type!)\n return value.type === \"void\"\n ? // Option<void> would return a Codec<undefined> which makes no sense\n // Therefore, we better treat it as a bool\n { type: \"primitive\", value: \"bool\" }\n : {\n type: \"option\",\n value,\n }\n }\n\n if (\n path.length === 1 &&\n path[0] === \"Result\" &&\n params.length === 2 &&\n params[0].name === \"T\" &&\n params[1].name === \"E\"\n ) {\n return {\n type: \"result\",\n value: {\n ok: getLookupEntryDef(params[0].type as number),\n ko: getLookupEntryDef(params[1].type as number),\n },\n }\n }\n if (def.value.length === 0) return { type: \"void\" }\n\n const enumValue: StringRecord<EnumVar[\"value\"][keyof EnumVar[\"value\"]]> =\n {}\n const enumDocs: StringRecord<string[]> = {}\n\n def.value.forEach((x) => {\n const key = x.name\n enumDocs[key] = x.docs\n\n if (x.fields.length === 0) {\n enumValue[key] = { type: \"void\", idx: x.index }\n return\n }\n\n if (x.fields.length === 1 && !x.fields[0].name) {\n enumValue[key] = {\n type: \"lookupEntry\",\n value: getLookupEntryDef(x.fields[0].type),\n idx: x.index,\n }\n return\n }\n\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n\n x.fields.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n values[key] = getLookupEntryDef(x.type as number)\n innerDocs[key] = x.docs\n })\n\n enumValue[key] = allKey\n ? {\n type: \"struct\",\n value: values as StringRecord<LookupEntry>,\n innerDocs: innerDocs as StringRecord<string[]>,\n idx: x.index,\n }\n : {\n type: \"tuple\",\n value: Object.values(values),\n innerDocs: Object.values(innerDocs),\n idx: x.index,\n }\n })\n\n return {\n type: \"enum\",\n value: enumValue,\n innerDocs: enumDocs,\n }\n }\n\n if (def.tag === \"sequence\") {\n const value = getLookupEntryDef(def.value as number)\n return {\n type: \"sequence\",\n value,\n }\n }\n\n if (def.tag === \"array\") {\n const { len } = def.value\n const value = getLookupEntryDef(def.value.type)\n\n if (len === 0) return { type: \"void\" }\n if (len === 1) return value\n\n return {\n type: \"array\",\n value,\n len: def.value.len,\n }\n }\n\n if (def.tag === \"tuple\") {\n if (def.value.length === 0) return { type: \"void\" }\n\n // use to be a \"pointer\"\n if (def.value.length === 1)\n return getLookupEntryDef(def.value[0] as number)\n\n const value = def.value.map((x) => getLookupEntryDef(x as number))\n const innerDocs = def.value.map((x) => lookupData[x].docs)\n\n const areAllSame = value.every((v) => v.id === value[0].id)\n if (areAllSame && innerDocs.every((doc) => doc.length === 0)) {\n return {\n type: \"array\",\n value: value[0],\n len: value.length,\n }\n }\n\n return {\n type: \"tuple\",\n value,\n innerDocs,\n }\n }\n\n if (def.tag === \"primitive\") {\n return {\n type: \"primitive\",\n value: def.value.tag,\n }\n }\n\n if (def.tag === \"compact\") {\n const translated = getLookupEntryDef(def.value) as PrimitiveVar | VoidVar\n if (translated.type === \"void\") return { type: \"compact\", isBig: null }\n\n const isBig = Number(translated.value.slice(1)) > 32\n\n return {\n type: \"compact\",\n isBig,\n }\n }\n\n // bitSequence\n return {\n type: def.tag,\n }\n })\n\n return getLookupEntryDef\n}\n","import type {\n Codec,\n StringRecord,\n V15,\n V14,\n} from \"@polkadot-api/substrate-bindings\"\nimport type { EnumVar, LookupEntry, TupleVar } from \"./lookups\"\nimport { getLookupFn } from \"./lookups\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport { withCache } from \"./with-cache\"\nimport { mapObject } from \"@polkadot-api/utils\"\n\nconst _bytes = scale.Bin()\n\nconst _buildCodec = (\n input: LookupEntry,\n cache: Map<number, Codec<any>>,\n stack: Set<number>,\n _accountId: Codec<scale.SS58String>,\n): Codec<any> => {\n if (input.type === \"primitive\") return scale[input.value]\n if (input.type === \"void\") return scale._void\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"AccountId20\") return scale.ethAccount\n if (input.type === \"compact\") return scale.compact\n if (input.type === \"bitSequence\") return scale.bitSequence\n\n const buildNextCodec = (nextInput: LookupEntry): Codec<any> =>\n buildCodec(nextInput, cache, stack, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const innerCodec = buildNextCodec(inner)\n return len ? scale.Vector(innerCodec, len) : scale.Vector(innerCodec)\n }\n\n const buildTuple = (value: LookupEntry[]) =>\n scale.Tuple(...value.map(buildNextCodec))\n\n const buildStruct = (value: StringRecord<LookupEntry>) => {\n const inner = Object.fromEntries(\n Object.entries(value).map(([key, value]) => [key, buildNextCodec(value)]),\n ) as StringRecord<Codec<any>>\n return scale.Struct(inner)\n }\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return _bytes\n }\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\")\n return scale.Bin(input.len)\n\n return buildVector(input.value, input.len)\n }\n\n if (input.type === \"sequence\") return buildVector(input.value)\n if (input.type === \"tuple\") return buildTuple(input.value)\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\") return scale.Option(buildNextCodec(input.value))\n\n if (input.type === \"result\")\n return scale.Result(\n buildNextCodec(input.value.ok),\n buildNextCodec(input.value.ko),\n )\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n if (v.type === \"void\") return scale._void\n if (v.type === \"lookupEntry\") return buildNextCodec(v.value)\n return v.type === \"tuple\" ? buildTuple(v.value) : buildStruct(v.value)\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => {\n return [key, dependencies[idx]]\n }),\n ) as StringRecord<Codec<any>>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n return areIndexesSorted\n ? scale.Variant(inner)\n : scale.Variant(inner, indexes as any)\n}\nconst buildCodec = withCache(_buildCodec, scale.Self, (res) => res)\n\nexport const getDynamicBuilder = (metadata: V14 | V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n let _accountId = scale.AccountId()\n\n const cache = new Map()\n const buildDefinition = (id: number): Codec<any> =>\n buildCodec(getLookupEntryDef(id), cache, new Set(), _accountId)\n\n const prefix = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"SS58Prefix\")\n\n let ss58Prefix: number | undefined\n if (prefix) {\n try {\n const prefixVal = buildDefinition(prefix.type).dec(prefix.value)\n if (typeof prefixVal === \"number\") {\n ss58Prefix = prefixVal\n _accountId = scale.AccountId(prefixVal)\n }\n } catch (_) {}\n }\n\n const storagePallets = new Map<string, ReturnType<typeof scale.Storage>>()\n\n const buildStorage = (pallet: string, entry: string) => {\n let storagePallet = storagePallets.get(pallet)\n if (!storagePallet)\n storagePallets.set(pallet, (storagePallet = scale.Storage(pallet)))\n\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .storage!.items.find((s) => s.name === entry)!\n\n const storageWithFallback = (\n len: number,\n ...args: Parameters<ReturnType<typeof scale.Storage>>\n ) => {\n const result = storagePallet!(...args)\n return {\n ...result,\n len,\n fallback:\n storageEntry.modifier === 1\n ? result.dec(storageEntry.fallback)\n : undefined,\n }\n }\n\n if (storageEntry.type.tag === \"plain\")\n return storageWithFallback(\n 0,\n entry,\n buildDefinition(storageEntry.type.value).dec,\n )\n\n const { key, value, hashers } = storageEntry.type.value\n const val = buildDefinition(value)\n const hashes = hashers.map((x) => scale[x.tag])\n\n const hashArgs: Array<scale.EncoderWithHash<any>> =\n hashes.length === 1\n ? [[buildDefinition(key), hashes[0]]]\n : (getLookupEntryDef(key) as TupleVar).value.map(\n (x, idx): scale.EncoderWithHash<any> => [\n buildDefinition(x.id),\n hashes[idx],\n ],\n )\n return storageWithFallback(hashes.length, entry, val.dec, ...hashArgs)\n }\n\n const buildEnumEntry = (\n entry: EnumVar[\"value\"][keyof EnumVar[\"value\"]],\n ): Codec<any> => {\n if (entry.type === \"void\") return scale._void\n if (entry.type === \"lookupEntry\") return buildDefinition(entry.value.id)\n return entry.type === \"tuple\"\n ? scale.Tuple(\n ...Object.values(entry.value).map((l) => buildDefinition(l.id)),\n )\n : scale.Struct(\n mapObject(entry.value, (x) => buildDefinition(x.id)) as StringRecord<\n Codec<any>\n >,\n )\n }\n\n const buildConstant = (pallet: string, constantName: string) => {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type as number)\n }\n\n const buildVariant =\n (type: \"errors\" | \"events\" | \"calls\") =>\n (\n pallet: string,\n name: string,\n ): {\n codec: Codec<any>\n location: [number, number]\n } => {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n const lookup = getLookupEntryDef(palletEntry[type]!)\n if (lookup.type !== \"enum\") throw null\n const entry = lookup.value[name]\n\n return {\n location: [palletEntry.index, entry.idx],\n codec: buildEnumEntry(lookup.value[name]),\n }\n }\n\n const buildRuntimeCall = (api: string, method: string) => {\n const entry = metadata.apis\n .find((x) => x.name === api)\n ?.methods.find((x) => x.name === method)\n if (!entry) throw null\n\n return {\n args: scale.Tuple(...entry.inputs.map((x) => buildDefinition(x.type))),\n value: buildDefinition(entry.output),\n }\n }\n\n return {\n buildDefinition,\n buildStorage,\n buildEvent: buildVariant(\"events\"),\n buildError: buildVariant(\"errors\"),\n buildRuntimeCall,\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n ss58Prefix,\n }\n}\n","import { LookupEntry } from \"./lookups\"\n\ntype FnWithStack<Other extends Array<any>, T> = (\n input: LookupEntry,\n cache: Map<number, T>,\n stack: Set<number>,\n ...rest: Other\n) => T\n\nexport const withCache =\n <Other extends Array<any>, T>(\n fn: FnWithStack<Other, T>,\n onEnterCircular: (\n cacheGetter: () => T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n onExitCircular: (\n outter: T,\n inner: T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n ): FnWithStack<Other, T> =>\n (input, cache, stack, ...rest) => {\n const { id } = input\n if (cache.has(id)) return cache.get(id)!\n\n if (stack.has(id)) {\n const res = onEnterCircular(() => cache.get(id)!, input, ...rest)\n cache.set(id, res)\n return res\n }\n\n stack.add(id)\n let result = fn(input, cache, stack, ...rest)\n stack.delete(id)\n\n if (cache.has(id))\n result = onExitCircular(result, cache.get(id)!, input, ...rest)\n\n cache.set(id, result)\n return result\n }\n","import type { StringRecord, V14, V15 } from \"@polkadot-api/substrate-bindings\"\nimport { h64 } from \"@polkadot-api/substrate-bindings\"\nimport {\n LookupEntry,\n MetadataPrimitives,\n StructVar,\n TupleVar,\n VoidVar,\n getLookupFn,\n} from \"./lookups\"\n\nconst textEncoder = new TextEncoder()\nconst encodeText = textEncoder.encode.bind(textEncoder)\n\nconst getChecksum = (values: Array<bigint>) => {\n const res = new Uint8Array(values.length * 8)\n const dv = new DataView(res.buffer)\n\n for (let i = 0; i < values.length; i++) dv.setBigUint64(i * 8, values[i])\n\n return h64(res)\n}\nconst getStringChecksum = (values: Array<string>) =>\n getChecksum(values.map((v) => h64(encodeText(v))))\n\ntype Shape =\n | \"primitive\"\n | \"void\"\n | \"vector\"\n | \"tuple\"\n | \"struct\"\n | \"option\"\n | \"result\"\n | \"enum\"\nconst shapeIds: Record<Shape, bigint> = {\n primitive: 0n,\n vector: 1n,\n tuple: 2n,\n struct: 3n,\n option: 4n,\n result: 5n,\n enum: 6n,\n void: 7n,\n}\n\ntype RuntimePrimitives =\n | \"undefined\"\n | \"number\"\n | \"string\"\n | \"bigint\"\n | \"boolean\"\n | \"bitSequence\"\n | \"byteSequence\"\n | \"accountId32\"\n | \"accountId20\"\n\nconst runtimePrimitiveIds: Record<RuntimePrimitives, bigint> = {\n undefined: 0n,\n number: 1n,\n string: 2n,\n bigint: 3n,\n boolean: 4n,\n bitSequence: 5n, // {bitsLen: number, bytes: Uint8Array}\n byteSequence: 6n, // Binary\n accountId32: 7n, // SS58String\n accountId20: 8n, // EthAccount\n}\n\nconst metadataPrimitiveIds: Record<MetadataPrimitives, bigint> = {\n bool: runtimePrimitiveIds.boolean,\n char: runtimePrimitiveIds.string,\n str: runtimePrimitiveIds.string,\n u8: runtimePrimitiveIds.number,\n u16: runtimePrimitiveIds.number,\n u32: runtimePrimitiveIds.number,\n u64: runtimePrimitiveIds.bigint,\n u128: runtimePrimitiveIds.bigint,\n u256: runtimePrimitiveIds.bigint,\n i8: runtimePrimitiveIds.number,\n i16: runtimePrimitiveIds.number,\n i32: runtimePrimitiveIds.number,\n i64: runtimePrimitiveIds.bigint,\n i128: runtimePrimitiveIds.bigint,\n i256: runtimePrimitiveIds.bigint,\n}\n\nconst structLikeBuilder = <T>(\n shapeId: bigint,\n input: StringRecord<T>,\n innerChecksum: (value: T) => bigint,\n) => {\n const sortedEntries = Object.entries(input).sort(([a], [b]) =>\n a.localeCompare(b),\n )\n const keysChecksum = getStringChecksum(sortedEntries.map(([key]) => key))\n const valuesChecksum = getChecksum(\n sortedEntries.map(([, entry]) => innerChecksum(entry)),\n )\n\n return getChecksum([shapeId, keysChecksum, valuesChecksum])\n}\n\ntype Graph = Map<number, [LookupEntry, Set<number>]>\nconst buildGraph = (entry: LookupEntry, result: Graph = new Map()) => {\n if (result.has(entry.id)) return result\n\n switch (entry.type) {\n case \"array\":\n case \"option\":\n case \"sequence\":\n result.set(entry.id, [entry, new Set([entry.value.id])])\n buildGraph(entry.value, result)\n break\n case \"enum\": {\n const children = Object.values(entry.value).flatMap((value) => {\n if (value.type === \"void\") return []\n if (value.type === \"lookupEntry\") return value.value\n if (value.type === \"struct\") return Object.values(value.value)\n return value.value\n })\n result.set(entry.id, [entry, new Set(children.map((child) => child.id))])\n children.forEach((child) => buildGraph(child, result))\n break\n }\n case \"result\":\n result.set(entry.id, [\n entry,\n new Set([entry.value.ok.id, entry.value.ko.id]),\n ])\n buildGraph(entry.value.ok, result)\n buildGraph(entry.value.ko, result)\n break\n case \"struct\": {\n const children = Object.values(entry.value)\n result.set(entry.id, [entry, new Set(children.map((child) => child.id))])\n children.forEach((child) => buildGraph(child, result))\n break\n }\n case \"tuple\":\n result.set(entry.id, [\n entry,\n new Set(entry.value.map((child) => child.id)),\n ])\n entry.value.forEach((child) => buildGraph(child, result))\n break\n default:\n result.set(entry.id, [entry, new Set()])\n }\n return result\n}\n\nconst _buildChecksum = (\n input: LookupEntry,\n buildNextChecksum: (entry: LookupEntry) => bigint,\n): bigint => {\n if (input.type === \"primitive\")\n return getChecksum([shapeIds.primitive, metadataPrimitiveIds[input.value]])\n\n if (input.type === \"void\") return getChecksum([shapeIds.void])\n\n if (input.type === \"compact\")\n return getChecksum([\n shapeIds.primitive,\n runtimePrimitiveIds[\n input.isBig || input.isBig === null ? \"bigint\" : \"number\"\n ],\n ])\n\n if (input.type === \"bitSequence\")\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.bitSequence])\n\n if (input.type === \"AccountId32\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId32])\n }\n\n if (input.type === \"AccountId20\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId20])\n }\n\n if (input.type === \"array\") {\n const innerValue = input.value\n if (innerValue.type === \"primitive\" && innerValue.value === \"u8\") {\n return getChecksum([\n shapeIds.primitive,\n runtimePrimitiveIds.byteSequence,\n BigInt(input.len),\n ])\n }\n const innerChecksum = buildNextChecksum(innerValue)\n\n return getChecksum([shapeIds.vector, innerChecksum, BigInt(input.len)])\n }\n\n if (input.type === \"sequence\") {\n const innerValue = input.value\n if (innerValue.type === \"primitive\" && innerValue.value === \"u8\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.byteSequence])\n }\n const innerChecksum = buildNextChecksum(innerValue)\n\n return getChecksum([shapeIds.vector, innerChecksum])\n }\n\n const buildTuple = (entries: LookupEntry[]) =>\n getChecksum([shapeIds.tuple, ...entries.map(buildNextChecksum)])\n\n const buildStruct = (entries: StringRecord<LookupEntry>) =>\n structLikeBuilder(shapeIds.struct, entries, buildNextChecksum)\n\n if (input.type === \"tuple\") return buildTuple(input.value)\n\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\")\n return getChecksum([shapeIds.option, buildNextChecksum(input.value)])\n\n if (input.type === \"result\")\n return getChecksum([\n shapeIds.result,\n buildNextChecksum(input.value.ok),\n buildNextChecksum(input.value.ko),\n ])\n\n return structLikeBuilder(shapeIds.enum, input.value, (entry) => {\n if (entry.type === \"lookupEntry\") return buildNextChecksum(entry.value)\n switch (entry.type) {\n case \"void\":\n return getChecksum([shapeIds.void])\n case \"tuple\":\n return buildTuple(entry.value)\n case \"struct\":\n return buildStruct(entry.value)\n }\n })\n}\n\nconst getCycles = (graph: Graph) => {\n // Tarjan's strongly connected components\n const tarjanState = new Map<\n number,\n {\n index: number\n lowLink: number\n onStack: boolean\n }\n >()\n let index = 0\n const stack: number[] = []\n const result: Array<Set<number>> = []\n\n function strongConnect(v: number): void {\n const state = {\n index: index,\n lowLink: index,\n onStack: true,\n }\n tarjanState.set(v, state)\n index++\n stack.push(v)\n\n const edges = graph.get(v)![1]\n for (let w of edges) {\n const edgeState = tarjanState.get(w)\n if (!edgeState) {\n strongConnect(w)\n state.lowLink = Math.min(state.lowLink, tarjanState.get(w)!.lowLink)\n } else if (edgeState.onStack) {\n state.lowLink = Math.min(state.lowLink, edgeState.index)\n }\n }\n\n if (state.lowLink === state.index) {\n const component = new Set<number>()\n\n let poppedNode = -1\n do {\n poppedNode = stack.pop()!\n tarjanState.get(poppedNode)!.onStack = false\n component.add(poppedNode)\n } while (poppedNode !== v)\n\n if (component.size > 1) result.push(component)\n }\n }\n\n for (const node of graph.keys()) {\n if (!tarjanState.has(node)) {\n strongConnect(node)\n }\n }\n\n return result\n}\n\nconst getCyclicGroups = (cycles: Array<Set<number>>) => {\n const ungroupedCycles = new Set(cycles.map((_, i) => i))\n const edges = new Map(cycles.map((_, i) => [i, new Set<number>()]))\n cycles.forEach((cycle, i) => {\n cycles.slice(i + 1).forEach((otherCycle, _j) => {\n const j = _j + i + 1\n const combined = new Set([...cycle, ...otherCycle])\n if (combined.size !== cycle.size + otherCycle.size) {\n edges.get(i)!.add(j)\n edges.get(j)!.add(i)\n }\n })\n })\n const groups: Array<Set<number>> = []\n\n while (ungroupedCycles.size) {\n const group = new Set<number>()\n const toVisit = [ungroupedCycles.values().next().value]\n while (toVisit.length) {\n const idx = toVisit.pop()\n if (!ungroupedCycles.has(idx)) continue\n ungroupedCycles.delete(idx)\n\n const cycle = cycles[idx]\n cycle.forEach((v) => group.add(Number(v)))\n edges.get(idx)!.forEach((n) => toVisit.push(n))\n }\n groups.push(group)\n }\n\n return groups\n}\n\nconst sortCyclicGroups = (groups: Array<Set<number>>, graph: Graph) => {\n const getReachableNodes = (group: Set<number>) => {\n const first = group.values().next().value as number\n const entry = graph.get(first)![0]\n return Array.from(buildGraph(entry).keys())\n }\n\n const result: Array<Set<number>> = new Array()\n\n function dependentsFirst(group: Set<number>) {\n if (result.includes(group)) return\n const dependents = groups.filter(\n (candidate) =>\n candidate !== group &&\n getReachableNodes(group).some((node) => candidate.has(node)),\n )\n dependents.forEach((group) => dependentsFirst(group))\n if (result.includes(group)) return\n result.push(group)\n }\n\n groups.forEach((group) => dependentsFirst(group))\n return result\n}\n\nconst buildChecksum = (entry: LookupEntry, cache: Map<number, bigint>) => {\n if (cache.has(entry.id)) return cache.get(entry.id)!\n\n const graph = buildGraph(entry)\n const cycles = getCycles(graph)\n const cyclicGroups = getCyclicGroups(cycles)\n const sortedCyclicGroups = sortCyclicGroups(cyclicGroups, graph)\n\n // separate writeCache since we might want to not override the current cache to ensure deterministic result regardless of order\n const recursiveBuildChecksum = (\n entry: LookupEntry,\n writeCache: (id: number, value: bigint) => void,\n skipCache = false,\n ): bigint => {\n if (!skipCache && cache.has(entry.id)) {\n return cache.get(entry.id)!\n }\n const result = _buildChecksum(entry, (nextEntry) =>\n recursiveBuildChecksum(nextEntry, writeCache),\n )\n writeCache(entry.id, result)\n return result\n }\n\n sortedCyclicGroups.forEach((group) => {\n group.forEach((id) => cache.set(id, 0n))\n for (let i = 0; i < group.size; i++) {\n const results = new Map<number, bigint>()\n group.forEach((id) =>\n recursiveBuildChecksum(\n graph.get(id)![0],\n (id, value) => {\n // only store onto the actual cache results from other nodes\n // cyclic nodes would depend on sorting order.\n const writeCache = group.has(id) ? results : cache\n writeCache.set(id, value)\n },\n true,\n ),\n )\n Array.from(results.entries()).forEach(([id, checksum]) =>\n cache.set(id, checksum),\n )\n }\n })\n\n return recursiveBuildChecksum(entry, (id, value) => cache.set(id, value))\n}\n\nexport const getChecksumBuilder = (metadata: V14 | V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n\n const cache = new Map<number, bigint>()\n\n const buildDefinition = (id: number): bigint =>\n buildChecksum(getLookupEntryDef(id), cache)\n\n const buildStorage = (pallet: string, entry: string): bigint | null => {\n try {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .storage!.items.find((s) => s.name === entry)!\n\n if (storageEntry.type.tag === \"plain\")\n return buildDefinition(storageEntry.type.value)\n\n const { key, value } = storageEntry.type.value\n const val = buildDefinition(value)\n const returnKey = buildDefinition(key)\n return getChecksum([val, returnKey])\n } catch (_) {\n return null\n }\n }\n\n const buildRuntimeCall = (api: string, method: string): bigint | null => {\n try {\n const entry = metadata.apis\n .find((x) => x.name === api)\n ?.methods.find((x) => x.name === method)\n if (!entry) throw null\n\n const argNamesChecksum = getStringChecksum(\n entry.inputs.map((x) => x.name),\n )\n const argValuesChecksum = getChecksum(\n entry.inputs.map((x) => buildDefinition(x.type)),\n )\n const outputChecksum = buildDefinition(entry.output)\n\n return getChecksum([argNamesChecksum, argValuesChecksum, outputChecksum])\n } catch (_) {\n return null\n }\n }\n\n const buildComposite = (input: TupleVar | StructVar | VoidVar): bigint => {\n if (input.type === \"void\") return getChecksum([0n])\n\n if (input.type === \"tuple\") {\n const values = Object.values(input.value).map((entry) =>\n buildDefinition(entry.id),\n )\n\n return getChecksum([shapeIds.tuple, ...values])\n }\n\n // Otherwise struct\n return structLikeBuilder(shapeIds.struct, input.value, (entry) =>\n buildDefinition(entry.id),\n )\n }\n\n const buildNamedTuple = (input: StructVar): bigint => {\n return structLikeBuilder(shapeIds.tuple, input.value, (entry) =>\n buildDefinition(entry.id),\n )\n }\n\n const buildVariant =\n (variantType: \"errors\" | \"events\" | \"calls\") =>\n (pallet: string, name: string): bigint | null => {\n try {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n const enumLookup = getLookupEntryDef(\n palletEntry[variantType]! as number,\n )\n buildDefinition(enumLookup.id)\n\n if (enumLookup.type !== \"enum\") throw null\n const entry = enumLookup.value[name]\n return entry.type === \"lookupEntry\"\n ? buildDefinition(entry.value.id)\n : buildComposite(entry)\n } catch (_) {\n return null\n }\n }\n\n const buildConstant = (\n pallet: string,\n constantName: string,\n ): bigint | null => {\n try {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type)\n } catch (_) {\n return null\n }\n }\n\n const toStringEnhancer =\n <Args extends Array<any>>(\n fn: (...args: Args) => bigint | null,\n ): ((...args: Args) => string | null) =>\n (...args) =>\n fn(...args)?.toString(32) ?? null\n\n return {\n buildDefinition: toStringEnhancer(buildDefinition),\n buildRuntimeCall: toStringEnhancer(buildRuntimeCall),\n buildStorage: toStringEnhancer(buildStorage),\n buildCall: toStringEnhancer(buildVariant(\"calls\")),\n buildEvent: toStringEnhancer(buildVariant(\"events\")),\n buildError: toStringEnhancer(buildVariant(\"errors\")),\n buildConstant: toStringEnhancer(buildConstant),\n buildComposite: toStringEnhancer(buildComposite),\n buildNamedTuple: toStringEnhancer(buildNamedTuple),\n getAllGeneratedChecksums: () =>\n Array.from(cache.values()).map((v) => v.toString(32)),\n }\n}\n"],"mappings":"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","names":["withCache","entry","x","key","inner","value","group","entry","id"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// src/lookups.ts
|
|
2
|
+
var isBytes = (value, nBytes) => value.type === "array" && value.len === nBytes && value.value.type === "primitive" && value.value.value === "u8";
|
|
2
3
|
var getLookupFn = (lookupData) => {
|
|
3
4
|
const lookups = /* @__PURE__ */ new Map();
|
|
4
5
|
const from = /* @__PURE__ */ new Set();
|
|
@@ -31,17 +32,23 @@ var getLookupFn = (lookupData) => {
|
|
|
31
32
|
};
|
|
32
33
|
};
|
|
33
34
|
let isAccountId32SearchOn = true;
|
|
35
|
+
let isAccountId20SearchOn = true;
|
|
34
36
|
const getLookupEntryDef = withCache2((id) => {
|
|
35
37
|
const { def, path, params } = lookupData[id];
|
|
36
38
|
if (def.tag === "composite") {
|
|
37
39
|
if (def.value.length === 0)
|
|
38
40
|
return { type: "void" };
|
|
39
41
|
if (def.value.length === 1) {
|
|
40
|
-
|
|
42
|
+
const inner = getLookupEntryDef(def.value[0].type);
|
|
43
|
+
if (isAccountId32SearchOn && path.at(-1) === "AccountId32" && isBytes(inner, 32)) {
|
|
41
44
|
isAccountId32SearchOn = false;
|
|
42
45
|
return { type: "AccountId32" };
|
|
43
46
|
}
|
|
44
|
-
|
|
47
|
+
if (isAccountId20SearchOn && path.at(-1) === "AccountId20" && isBytes(inner, 20)) {
|
|
48
|
+
isAccountId20SearchOn = false;
|
|
49
|
+
return { type: "AccountId20" };
|
|
50
|
+
}
|
|
51
|
+
return inner;
|
|
45
52
|
}
|
|
46
53
|
let allKey = true;
|
|
47
54
|
const values = {};
|
|
@@ -225,6 +232,8 @@ var _buildCodec = (input, cache, stack, _accountId) => {
|
|
|
225
232
|
return scale._void;
|
|
226
233
|
if (input.type === "AccountId32")
|
|
227
234
|
return _accountId;
|
|
235
|
+
if (input.type === "AccountId20")
|
|
236
|
+
return scale.ethAccount;
|
|
228
237
|
if (input.type === "compact")
|
|
229
238
|
return scale.compact;
|
|
230
239
|
if (input.type === "bitSequence")
|
|
@@ -407,8 +416,10 @@ var runtimePrimitiveIds = {
|
|
|
407
416
|
// {bitsLen: number, bytes: Uint8Array}
|
|
408
417
|
byteSequence: 6n,
|
|
409
418
|
// Binary
|
|
410
|
-
|
|
419
|
+
accountId32: 7n,
|
|
411
420
|
// SS58String
|
|
421
|
+
accountId20: 8n
|
|
422
|
+
// EthAccount
|
|
412
423
|
};
|
|
413
424
|
var metadataPrimitiveIds = {
|
|
414
425
|
bool: runtimePrimitiveIds.boolean,
|
|
@@ -500,7 +511,10 @@ var _buildChecksum = (input, buildNextChecksum) => {
|
|
|
500
511
|
if (input.type === "bitSequence")
|
|
501
512
|
return getChecksum([shapeIds.primitive, runtimePrimitiveIds.bitSequence]);
|
|
502
513
|
if (input.type === "AccountId32") {
|
|
503
|
-
return getChecksum([shapeIds.primitive, runtimePrimitiveIds.
|
|
514
|
+
return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId32]);
|
|
515
|
+
}
|
|
516
|
+
if (input.type === "AccountId20") {
|
|
517
|
+
return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId20]);
|
|
504
518
|
}
|
|
505
519
|
if (input.type === "array") {
|
|
506
520
|
const innerValue = input.value;
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lookups.ts","../src/dynamic-builder.ts","../src/with-cache.ts","../src/checksum-builder.ts"],"sourcesContent":["import type { StringRecord, V14Lookup } from \"@polkadot-api/substrate-bindings\"\n\nexport type MetadataPrimitives =\n | \"bool\"\n | \"char\"\n | \"str\"\n | \"u8\"\n | \"u16\"\n | \"u32\"\n | \"u64\"\n | \"u128\"\n | \"u256\"\n | \"i8\"\n | \"i16\"\n | \"i32\"\n | \"i64\"\n | \"i128\"\n | \"i256\"\n\nexport type PrimitiveVar = {\n type: \"primitive\"\n value: MetadataPrimitives\n}\n\nexport type VoidVar = { type: \"void\" }\nexport type CompactVar = { type: \"compact\"; isBig: boolean | null }\nexport type BitSequenceVar = { type: \"bitSequence\" }\nexport type AccountId32 = { type: \"AccountId32\" }\nexport type TerminalVar =\n | PrimitiveVar\n | VoidVar\n | CompactVar\n | BitSequenceVar\n | AccountId32\n\n/* Array-like vars:\n * - TupleVar: Mixed types, fixed length\n * - Sequence: One type, arbitrary length\n * - Array: One type, fixed length\n */\nexport type TupleVar = {\n type: \"tuple\"\n value: LookupEntry[]\n innerDocs: Array<string[]>\n}\nexport type StructVar = {\n type: \"struct\"\n value: StringRecord<LookupEntry>\n innerDocs: StringRecord<string[]>\n}\nexport type EnumVar = {\n type: \"enum\"\n value: StringRecord<\n (\n | { type: \"lookupEntry\"; value: LookupEntry }\n | VoidVar\n | TupleVar\n | StructVar\n ) & { idx: number }\n >\n innerDocs: StringRecord<string[]>\n}\nexport type OptionVar = {\n type: \"option\"\n value: LookupEntry\n}\nexport type ResultVar = {\n type: \"result\"\n value: { ok: LookupEntry; ko: LookupEntry }\n}\nexport type SequenceVar = {\n type: \"sequence\"\n value: LookupEntry\n}\nexport type ArrayVar = {\n type: \"array\"\n value: LookupEntry\n len: number\n}\n\nexport type ComposedVar =\n | TupleVar\n | StructVar\n | SequenceVar\n | ArrayVar\n | OptionVar\n | ResultVar\n | EnumVar\n\nexport type Var = TerminalVar | ComposedVar\n\nexport type LookupEntry = {\n id: number\n} & Var\n\nexport const getLookupFn = (lookupData: V14Lookup) => {\n const lookups = new Map<number, LookupEntry>()\n const from = new Set<number>()\n\n const withCache = (\n fn: (id: number) => Var,\n ): ((id: number) => LookupEntry) => {\n return (id) => {\n let entry = lookups.get(id)\n\n if (entry) return entry\n\n if (from.has(id)) {\n const entry = {\n id,\n } as LookupEntry\n\n lookups.set(id, entry)\n return entry\n }\n\n from.add(id)\n const value = fn(id)\n entry = lookups.get(id)\n\n if (entry) {\n Object.assign(entry, value)\n } else {\n entry = {\n id,\n ...value,\n }\n lookups.set(id, entry!)\n }\n from.delete(id)\n return entry\n }\n }\n\n let isAccountId32SearchOn = true\n const getLookupEntryDef = withCache((id): Var => {\n const { def, path, params } = lookupData[id]\n\n if (def.tag === \"composite\") {\n if (def.value.length === 0) return { type: \"void\" }\n\n // used to be a \"pointer\"\n if (def.value.length === 1) {\n if (\n isAccountId32SearchOn &&\n path.join(\",\") === \"sp_core,crypto,AccountId32\"\n ) {\n isAccountId32SearchOn = false\n return { type: \"AccountId32\" }\n }\n return getLookupEntryDef(def.value[0].type as number)\n }\n\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n def.value.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n values[key] = getLookupEntryDef(x.type)\n innerDocs[key] = x.docs\n })\n\n return allKey\n ? {\n type: \"struct\",\n value: values as StringRecord<LookupEntry>,\n innerDocs: innerDocs as StringRecord<string[]>,\n }\n : {\n type: \"tuple\",\n value: Object.values(values),\n innerDocs: Object.values(innerDocs),\n }\n }\n\n if (def.tag === \"variant\") {\n if (\n path.length === 1 &&\n path[0] === \"Option\" &&\n params.length === 1 &&\n params[0].name === \"T\"\n ) {\n const value = getLookupEntryDef(params[0].type!)\n return value.type === \"void\"\n ? // Option<void> would return a Codec<undefined> which makes no sense\n // Therefore, we better treat it as a bool\n { type: \"primitive\", value: \"bool\" }\n : {\n type: \"option\",\n value,\n }\n }\n\n if (\n path.length === 1 &&\n path[0] === \"Result\" &&\n params.length === 2 &&\n params[0].name === \"T\" &&\n params[1].name === \"E\"\n ) {\n return {\n type: \"result\",\n value: {\n ok: getLookupEntryDef(params[0].type as number),\n ko: getLookupEntryDef(params[1].type as number),\n },\n }\n }\n if (def.value.length === 0) return { type: \"void\" }\n\n const enumValue: StringRecord<EnumVar[\"value\"][keyof EnumVar[\"value\"]]> =\n {}\n const enumDocs: StringRecord<string[]> = {}\n\n def.value.forEach((x) => {\n const key = x.name\n enumDocs[key] = x.docs\n\n if (x.fields.length === 0) {\n enumValue[key] = { type: \"void\", idx: x.index }\n return\n }\n\n if (x.fields.length === 1 && !x.fields[0].name) {\n enumValue[key] = {\n type: \"lookupEntry\",\n value: getLookupEntryDef(x.fields[0].type),\n idx: x.index,\n }\n return\n }\n\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n\n x.fields.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n values[key] = getLookupEntryDef(x.type as number)\n innerDocs[key] = x.docs\n })\n\n enumValue[key] = allKey\n ? {\n type: \"struct\",\n value: values as StringRecord<LookupEntry>,\n innerDocs: innerDocs as StringRecord<string[]>,\n idx: x.index,\n }\n : {\n type: \"tuple\",\n value: Object.values(values),\n innerDocs: Object.values(innerDocs),\n idx: x.index,\n }\n })\n\n return {\n type: \"enum\",\n value: enumValue,\n innerDocs: enumDocs,\n }\n }\n\n if (def.tag === \"sequence\") {\n const value = getLookupEntryDef(def.value as number)\n return {\n type: \"sequence\",\n value,\n }\n }\n\n if (def.tag === \"array\") {\n const { len } = def.value\n const value = getLookupEntryDef(def.value.type)\n\n if (len === 0) return { type: \"void\" }\n if (len === 1) return value\n\n return {\n type: \"array\",\n value,\n len: def.value.len,\n }\n }\n\n if (def.tag === \"tuple\") {\n if (def.value.length === 0) return { type: \"void\" }\n\n // use to be a \"pointer\"\n if (def.value.length === 1)\n return getLookupEntryDef(def.value[0] as number)\n\n const value = def.value.map((x) => getLookupEntryDef(x as number))\n const innerDocs = def.value.map((x) => lookupData[x].docs)\n\n const areAllSame = value.every((v) => v.id === value[0].id)\n if (areAllSame && innerDocs.every((doc) => doc.length === 0)) {\n return {\n type: \"array\",\n value: value[0],\n len: value.length,\n }\n }\n\n return {\n type: \"tuple\",\n value,\n innerDocs,\n }\n }\n\n if (def.tag === \"primitive\") {\n return {\n type: \"primitive\",\n value: def.value.tag,\n }\n }\n\n if (def.tag === \"compact\") {\n const translated = getLookupEntryDef(def.value) as PrimitiveVar | VoidVar\n if (translated.type === \"void\") return { type: \"compact\", isBig: null }\n\n const isBig = Number(translated.value.slice(1)) > 32\n\n return {\n type: \"compact\",\n isBig,\n }\n }\n\n // bitSequence\n return {\n type: def.tag,\n }\n })\n\n return getLookupEntryDef\n}\n","import type { Codec, StringRecord, V15 } from \"@polkadot-api/substrate-bindings\"\nimport type { EnumVar, LookupEntry, TupleVar } from \"./lookups\"\nimport { getLookupFn } from \"./lookups\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport { withCache } from \"./with-cache\"\nimport { mapObject } from \"@polkadot-api/utils\"\n\nconst _bytes = scale.Bin()\n\nconst _buildCodec = (\n input: LookupEntry,\n cache: Map<number, Codec<any>>,\n stack: Set<number>,\n _accountId: Codec<scale.SS58String>,\n): Codec<any> => {\n if (input.type === \"primitive\") return scale[input.value]\n if (input.type === \"void\") return scale._void\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"compact\") return scale.compact\n if (input.type === \"bitSequence\") return scale.bitSequence\n\n const buildNextCodec = (nextInput: LookupEntry): Codec<any> =>\n buildCodec(nextInput, cache, stack, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const innerCodec = buildNextCodec(inner)\n return len ? scale.Vector(innerCodec, len) : scale.Vector(innerCodec)\n }\n\n const buildTuple = (value: LookupEntry[]) =>\n scale.Tuple(...value.map(buildNextCodec))\n\n const buildStruct = (value: StringRecord<LookupEntry>) => {\n const inner = Object.fromEntries(\n Object.entries(value).map(([key, value]) => [key, buildNextCodec(value)]),\n ) as StringRecord<Codec<any>>\n return scale.Struct(inner)\n }\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return _bytes\n }\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\")\n return scale.Bin(input.len)\n\n return buildVector(input.value, input.len)\n }\n\n if (input.type === \"sequence\") return buildVector(input.value)\n if (input.type === \"tuple\") return buildTuple(input.value)\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\") return scale.Option(buildNextCodec(input.value))\n\n if (input.type === \"result\")\n return scale.Result(\n buildNextCodec(input.value.ok),\n buildNextCodec(input.value.ko),\n )\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n if (v.type === \"void\") return scale._void\n if (v.type === \"lookupEntry\") return buildNextCodec(v.value)\n return v.type === \"tuple\" ? buildTuple(v.value) : buildStruct(v.value)\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => {\n return [key, dependencies[idx]]\n }),\n ) as StringRecord<Codec<any>>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n return areIndexesSorted\n ? scale.Variant(inner)\n : scale.Variant(inner, indexes as any)\n}\nconst buildCodec = withCache(_buildCodec, scale.Self, (res) => res)\n\nexport const getDynamicBuilder = (metadata: V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n let _accountId = scale.AccountId()\n\n const cache = new Map()\n const buildDefinition = (id: number): Codec<any> =>\n buildCodec(getLookupEntryDef(id), cache, new Set(), _accountId)\n\n const prefix = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"SS58Prefix\")\n\n let ss58Prefix: number | undefined\n if (prefix) {\n try {\n const prefixVal = buildDefinition(prefix.type).dec(prefix.value)\n if (typeof prefixVal === \"number\") {\n ss58Prefix = prefixVal\n _accountId = scale.AccountId(prefixVal)\n }\n } catch (_) {}\n }\n\n const storagePallets = new Map<string, ReturnType<typeof scale.Storage>>()\n\n const buildStorage = (pallet: string, entry: string) => {\n let storagePallet = storagePallets.get(pallet)\n if (!storagePallet)\n storagePallets.set(pallet, (storagePallet = scale.Storage(pallet)))\n\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .storage!.items.find((s) => s.name === entry)!\n\n const storageWithFallback = (\n len: number,\n ...args: Parameters<ReturnType<typeof scale.Storage>>\n ) => {\n const result = storagePallet!(...args)\n return {\n ...result,\n len,\n fallback:\n storageEntry.modifier === 1\n ? result.dec(storageEntry.fallback)\n : undefined,\n }\n }\n\n if (storageEntry.type.tag === \"plain\")\n return storageWithFallback(\n 0,\n entry,\n buildDefinition(storageEntry.type.value).dec,\n )\n\n const { key, value, hashers } = storageEntry.type.value\n const val = buildDefinition(value)\n const hashes = hashers.map((x) => scale[x.tag])\n\n const hashArgs: Array<scale.EncoderWithHash<any>> =\n hashes.length === 1\n ? [[buildDefinition(key), hashes[0]]]\n : (getLookupEntryDef(key) as TupleVar).value.map(\n (x, idx): scale.EncoderWithHash<any> => [\n buildDefinition(x.id),\n hashes[idx],\n ],\n )\n return storageWithFallback(hashes.length, entry, val.dec, ...hashArgs)\n }\n\n const buildEnumEntry = (\n entry: EnumVar[\"value\"][keyof EnumVar[\"value\"]],\n ): Codec<any> => {\n if (entry.type === \"void\") return scale._void\n if (entry.type === \"lookupEntry\") return buildDefinition(entry.value.id)\n return entry.type === \"tuple\"\n ? scale.Tuple(\n ...Object.values(entry.value).map((l) => buildDefinition(l.id)),\n )\n : scale.Struct(\n mapObject(entry.value, (x) => buildDefinition(x.id)) as StringRecord<\n Codec<any>\n >,\n )\n }\n\n const buildConstant = (pallet: string, constantName: string) => {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type as number)\n }\n\n const buildVariant =\n (type: \"errors\" | \"events\" | \"calls\") =>\n (\n pallet: string,\n name: string,\n ): {\n codec: Codec<any>\n location: [number, number]\n } => {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n const lookup = getLookupEntryDef(palletEntry[type]!)\n if (lookup.type !== \"enum\") throw null\n const entry = lookup.value[name]\n\n return {\n location: [palletEntry.index, entry.idx],\n codec: buildEnumEntry(lookup.value[name]),\n }\n }\n\n const buildRuntimeCall = (api: string, method: string) => {\n const entry = metadata.apis\n .find((x) => x.name === api)\n ?.methods.find((x) => x.name === method)\n if (!entry) throw null\n\n return {\n args: scale.Tuple(...entry.inputs.map((x) => buildDefinition(x.type))),\n value: buildDefinition(entry.output),\n }\n }\n\n return {\n buildDefinition,\n buildStorage,\n buildEvent: buildVariant(\"events\"),\n buildError: buildVariant(\"errors\"),\n buildRuntimeCall,\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n ss58Prefix,\n }\n}\n","import { LookupEntry } from \"./lookups\"\n\ntype FnWithStack<Other extends Array<any>, T> = (\n input: LookupEntry,\n cache: Map<number, T>,\n stack: Set<number>,\n ...rest: Other\n) => T\n\nexport const withCache =\n <Other extends Array<any>, T>(\n fn: FnWithStack<Other, T>,\n onEnterCircular: (\n cacheGetter: () => T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n onExitCircular: (\n outter: T,\n inner: T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n ): FnWithStack<Other, T> =>\n (input, cache, stack, ...rest) => {\n const { id } = input\n if (cache.has(id)) return cache.get(id)!\n\n if (stack.has(id)) {\n const res = onEnterCircular(() => cache.get(id)!, input, ...rest)\n cache.set(id, res)\n return res\n }\n\n stack.add(id)\n let result = fn(input, cache, stack, ...rest)\n stack.delete(id)\n\n if (cache.has(id))\n result = onExitCircular(result, cache.get(id)!, input, ...rest)\n\n cache.set(id, result)\n return result\n }\n","import type { StringRecord, V15 } from \"@polkadot-api/substrate-bindings\"\nimport { h64 } from \"@polkadot-api/substrate-bindings\"\nimport {\n LookupEntry,\n MetadataPrimitives,\n StructVar,\n TupleVar,\n VoidVar,\n getLookupFn,\n} from \"./lookups\"\n\nconst textEncoder = new TextEncoder()\nconst encodeText = textEncoder.encode.bind(textEncoder)\n\nconst getChecksum = (values: Array<bigint>) => {\n const res = new Uint8Array(values.length * 8)\n const dv = new DataView(res.buffer)\n\n for (let i = 0; i < values.length; i++) dv.setBigUint64(i * 8, values[i])\n\n return h64(res)\n}\nconst getStringChecksum = (values: Array<string>) =>\n getChecksum(values.map((v) => h64(encodeText(v))))\n\ntype Shape =\n | \"primitive\"\n | \"void\"\n | \"vector\"\n | \"tuple\"\n | \"struct\"\n | \"option\"\n | \"result\"\n | \"enum\"\nconst shapeIds: Record<Shape, bigint> = {\n primitive: 0n,\n vector: 1n,\n tuple: 2n,\n struct: 3n,\n option: 4n,\n result: 5n,\n enum: 6n,\n void: 7n,\n}\n\ntype RuntimePrimitives =\n | \"undefined\"\n | \"number\"\n | \"string\"\n | \"bigint\"\n | \"boolean\"\n | \"bitSequence\"\n | \"byteSequence\"\n | \"accountId\"\n\nconst runtimePrimitiveIds: Record<RuntimePrimitives, bigint> = {\n undefined: 0n,\n number: 1n,\n string: 2n,\n bigint: 3n,\n boolean: 4n,\n bitSequence: 5n, // {bitsLen: number, bytes: Uint8Array}\n byteSequence: 6n, // Binary\n accountId: 7n, // SS58String\n}\n\nconst metadataPrimitiveIds: Record<MetadataPrimitives, bigint> = {\n bool: runtimePrimitiveIds.boolean,\n char: runtimePrimitiveIds.string,\n str: runtimePrimitiveIds.string,\n u8: runtimePrimitiveIds.number,\n u16: runtimePrimitiveIds.number,\n u32: runtimePrimitiveIds.number,\n u64: runtimePrimitiveIds.bigint,\n u128: runtimePrimitiveIds.bigint,\n u256: runtimePrimitiveIds.bigint,\n i8: runtimePrimitiveIds.number,\n i16: runtimePrimitiveIds.number,\n i32: runtimePrimitiveIds.number,\n i64: runtimePrimitiveIds.bigint,\n i128: runtimePrimitiveIds.bigint,\n i256: runtimePrimitiveIds.bigint,\n}\n\nconst structLikeBuilder = <T>(\n shapeId: bigint,\n input: StringRecord<T>,\n innerChecksum: (value: T) => bigint,\n) => {\n const sortedEntries = Object.entries(input).sort(([a], [b]) =>\n a.localeCompare(b),\n )\n const keysChecksum = getStringChecksum(sortedEntries.map(([key]) => key))\n const valuesChecksum = getChecksum(\n sortedEntries.map(([, entry]) => innerChecksum(entry)),\n )\n\n return getChecksum([shapeId, keysChecksum, valuesChecksum])\n}\n\ntype Graph = Map<number, [LookupEntry, Set<number>]>\nconst buildGraph = (entry: LookupEntry, result: Graph = new Map()) => {\n if (result.has(entry.id)) return result\n\n switch (entry.type) {\n case \"array\":\n case \"option\":\n case \"sequence\":\n result.set(entry.id, [entry, new Set([entry.value.id])])\n buildGraph(entry.value, result)\n break\n case \"enum\": {\n const children = Object.values(entry.value).flatMap((value) => {\n if (value.type === \"void\") return []\n if (value.type === \"lookupEntry\") return value.value\n if (value.type === \"struct\") return Object.values(value.value)\n return value.value\n })\n result.set(entry.id, [entry, new Set(children.map((child) => child.id))])\n children.forEach((child) => buildGraph(child, result))\n break\n }\n case \"result\":\n result.set(entry.id, [\n entry,\n new Set([entry.value.ok.id, entry.value.ko.id]),\n ])\n buildGraph(entry.value.ok, result)\n buildGraph(entry.value.ko, result)\n break\n case \"struct\": {\n const children = Object.values(entry.value)\n result.set(entry.id, [entry, new Set(children.map((child) => child.id))])\n children.forEach((child) => buildGraph(child, result))\n break\n }\n case \"tuple\":\n result.set(entry.id, [\n entry,\n new Set(entry.value.map((child) => child.id)),\n ])\n entry.value.forEach((child) => buildGraph(child, result))\n break\n default:\n result.set(entry.id, [entry, new Set()])\n }\n return result\n}\n\nconst _buildChecksum = (\n input: LookupEntry,\n buildNextChecksum: (entry: LookupEntry) => bigint,\n): bigint => {\n if (input.type === \"primitive\")\n return getChecksum([shapeIds.primitive, metadataPrimitiveIds[input.value]])\n\n if (input.type === \"void\") return getChecksum([shapeIds.void])\n\n if (input.type === \"compact\")\n return getChecksum([\n shapeIds.primitive,\n runtimePrimitiveIds[\n input.isBig || input.isBig === null ? \"bigint\" : \"number\"\n ],\n ])\n\n if (input.type === \"bitSequence\")\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.bitSequence])\n\n if (input.type === \"AccountId32\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId])\n }\n\n if (input.type === \"array\") {\n const innerValue = input.value\n if (innerValue.type === \"primitive\" && innerValue.value === \"u8\") {\n return getChecksum([\n shapeIds.primitive,\n runtimePrimitiveIds.byteSequence,\n BigInt(input.len),\n ])\n }\n const innerChecksum = buildNextChecksum(innerValue)\n\n return getChecksum([shapeIds.vector, innerChecksum, BigInt(input.len)])\n }\n\n if (input.type === \"sequence\") {\n const innerValue = input.value\n if (innerValue.type === \"primitive\" && innerValue.value === \"u8\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.byteSequence])\n }\n const innerChecksum = buildNextChecksum(innerValue)\n\n return getChecksum([shapeIds.vector, innerChecksum])\n }\n\n const buildTuple = (entries: LookupEntry[]) =>\n getChecksum([shapeIds.tuple, ...entries.map(buildNextChecksum)])\n\n const buildStruct = (entries: StringRecord<LookupEntry>) =>\n structLikeBuilder(shapeIds.struct, entries, buildNextChecksum)\n\n if (input.type === \"tuple\") return buildTuple(input.value)\n\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\")\n return getChecksum([shapeIds.option, buildNextChecksum(input.value)])\n\n if (input.type === \"result\")\n return getChecksum([\n shapeIds.result,\n buildNextChecksum(input.value.ok),\n buildNextChecksum(input.value.ko),\n ])\n\n return structLikeBuilder(shapeIds.enum, input.value, (entry) => {\n if (entry.type === \"lookupEntry\") return buildNextChecksum(entry.value)\n switch (entry.type) {\n case \"void\":\n return getChecksum([shapeIds.void])\n case \"tuple\":\n return buildTuple(entry.value)\n case \"struct\":\n return buildStruct(entry.value)\n }\n })\n}\n\nconst getCycles = (graph: Graph) => {\n // Tarjan's strongly connected components\n const tarjanState = new Map<\n number,\n {\n index: number\n lowLink: number\n onStack: boolean\n }\n >()\n let index = 0\n const stack: number[] = []\n const result: Array<Set<number>> = []\n\n function strongConnect(v: number): void {\n const state = {\n index: index,\n lowLink: index,\n onStack: true,\n }\n tarjanState.set(v, state)\n index++\n stack.push(v)\n\n const edges = graph.get(v)![1]\n for (let w of edges) {\n const edgeState = tarjanState.get(w)\n if (!edgeState) {\n strongConnect(w)\n state.lowLink = Math.min(state.lowLink, tarjanState.get(w)!.lowLink)\n } else if (edgeState.onStack) {\n state.lowLink = Math.min(state.lowLink, edgeState.index)\n }\n }\n\n if (state.lowLink === state.index) {\n const component = new Set<number>()\n\n let poppedNode = -1\n do {\n poppedNode = stack.pop()!\n tarjanState.get(poppedNode)!.onStack = false\n component.add(poppedNode)\n } while (poppedNode !== v)\n\n if (component.size > 1) result.push(component)\n }\n }\n\n for (const node of graph.keys()) {\n if (!tarjanState.has(node)) {\n strongConnect(node)\n }\n }\n\n return result\n}\n\nconst getCyclicGroups = (cycles: Array<Set<number>>) => {\n const ungroupedCycles = new Set(cycles.map((_, i) => i))\n const edges = new Map(cycles.map((_, i) => [i, new Set<number>()]))\n cycles.forEach((cycle, i) => {\n cycles.slice(i + 1).forEach((otherCycle, _j) => {\n const j = _j + i + 1\n const combined = new Set([...cycle, ...otherCycle])\n if (combined.size !== cycle.size + otherCycle.size) {\n edges.get(i)!.add(j)\n edges.get(j)!.add(i)\n }\n })\n })\n const groups: Array<Set<number>> = []\n\n while (ungroupedCycles.size) {\n const group = new Set<number>()\n const toVisit = [ungroupedCycles.values().next().value]\n while (toVisit.length) {\n const idx = toVisit.pop()\n if (!ungroupedCycles.has(idx)) continue\n ungroupedCycles.delete(idx)\n\n const cycle = cycles[idx]\n cycle.forEach((v) => group.add(Number(v)))\n edges.get(idx)!.forEach((n) => toVisit.push(n))\n }\n groups.push(group)\n }\n\n return groups\n}\n\nconst sortCyclicGroups = (groups: Array<Set<number>>, graph: Graph) => {\n const getReachableNodes = (group: Set<number>) => {\n const first = group.values().next().value as number\n const entry = graph.get(first)![0]\n return Array.from(buildGraph(entry).keys())\n }\n\n const result: Array<Set<number>> = new Array()\n\n function dependentsFirst(group: Set<number>) {\n if (result.includes(group)) return\n const dependents = groups.filter(\n (candidate) =>\n candidate !== group &&\n getReachableNodes(group).some((node) => candidate.has(node)),\n )\n dependents.forEach((group) => dependentsFirst(group))\n if (result.includes(group)) return\n result.push(group)\n }\n\n groups.forEach((group) => dependentsFirst(group))\n return result\n}\n\nconst buildChecksum = (entry: LookupEntry, cache: Map<number, bigint>) => {\n if (cache.has(entry.id)) return cache.get(entry.id)!\n\n const graph = buildGraph(entry)\n const cycles = getCycles(graph)\n const cyclicGroups = getCyclicGroups(cycles)\n const sortedCyclicGroups = sortCyclicGroups(cyclicGroups, graph)\n\n // separate writeCache since we might want to not override the current cache to ensure deterministic result regardless of order\n const recursiveBuildChecksum = (\n entry: LookupEntry,\n writeCache: (id: number, value: bigint) => void,\n skipCache = false,\n ): bigint => {\n if (!skipCache && cache.has(entry.id)) {\n return cache.get(entry.id)!\n }\n const result = _buildChecksum(entry, (nextEntry) =>\n recursiveBuildChecksum(nextEntry, writeCache),\n )\n writeCache(entry.id, result)\n return result\n }\n\n sortedCyclicGroups.forEach((group) => {\n group.forEach((id) => cache.set(id, 0n))\n for (let i = 0; i < group.size; i++) {\n const results = new Map<number, bigint>()\n group.forEach((id) =>\n recursiveBuildChecksum(\n graph.get(id)![0],\n (id, value) => {\n // only store onto the actual cache results from other nodes\n // cyclic nodes would depend on sorting order.\n const writeCache = group.has(id) ? results : cache\n writeCache.set(id, value)\n },\n true,\n ),\n )\n Array.from(results.entries()).forEach(([id, checksum]) =>\n cache.set(id, checksum),\n )\n }\n })\n\n return recursiveBuildChecksum(entry, (id, value) => cache.set(id, value))\n}\n\nexport const getChecksumBuilder = (metadata: V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n\n const cache = new Map<number, bigint>()\n\n const buildDefinition = (id: number): bigint =>\n buildChecksum(getLookupEntryDef(id), cache)\n\n const buildStorage = (pallet: string, entry: string): bigint | null => {\n try {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .storage!.items.find((s) => s.name === entry)!\n\n if (storageEntry.type.tag === \"plain\")\n return buildDefinition(storageEntry.type.value)\n\n const { key, value } = storageEntry.type.value\n const val = buildDefinition(value)\n const returnKey = buildDefinition(key)\n return getChecksum([val, returnKey])\n } catch (_) {\n return null\n }\n }\n\n const buildRuntimeCall = (api: string, method: string): bigint | null => {\n try {\n const entry = metadata.apis\n .find((x) => x.name === api)\n ?.methods.find((x) => x.name === method)\n if (!entry) throw null\n\n const argNamesChecksum = getStringChecksum(\n entry.inputs.map((x) => x.name),\n )\n const argValuesChecksum = getChecksum(\n entry.inputs.map((x) => buildDefinition(x.type)),\n )\n const outputChecksum = buildDefinition(entry.output)\n\n return getChecksum([argNamesChecksum, argValuesChecksum, outputChecksum])\n } catch (_) {\n return null\n }\n }\n\n const buildComposite = (input: TupleVar | StructVar | VoidVar): bigint => {\n if (input.type === \"void\") return getChecksum([0n])\n\n if (input.type === \"tuple\") {\n const values = Object.values(input.value).map((entry) =>\n buildDefinition(entry.id),\n )\n\n return getChecksum([shapeIds.tuple, ...values])\n }\n\n // Otherwise struct\n return structLikeBuilder(shapeIds.struct, input.value, (entry) =>\n buildDefinition(entry.id),\n )\n }\n\n const buildNamedTuple = (input: StructVar): bigint => {\n return structLikeBuilder(shapeIds.tuple, input.value, (entry) =>\n buildDefinition(entry.id),\n )\n }\n\n const buildVariant =\n (variantType: \"errors\" | \"events\" | \"calls\") =>\n (pallet: string, name: string): bigint | null => {\n try {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n const enumLookup = getLookupEntryDef(\n palletEntry[variantType]! as number,\n )\n buildDefinition(enumLookup.id)\n\n if (enumLookup.type !== \"enum\") throw null\n const entry = enumLookup.value[name]\n return entry.type === \"lookupEntry\"\n ? buildDefinition(entry.value.id)\n : buildComposite(entry)\n } catch (_) {\n return null\n }\n }\n\n const buildConstant = (\n pallet: string,\n constantName: string,\n ): bigint | null => {\n try {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type)\n } catch (_) {\n return null\n }\n }\n\n const toStringEnhancer =\n <Args extends Array<any>>(\n fn: (...args: Args) => bigint | null,\n ): ((...args: Args) => string | null) =>\n (...args) =>\n fn(...args)?.toString(32) ?? null\n\n return {\n buildDefinition: toStringEnhancer(buildDefinition),\n buildRuntimeCall: toStringEnhancer(buildRuntimeCall),\n buildStorage: toStringEnhancer(buildStorage),\n buildCall: toStringEnhancer(buildVariant(\"calls\")),\n buildEvent: toStringEnhancer(buildVariant(\"events\")),\n buildError: toStringEnhancer(buildVariant(\"errors\")),\n buildConstant: toStringEnhancer(buildConstant),\n buildComposite: toStringEnhancer(buildComposite),\n buildNamedTuple: toStringEnhancer(buildNamedTuple),\n getAllGeneratedChecksums: () =>\n Array.from(cache.values()).map((v) => v.toString(32)),\n }\n}\n"],"mappings":"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","names":["withCache","entry","x","key","inner","value","group","entry","id"]}
|
|
1
|
+
{"version":3,"sources":["../src/lookups.ts","../src/dynamic-builder.ts","../src/with-cache.ts","../src/checksum-builder.ts"],"sourcesContent":["import type { StringRecord, V14Lookup } from \"@polkadot-api/substrate-bindings\"\n\nexport type MetadataPrimitives =\n | \"bool\"\n | \"char\"\n | \"str\"\n | \"u8\"\n | \"u16\"\n | \"u32\"\n | \"u64\"\n | \"u128\"\n | \"u256\"\n | \"i8\"\n | \"i16\"\n | \"i32\"\n | \"i64\"\n | \"i128\"\n | \"i256\"\n\nexport type PrimitiveVar = {\n type: \"primitive\"\n value: MetadataPrimitives\n}\n\nexport type VoidVar = { type: \"void\" }\nexport type CompactVar = { type: \"compact\"; isBig: boolean | null }\nexport type BitSequenceVar = { type: \"bitSequence\" }\nexport type AccountId32 = { type: \"AccountId32\" }\nexport type AccountId20 = { type: \"AccountId20\" }\nexport type TerminalVar =\n | PrimitiveVar\n | VoidVar\n | CompactVar\n | BitSequenceVar\n | AccountId32\n | AccountId20\n\n/* Array-like vars:\n * - TupleVar: Mixed types, fixed length\n * - Sequence: One type, arbitrary length\n * - Array: One type, fixed length\n */\nexport type TupleVar = {\n type: \"tuple\"\n value: LookupEntry[]\n innerDocs: Array<string[]>\n}\nexport type StructVar = {\n type: \"struct\"\n value: StringRecord<LookupEntry>\n innerDocs: StringRecord<string[]>\n}\nexport type EnumVar = {\n type: \"enum\"\n value: StringRecord<\n (\n | { type: \"lookupEntry\"; value: LookupEntry }\n | VoidVar\n | TupleVar\n | StructVar\n ) & { idx: number }\n >\n innerDocs: StringRecord<string[]>\n}\nexport type OptionVar = {\n type: \"option\"\n value: LookupEntry\n}\nexport type ResultVar = {\n type: \"result\"\n value: { ok: LookupEntry; ko: LookupEntry }\n}\nexport type SequenceVar = {\n type: \"sequence\"\n value: LookupEntry\n}\nexport type ArrayVar = {\n type: \"array\"\n value: LookupEntry\n len: number\n}\n\nexport type ComposedVar =\n | TupleVar\n | StructVar\n | SequenceVar\n | ArrayVar\n | OptionVar\n | ResultVar\n | EnumVar\n\nexport type Var = TerminalVar | ComposedVar\n\nexport type LookupEntry = {\n id: number\n} & Var\n\nconst isBytes = (value: LookupEntry, nBytes: number) =>\n value.type === \"array\" &&\n value.len === nBytes &&\n value.value.type === \"primitive\" &&\n value.value.value === \"u8\"\n\nexport const getLookupFn = (lookupData: V14Lookup) => {\n const lookups = new Map<number, LookupEntry>()\n const from = new Set<number>()\n\n const withCache = (\n fn: (id: number) => Var,\n ): ((id: number) => LookupEntry) => {\n return (id) => {\n let entry = lookups.get(id)\n\n if (entry) return entry\n\n if (from.has(id)) {\n const entry = {\n id,\n } as LookupEntry\n\n lookups.set(id, entry)\n return entry\n }\n\n from.add(id)\n const value = fn(id)\n entry = lookups.get(id)\n\n if (entry) {\n Object.assign(entry, value)\n } else {\n entry = {\n id,\n ...value,\n }\n lookups.set(id, entry!)\n }\n from.delete(id)\n return entry\n }\n }\n\n let isAccountId32SearchOn = true\n let isAccountId20SearchOn = true\n const getLookupEntryDef = withCache((id): Var => {\n const { def, path, params } = lookupData[id]\n\n if (def.tag === \"composite\") {\n if (def.value.length === 0) return { type: \"void\" }\n\n // used to be a \"pointer\"\n if (def.value.length === 1) {\n const inner = getLookupEntryDef(def.value[0].type as number)\n\n if (\n isAccountId32SearchOn &&\n path.at(-1) === \"AccountId32\" &&\n isBytes(inner, 32)\n ) {\n isAccountId32SearchOn = false\n return { type: \"AccountId32\" }\n }\n\n if (\n isAccountId20SearchOn &&\n path.at(-1) === \"AccountId20\" &&\n isBytes(inner, 20)\n ) {\n isAccountId20SearchOn = false\n return { type: \"AccountId20\" }\n }\n\n return inner\n }\n\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n def.value.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n values[key] = getLookupEntryDef(x.type)\n innerDocs[key] = x.docs\n })\n\n return allKey\n ? {\n type: \"struct\",\n value: values as StringRecord<LookupEntry>,\n innerDocs: innerDocs as StringRecord<string[]>,\n }\n : {\n type: \"tuple\",\n value: Object.values(values),\n innerDocs: Object.values(innerDocs),\n }\n }\n\n if (def.tag === \"variant\") {\n if (\n path.length === 1 &&\n path[0] === \"Option\" &&\n params.length === 1 &&\n params[0].name === \"T\"\n ) {\n const value = getLookupEntryDef(params[0].type!)\n return value.type === \"void\"\n ? // Option<void> would return a Codec<undefined> which makes no sense\n // Therefore, we better treat it as a bool\n { type: \"primitive\", value: \"bool\" }\n : {\n type: \"option\",\n value,\n }\n }\n\n if (\n path.length === 1 &&\n path[0] === \"Result\" &&\n params.length === 2 &&\n params[0].name === \"T\" &&\n params[1].name === \"E\"\n ) {\n return {\n type: \"result\",\n value: {\n ok: getLookupEntryDef(params[0].type as number),\n ko: getLookupEntryDef(params[1].type as number),\n },\n }\n }\n if (def.value.length === 0) return { type: \"void\" }\n\n const enumValue: StringRecord<EnumVar[\"value\"][keyof EnumVar[\"value\"]]> =\n {}\n const enumDocs: StringRecord<string[]> = {}\n\n def.value.forEach((x) => {\n const key = x.name\n enumDocs[key] = x.docs\n\n if (x.fields.length === 0) {\n enumValue[key] = { type: \"void\", idx: x.index }\n return\n }\n\n if (x.fields.length === 1 && !x.fields[0].name) {\n enumValue[key] = {\n type: \"lookupEntry\",\n value: getLookupEntryDef(x.fields[0].type),\n idx: x.index,\n }\n return\n }\n\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n\n x.fields.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n values[key] = getLookupEntryDef(x.type as number)\n innerDocs[key] = x.docs\n })\n\n enumValue[key] = allKey\n ? {\n type: \"struct\",\n value: values as StringRecord<LookupEntry>,\n innerDocs: innerDocs as StringRecord<string[]>,\n idx: x.index,\n }\n : {\n type: \"tuple\",\n value: Object.values(values),\n innerDocs: Object.values(innerDocs),\n idx: x.index,\n }\n })\n\n return {\n type: \"enum\",\n value: enumValue,\n innerDocs: enumDocs,\n }\n }\n\n if (def.tag === \"sequence\") {\n const value = getLookupEntryDef(def.value as number)\n return {\n type: \"sequence\",\n value,\n }\n }\n\n if (def.tag === \"array\") {\n const { len } = def.value\n const value = getLookupEntryDef(def.value.type)\n\n if (len === 0) return { type: \"void\" }\n if (len === 1) return value\n\n return {\n type: \"array\",\n value,\n len: def.value.len,\n }\n }\n\n if (def.tag === \"tuple\") {\n if (def.value.length === 0) return { type: \"void\" }\n\n // use to be a \"pointer\"\n if (def.value.length === 1)\n return getLookupEntryDef(def.value[0] as number)\n\n const value = def.value.map((x) => getLookupEntryDef(x as number))\n const innerDocs = def.value.map((x) => lookupData[x].docs)\n\n const areAllSame = value.every((v) => v.id === value[0].id)\n if (areAllSame && innerDocs.every((doc) => doc.length === 0)) {\n return {\n type: \"array\",\n value: value[0],\n len: value.length,\n }\n }\n\n return {\n type: \"tuple\",\n value,\n innerDocs,\n }\n }\n\n if (def.tag === \"primitive\") {\n return {\n type: \"primitive\",\n value: def.value.tag,\n }\n }\n\n if (def.tag === \"compact\") {\n const translated = getLookupEntryDef(def.value) as PrimitiveVar | VoidVar\n if (translated.type === \"void\") return { type: \"compact\", isBig: null }\n\n const isBig = Number(translated.value.slice(1)) > 32\n\n return {\n type: \"compact\",\n isBig,\n }\n }\n\n // bitSequence\n return {\n type: def.tag,\n }\n })\n\n return getLookupEntryDef\n}\n","import type {\n Codec,\n StringRecord,\n V15,\n V14,\n} from \"@polkadot-api/substrate-bindings\"\nimport type { EnumVar, LookupEntry, TupleVar } from \"./lookups\"\nimport { getLookupFn } from \"./lookups\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport { withCache } from \"./with-cache\"\nimport { mapObject } from \"@polkadot-api/utils\"\n\nconst _bytes = scale.Bin()\n\nconst _buildCodec = (\n input: LookupEntry,\n cache: Map<number, Codec<any>>,\n stack: Set<number>,\n _accountId: Codec<scale.SS58String>,\n): Codec<any> => {\n if (input.type === \"primitive\") return scale[input.value]\n if (input.type === \"void\") return scale._void\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"AccountId20\") return scale.ethAccount\n if (input.type === \"compact\") return scale.compact\n if (input.type === \"bitSequence\") return scale.bitSequence\n\n const buildNextCodec = (nextInput: LookupEntry): Codec<any> =>\n buildCodec(nextInput, cache, stack, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const innerCodec = buildNextCodec(inner)\n return len ? scale.Vector(innerCodec, len) : scale.Vector(innerCodec)\n }\n\n const buildTuple = (value: LookupEntry[]) =>\n scale.Tuple(...value.map(buildNextCodec))\n\n const buildStruct = (value: StringRecord<LookupEntry>) => {\n const inner = Object.fromEntries(\n Object.entries(value).map(([key, value]) => [key, buildNextCodec(value)]),\n ) as StringRecord<Codec<any>>\n return scale.Struct(inner)\n }\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return _bytes\n }\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\")\n return scale.Bin(input.len)\n\n return buildVector(input.value, input.len)\n }\n\n if (input.type === \"sequence\") return buildVector(input.value)\n if (input.type === \"tuple\") return buildTuple(input.value)\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\") return scale.Option(buildNextCodec(input.value))\n\n if (input.type === \"result\")\n return scale.Result(\n buildNextCodec(input.value.ok),\n buildNextCodec(input.value.ko),\n )\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n if (v.type === \"void\") return scale._void\n if (v.type === \"lookupEntry\") return buildNextCodec(v.value)\n return v.type === \"tuple\" ? buildTuple(v.value) : buildStruct(v.value)\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => {\n return [key, dependencies[idx]]\n }),\n ) as StringRecord<Codec<any>>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n return areIndexesSorted\n ? scale.Variant(inner)\n : scale.Variant(inner, indexes as any)\n}\nconst buildCodec = withCache(_buildCodec, scale.Self, (res) => res)\n\nexport const getDynamicBuilder = (metadata: V14 | V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n let _accountId = scale.AccountId()\n\n const cache = new Map()\n const buildDefinition = (id: number): Codec<any> =>\n buildCodec(getLookupEntryDef(id), cache, new Set(), _accountId)\n\n const prefix = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"SS58Prefix\")\n\n let ss58Prefix: number | undefined\n if (prefix) {\n try {\n const prefixVal = buildDefinition(prefix.type).dec(prefix.value)\n if (typeof prefixVal === \"number\") {\n ss58Prefix = prefixVal\n _accountId = scale.AccountId(prefixVal)\n }\n } catch (_) {}\n }\n\n const storagePallets = new Map<string, ReturnType<typeof scale.Storage>>()\n\n const buildStorage = (pallet: string, entry: string) => {\n let storagePallet = storagePallets.get(pallet)\n if (!storagePallet)\n storagePallets.set(pallet, (storagePallet = scale.Storage(pallet)))\n\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .storage!.items.find((s) => s.name === entry)!\n\n const storageWithFallback = (\n len: number,\n ...args: Parameters<ReturnType<typeof scale.Storage>>\n ) => {\n const result = storagePallet!(...args)\n return {\n ...result,\n len,\n fallback:\n storageEntry.modifier === 1\n ? result.dec(storageEntry.fallback)\n : undefined,\n }\n }\n\n if (storageEntry.type.tag === \"plain\")\n return storageWithFallback(\n 0,\n entry,\n buildDefinition(storageEntry.type.value).dec,\n )\n\n const { key, value, hashers } = storageEntry.type.value\n const val = buildDefinition(value)\n const hashes = hashers.map((x) => scale[x.tag])\n\n const hashArgs: Array<scale.EncoderWithHash<any>> =\n hashes.length === 1\n ? [[buildDefinition(key), hashes[0]]]\n : (getLookupEntryDef(key) as TupleVar).value.map(\n (x, idx): scale.EncoderWithHash<any> => [\n buildDefinition(x.id),\n hashes[idx],\n ],\n )\n return storageWithFallback(hashes.length, entry, val.dec, ...hashArgs)\n }\n\n const buildEnumEntry = (\n entry: EnumVar[\"value\"][keyof EnumVar[\"value\"]],\n ): Codec<any> => {\n if (entry.type === \"void\") return scale._void\n if (entry.type === \"lookupEntry\") return buildDefinition(entry.value.id)\n return entry.type === \"tuple\"\n ? scale.Tuple(\n ...Object.values(entry.value).map((l) => buildDefinition(l.id)),\n )\n : scale.Struct(\n mapObject(entry.value, (x) => buildDefinition(x.id)) as StringRecord<\n Codec<any>\n >,\n )\n }\n\n const buildConstant = (pallet: string, constantName: string) => {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type as number)\n }\n\n const buildVariant =\n (type: \"errors\" | \"events\" | \"calls\") =>\n (\n pallet: string,\n name: string,\n ): {\n codec: Codec<any>\n location: [number, number]\n } => {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n const lookup = getLookupEntryDef(palletEntry[type]!)\n if (lookup.type !== \"enum\") throw null\n const entry = lookup.value[name]\n\n return {\n location: [palletEntry.index, entry.idx],\n codec: buildEnumEntry(lookup.value[name]),\n }\n }\n\n const buildRuntimeCall = (api: string, method: string) => {\n const entry = metadata.apis\n .find((x) => x.name === api)\n ?.methods.find((x) => x.name === method)\n if (!entry) throw null\n\n return {\n args: scale.Tuple(...entry.inputs.map((x) => buildDefinition(x.type))),\n value: buildDefinition(entry.output),\n }\n }\n\n return {\n buildDefinition,\n buildStorage,\n buildEvent: buildVariant(\"events\"),\n buildError: buildVariant(\"errors\"),\n buildRuntimeCall,\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n ss58Prefix,\n }\n}\n","import { LookupEntry } from \"./lookups\"\n\ntype FnWithStack<Other extends Array<any>, T> = (\n input: LookupEntry,\n cache: Map<number, T>,\n stack: Set<number>,\n ...rest: Other\n) => T\n\nexport const withCache =\n <Other extends Array<any>, T>(\n fn: FnWithStack<Other, T>,\n onEnterCircular: (\n cacheGetter: () => T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n onExitCircular: (\n outter: T,\n inner: T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n ): FnWithStack<Other, T> =>\n (input, cache, stack, ...rest) => {\n const { id } = input\n if (cache.has(id)) return cache.get(id)!\n\n if (stack.has(id)) {\n const res = onEnterCircular(() => cache.get(id)!, input, ...rest)\n cache.set(id, res)\n return res\n }\n\n stack.add(id)\n let result = fn(input, cache, stack, ...rest)\n stack.delete(id)\n\n if (cache.has(id))\n result = onExitCircular(result, cache.get(id)!, input, ...rest)\n\n cache.set(id, result)\n return result\n }\n","import type { StringRecord, V14, V15 } from \"@polkadot-api/substrate-bindings\"\nimport { h64 } from \"@polkadot-api/substrate-bindings\"\nimport {\n LookupEntry,\n MetadataPrimitives,\n StructVar,\n TupleVar,\n VoidVar,\n getLookupFn,\n} from \"./lookups\"\n\nconst textEncoder = new TextEncoder()\nconst encodeText = textEncoder.encode.bind(textEncoder)\n\nconst getChecksum = (values: Array<bigint>) => {\n const res = new Uint8Array(values.length * 8)\n const dv = new DataView(res.buffer)\n\n for (let i = 0; i < values.length; i++) dv.setBigUint64(i * 8, values[i])\n\n return h64(res)\n}\nconst getStringChecksum = (values: Array<string>) =>\n getChecksum(values.map((v) => h64(encodeText(v))))\n\ntype Shape =\n | \"primitive\"\n | \"void\"\n | \"vector\"\n | \"tuple\"\n | \"struct\"\n | \"option\"\n | \"result\"\n | \"enum\"\nconst shapeIds: Record<Shape, bigint> = {\n primitive: 0n,\n vector: 1n,\n tuple: 2n,\n struct: 3n,\n option: 4n,\n result: 5n,\n enum: 6n,\n void: 7n,\n}\n\ntype RuntimePrimitives =\n | \"undefined\"\n | \"number\"\n | \"string\"\n | \"bigint\"\n | \"boolean\"\n | \"bitSequence\"\n | \"byteSequence\"\n | \"accountId32\"\n | \"accountId20\"\n\nconst runtimePrimitiveIds: Record<RuntimePrimitives, bigint> = {\n undefined: 0n,\n number: 1n,\n string: 2n,\n bigint: 3n,\n boolean: 4n,\n bitSequence: 5n, // {bitsLen: number, bytes: Uint8Array}\n byteSequence: 6n, // Binary\n accountId32: 7n, // SS58String\n accountId20: 8n, // EthAccount\n}\n\nconst metadataPrimitiveIds: Record<MetadataPrimitives, bigint> = {\n bool: runtimePrimitiveIds.boolean,\n char: runtimePrimitiveIds.string,\n str: runtimePrimitiveIds.string,\n u8: runtimePrimitiveIds.number,\n u16: runtimePrimitiveIds.number,\n u32: runtimePrimitiveIds.number,\n u64: runtimePrimitiveIds.bigint,\n u128: runtimePrimitiveIds.bigint,\n u256: runtimePrimitiveIds.bigint,\n i8: runtimePrimitiveIds.number,\n i16: runtimePrimitiveIds.number,\n i32: runtimePrimitiveIds.number,\n i64: runtimePrimitiveIds.bigint,\n i128: runtimePrimitiveIds.bigint,\n i256: runtimePrimitiveIds.bigint,\n}\n\nconst structLikeBuilder = <T>(\n shapeId: bigint,\n input: StringRecord<T>,\n innerChecksum: (value: T) => bigint,\n) => {\n const sortedEntries = Object.entries(input).sort(([a], [b]) =>\n a.localeCompare(b),\n )\n const keysChecksum = getStringChecksum(sortedEntries.map(([key]) => key))\n const valuesChecksum = getChecksum(\n sortedEntries.map(([, entry]) => innerChecksum(entry)),\n )\n\n return getChecksum([shapeId, keysChecksum, valuesChecksum])\n}\n\ntype Graph = Map<number, [LookupEntry, Set<number>]>\nconst buildGraph = (entry: LookupEntry, result: Graph = new Map()) => {\n if (result.has(entry.id)) return result\n\n switch (entry.type) {\n case \"array\":\n case \"option\":\n case \"sequence\":\n result.set(entry.id, [entry, new Set([entry.value.id])])\n buildGraph(entry.value, result)\n break\n case \"enum\": {\n const children = Object.values(entry.value).flatMap((value) => {\n if (value.type === \"void\") return []\n if (value.type === \"lookupEntry\") return value.value\n if (value.type === \"struct\") return Object.values(value.value)\n return value.value\n })\n result.set(entry.id, [entry, new Set(children.map((child) => child.id))])\n children.forEach((child) => buildGraph(child, result))\n break\n }\n case \"result\":\n result.set(entry.id, [\n entry,\n new Set([entry.value.ok.id, entry.value.ko.id]),\n ])\n buildGraph(entry.value.ok, result)\n buildGraph(entry.value.ko, result)\n break\n case \"struct\": {\n const children = Object.values(entry.value)\n result.set(entry.id, [entry, new Set(children.map((child) => child.id))])\n children.forEach((child) => buildGraph(child, result))\n break\n }\n case \"tuple\":\n result.set(entry.id, [\n entry,\n new Set(entry.value.map((child) => child.id)),\n ])\n entry.value.forEach((child) => buildGraph(child, result))\n break\n default:\n result.set(entry.id, [entry, new Set()])\n }\n return result\n}\n\nconst _buildChecksum = (\n input: LookupEntry,\n buildNextChecksum: (entry: LookupEntry) => bigint,\n): bigint => {\n if (input.type === \"primitive\")\n return getChecksum([shapeIds.primitive, metadataPrimitiveIds[input.value]])\n\n if (input.type === \"void\") return getChecksum([shapeIds.void])\n\n if (input.type === \"compact\")\n return getChecksum([\n shapeIds.primitive,\n runtimePrimitiveIds[\n input.isBig || input.isBig === null ? \"bigint\" : \"number\"\n ],\n ])\n\n if (input.type === \"bitSequence\")\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.bitSequence])\n\n if (input.type === \"AccountId32\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId32])\n }\n\n if (input.type === \"AccountId20\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId20])\n }\n\n if (input.type === \"array\") {\n const innerValue = input.value\n if (innerValue.type === \"primitive\" && innerValue.value === \"u8\") {\n return getChecksum([\n shapeIds.primitive,\n runtimePrimitiveIds.byteSequence,\n BigInt(input.len),\n ])\n }\n const innerChecksum = buildNextChecksum(innerValue)\n\n return getChecksum([shapeIds.vector, innerChecksum, BigInt(input.len)])\n }\n\n if (input.type === \"sequence\") {\n const innerValue = input.value\n if (innerValue.type === \"primitive\" && innerValue.value === \"u8\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.byteSequence])\n }\n const innerChecksum = buildNextChecksum(innerValue)\n\n return getChecksum([shapeIds.vector, innerChecksum])\n }\n\n const buildTuple = (entries: LookupEntry[]) =>\n getChecksum([shapeIds.tuple, ...entries.map(buildNextChecksum)])\n\n const buildStruct = (entries: StringRecord<LookupEntry>) =>\n structLikeBuilder(shapeIds.struct, entries, buildNextChecksum)\n\n if (input.type === \"tuple\") return buildTuple(input.value)\n\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\")\n return getChecksum([shapeIds.option, buildNextChecksum(input.value)])\n\n if (input.type === \"result\")\n return getChecksum([\n shapeIds.result,\n buildNextChecksum(input.value.ok),\n buildNextChecksum(input.value.ko),\n ])\n\n return structLikeBuilder(shapeIds.enum, input.value, (entry) => {\n if (entry.type === \"lookupEntry\") return buildNextChecksum(entry.value)\n switch (entry.type) {\n case \"void\":\n return getChecksum([shapeIds.void])\n case \"tuple\":\n return buildTuple(entry.value)\n case \"struct\":\n return buildStruct(entry.value)\n }\n })\n}\n\nconst getCycles = (graph: Graph) => {\n // Tarjan's strongly connected components\n const tarjanState = new Map<\n number,\n {\n index: number\n lowLink: number\n onStack: boolean\n }\n >()\n let index = 0\n const stack: number[] = []\n const result: Array<Set<number>> = []\n\n function strongConnect(v: number): void {\n const state = {\n index: index,\n lowLink: index,\n onStack: true,\n }\n tarjanState.set(v, state)\n index++\n stack.push(v)\n\n const edges = graph.get(v)![1]\n for (let w of edges) {\n const edgeState = tarjanState.get(w)\n if (!edgeState) {\n strongConnect(w)\n state.lowLink = Math.min(state.lowLink, tarjanState.get(w)!.lowLink)\n } else if (edgeState.onStack) {\n state.lowLink = Math.min(state.lowLink, edgeState.index)\n }\n }\n\n if (state.lowLink === state.index) {\n const component = new Set<number>()\n\n let poppedNode = -1\n do {\n poppedNode = stack.pop()!\n tarjanState.get(poppedNode)!.onStack = false\n component.add(poppedNode)\n } while (poppedNode !== v)\n\n if (component.size > 1) result.push(component)\n }\n }\n\n for (const node of graph.keys()) {\n if (!tarjanState.has(node)) {\n strongConnect(node)\n }\n }\n\n return result\n}\n\nconst getCyclicGroups = (cycles: Array<Set<number>>) => {\n const ungroupedCycles = new Set(cycles.map((_, i) => i))\n const edges = new Map(cycles.map((_, i) => [i, new Set<number>()]))\n cycles.forEach((cycle, i) => {\n cycles.slice(i + 1).forEach((otherCycle, _j) => {\n const j = _j + i + 1\n const combined = new Set([...cycle, ...otherCycle])\n if (combined.size !== cycle.size + otherCycle.size) {\n edges.get(i)!.add(j)\n edges.get(j)!.add(i)\n }\n })\n })\n const groups: Array<Set<number>> = []\n\n while (ungroupedCycles.size) {\n const group = new Set<number>()\n const toVisit = [ungroupedCycles.values().next().value]\n while (toVisit.length) {\n const idx = toVisit.pop()\n if (!ungroupedCycles.has(idx)) continue\n ungroupedCycles.delete(idx)\n\n const cycle = cycles[idx]\n cycle.forEach((v) => group.add(Number(v)))\n edges.get(idx)!.forEach((n) => toVisit.push(n))\n }\n groups.push(group)\n }\n\n return groups\n}\n\nconst sortCyclicGroups = (groups: Array<Set<number>>, graph: Graph) => {\n const getReachableNodes = (group: Set<number>) => {\n const first = group.values().next().value as number\n const entry = graph.get(first)![0]\n return Array.from(buildGraph(entry).keys())\n }\n\n const result: Array<Set<number>> = new Array()\n\n function dependentsFirst(group: Set<number>) {\n if (result.includes(group)) return\n const dependents = groups.filter(\n (candidate) =>\n candidate !== group &&\n getReachableNodes(group).some((node) => candidate.has(node)),\n )\n dependents.forEach((group) => dependentsFirst(group))\n if (result.includes(group)) return\n result.push(group)\n }\n\n groups.forEach((group) => dependentsFirst(group))\n return result\n}\n\nconst buildChecksum = (entry: LookupEntry, cache: Map<number, bigint>) => {\n if (cache.has(entry.id)) return cache.get(entry.id)!\n\n const graph = buildGraph(entry)\n const cycles = getCycles(graph)\n const cyclicGroups = getCyclicGroups(cycles)\n const sortedCyclicGroups = sortCyclicGroups(cyclicGroups, graph)\n\n // separate writeCache since we might want to not override the current cache to ensure deterministic result regardless of order\n const recursiveBuildChecksum = (\n entry: LookupEntry,\n writeCache: (id: number, value: bigint) => void,\n skipCache = false,\n ): bigint => {\n if (!skipCache && cache.has(entry.id)) {\n return cache.get(entry.id)!\n }\n const result = _buildChecksum(entry, (nextEntry) =>\n recursiveBuildChecksum(nextEntry, writeCache),\n )\n writeCache(entry.id, result)\n return result\n }\n\n sortedCyclicGroups.forEach((group) => {\n group.forEach((id) => cache.set(id, 0n))\n for (let i = 0; i < group.size; i++) {\n const results = new Map<number, bigint>()\n group.forEach((id) =>\n recursiveBuildChecksum(\n graph.get(id)![0],\n (id, value) => {\n // only store onto the actual cache results from other nodes\n // cyclic nodes would depend on sorting order.\n const writeCache = group.has(id) ? results : cache\n writeCache.set(id, value)\n },\n true,\n ),\n )\n Array.from(results.entries()).forEach(([id, checksum]) =>\n cache.set(id, checksum),\n )\n }\n })\n\n return recursiveBuildChecksum(entry, (id, value) => cache.set(id, value))\n}\n\nexport const getChecksumBuilder = (metadata: V14 | V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n\n const cache = new Map<number, bigint>()\n\n const buildDefinition = (id: number): bigint =>\n buildChecksum(getLookupEntryDef(id), cache)\n\n const buildStorage = (pallet: string, entry: string): bigint | null => {\n try {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .storage!.items.find((s) => s.name === entry)!\n\n if (storageEntry.type.tag === \"plain\")\n return buildDefinition(storageEntry.type.value)\n\n const { key, value } = storageEntry.type.value\n const val = buildDefinition(value)\n const returnKey = buildDefinition(key)\n return getChecksum([val, returnKey])\n } catch (_) {\n return null\n }\n }\n\n const buildRuntimeCall = (api: string, method: string): bigint | null => {\n try {\n const entry = metadata.apis\n .find((x) => x.name === api)\n ?.methods.find((x) => x.name === method)\n if (!entry) throw null\n\n const argNamesChecksum = getStringChecksum(\n entry.inputs.map((x) => x.name),\n )\n const argValuesChecksum = getChecksum(\n entry.inputs.map((x) => buildDefinition(x.type)),\n )\n const outputChecksum = buildDefinition(entry.output)\n\n return getChecksum([argNamesChecksum, argValuesChecksum, outputChecksum])\n } catch (_) {\n return null\n }\n }\n\n const buildComposite = (input: TupleVar | StructVar | VoidVar): bigint => {\n if (input.type === \"void\") return getChecksum([0n])\n\n if (input.type === \"tuple\") {\n const values = Object.values(input.value).map((entry) =>\n buildDefinition(entry.id),\n )\n\n return getChecksum([shapeIds.tuple, ...values])\n }\n\n // Otherwise struct\n return structLikeBuilder(shapeIds.struct, input.value, (entry) =>\n buildDefinition(entry.id),\n )\n }\n\n const buildNamedTuple = (input: StructVar): bigint => {\n return structLikeBuilder(shapeIds.tuple, input.value, (entry) =>\n buildDefinition(entry.id),\n )\n }\n\n const buildVariant =\n (variantType: \"errors\" | \"events\" | \"calls\") =>\n (pallet: string, name: string): bigint | null => {\n try {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n const enumLookup = getLookupEntryDef(\n palletEntry[variantType]! as number,\n )\n buildDefinition(enumLookup.id)\n\n if (enumLookup.type !== \"enum\") throw null\n const entry = enumLookup.value[name]\n return entry.type === \"lookupEntry\"\n ? buildDefinition(entry.value.id)\n : buildComposite(entry)\n } catch (_) {\n return null\n }\n }\n\n const buildConstant = (\n pallet: string,\n constantName: string,\n ): bigint | null => {\n try {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type)\n } catch (_) {\n return null\n }\n }\n\n const toStringEnhancer =\n <Args extends Array<any>>(\n fn: (...args: Args) => bigint | null,\n ): ((...args: Args) => string | null) =>\n (...args) =>\n fn(...args)?.toString(32) ?? null\n\n return {\n buildDefinition: toStringEnhancer(buildDefinition),\n buildRuntimeCall: toStringEnhancer(buildRuntimeCall),\n buildStorage: toStringEnhancer(buildStorage),\n buildCall: toStringEnhancer(buildVariant(\"calls\")),\n buildEvent: toStringEnhancer(buildVariant(\"events\")),\n buildError: toStringEnhancer(buildVariant(\"errors\")),\n buildConstant: toStringEnhancer(buildConstant),\n buildComposite: toStringEnhancer(buildComposite),\n buildNamedTuple: toStringEnhancer(buildNamedTuple),\n getAllGeneratedChecksums: () =>\n Array.from(cache.values()).map((v) => v.toString(32)),\n }\n}\n"],"mappings":"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","names":["withCache","entry","x","key","inner","value","group","entry","id"]}
|
package/dist/min/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as scale from '@polkadot-api/substrate-bindings';
|
|
2
|
-
import { StringRecord, V15, Codec } from '@polkadot-api/substrate-bindings';
|
|
2
|
+
import { StringRecord, V14, V15, Codec } from '@polkadot-api/substrate-bindings';
|
|
3
3
|
|
|
4
4
|
type MetadataPrimitives = "bool" | "char" | "str" | "u8" | "u16" | "u32" | "u64" | "u128" | "u256" | "i8" | "i16" | "i32" | "i64" | "i128" | "i256";
|
|
5
5
|
type PrimitiveVar = {
|
|
@@ -19,7 +19,10 @@ type BitSequenceVar = {
|
|
|
19
19
|
type AccountId32 = {
|
|
20
20
|
type: "AccountId32";
|
|
21
21
|
};
|
|
22
|
-
type
|
|
22
|
+
type AccountId20 = {
|
|
23
|
+
type: "AccountId20";
|
|
24
|
+
};
|
|
25
|
+
type TerminalVar = PrimitiveVar | VoidVar | CompactVar | BitSequenceVar | AccountId32 | AccountId20;
|
|
23
26
|
type TupleVar = {
|
|
24
27
|
type: "tuple";
|
|
25
28
|
value: LookupEntry[];
|
|
@@ -166,7 +169,7 @@ declare const getLookupFn: (lookupData: {
|
|
|
166
169
|
docs: string[];
|
|
167
170
|
}[]) => (id: number) => LookupEntry;
|
|
168
171
|
|
|
169
|
-
declare const getDynamicBuilder: (metadata: V15) => {
|
|
172
|
+
declare const getDynamicBuilder: (metadata: V14 | V15) => {
|
|
170
173
|
buildDefinition: (id: number) => Codec<any>;
|
|
171
174
|
buildStorage: (pallet: string, entry: string) => {
|
|
172
175
|
len: number;
|
|
@@ -204,7 +207,7 @@ declare const getDynamicBuilder: (metadata: V15) => {
|
|
|
204
207
|
ss58Prefix: number | undefined;
|
|
205
208
|
};
|
|
206
209
|
|
|
207
|
-
declare const getChecksumBuilder: (metadata: V15) => {
|
|
210
|
+
declare const getChecksumBuilder: (metadata: V14 | V15) => {
|
|
208
211
|
buildDefinition: (id: number) => string | null;
|
|
209
212
|
buildRuntimeCall: (api: string, method: string) => string | null;
|
|
210
213
|
buildStorage: (pallet: string, entry: string) => string | null;
|
|
@@ -217,4 +220,4 @@ declare const getChecksumBuilder: (metadata: V15) => {
|
|
|
217
220
|
getAllGeneratedChecksums: () => string[];
|
|
218
221
|
};
|
|
219
222
|
|
|
220
|
-
export { type AccountId32, type ArrayVar, type BitSequenceVar, type CompactVar, type ComposedVar, type EnumVar, type LookupEntry, type MetadataPrimitives, type OptionVar, type PrimitiveVar, type ResultVar, type SequenceVar, type StructVar, type TerminalVar, type TupleVar, type Var, type VoidVar, getChecksumBuilder, getDynamicBuilder, getLookupFn };
|
|
223
|
+
export { type AccountId20, type AccountId32, type ArrayVar, type BitSequenceVar, type CompactVar, type ComposedVar, type EnumVar, type LookupEntry, type MetadataPrimitives, type OptionVar, type PrimitiveVar, type ResultVar, type SequenceVar, type StructVar, type TerminalVar, type TupleVar, type Var, type VoidVar, getChecksumBuilder, getDynamicBuilder, getLookupFn };
|
package/dist/min/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var W=Object.create;var A=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var U=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var J=(e,r)=>{for(var s in r)A(e,s,{get:r[s],enumerable:!0})},D=(e,r,s,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of H(r))!N.call(e,n)&&n!==s&&A(e,n,{get:()=>r[n],enumerable:!(a=K(r,n))||a.enumerable});return e};var Q=(e,r,s)=>(s=e!=null?W(U(e)):{},D(r||!e||!e.__esModule?A(s,"default",{value:e,enumerable:!0}):s,e)),X=e=>D(A({},"__esModule",{value:!0}),e);var se={};J(se,{getChecksumBuilder:()=>ue,getDynamicBuilder:()=>$,getLookupFn:()=>C});module.exports=X(se);var C=e=>{let r=new Map,s=new Set,a=p=>t=>{let c=r.get(t);if(c)return c;if(s.has(t)){let l={id:t};return r.set(t,l),l}s.add(t);let m=p(t);return c=r.get(t),c?Object.assign(c,m):(c={id:t,...m},r.set(t,c)),s.delete(t),c},n=!0,o=a(p=>{let{def:t,path:c,params:m}=e[p];if(t.tag==="composite"){if(t.value.length===0)return{type:"void"};if(t.value.length===1)return n&&c.join(",")==="sp_core,crypto,AccountId32"?(n=!1,{type:"AccountId32"}):o(t.value[0].type);let l=!0,v={},i={};return t.value.forEach((d,u)=>{l=l&&!!d.name;let g=d.name||u;v[g]=o(d.type),i[g]=d.docs}),l?{type:"struct",value:v,innerDocs:i}:{type:"tuple",value:Object.values(v),innerDocs:Object.values(i)}}if(t.tag==="variant"){if(c.length===1&&c[0]==="Option"&&m.length===1&&m[0].name==="T"){let i=o(m[0].type);return i.type==="void"?{type:"primitive",value:"bool"}:{type:"option",value:i}}if(c.length===1&&c[0]==="Result"&&m.length===2&&m[0].name==="T"&&m[1].name==="E")return{type:"result",value:{ok:o(m[0].type),ko:o(m[1].type)}};if(t.value.length===0)return{type:"void"};let l={},v={};return t.value.forEach(i=>{let d=i.name;if(v[d]=i.docs,i.fields.length===0){l[d]={type:"void",idx:i.index};return}if(i.fields.length===1&&!i.fields[0].name){l[d]={type:"lookupEntry",value:o(i.fields[0].type),idx:i.index};return}let u=!0,g={},b={};i.fields.forEach((f,h)=>{u=u&&!!f.name;let V=f.name||h;g[V]=o(f.type),b[V]=f.docs}),l[d]=u?{type:"struct",value:g,innerDocs:b,idx:i.index}:{type:"tuple",value:Object.values(g),innerDocs:Object.values(b),idx:i.index}}),{type:"enum",value:l,innerDocs:v}}if(t.tag==="sequence")return{type:"sequence",value:o(t.value)};if(t.tag==="array"){let{len:l}=t.value,v=o(t.value.type);return l===0?{type:"void"}:l===1?v:{type:"array",value:v,len:t.value.len}}if(t.tag==="tuple"){if(t.value.length===0)return{type:"void"};if(t.value.length===1)return o(t.value[0]);let l=t.value.map(d=>o(d)),v=t.value.map(d=>e[d].docs);return l.every(d=>d.id===l[0].id)&&v.every(d=>d.length===0)?{type:"array",value:l[0],len:l.length}:{type:"tuple",value:l,innerDocs:v}}if(t.tag==="primitive")return{type:"primitive",value:t.value.tag};if(t.tag==="compact"){let l=o(t.value);return l.type==="void"?{type:"compact",isBig:null}:{type:"compact",isBig:Number(l.value.slice(1))>32}}return{type:t.tag}});return o};var y=Q(require("@polkadot-api/substrate-bindings"));var I=(e,r,s)=>(a,n,o,...p)=>{let{id:t}=a;if(n.has(t))return n.get(t);if(o.has(t)){let m=r(()=>n.get(t),a,...p);return n.set(t,m),m}o.add(t);let c=e(a,n,o,...p);return o.delete(t),n.has(t)&&(c=s(c,n.get(t),a,...p)),n.set(t,c),c};var M=require("@polkadot-api/utils"),Y=y.Bin(),Z=(e,r,s,a)=>{if(e.type==="primitive")return y[e.value];if(e.type==="void")return y._void;if(e.type==="AccountId32")return a;if(e.type==="compact")return y.compact;if(e.type==="bitSequence")return y.bitSequence;let n=i=>B(i,r,s,a),o=(i,d)=>{let u=n(i);return d?y.Vector(u,d):y.Vector(u)},p=i=>y.Tuple(...i.map(n)),t=i=>{let d=Object.fromEntries(Object.entries(i).map(([u,g])=>[u,n(g)]));return y.Struct(d)};if(e.type==="sequence"&&e.value.type==="primitive"&&e.value.value==="u8")return Y;if(e.type==="array")return e.value.type==="primitive"&&e.value.value==="u8"?y.Bin(e.len):o(e.value,e.len);if(e.type==="sequence")return o(e.value);if(e.type==="tuple")return p(e.value);if(e.type==="struct")return t(e.value);if(e.type==="option")return y.Option(n(e.value));if(e.type==="result")return y.Result(n(e.value.ok),n(e.value.ko));let c=Object.values(e.value).map(i=>i.type==="void"?y._void:i.type==="lookupEntry"?n(i.value):i.type==="tuple"?p(i.value):t(i.value)),m=Object.fromEntries(Object.keys(e.value).map((i,d)=>[i,c[d]])),l=Object.values(e.value).map(i=>i.idx);return l.every((i,d)=>i===d)?y.Variant(m):y.Variant(m,l)},B=I(Z,y.Self,e=>e),$=e=>{let r=e.lookup,s=C(r),a=y.AccountId(),n=new Map,o=u=>B(s(u),n,new Set,a),p=e.pallets.find(u=>u.name==="System")?.constants.find(u=>u.name==="SS58Prefix"),t;if(p)try{let u=o(p.type).dec(p.value);typeof u=="number"&&(t=u,a=y.AccountId(u))}catch{}let c=new Map,m=(u,g)=>{let b=c.get(u);b||c.set(u,b=y.Storage(u));let f=e.pallets.find(L=>L.name===u).storage.items.find(L=>L.name===g),h=(L,...O)=>{let j=b(...O);return{...j,len:L,fallback:f.modifier===1?j.dec(f.fallback):void 0}};if(f.type.tag==="plain")return h(0,g,o(f.type.value).dec);let{key:V,value:x,hashers:G}=f.type.value,F=o(x),R=G.map(L=>y[L.tag]),z=R.length===1?[[o(V),R[0]]]:s(V).value.map((L,O)=>[o(L.id),R[O]]);return h(R.length,g,F.dec,...z)},l=u=>u.type==="void"?y._void:u.type==="lookupEntry"?o(u.value.id):u.type==="tuple"?y.Tuple(...Object.values(u.value).map(g=>o(g.id))):y.Struct((0,M.mapObject)(u.value,g=>o(g.id))),v=(u,g)=>{let b=e.pallets.find(f=>f.name===u).constants.find(f=>f.name===g);return o(b.type)},i=u=>(g,b)=>{let f=e.pallets.find(x=>x.name===g),h=s(f[u]);if(h.type!=="enum")throw null;let V=h.value[b];return{location:[f.index,V.idx],codec:l(h.value[b])}},d=(u,g)=>{let b=e.apis.find(f=>f.name===u)?.methods.find(f=>f.name===g);if(!b)throw null;return{args:y.Tuple(...b.inputs.map(f=>o(f.type))),value:o(b.output)}};return{buildDefinition:o,buildStorage:m,buildEvent:i("events"),buildError:i("errors"),buildRuntimeCall:d,buildCall:i("calls"),buildConstant:v,ss58Prefix:t}};var q=require("@polkadot-api/substrate-bindings");var P=new TextEncoder,ee=P.encode.bind(P),k=e=>{let r=new Uint8Array(e.length*8),s=new DataView(r.buffer);for(let a=0;a<e.length;a++)s.setBigUint64(a*8,e[a]);return(0,q.h64)(r)},_=e=>k(e.map(r=>(0,q.h64)(ee(r)))),E={primitive:0n,vector:1n,tuple:2n,struct:3n,option:4n,result:5n,enum:6n,void:7n},S={undefined:0n,number:1n,string:2n,bigint:3n,boolean:4n,bitSequence:5n,byteSequence:6n,accountId:7n},te={bool:S.boolean,char:S.string,str:S.string,u8:S.number,u16:S.number,u32:S.number,u64:S.bigint,u128:S.bigint,u256:S.bigint,i8:S.number,i16:S.number,i32:S.number,i64:S.bigint,i128:S.bigint,i256:S.bigint},T=(e,r,s)=>{let a=Object.entries(r).sort(([p],[t])=>p.localeCompare(t)),n=_(a.map(([p])=>p)),o=k(a.map(([,p])=>s(p)));return k([e,n,o])},w=(e,r=new Map)=>{if(r.has(e.id))return r;switch(e.type){case"array":case"option":case"sequence":r.set(e.id,[e,new Set([e.value.id])]),w(e.value,r);break;case"enum":{let s=Object.values(e.value).flatMap(a=>a.type==="void"?[]:a.type==="lookupEntry"?a.value:a.type==="struct"?Object.values(a.value):a.value);r.set(e.id,[e,new Set(s.map(a=>a.id))]),s.forEach(a=>w(a,r));break}case"result":r.set(e.id,[e,new Set([e.value.ok.id,e.value.ko.id])]),w(e.value.ok,r),w(e.value.ko,r);break;case"struct":{let s=Object.values(e.value);r.set(e.id,[e,new Set(s.map(a=>a.id))]),s.forEach(a=>w(a,r));break}case"tuple":r.set(e.id,[e,new Set(e.value.map(s=>s.id))]),e.value.forEach(s=>w(s,r));break;default:r.set(e.id,[e,new Set])}return r},re=(e,r)=>{if(e.type==="primitive")return k([E.primitive,te[e.value]]);if(e.type==="void")return k([E.void]);if(e.type==="compact")return k([E.primitive,S[e.isBig||e.isBig===null?"bigint":"number"]]);if(e.type==="bitSequence")return k([E.primitive,S.bitSequence]);if(e.type==="AccountId32")return k([E.primitive,S.accountId]);if(e.type==="array"){let n=e.value;if(n.type==="primitive"&&n.value==="u8")return k([E.primitive,S.byteSequence,BigInt(e.len)]);let o=r(n);return k([E.vector,o,BigInt(e.len)])}if(e.type==="sequence"){let n=e.value;if(n.type==="primitive"&&n.value==="u8")return k([E.primitive,S.byteSequence]);let o=r(n);return k([E.vector,o])}let s=n=>k([E.tuple,...n.map(r)]),a=n=>T(E.struct,n,r);return e.type==="tuple"?s(e.value):e.type==="struct"?a(e.value):e.type==="option"?k([E.option,r(e.value)]):e.type==="result"?k([E.result,r(e.value.ok),r(e.value.ko)]):T(E.enum,e.value,n=>{if(n.type==="lookupEntry")return r(n.value);switch(n.type){case"void":return k([E.void]);case"tuple":return s(n.value);case"struct":return a(n.value)}})},ne=e=>{let r=new Map,s=0,a=[],n=[];function o(p){let t={index:s,lowLink:s,onStack:!0};r.set(p,t),s++,a.push(p);let c=e.get(p)[1];for(let m of c){let l=r.get(m);l?l.onStack&&(t.lowLink=Math.min(t.lowLink,l.index)):(o(m),t.lowLink=Math.min(t.lowLink,r.get(m).lowLink))}if(t.lowLink===t.index){let m=new Set,l=-1;do l=a.pop(),r.get(l).onStack=!1,m.add(l);while(l!==p);m.size>1&&n.push(m)}}for(let p of e.keys())r.has(p)||o(p);return n},oe=e=>{let r=new Set(e.map((n,o)=>o)),s=new Map(e.map((n,o)=>[o,new Set]));e.forEach((n,o)=>{e.slice(o+1).forEach((p,t)=>{let c=t+o+1;new Set([...n,...p]).size!==n.size+p.size&&(s.get(o).add(c),s.get(c).add(o))})});let a=[];for(;r.size;){let n=new Set,o=[r.values().next().value];for(;o.length;){let p=o.pop();if(!r.has(p))continue;r.delete(p),e[p].forEach(c=>n.add(Number(c))),s.get(p).forEach(c=>o.push(c))}a.push(n)}return a},ie=(e,r)=>{let s=o=>{let p=o.values().next().value,t=r.get(p)[0];return Array.from(w(t).keys())},a=new Array;function n(o){a.includes(o)||(e.filter(t=>t!==o&&s(o).some(c=>t.has(c))).forEach(t=>n(t)),a.includes(o))||a.push(o)}return e.forEach(o=>n(o)),a},ae=(e,r)=>{if(r.has(e.id))return r.get(e.id);let s=w(e),a=ne(s),n=oe(a),o=ie(n,s),p=(t,c,m=!1)=>{if(!m&&r.has(t.id))return r.get(t.id);let l=re(t,v=>p(v,c));return c(t.id,l),l};return o.forEach(t=>{t.forEach(c=>r.set(c,0n));for(let c=0;c<t.size;c++){let m=new Map;t.forEach(l=>p(s.get(l)[0],(v,i)=>{(t.has(v)?m:r).set(v,i)},!0)),Array.from(m.entries()).forEach(([l,v])=>r.set(l,v))}}),p(e,(t,c)=>r.set(t,c))},ue=e=>{let r=e.lookup,s=C(r),a=new Map,n=i=>ae(s(i),a),o=(i,d)=>{try{let u=e.pallets.find(V=>V.name===i).storage.items.find(V=>V.name===d);if(u.type.tag==="plain")return n(u.type.value);let{key:g,value:b}=u.type.value,f=n(b),h=n(g);return k([f,h])}catch{return null}},p=(i,d)=>{try{let u=e.apis.find(h=>h.name===i)?.methods.find(h=>h.name===d);if(!u)throw null;let g=_(u.inputs.map(h=>h.name)),b=k(u.inputs.map(h=>n(h.type))),f=n(u.output);return k([g,b,f])}catch{return null}},t=i=>{if(i.type==="void")return k([0n]);if(i.type==="tuple"){let d=Object.values(i.value).map(u=>n(u.id));return k([E.tuple,...d])}return T(E.struct,i.value,d=>n(d.id))},c=i=>T(E.tuple,i.value,d=>n(d.id)),m=i=>(d,u)=>{try{let g=e.pallets.find(h=>h.name===d),b=s(g[i]);if(n(b.id),b.type!=="enum")throw null;let f=b.value[u];return f.type==="lookupEntry"?n(f.value.id):t(f)}catch{return null}},l=(i,d)=>{try{let u=e.pallets.find(g=>g.name===i).constants.find(g=>g.name===d);return n(u.type)}catch{return null}},v=i=>(...d)=>i(...d)?.toString(32)??null;return{buildDefinition:v(n),buildRuntimeCall:v(p),buildStorage:v(o),buildCall:v(m("calls")),buildEvent:v(m("events")),buildError:v(m("errors")),buildConstant:v(l),buildComposite:v(t),buildNamedTuple:v(c),getAllGeneratedChecksums:()=>Array.from(a.values()).map(i=>i.toString(32))}};
|
|
1
|
+
"use strict";var K=Object.create;var x=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var Q=(e,t)=>{for(var l in t)x(e,l,{get:t[l],enumerable:!0})},D=(e,t,l,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of U(t))!J.call(e,r)&&r!==l&&x(e,r,{get:()=>t[r],enumerable:!(u=H(t,r))||u.enumerable});return e};var X=(e,t,l)=>(l=e!=null?K(N(e)):{},D(t||!e||!e.__esModule?x(l,"default",{value:e,enumerable:!0}):l,e)),Y=e=>D(x({},"__esModule",{value:!0}),e);var ce={};Q(ce,{getChecksumBuilder:()=>se,getDynamicBuilder:()=>ee,getLookupFn:()=>A});module.exports=Y(ce);var j=(e,t)=>e.type==="array"&&e.len===t&&e.value.type==="primitive"&&e.value.value==="u8",A=e=>{let t=new Map,l=new Set,u=c=>o=>{let m=t.get(o);if(m)return m;if(l.has(o)){let d={id:o};return t.set(o,d),d}l.add(o);let v=c(o);return m=t.get(o),m?Object.assign(m,v):(m={id:o,...v},t.set(o,m)),l.delete(o),m},r=!0,a=!0,s=u(c=>{let{def:o,path:m,params:v}=e[c];if(o.tag==="composite"){if(o.value.length===0)return{type:"void"};if(o.value.length===1){let n=s(o.value[0].type);return r&&m.at(-1)==="AccountId32"&&j(n,32)?(r=!1,{type:"AccountId32"}):a&&m.at(-1)==="AccountId20"&&j(n,20)?(a=!1,{type:"AccountId20"}):n}let d=!0,i={},p={};return o.value.forEach((n,f)=>{d=d&&!!n.name;let b=n.name||f;i[b]=s(n.type),p[b]=n.docs}),d?{type:"struct",value:i,innerDocs:p}:{type:"tuple",value:Object.values(i),innerDocs:Object.values(p)}}if(o.tag==="variant"){if(m.length===1&&m[0]==="Option"&&v.length===1&&v[0].name==="T"){let p=s(v[0].type);return p.type==="void"?{type:"primitive",value:"bool"}:{type:"option",value:p}}if(m.length===1&&m[0]==="Result"&&v.length===2&&v[0].name==="T"&&v[1].name==="E")return{type:"result",value:{ok:s(v[0].type),ko:s(v[1].type)}};if(o.value.length===0)return{type:"void"};let d={},i={};return o.value.forEach(p=>{let n=p.name;if(i[n]=p.docs,p.fields.length===0){d[n]={type:"void",idx:p.index};return}if(p.fields.length===1&&!p.fields[0].name){d[n]={type:"lookupEntry",value:s(p.fields[0].type),idx:p.index};return}let f=!0,b={},g={};p.fields.forEach((k,V)=>{f=f&&!!k.name;let C=k.name||V;b[C]=s(k.type),g[C]=k.docs}),d[n]=f?{type:"struct",value:b,innerDocs:g,idx:p.index}:{type:"tuple",value:Object.values(b),innerDocs:Object.values(g),idx:p.index}}),{type:"enum",value:d,innerDocs:i}}if(o.tag==="sequence")return{type:"sequence",value:s(o.value)};if(o.tag==="array"){let{len:d}=o.value,i=s(o.value.type);return d===0?{type:"void"}:d===1?i:{type:"array",value:i,len:o.value.len}}if(o.tag==="tuple"){if(o.value.length===0)return{type:"void"};if(o.value.length===1)return s(o.value[0]);let d=o.value.map(n=>s(n)),i=o.value.map(n=>e[n].docs);return d.every(n=>n.id===d[0].id)&&i.every(n=>n.length===0)?{type:"array",value:d[0],len:d.length}:{type:"tuple",value:d,innerDocs:i}}if(o.tag==="primitive")return{type:"primitive",value:o.value.tag};if(o.tag==="compact"){let d=s(o.value);return d.type==="void"?{type:"compact",isBig:null}:{type:"compact",isBig:Number(d.value.slice(1))>32}}return{type:o.tag}});return s};var y=X(require("@polkadot-api/substrate-bindings"));var M=(e,t,l)=>(u,r,a,...s)=>{let{id:c}=u;if(r.has(c))return r.get(c);if(a.has(c)){let m=t(()=>r.get(c),u,...s);return r.set(c,m),m}a.add(c);let o=e(u,r,a,...s);return a.delete(c),r.has(c)&&(o=l(o,r.get(c),u,...s)),r.set(c,o),o};var B=require("@polkadot-api/utils"),Z=y.Bin(),$=(e,t,l,u)=>{if(e.type==="primitive")return y[e.value];if(e.type==="void")return y._void;if(e.type==="AccountId32")return u;if(e.type==="AccountId20")return y.ethAccount;if(e.type==="compact")return y.compact;if(e.type==="bitSequence")return y.bitSequence;let r=i=>P(i,t,l,u),a=(i,p)=>{let n=r(i);return p?y.Vector(n,p):y.Vector(n)},s=i=>y.Tuple(...i.map(r)),c=i=>{let p=Object.fromEntries(Object.entries(i).map(([n,f])=>[n,r(f)]));return y.Struct(p)};if(e.type==="sequence"&&e.value.type==="primitive"&&e.value.value==="u8")return Z;if(e.type==="array")return e.value.type==="primitive"&&e.value.value==="u8"?y.Bin(e.len):a(e.value,e.len);if(e.type==="sequence")return a(e.value);if(e.type==="tuple")return s(e.value);if(e.type==="struct")return c(e.value);if(e.type==="option")return y.Option(r(e.value));if(e.type==="result")return y.Result(r(e.value.ok),r(e.value.ko));let o=Object.values(e.value).map(i=>i.type==="void"?y._void:i.type==="lookupEntry"?r(i.value):i.type==="tuple"?s(i.value):c(i.value)),m=Object.fromEntries(Object.keys(e.value).map((i,p)=>[i,o[p]])),v=Object.values(e.value).map(i=>i.idx);return v.every((i,p)=>i===p)?y.Variant(m):y.Variant(m,v)},P=M($,y.Self,e=>e),ee=e=>{let t=e.lookup,l=A(t),u=y.AccountId(),r=new Map,a=n=>P(l(n),r,new Set,u),s=e.pallets.find(n=>n.name==="System")?.constants.find(n=>n.name==="SS58Prefix"),c;if(s)try{let n=a(s.type).dec(s.value);typeof n=="number"&&(c=n,u=y.AccountId(n))}catch{}let o=new Map,m=(n,f)=>{let b=o.get(n);b||o.set(n,b=y.Storage(n));let g=e.pallets.find(L=>L.name===n).storage.items.find(L=>L.name===f),k=(L,...I)=>{let q=b(...I);return{...q,len:L,fallback:g.modifier===1?q.dec(g.fallback):void 0}};if(g.type.tag==="plain")return k(0,f,a(g.type.value).dec);let{key:V,value:C,hashers:F}=g.type.value,z=a(C),R=F.map(L=>y[L.tag]),W=R.length===1?[[a(V),R[0]]]:l(V).value.map((L,I)=>[a(L.id),R[I]]);return k(R.length,f,z.dec,...W)},v=n=>n.type==="void"?y._void:n.type==="lookupEntry"?a(n.value.id):n.type==="tuple"?y.Tuple(...Object.values(n.value).map(f=>a(f.id))):y.Struct((0,B.mapObject)(n.value,f=>a(f.id))),d=(n,f)=>{let b=e.pallets.find(g=>g.name===n).constants.find(g=>g.name===f);return a(b.type)},i=n=>(f,b)=>{let g=e.pallets.find(C=>C.name===f),k=l(g[n]);if(k.type!=="enum")throw null;let V=k.value[b];return{location:[g.index,V.idx],codec:v(k.value[b])}},p=(n,f)=>{let b=e.apis.find(g=>g.name===n)?.methods.find(g=>g.name===f);if(!b)throw null;return{args:y.Tuple(...b.inputs.map(g=>a(g.type))),value:a(b.output)}};return{buildDefinition:a,buildStorage:m,buildEvent:i("events"),buildError:i("errors"),buildRuntimeCall:p,buildCall:i("calls"),buildConstant:d,ss58Prefix:c}};var O=require("@polkadot-api/substrate-bindings");var _=new TextEncoder,te=_.encode.bind(_),h=e=>{let t=new Uint8Array(e.length*8),l=new DataView(t.buffer);for(let u=0;u<e.length;u++)l.setBigUint64(u*8,e[u]);return(0,O.h64)(t)},G=e=>h(e.map(t=>(0,O.h64)(te(t)))),E={primitive:0n,vector:1n,tuple:2n,struct:3n,option:4n,result:5n,enum:6n,void:7n},S={undefined:0n,number:1n,string:2n,bigint:3n,boolean:4n,bitSequence:5n,byteSequence:6n,accountId32:7n,accountId20:8n},re={bool:S.boolean,char:S.string,str:S.string,u8:S.number,u16:S.number,u32:S.number,u64:S.bigint,u128:S.bigint,u256:S.bigint,i8:S.number,i16:S.number,i32:S.number,i64:S.bigint,i128:S.bigint,i256:S.bigint},T=(e,t,l)=>{let u=Object.entries(t).sort(([s],[c])=>s.localeCompare(c)),r=G(u.map(([s])=>s)),a=h(u.map(([,s])=>l(s)));return h([e,r,a])},w=(e,t=new Map)=>{if(t.has(e.id))return t;switch(e.type){case"array":case"option":case"sequence":t.set(e.id,[e,new Set([e.value.id])]),w(e.value,t);break;case"enum":{let l=Object.values(e.value).flatMap(u=>u.type==="void"?[]:u.type==="lookupEntry"?u.value:u.type==="struct"?Object.values(u.value):u.value);t.set(e.id,[e,new Set(l.map(u=>u.id))]),l.forEach(u=>w(u,t));break}case"result":t.set(e.id,[e,new Set([e.value.ok.id,e.value.ko.id])]),w(e.value.ok,t),w(e.value.ko,t);break;case"struct":{let l=Object.values(e.value);t.set(e.id,[e,new Set(l.map(u=>u.id))]),l.forEach(u=>w(u,t));break}case"tuple":t.set(e.id,[e,new Set(e.value.map(l=>l.id))]),e.value.forEach(l=>w(l,t));break;default:t.set(e.id,[e,new Set])}return t},ne=(e,t)=>{if(e.type==="primitive")return h([E.primitive,re[e.value]]);if(e.type==="void")return h([E.void]);if(e.type==="compact")return h([E.primitive,S[e.isBig||e.isBig===null?"bigint":"number"]]);if(e.type==="bitSequence")return h([E.primitive,S.bitSequence]);if(e.type==="AccountId32")return h([E.primitive,S.accountId32]);if(e.type==="AccountId20")return h([E.primitive,S.accountId20]);if(e.type==="array"){let r=e.value;if(r.type==="primitive"&&r.value==="u8")return h([E.primitive,S.byteSequence,BigInt(e.len)]);let a=t(r);return h([E.vector,a,BigInt(e.len)])}if(e.type==="sequence"){let r=e.value;if(r.type==="primitive"&&r.value==="u8")return h([E.primitive,S.byteSequence]);let a=t(r);return h([E.vector,a])}let l=r=>h([E.tuple,...r.map(t)]),u=r=>T(E.struct,r,t);return e.type==="tuple"?l(e.value):e.type==="struct"?u(e.value):e.type==="option"?h([E.option,t(e.value)]):e.type==="result"?h([E.result,t(e.value.ok),t(e.value.ko)]):T(E.enum,e.value,r=>{if(r.type==="lookupEntry")return t(r.value);switch(r.type){case"void":return h([E.void]);case"tuple":return l(r.value);case"struct":return u(r.value)}})},oe=e=>{let t=new Map,l=0,u=[],r=[];function a(s){let c={index:l,lowLink:l,onStack:!0};t.set(s,c),l++,u.push(s);let o=e.get(s)[1];for(let m of o){let v=t.get(m);v?v.onStack&&(c.lowLink=Math.min(c.lowLink,v.index)):(a(m),c.lowLink=Math.min(c.lowLink,t.get(m).lowLink))}if(c.lowLink===c.index){let m=new Set,v=-1;do v=u.pop(),t.get(v).onStack=!1,m.add(v);while(v!==s);m.size>1&&r.push(m)}}for(let s of e.keys())t.has(s)||a(s);return r},ie=e=>{let t=new Set(e.map((r,a)=>a)),l=new Map(e.map((r,a)=>[a,new Set]));e.forEach((r,a)=>{e.slice(a+1).forEach((s,c)=>{let o=c+a+1;new Set([...r,...s]).size!==r.size+s.size&&(l.get(a).add(o),l.get(o).add(a))})});let u=[];for(;t.size;){let r=new Set,a=[t.values().next().value];for(;a.length;){let s=a.pop();if(!t.has(s))continue;t.delete(s),e[s].forEach(o=>r.add(Number(o))),l.get(s).forEach(o=>a.push(o))}u.push(r)}return u},ae=(e,t)=>{let l=a=>{let s=a.values().next().value,c=t.get(s)[0];return Array.from(w(c).keys())},u=new Array;function r(a){u.includes(a)||(e.filter(c=>c!==a&&l(a).some(o=>c.has(o))).forEach(c=>r(c)),u.includes(a))||u.push(a)}return e.forEach(a=>r(a)),u},ue=(e,t)=>{if(t.has(e.id))return t.get(e.id);let l=w(e),u=oe(l),r=ie(u),a=ae(r,l),s=(c,o,m=!1)=>{if(!m&&t.has(c.id))return t.get(c.id);let v=ne(c,d=>s(d,o));return o(c.id,v),v};return a.forEach(c=>{c.forEach(o=>t.set(o,0n));for(let o=0;o<c.size;o++){let m=new Map;c.forEach(v=>s(l.get(v)[0],(d,i)=>{(c.has(d)?m:t).set(d,i)},!0)),Array.from(m.entries()).forEach(([v,d])=>t.set(v,d))}}),s(e,(c,o)=>t.set(c,o))},se=e=>{let t=e.lookup,l=A(t),u=new Map,r=i=>ue(l(i),u),a=(i,p)=>{try{let n=e.pallets.find(V=>V.name===i).storage.items.find(V=>V.name===p);if(n.type.tag==="plain")return r(n.type.value);let{key:f,value:b}=n.type.value,g=r(b),k=r(f);return h([g,k])}catch{return null}},s=(i,p)=>{try{let n=e.apis.find(k=>k.name===i)?.methods.find(k=>k.name===p);if(!n)throw null;let f=G(n.inputs.map(k=>k.name)),b=h(n.inputs.map(k=>r(k.type))),g=r(n.output);return h([f,b,g])}catch{return null}},c=i=>{if(i.type==="void")return h([0n]);if(i.type==="tuple"){let p=Object.values(i.value).map(n=>r(n.id));return h([E.tuple,...p])}return T(E.struct,i.value,p=>r(p.id))},o=i=>T(E.tuple,i.value,p=>r(p.id)),m=i=>(p,n)=>{try{let f=e.pallets.find(k=>k.name===p),b=l(f[i]);if(r(b.id),b.type!=="enum")throw null;let g=b.value[n];return g.type==="lookupEntry"?r(g.value.id):c(g)}catch{return null}},v=(i,p)=>{try{let n=e.pallets.find(f=>f.name===i).constants.find(f=>f.name===p);return r(n.type)}catch{return null}},d=i=>(...p)=>i(...p)?.toString(32)??null;return{buildDefinition:d(r),buildRuntimeCall:d(s),buildStorage:d(a),buildCall:d(m("calls")),buildEvent:d(m("events")),buildError:d(m("errors")),buildConstant:d(v),buildComposite:d(c),buildNamedTuple:d(o),getAllGeneratedChecksums:()=>Array.from(u.values()).map(i=>i.toString(32))}};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/min/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/lookups.ts","../../src/dynamic-builder.ts","../../src/with-cache.ts","../../src/checksum-builder.ts"],"sourcesContent":["export * from \"./lookups\"\nexport * from \"./dynamic-builder\"\nexport * from \"./checksum-builder\"\n","import type { StringRecord, V14Lookup } from \"@polkadot-api/substrate-bindings\"\n\nexport type MetadataPrimitives =\n | \"bool\"\n | \"char\"\n | \"str\"\n | \"u8\"\n | \"u16\"\n | \"u32\"\n | \"u64\"\n | \"u128\"\n | \"u256\"\n | \"i8\"\n | \"i16\"\n | \"i32\"\n | \"i64\"\n | \"i128\"\n | \"i256\"\n\nexport type PrimitiveVar = {\n type: \"primitive\"\n value: MetadataPrimitives\n}\n\nexport type VoidVar = { type: \"void\" }\nexport type CompactVar = { type: \"compact\"; isBig: boolean | null }\nexport type BitSequenceVar = { type: \"bitSequence\" }\nexport type AccountId32 = { type: \"AccountId32\" }\nexport type TerminalVar =\n | PrimitiveVar\n | VoidVar\n | CompactVar\n | BitSequenceVar\n | AccountId32\n\n/* Array-like vars:\n * - TupleVar: Mixed types, fixed length\n * - Sequence: One type, arbitrary length\n * - Array: One type, fixed length\n */\nexport type TupleVar = {\n type: \"tuple\"\n value: LookupEntry[]\n innerDocs: Array<string[]>\n}\nexport type StructVar = {\n type: \"struct\"\n value: StringRecord<LookupEntry>\n innerDocs: StringRecord<string[]>\n}\nexport type EnumVar = {\n type: \"enum\"\n value: StringRecord<\n (\n | { type: \"lookupEntry\"; value: LookupEntry }\n | VoidVar\n | TupleVar\n | StructVar\n ) & { idx: number }\n >\n innerDocs: StringRecord<string[]>\n}\nexport type OptionVar = {\n type: \"option\"\n value: LookupEntry\n}\nexport type ResultVar = {\n type: \"result\"\n value: { ok: LookupEntry; ko: LookupEntry }\n}\nexport type SequenceVar = {\n type: \"sequence\"\n value: LookupEntry\n}\nexport type ArrayVar = {\n type: \"array\"\n value: LookupEntry\n len: number\n}\n\nexport type ComposedVar =\n | TupleVar\n | StructVar\n | SequenceVar\n | ArrayVar\n | OptionVar\n | ResultVar\n | EnumVar\n\nexport type Var = TerminalVar | ComposedVar\n\nexport type LookupEntry = {\n id: number\n} & Var\n\nexport const getLookupFn = (lookupData: V14Lookup) => {\n const lookups = new Map<number, LookupEntry>()\n const from = new Set<number>()\n\n const withCache = (\n fn: (id: number) => Var,\n ): ((id: number) => LookupEntry) => {\n return (id) => {\n let entry = lookups.get(id)\n\n if (entry) return entry\n\n if (from.has(id)) {\n const entry = {\n id,\n } as LookupEntry\n\n lookups.set(id, entry)\n return entry\n }\n\n from.add(id)\n const value = fn(id)\n entry = lookups.get(id)\n\n if (entry) {\n Object.assign(entry, value)\n } else {\n entry = {\n id,\n ...value,\n }\n lookups.set(id, entry!)\n }\n from.delete(id)\n return entry\n }\n }\n\n let isAccountId32SearchOn = true\n const getLookupEntryDef = withCache((id): Var => {\n const { def, path, params } = lookupData[id]\n\n if (def.tag === \"composite\") {\n if (def.value.length === 0) return { type: \"void\" }\n\n // used to be a \"pointer\"\n if (def.value.length === 1) {\n if (\n isAccountId32SearchOn &&\n path.join(\",\") === \"sp_core,crypto,AccountId32\"\n ) {\n isAccountId32SearchOn = false\n return { type: \"AccountId32\" }\n }\n return getLookupEntryDef(def.value[0].type as number)\n }\n\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n def.value.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n values[key] = getLookupEntryDef(x.type)\n innerDocs[key] = x.docs\n })\n\n return allKey\n ? {\n type: \"struct\",\n value: values as StringRecord<LookupEntry>,\n innerDocs: innerDocs as StringRecord<string[]>,\n }\n : {\n type: \"tuple\",\n value: Object.values(values),\n innerDocs: Object.values(innerDocs),\n }\n }\n\n if (def.tag === \"variant\") {\n if (\n path.length === 1 &&\n path[0] === \"Option\" &&\n params.length === 1 &&\n params[0].name === \"T\"\n ) {\n const value = getLookupEntryDef(params[0].type!)\n return value.type === \"void\"\n ? // Option<void> would return a Codec<undefined> which makes no sense\n // Therefore, we better treat it as a bool\n { type: \"primitive\", value: \"bool\" }\n : {\n type: \"option\",\n value,\n }\n }\n\n if (\n path.length === 1 &&\n path[0] === \"Result\" &&\n params.length === 2 &&\n params[0].name === \"T\" &&\n params[1].name === \"E\"\n ) {\n return {\n type: \"result\",\n value: {\n ok: getLookupEntryDef(params[0].type as number),\n ko: getLookupEntryDef(params[1].type as number),\n },\n }\n }\n if (def.value.length === 0) return { type: \"void\" }\n\n const enumValue: StringRecord<EnumVar[\"value\"][keyof EnumVar[\"value\"]]> =\n {}\n const enumDocs: StringRecord<string[]> = {}\n\n def.value.forEach((x) => {\n const key = x.name\n enumDocs[key] = x.docs\n\n if (x.fields.length === 0) {\n enumValue[key] = { type: \"void\", idx: x.index }\n return\n }\n\n if (x.fields.length === 1 && !x.fields[0].name) {\n enumValue[key] = {\n type: \"lookupEntry\",\n value: getLookupEntryDef(x.fields[0].type),\n idx: x.index,\n }\n return\n }\n\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n\n x.fields.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n values[key] = getLookupEntryDef(x.type as number)\n innerDocs[key] = x.docs\n })\n\n enumValue[key] = allKey\n ? {\n type: \"struct\",\n value: values as StringRecord<LookupEntry>,\n innerDocs: innerDocs as StringRecord<string[]>,\n idx: x.index,\n }\n : {\n type: \"tuple\",\n value: Object.values(values),\n innerDocs: Object.values(innerDocs),\n idx: x.index,\n }\n })\n\n return {\n type: \"enum\",\n value: enumValue,\n innerDocs: enumDocs,\n }\n }\n\n if (def.tag === \"sequence\") {\n const value = getLookupEntryDef(def.value as number)\n return {\n type: \"sequence\",\n value,\n }\n }\n\n if (def.tag === \"array\") {\n const { len } = def.value\n const value = getLookupEntryDef(def.value.type)\n\n if (len === 0) return { type: \"void\" }\n if (len === 1) return value\n\n return {\n type: \"array\",\n value,\n len: def.value.len,\n }\n }\n\n if (def.tag === \"tuple\") {\n if (def.value.length === 0) return { type: \"void\" }\n\n // use to be a \"pointer\"\n if (def.value.length === 1)\n return getLookupEntryDef(def.value[0] as number)\n\n const value = def.value.map((x) => getLookupEntryDef(x as number))\n const innerDocs = def.value.map((x) => lookupData[x].docs)\n\n const areAllSame = value.every((v) => v.id === value[0].id)\n if (areAllSame && innerDocs.every((doc) => doc.length === 0)) {\n return {\n type: \"array\",\n value: value[0],\n len: value.length,\n }\n }\n\n return {\n type: \"tuple\",\n value,\n innerDocs,\n }\n }\n\n if (def.tag === \"primitive\") {\n return {\n type: \"primitive\",\n value: def.value.tag,\n }\n }\n\n if (def.tag === \"compact\") {\n const translated = getLookupEntryDef(def.value) as PrimitiveVar | VoidVar\n if (translated.type === \"void\") return { type: \"compact\", isBig: null }\n\n const isBig = Number(translated.value.slice(1)) > 32\n\n return {\n type: \"compact\",\n isBig,\n }\n }\n\n // bitSequence\n return {\n type: def.tag,\n }\n })\n\n return getLookupEntryDef\n}\n","import type { Codec, StringRecord, V15 } from \"@polkadot-api/substrate-bindings\"\nimport type { EnumVar, LookupEntry, TupleVar } from \"./lookups\"\nimport { getLookupFn } from \"./lookups\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport { withCache } from \"./with-cache\"\nimport { mapObject } from \"@polkadot-api/utils\"\n\nconst _bytes = scale.Bin()\n\nconst _buildCodec = (\n input: LookupEntry,\n cache: Map<number, Codec<any>>,\n stack: Set<number>,\n _accountId: Codec<scale.SS58String>,\n): Codec<any> => {\n if (input.type === \"primitive\") return scale[input.value]\n if (input.type === \"void\") return scale._void\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"compact\") return scale.compact\n if (input.type === \"bitSequence\") return scale.bitSequence\n\n const buildNextCodec = (nextInput: LookupEntry): Codec<any> =>\n buildCodec(nextInput, cache, stack, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const innerCodec = buildNextCodec(inner)\n return len ? scale.Vector(innerCodec, len) : scale.Vector(innerCodec)\n }\n\n const buildTuple = (value: LookupEntry[]) =>\n scale.Tuple(...value.map(buildNextCodec))\n\n const buildStruct = (value: StringRecord<LookupEntry>) => {\n const inner = Object.fromEntries(\n Object.entries(value).map(([key, value]) => [key, buildNextCodec(value)]),\n ) as StringRecord<Codec<any>>\n return scale.Struct(inner)\n }\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return _bytes\n }\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\")\n return scale.Bin(input.len)\n\n return buildVector(input.value, input.len)\n }\n\n if (input.type === \"sequence\") return buildVector(input.value)\n if (input.type === \"tuple\") return buildTuple(input.value)\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\") return scale.Option(buildNextCodec(input.value))\n\n if (input.type === \"result\")\n return scale.Result(\n buildNextCodec(input.value.ok),\n buildNextCodec(input.value.ko),\n )\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n if (v.type === \"void\") return scale._void\n if (v.type === \"lookupEntry\") return buildNextCodec(v.value)\n return v.type === \"tuple\" ? buildTuple(v.value) : buildStruct(v.value)\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => {\n return [key, dependencies[idx]]\n }),\n ) as StringRecord<Codec<any>>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n return areIndexesSorted\n ? scale.Variant(inner)\n : scale.Variant(inner, indexes as any)\n}\nconst buildCodec = withCache(_buildCodec, scale.Self, (res) => res)\n\nexport const getDynamicBuilder = (metadata: V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n let _accountId = scale.AccountId()\n\n const cache = new Map()\n const buildDefinition = (id: number): Codec<any> =>\n buildCodec(getLookupEntryDef(id), cache, new Set(), _accountId)\n\n const prefix = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"SS58Prefix\")\n\n let ss58Prefix: number | undefined\n if (prefix) {\n try {\n const prefixVal = buildDefinition(prefix.type).dec(prefix.value)\n if (typeof prefixVal === \"number\") {\n ss58Prefix = prefixVal\n _accountId = scale.AccountId(prefixVal)\n }\n } catch (_) {}\n }\n\n const storagePallets = new Map<string, ReturnType<typeof scale.Storage>>()\n\n const buildStorage = (pallet: string, entry: string) => {\n let storagePallet = storagePallets.get(pallet)\n if (!storagePallet)\n storagePallets.set(pallet, (storagePallet = scale.Storage(pallet)))\n\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .storage!.items.find((s) => s.name === entry)!\n\n const storageWithFallback = (\n len: number,\n ...args: Parameters<ReturnType<typeof scale.Storage>>\n ) => {\n const result = storagePallet!(...args)\n return {\n ...result,\n len,\n fallback:\n storageEntry.modifier === 1\n ? result.dec(storageEntry.fallback)\n : undefined,\n }\n }\n\n if (storageEntry.type.tag === \"plain\")\n return storageWithFallback(\n 0,\n entry,\n buildDefinition(storageEntry.type.value).dec,\n )\n\n const { key, value, hashers } = storageEntry.type.value\n const val = buildDefinition(value)\n const hashes = hashers.map((x) => scale[x.tag])\n\n const hashArgs: Array<scale.EncoderWithHash<any>> =\n hashes.length === 1\n ? [[buildDefinition(key), hashes[0]]]\n : (getLookupEntryDef(key) as TupleVar).value.map(\n (x, idx): scale.EncoderWithHash<any> => [\n buildDefinition(x.id),\n hashes[idx],\n ],\n )\n return storageWithFallback(hashes.length, entry, val.dec, ...hashArgs)\n }\n\n const buildEnumEntry = (\n entry: EnumVar[\"value\"][keyof EnumVar[\"value\"]],\n ): Codec<any> => {\n if (entry.type === \"void\") return scale._void\n if (entry.type === \"lookupEntry\") return buildDefinition(entry.value.id)\n return entry.type === \"tuple\"\n ? scale.Tuple(\n ...Object.values(entry.value).map((l) => buildDefinition(l.id)),\n )\n : scale.Struct(\n mapObject(entry.value, (x) => buildDefinition(x.id)) as StringRecord<\n Codec<any>\n >,\n )\n }\n\n const buildConstant = (pallet: string, constantName: string) => {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type as number)\n }\n\n const buildVariant =\n (type: \"errors\" | \"events\" | \"calls\") =>\n (\n pallet: string,\n name: string,\n ): {\n codec: Codec<any>\n location: [number, number]\n } => {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n const lookup = getLookupEntryDef(palletEntry[type]!)\n if (lookup.type !== \"enum\") throw null\n const entry = lookup.value[name]\n\n return {\n location: [palletEntry.index, entry.idx],\n codec: buildEnumEntry(lookup.value[name]),\n }\n }\n\n const buildRuntimeCall = (api: string, method: string) => {\n const entry = metadata.apis\n .find((x) => x.name === api)\n ?.methods.find((x) => x.name === method)\n if (!entry) throw null\n\n return {\n args: scale.Tuple(...entry.inputs.map((x) => buildDefinition(x.type))),\n value: buildDefinition(entry.output),\n }\n }\n\n return {\n buildDefinition,\n buildStorage,\n buildEvent: buildVariant(\"events\"),\n buildError: buildVariant(\"errors\"),\n buildRuntimeCall,\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n ss58Prefix,\n }\n}\n","import { LookupEntry } from \"./lookups\"\n\ntype FnWithStack<Other extends Array<any>, T> = (\n input: LookupEntry,\n cache: Map<number, T>,\n stack: Set<number>,\n ...rest: Other\n) => T\n\nexport const withCache =\n <Other extends Array<any>, T>(\n fn: FnWithStack<Other, T>,\n onEnterCircular: (\n cacheGetter: () => T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n onExitCircular: (\n outter: T,\n inner: T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n ): FnWithStack<Other, T> =>\n (input, cache, stack, ...rest) => {\n const { id } = input\n if (cache.has(id)) return cache.get(id)!\n\n if (stack.has(id)) {\n const res = onEnterCircular(() => cache.get(id)!, input, ...rest)\n cache.set(id, res)\n return res\n }\n\n stack.add(id)\n let result = fn(input, cache, stack, ...rest)\n stack.delete(id)\n\n if (cache.has(id))\n result = onExitCircular(result, cache.get(id)!, input, ...rest)\n\n cache.set(id, result)\n return result\n }\n","import type { StringRecord, V15 } from \"@polkadot-api/substrate-bindings\"\nimport { h64 } from \"@polkadot-api/substrate-bindings\"\nimport {\n LookupEntry,\n MetadataPrimitives,\n StructVar,\n TupleVar,\n VoidVar,\n getLookupFn,\n} from \"./lookups\"\n\nconst textEncoder = new TextEncoder()\nconst encodeText = textEncoder.encode.bind(textEncoder)\n\nconst getChecksum = (values: Array<bigint>) => {\n const res = new Uint8Array(values.length * 8)\n const dv = new DataView(res.buffer)\n\n for (let i = 0; i < values.length; i++) dv.setBigUint64(i * 8, values[i])\n\n return h64(res)\n}\nconst getStringChecksum = (values: Array<string>) =>\n getChecksum(values.map((v) => h64(encodeText(v))))\n\ntype Shape =\n | \"primitive\"\n | \"void\"\n | \"vector\"\n | \"tuple\"\n | \"struct\"\n | \"option\"\n | \"result\"\n | \"enum\"\nconst shapeIds: Record<Shape, bigint> = {\n primitive: 0n,\n vector: 1n,\n tuple: 2n,\n struct: 3n,\n option: 4n,\n result: 5n,\n enum: 6n,\n void: 7n,\n}\n\ntype RuntimePrimitives =\n | \"undefined\"\n | \"number\"\n | \"string\"\n | \"bigint\"\n | \"boolean\"\n | \"bitSequence\"\n | \"byteSequence\"\n | \"accountId\"\n\nconst runtimePrimitiveIds: Record<RuntimePrimitives, bigint> = {\n undefined: 0n,\n number: 1n,\n string: 2n,\n bigint: 3n,\n boolean: 4n,\n bitSequence: 5n, // {bitsLen: number, bytes: Uint8Array}\n byteSequence: 6n, // Binary\n accountId: 7n, // SS58String\n}\n\nconst metadataPrimitiveIds: Record<MetadataPrimitives, bigint> = {\n bool: runtimePrimitiveIds.boolean,\n char: runtimePrimitiveIds.string,\n str: runtimePrimitiveIds.string,\n u8: runtimePrimitiveIds.number,\n u16: runtimePrimitiveIds.number,\n u32: runtimePrimitiveIds.number,\n u64: runtimePrimitiveIds.bigint,\n u128: runtimePrimitiveIds.bigint,\n u256: runtimePrimitiveIds.bigint,\n i8: runtimePrimitiveIds.number,\n i16: runtimePrimitiveIds.number,\n i32: runtimePrimitiveIds.number,\n i64: runtimePrimitiveIds.bigint,\n i128: runtimePrimitiveIds.bigint,\n i256: runtimePrimitiveIds.bigint,\n}\n\nconst structLikeBuilder = <T>(\n shapeId: bigint,\n input: StringRecord<T>,\n innerChecksum: (value: T) => bigint,\n) => {\n const sortedEntries = Object.entries(input).sort(([a], [b]) =>\n a.localeCompare(b),\n )\n const keysChecksum = getStringChecksum(sortedEntries.map(([key]) => key))\n const valuesChecksum = getChecksum(\n sortedEntries.map(([, entry]) => innerChecksum(entry)),\n )\n\n return getChecksum([shapeId, keysChecksum, valuesChecksum])\n}\n\ntype Graph = Map<number, [LookupEntry, Set<number>]>\nconst buildGraph = (entry: LookupEntry, result: Graph = new Map()) => {\n if (result.has(entry.id)) return result\n\n switch (entry.type) {\n case \"array\":\n case \"option\":\n case \"sequence\":\n result.set(entry.id, [entry, new Set([entry.value.id])])\n buildGraph(entry.value, result)\n break\n case \"enum\": {\n const children = Object.values(entry.value).flatMap((value) => {\n if (value.type === \"void\") return []\n if (value.type === \"lookupEntry\") return value.value\n if (value.type === \"struct\") return Object.values(value.value)\n return value.value\n })\n result.set(entry.id, [entry, new Set(children.map((child) => child.id))])\n children.forEach((child) => buildGraph(child, result))\n break\n }\n case \"result\":\n result.set(entry.id, [\n entry,\n new Set([entry.value.ok.id, entry.value.ko.id]),\n ])\n buildGraph(entry.value.ok, result)\n buildGraph(entry.value.ko, result)\n break\n case \"struct\": {\n const children = Object.values(entry.value)\n result.set(entry.id, [entry, new Set(children.map((child) => child.id))])\n children.forEach((child) => buildGraph(child, result))\n break\n }\n case \"tuple\":\n result.set(entry.id, [\n entry,\n new Set(entry.value.map((child) => child.id)),\n ])\n entry.value.forEach((child) => buildGraph(child, result))\n break\n default:\n result.set(entry.id, [entry, new Set()])\n }\n return result\n}\n\nconst _buildChecksum = (\n input: LookupEntry,\n buildNextChecksum: (entry: LookupEntry) => bigint,\n): bigint => {\n if (input.type === \"primitive\")\n return getChecksum([shapeIds.primitive, metadataPrimitiveIds[input.value]])\n\n if (input.type === \"void\") return getChecksum([shapeIds.void])\n\n if (input.type === \"compact\")\n return getChecksum([\n shapeIds.primitive,\n runtimePrimitiveIds[\n input.isBig || input.isBig === null ? \"bigint\" : \"number\"\n ],\n ])\n\n if (input.type === \"bitSequence\")\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.bitSequence])\n\n if (input.type === \"AccountId32\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId])\n }\n\n if (input.type === \"array\") {\n const innerValue = input.value\n if (innerValue.type === \"primitive\" && innerValue.value === \"u8\") {\n return getChecksum([\n shapeIds.primitive,\n runtimePrimitiveIds.byteSequence,\n BigInt(input.len),\n ])\n }\n const innerChecksum = buildNextChecksum(innerValue)\n\n return getChecksum([shapeIds.vector, innerChecksum, BigInt(input.len)])\n }\n\n if (input.type === \"sequence\") {\n const innerValue = input.value\n if (innerValue.type === \"primitive\" && innerValue.value === \"u8\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.byteSequence])\n }\n const innerChecksum = buildNextChecksum(innerValue)\n\n return getChecksum([shapeIds.vector, innerChecksum])\n }\n\n const buildTuple = (entries: LookupEntry[]) =>\n getChecksum([shapeIds.tuple, ...entries.map(buildNextChecksum)])\n\n const buildStruct = (entries: StringRecord<LookupEntry>) =>\n structLikeBuilder(shapeIds.struct, entries, buildNextChecksum)\n\n if (input.type === \"tuple\") return buildTuple(input.value)\n\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\")\n return getChecksum([shapeIds.option, buildNextChecksum(input.value)])\n\n if (input.type === \"result\")\n return getChecksum([\n shapeIds.result,\n buildNextChecksum(input.value.ok),\n buildNextChecksum(input.value.ko),\n ])\n\n return structLikeBuilder(shapeIds.enum, input.value, (entry) => {\n if (entry.type === \"lookupEntry\") return buildNextChecksum(entry.value)\n switch (entry.type) {\n case \"void\":\n return getChecksum([shapeIds.void])\n case \"tuple\":\n return buildTuple(entry.value)\n case \"struct\":\n return buildStruct(entry.value)\n }\n })\n}\n\nconst getCycles = (graph: Graph) => {\n // Tarjan's strongly connected components\n const tarjanState = new Map<\n number,\n {\n index: number\n lowLink: number\n onStack: boolean\n }\n >()\n let index = 0\n const stack: number[] = []\n const result: Array<Set<number>> = []\n\n function strongConnect(v: number): void {\n const state = {\n index: index,\n lowLink: index,\n onStack: true,\n }\n tarjanState.set(v, state)\n index++\n stack.push(v)\n\n const edges = graph.get(v)![1]\n for (let w of edges) {\n const edgeState = tarjanState.get(w)\n if (!edgeState) {\n strongConnect(w)\n state.lowLink = Math.min(state.lowLink, tarjanState.get(w)!.lowLink)\n } else if (edgeState.onStack) {\n state.lowLink = Math.min(state.lowLink, edgeState.index)\n }\n }\n\n if (state.lowLink === state.index) {\n const component = new Set<number>()\n\n let poppedNode = -1\n do {\n poppedNode = stack.pop()!\n tarjanState.get(poppedNode)!.onStack = false\n component.add(poppedNode)\n } while (poppedNode !== v)\n\n if (component.size > 1) result.push(component)\n }\n }\n\n for (const node of graph.keys()) {\n if (!tarjanState.has(node)) {\n strongConnect(node)\n }\n }\n\n return result\n}\n\nconst getCyclicGroups = (cycles: Array<Set<number>>) => {\n const ungroupedCycles = new Set(cycles.map((_, i) => i))\n const edges = new Map(cycles.map((_, i) => [i, new Set<number>()]))\n cycles.forEach((cycle, i) => {\n cycles.slice(i + 1).forEach((otherCycle, _j) => {\n const j = _j + i + 1\n const combined = new Set([...cycle, ...otherCycle])\n if (combined.size !== cycle.size + otherCycle.size) {\n edges.get(i)!.add(j)\n edges.get(j)!.add(i)\n }\n })\n })\n const groups: Array<Set<number>> = []\n\n while (ungroupedCycles.size) {\n const group = new Set<number>()\n const toVisit = [ungroupedCycles.values().next().value]\n while (toVisit.length) {\n const idx = toVisit.pop()\n if (!ungroupedCycles.has(idx)) continue\n ungroupedCycles.delete(idx)\n\n const cycle = cycles[idx]\n cycle.forEach((v) => group.add(Number(v)))\n edges.get(idx)!.forEach((n) => toVisit.push(n))\n }\n groups.push(group)\n }\n\n return groups\n}\n\nconst sortCyclicGroups = (groups: Array<Set<number>>, graph: Graph) => {\n const getReachableNodes = (group: Set<number>) => {\n const first = group.values().next().value as number\n const entry = graph.get(first)![0]\n return Array.from(buildGraph(entry).keys())\n }\n\n const result: Array<Set<number>> = new Array()\n\n function dependentsFirst(group: Set<number>) {\n if (result.includes(group)) return\n const dependents = groups.filter(\n (candidate) =>\n candidate !== group &&\n getReachableNodes(group).some((node) => candidate.has(node)),\n )\n dependents.forEach((group) => dependentsFirst(group))\n if (result.includes(group)) return\n result.push(group)\n }\n\n groups.forEach((group) => dependentsFirst(group))\n return result\n}\n\nconst buildChecksum = (entry: LookupEntry, cache: Map<number, bigint>) => {\n if (cache.has(entry.id)) return cache.get(entry.id)!\n\n const graph = buildGraph(entry)\n const cycles = getCycles(graph)\n const cyclicGroups = getCyclicGroups(cycles)\n const sortedCyclicGroups = sortCyclicGroups(cyclicGroups, graph)\n\n // separate writeCache since we might want to not override the current cache to ensure deterministic result regardless of order\n const recursiveBuildChecksum = (\n entry: LookupEntry,\n writeCache: (id: number, value: bigint) => void,\n skipCache = false,\n ): bigint => {\n if (!skipCache && cache.has(entry.id)) {\n return cache.get(entry.id)!\n }\n const result = _buildChecksum(entry, (nextEntry) =>\n recursiveBuildChecksum(nextEntry, writeCache),\n )\n writeCache(entry.id, result)\n return result\n }\n\n sortedCyclicGroups.forEach((group) => {\n group.forEach((id) => cache.set(id, 0n))\n for (let i = 0; i < group.size; i++) {\n const results = new Map<number, bigint>()\n group.forEach((id) =>\n recursiveBuildChecksum(\n graph.get(id)![0],\n (id, value) => {\n // only store onto the actual cache results from other nodes\n // cyclic nodes would depend on sorting order.\n const writeCache = group.has(id) ? results : cache\n writeCache.set(id, value)\n },\n true,\n ),\n )\n Array.from(results.entries()).forEach(([id, checksum]) =>\n cache.set(id, checksum),\n )\n }\n })\n\n return recursiveBuildChecksum(entry, (id, value) => cache.set(id, value))\n}\n\nexport const getChecksumBuilder = (metadata: V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n\n const cache = new Map<number, bigint>()\n\n const buildDefinition = (id: number): bigint =>\n buildChecksum(getLookupEntryDef(id), cache)\n\n const buildStorage = (pallet: string, entry: string): bigint | null => {\n try {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .storage!.items.find((s) => s.name === entry)!\n\n if (storageEntry.type.tag === \"plain\")\n return buildDefinition(storageEntry.type.value)\n\n const { key, value } = storageEntry.type.value\n const val = buildDefinition(value)\n const returnKey = buildDefinition(key)\n return getChecksum([val, returnKey])\n } catch (_) {\n return null\n }\n }\n\n const buildRuntimeCall = (api: string, method: string): bigint | null => {\n try {\n const entry = metadata.apis\n .find((x) => x.name === api)\n ?.methods.find((x) => x.name === method)\n if (!entry) throw null\n\n const argNamesChecksum = getStringChecksum(\n entry.inputs.map((x) => x.name),\n )\n const argValuesChecksum = getChecksum(\n entry.inputs.map((x) => buildDefinition(x.type)),\n )\n const outputChecksum = buildDefinition(entry.output)\n\n return getChecksum([argNamesChecksum, argValuesChecksum, outputChecksum])\n } catch (_) {\n return null\n }\n }\n\n const buildComposite = (input: TupleVar | StructVar | VoidVar): bigint => {\n if (input.type === \"void\") return getChecksum([0n])\n\n if (input.type === \"tuple\") {\n const values = Object.values(input.value).map((entry) =>\n buildDefinition(entry.id),\n )\n\n return getChecksum([shapeIds.tuple, ...values])\n }\n\n // Otherwise struct\n return structLikeBuilder(shapeIds.struct, input.value, (entry) =>\n buildDefinition(entry.id),\n )\n }\n\n const buildNamedTuple = (input: StructVar): bigint => {\n return structLikeBuilder(shapeIds.tuple, input.value, (entry) =>\n buildDefinition(entry.id),\n )\n }\n\n const buildVariant =\n (variantType: \"errors\" | \"events\" | \"calls\") =>\n (pallet: string, name: string): bigint | null => {\n try {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n const enumLookup = getLookupEntryDef(\n palletEntry[variantType]! as number,\n )\n buildDefinition(enumLookup.id)\n\n if (enumLookup.type !== \"enum\") throw null\n const entry = enumLookup.value[name]\n return entry.type === \"lookupEntry\"\n ? buildDefinition(entry.value.id)\n : buildComposite(entry)\n } catch (_) {\n return null\n }\n }\n\n const buildConstant = (\n pallet: string,\n constantName: string,\n ): bigint | null => {\n try {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type)\n } catch (_) {\n return null\n }\n }\n\n const toStringEnhancer =\n <Args extends Array<any>>(\n fn: (...args: Args) => bigint | null,\n ): ((...args: Args) => string | null) =>\n (...args) =>\n fn(...args)?.toString(32) ?? null\n\n return {\n buildDefinition: toStringEnhancer(buildDefinition),\n buildRuntimeCall: toStringEnhancer(buildRuntimeCall),\n buildStorage: toStringEnhancer(buildStorage),\n buildCall: toStringEnhancer(buildVariant(\"calls\")),\n buildEvent: toStringEnhancer(buildVariant(\"events\")),\n buildError: toStringEnhancer(buildVariant(\"errors\")),\n buildConstant: toStringEnhancer(buildConstant),\n buildComposite: toStringEnhancer(buildComposite),\n buildNamedTuple: toStringEnhancer(buildNamedTuple),\n getAllGeneratedChecksums: () =>\n Array.from(cache.values()).map((v) => v.toString(32)),\n }\n}\n"],"mappings":"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","names":["src_exports","__export","getChecksumBuilder","getDynamicBuilder","getLookupFn","__toCommonJS","getLookupFn","lookupData","lookups","from","withCache","fn","id","entry","value","isAccountId32SearchOn","getLookupEntryDef","def","path","params","allKey","values","innerDocs","x","idx","key","enumValue","enumDocs","len","v","doc","translated","scale","withCache","fn","onEnterCircular","onExitCircular","input","cache","stack","rest","id","res","result","import_utils","_bytes","_buildCodec","input","cache","stack","_accountId","scale","buildNextCodec","nextInput","buildCodec","buildVector","inner","len","innerCodec","buildTuple","value","buildStruct","key","dependencies","v","idx","indexes","x","i","withCache","res","getDynamicBuilder","metadata","lookupData","getLookupEntryDef","getLookupFn","buildDefinition","id","prefix","ss58Prefix","prefixVal","storagePallets","buildStorage","pallet","entry","storagePallet","storageEntry","s","storageWithFallback","args","result","hashers","val","hashes","hashArgs","buildEnumEntry","l","buildConstant","constantName","buildVariant","type","name","palletEntry","lookup","buildRuntimeCall","api","method","import_substrate_bindings","textEncoder","encodeText","getChecksum","values","res","dv","i","getStringChecksum","v","shapeIds","runtimePrimitiveIds","metadataPrimitiveIds","structLikeBuilder","shapeId","input","innerChecksum","sortedEntries","a","b","keysChecksum","key","valuesChecksum","entry","buildGraph","result","children","value","child","_buildChecksum","buildNextChecksum","innerValue","buildTuple","entries","buildStruct","getCycles","graph","tarjanState","index","stack","strongConnect","state","edges","w","edgeState","component","poppedNode","node","getCyclicGroups","cycles","ungroupedCycles","_","cycle","otherCycle","_j","j","groups","group","toVisit","idx","n","sortCyclicGroups","getReachableNodes","first","dependentsFirst","candidate","buildChecksum","cache","cyclicGroups","sortedCyclicGroups","recursiveBuildChecksum","writeCache","skipCache","nextEntry","id","results","checksum","getChecksumBuilder","metadata","lookupData","getLookupEntryDef","getLookupFn","buildDefinition","buildStorage","pallet","storageEntry","x","s","val","returnKey","buildRuntimeCall","api","method","argNamesChecksum","argValuesChecksum","outputChecksum","buildComposite","buildNamedTuple","buildVariant","variantType","name","palletEntry","enumLookup","buildConstant","constantName","toStringEnhancer","fn","args"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/lookups.ts","../../src/dynamic-builder.ts","../../src/with-cache.ts","../../src/checksum-builder.ts"],"sourcesContent":["export * from \"./lookups\"\nexport * from \"./dynamic-builder\"\nexport * from \"./checksum-builder\"\n","import type { StringRecord, V14Lookup } from \"@polkadot-api/substrate-bindings\"\n\nexport type MetadataPrimitives =\n | \"bool\"\n | \"char\"\n | \"str\"\n | \"u8\"\n | \"u16\"\n | \"u32\"\n | \"u64\"\n | \"u128\"\n | \"u256\"\n | \"i8\"\n | \"i16\"\n | \"i32\"\n | \"i64\"\n | \"i128\"\n | \"i256\"\n\nexport type PrimitiveVar = {\n type: \"primitive\"\n value: MetadataPrimitives\n}\n\nexport type VoidVar = { type: \"void\" }\nexport type CompactVar = { type: \"compact\"; isBig: boolean | null }\nexport type BitSequenceVar = { type: \"bitSequence\" }\nexport type AccountId32 = { type: \"AccountId32\" }\nexport type AccountId20 = { type: \"AccountId20\" }\nexport type TerminalVar =\n | PrimitiveVar\n | VoidVar\n | CompactVar\n | BitSequenceVar\n | AccountId32\n | AccountId20\n\n/* Array-like vars:\n * - TupleVar: Mixed types, fixed length\n * - Sequence: One type, arbitrary length\n * - Array: One type, fixed length\n */\nexport type TupleVar = {\n type: \"tuple\"\n value: LookupEntry[]\n innerDocs: Array<string[]>\n}\nexport type StructVar = {\n type: \"struct\"\n value: StringRecord<LookupEntry>\n innerDocs: StringRecord<string[]>\n}\nexport type EnumVar = {\n type: \"enum\"\n value: StringRecord<\n (\n | { type: \"lookupEntry\"; value: LookupEntry }\n | VoidVar\n | TupleVar\n | StructVar\n ) & { idx: number }\n >\n innerDocs: StringRecord<string[]>\n}\nexport type OptionVar = {\n type: \"option\"\n value: LookupEntry\n}\nexport type ResultVar = {\n type: \"result\"\n value: { ok: LookupEntry; ko: LookupEntry }\n}\nexport type SequenceVar = {\n type: \"sequence\"\n value: LookupEntry\n}\nexport type ArrayVar = {\n type: \"array\"\n value: LookupEntry\n len: number\n}\n\nexport type ComposedVar =\n | TupleVar\n | StructVar\n | SequenceVar\n | ArrayVar\n | OptionVar\n | ResultVar\n | EnumVar\n\nexport type Var = TerminalVar | ComposedVar\n\nexport type LookupEntry = {\n id: number\n} & Var\n\nconst isBytes = (value: LookupEntry, nBytes: number) =>\n value.type === \"array\" &&\n value.len === nBytes &&\n value.value.type === \"primitive\" &&\n value.value.value === \"u8\"\n\nexport const getLookupFn = (lookupData: V14Lookup) => {\n const lookups = new Map<number, LookupEntry>()\n const from = new Set<number>()\n\n const withCache = (\n fn: (id: number) => Var,\n ): ((id: number) => LookupEntry) => {\n return (id) => {\n let entry = lookups.get(id)\n\n if (entry) return entry\n\n if (from.has(id)) {\n const entry = {\n id,\n } as LookupEntry\n\n lookups.set(id, entry)\n return entry\n }\n\n from.add(id)\n const value = fn(id)\n entry = lookups.get(id)\n\n if (entry) {\n Object.assign(entry, value)\n } else {\n entry = {\n id,\n ...value,\n }\n lookups.set(id, entry!)\n }\n from.delete(id)\n return entry\n }\n }\n\n let isAccountId32SearchOn = true\n let isAccountId20SearchOn = true\n const getLookupEntryDef = withCache((id): Var => {\n const { def, path, params } = lookupData[id]\n\n if (def.tag === \"composite\") {\n if (def.value.length === 0) return { type: \"void\" }\n\n // used to be a \"pointer\"\n if (def.value.length === 1) {\n const inner = getLookupEntryDef(def.value[0].type as number)\n\n if (\n isAccountId32SearchOn &&\n path.at(-1) === \"AccountId32\" &&\n isBytes(inner, 32)\n ) {\n isAccountId32SearchOn = false\n return { type: \"AccountId32\" }\n }\n\n if (\n isAccountId20SearchOn &&\n path.at(-1) === \"AccountId20\" &&\n isBytes(inner, 20)\n ) {\n isAccountId20SearchOn = false\n return { type: \"AccountId20\" }\n }\n\n return inner\n }\n\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n def.value.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n values[key] = getLookupEntryDef(x.type)\n innerDocs[key] = x.docs\n })\n\n return allKey\n ? {\n type: \"struct\",\n value: values as StringRecord<LookupEntry>,\n innerDocs: innerDocs as StringRecord<string[]>,\n }\n : {\n type: \"tuple\",\n value: Object.values(values),\n innerDocs: Object.values(innerDocs),\n }\n }\n\n if (def.tag === \"variant\") {\n if (\n path.length === 1 &&\n path[0] === \"Option\" &&\n params.length === 1 &&\n params[0].name === \"T\"\n ) {\n const value = getLookupEntryDef(params[0].type!)\n return value.type === \"void\"\n ? // Option<void> would return a Codec<undefined> which makes no sense\n // Therefore, we better treat it as a bool\n { type: \"primitive\", value: \"bool\" }\n : {\n type: \"option\",\n value,\n }\n }\n\n if (\n path.length === 1 &&\n path[0] === \"Result\" &&\n params.length === 2 &&\n params[0].name === \"T\" &&\n params[1].name === \"E\"\n ) {\n return {\n type: \"result\",\n value: {\n ok: getLookupEntryDef(params[0].type as number),\n ko: getLookupEntryDef(params[1].type as number),\n },\n }\n }\n if (def.value.length === 0) return { type: \"void\" }\n\n const enumValue: StringRecord<EnumVar[\"value\"][keyof EnumVar[\"value\"]]> =\n {}\n const enumDocs: StringRecord<string[]> = {}\n\n def.value.forEach((x) => {\n const key = x.name\n enumDocs[key] = x.docs\n\n if (x.fields.length === 0) {\n enumValue[key] = { type: \"void\", idx: x.index }\n return\n }\n\n if (x.fields.length === 1 && !x.fields[0].name) {\n enumValue[key] = {\n type: \"lookupEntry\",\n value: getLookupEntryDef(x.fields[0].type),\n idx: x.index,\n }\n return\n }\n\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n\n x.fields.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n values[key] = getLookupEntryDef(x.type as number)\n innerDocs[key] = x.docs\n })\n\n enumValue[key] = allKey\n ? {\n type: \"struct\",\n value: values as StringRecord<LookupEntry>,\n innerDocs: innerDocs as StringRecord<string[]>,\n idx: x.index,\n }\n : {\n type: \"tuple\",\n value: Object.values(values),\n innerDocs: Object.values(innerDocs),\n idx: x.index,\n }\n })\n\n return {\n type: \"enum\",\n value: enumValue,\n innerDocs: enumDocs,\n }\n }\n\n if (def.tag === \"sequence\") {\n const value = getLookupEntryDef(def.value as number)\n return {\n type: \"sequence\",\n value,\n }\n }\n\n if (def.tag === \"array\") {\n const { len } = def.value\n const value = getLookupEntryDef(def.value.type)\n\n if (len === 0) return { type: \"void\" }\n if (len === 1) return value\n\n return {\n type: \"array\",\n value,\n len: def.value.len,\n }\n }\n\n if (def.tag === \"tuple\") {\n if (def.value.length === 0) return { type: \"void\" }\n\n // use to be a \"pointer\"\n if (def.value.length === 1)\n return getLookupEntryDef(def.value[0] as number)\n\n const value = def.value.map((x) => getLookupEntryDef(x as number))\n const innerDocs = def.value.map((x) => lookupData[x].docs)\n\n const areAllSame = value.every((v) => v.id === value[0].id)\n if (areAllSame && innerDocs.every((doc) => doc.length === 0)) {\n return {\n type: \"array\",\n value: value[0],\n len: value.length,\n }\n }\n\n return {\n type: \"tuple\",\n value,\n innerDocs,\n }\n }\n\n if (def.tag === \"primitive\") {\n return {\n type: \"primitive\",\n value: def.value.tag,\n }\n }\n\n if (def.tag === \"compact\") {\n const translated = getLookupEntryDef(def.value) as PrimitiveVar | VoidVar\n if (translated.type === \"void\") return { type: \"compact\", isBig: null }\n\n const isBig = Number(translated.value.slice(1)) > 32\n\n return {\n type: \"compact\",\n isBig,\n }\n }\n\n // bitSequence\n return {\n type: def.tag,\n }\n })\n\n return getLookupEntryDef\n}\n","import type {\n Codec,\n StringRecord,\n V15,\n V14,\n} from \"@polkadot-api/substrate-bindings\"\nimport type { EnumVar, LookupEntry, TupleVar } from \"./lookups\"\nimport { getLookupFn } from \"./lookups\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport { withCache } from \"./with-cache\"\nimport { mapObject } from \"@polkadot-api/utils\"\n\nconst _bytes = scale.Bin()\n\nconst _buildCodec = (\n input: LookupEntry,\n cache: Map<number, Codec<any>>,\n stack: Set<number>,\n _accountId: Codec<scale.SS58String>,\n): Codec<any> => {\n if (input.type === \"primitive\") return scale[input.value]\n if (input.type === \"void\") return scale._void\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"AccountId20\") return scale.ethAccount\n if (input.type === \"compact\") return scale.compact\n if (input.type === \"bitSequence\") return scale.bitSequence\n\n const buildNextCodec = (nextInput: LookupEntry): Codec<any> =>\n buildCodec(nextInput, cache, stack, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const innerCodec = buildNextCodec(inner)\n return len ? scale.Vector(innerCodec, len) : scale.Vector(innerCodec)\n }\n\n const buildTuple = (value: LookupEntry[]) =>\n scale.Tuple(...value.map(buildNextCodec))\n\n const buildStruct = (value: StringRecord<LookupEntry>) => {\n const inner = Object.fromEntries(\n Object.entries(value).map(([key, value]) => [key, buildNextCodec(value)]),\n ) as StringRecord<Codec<any>>\n return scale.Struct(inner)\n }\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return _bytes\n }\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\")\n return scale.Bin(input.len)\n\n return buildVector(input.value, input.len)\n }\n\n if (input.type === \"sequence\") return buildVector(input.value)\n if (input.type === \"tuple\") return buildTuple(input.value)\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\") return scale.Option(buildNextCodec(input.value))\n\n if (input.type === \"result\")\n return scale.Result(\n buildNextCodec(input.value.ok),\n buildNextCodec(input.value.ko),\n )\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n if (v.type === \"void\") return scale._void\n if (v.type === \"lookupEntry\") return buildNextCodec(v.value)\n return v.type === \"tuple\" ? buildTuple(v.value) : buildStruct(v.value)\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => {\n return [key, dependencies[idx]]\n }),\n ) as StringRecord<Codec<any>>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n return areIndexesSorted\n ? scale.Variant(inner)\n : scale.Variant(inner, indexes as any)\n}\nconst buildCodec = withCache(_buildCodec, scale.Self, (res) => res)\n\nexport const getDynamicBuilder = (metadata: V14 | V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n let _accountId = scale.AccountId()\n\n const cache = new Map()\n const buildDefinition = (id: number): Codec<any> =>\n buildCodec(getLookupEntryDef(id), cache, new Set(), _accountId)\n\n const prefix = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"SS58Prefix\")\n\n let ss58Prefix: number | undefined\n if (prefix) {\n try {\n const prefixVal = buildDefinition(prefix.type).dec(prefix.value)\n if (typeof prefixVal === \"number\") {\n ss58Prefix = prefixVal\n _accountId = scale.AccountId(prefixVal)\n }\n } catch (_) {}\n }\n\n const storagePallets = new Map<string, ReturnType<typeof scale.Storage>>()\n\n const buildStorage = (pallet: string, entry: string) => {\n let storagePallet = storagePallets.get(pallet)\n if (!storagePallet)\n storagePallets.set(pallet, (storagePallet = scale.Storage(pallet)))\n\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .storage!.items.find((s) => s.name === entry)!\n\n const storageWithFallback = (\n len: number,\n ...args: Parameters<ReturnType<typeof scale.Storage>>\n ) => {\n const result = storagePallet!(...args)\n return {\n ...result,\n len,\n fallback:\n storageEntry.modifier === 1\n ? result.dec(storageEntry.fallback)\n : undefined,\n }\n }\n\n if (storageEntry.type.tag === \"plain\")\n return storageWithFallback(\n 0,\n entry,\n buildDefinition(storageEntry.type.value).dec,\n )\n\n const { key, value, hashers } = storageEntry.type.value\n const val = buildDefinition(value)\n const hashes = hashers.map((x) => scale[x.tag])\n\n const hashArgs: Array<scale.EncoderWithHash<any>> =\n hashes.length === 1\n ? [[buildDefinition(key), hashes[0]]]\n : (getLookupEntryDef(key) as TupleVar).value.map(\n (x, idx): scale.EncoderWithHash<any> => [\n buildDefinition(x.id),\n hashes[idx],\n ],\n )\n return storageWithFallback(hashes.length, entry, val.dec, ...hashArgs)\n }\n\n const buildEnumEntry = (\n entry: EnumVar[\"value\"][keyof EnumVar[\"value\"]],\n ): Codec<any> => {\n if (entry.type === \"void\") return scale._void\n if (entry.type === \"lookupEntry\") return buildDefinition(entry.value.id)\n return entry.type === \"tuple\"\n ? scale.Tuple(\n ...Object.values(entry.value).map((l) => buildDefinition(l.id)),\n )\n : scale.Struct(\n mapObject(entry.value, (x) => buildDefinition(x.id)) as StringRecord<\n Codec<any>\n >,\n )\n }\n\n const buildConstant = (pallet: string, constantName: string) => {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type as number)\n }\n\n const buildVariant =\n (type: \"errors\" | \"events\" | \"calls\") =>\n (\n pallet: string,\n name: string,\n ): {\n codec: Codec<any>\n location: [number, number]\n } => {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n const lookup = getLookupEntryDef(palletEntry[type]!)\n if (lookup.type !== \"enum\") throw null\n const entry = lookup.value[name]\n\n return {\n location: [palletEntry.index, entry.idx],\n codec: buildEnumEntry(lookup.value[name]),\n }\n }\n\n const buildRuntimeCall = (api: string, method: string) => {\n const entry = metadata.apis\n .find((x) => x.name === api)\n ?.methods.find((x) => x.name === method)\n if (!entry) throw null\n\n return {\n args: scale.Tuple(...entry.inputs.map((x) => buildDefinition(x.type))),\n value: buildDefinition(entry.output),\n }\n }\n\n return {\n buildDefinition,\n buildStorage,\n buildEvent: buildVariant(\"events\"),\n buildError: buildVariant(\"errors\"),\n buildRuntimeCall,\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n ss58Prefix,\n }\n}\n","import { LookupEntry } from \"./lookups\"\n\ntype FnWithStack<Other extends Array<any>, T> = (\n input: LookupEntry,\n cache: Map<number, T>,\n stack: Set<number>,\n ...rest: Other\n) => T\n\nexport const withCache =\n <Other extends Array<any>, T>(\n fn: FnWithStack<Other, T>,\n onEnterCircular: (\n cacheGetter: () => T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n onExitCircular: (\n outter: T,\n inner: T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n ): FnWithStack<Other, T> =>\n (input, cache, stack, ...rest) => {\n const { id } = input\n if (cache.has(id)) return cache.get(id)!\n\n if (stack.has(id)) {\n const res = onEnterCircular(() => cache.get(id)!, input, ...rest)\n cache.set(id, res)\n return res\n }\n\n stack.add(id)\n let result = fn(input, cache, stack, ...rest)\n stack.delete(id)\n\n if (cache.has(id))\n result = onExitCircular(result, cache.get(id)!, input, ...rest)\n\n cache.set(id, result)\n return result\n }\n","import type { StringRecord, V14, V15 } from \"@polkadot-api/substrate-bindings\"\nimport { h64 } from \"@polkadot-api/substrate-bindings\"\nimport {\n LookupEntry,\n MetadataPrimitives,\n StructVar,\n TupleVar,\n VoidVar,\n getLookupFn,\n} from \"./lookups\"\n\nconst textEncoder = new TextEncoder()\nconst encodeText = textEncoder.encode.bind(textEncoder)\n\nconst getChecksum = (values: Array<bigint>) => {\n const res = new Uint8Array(values.length * 8)\n const dv = new DataView(res.buffer)\n\n for (let i = 0; i < values.length; i++) dv.setBigUint64(i * 8, values[i])\n\n return h64(res)\n}\nconst getStringChecksum = (values: Array<string>) =>\n getChecksum(values.map((v) => h64(encodeText(v))))\n\ntype Shape =\n | \"primitive\"\n | \"void\"\n | \"vector\"\n | \"tuple\"\n | \"struct\"\n | \"option\"\n | \"result\"\n | \"enum\"\nconst shapeIds: Record<Shape, bigint> = {\n primitive: 0n,\n vector: 1n,\n tuple: 2n,\n struct: 3n,\n option: 4n,\n result: 5n,\n enum: 6n,\n void: 7n,\n}\n\ntype RuntimePrimitives =\n | \"undefined\"\n | \"number\"\n | \"string\"\n | \"bigint\"\n | \"boolean\"\n | \"bitSequence\"\n | \"byteSequence\"\n | \"accountId32\"\n | \"accountId20\"\n\nconst runtimePrimitiveIds: Record<RuntimePrimitives, bigint> = {\n undefined: 0n,\n number: 1n,\n string: 2n,\n bigint: 3n,\n boolean: 4n,\n bitSequence: 5n, // {bitsLen: number, bytes: Uint8Array}\n byteSequence: 6n, // Binary\n accountId32: 7n, // SS58String\n accountId20: 8n, // EthAccount\n}\n\nconst metadataPrimitiveIds: Record<MetadataPrimitives, bigint> = {\n bool: runtimePrimitiveIds.boolean,\n char: runtimePrimitiveIds.string,\n str: runtimePrimitiveIds.string,\n u8: runtimePrimitiveIds.number,\n u16: runtimePrimitiveIds.number,\n u32: runtimePrimitiveIds.number,\n u64: runtimePrimitiveIds.bigint,\n u128: runtimePrimitiveIds.bigint,\n u256: runtimePrimitiveIds.bigint,\n i8: runtimePrimitiveIds.number,\n i16: runtimePrimitiveIds.number,\n i32: runtimePrimitiveIds.number,\n i64: runtimePrimitiveIds.bigint,\n i128: runtimePrimitiveIds.bigint,\n i256: runtimePrimitiveIds.bigint,\n}\n\nconst structLikeBuilder = <T>(\n shapeId: bigint,\n input: StringRecord<T>,\n innerChecksum: (value: T) => bigint,\n) => {\n const sortedEntries = Object.entries(input).sort(([a], [b]) =>\n a.localeCompare(b),\n )\n const keysChecksum = getStringChecksum(sortedEntries.map(([key]) => key))\n const valuesChecksum = getChecksum(\n sortedEntries.map(([, entry]) => innerChecksum(entry)),\n )\n\n return getChecksum([shapeId, keysChecksum, valuesChecksum])\n}\n\ntype Graph = Map<number, [LookupEntry, Set<number>]>\nconst buildGraph = (entry: LookupEntry, result: Graph = new Map()) => {\n if (result.has(entry.id)) return result\n\n switch (entry.type) {\n case \"array\":\n case \"option\":\n case \"sequence\":\n result.set(entry.id, [entry, new Set([entry.value.id])])\n buildGraph(entry.value, result)\n break\n case \"enum\": {\n const children = Object.values(entry.value).flatMap((value) => {\n if (value.type === \"void\") return []\n if (value.type === \"lookupEntry\") return value.value\n if (value.type === \"struct\") return Object.values(value.value)\n return value.value\n })\n result.set(entry.id, [entry, new Set(children.map((child) => child.id))])\n children.forEach((child) => buildGraph(child, result))\n break\n }\n case \"result\":\n result.set(entry.id, [\n entry,\n new Set([entry.value.ok.id, entry.value.ko.id]),\n ])\n buildGraph(entry.value.ok, result)\n buildGraph(entry.value.ko, result)\n break\n case \"struct\": {\n const children = Object.values(entry.value)\n result.set(entry.id, [entry, new Set(children.map((child) => child.id))])\n children.forEach((child) => buildGraph(child, result))\n break\n }\n case \"tuple\":\n result.set(entry.id, [\n entry,\n new Set(entry.value.map((child) => child.id)),\n ])\n entry.value.forEach((child) => buildGraph(child, result))\n break\n default:\n result.set(entry.id, [entry, new Set()])\n }\n return result\n}\n\nconst _buildChecksum = (\n input: LookupEntry,\n buildNextChecksum: (entry: LookupEntry) => bigint,\n): bigint => {\n if (input.type === \"primitive\")\n return getChecksum([shapeIds.primitive, metadataPrimitiveIds[input.value]])\n\n if (input.type === \"void\") return getChecksum([shapeIds.void])\n\n if (input.type === \"compact\")\n return getChecksum([\n shapeIds.primitive,\n runtimePrimitiveIds[\n input.isBig || input.isBig === null ? \"bigint\" : \"number\"\n ],\n ])\n\n if (input.type === \"bitSequence\")\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.bitSequence])\n\n if (input.type === \"AccountId32\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId32])\n }\n\n if (input.type === \"AccountId20\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.accountId20])\n }\n\n if (input.type === \"array\") {\n const innerValue = input.value\n if (innerValue.type === \"primitive\" && innerValue.value === \"u8\") {\n return getChecksum([\n shapeIds.primitive,\n runtimePrimitiveIds.byteSequence,\n BigInt(input.len),\n ])\n }\n const innerChecksum = buildNextChecksum(innerValue)\n\n return getChecksum([shapeIds.vector, innerChecksum, BigInt(input.len)])\n }\n\n if (input.type === \"sequence\") {\n const innerValue = input.value\n if (innerValue.type === \"primitive\" && innerValue.value === \"u8\") {\n return getChecksum([shapeIds.primitive, runtimePrimitiveIds.byteSequence])\n }\n const innerChecksum = buildNextChecksum(innerValue)\n\n return getChecksum([shapeIds.vector, innerChecksum])\n }\n\n const buildTuple = (entries: LookupEntry[]) =>\n getChecksum([shapeIds.tuple, ...entries.map(buildNextChecksum)])\n\n const buildStruct = (entries: StringRecord<LookupEntry>) =>\n structLikeBuilder(shapeIds.struct, entries, buildNextChecksum)\n\n if (input.type === \"tuple\") return buildTuple(input.value)\n\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\")\n return getChecksum([shapeIds.option, buildNextChecksum(input.value)])\n\n if (input.type === \"result\")\n return getChecksum([\n shapeIds.result,\n buildNextChecksum(input.value.ok),\n buildNextChecksum(input.value.ko),\n ])\n\n return structLikeBuilder(shapeIds.enum, input.value, (entry) => {\n if (entry.type === \"lookupEntry\") return buildNextChecksum(entry.value)\n switch (entry.type) {\n case \"void\":\n return getChecksum([shapeIds.void])\n case \"tuple\":\n return buildTuple(entry.value)\n case \"struct\":\n return buildStruct(entry.value)\n }\n })\n}\n\nconst getCycles = (graph: Graph) => {\n // Tarjan's strongly connected components\n const tarjanState = new Map<\n number,\n {\n index: number\n lowLink: number\n onStack: boolean\n }\n >()\n let index = 0\n const stack: number[] = []\n const result: Array<Set<number>> = []\n\n function strongConnect(v: number): void {\n const state = {\n index: index,\n lowLink: index,\n onStack: true,\n }\n tarjanState.set(v, state)\n index++\n stack.push(v)\n\n const edges = graph.get(v)![1]\n for (let w of edges) {\n const edgeState = tarjanState.get(w)\n if (!edgeState) {\n strongConnect(w)\n state.lowLink = Math.min(state.lowLink, tarjanState.get(w)!.lowLink)\n } else if (edgeState.onStack) {\n state.lowLink = Math.min(state.lowLink, edgeState.index)\n }\n }\n\n if (state.lowLink === state.index) {\n const component = new Set<number>()\n\n let poppedNode = -1\n do {\n poppedNode = stack.pop()!\n tarjanState.get(poppedNode)!.onStack = false\n component.add(poppedNode)\n } while (poppedNode !== v)\n\n if (component.size > 1) result.push(component)\n }\n }\n\n for (const node of graph.keys()) {\n if (!tarjanState.has(node)) {\n strongConnect(node)\n }\n }\n\n return result\n}\n\nconst getCyclicGroups = (cycles: Array<Set<number>>) => {\n const ungroupedCycles = new Set(cycles.map((_, i) => i))\n const edges = new Map(cycles.map((_, i) => [i, new Set<number>()]))\n cycles.forEach((cycle, i) => {\n cycles.slice(i + 1).forEach((otherCycle, _j) => {\n const j = _j + i + 1\n const combined = new Set([...cycle, ...otherCycle])\n if (combined.size !== cycle.size + otherCycle.size) {\n edges.get(i)!.add(j)\n edges.get(j)!.add(i)\n }\n })\n })\n const groups: Array<Set<number>> = []\n\n while (ungroupedCycles.size) {\n const group = new Set<number>()\n const toVisit = [ungroupedCycles.values().next().value]\n while (toVisit.length) {\n const idx = toVisit.pop()\n if (!ungroupedCycles.has(idx)) continue\n ungroupedCycles.delete(idx)\n\n const cycle = cycles[idx]\n cycle.forEach((v) => group.add(Number(v)))\n edges.get(idx)!.forEach((n) => toVisit.push(n))\n }\n groups.push(group)\n }\n\n return groups\n}\n\nconst sortCyclicGroups = (groups: Array<Set<number>>, graph: Graph) => {\n const getReachableNodes = (group: Set<number>) => {\n const first = group.values().next().value as number\n const entry = graph.get(first)![0]\n return Array.from(buildGraph(entry).keys())\n }\n\n const result: Array<Set<number>> = new Array()\n\n function dependentsFirst(group: Set<number>) {\n if (result.includes(group)) return\n const dependents = groups.filter(\n (candidate) =>\n candidate !== group &&\n getReachableNodes(group).some((node) => candidate.has(node)),\n )\n dependents.forEach((group) => dependentsFirst(group))\n if (result.includes(group)) return\n result.push(group)\n }\n\n groups.forEach((group) => dependentsFirst(group))\n return result\n}\n\nconst buildChecksum = (entry: LookupEntry, cache: Map<number, bigint>) => {\n if (cache.has(entry.id)) return cache.get(entry.id)!\n\n const graph = buildGraph(entry)\n const cycles = getCycles(graph)\n const cyclicGroups = getCyclicGroups(cycles)\n const sortedCyclicGroups = sortCyclicGroups(cyclicGroups, graph)\n\n // separate writeCache since we might want to not override the current cache to ensure deterministic result regardless of order\n const recursiveBuildChecksum = (\n entry: LookupEntry,\n writeCache: (id: number, value: bigint) => void,\n skipCache = false,\n ): bigint => {\n if (!skipCache && cache.has(entry.id)) {\n return cache.get(entry.id)!\n }\n const result = _buildChecksum(entry, (nextEntry) =>\n recursiveBuildChecksum(nextEntry, writeCache),\n )\n writeCache(entry.id, result)\n return result\n }\n\n sortedCyclicGroups.forEach((group) => {\n group.forEach((id) => cache.set(id, 0n))\n for (let i = 0; i < group.size; i++) {\n const results = new Map<number, bigint>()\n group.forEach((id) =>\n recursiveBuildChecksum(\n graph.get(id)![0],\n (id, value) => {\n // only store onto the actual cache results from other nodes\n // cyclic nodes would depend on sorting order.\n const writeCache = group.has(id) ? results : cache\n writeCache.set(id, value)\n },\n true,\n ),\n )\n Array.from(results.entries()).forEach(([id, checksum]) =>\n cache.set(id, checksum),\n )\n }\n })\n\n return recursiveBuildChecksum(entry, (id, value) => cache.set(id, value))\n}\n\nexport const getChecksumBuilder = (metadata: V14 | V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n\n const cache = new Map<number, bigint>()\n\n const buildDefinition = (id: number): bigint =>\n buildChecksum(getLookupEntryDef(id), cache)\n\n const buildStorage = (pallet: string, entry: string): bigint | null => {\n try {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .storage!.items.find((s) => s.name === entry)!\n\n if (storageEntry.type.tag === \"plain\")\n return buildDefinition(storageEntry.type.value)\n\n const { key, value } = storageEntry.type.value\n const val = buildDefinition(value)\n const returnKey = buildDefinition(key)\n return getChecksum([val, returnKey])\n } catch (_) {\n return null\n }\n }\n\n const buildRuntimeCall = (api: string, method: string): bigint | null => {\n try {\n const entry = metadata.apis\n .find((x) => x.name === api)\n ?.methods.find((x) => x.name === method)\n if (!entry) throw null\n\n const argNamesChecksum = getStringChecksum(\n entry.inputs.map((x) => x.name),\n )\n const argValuesChecksum = getChecksum(\n entry.inputs.map((x) => buildDefinition(x.type)),\n )\n const outputChecksum = buildDefinition(entry.output)\n\n return getChecksum([argNamesChecksum, argValuesChecksum, outputChecksum])\n } catch (_) {\n return null\n }\n }\n\n const buildComposite = (input: TupleVar | StructVar | VoidVar): bigint => {\n if (input.type === \"void\") return getChecksum([0n])\n\n if (input.type === \"tuple\") {\n const values = Object.values(input.value).map((entry) =>\n buildDefinition(entry.id),\n )\n\n return getChecksum([shapeIds.tuple, ...values])\n }\n\n // Otherwise struct\n return structLikeBuilder(shapeIds.struct, input.value, (entry) =>\n buildDefinition(entry.id),\n )\n }\n\n const buildNamedTuple = (input: StructVar): bigint => {\n return structLikeBuilder(shapeIds.tuple, input.value, (entry) =>\n buildDefinition(entry.id),\n )\n }\n\n const buildVariant =\n (variantType: \"errors\" | \"events\" | \"calls\") =>\n (pallet: string, name: string): bigint | null => {\n try {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n const enumLookup = getLookupEntryDef(\n palletEntry[variantType]! as number,\n )\n buildDefinition(enumLookup.id)\n\n if (enumLookup.type !== \"enum\") throw null\n const entry = enumLookup.value[name]\n return entry.type === \"lookupEntry\"\n ? buildDefinition(entry.value.id)\n : buildComposite(entry)\n } catch (_) {\n return null\n }\n }\n\n const buildConstant = (\n pallet: string,\n constantName: string,\n ): bigint | null => {\n try {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type)\n } catch (_) {\n return null\n }\n }\n\n const toStringEnhancer =\n <Args extends Array<any>>(\n fn: (...args: Args) => bigint | null,\n ): ((...args: Args) => string | null) =>\n (...args) =>\n fn(...args)?.toString(32) ?? null\n\n return {\n buildDefinition: toStringEnhancer(buildDefinition),\n buildRuntimeCall: toStringEnhancer(buildRuntimeCall),\n buildStorage: toStringEnhancer(buildStorage),\n buildCall: toStringEnhancer(buildVariant(\"calls\")),\n buildEvent: toStringEnhancer(buildVariant(\"events\")),\n buildError: toStringEnhancer(buildVariant(\"errors\")),\n buildConstant: toStringEnhancer(buildConstant),\n buildComposite: toStringEnhancer(buildComposite),\n buildNamedTuple: toStringEnhancer(buildNamedTuple),\n getAllGeneratedChecksums: () =>\n Array.from(cache.values()).map((v) => v.toString(32)),\n }\n}\n"],"mappings":"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","names":["src_exports","__export","getChecksumBuilder","getDynamicBuilder","getLookupFn","__toCommonJS","isBytes","value","nBytes","getLookupFn","lookupData","lookups","from","withCache","fn","id","entry","isAccountId32SearchOn","isAccountId20SearchOn","getLookupEntryDef","def","path","params","inner","allKey","values","innerDocs","x","idx","key","enumValue","enumDocs","len","v","doc","translated","scale","withCache","fn","onEnterCircular","onExitCircular","input","cache","stack","rest","id","res","result","import_utils","_bytes","_buildCodec","input","cache","stack","_accountId","scale","buildNextCodec","nextInput","buildCodec","buildVector","inner","len","innerCodec","buildTuple","value","buildStruct","key","dependencies","v","idx","indexes","x","i","withCache","res","getDynamicBuilder","metadata","lookupData","getLookupEntryDef","getLookupFn","buildDefinition","id","prefix","ss58Prefix","prefixVal","storagePallets","buildStorage","pallet","entry","storagePallet","storageEntry","s","storageWithFallback","args","result","hashers","val","hashes","hashArgs","buildEnumEntry","l","buildConstant","constantName","buildVariant","type","name","palletEntry","lookup","buildRuntimeCall","api","method","import_substrate_bindings","textEncoder","encodeText","getChecksum","values","res","dv","i","getStringChecksum","v","shapeIds","runtimePrimitiveIds","metadataPrimitiveIds","structLikeBuilder","shapeId","input","innerChecksum","sortedEntries","a","b","keysChecksum","key","valuesChecksum","entry","buildGraph","result","children","value","child","_buildChecksum","buildNextChecksum","innerValue","buildTuple","entries","buildStruct","getCycles","graph","tarjanState","index","stack","strongConnect","state","edges","w","edgeState","component","poppedNode","node","getCyclicGroups","cycles","ungroupedCycles","_","cycle","otherCycle","_j","j","groups","group","toVisit","idx","n","sortCyclicGroups","getReachableNodes","first","dependentsFirst","candidate","buildChecksum","cache","cyclicGroups","sortedCyclicGroups","recursiveBuildChecksum","writeCache","skipCache","nextEntry","id","results","checksum","getChecksumBuilder","metadata","lookupData","getLookupEntryDef","getLookupFn","buildDefinition","buildStorage","pallet","storageEntry","x","s","val","returnKey","buildRuntimeCall","api","method","argNamesChecksum","argValuesChecksum","outputChecksum","buildComposite","buildNamedTuple","buildVariant","variantType","name","palletEntry","enumLookup","buildConstant","constantName","toStringEnhancer","fn","args"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkadot-api/metadata-builders",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"author": "Josep M Sobrepere (https://github.com/josepot)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"trailingComma": "all"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@polkadot-api/
|
|
44
|
-
"@polkadot-api/
|
|
43
|
+
"@polkadot-api/substrate-bindings": "0.2.0",
|
|
44
|
+
"@polkadot-api/utils": "0.0.1"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@polkadot-api/metadata-fixtures": "0.0.0"
|