@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 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 TerminalVar = PrimitiveVar | VoidVar | CompactVar | BitSequenceVar | AccountId32;
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 TerminalVar = PrimitiveVar | VoidVar | CompactVar | BitSequenceVar | AccountId32;
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
- if (isAccountId32SearchOn && path.join(",") === "sp_core,crypto,AccountId32") {
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
- return getLookupEntryDef(def.value[0].type);
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
- accountId: 7n
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.accountId]);
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
- if (isAccountId32SearchOn && path.join(",") === "sp_core,crypto,AccountId32") {
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
- return getLookupEntryDef(def.value[0].type);
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
- accountId: 7n
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.accountId]);
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;
@@ -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"]}
@@ -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 TerminalVar = PrimitiveVar | VoidVar | CompactVar | BitSequenceVar | AccountId32;
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
@@ -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":"0jBAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,wBAAAE,GAAA,sBAAAC,EAAA,gBAAAC,IAAA,eAAAC,EAAAL,IC+FO,IAAMM,EAAeC,GAA0B,CACpD,IAAMC,EAAU,IAAI,IACdC,EAAO,IAAI,IAEXC,EACJC,GAEQC,GAAO,CACb,IAAIC,EAAQL,EAAQ,IAAII,CAAE,EAE1B,GAAIC,EAAO,OAAOA,EAElB,GAAIJ,EAAK,IAAIG,CAAE,EAAG,CAChB,IAAMC,EAAQ,CACZ,GAAAD,CACF,EAEA,OAAAJ,EAAQ,IAAII,EAAIC,CAAK,EACdA,CACT,CAEAJ,EAAK,IAAIG,CAAE,EACX,IAAME,EAAQH,EAAGC,CAAE,EACnB,OAAAC,EAAQL,EAAQ,IAAII,CAAE,EAElBC,EACF,OAAO,OAAOA,EAAOC,CAAK,GAE1BD,EAAQ,CACN,GAAAD,EACA,GAAGE,CACL,EACAN,EAAQ,IAAII,EAAIC,CAAM,GAExBJ,EAAK,OAAOG,CAAE,EACPC,CACT,EAGEE,EAAwB,GACtBC,EAAoBN,EAAWE,GAAY,CAC/C,GAAM,CAAE,IAAAK,EAAK,KAAAC,EAAM,OAAAC,CAAO,EAAIZ,EAAWK,CAAE,EAE3C,GAAIK,EAAI,MAAQ,YAAa,CAC3B,GAAIA,EAAI,MAAM,SAAW,EAAG,MAAO,CAAE,KAAM,MAAO,EAGlD,GAAIA,EAAI,MAAM,SAAW,EACvB,OACEF,GACAG,EAAK,KAAK,GAAG,IAAM,8BAEnBH,EAAwB,GACjB,CAAE,KAAM,aAAc,GAExBC,EAAkBC,EAAI,MAAM,CAAC,EAAE,IAAc,EAGtD,IAAIG,EAAS,GAEPC,EAA+C,CAAC,EAChDC,EAA+C,CAAC,EACtD,OAAAL,EAAI,MAAM,QAAQ,CAACM,EAAGC,IAAQ,CAC5BJ,EAASA,GAAU,CAAC,CAACG,EAAE,KACvB,IAAME,EAAMF,EAAE,MAAQC,EACtBH,EAAOI,CAAG,EAAIT,EAAkBO,EAAE,IAAI,EACtCD,EAAUG,CAAG,EAAIF,EAAE,IACrB,CAAC,EAEMH,EACH,CACE,KAAM,SACN,MAAOC,EACP,UAAWC,CACb,EACA,CACE,KAAM,QACN,MAAO,OAAO,OAAOD,CAAM,EAC3B,UAAW,OAAO,OAAOC,CAAS,CACpC,CACN,CAEA,GAAIL,EAAI,MAAQ,UAAW,CACzB,GACEC,EAAK,SAAW,GAChBA,EAAK,CAAC,IAAM,UACZC,EAAO,SAAW,GAClBA,EAAO,CAAC,EAAE,OAAS,IACnB,CACA,IAAML,EAAQE,EAAkBG,EAAO,CAAC,EAAE,IAAK,EAC/C,OAAOL,EAAM,OAAS,OAGlB,CAAE,KAAM,YAAa,MAAO,MAAO,EACnC,CACE,KAAM,SACN,MAAAA,CACF,CACN,CAEA,GACEI,EAAK,SAAW,GAChBA,EAAK,CAAC,IAAM,UACZC,EAAO,SAAW,GAClBA,EAAO,CAAC,EAAE,OAAS,KACnBA,EAAO,CAAC,EAAE,OAAS,IAEnB,MAAO,CACL,KAAM,SACN,MAAO,CACL,GAAIH,EAAkBG,EAAO,CAAC,EAAE,IAAc,EAC9C,GAAIH,EAAkBG,EAAO,CAAC,EAAE,IAAc,CAChD,CACF,EAEF,GAAIF,EAAI,MAAM,SAAW,EAAG,MAAO,CAAE,KAAM,MAAO,EAElD,IAAMS,EACJ,CAAC,EACGC,EAAmC,CAAC,EAE1C,OAAAV,EAAI,MAAM,QAASM,GAAM,CACvB,IAAME,EAAMF,EAAE,KAGd,GAFAI,EAASF,CAAG,EAAIF,EAAE,KAEdA,EAAE,OAAO,SAAW,EAAG,CACzBG,EAAUD,CAAG,EAAI,CAAE,KAAM,OAAQ,IAAKF,EAAE,KAAM,EAC9C,MACF,CAEA,GAAIA,EAAE,OAAO,SAAW,GAAK,CAACA,EAAE,OAAO,CAAC,EAAE,KAAM,CAC9CG,EAAUD,CAAG,EAAI,CACf,KAAM,cACN,MAAOT,EAAkBO,EAAE,OAAO,CAAC,EAAE,IAAI,EACzC,IAAKA,EAAE,KACT,EACA,MACF,CAEA,IAAIH,EAAS,GAEPC,EAA+C,CAAC,EAChDC,EAA+C,CAAC,EAEtDC,EAAE,OAAO,QAAQ,CAACA,EAAGC,IAAQ,CAC3BJ,EAASA,GAAU,CAAC,CAACG,EAAE,KACvB,IAAME,EAAMF,EAAE,MAAQC,EACtBH,EAAOI,CAAG,EAAIT,EAAkBO,EAAE,IAAc,EAChDD,EAAUG,CAAG,EAAIF,EAAE,IACrB,CAAC,EAEDG,EAAUD,CAAG,EAAIL,EACb,CACE,KAAM,SACN,MAAOC,EACP,UAAWC,EACX,IAAKC,EAAE,KACT,EACA,CACE,KAAM,QACN,MAAO,OAAO,OAAOF,CAAM,EAC3B,UAAW,OAAO,OAAOC,CAAS,EAClC,IAAKC,EAAE,KACT,CACN,CAAC,EAEM,CACL,KAAM,OACN,MAAOG,EACP,UAAWC,CACb,CACF,CAEA,GAAIV,EAAI,MAAQ,WAEd,MAAO,CACL,KAAM,WACN,MAHYD,EAAkBC,EAAI,KAAe,CAInD,EAGF,GAAIA,EAAI,MAAQ,QAAS,CACvB,GAAM,CAAE,IAAAW,CAAI,EAAIX,EAAI,MACdH,EAAQE,EAAkBC,EAAI,MAAM,IAAI,EAE9C,OAAIW,IAAQ,EAAU,CAAE,KAAM,MAAO,EACjCA,IAAQ,EAAUd,EAEf,CACL,KAAM,QACN,MAAAA,EACA,IAAKG,EAAI,MAAM,GACjB,CACF,CAEA,GAAIA,EAAI,MAAQ,QAAS,CACvB,GAAIA,EAAI,MAAM,SAAW,EAAG,MAAO,CAAE,KAAM,MAAO,EAGlD,GAAIA,EAAI,MAAM,SAAW,EACvB,OAAOD,EAAkBC,EAAI,MAAM,CAAC,CAAW,EAEjD,IAAMH,EAAQG,EAAI,MAAM,IAAKM,GAAMP,EAAkBO,CAAW,CAAC,EAC3DD,EAAYL,EAAI,MAAM,IAAKM,GAAMhB,EAAWgB,CAAC,EAAE,IAAI,EAGzD,OADmBT,EAAM,MAAOe,GAAMA,EAAE,KAAOf,EAAM,CAAC,EAAE,EAAE,GACxCQ,EAAU,MAAOQ,GAAQA,EAAI,SAAW,CAAC,EAClD,CACL,KAAM,QACN,MAAOhB,EAAM,CAAC,EACd,IAAKA,EAAM,MACb,EAGK,CACL,KAAM,QACN,MAAAA,EACA,UAAAQ,CACF,CACF,CAEA,GAAIL,EAAI,MAAQ,YACd,MAAO,CACL,KAAM,YACN,MAAOA,EAAI,MAAM,GACnB,EAGF,GAAIA,EAAI,MAAQ,UAAW,CACzB,IAAMc,EAAaf,EAAkBC,EAAI,KAAK,EAC9C,OAAIc,EAAW,OAAS,OAAe,CAAE,KAAM,UAAW,MAAO,IAAK,EAI/D,CACL,KAAM,UACN,MAJY,OAAOA,EAAW,MAAM,MAAM,CAAC,CAAC,EAAI,EAKlD,CACF,CAGA,MAAO,CACL,KAAMd,EAAI,GACZ,CACF,CAAC,EAED,OAAOD,CACT,ECnVA,IAAAgB,EAAuB,+CCMhB,IAAMC,EACX,CACEC,EACAC,EAKAC,IAOF,CAACC,EAAOC,EAAOC,KAAUC,IAAS,CAChC,GAAM,CAAE,GAAAC,CAAG,EAAIJ,EACf,GAAIC,EAAM,IAAIG,CAAE,EAAG,OAAOH,EAAM,IAAIG,CAAE,EAEtC,GAAIF,EAAM,IAAIE,CAAE,EAAG,CACjB,IAAMC,EAAMP,EAAgB,IAAMG,EAAM,IAAIG,CAAE,EAAIJ,EAAO,GAAGG,CAAI,EAChE,OAAAF,EAAM,IAAIG,EAAIC,CAAG,EACVA,CACT,CAEAH,EAAM,IAAIE,CAAE,EACZ,IAAIE,EAAST,EAAGG,EAAOC,EAAOC,EAAO,GAAGC,CAAI,EAC5C,OAAAD,EAAM,OAAOE,CAAE,EAEXH,EAAM,IAAIG,CAAE,IACdE,EAASP,EAAeO,EAAQL,EAAM,IAAIG,CAAE,EAAIJ,EAAO,GAAGG,CAAI,GAEhEF,EAAM,IAAIG,EAAIE,CAAM,EACbA,CACT,EDtCF,IAAAC,EAA0B,+BAEpBC,EAAe,MAAI,EAEnBC,EAAc,CAClBC,EACAC,EACAC,EACAC,IACe,CACf,GAAIH,EAAM,OAAS,YAAa,OAAOI,EAAMJ,EAAM,KAAK,EACxD,GAAIA,EAAM,OAAS,OAAQ,OAAa,QACxC,GAAIA,EAAM,OAAS,cAAe,OAAOG,EACzC,GAAIH,EAAM,OAAS,UAAW,OAAa,UAC3C,GAAIA,EAAM,OAAS,cAAe,OAAa,cAE/C,IAAMK,EAAkBC,GACtBC,EAAWD,EAAWL,EAAOC,EAAOC,CAAU,EAE1CK,EAAc,CAACC,EAAoBC,IAAiB,CACxD,IAAMC,EAAaN,EAAeI,CAAK,EACvC,OAAOC,EAAY,SAAOC,EAAYD,CAAG,EAAU,SAAOC,CAAU,CACtE,EAEMC,EAAcC,GACZ,QAAM,GAAGA,EAAM,IAAIR,CAAc,CAAC,EAEpCS,EAAeD,GAAqC,CACxD,IAAMJ,EAAQ,OAAO,YACnB,OAAO,QAAQI,CAAK,EAAE,IAAI,CAAC,CAACE,EAAKF,CAAK,IAAM,CAACE,EAAKV,EAAeQ,CAAK,CAAC,CAAC,CAC1E,EACA,OAAa,SAAOJ,CAAK,CAC3B,EAEA,GACET,EAAM,OAAS,YACfA,EAAM,MAAM,OAAS,aACrBA,EAAM,MAAM,QAAU,KAEtB,OAAOF,EAGT,GAAIE,EAAM,OAAS,QAEjB,OAAIA,EAAM,MAAM,OAAS,aAAeA,EAAM,MAAM,QAAU,KAC/C,MAAIA,EAAM,GAAG,EAErBQ,EAAYR,EAAM,MAAOA,EAAM,GAAG,EAG3C,GAAIA,EAAM,OAAS,WAAY,OAAOQ,EAAYR,EAAM,KAAK,EAC7D,GAAIA,EAAM,OAAS,QAAS,OAAOY,EAAWZ,EAAM,KAAK,EACzD,GAAIA,EAAM,OAAS,SAAU,OAAOc,EAAYd,EAAM,KAAK,EAE3D,GAAIA,EAAM,OAAS,SAAU,OAAa,SAAOK,EAAeL,EAAM,KAAK,CAAC,EAE5E,GAAIA,EAAM,OAAS,SACjB,OAAa,SACXK,EAAeL,EAAM,MAAM,EAAE,EAC7BK,EAAeL,EAAM,MAAM,EAAE,CAC/B,EAGF,IAAMgB,EAAe,OAAO,OAAOhB,EAAM,KAAK,EAAE,IAAKiB,GAC/CA,EAAE,OAAS,OAAqB,QAChCA,EAAE,OAAS,cAAsBZ,EAAeY,EAAE,KAAK,EACpDA,EAAE,OAAS,QAAUL,EAAWK,EAAE,KAAK,EAAIH,EAAYG,EAAE,KAAK,CACtE,EAEKR,EAAQ,OAAO,YACnB,OAAO,KAAKT,EAAM,KAAK,EAAE,IAAI,CAACe,EAAKG,IAC1B,CAACH,EAAKC,EAAaE,CAAG,CAAC,CAC/B,CACH,EAEMC,EAAU,OAAO,OAAOnB,EAAM,KAAK,EAAE,IAAKoB,GAAMA,EAAE,GAAG,EAG3D,OAFyBD,EAAQ,MAAM,CAACD,EAAKG,IAAMH,IAAQG,CAAC,EAGlD,UAAQZ,CAAK,EACb,UAAQA,EAAOU,CAAc,CACzC,EACMZ,EAAae,EAAUvB,EAAmB,OAAOwB,GAAQA,CAAG,EAErDC,EAAqBC,GAAkB,CAClD,IAAMC,EAAaD,EAAS,OACtBE,EAAoBC,EAAYF,CAAU,EAC5CvB,EAAmB,YAAU,EAE3BF,EAAQ,IAAI,IACZ4B,EAAmBC,GACvBvB,EAAWoB,EAAkBG,CAAE,EAAG7B,EAAO,IAAI,IAAOE,CAAU,EAE1D4B,EAASN,EAAS,QACrB,KAAML,GAAMA,EAAE,OAAS,QAAQ,GAC9B,UAAU,KAAMA,GAAMA,EAAE,OAAS,YAAY,EAE7CY,EACJ,GAAID,EACF,GAAI,CACF,IAAME,EAAYJ,EAAgBE,EAAO,IAAI,EAAE,IAAIA,EAAO,KAAK,EAC3D,OAAOE,GAAc,WACvBD,EAAaC,EACb9B,EAAmB,YAAU8B,CAAS,EAE1C,MAAY,CAAC,CAGf,IAAMC,EAAiB,IAAI,IAErBC,EAAe,CAACC,EAAgBC,IAAkB,CACtD,IAAIC,EAAgBJ,EAAe,IAAIE,CAAM,EACxCE,GACHJ,EAAe,IAAIE,EAASE,EAAsB,UAAQF,CAAM,CAAE,EAEpE,IAAMG,EAAed,EAAS,QAC3B,KAAML,GAAMA,EAAE,OAASgB,CAAM,EAC7B,QAAS,MAAM,KAAMI,GAAMA,EAAE,OAASH,CAAK,EAExCI,EAAsB,CAC1B/B,KACGgC,IACA,CACH,IAAMC,EAASL,EAAe,GAAGI,CAAI,EACrC,MAAO,CACL,GAAGC,EACH,IAAAjC,EACA,SACE6B,EAAa,WAAa,EACtBI,EAAO,IAAIJ,EAAa,QAAQ,EAChC,MACR,CACF,EAEA,GAAIA,EAAa,KAAK,MAAQ,QAC5B,OAAOE,EACL,EACAJ,EACAR,EAAgBU,EAAa,KAAK,KAAK,EAAE,GAC3C,EAEF,GAAM,CAAE,IAAAxB,EAAK,MAAAF,EAAO,QAAA+B,CAAQ,EAAIL,EAAa,KAAK,MAC5CM,EAAMhB,EAAgBhB,CAAK,EAC3BiC,EAASF,EAAQ,IAAKxB,GAAMhB,EAAMgB,EAAE,GAAG,CAAC,EAExC2B,EACJD,EAAO,SAAW,EACd,CAAC,CAACjB,EAAgBd,CAAG,EAAG+B,EAAO,CAAC,CAAC,CAAC,EACjCnB,EAAkBZ,CAAG,EAAe,MAAM,IACzC,CAACK,EAAGF,IAAoC,CACtCW,EAAgBT,EAAE,EAAE,EACpB0B,EAAO5B,CAAG,CACZ,CACF,EACN,OAAOuB,EAAoBK,EAAO,OAAQT,EAAOQ,EAAI,IAAK,GAAGE,CAAQ,CACvE,EAEMC,EACJX,GAEIA,EAAM,OAAS,OAAqB,QACpCA,EAAM,OAAS,cAAsBR,EAAgBQ,EAAM,MAAM,EAAE,EAChEA,EAAM,OAAS,QACZ,QACJ,GAAG,OAAO,OAAOA,EAAM,KAAK,EAAE,IAAKY,GAAMpB,EAAgBoB,EAAE,EAAE,CAAC,CAChE,EACM,YACJ,aAAUZ,EAAM,MAAQjB,GAAMS,EAAgBT,EAAE,EAAE,CAAC,CAGrD,EAGA8B,EAAgB,CAACd,EAAgBe,IAAyB,CAC9D,IAAMZ,EAAed,EAAS,QAC3B,KAAML,GAAMA,EAAE,OAASgB,CAAM,EAC7B,UAAW,KAAMI,GAAMA,EAAE,OAASW,CAAY,EAEjD,OAAOtB,EAAgBU,EAAa,IAAc,CACpD,EAEMa,EACHC,GACD,CACEjB,EACAkB,IAIG,CACH,IAAMC,EAAc9B,EAAS,QAAQ,KAAM,GAAM,EAAE,OAASW,CAAM,EAC5DoB,EAAS7B,EAAkB4B,EAAYF,CAAI,CAAE,EACnD,GAAIG,EAAO,OAAS,OAAQ,MAAM,KAClC,IAAMnB,EAAQmB,EAAO,MAAMF,CAAI,EAE/B,MAAO,CACL,SAAU,CAACC,EAAY,MAAOlB,EAAM,GAAG,EACvC,MAAOW,EAAeQ,EAAO,MAAMF,CAAI,CAAC,CAC1C,CACF,EAEIG,EAAmB,CAACC,EAAaC,IAAmB,CACxD,IAAMtB,EAAQZ,EAAS,KACpB,KAAML,GAAMA,EAAE,OAASsC,CAAG,GACzB,QAAQ,KAAMtC,GAAMA,EAAE,OAASuC,CAAM,EACzC,GAAI,CAACtB,EAAO,MAAM,KAElB,MAAO,CACL,KAAY,QAAM,GAAGA,EAAM,OAAO,IAAKjB,GAAMS,EAAgBT,EAAE,IAAI,CAAC,CAAC,EACrE,MAAOS,EAAgBQ,EAAM,MAAM,CACrC,CACF,EAEA,MAAO,CACL,gBAAAR,EACA,aAAAM,EACA,WAAYiB,EAAa,QAAQ,EACjC,WAAYA,EAAa,QAAQ,EACjC,iBAAAK,EACA,UAAWL,EAAa,OAAO,EAC/B,cAAAF,EACA,WAAAlB,CACF,CACF,EEnOA,IAAA4B,EAAoB,4CAUpB,IAAMC,EAAc,IAAI,YAClBC,GAAaD,EAAY,OAAO,KAAKA,CAAW,EAEhDE,EAAeC,GAA0B,CAC7C,IAAMC,EAAM,IAAI,WAAWD,EAAO,OAAS,CAAC,EACtCE,EAAK,IAAI,SAASD,EAAI,MAAM,EAElC,QAASE,EAAI,EAAGA,EAAIH,EAAO,OAAQG,IAAKD,EAAG,aAAaC,EAAI,EAAGH,EAAOG,CAAC,CAAC,EAExE,SAAO,OAAIF,CAAG,CAChB,EACMG,EAAqBJ,GACzBD,EAAYC,EAAO,IAAKK,MAAM,OAAIP,GAAWO,CAAC,CAAC,CAAC,CAAC,EAW7CC,EAAkC,CACtC,UAAW,GACX,OAAQ,GACR,MAAO,GACP,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,KAAM,GACN,KAAM,EACR,EAYMC,EAAyD,CAC7D,UAAW,GACX,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,QAAS,GACT,YAAa,GACb,aAAc,GACd,UAAW,EACb,EAEMC,GAA2D,CAC/D,KAAMD,EAAoB,QAC1B,KAAMA,EAAoB,OAC1B,IAAKA,EAAoB,OACzB,GAAIA,EAAoB,OACxB,IAAKA,EAAoB,OACzB,IAAKA,EAAoB,OACzB,IAAKA,EAAoB,OACzB,KAAMA,EAAoB,OAC1B,KAAMA,EAAoB,OAC1B,GAAIA,EAAoB,OACxB,IAAKA,EAAoB,OACzB,IAAKA,EAAoB,OACzB,IAAKA,EAAoB,OACzB,KAAMA,EAAoB,OAC1B,KAAMA,EAAoB,MAC5B,EAEME,EAAoB,CACxBC,EACAC,EACAC,IACG,CACH,IAAMC,EAAgB,OAAO,QAAQF,CAAK,EAAE,KAAK,CAAC,CAACG,CAAC,EAAG,CAACC,CAAC,IACvDD,EAAE,cAAcC,CAAC,CACnB,EACMC,EAAeZ,EAAkBS,EAAc,IAAI,CAAC,CAACI,CAAG,IAAMA,CAAG,CAAC,EAClEC,EAAiBnB,EACrBc,EAAc,IAAI,CAAC,CAAC,CAAEM,CAAK,IAAMP,EAAcO,CAAK,CAAC,CACvD,EAEA,OAAOpB,EAAY,CAACW,EAASM,EAAcE,CAAc,CAAC,CAC5D,EAGME,EAAa,CAACD,EAAoBE,EAAgB,IAAI,MAAU,CACpE,GAAIA,EAAO,IAAIF,EAAM,EAAE,EAAG,OAAOE,EAEjC,OAAQF,EAAM,KAAM,CAClB,IAAK,QACL,IAAK,SACL,IAAK,WACHE,EAAO,IAAIF,EAAM,GAAI,CAACA,EAAO,IAAI,IAAI,CAACA,EAAM,MAAM,EAAE,CAAC,CAAC,CAAC,EACvDC,EAAWD,EAAM,MAAOE,CAAM,EAC9B,MACF,IAAK,OAAQ,CACX,IAAMC,EAAW,OAAO,OAAOH,EAAM,KAAK,EAAE,QAASI,GAC/CA,EAAM,OAAS,OAAe,CAAC,EAC/BA,EAAM,OAAS,cAAsBA,EAAM,MAC3CA,EAAM,OAAS,SAAiB,OAAO,OAAOA,EAAM,KAAK,EACtDA,EAAM,KACd,EACDF,EAAO,IAAIF,EAAM,GAAI,CAACA,EAAO,IAAI,IAAIG,EAAS,IAAKE,GAAUA,EAAM,EAAE,CAAC,CAAC,CAAC,EACxEF,EAAS,QAASE,GAAUJ,EAAWI,EAAOH,CAAM,CAAC,EACrD,KACF,CACA,IAAK,SACHA,EAAO,IAAIF,EAAM,GAAI,CACnBA,EACA,IAAI,IAAI,CAACA,EAAM,MAAM,GAAG,GAAIA,EAAM,MAAM,GAAG,EAAE,CAAC,CAChD,CAAC,EACDC,EAAWD,EAAM,MAAM,GAAIE,CAAM,EACjCD,EAAWD,EAAM,MAAM,GAAIE,CAAM,EACjC,MACF,IAAK,SAAU,CACb,IAAMC,EAAW,OAAO,OAAOH,EAAM,KAAK,EAC1CE,EAAO,IAAIF,EAAM,GAAI,CAACA,EAAO,IAAI,IAAIG,EAAS,IAAKE,GAAUA,EAAM,EAAE,CAAC,CAAC,CAAC,EACxEF,EAAS,QAASE,GAAUJ,EAAWI,EAAOH,CAAM,CAAC,EACrD,KACF,CACA,IAAK,QACHA,EAAO,IAAIF,EAAM,GAAI,CACnBA,EACA,IAAI,IAAIA,EAAM,MAAM,IAAKK,GAAUA,EAAM,EAAE,CAAC,CAC9C,CAAC,EACDL,EAAM,MAAM,QAASK,GAAUJ,EAAWI,EAAOH,CAAM,CAAC,EACxD,MACF,QACEA,EAAO,IAAIF,EAAM,GAAI,CAACA,EAAO,IAAI,GAAK,CAAC,CAC3C,CACA,OAAOE,CACT,EAEMI,GAAiB,CACrBd,EACAe,IACW,CACX,GAAIf,EAAM,OAAS,YACjB,OAAOZ,EAAY,CAACO,EAAS,UAAWE,GAAqBG,EAAM,KAAK,CAAC,CAAC,EAE5E,GAAIA,EAAM,OAAS,OAAQ,OAAOZ,EAAY,CAACO,EAAS,IAAI,CAAC,EAE7D,GAAIK,EAAM,OAAS,UACjB,OAAOZ,EAAY,CACjBO,EAAS,UACTC,EACEI,EAAM,OAASA,EAAM,QAAU,KAAO,SAAW,QACnD,CACF,CAAC,EAEH,GAAIA,EAAM,OAAS,cACjB,OAAOZ,EAAY,CAACO,EAAS,UAAWC,EAAoB,WAAW,CAAC,EAE1E,GAAII,EAAM,OAAS,cACjB,OAAOZ,EAAY,CAACO,EAAS,UAAWC,EAAoB,SAAS,CAAC,EAGxE,GAAII,EAAM,OAAS,QAAS,CAC1B,IAAMgB,EAAahB,EAAM,MACzB,GAAIgB,EAAW,OAAS,aAAeA,EAAW,QAAU,KAC1D,OAAO5B,EAAY,CACjBO,EAAS,UACTC,EAAoB,aACpB,OAAOI,EAAM,GAAG,CAClB,CAAC,EAEH,IAAMC,EAAgBc,EAAkBC,CAAU,EAElD,OAAO5B,EAAY,CAACO,EAAS,OAAQM,EAAe,OAAOD,EAAM,GAAG,CAAC,CAAC,CACxE,CAEA,GAAIA,EAAM,OAAS,WAAY,CAC7B,IAAMgB,EAAahB,EAAM,MACzB,GAAIgB,EAAW,OAAS,aAAeA,EAAW,QAAU,KAC1D,OAAO5B,EAAY,CAACO,EAAS,UAAWC,EAAoB,YAAY,CAAC,EAE3E,IAAMK,EAAgBc,EAAkBC,CAAU,EAElD,OAAO5B,EAAY,CAACO,EAAS,OAAQM,CAAa,CAAC,CACrD,CAEA,IAAMgB,EAAcC,GAClB9B,EAAY,CAACO,EAAS,MAAO,GAAGuB,EAAQ,IAAIH,CAAiB,CAAC,CAAC,EAE3DI,EAAeD,GACnBpB,EAAkBH,EAAS,OAAQuB,EAASH,CAAiB,EAE/D,OAAIf,EAAM,OAAS,QAAgBiB,EAAWjB,EAAM,KAAK,EAErDA,EAAM,OAAS,SAAiBmB,EAAYnB,EAAM,KAAK,EAEvDA,EAAM,OAAS,SACVZ,EAAY,CAACO,EAAS,OAAQoB,EAAkBf,EAAM,KAAK,CAAC,CAAC,EAElEA,EAAM,OAAS,SACVZ,EAAY,CACjBO,EAAS,OACToB,EAAkBf,EAAM,MAAM,EAAE,EAChCe,EAAkBf,EAAM,MAAM,EAAE,CAClC,CAAC,EAEIF,EAAkBH,EAAS,KAAMK,EAAM,MAAQQ,GAAU,CAC9D,GAAIA,EAAM,OAAS,cAAe,OAAOO,EAAkBP,EAAM,KAAK,EACtE,OAAQA,EAAM,KAAM,CAClB,IAAK,OACH,OAAOpB,EAAY,CAACO,EAAS,IAAI,CAAC,EACpC,IAAK,QACH,OAAOsB,EAAWT,EAAM,KAAK,EAC/B,IAAK,SACH,OAAOW,EAAYX,EAAM,KAAK,CAClC,CACF,CAAC,CACH,EAEMY,GAAaC,GAAiB,CAElC,IAAMC,EAAc,IAAI,IAQpBC,EAAQ,EACNC,EAAkB,CAAC,EACnBd,EAA6B,CAAC,EAEpC,SAASe,EAAc/B,EAAiB,CACtC,IAAMgC,EAAQ,CACZ,MAAOH,EACP,QAASA,EACT,QAAS,EACX,EACAD,EAAY,IAAI5B,EAAGgC,CAAK,EACxBH,IACAC,EAAM,KAAK9B,CAAC,EAEZ,IAAMiC,EAAQN,EAAM,IAAI3B,CAAC,EAAG,CAAC,EAC7B,QAASkC,KAAKD,EAAO,CACnB,IAAME,EAAYP,EAAY,IAAIM,CAAC,EAC9BC,EAGMA,EAAU,UACnBH,EAAM,QAAU,KAAK,IAAIA,EAAM,QAASG,EAAU,KAAK,IAHvDJ,EAAcG,CAAC,EACfF,EAAM,QAAU,KAAK,IAAIA,EAAM,QAASJ,EAAY,IAAIM,CAAC,EAAG,OAAO,EAIvE,CAEA,GAAIF,EAAM,UAAYA,EAAM,MAAO,CACjC,IAAMI,EAAY,IAAI,IAElBC,EAAa,GACjB,GACEA,EAAaP,EAAM,IAAI,EACvBF,EAAY,IAAIS,CAAU,EAAG,QAAU,GACvCD,EAAU,IAAIC,CAAU,QACjBA,IAAerC,GAEpBoC,EAAU,KAAO,GAAGpB,EAAO,KAAKoB,CAAS,CAC/C,CACF,CAEA,QAAWE,KAAQX,EAAM,KAAK,EACvBC,EAAY,IAAIU,CAAI,GACvBP,EAAcO,CAAI,EAItB,OAAOtB,CACT,EAEMuB,GAAmBC,GAA+B,CACtD,IAAMC,EAAkB,IAAI,IAAID,EAAO,IAAI,CAACE,EAAG5C,IAAMA,CAAC,CAAC,EACjDmC,EAAQ,IAAI,IAAIO,EAAO,IAAI,CAACE,EAAG5C,IAAM,CAACA,EAAG,IAAI,GAAa,CAAC,CAAC,EAClE0C,EAAO,QAAQ,CAACG,EAAO7C,IAAM,CAC3B0C,EAAO,MAAM1C,EAAI,CAAC,EAAE,QAAQ,CAAC8C,EAAYC,IAAO,CAC9C,IAAMC,EAAID,EAAK/C,EAAI,EACF,IAAI,IAAI,CAAC,GAAG6C,EAAO,GAAGC,CAAU,CAAC,EACrC,OAASD,EAAM,KAAOC,EAAW,OAC5CX,EAAM,IAAInC,CAAC,EAAG,IAAIgD,CAAC,EACnBb,EAAM,IAAIa,CAAC,EAAG,IAAIhD,CAAC,EAEvB,CAAC,CACH,CAAC,EACD,IAAMiD,EAA6B,CAAC,EAEpC,KAAON,EAAgB,MAAM,CAC3B,IAAMO,EAAQ,IAAI,IACZC,EAAU,CAACR,EAAgB,OAAO,EAAE,KAAK,EAAE,KAAK,EACtD,KAAOQ,EAAQ,QAAQ,CACrB,IAAMC,EAAMD,EAAQ,IAAI,EACxB,GAAI,CAACR,EAAgB,IAAIS,CAAG,EAAG,SAC/BT,EAAgB,OAAOS,CAAG,EAEZV,EAAOU,CAAG,EAClB,QAASlD,GAAMgD,EAAM,IAAI,OAAOhD,CAAC,CAAC,CAAC,EACzCiC,EAAM,IAAIiB,CAAG,EAAG,QAASC,GAAMF,EAAQ,KAAKE,CAAC,CAAC,CAChD,CACAJ,EAAO,KAAKC,CAAK,CACnB,CAEA,OAAOD,CACT,EAEMK,GAAmB,CAACL,EAA4BpB,IAAiB,CACrE,IAAM0B,EAAqBL,GAAuB,CAChD,IAAMM,EAAQN,EAAM,OAAO,EAAE,KAAK,EAAE,MAC9BlC,EAAQa,EAAM,IAAI2B,CAAK,EAAG,CAAC,EACjC,OAAO,MAAM,KAAKvC,EAAWD,CAAK,EAAE,KAAK,CAAC,CAC5C,EAEME,EAA6B,IAAI,MAEvC,SAASuC,EAAgBP,EAAoB,CACvChC,EAAO,SAASgC,CAAK,IACND,EAAO,OACvBS,GACCA,IAAcR,GACdK,EAAkBL,CAAK,EAAE,KAAMV,GAASkB,EAAU,IAAIlB,CAAI,CAAC,CAC/D,EACW,QAASU,GAAUO,EAAgBP,CAAK,CAAC,EAChDhC,EAAO,SAASgC,CAAK,IACzBhC,EAAO,KAAKgC,CAAK,CACnB,CAEA,OAAAD,EAAO,QAASC,GAAUO,EAAgBP,CAAK,CAAC,EACzChC,CACT,EAEMyC,GAAgB,CAAC3C,EAAoB4C,IAA+B,CACxE,GAAIA,EAAM,IAAI5C,EAAM,EAAE,EAAG,OAAO4C,EAAM,IAAI5C,EAAM,EAAE,EAElD,IAAMa,EAAQZ,EAAWD,CAAK,EACxB0B,EAASd,GAAUC,CAAK,EACxBgC,EAAepB,GAAgBC,CAAM,EACrCoB,EAAqBR,GAAiBO,EAAchC,CAAK,EAGzDkC,EAAyB,CAC7B/C,EACAgD,EACAC,EAAY,KACD,CACX,GAAI,CAACA,GAAaL,EAAM,IAAI5C,EAAM,EAAE,EAClC,OAAO4C,EAAM,IAAI5C,EAAM,EAAE,EAE3B,IAAME,EAASI,GAAeN,EAAQkD,GACpCH,EAAuBG,EAAWF,CAAU,CAC9C,EACA,OAAAA,EAAWhD,EAAM,GAAIE,CAAM,EACpBA,CACT,EAEA,OAAA4C,EAAmB,QAASZ,GAAU,CACpCA,EAAM,QAASiB,GAAOP,EAAM,IAAIO,EAAI,EAAE,CAAC,EACvC,QAASnE,EAAI,EAAGA,EAAIkD,EAAM,KAAMlD,IAAK,CACnC,IAAMoE,EAAU,IAAI,IACpBlB,EAAM,QAASiB,GACbJ,EACElC,EAAM,IAAIsC,CAAE,EAAG,CAAC,EAChB,CAACA,EAAI/C,IAAU,EAGM8B,EAAM,IAAIiB,CAAE,EAAIC,EAAUR,GAClC,IAAIO,EAAI/C,CAAK,CAC1B,EACA,EACF,CACF,EACA,MAAM,KAAKgD,EAAQ,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAACD,EAAIE,CAAQ,IAClDT,EAAM,IAAIO,EAAIE,CAAQ,CACxB,CACF,CACF,CAAC,EAEMN,EAAuB/C,EAAO,CAACmD,EAAI/C,IAAUwC,EAAM,IAAIO,EAAI/C,CAAK,CAAC,CAC1E,EAEakD,GAAsBC,GAAkB,CACnD,IAAMC,EAAaD,EAAS,OACtBE,EAAoBC,EAAYF,CAAU,EAE1CZ,EAAQ,IAAI,IAEZe,EAAmBR,GACvBR,GAAcc,EAAkBN,CAAE,EAAGP,CAAK,EAEtCgB,EAAe,CAACC,EAAgB7D,IAAiC,CACrE,GAAI,CACF,IAAM8D,EAAeP,EAAS,QAC3B,KAAMQ,GAAMA,EAAE,OAASF,CAAM,EAC7B,QAAS,MAAM,KAAMG,GAAMA,EAAE,OAAShE,CAAK,EAE9C,GAAI8D,EAAa,KAAK,MAAQ,QAC5B,OAAOH,EAAgBG,EAAa,KAAK,KAAK,EAEhD,GAAM,CAAE,IAAAhE,EAAK,MAAAM,CAAM,EAAI0D,EAAa,KAAK,MACnCG,EAAMN,EAAgBvD,CAAK,EAC3B8D,EAAYP,EAAgB7D,CAAG,EACrC,OAAOlB,EAAY,CAACqF,EAAKC,CAAS,CAAC,CACrC,MAAY,CACV,OAAO,IACT,CACF,EAEMC,EAAmB,CAACC,EAAaC,IAAkC,CACvE,GAAI,CACF,IAAMrE,EAAQuD,EAAS,KACpB,KAAMQ,GAAMA,EAAE,OAASK,CAAG,GACzB,QAAQ,KAAML,GAAMA,EAAE,OAASM,CAAM,EACzC,GAAI,CAACrE,EAAO,MAAM,KAElB,IAAMsE,EAAmBrF,EACvBe,EAAM,OAAO,IAAK+D,GAAMA,EAAE,IAAI,CAChC,EACMQ,EAAoB3F,EACxBoB,EAAM,OAAO,IAAK+D,GAAMJ,EAAgBI,EAAE,IAAI,CAAC,CACjD,EACMS,EAAiBb,EAAgB3D,EAAM,MAAM,EAEnD,OAAOpB,EAAY,CAAC0F,EAAkBC,EAAmBC,CAAc,CAAC,CAC1E,MAAY,CACV,OAAO,IACT,CACF,EAEMC,EAAkBjF,GAAkD,CACxE,GAAIA,EAAM,OAAS,OAAQ,OAAOZ,EAAY,CAAC,EAAE,CAAC,EAElD,GAAIY,EAAM,OAAS,QAAS,CAC1B,IAAMX,EAAS,OAAO,OAAOW,EAAM,KAAK,EAAE,IAAKQ,GAC7C2D,EAAgB3D,EAAM,EAAE,CAC1B,EAEA,OAAOpB,EAAY,CAACO,EAAS,MAAO,GAAGN,CAAM,CAAC,CAChD,CAGA,OAAOS,EAAkBH,EAAS,OAAQK,EAAM,MAAQQ,GACtD2D,EAAgB3D,EAAM,EAAE,CAC1B,CACF,EAEM0E,EAAmBlF,GAChBF,EAAkBH,EAAS,MAAOK,EAAM,MAAQQ,GACrD2D,EAAgB3D,EAAM,EAAE,CAC1B,EAGI2E,EACHC,GACD,CAACf,EAAgBgB,IAAgC,CAC/C,GAAI,CACF,IAAMC,EAAcvB,EAAS,QAAQ,KAAMQ,GAAMA,EAAE,OAASF,CAAM,EAC5DkB,EAAatB,EACjBqB,EAAYF,CAAW,CACzB,EAGA,GAFAjB,EAAgBoB,EAAW,EAAE,EAEzBA,EAAW,OAAS,OAAQ,MAAM,KACtC,IAAM/E,EAAQ+E,EAAW,MAAMF,CAAI,EACnC,OAAO7E,EAAM,OAAS,cAClB2D,EAAgB3D,EAAM,MAAM,EAAE,EAC9ByE,EAAezE,CAAK,CAC1B,MAAY,CACV,OAAO,IACT,CACF,EAEIgF,EAAgB,CACpBnB,EACAoB,IACkB,CAClB,GAAI,CACF,IAAMnB,EAAeP,EAAS,QAC3B,KAAMQ,GAAMA,EAAE,OAASF,CAAM,EAC7B,UAAW,KAAMG,GAAMA,EAAE,OAASiB,CAAY,EAEjD,OAAOtB,EAAgBG,EAAa,IAAI,CAC1C,MAAY,CACV,OAAO,IACT,CACF,EAEMoB,EAEFC,GAEF,IAAIC,IACFD,EAAG,GAAGC,CAAI,GAAG,SAAS,EAAE,GAAK,KAEjC,MAAO,CACL,gBAAiBF,EAAiBvB,CAAe,EACjD,iBAAkBuB,EAAiBf,CAAgB,EACnD,aAAce,EAAiBtB,CAAY,EAC3C,UAAWsB,EAAiBP,EAAa,OAAO,CAAC,EACjD,WAAYO,EAAiBP,EAAa,QAAQ,CAAC,EACnD,WAAYO,EAAiBP,EAAa,QAAQ,CAAC,EACnD,cAAeO,EAAiBF,CAAa,EAC7C,eAAgBE,EAAiBT,CAAc,EAC/C,gBAAiBS,EAAiBR,CAAe,EACjD,yBAA0B,IACxB,MAAM,KAAK9B,EAAM,OAAO,CAAC,EAAE,IAAK1D,GAAMA,EAAE,SAAS,EAAE,CAAC,CACxD,CACF","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.1",
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/utils": "0.0.1",
44
- "@polkadot-api/substrate-bindings": "0.0.1"
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"