PHP WebShell
Текущая директория: /opt/BitGoJS/node_modules/@polkadot-api/metadata-builders/dist
Просмотр файла: index.mjs.map
{"version":3,"sources":["../src/lookups.ts","../src/dynamic-builder.ts","../src/with-cache.ts","../src/checksum-builder.ts","../src/lookup-graph.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 | ArrayVar\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\nconst _void: VoidVar = { type: \"void\" }\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 _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 return getComplexVar(def.value)\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 _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] = { ..._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 enumValue[key] = { ...getComplexVar(x.fields), idx: x.index }\n })\n\n return {\n type: \"enum\",\n value: enumValue,\n innerDocs: enumDocs,\n }\n }\n\n if (def.tag === \"sequence\")\n return {\n type: \"sequence\",\n value: getLookupEntryDef(def.value as number),\n }\n\n if (def.tag === \"array\") {\n const { len } = def.value\n const value = getLookupEntryDef(def.value.type)\n\n return !len || value.type === \"void\"\n ? _void\n : len > 0\n ? {\n type: \"array\",\n value,\n len: def.value.len,\n }\n : value\n }\n\n if (def.tag === \"tuple\") {\n if (def.value.length === 0) return _void\n\n return def.value.length > 1\n ? getArrayOrTuple(\n def.value.map((x) => getLookupEntryDef(x as number)),\n def.value.map((x) => lookupData[x].docs),\n )\n : getLookupEntryDef(def.value[0] as number) // use to be a \"pointer\"\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 const getComplexVar = (\n input: Array<{ type: number; name?: string; docs: string[] }>,\n ): TupleVar | StructVar | ArrayVar | VoidVar => {\n let allKey = true\n\n const values: Record<string | number, LookupEntry> = {}\n const innerDocs: Record<string | number, string[]> = {}\n\n input.forEach((x, idx) => {\n allKey = allKey && !!x.name\n const key = x.name || idx\n const value = getLookupEntryDef(x.type as number)\n if (value.type !== \"void\") {\n values[key] = value\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 : getArrayOrTuple(Object.values(values), Object.values(innerDocs))\n }\n\n const getArrayOrTuple = (\n values: Array<LookupEntry>,\n innerDocs: Array<string[]>,\n ): TupleVar | ArrayVar | VoidVar => {\n if (\n values.every((v) => v.id === values[0].id) &&\n innerDocs.every((doc) => !doc.length)\n ) {\n const [value] = values\n return value.type === \"void\"\n ? _void\n : {\n type: \"array\",\n value: values[0],\n len: values.length,\n }\n }\n return {\n type: \"tuple\",\n value: values,\n innerDocs: innerDocs,\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 } 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 bigCompact = scale.createCodec(\n scale.compact[0],\n scale.enhanceDecoder(scale.compact[1], BigInt),\n)\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 input.isBig ? bigCompact : 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 switch (v.type) {\n case \"void\":\n return scale._void\n case \"lookupEntry\":\n return buildNextCodec(v.value)\n case \"tuple\":\n return buildTuple(v.value)\n case \"struct\":\n return buildStruct(v.value)\n case \"array\":\n return buildVector(v.value, v.len)\n }\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: scale.EncoderWithHash<unknown>[] = (() => {\n if (hashes.length === 1) {\n return [[buildDefinition(key), hashes[0]]]\n }\n\n const keyDef = getLookupEntryDef(key)\n\n switch (keyDef.type) {\n case \"array\":\n return hashes.map((hash) => [buildDefinition(keyDef.value.id), hash])\n case \"tuple\":\n return keyDef.value.map((x, idx) => [\n buildDefinition(x.id),\n hashes[idx],\n ])\n default:\n throw new Error(\"Invalid key type\")\n }\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 switch (entry.type) {\n case \"void\":\n return scale._void\n case \"lookupEntry\":\n return buildDefinition(entry.value.id)\n case \"tuple\":\n return scale.Tuple(\n ...Object.values(entry.value).map((l) => buildDefinition(l.id)),\n )\n case \"struct\":\n return scale.Struct(\n mapObject(entry.value, (x) => buildDefinition(x.id)) as StringRecord<\n Codec<any>\n >,\n )\n case \"array\":\n return scale.Vector(buildDefinition(entry.value.id), entry.len)\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 ArrayVar,\n LookupEntry,\n MetadataPrimitives,\n StructVar,\n TupleVar,\n VoidVar,\n getLookupFn,\n} from \"./lookups\"\nimport {\n LookupGraph,\n buildLookupGraph,\n getStronglyConnectedComponents,\n getSubgraph,\n mergeSCCsWithCommonNodes,\n} from \"./lookup-graph\"\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\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 const buildVector = (entry: LookupEntry, length?: number) => {\n const innerChecksum = buildNextChecksum(entry)\n return getChecksum(\n length !== undefined\n ? [shapeIds.vector, innerChecksum, BigInt(length)]\n : [shapeIds.vector, innerChecksum],\n )\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 return buildVector(innerValue, 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 return buildVector(innerValue)\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 case \"array\":\n return buildVector(entry.value, entry.len)\n }\n })\n}\n\nconst sortCyclicGroups = (groups: Array<Set<number>>, graph: LookupGraph) => {\n const getReachableNodes = (group: Set<number>) => {\n const result = new Set<number>()\n const toVisit = Array.from(group)\n while (toVisit.length) {\n const id = toVisit.pop()!\n if (result.has(id)) continue\n result.add(id)\n\n graph.get(id)?.refs.forEach((id) => toVisit.push(id))\n }\n\n return Array.from(result)\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\nfunction iterateChecksums(\n group: Set<number>,\n iterations: number,\n cache: Map<number, bigint>,\n graph: LookupGraph,\n) {\n // Keep the values that are getting changed on each iteration in a separate\n // cache, because two nodes referencing the same one should read the same\n // previous iteration checksum for that node.\n const groupReadCache = new Map([...group].map((id) => [id, 0n]))\n const groupWriteCache = new Map<number, bigint>()\n\n const recursiveBuildChecksum = (\n entry: LookupEntry,\n // The first call has to skip the cache, otherwise it would return the\n // previous iteration result.\n skipCache = true,\n ): bigint => {\n if (!skipCache && (groupReadCache.has(entry.id) || cache.has(entry.id))) {\n return groupReadCache.get(entry.id) ?? cache.get(entry.id)!\n }\n const result = _buildChecksum(entry, (nextEntry) =>\n recursiveBuildChecksum(nextEntry, false),\n )\n if (group.has(entry.id)) {\n groupWriteCache.set(entry.id, result)\n } else {\n cache.set(entry.id, result)\n }\n return result\n }\n\n for (let i = 0; i < iterations; i++) {\n group.forEach((id) => recursiveBuildChecksum(graph.get(id)!.entry))\n\n group.forEach((id) => groupReadCache.set(id, groupWriteCache.get(id)!))\n }\n\n return groupReadCache\n}\n\nfunction getMirroredNodes(\n cyclicGroups: Array<Set<number>>,\n graph: LookupGraph,\n) {\n const maxSize = cyclicGroups.reduce(\n (acc, group) => Math.max(acc, group.size),\n 0,\n )\n const allEntries = new Set([...graph.values()].map((v) => v.entry.id))\n\n const resultingChecksums = iterateChecksums(\n allEntries,\n maxSize,\n // Cache won't be used, since it's using the internal one for every node.\n new Map(),\n graph,\n )\n\n const checksumToNodes = new Map<bigint, number[]>()\n for (const id of allEntries) {\n const checksum = resultingChecksums.get(id)\n if (checksum == undefined) throw new Error(\"Unreachable\")\n if (!checksumToNodes.has(checksum)) {\n checksumToNodes.set(checksum, [])\n }\n checksumToNodes.get(checksum)!.push(id)\n }\n\n const checksumsWithDuplicates = [...checksumToNodes.entries()].filter(\n ([, nodes]) => nodes.length > 1,\n )\n\n const duplicatesMap: Record<number, number[]> = {}\n checksumsWithDuplicates.forEach(([, nodes]) => {\n nodes.forEach((n) => (duplicatesMap[n] = nodes))\n })\n\n return duplicatesMap\n}\n\nconst buildChecksum = (\n entry: LookupEntry,\n cache: Map<number, bigint>,\n graph: LookupGraph,\n) => {\n if (cache.has(entry.id)) return cache.get(entry.id)!\n\n const subGraph = getSubgraph(entry.id, graph)\n\n const cycles = getStronglyConnectedComponents(subGraph)\n const cyclicGroups = mergeSCCsWithCommonNodes(cycles).filter((group) => {\n // Exclude groups that were previously calculated\n return !cache.has(group.values().next().value)\n })\n const mirrored = getMirroredNodes(cyclicGroups, subGraph)\n const sortedCyclicGroups = sortCyclicGroups(\n cyclicGroups.filter((group) => group.size > 1),\n subGraph,\n )\n\n sortedCyclicGroups.forEach((group) => {\n if (cache.has(group.values().next().value)) {\n // exclude mirrored groups\n return\n }\n\n const result = iterateChecksums(group, group.size, cache, graph)\n group.forEach((id) => {\n const checksum = result.get(id)!\n if (id in mirrored) {\n mirrored[id].forEach((id) => cache.set(id, checksum))\n } else {\n cache.set(id, checksum)\n }\n })\n })\n\n const getChecksum = (entry: LookupEntry) => {\n if (cache.has(entry.id)) return cache.get(entry.id)!\n return _buildChecksum(entry, getChecksum)\n }\n\n return getChecksum(entry)\n}\n\nexport const getChecksumBuilder = (metadata: V14 | V15) => {\n const lookupData = metadata.lookup\n const getLookupEntryDef = getLookupFn(lookupData)\n const graph = buildLookupGraph(getLookupEntryDef, lookupData.length)\n\n const cache = new Map<number, bigint>()\n\n const buildDefinition = (id: number): bigint =>\n buildChecksum(getLookupEntryDef(id), cache, graph)\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 = (\n input: TupleVar | StructVar | VoidVar | ArrayVar,\n ): 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 if (input.type === \"array\") {\n return getChecksum([\n shapeIds.vector,\n buildDefinition(input.value.id),\n BigInt(input.len),\n ])\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","import { LookupEntry } from \"./lookups\"\n\nexport type LookupGraph = Map<\n number,\n { entry: LookupEntry; backRefs: Set<number>; refs: Set<number> }\n>\n\nexport function buildLookupGraph(\n lookupFn: (id: number) => LookupEntry,\n lookupLength: number,\n): LookupGraph {\n const result: LookupGraph = new Map()\n const visited = new Set<number>()\n\n const addEdge = (from: number, to: number) => {\n if (!result.has(from))\n result.set(from, {\n entry: lookupFn(from),\n backRefs: new Set(),\n refs: new Set(),\n })\n if (!result.has(to))\n result.set(to, {\n entry: lookupFn(to),\n backRefs: new Set(),\n refs: new Set(),\n })\n result.get(from)!.refs.add(to)\n result.get(to)!.backRefs.add(from)\n }\n\n for (let i = 0; i < lookupLength; i++) {\n const entry = lookupFn(i)\n if (i !== entry.id) {\n // Lookup solved a pointer, but we still need to add that node into our\n // graph in case someone access it from there.\n addEdge(i, entry.id)\n }\n if (visited.has(entry.id)) continue\n visited.add(entry.id)\n\n switch (entry.type) {\n case \"array\":\n case \"option\":\n case \"sequence\":\n addEdge(entry.id, entry.value.id)\n break\n case \"enum\":\n Object.values(entry.value).forEach((enumEntry) => {\n switch (enumEntry.type) {\n case \"array\":\n case \"lookupEntry\":\n addEdge(entry.id, enumEntry.value.id)\n break\n case \"struct\":\n case \"tuple\":\n Object.values(enumEntry.value).forEach((v) =>\n addEdge(entry.id, v.id),\n )\n break\n }\n })\n break\n case \"result\":\n addEdge(entry.id, entry.value.ok.id)\n addEdge(entry.id, entry.value.ko.id)\n break\n case \"struct\":\n case \"tuple\":\n Object.values(entry.value).forEach((v) => addEdge(entry.id, v.id))\n break\n }\n\n // It could be that this node is not being referenced by any other type\n // nor it references anything. We still have to add it into the graph.\n if (!result.has(entry.id)) {\n result.set(entry.id, {\n backRefs: new Set(),\n refs: new Set(),\n entry,\n })\n }\n }\n\n return result\n}\n\nconst subgraphCache = new WeakMap<LookupGraph, Map<number, LookupGraph>>()\nfunction _getSubgraph(\n id: number,\n graph: LookupGraph,\n result: LookupGraph,\n cache: Map<number, LookupGraph>,\n) {\n if (result.has(id)) return\n const node = graph.get(id)!\n result.set(id, node)\n cache.set(id, result)\n\n node.refs.forEach((ref) => _getSubgraph(ref, graph, result, cache))\n node.backRefs.forEach((ref) => _getSubgraph(ref, graph, result, cache))\n}\n\nexport function getSubgraph(id: number, graph: LookupGraph) {\n if (!subgraphCache.has(graph)) {\n subgraphCache.set(graph, new Map())\n }\n const cache = subgraphCache.get(graph)!\n if (cache.has(id)) return cache.get(id)!\n\n const result: LookupGraph = new Map()\n _getSubgraph(id, graph, result, cache)\n return result\n}\n\nexport function getStronglyConnectedComponents(graph: LookupGraph) {\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)!.refs\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\nexport function mergeSCCsWithCommonNodes(\n stronglyConnectedComponents: Array<Set<number>>,\n) {\n /**\n * For Nodes that are shared between two sets of SCCs, we need to calculate\n * the checksum for the both of them, which wouldn't work (it would give\n * different checksums).\n * So we merge the SCCs that are using shared nodes into one group.\n */\n const scc = stronglyConnectedComponents\n const ungroupedCycles = new Set(scc.map((_, i) => i))\n const edges = new Map(scc.map((_, i) => [i, new Set<number>()]))\n scc.forEach((cycle, i) => {\n scc.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 = scc[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"],"mappings":"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","names":["withCache","entry","inner","value","result","id","group","getChecksum","entry"]}Выполнить команду
Для локальной разработки. Не используйте в интернете!