@polkadot-api/metadata-builders 0.13.12-canary.f1c6573 → 0.14.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.
@@ -1,5 +1,5 @@
1
1
  import { h64 } from '@polkadot-api/substrate-bindings';
2
- import { buildLookupGraph, getSubgraph, getStronglyConnectedComponents, mergeSCCsWithCommonNodes } from './lookup-graph.mjs';
2
+ import { buildLookupGraph, getSubgraph, getStronglyConnectedComponents, mergeSCCsWithCommonNodes } from './lookup-graph.js';
3
3
 
4
4
  const textEncoder = new TextEncoder();
5
5
  const encodeText = textEncoder.encode.bind(textEncoder);
@@ -367,4 +367,4 @@ const getChecksumBuilder = (getLookupEntryDef) => {
367
367
  };
368
368
 
369
369
  export { getChecksumBuilder };
370
- //# sourceMappingURL=checksum-builder.mjs.map
370
+ //# sourceMappingURL=checksum-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checksum-builder.js","sources":["../src/checksum-builder.ts"],"sourcesContent":["import type { StringRecord } from \"@polkadot-api/substrate-bindings\"\nimport { h64 } from \"@polkadot-api/substrate-bindings\"\nimport {\n LookupGraph,\n buildLookupGraph,\n getStronglyConnectedComponents,\n getSubgraph,\n mergeSCCsWithCommonNodes,\n} from \"./lookup-graph\"\nimport {\n ArrayVar,\n LookupEntry,\n MetadataLookup,\n MetadataPrimitives,\n StructVar,\n TupleVar,\n VoidVar,\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\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[input.isBig ? \"bigint\" : \"number\"],\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).filter(\n // SCCs can be of length=1, but for those we're only interested with those that are circular with themselves\n (group) => group.size > 1 || isSelfCircular(group, subGraph),\n )\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(cyclicGroups, subGraph)\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\nconst isSelfCircular = (group: Set<number>, graph: LookupGraph) => {\n if (group.size !== 1) return false\n const [id] = group\n\n return graph.get(id)!.refs.has(id)\n}\n\nexport const getChecksumBuilder = (getLookupEntryDef: MetadataLookup) => {\n const { metadata } = getLookupEntryDef\n const graph = buildLookupGraph(getLookupEntryDef, metadata.lookup.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 buildViewFns = (pallet: string, entry: string): bigint | null => {\n try {\n const viewFn = metadata.pallets\n .find((x) => x.name === pallet)\n ?.viewFns.find((x) => x.name === entry)\n if (!viewFn) throw null\n\n const argNamesChecksum = getStringChecksum(\n viewFn.inputs.map((x) => x.name),\n )\n const argValuesChecksum = getChecksum(\n viewFn.inputs.map((x) => buildDefinition(x.type)),\n )\n const outputChecksum = buildDefinition(viewFn.output)\n\n return getChecksum([argNamesChecksum, argValuesChecksum, outputChecksum])\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 variantShapeId = {\n errors: 1n,\n events: 2n,\n calls: 3n,\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(palletEntry[variantType]!.type)\n buildDefinition(enumLookup.id)\n\n if (enumLookup.type !== \"enum\") throw null\n const entry = enumLookup.value[name]\n const valueChecksum =\n entry.type === \"lookupEntry\"\n ? buildDefinition(entry.value.id)\n : buildComposite(entry)\n return getChecksum([variantShapeId[variantType], valueChecksum])\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 buildViewFns: toStringEnhancer(buildViewFns),\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"],"names":["result","id","group","getChecksum","entry"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as scale from '@polkadot-api/substrate-bindings';
2
2
  import { mapObject } from '@polkadot-api/utils';
3
- import { getLookupCodecBuilder } from './lookup-codec-builder.mjs';
3
+ import { getLookupCodecBuilder } from './lookup-codec-builder.js';
4
4
 
5
5
  const nullCodec = scale.enhanceCodec(
6
6
  scale._void,
@@ -133,4 +133,4 @@ const getDynamicBuilder = (getLookupEntryDef) => {
133
133
  };
134
134
 
135
135
  export { getDynamicBuilder };
136
- //# sourceMappingURL=dynamic-builder.mjs.map
136
+ //# sourceMappingURL=dynamic-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-builder.js","sources":["../src/dynamic-builder.ts"],"sourcesContent":["import type { Codec, StringRecord } from \"@polkadot-api/substrate-bindings\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport { mapObject } from \"@polkadot-api/utils\"\nimport type { EnumVar, MetadataLookup } from \"./lookups\"\nimport { getLookupCodecBuilder } from \"./lookup-codec-builder\"\n\nconst nullCodec = scale.enhanceCodec(\n scale._void,\n () => undefined,\n () => null,\n)\n\nexport const getDynamicBuilder = (getLookupEntryDef: MetadataLookup) => {\n const { metadata } = getLookupEntryDef\n let buildDefinition = getLookupCodecBuilder(getLookupEntryDef)\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 buildDefinition = getLookupCodecBuilder(\n getLookupEntryDef,\n scale.AccountId(prefixVal),\n )\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 // if val is `void` it decodes to `undefined`, making it impossible\n // to differentiate from a non-existant key\n // therefore, if the key exists => null, if it doesn't => undefined\n const withNullVoid = (codec: Codec<any>) =>\n codec === scale._void ? nullCodec : codec\n\n const storageWithFallback = (\n len: number,\n value: Codec<any>,\n ...args: Parameters<ReturnType<typeof scale.Storage>>\n ) => {\n const keys = storagePallet!(...args)\n const [, ...encodersWithHash] = args\n return {\n args: scale.Tuple(...encodersWithHash.map(([codec]) => codec)),\n keys,\n value,\n len,\n fallback:\n storageEntry.modifier === 1\n ? value.dec(storageEntry.fallback)\n : undefined,\n }\n }\n\n if (storageEntry.type.tag === \"plain\")\n return storageWithFallback(\n 0,\n withNullVoid(buildDefinition(storageEntry.type.value)),\n entry,\n )\n\n const { key, value, hashers } = storageEntry.type.value\n const val = withNullVoid(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, val, entry, ...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]!.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 buildViewFn = (pallet: string, entry: string) => {\n const fn = metadata.pallets\n .find((x) => x.name === pallet)\n ?.viewFns.find((x) => x.name === entry)\n if (!fn) throw null\n\n return {\n args: scale.Tuple(...fn.inputs.map((x) => buildDefinition(x.type))),\n value: buildDefinition(fn.output),\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 buildViewFn,\n buildRuntimeCall,\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n ss58Prefix,\n }\n}\n"],"names":["value"],"mappings":"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"}