@polkadot-api/merkleize-metadata 1.0.0 → 1.1.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
@@ -1197,9 +1197,42 @@ declare const proof: Codec<{
1197
1197
  type Proof = CodecType<typeof proof>;
1198
1198
 
1199
1199
  interface MetadataMerkleizer {
1200
+ /**
1201
+ * @returns Digest value of the metadata (aka its merkleized root-hash)
1202
+ */
1200
1203
  digest: () => Uint8Array;
1204
+ /**
1205
+ * Get proof for an `Extrinsic`.
1206
+ *
1207
+ * @param transaction Encoded `Extrinsic`, both signed or unsigned.
1208
+ * @param txAdditionalSigned Optionally collect types for given
1209
+ * `additionalSigned` part of signedExtensions.
1210
+ * @returns Encoded `Proof`
1211
+ */
1201
1212
  getProofForExtrinsic: (transaction: Uint8Array | HexString, txAdditionalSigned?: Uint8Array | HexString) => Uint8Array;
1213
+ /**
1214
+ * Get proof for `ExtrinsicPayload` parts.
1215
+ *
1216
+ * @param callData Call data of the transaction. It has to be
1217
+ * bare; i.e.
1218
+ * without prepended compact length.
1219
+ * @param includedInExtrinsic Extra part of the signed extensions, all of
1220
+ * them concatenated.
1221
+ * @param includedInSignedData Additional signed part of the signed
1222
+ * extensions, all of them concatenated.
1223
+ * @returns Encoded `Proof`
1224
+ */
1202
1225
  getProofForExtrinsicParts: (callData: Uint8Array | HexString, includedInExtrinsic: Uint8Array | HexString, includedInSignedData: Uint8Array | HexString) => Uint8Array;
1226
+ /**
1227
+ * Get proof for `ExtrinsicPayload`.
1228
+ *
1229
+ * @param extrinsicPayload Call data, extra part of signedExtensions and
1230
+ * additional signed part of signedExtensions
1231
+ * concatenated. It has to be bare; i.e. without
1232
+ * prepended compact length.
1233
+ * @returns Encoded `Proof`
1234
+ */
1235
+ getProofForExtrinsicPayload: (extrinsicPayload: Uint8Array | HexString) => Uint8Array;
1203
1236
  }
1204
1237
  declare const merkleizeMetadata: (metadataBytes: Uint8Array | HexString, info: ExtraInfo) => MetadataMerkleizer;
1205
1238
 
package/dist/index.d.ts CHANGED
@@ -1197,9 +1197,42 @@ declare const proof: Codec<{
1197
1197
  type Proof = CodecType<typeof proof>;
1198
1198
 
1199
1199
  interface MetadataMerkleizer {
1200
+ /**
1201
+ * @returns Digest value of the metadata (aka its merkleized root-hash)
1202
+ */
1200
1203
  digest: () => Uint8Array;
1204
+ /**
1205
+ * Get proof for an `Extrinsic`.
1206
+ *
1207
+ * @param transaction Encoded `Extrinsic`, both signed or unsigned.
1208
+ * @param txAdditionalSigned Optionally collect types for given
1209
+ * `additionalSigned` part of signedExtensions.
1210
+ * @returns Encoded `Proof`
1211
+ */
1201
1212
  getProofForExtrinsic: (transaction: Uint8Array | HexString, txAdditionalSigned?: Uint8Array | HexString) => Uint8Array;
1213
+ /**
1214
+ * Get proof for `ExtrinsicPayload` parts.
1215
+ *
1216
+ * @param callData Call data of the transaction. It has to be
1217
+ * bare; i.e.
1218
+ * without prepended compact length.
1219
+ * @param includedInExtrinsic Extra part of the signed extensions, all of
1220
+ * them concatenated.
1221
+ * @param includedInSignedData Additional signed part of the signed
1222
+ * extensions, all of them concatenated.
1223
+ * @returns Encoded `Proof`
1224
+ */
1202
1225
  getProofForExtrinsicParts: (callData: Uint8Array | HexString, includedInExtrinsic: Uint8Array | HexString, includedInSignedData: Uint8Array | HexString) => Uint8Array;
1226
+ /**
1227
+ * Get proof for `ExtrinsicPayload`.
1228
+ *
1229
+ * @param extrinsicPayload Call data, extra part of signedExtensions and
1230
+ * additional signed part of signedExtensions
1231
+ * concatenated. It has to be bare; i.e. without
1232
+ * prepended compact length.
1233
+ * @returns Encoded `Proof`
1234
+ */
1235
+ getProofForExtrinsicPayload: (extrinsicPayload: Uint8Array | HexString) => Uint8Array;
1203
1236
  }
1204
1237
  declare const merkleizeMetadata: (metadataBytes: Uint8Array | HexString, info: ExtraInfo) => MetadataMerkleizer;
1205
1238
 
package/dist/index.js CHANGED
@@ -591,16 +591,21 @@ var merkleizeMetadata = (metadataBytes, info) => {
591
591
  extraInfo.enc(info)
592
592
  ]);
593
593
  };
594
- const getProofForExtrinsicParts = (callData, includedInExtrinsic, includedInSignedData) => {
595
- const bytes = mergeUint8(
596
- [callData, includedInExtrinsic, includedInSignedData].map(toBytes)
597
- );
594
+ const getProofForExtrinsicPayload = (extrinsicPayload) => {
598
595
  const typeRefs = [
599
596
  extrinsic.callTy,
600
597
  ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),
601
598
  ...extrinsic.signedExtensions.map((x) => x.includedInSignedData)
602
599
  ];
603
- return generateProof(decodeAndCollectKnownLeafs(bytes, typeRefs, lookup2));
600
+ return generateProof(
601
+ decodeAndCollectKnownLeafs(extrinsicPayload, typeRefs, lookup2)
602
+ );
603
+ };
604
+ const getProofForExtrinsicParts = (callData, includedInExtrinsic, includedInSignedData) => {
605
+ const bytes = mergeUint8(
606
+ [callData, includedInExtrinsic, includedInSignedData].map(toBytes)
607
+ );
608
+ return getProofForExtrinsicPayload(bytes);
604
609
  };
605
610
  const getProofForExtrinsic = (transaction, txAdditionalSigned) => {
606
611
  let [, { version, signed }, bytes] = extrinsicDec(transaction);
@@ -623,7 +628,8 @@ var merkleizeMetadata = (metadataBytes, info) => {
623
628
  return {
624
629
  digest,
625
630
  getProofForExtrinsic,
626
- getProofForExtrinsicParts
631
+ getProofForExtrinsicParts,
632
+ getProofForExtrinsicPayload
627
633
  };
628
634
  };
629
635
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/main.ts","../src/codecs.ts","../src/get-accessible-types.ts","../src/get-lookup.ts","../src/get-metadata.ts","../src/utils.ts","../src/decode-and-collect.ts","../src/proof.ts"],"sourcesContent":["export * from \"./main\"\nexport {\n proof,\n Proof,\n lookup,\n Lookup,\n lookupType,\n LookupEntry,\n hash,\n extrinsicMetadata,\n ExtrinsicMetadata,\n TypeRef,\n extraInfo,\n ExtraInfo,\n} from \"./codecs\"\n","import {\n Blake3256,\n HexString,\n compact,\n u32,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n ExtraInfo,\n ExtrinsicMetadata,\n LookupValue,\n MetadataDigest,\n ScalePrimitive,\n TypeRef,\n extraInfo,\n extrinsicMetadata,\n lookupType,\n metadataDigest,\n extrinsicDec,\n} from \"./codecs\"\nimport { getAccessibleTypes } from \"./get-accessible-types\"\nimport { getLookup } from \"./get-lookup\"\nimport { getMetadata } from \"./get-metadata\"\nimport { compactTypeRefs, mergeUint8, toBytes } from \"./utils\"\nimport { decodeAndCollectKnownLeafs } from \"./decode-and-collect\"\nimport { getProofData } from \"./proof\"\n\nexport interface MetadataMerkleizer {\n // it returns the digest value of the metadata (aka its merkleized root-hash)\n digest: () => Uint8Array\n\n // given an extrinsic, it returns an encoded `Proof`\n getProofForExtrinsic: (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => Uint8Array\n\n // given the extrinsic parts, it returns an encoded `Proof`\n getProofForExtrinsicParts: (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => Uint8Array\n}\n\nexport const merkleizeMetadata = (\n metadataBytes: Uint8Array | HexString,\n info: ExtraInfo,\n): MetadataMerkleizer => {\n const metadata = getMetadata(metadataBytes)\n\n const definitions = new Map<number, LookupValue>(\n metadata.lookup.map((value) => [value.id, value]),\n )\n const accessibleTypes = getAccessibleTypes(metadata, definitions)\n const getPrimitive = (frameId: number): ScalePrimitive[\"tag\"] | null => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n\n if (tag === \"primitive\") return value.tag\n\n if ((tag !== \"composite\" && tag !== \"tuple\") || value.length > 1)\n throw new Error(\"The provided definition doesn't map to a primitive\")\n\n return value.length === 0\n ? null // signals `void`\n : getPrimitive(tag === \"tuple\" ? value[0] : value[0].type)\n }\n\n const getTypeRef = (frameId: number): TypeRef => {\n const { def } = definitions.get(frameId)!\n\n if (def.tag === \"primitive\") return { tag: def.value.tag, value: undefined }\n\n if (def.tag === \"compact\") {\n const primitive = getPrimitive(def.value)\n const tag = compactTypeRefs[primitive as \"u8\"]\n if (!tag) throw new Error(\"Invalid primitive for Compact\")\n return { tag, value: undefined }\n }\n\n return accessibleTypes.has(frameId)\n ? { tag: \"perId\", value: accessibleTypes.get(frameId)! }\n : { tag: \"void\", value: undefined }\n }\n\n const extrinsic: ExtrinsicMetadata = {\n version: metadata.extrinsic.version,\n addressTy: getTypeRef(metadata.extrinsic.address),\n callTy: getTypeRef(metadata.extrinsic.call),\n signatureTy: getTypeRef(metadata.extrinsic.signature),\n signedExtensions: metadata.extrinsic.signedExtensions.map((se) => ({\n identifier: se.identifier,\n includedInExtrinsic: getTypeRef(se.type),\n includedInSignedData: getTypeRef(se.additionalSigned),\n })),\n }\n\n const lookup = getLookup(\n definitions,\n accessibleTypes,\n getTypeRef,\n getPrimitive,\n )\n const lookupEncoded = lookup.map(lookupType.enc)\n\n let hashTree: Array<Uint8Array> | undefined\n const getHashTree = (): Array<Uint8Array> => {\n if (hashTree) return hashTree\n\n if (!lookupEncoded.length) return (hashTree = [new Uint8Array(32).fill(0)])\n\n hashTree = new Array(lookupEncoded.length * 2 - 1)\n\n let leavesStartIdx = lookupEncoded.length - 1\n for (let i = 0; i < lookupEncoded.length; i++)\n hashTree[leavesStartIdx + i] = Blake3256(lookupEncoded[i])\n\n for (let i = hashTree.length - 2; i > 0; i -= 2)\n hashTree[(i - 1) / 2] = Blake3256(\n mergeUint8([hashTree[i], hashTree[i + 1]]),\n )\n\n return hashTree\n }\n\n let digested: undefined | Uint8Array\n const digest = () => {\n if (digested) return digested\n const rootLookupHash = getHashTree()[0]\n\n const digest: MetadataDigest = {\n tag: \"V1\",\n value: {\n typeInformationTreeRoot: rootLookupHash,\n extrinsicMetadataHash: Blake3256(extrinsicMetadata.enc(extrinsic)),\n ...info,\n },\n }\n\n return (digested = Blake3256(metadataDigest.enc(digest)))\n }\n\n const generateProof = (knownIndexes: number[]) => {\n const proofData = getProofData(lookupEncoded, knownIndexes)\n\n const hashTree = getHashTree()\n const proofs = proofData.proofIdxs.map((idx) => hashTree[idx])\n\n return mergeUint8([\n compact.enc(proofData.leaves.length),\n ...proofData.leaves,\n compact.enc(proofData.leafIdxs.length),\n ...proofData.leafIdxs.map((x) => u32.enc(x)),\n compact.enc(proofs.length),\n ...proofs,\n extrinsicMetadata.enc(extrinsic),\n extraInfo.enc(info),\n ])\n }\n\n const getProofForExtrinsicParts = (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => {\n const bytes = mergeUint8(\n [callData, includedInExtrinsic, includedInSignedData].map(toBytes),\n )\n const typeRefs: Array<TypeRef> = [\n extrinsic.callTy,\n ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),\n ...extrinsic.signedExtensions.map((x) => x.includedInSignedData),\n ]\n return generateProof(decodeAndCollectKnownLeafs(bytes, typeRefs, lookup))\n }\n\n const getProofForExtrinsic = (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => {\n let [, { version, signed }, bytes] = extrinsicDec(transaction)\n\n if (version !== extrinsic.version)\n throw new Error(\"Incorrect extrinsic version\")\n\n const typeRefs: TypeRef[] = signed\n ? [\n extrinsic.addressTy,\n extrinsic.signatureTy,\n ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),\n extrinsic.callTy,\n ]\n : [extrinsic.callTy]\n\n if (txAdditionalSigned) {\n bytes = mergeUint8([bytes, toBytes(txAdditionalSigned)])\n typeRefs.push(\n ...extrinsic.signedExtensions.map((x) => x.includedInSignedData),\n )\n }\n\n return generateProof(decodeAndCollectKnownLeafs(bytes, typeRefs, lookup))\n }\n\n return {\n digest,\n getProofForExtrinsic,\n getProofForExtrinsicParts,\n }\n}\n","import {\n Bytes,\n Codec,\n CodecType,\n Option,\n ScaleEnum,\n Struct,\n Tuple,\n V15,\n Vector,\n _void,\n bool,\n compact,\n compactNumber,\n enhanceDecoder,\n str,\n u16,\n u32,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\n\nconst extraInfoInner = {\n specVersion: u32,\n specName: str,\n base58Prefix: u16,\n decimals: u8,\n tokenSymbol: str,\n}\nexport const extraInfo = Struct(extraInfoInner)\nexport type ExtraInfo = CodecType<typeof extraInfo>\n\nexport const hash = Bytes(32)\nexport const metadataDigest = ScaleEnum({\n V0: _void,\n V1: Struct({\n typeInformationTreeRoot: hash,\n extrinsicMetadataHash: hash,\n ...extraInfoInner,\n }),\n})\nexport type MetadataDigest = CodecType<typeof metadataDigest>\n\nexport const scalePrimitive = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n})\nexport type ScalePrimitive = CodecType<typeof scalePrimitive>\n\nexport const typeRef = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n compactU8: _void,\n compactU16: _void,\n compactU32: _void,\n compactU64: _void,\n compactU128: _void,\n compactU256: _void,\n void: _void,\n perId: compactNumber,\n})\nexport type TypeRef = CodecType<typeof typeRef>\n\nconst field = Struct({\n name: Option(str),\n ty: typeRef,\n typeName: Option(str),\n})\nexport const typeDef = ScaleEnum({\n composite: Vector(field),\n enumeration: Struct({\n name: str,\n fields: Vector(field),\n index: compactNumber,\n }),\n sequence: typeRef,\n array: Struct({\n len: u32,\n typeParam: typeRef,\n }),\n tuple: Vector(typeRef),\n bitSequence: Struct({\n numBytes: u8,\n leastSignificantBitFirst: bool,\n }),\n})\nexport type TypeDef = CodecType<typeof typeDef>\n\nexport const lookupType = Struct({\n path: Vector(str),\n typeDef: typeDef,\n typeId: compactNumber,\n})\nexport type LookupEntry = CodecType<typeof lookupType>\nexport type Lookup = Array<LookupEntry>\nexport const lookup: Codec<Lookup> = Vector(lookupType)\n\nexport const extrinsicMetadata = Struct({\n version: u8,\n addressTy: typeRef,\n callTy: typeRef,\n signatureTy: typeRef,\n signedExtensions: Vector(\n Struct({\n identifier: str,\n includedInExtrinsic: typeRef,\n includedInSignedData: typeRef,\n }),\n ),\n})\nexport type ExtrinsicMetadata = CodecType<typeof extrinsicMetadata>\nexport type LookupValue = V15[\"lookup\"] extends Array<infer T> ? T : never\n\nconst versionDecoder = enhanceDecoder(u8[1], (value) => ({\n version: value & ~(1 << 7),\n signed: !!(value & (1 << 7)),\n}))\n\nexport const extrinsicDec = Tuple.dec(\n compact[1],\n versionDecoder,\n Bytes(Infinity)[1],\n)\n\nexport const proof = Struct({\n leaves: lookup,\n leafIdxs: Vector(u32),\n proofs: Vector(hash),\n extrinsic: extrinsicMetadata,\n info: extraInfo,\n})\nexport type Proof = CodecType<typeof proof>\n","import { V15 } from \"@polkadot-api/substrate-bindings\"\nimport { LookupValue } from \"./codecs\"\n\nexport const getAccessibleTypes = (\n metadata: V15,\n definitions: Map<number, LookupValue>,\n): Map<number, number> => {\n const types = new Set<number>()\n\n const collectTypesFromId = (id: number) => {\n if (types.has(id)) return\n\n const { tag, value } = definitions.get(id)!.def\n switch (tag) {\n case \"composite\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n break\n case \"variant\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ fields }) => {\n fields.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n })\n break\n case \"tuple\":\n if (!value.length) break\n types.add(id)\n value.forEach(collectTypesFromId)\n break\n case \"sequence\":\n types.add(id)\n collectTypesFromId(value)\n break\n case \"array\":\n types.add(id)\n collectTypesFromId(value.type)\n break\n case \"bitSequence\": // bitSequence inner types are not stored\n types.add(id)\n // primitive and compact are not stored\n }\n }\n\n collectTypesFromId(metadata.extrinsic.call)\n collectTypesFromId(metadata.extrinsic.address)\n collectTypesFromId(metadata.extrinsic.signature)\n metadata.extrinsic.signedExtensions.forEach(({ type, additionalSigned }) => {\n collectTypesFromId(type)\n collectTypesFromId(additionalSigned)\n })\n\n const sortedTypes = [...types].sort((a, b) => a - b)\n return new Map(sortedTypes.map((value, idx) => [value, idx]))\n}\n","import { Lookup, LookupValue, ScalePrimitive, TypeDef, TypeRef } from \"./codecs\"\n\nconst bitSequenceBytes = {\n u8: 1,\n u16: 2,\n u32: 4,\n u64: 8,\n}\n\nconst constructTypeDef = (\n definitions: Map<number, LookupValue>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n frameId: number,\n): TypeDef[] => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n switch (tag) {\n case \"composite\":\n return [\n {\n tag,\n value: value.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n ]\n case \"variant\": {\n return value.map((v) => ({\n tag: \"enumeration\",\n value: {\n name: v.name,\n index: v.index,\n fields: v.fields.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n }))\n }\n case \"sequence\":\n return [\n {\n tag,\n value: getTypeRef(value),\n },\n ]\n case \"array\":\n return [\n {\n tag,\n value: {\n len: value.len,\n typeParam: getTypeRef(value.type),\n },\n },\n ]\n case \"tuple\":\n return [\n {\n tag,\n value: value.map(getTypeRef),\n },\n ]\n case \"bitSequence\": {\n const primitive = getPrimitive(value.bitStoreType)\n const numBytes = bitSequenceBytes[primitive as \"u8\"]\n if (!numBytes) throw new Error(\"Invalid primitive for BitSequence\")\n\n const storeOrderPath = definitions.get(value.bitOrderType)!.path\n const leastSignificantBitFirst = storeOrderPath.includes(\"Lsb0\")\n if (!leastSignificantBitFirst && !storeOrderPath.includes(\"Msb0\"))\n throw new Error(\"BitOrderType not recognized\")\n\n return [\n {\n tag: \"bitSequence\",\n value: { numBytes, leastSignificantBitFirst },\n },\n ]\n }\n }\n\n throw new Error(`FrameId(${frameId}) should have been filtered out`)\n}\n\nexport const getLookup = (\n definitions: Map<number, LookupValue>,\n accessibleTypes: Map<number, number>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n) => {\n const typeTree: Lookup = []\n ;[...accessibleTypes.entries()].forEach(([frameId, typeId]) => {\n const { path } = definitions.get(frameId)!\n constructTypeDef(definitions, getTypeRef, getPrimitive, frameId).forEach(\n (typeDef) => {\n typeTree.push({\n path,\n typeId,\n typeDef,\n })\n },\n )\n })\n\n typeTree.sort((a, b) => {\n if (a.typeId !== b.typeId) return a.typeId - b.typeId // in general\n // should only happen for variants\n if (a.typeDef.tag !== \"enumeration\" || b.typeDef.tag !== \"enumeration\")\n throw new Error(\"Found two types with same id\")\n return a.typeDef.value.index - b.typeDef.value.index\n })\n return typeTree\n}\n","import {\n Option,\n Bytes,\n metadata,\n compact,\n Tuple,\n V15,\n} from \"@polkadot-api/substrate-bindings\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\n\nconst opaqueBytes = Bytes()\nconst optionOpaque = Option(opaqueBytes)\nconst opaqueOpaqueBytes = Tuple(compact, opaqueBytes)\n\nconst getAnyMetadata = (input: Uint8Array | HexString) => {\n try {\n return metadata.dec(input)\n } catch (_) {}\n\n // comes from metadata.metadata_at_version\n try {\n return metadata.dec(optionOpaque.dec(input)!)\n } catch (_) {}\n\n // comes from state.getMetadata\n try {\n return metadata.dec(opaqueBytes.dec(input))\n } catch (_) {}\n\n // comes from metadata.metadata\n try {\n return metadata.dec(opaqueOpaqueBytes.dec(input)[1])\n } catch (_) {}\n\n throw null\n}\n\nexport const getMetadata = (input: Uint8Array | HexString): V15 => {\n try {\n const { metadata } = getAnyMetadata(input)\n if (metadata.tag !== \"v15\") throw new Error(\"Wrong metadata version\")\n return metadata.value\n } catch (e) {\n throw e || new Error(\"Unable to decode metadata\")\n }\n}\n","import { type HexString } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex } from \"@polkadot-api/utils\"\n\nexport const mergeUint8 = (inputs: Array<Uint8Array>): Uint8Array => {\n const len = inputs.length\n let totalLen = 0\n for (let i = 0; i < len; i++) totalLen += inputs[i].byteLength\n const result = new Uint8Array(totalLen)\n\n for (let idx = 0, at = 0; idx < len; idx++) {\n const current = inputs[idx]\n result.set(current, at)\n at += current.byteLength\n }\n\n return result\n}\n\nexport const toBytes = (input: Uint8Array | HexString) =>\n typeof input === \"string\" ? fromHex(input) : input\n\nexport const compactTypeRefs = {\n null: \"void\" as const,\n u8: \"compactU8\" as const,\n u16: \"compactU16\" as const,\n u32: \"compactU32\" as const,\n u64: \"compactU64\" as const,\n u128: \"compactU128\" as const,\n u256: \"compactU256\" as const,\n}\n","import {\n HexString,\n _void,\n compact,\n createDecoder,\n i128,\n i16,\n i256,\n i32,\n i64,\n i8,\n str,\n u128,\n u16,\n u256,\n u32,\n u64,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\nimport { Lookup, TypeDef, TypeRef } from \"./codecs\"\n\nconst typeRefDecoders = {\n bool: u8,\n char: u8,\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 void: _void,\n compactU8: compact,\n compactU16: compact,\n compactU32: compact,\n compactU64: compact,\n compactU128: compact,\n compactU256: compact,\n}\n\nconst innerDecodeAndCollect = (\n input: Uint8Array,\n typeRef: TypeRef,\n idToLookups: Map<number, Array<number>>,\n lookup: Lookup,\n collected: Set<number>,\n) => {\n if (typeRef.tag !== \"perId\") {\n typeRefDecoders[typeRef.tag][1](input)\n return\n }\n\n const handleTypeRef = (typeRef: TypeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, collected)\n }\n\n const lookupIdxs = idToLookups.get(typeRef.value)!\n const [currentIdx] = lookupIdxs\n const current = lookup[currentIdx]\n\n if (lookupIdxs.length === 1) collected.add(currentIdx)\n\n switch (current.typeDef.tag) {\n case \"enumeration\": {\n const selectedIdx = u8.dec(input)\n const [selected, collectedIdx] = lookupIdxs\n .map(\n (lookupIdx) =>\n [lookup[lookupIdx].typeDef, lookupIdx] as [\n TypeDef & { tag: \"enumeration\" },\n number,\n ],\n )\n .find(([x]) => x.value.index === selectedIdx)!\n collected.add(collectedIdx)\n selected.value.fields.forEach(({ ty }) => {\n handleTypeRef(ty)\n })\n break\n }\n case \"sequence\": {\n const len = compact.dec(input)\n for (let i = 0; i < len; i++) handleTypeRef(current.typeDef.value)\n break\n }\n case \"array\": {\n for (let i = 0; i < current.typeDef.value.len; i++)\n handleTypeRef(current.typeDef.value.typeParam)\n break\n }\n case \"composite\": {\n current.typeDef.value.forEach((x) => {\n handleTypeRef(x.ty)\n })\n break\n }\n case \"tuple\": {\n current.typeDef.value.forEach(handleTypeRef)\n break\n }\n case \"bitSequence\":\n throw new Error(\"bitSequence is not supported\")\n }\n}\n\nexport const decodeAndCollectKnownLeafs = (\n data: Uint8Array | HexString,\n typeRefs: Array<TypeRef>,\n lookup: Lookup,\n): Array<number> => {\n let input = new Uint8Array()\n createDecoder((_input) => {\n input = _input\n })(data)\n\n const idToLookups = new Map<number, number[]>()\n lookup.forEach((lookup, idx) => {\n const arr = idToLookups.get(lookup.typeId)\n if (arr) arr.push(idx)\n else idToLookups.set(lookup.typeId, [idx])\n })\n\n const result = new Set<number>()\n typeRefs.forEach((typeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, result)\n })\n\n return [...result].sort((a, b) => a - b)\n}\n","const getLevelFromIdx = (idx: number) => Math.log2(idx + 1) | 0\nconst getAncestorIdx = (from: number, nLevels: number) =>\n ((from + 1) >> nLevels) - 1\n\nexport function getProofData(\n leaves: Array<Uint8Array>,\n knownLeavesIdxs: Array<number>,\n) {\n const knownLeaves = knownLeavesIdxs.map((idx) => leaves[idx])\n\n const startingIdx = leaves.length - 1\n const leafIdxs = knownLeavesIdxs.map((idx) => startingIdx + idx)\n\n const proofIdxs: Array<number> = []\n if (leafIdxs.length) {\n const nLevels = getLevelFromIdx(leafIdxs.at(-1)!)\n const splitPosition = Math.pow(2, nLevels) - 1\n const splitIdx = leafIdxs.findIndex((x) => x >= splitPosition)\n if (splitIdx > 0) {\n leafIdxs.unshift(...leafIdxs.splice(splitIdx))\n knownLeaves.unshift(...knownLeaves.splice(splitIdx))\n }\n }\n\n let targetIdx = 0\n const traverse = (nodeIdx: number): void => {\n if (targetIdx === leafIdxs.length) {\n proofIdxs.push(nodeIdx)\n return\n }\n\n const target = leafIdxs[targetIdx]\n if (target === nodeIdx) {\n ++targetIdx\n return\n }\n\n const currentLevel = getLevelFromIdx(nodeIdx)\n const targetLevel = getLevelFromIdx(target)\n\n if (nodeIdx !== getAncestorIdx(target, targetLevel - currentLevel)) {\n proofIdxs.push(nodeIdx)\n return\n }\n\n const leftSon = 2 * nodeIdx + 1\n traverse(leftSon)\n traverse(leftSon + 1)\n }\n traverse(0)\n\n return {\n leaves: knownLeaves,\n leafIdxs,\n proofIdxs,\n }\n}\n"],"mappings":"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","names":["import_substrate_bindings","metadata","typeDef","import_substrate_bindings","metadata","import_substrate_bindings","typeRef","lookup","metadata","lookup","digest","hashTree"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/main.ts","../src/codecs.ts","../src/get-accessible-types.ts","../src/get-lookup.ts","../src/get-metadata.ts","../src/utils.ts","../src/decode-and-collect.ts","../src/proof.ts"],"sourcesContent":["export * from \"./main\"\nexport {\n proof,\n Proof,\n lookup,\n Lookup,\n lookupType,\n LookupEntry,\n hash,\n extrinsicMetadata,\n ExtrinsicMetadata,\n TypeRef,\n extraInfo,\n ExtraInfo,\n} from \"./codecs\"\n","import {\n Blake3256,\n HexString,\n compact,\n u32,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n ExtraInfo,\n ExtrinsicMetadata,\n LookupValue,\n MetadataDigest,\n ScalePrimitive,\n TypeRef,\n extraInfo,\n extrinsicMetadata,\n lookupType,\n metadataDigest,\n extrinsicDec,\n} from \"./codecs\"\nimport { getAccessibleTypes } from \"./get-accessible-types\"\nimport { getLookup } from \"./get-lookup\"\nimport { getMetadata } from \"./get-metadata\"\nimport { compactTypeRefs, mergeUint8, toBytes } from \"./utils\"\nimport { decodeAndCollectKnownLeafs } from \"./decode-and-collect\"\nimport { getProofData } from \"./proof\"\n\nexport interface MetadataMerkleizer {\n /**\n * @returns Digest value of the metadata (aka its merkleized root-hash)\n */\n digest: () => Uint8Array\n\n /**\n * Get proof for an `Extrinsic`.\n *\n * @param transaction Encoded `Extrinsic`, both signed or unsigned.\n * @param txAdditionalSigned Optionally collect types for given\n * `additionalSigned` part of signedExtensions.\n * @returns Encoded `Proof`\n */\n getProofForExtrinsic: (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => Uint8Array\n\n /**\n * Get proof for `ExtrinsicPayload` parts.\n *\n * @param callData Call data of the transaction. It has to be\n * bare; i.e.\n * without prepended compact length.\n * @param includedInExtrinsic Extra part of the signed extensions, all of\n * them concatenated.\n * @param includedInSignedData Additional signed part of the signed\n * extensions, all of them concatenated.\n * @returns Encoded `Proof`\n */\n getProofForExtrinsicParts: (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => Uint8Array\n\n /**\n * Get proof for `ExtrinsicPayload`.\n *\n * @param extrinsicPayload Call data, extra part of signedExtensions and\n * additional signed part of signedExtensions\n * concatenated. It has to be bare; i.e. without\n * prepended compact length.\n * @returns Encoded `Proof`\n */\n getProofForExtrinsicPayload: (\n extrinsicPayload: Uint8Array | HexString,\n ) => Uint8Array\n}\n\nexport const merkleizeMetadata = (\n metadataBytes: Uint8Array | HexString,\n info: ExtraInfo,\n): MetadataMerkleizer => {\n const metadata = getMetadata(metadataBytes)\n\n const definitions = new Map<number, LookupValue>(\n metadata.lookup.map((value) => [value.id, value]),\n )\n const accessibleTypes = getAccessibleTypes(metadata, definitions)\n const getPrimitive = (frameId: number): ScalePrimitive[\"tag\"] | null => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n\n if (tag === \"primitive\") return value.tag\n\n if ((tag !== \"composite\" && tag !== \"tuple\") || value.length > 1)\n throw new Error(\"The provided definition doesn't map to a primitive\")\n\n return value.length === 0\n ? null // signals `void`\n : getPrimitive(tag === \"tuple\" ? value[0] : value[0].type)\n }\n\n const getTypeRef = (frameId: number): TypeRef => {\n const { def } = definitions.get(frameId)!\n\n if (def.tag === \"primitive\") return { tag: def.value.tag, value: undefined }\n\n if (def.tag === \"compact\") {\n const primitive = getPrimitive(def.value)\n const tag = compactTypeRefs[primitive as \"u8\"]\n if (!tag) throw new Error(\"Invalid primitive for Compact\")\n return { tag, value: undefined }\n }\n\n return accessibleTypes.has(frameId)\n ? { tag: \"perId\", value: accessibleTypes.get(frameId)! }\n : { tag: \"void\", value: undefined }\n }\n\n const extrinsic: ExtrinsicMetadata = {\n version: metadata.extrinsic.version,\n addressTy: getTypeRef(metadata.extrinsic.address),\n callTy: getTypeRef(metadata.extrinsic.call),\n signatureTy: getTypeRef(metadata.extrinsic.signature),\n signedExtensions: metadata.extrinsic.signedExtensions.map((se) => ({\n identifier: se.identifier,\n includedInExtrinsic: getTypeRef(se.type),\n includedInSignedData: getTypeRef(se.additionalSigned),\n })),\n }\n\n const lookup = getLookup(\n definitions,\n accessibleTypes,\n getTypeRef,\n getPrimitive,\n )\n const lookupEncoded = lookup.map(lookupType.enc)\n\n let hashTree: Array<Uint8Array> | undefined\n const getHashTree = (): Array<Uint8Array> => {\n if (hashTree) return hashTree\n\n if (!lookupEncoded.length) return (hashTree = [new Uint8Array(32).fill(0)])\n\n hashTree = new Array(lookupEncoded.length * 2 - 1)\n\n let leavesStartIdx = lookupEncoded.length - 1\n for (let i = 0; i < lookupEncoded.length; i++)\n hashTree[leavesStartIdx + i] = Blake3256(lookupEncoded[i])\n\n for (let i = hashTree.length - 2; i > 0; i -= 2)\n hashTree[(i - 1) / 2] = Blake3256(\n mergeUint8([hashTree[i], hashTree[i + 1]]),\n )\n\n return hashTree\n }\n\n let digested: undefined | Uint8Array\n const digest = () => {\n if (digested) return digested\n const rootLookupHash = getHashTree()[0]\n\n const digest: MetadataDigest = {\n tag: \"V1\",\n value: {\n typeInformationTreeRoot: rootLookupHash,\n extrinsicMetadataHash: Blake3256(extrinsicMetadata.enc(extrinsic)),\n ...info,\n },\n }\n\n return (digested = Blake3256(metadataDigest.enc(digest)))\n }\n\n const generateProof = (knownIndexes: number[]) => {\n const proofData = getProofData(lookupEncoded, knownIndexes)\n\n const hashTree = getHashTree()\n const proofs = proofData.proofIdxs.map((idx) => hashTree[idx])\n\n return mergeUint8([\n compact.enc(proofData.leaves.length),\n ...proofData.leaves,\n compact.enc(proofData.leafIdxs.length),\n ...proofData.leafIdxs.map((x) => u32.enc(x)),\n compact.enc(proofs.length),\n ...proofs,\n extrinsicMetadata.enc(extrinsic),\n extraInfo.enc(info),\n ])\n }\n\n const getProofForExtrinsicPayload = (\n extrinsicPayload: Uint8Array | HexString,\n ) => {\n const typeRefs: Array<TypeRef> = [\n extrinsic.callTy,\n ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),\n ...extrinsic.signedExtensions.map((x) => x.includedInSignedData),\n ]\n return generateProof(\n decodeAndCollectKnownLeafs(extrinsicPayload, typeRefs, lookup),\n )\n }\n\n const getProofForExtrinsicParts = (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => {\n const bytes = mergeUint8(\n [callData, includedInExtrinsic, includedInSignedData].map(toBytes),\n )\n return getProofForExtrinsicPayload(bytes)\n }\n\n const getProofForExtrinsic = (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => {\n let [, { version, signed }, bytes] = extrinsicDec(transaction)\n\n if (version !== extrinsic.version)\n throw new Error(\"Incorrect extrinsic version\")\n\n const typeRefs: TypeRef[] = signed\n ? [\n extrinsic.addressTy,\n extrinsic.signatureTy,\n ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),\n extrinsic.callTy,\n ]\n : [extrinsic.callTy]\n\n if (txAdditionalSigned) {\n bytes = mergeUint8([bytes, toBytes(txAdditionalSigned)])\n typeRefs.push(\n ...extrinsic.signedExtensions.map((x) => x.includedInSignedData),\n )\n }\n\n return generateProof(decodeAndCollectKnownLeafs(bytes, typeRefs, lookup))\n }\n\n return {\n digest,\n getProofForExtrinsic,\n getProofForExtrinsicParts,\n getProofForExtrinsicPayload,\n }\n}\n","import {\n Bytes,\n Codec,\n CodecType,\n Option,\n ScaleEnum,\n Struct,\n Tuple,\n V15,\n Vector,\n _void,\n bool,\n compact,\n compactNumber,\n enhanceDecoder,\n str,\n u16,\n u32,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\n\nconst extraInfoInner = {\n specVersion: u32,\n specName: str,\n base58Prefix: u16,\n decimals: u8,\n tokenSymbol: str,\n}\nexport const extraInfo = Struct(extraInfoInner)\nexport type ExtraInfo = CodecType<typeof extraInfo>\n\nexport const hash = Bytes(32)\nexport const metadataDigest = ScaleEnum({\n V0: _void,\n V1: Struct({\n typeInformationTreeRoot: hash,\n extrinsicMetadataHash: hash,\n ...extraInfoInner,\n }),\n})\nexport type MetadataDigest = CodecType<typeof metadataDigest>\n\nexport const scalePrimitive = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n})\nexport type ScalePrimitive = CodecType<typeof scalePrimitive>\n\nexport const typeRef = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n compactU8: _void,\n compactU16: _void,\n compactU32: _void,\n compactU64: _void,\n compactU128: _void,\n compactU256: _void,\n void: _void,\n perId: compactNumber,\n})\nexport type TypeRef = CodecType<typeof typeRef>\n\nconst field = Struct({\n name: Option(str),\n ty: typeRef,\n typeName: Option(str),\n})\nexport const typeDef = ScaleEnum({\n composite: Vector(field),\n enumeration: Struct({\n name: str,\n fields: Vector(field),\n index: compactNumber,\n }),\n sequence: typeRef,\n array: Struct({\n len: u32,\n typeParam: typeRef,\n }),\n tuple: Vector(typeRef),\n bitSequence: Struct({\n numBytes: u8,\n leastSignificantBitFirst: bool,\n }),\n})\nexport type TypeDef = CodecType<typeof typeDef>\n\nexport const lookupType = Struct({\n path: Vector(str),\n typeDef: typeDef,\n typeId: compactNumber,\n})\nexport type LookupEntry = CodecType<typeof lookupType>\nexport type Lookup = Array<LookupEntry>\nexport const lookup: Codec<Lookup> = Vector(lookupType)\n\nexport const extrinsicMetadata = Struct({\n version: u8,\n addressTy: typeRef,\n callTy: typeRef,\n signatureTy: typeRef,\n signedExtensions: Vector(\n Struct({\n identifier: str,\n includedInExtrinsic: typeRef,\n includedInSignedData: typeRef,\n }),\n ),\n})\nexport type ExtrinsicMetadata = CodecType<typeof extrinsicMetadata>\nexport type LookupValue = V15[\"lookup\"] extends Array<infer T> ? T : never\n\nconst versionDecoder = enhanceDecoder(u8[1], (value) => ({\n version: value & ~(1 << 7),\n signed: !!(value & (1 << 7)),\n}))\n\nexport const extrinsicDec = Tuple.dec(\n compact[1],\n versionDecoder,\n Bytes(Infinity)[1],\n)\n\nexport const proof = Struct({\n leaves: lookup,\n leafIdxs: Vector(u32),\n proofs: Vector(hash),\n extrinsic: extrinsicMetadata,\n info: extraInfo,\n})\nexport type Proof = CodecType<typeof proof>\n","import { V15 } from \"@polkadot-api/substrate-bindings\"\nimport { LookupValue } from \"./codecs\"\n\nexport const getAccessibleTypes = (\n metadata: V15,\n definitions: Map<number, LookupValue>,\n): Map<number, number> => {\n const types = new Set<number>()\n\n const collectTypesFromId = (id: number) => {\n if (types.has(id)) return\n\n const { tag, value } = definitions.get(id)!.def\n switch (tag) {\n case \"composite\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n break\n case \"variant\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ fields }) => {\n fields.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n })\n break\n case \"tuple\":\n if (!value.length) break\n types.add(id)\n value.forEach(collectTypesFromId)\n break\n case \"sequence\":\n types.add(id)\n collectTypesFromId(value)\n break\n case \"array\":\n types.add(id)\n collectTypesFromId(value.type)\n break\n case \"bitSequence\": // bitSequence inner types are not stored\n types.add(id)\n // primitive and compact are not stored\n }\n }\n\n collectTypesFromId(metadata.extrinsic.call)\n collectTypesFromId(metadata.extrinsic.address)\n collectTypesFromId(metadata.extrinsic.signature)\n metadata.extrinsic.signedExtensions.forEach(({ type, additionalSigned }) => {\n collectTypesFromId(type)\n collectTypesFromId(additionalSigned)\n })\n\n const sortedTypes = [...types].sort((a, b) => a - b)\n return new Map(sortedTypes.map((value, idx) => [value, idx]))\n}\n","import { Lookup, LookupValue, ScalePrimitive, TypeDef, TypeRef } from \"./codecs\"\n\nconst bitSequenceBytes = {\n u8: 1,\n u16: 2,\n u32: 4,\n u64: 8,\n}\n\nconst constructTypeDef = (\n definitions: Map<number, LookupValue>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n frameId: number,\n): TypeDef[] => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n switch (tag) {\n case \"composite\":\n return [\n {\n tag,\n value: value.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n ]\n case \"variant\": {\n return value.map((v) => ({\n tag: \"enumeration\",\n value: {\n name: v.name,\n index: v.index,\n fields: v.fields.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n }))\n }\n case \"sequence\":\n return [\n {\n tag,\n value: getTypeRef(value),\n },\n ]\n case \"array\":\n return [\n {\n tag,\n value: {\n len: value.len,\n typeParam: getTypeRef(value.type),\n },\n },\n ]\n case \"tuple\":\n return [\n {\n tag,\n value: value.map(getTypeRef),\n },\n ]\n case \"bitSequence\": {\n const primitive = getPrimitive(value.bitStoreType)\n const numBytes = bitSequenceBytes[primitive as \"u8\"]\n if (!numBytes) throw new Error(\"Invalid primitive for BitSequence\")\n\n const storeOrderPath = definitions.get(value.bitOrderType)!.path\n const leastSignificantBitFirst = storeOrderPath.includes(\"Lsb0\")\n if (!leastSignificantBitFirst && !storeOrderPath.includes(\"Msb0\"))\n throw new Error(\"BitOrderType not recognized\")\n\n return [\n {\n tag: \"bitSequence\",\n value: { numBytes, leastSignificantBitFirst },\n },\n ]\n }\n }\n\n throw new Error(`FrameId(${frameId}) should have been filtered out`)\n}\n\nexport const getLookup = (\n definitions: Map<number, LookupValue>,\n accessibleTypes: Map<number, number>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n) => {\n const typeTree: Lookup = []\n ;[...accessibleTypes.entries()].forEach(([frameId, typeId]) => {\n const { path } = definitions.get(frameId)!\n constructTypeDef(definitions, getTypeRef, getPrimitive, frameId).forEach(\n (typeDef) => {\n typeTree.push({\n path,\n typeId,\n typeDef,\n })\n },\n )\n })\n\n typeTree.sort((a, b) => {\n if (a.typeId !== b.typeId) return a.typeId - b.typeId // in general\n // should only happen for variants\n if (a.typeDef.tag !== \"enumeration\" || b.typeDef.tag !== \"enumeration\")\n throw new Error(\"Found two types with same id\")\n return a.typeDef.value.index - b.typeDef.value.index\n })\n return typeTree\n}\n","import {\n Option,\n Bytes,\n metadata,\n compact,\n Tuple,\n V15,\n} from \"@polkadot-api/substrate-bindings\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\n\nconst opaqueBytes = Bytes()\nconst optionOpaque = Option(opaqueBytes)\nconst opaqueOpaqueBytes = Tuple(compact, opaqueBytes)\n\nconst getAnyMetadata = (input: Uint8Array | HexString) => {\n try {\n return metadata.dec(input)\n } catch (_) {}\n\n // comes from metadata.metadata_at_version\n try {\n return metadata.dec(optionOpaque.dec(input)!)\n } catch (_) {}\n\n // comes from state.getMetadata\n try {\n return metadata.dec(opaqueBytes.dec(input))\n } catch (_) {}\n\n // comes from metadata.metadata\n try {\n return metadata.dec(opaqueOpaqueBytes.dec(input)[1])\n } catch (_) {}\n\n throw null\n}\n\nexport const getMetadata = (input: Uint8Array | HexString): V15 => {\n try {\n const { metadata } = getAnyMetadata(input)\n if (metadata.tag !== \"v15\") throw new Error(\"Wrong metadata version\")\n return metadata.value\n } catch (e) {\n throw e || new Error(\"Unable to decode metadata\")\n }\n}\n","import { type HexString } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex } from \"@polkadot-api/utils\"\n\nexport const mergeUint8 = (inputs: Array<Uint8Array>): Uint8Array => {\n const len = inputs.length\n let totalLen = 0\n for (let i = 0; i < len; i++) totalLen += inputs[i].byteLength\n const result = new Uint8Array(totalLen)\n\n for (let idx = 0, at = 0; idx < len; idx++) {\n const current = inputs[idx]\n result.set(current, at)\n at += current.byteLength\n }\n\n return result\n}\n\nexport const toBytes = (input: Uint8Array | HexString) =>\n typeof input === \"string\" ? fromHex(input) : input\n\nexport const compactTypeRefs = {\n null: \"void\" as const,\n u8: \"compactU8\" as const,\n u16: \"compactU16\" as const,\n u32: \"compactU32\" as const,\n u64: \"compactU64\" as const,\n u128: \"compactU128\" as const,\n u256: \"compactU256\" as const,\n}\n","import {\n HexString,\n _void,\n compact,\n createDecoder,\n i128,\n i16,\n i256,\n i32,\n i64,\n i8,\n str,\n u128,\n u16,\n u256,\n u32,\n u64,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\nimport { Lookup, TypeDef, TypeRef } from \"./codecs\"\n\nconst typeRefDecoders = {\n bool: u8,\n char: u8,\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 void: _void,\n compactU8: compact,\n compactU16: compact,\n compactU32: compact,\n compactU64: compact,\n compactU128: compact,\n compactU256: compact,\n}\n\nconst innerDecodeAndCollect = (\n input: Uint8Array,\n typeRef: TypeRef,\n idToLookups: Map<number, Array<number>>,\n lookup: Lookup,\n collected: Set<number>,\n) => {\n if (typeRef.tag !== \"perId\") {\n typeRefDecoders[typeRef.tag][1](input)\n return\n }\n\n const handleTypeRef = (typeRef: TypeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, collected)\n }\n\n const lookupIdxs = idToLookups.get(typeRef.value)!\n const [currentIdx] = lookupIdxs\n const current = lookup[currentIdx]\n\n if (lookupIdxs.length === 1) collected.add(currentIdx)\n\n switch (current.typeDef.tag) {\n case \"enumeration\": {\n const selectedIdx = u8.dec(input)\n const [selected, collectedIdx] = lookupIdxs\n .map(\n (lookupIdx) =>\n [lookup[lookupIdx].typeDef, lookupIdx] as [\n TypeDef & { tag: \"enumeration\" },\n number,\n ],\n )\n .find(([x]) => x.value.index === selectedIdx)!\n collected.add(collectedIdx)\n selected.value.fields.forEach(({ ty }) => {\n handleTypeRef(ty)\n })\n break\n }\n case \"sequence\": {\n const len = compact.dec(input)\n for (let i = 0; i < len; i++) handleTypeRef(current.typeDef.value)\n break\n }\n case \"array\": {\n for (let i = 0; i < current.typeDef.value.len; i++)\n handleTypeRef(current.typeDef.value.typeParam)\n break\n }\n case \"composite\": {\n current.typeDef.value.forEach((x) => {\n handleTypeRef(x.ty)\n })\n break\n }\n case \"tuple\": {\n current.typeDef.value.forEach(handleTypeRef)\n break\n }\n case \"bitSequence\":\n throw new Error(\"bitSequence is not supported\")\n }\n}\n\nexport const decodeAndCollectKnownLeafs = (\n data: Uint8Array | HexString,\n typeRefs: Array<TypeRef>,\n lookup: Lookup,\n): Array<number> => {\n let input = new Uint8Array()\n createDecoder((_input) => {\n input = _input\n })(data)\n\n const idToLookups = new Map<number, number[]>()\n lookup.forEach((lookup, idx) => {\n const arr = idToLookups.get(lookup.typeId)\n if (arr) arr.push(idx)\n else idToLookups.set(lookup.typeId, [idx])\n })\n\n const result = new Set<number>()\n typeRefs.forEach((typeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, result)\n })\n\n return [...result].sort((a, b) => a - b)\n}\n","const getLevelFromIdx = (idx: number) => Math.log2(idx + 1) | 0\nconst getAncestorIdx = (from: number, nLevels: number) =>\n ((from + 1) >> nLevels) - 1\n\nexport function getProofData(\n leaves: Array<Uint8Array>,\n knownLeavesIdxs: Array<number>,\n) {\n const knownLeaves = knownLeavesIdxs.map((idx) => leaves[idx])\n\n const startingIdx = leaves.length - 1\n const leafIdxs = knownLeavesIdxs.map((idx) => startingIdx + idx)\n\n const proofIdxs: Array<number> = []\n if (leafIdxs.length) {\n const nLevels = getLevelFromIdx(leafIdxs.at(-1)!)\n const splitPosition = Math.pow(2, nLevels) - 1\n const splitIdx = leafIdxs.findIndex((x) => x >= splitPosition)\n if (splitIdx > 0) {\n leafIdxs.unshift(...leafIdxs.splice(splitIdx))\n knownLeaves.unshift(...knownLeaves.splice(splitIdx))\n }\n }\n\n let targetIdx = 0\n const traverse = (nodeIdx: number): void => {\n if (targetIdx === leafIdxs.length) {\n proofIdxs.push(nodeIdx)\n return\n }\n\n const target = leafIdxs[targetIdx]\n if (target === nodeIdx) {\n ++targetIdx\n return\n }\n\n const currentLevel = getLevelFromIdx(nodeIdx)\n const targetLevel = getLevelFromIdx(target)\n\n if (nodeIdx !== getAncestorIdx(target, targetLevel - currentLevel)) {\n proofIdxs.push(nodeIdx)\n return\n }\n\n const leftSon = 2 * nodeIdx + 1\n traverse(leftSon)\n traverse(leftSon + 1)\n }\n traverse(0)\n\n return {\n leaves: knownLeaves,\n leafIdxs,\n proofIdxs,\n }\n}\n"],"mappings":"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","names":["import_substrate_bindings","metadata","typeDef","import_substrate_bindings","metadata","import_substrate_bindings","typeRef","lookup","metadata","lookup","digest","hashTree"]}
package/dist/index.mjs CHANGED
@@ -602,16 +602,21 @@ var merkleizeMetadata = (metadataBytes, info) => {
602
602
  extraInfo.enc(info)
603
603
  ]);
604
604
  };
605
- const getProofForExtrinsicParts = (callData, includedInExtrinsic, includedInSignedData) => {
606
- const bytes = mergeUint8(
607
- [callData, includedInExtrinsic, includedInSignedData].map(toBytes)
608
- );
605
+ const getProofForExtrinsicPayload = (extrinsicPayload) => {
609
606
  const typeRefs = [
610
607
  extrinsic.callTy,
611
608
  ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),
612
609
  ...extrinsic.signedExtensions.map((x) => x.includedInSignedData)
613
610
  ];
614
- return generateProof(decodeAndCollectKnownLeafs(bytes, typeRefs, lookup2));
611
+ return generateProof(
612
+ decodeAndCollectKnownLeafs(extrinsicPayload, typeRefs, lookup2)
613
+ );
614
+ };
615
+ const getProofForExtrinsicParts = (callData, includedInExtrinsic, includedInSignedData) => {
616
+ const bytes = mergeUint8(
617
+ [callData, includedInExtrinsic, includedInSignedData].map(toBytes)
618
+ );
619
+ return getProofForExtrinsicPayload(bytes);
615
620
  };
616
621
  const getProofForExtrinsic = (transaction, txAdditionalSigned) => {
617
622
  let [, { version, signed }, bytes] = extrinsicDec(transaction);
@@ -634,7 +639,8 @@ var merkleizeMetadata = (metadataBytes, info) => {
634
639
  return {
635
640
  digest,
636
641
  getProofForExtrinsic,
637
- getProofForExtrinsicParts
642
+ getProofForExtrinsicParts,
643
+ getProofForExtrinsicPayload
638
644
  };
639
645
  };
640
646
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main.ts","../src/codecs.ts","../src/get-accessible-types.ts","../src/get-lookup.ts","../src/get-metadata.ts","../src/utils.ts","../src/decode-and-collect.ts","../src/proof.ts"],"sourcesContent":["import {\n Blake3256,\n HexString,\n compact,\n u32,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n ExtraInfo,\n ExtrinsicMetadata,\n LookupValue,\n MetadataDigest,\n ScalePrimitive,\n TypeRef,\n extraInfo,\n extrinsicMetadata,\n lookupType,\n metadataDigest,\n extrinsicDec,\n} from \"./codecs\"\nimport { getAccessibleTypes } from \"./get-accessible-types\"\nimport { getLookup } from \"./get-lookup\"\nimport { getMetadata } from \"./get-metadata\"\nimport { compactTypeRefs, mergeUint8, toBytes } from \"./utils\"\nimport { decodeAndCollectKnownLeafs } from \"./decode-and-collect\"\nimport { getProofData } from \"./proof\"\n\nexport interface MetadataMerkleizer {\n // it returns the digest value of the metadata (aka its merkleized root-hash)\n digest: () => Uint8Array\n\n // given an extrinsic, it returns an encoded `Proof`\n getProofForExtrinsic: (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => Uint8Array\n\n // given the extrinsic parts, it returns an encoded `Proof`\n getProofForExtrinsicParts: (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => Uint8Array\n}\n\nexport const merkleizeMetadata = (\n metadataBytes: Uint8Array | HexString,\n info: ExtraInfo,\n): MetadataMerkleizer => {\n const metadata = getMetadata(metadataBytes)\n\n const definitions = new Map<number, LookupValue>(\n metadata.lookup.map((value) => [value.id, value]),\n )\n const accessibleTypes = getAccessibleTypes(metadata, definitions)\n const getPrimitive = (frameId: number): ScalePrimitive[\"tag\"] | null => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n\n if (tag === \"primitive\") return value.tag\n\n if ((tag !== \"composite\" && tag !== \"tuple\") || value.length > 1)\n throw new Error(\"The provided definition doesn't map to a primitive\")\n\n return value.length === 0\n ? null // signals `void`\n : getPrimitive(tag === \"tuple\" ? value[0] : value[0].type)\n }\n\n const getTypeRef = (frameId: number): TypeRef => {\n const { def } = definitions.get(frameId)!\n\n if (def.tag === \"primitive\") return { tag: def.value.tag, value: undefined }\n\n if (def.tag === \"compact\") {\n const primitive = getPrimitive(def.value)\n const tag = compactTypeRefs[primitive as \"u8\"]\n if (!tag) throw new Error(\"Invalid primitive for Compact\")\n return { tag, value: undefined }\n }\n\n return accessibleTypes.has(frameId)\n ? { tag: \"perId\", value: accessibleTypes.get(frameId)! }\n : { tag: \"void\", value: undefined }\n }\n\n const extrinsic: ExtrinsicMetadata = {\n version: metadata.extrinsic.version,\n addressTy: getTypeRef(metadata.extrinsic.address),\n callTy: getTypeRef(metadata.extrinsic.call),\n signatureTy: getTypeRef(metadata.extrinsic.signature),\n signedExtensions: metadata.extrinsic.signedExtensions.map((se) => ({\n identifier: se.identifier,\n includedInExtrinsic: getTypeRef(se.type),\n includedInSignedData: getTypeRef(se.additionalSigned),\n })),\n }\n\n const lookup = getLookup(\n definitions,\n accessibleTypes,\n getTypeRef,\n getPrimitive,\n )\n const lookupEncoded = lookup.map(lookupType.enc)\n\n let hashTree: Array<Uint8Array> | undefined\n const getHashTree = (): Array<Uint8Array> => {\n if (hashTree) return hashTree\n\n if (!lookupEncoded.length) return (hashTree = [new Uint8Array(32).fill(0)])\n\n hashTree = new Array(lookupEncoded.length * 2 - 1)\n\n let leavesStartIdx = lookupEncoded.length - 1\n for (let i = 0; i < lookupEncoded.length; i++)\n hashTree[leavesStartIdx + i] = Blake3256(lookupEncoded[i])\n\n for (let i = hashTree.length - 2; i > 0; i -= 2)\n hashTree[(i - 1) / 2] = Blake3256(\n mergeUint8([hashTree[i], hashTree[i + 1]]),\n )\n\n return hashTree\n }\n\n let digested: undefined | Uint8Array\n const digest = () => {\n if (digested) return digested\n const rootLookupHash = getHashTree()[0]\n\n const digest: MetadataDigest = {\n tag: \"V1\",\n value: {\n typeInformationTreeRoot: rootLookupHash,\n extrinsicMetadataHash: Blake3256(extrinsicMetadata.enc(extrinsic)),\n ...info,\n },\n }\n\n return (digested = Blake3256(metadataDigest.enc(digest)))\n }\n\n const generateProof = (knownIndexes: number[]) => {\n const proofData = getProofData(lookupEncoded, knownIndexes)\n\n const hashTree = getHashTree()\n const proofs = proofData.proofIdxs.map((idx) => hashTree[idx])\n\n return mergeUint8([\n compact.enc(proofData.leaves.length),\n ...proofData.leaves,\n compact.enc(proofData.leafIdxs.length),\n ...proofData.leafIdxs.map((x) => u32.enc(x)),\n compact.enc(proofs.length),\n ...proofs,\n extrinsicMetadata.enc(extrinsic),\n extraInfo.enc(info),\n ])\n }\n\n const getProofForExtrinsicParts = (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => {\n const bytes = mergeUint8(\n [callData, includedInExtrinsic, includedInSignedData].map(toBytes),\n )\n const typeRefs: Array<TypeRef> = [\n extrinsic.callTy,\n ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),\n ...extrinsic.signedExtensions.map((x) => x.includedInSignedData),\n ]\n return generateProof(decodeAndCollectKnownLeafs(bytes, typeRefs, lookup))\n }\n\n const getProofForExtrinsic = (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => {\n let [, { version, signed }, bytes] = extrinsicDec(transaction)\n\n if (version !== extrinsic.version)\n throw new Error(\"Incorrect extrinsic version\")\n\n const typeRefs: TypeRef[] = signed\n ? [\n extrinsic.addressTy,\n extrinsic.signatureTy,\n ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),\n extrinsic.callTy,\n ]\n : [extrinsic.callTy]\n\n if (txAdditionalSigned) {\n bytes = mergeUint8([bytes, toBytes(txAdditionalSigned)])\n typeRefs.push(\n ...extrinsic.signedExtensions.map((x) => x.includedInSignedData),\n )\n }\n\n return generateProof(decodeAndCollectKnownLeafs(bytes, typeRefs, lookup))\n }\n\n return {\n digest,\n getProofForExtrinsic,\n getProofForExtrinsicParts,\n }\n}\n","import {\n Bytes,\n Codec,\n CodecType,\n Option,\n ScaleEnum,\n Struct,\n Tuple,\n V15,\n Vector,\n _void,\n bool,\n compact,\n compactNumber,\n enhanceDecoder,\n str,\n u16,\n u32,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\n\nconst extraInfoInner = {\n specVersion: u32,\n specName: str,\n base58Prefix: u16,\n decimals: u8,\n tokenSymbol: str,\n}\nexport const extraInfo = Struct(extraInfoInner)\nexport type ExtraInfo = CodecType<typeof extraInfo>\n\nexport const hash = Bytes(32)\nexport const metadataDigest = ScaleEnum({\n V0: _void,\n V1: Struct({\n typeInformationTreeRoot: hash,\n extrinsicMetadataHash: hash,\n ...extraInfoInner,\n }),\n})\nexport type MetadataDigest = CodecType<typeof metadataDigest>\n\nexport const scalePrimitive = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n})\nexport type ScalePrimitive = CodecType<typeof scalePrimitive>\n\nexport const typeRef = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n compactU8: _void,\n compactU16: _void,\n compactU32: _void,\n compactU64: _void,\n compactU128: _void,\n compactU256: _void,\n void: _void,\n perId: compactNumber,\n})\nexport type TypeRef = CodecType<typeof typeRef>\n\nconst field = Struct({\n name: Option(str),\n ty: typeRef,\n typeName: Option(str),\n})\nexport const typeDef = ScaleEnum({\n composite: Vector(field),\n enumeration: Struct({\n name: str,\n fields: Vector(field),\n index: compactNumber,\n }),\n sequence: typeRef,\n array: Struct({\n len: u32,\n typeParam: typeRef,\n }),\n tuple: Vector(typeRef),\n bitSequence: Struct({\n numBytes: u8,\n leastSignificantBitFirst: bool,\n }),\n})\nexport type TypeDef = CodecType<typeof typeDef>\n\nexport const lookupType = Struct({\n path: Vector(str),\n typeDef: typeDef,\n typeId: compactNumber,\n})\nexport type LookupEntry = CodecType<typeof lookupType>\nexport type Lookup = Array<LookupEntry>\nexport const lookup: Codec<Lookup> = Vector(lookupType)\n\nexport const extrinsicMetadata = Struct({\n version: u8,\n addressTy: typeRef,\n callTy: typeRef,\n signatureTy: typeRef,\n signedExtensions: Vector(\n Struct({\n identifier: str,\n includedInExtrinsic: typeRef,\n includedInSignedData: typeRef,\n }),\n ),\n})\nexport type ExtrinsicMetadata = CodecType<typeof extrinsicMetadata>\nexport type LookupValue = V15[\"lookup\"] extends Array<infer T> ? T : never\n\nconst versionDecoder = enhanceDecoder(u8[1], (value) => ({\n version: value & ~(1 << 7),\n signed: !!(value & (1 << 7)),\n}))\n\nexport const extrinsicDec = Tuple.dec(\n compact[1],\n versionDecoder,\n Bytes(Infinity)[1],\n)\n\nexport const proof = Struct({\n leaves: lookup,\n leafIdxs: Vector(u32),\n proofs: Vector(hash),\n extrinsic: extrinsicMetadata,\n info: extraInfo,\n})\nexport type Proof = CodecType<typeof proof>\n","import { V15 } from \"@polkadot-api/substrate-bindings\"\nimport { LookupValue } from \"./codecs\"\n\nexport const getAccessibleTypes = (\n metadata: V15,\n definitions: Map<number, LookupValue>,\n): Map<number, number> => {\n const types = new Set<number>()\n\n const collectTypesFromId = (id: number) => {\n if (types.has(id)) return\n\n const { tag, value } = definitions.get(id)!.def\n switch (tag) {\n case \"composite\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n break\n case \"variant\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ fields }) => {\n fields.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n })\n break\n case \"tuple\":\n if (!value.length) break\n types.add(id)\n value.forEach(collectTypesFromId)\n break\n case \"sequence\":\n types.add(id)\n collectTypesFromId(value)\n break\n case \"array\":\n types.add(id)\n collectTypesFromId(value.type)\n break\n case \"bitSequence\": // bitSequence inner types are not stored\n types.add(id)\n // primitive and compact are not stored\n }\n }\n\n collectTypesFromId(metadata.extrinsic.call)\n collectTypesFromId(metadata.extrinsic.address)\n collectTypesFromId(metadata.extrinsic.signature)\n metadata.extrinsic.signedExtensions.forEach(({ type, additionalSigned }) => {\n collectTypesFromId(type)\n collectTypesFromId(additionalSigned)\n })\n\n const sortedTypes = [...types].sort((a, b) => a - b)\n return new Map(sortedTypes.map((value, idx) => [value, idx]))\n}\n","import { Lookup, LookupValue, ScalePrimitive, TypeDef, TypeRef } from \"./codecs\"\n\nconst bitSequenceBytes = {\n u8: 1,\n u16: 2,\n u32: 4,\n u64: 8,\n}\n\nconst constructTypeDef = (\n definitions: Map<number, LookupValue>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n frameId: number,\n): TypeDef[] => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n switch (tag) {\n case \"composite\":\n return [\n {\n tag,\n value: value.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n ]\n case \"variant\": {\n return value.map((v) => ({\n tag: \"enumeration\",\n value: {\n name: v.name,\n index: v.index,\n fields: v.fields.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n }))\n }\n case \"sequence\":\n return [\n {\n tag,\n value: getTypeRef(value),\n },\n ]\n case \"array\":\n return [\n {\n tag,\n value: {\n len: value.len,\n typeParam: getTypeRef(value.type),\n },\n },\n ]\n case \"tuple\":\n return [\n {\n tag,\n value: value.map(getTypeRef),\n },\n ]\n case \"bitSequence\": {\n const primitive = getPrimitive(value.bitStoreType)\n const numBytes = bitSequenceBytes[primitive as \"u8\"]\n if (!numBytes) throw new Error(\"Invalid primitive for BitSequence\")\n\n const storeOrderPath = definitions.get(value.bitOrderType)!.path\n const leastSignificantBitFirst = storeOrderPath.includes(\"Lsb0\")\n if (!leastSignificantBitFirst && !storeOrderPath.includes(\"Msb0\"))\n throw new Error(\"BitOrderType not recognized\")\n\n return [\n {\n tag: \"bitSequence\",\n value: { numBytes, leastSignificantBitFirst },\n },\n ]\n }\n }\n\n throw new Error(`FrameId(${frameId}) should have been filtered out`)\n}\n\nexport const getLookup = (\n definitions: Map<number, LookupValue>,\n accessibleTypes: Map<number, number>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n) => {\n const typeTree: Lookup = []\n ;[...accessibleTypes.entries()].forEach(([frameId, typeId]) => {\n const { path } = definitions.get(frameId)!\n constructTypeDef(definitions, getTypeRef, getPrimitive, frameId).forEach(\n (typeDef) => {\n typeTree.push({\n path,\n typeId,\n typeDef,\n })\n },\n )\n })\n\n typeTree.sort((a, b) => {\n if (a.typeId !== b.typeId) return a.typeId - b.typeId // in general\n // should only happen for variants\n if (a.typeDef.tag !== \"enumeration\" || b.typeDef.tag !== \"enumeration\")\n throw new Error(\"Found two types with same id\")\n return a.typeDef.value.index - b.typeDef.value.index\n })\n return typeTree\n}\n","import {\n Option,\n Bytes,\n metadata,\n compact,\n Tuple,\n V15,\n} from \"@polkadot-api/substrate-bindings\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\n\nconst opaqueBytes = Bytes()\nconst optionOpaque = Option(opaqueBytes)\nconst opaqueOpaqueBytes = Tuple(compact, opaqueBytes)\n\nconst getAnyMetadata = (input: Uint8Array | HexString) => {\n try {\n return metadata.dec(input)\n } catch (_) {}\n\n // comes from metadata.metadata_at_version\n try {\n return metadata.dec(optionOpaque.dec(input)!)\n } catch (_) {}\n\n // comes from state.getMetadata\n try {\n return metadata.dec(opaqueBytes.dec(input))\n } catch (_) {}\n\n // comes from metadata.metadata\n try {\n return metadata.dec(opaqueOpaqueBytes.dec(input)[1])\n } catch (_) {}\n\n throw null\n}\n\nexport const getMetadata = (input: Uint8Array | HexString): V15 => {\n try {\n const { metadata } = getAnyMetadata(input)\n if (metadata.tag !== \"v15\") throw new Error(\"Wrong metadata version\")\n return metadata.value\n } catch (e) {\n throw e || new Error(\"Unable to decode metadata\")\n }\n}\n","import { type HexString } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex } from \"@polkadot-api/utils\"\n\nexport const mergeUint8 = (inputs: Array<Uint8Array>): Uint8Array => {\n const len = inputs.length\n let totalLen = 0\n for (let i = 0; i < len; i++) totalLen += inputs[i].byteLength\n const result = new Uint8Array(totalLen)\n\n for (let idx = 0, at = 0; idx < len; idx++) {\n const current = inputs[idx]\n result.set(current, at)\n at += current.byteLength\n }\n\n return result\n}\n\nexport const toBytes = (input: Uint8Array | HexString) =>\n typeof input === \"string\" ? fromHex(input) : input\n\nexport const compactTypeRefs = {\n null: \"void\" as const,\n u8: \"compactU8\" as const,\n u16: \"compactU16\" as const,\n u32: \"compactU32\" as const,\n u64: \"compactU64\" as const,\n u128: \"compactU128\" as const,\n u256: \"compactU256\" as const,\n}\n","import {\n HexString,\n _void,\n compact,\n createDecoder,\n i128,\n i16,\n i256,\n i32,\n i64,\n i8,\n str,\n u128,\n u16,\n u256,\n u32,\n u64,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\nimport { Lookup, TypeDef, TypeRef } from \"./codecs\"\n\nconst typeRefDecoders = {\n bool: u8,\n char: u8,\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 void: _void,\n compactU8: compact,\n compactU16: compact,\n compactU32: compact,\n compactU64: compact,\n compactU128: compact,\n compactU256: compact,\n}\n\nconst innerDecodeAndCollect = (\n input: Uint8Array,\n typeRef: TypeRef,\n idToLookups: Map<number, Array<number>>,\n lookup: Lookup,\n collected: Set<number>,\n) => {\n if (typeRef.tag !== \"perId\") {\n typeRefDecoders[typeRef.tag][1](input)\n return\n }\n\n const handleTypeRef = (typeRef: TypeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, collected)\n }\n\n const lookupIdxs = idToLookups.get(typeRef.value)!\n const [currentIdx] = lookupIdxs\n const current = lookup[currentIdx]\n\n if (lookupIdxs.length === 1) collected.add(currentIdx)\n\n switch (current.typeDef.tag) {\n case \"enumeration\": {\n const selectedIdx = u8.dec(input)\n const [selected, collectedIdx] = lookupIdxs\n .map(\n (lookupIdx) =>\n [lookup[lookupIdx].typeDef, lookupIdx] as [\n TypeDef & { tag: \"enumeration\" },\n number,\n ],\n )\n .find(([x]) => x.value.index === selectedIdx)!\n collected.add(collectedIdx)\n selected.value.fields.forEach(({ ty }) => {\n handleTypeRef(ty)\n })\n break\n }\n case \"sequence\": {\n const len = compact.dec(input)\n for (let i = 0; i < len; i++) handleTypeRef(current.typeDef.value)\n break\n }\n case \"array\": {\n for (let i = 0; i < current.typeDef.value.len; i++)\n handleTypeRef(current.typeDef.value.typeParam)\n break\n }\n case \"composite\": {\n current.typeDef.value.forEach((x) => {\n handleTypeRef(x.ty)\n })\n break\n }\n case \"tuple\": {\n current.typeDef.value.forEach(handleTypeRef)\n break\n }\n case \"bitSequence\":\n throw new Error(\"bitSequence is not supported\")\n }\n}\n\nexport const decodeAndCollectKnownLeafs = (\n data: Uint8Array | HexString,\n typeRefs: Array<TypeRef>,\n lookup: Lookup,\n): Array<number> => {\n let input = new Uint8Array()\n createDecoder((_input) => {\n input = _input\n })(data)\n\n const idToLookups = new Map<number, number[]>()\n lookup.forEach((lookup, idx) => {\n const arr = idToLookups.get(lookup.typeId)\n if (arr) arr.push(idx)\n else idToLookups.set(lookup.typeId, [idx])\n })\n\n const result = new Set<number>()\n typeRefs.forEach((typeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, result)\n })\n\n return [...result].sort((a, b) => a - b)\n}\n","const getLevelFromIdx = (idx: number) => Math.log2(idx + 1) | 0\nconst getAncestorIdx = (from: number, nLevels: number) =>\n ((from + 1) >> nLevels) - 1\n\nexport function getProofData(\n leaves: Array<Uint8Array>,\n knownLeavesIdxs: Array<number>,\n) {\n const knownLeaves = knownLeavesIdxs.map((idx) => leaves[idx])\n\n const startingIdx = leaves.length - 1\n const leafIdxs = knownLeavesIdxs.map((idx) => startingIdx + idx)\n\n const proofIdxs: Array<number> = []\n if (leafIdxs.length) {\n const nLevels = getLevelFromIdx(leafIdxs.at(-1)!)\n const splitPosition = Math.pow(2, nLevels) - 1\n const splitIdx = leafIdxs.findIndex((x) => x >= splitPosition)\n if (splitIdx > 0) {\n leafIdxs.unshift(...leafIdxs.splice(splitIdx))\n knownLeaves.unshift(...knownLeaves.splice(splitIdx))\n }\n }\n\n let targetIdx = 0\n const traverse = (nodeIdx: number): void => {\n if (targetIdx === leafIdxs.length) {\n proofIdxs.push(nodeIdx)\n return\n }\n\n const target = leafIdxs[targetIdx]\n if (target === nodeIdx) {\n ++targetIdx\n return\n }\n\n const currentLevel = getLevelFromIdx(nodeIdx)\n const targetLevel = getLevelFromIdx(target)\n\n if (nodeIdx !== getAncestorIdx(target, targetLevel - currentLevel)) {\n proofIdxs.push(nodeIdx)\n return\n }\n\n const leftSon = 2 * nodeIdx + 1\n traverse(leftSon)\n traverse(leftSon + 1)\n }\n traverse(0)\n\n return {\n leaves: knownLeaves,\n leafIdxs,\n proofIdxs,\n }\n}\n"],"mappings":"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","names":["compact","u32","metadata","typeDef","Option","Bytes","compact","Tuple","metadata","_void","compact","str","u16","u32","u8","typeRef","lookup","metadata","lookup","digest","hashTree","compact","u32"]}
1
+ {"version":3,"sources":["../src/main.ts","../src/codecs.ts","../src/get-accessible-types.ts","../src/get-lookup.ts","../src/get-metadata.ts","../src/utils.ts","../src/decode-and-collect.ts","../src/proof.ts"],"sourcesContent":["import {\n Blake3256,\n HexString,\n compact,\n u32,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n ExtraInfo,\n ExtrinsicMetadata,\n LookupValue,\n MetadataDigest,\n ScalePrimitive,\n TypeRef,\n extraInfo,\n extrinsicMetadata,\n lookupType,\n metadataDigest,\n extrinsicDec,\n} from \"./codecs\"\nimport { getAccessibleTypes } from \"./get-accessible-types\"\nimport { getLookup } from \"./get-lookup\"\nimport { getMetadata } from \"./get-metadata\"\nimport { compactTypeRefs, mergeUint8, toBytes } from \"./utils\"\nimport { decodeAndCollectKnownLeafs } from \"./decode-and-collect\"\nimport { getProofData } from \"./proof\"\n\nexport interface MetadataMerkleizer {\n /**\n * @returns Digest value of the metadata (aka its merkleized root-hash)\n */\n digest: () => Uint8Array\n\n /**\n * Get proof for an `Extrinsic`.\n *\n * @param transaction Encoded `Extrinsic`, both signed or unsigned.\n * @param txAdditionalSigned Optionally collect types for given\n * `additionalSigned` part of signedExtensions.\n * @returns Encoded `Proof`\n */\n getProofForExtrinsic: (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => Uint8Array\n\n /**\n * Get proof for `ExtrinsicPayload` parts.\n *\n * @param callData Call data of the transaction. It has to be\n * bare; i.e.\n * without prepended compact length.\n * @param includedInExtrinsic Extra part of the signed extensions, all of\n * them concatenated.\n * @param includedInSignedData Additional signed part of the signed\n * extensions, all of them concatenated.\n * @returns Encoded `Proof`\n */\n getProofForExtrinsicParts: (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => Uint8Array\n\n /**\n * Get proof for `ExtrinsicPayload`.\n *\n * @param extrinsicPayload Call data, extra part of signedExtensions and\n * additional signed part of signedExtensions\n * concatenated. It has to be bare; i.e. without\n * prepended compact length.\n * @returns Encoded `Proof`\n */\n getProofForExtrinsicPayload: (\n extrinsicPayload: Uint8Array | HexString,\n ) => Uint8Array\n}\n\nexport const merkleizeMetadata = (\n metadataBytes: Uint8Array | HexString,\n info: ExtraInfo,\n): MetadataMerkleizer => {\n const metadata = getMetadata(metadataBytes)\n\n const definitions = new Map<number, LookupValue>(\n metadata.lookup.map((value) => [value.id, value]),\n )\n const accessibleTypes = getAccessibleTypes(metadata, definitions)\n const getPrimitive = (frameId: number): ScalePrimitive[\"tag\"] | null => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n\n if (tag === \"primitive\") return value.tag\n\n if ((tag !== \"composite\" && tag !== \"tuple\") || value.length > 1)\n throw new Error(\"The provided definition doesn't map to a primitive\")\n\n return value.length === 0\n ? null // signals `void`\n : getPrimitive(tag === \"tuple\" ? value[0] : value[0].type)\n }\n\n const getTypeRef = (frameId: number): TypeRef => {\n const { def } = definitions.get(frameId)!\n\n if (def.tag === \"primitive\") return { tag: def.value.tag, value: undefined }\n\n if (def.tag === \"compact\") {\n const primitive = getPrimitive(def.value)\n const tag = compactTypeRefs[primitive as \"u8\"]\n if (!tag) throw new Error(\"Invalid primitive for Compact\")\n return { tag, value: undefined }\n }\n\n return accessibleTypes.has(frameId)\n ? { tag: \"perId\", value: accessibleTypes.get(frameId)! }\n : { tag: \"void\", value: undefined }\n }\n\n const extrinsic: ExtrinsicMetadata = {\n version: metadata.extrinsic.version,\n addressTy: getTypeRef(metadata.extrinsic.address),\n callTy: getTypeRef(metadata.extrinsic.call),\n signatureTy: getTypeRef(metadata.extrinsic.signature),\n signedExtensions: metadata.extrinsic.signedExtensions.map((se) => ({\n identifier: se.identifier,\n includedInExtrinsic: getTypeRef(se.type),\n includedInSignedData: getTypeRef(se.additionalSigned),\n })),\n }\n\n const lookup = getLookup(\n definitions,\n accessibleTypes,\n getTypeRef,\n getPrimitive,\n )\n const lookupEncoded = lookup.map(lookupType.enc)\n\n let hashTree: Array<Uint8Array> | undefined\n const getHashTree = (): Array<Uint8Array> => {\n if (hashTree) return hashTree\n\n if (!lookupEncoded.length) return (hashTree = [new Uint8Array(32).fill(0)])\n\n hashTree = new Array(lookupEncoded.length * 2 - 1)\n\n let leavesStartIdx = lookupEncoded.length - 1\n for (let i = 0; i < lookupEncoded.length; i++)\n hashTree[leavesStartIdx + i] = Blake3256(lookupEncoded[i])\n\n for (let i = hashTree.length - 2; i > 0; i -= 2)\n hashTree[(i - 1) / 2] = Blake3256(\n mergeUint8([hashTree[i], hashTree[i + 1]]),\n )\n\n return hashTree\n }\n\n let digested: undefined | Uint8Array\n const digest = () => {\n if (digested) return digested\n const rootLookupHash = getHashTree()[0]\n\n const digest: MetadataDigest = {\n tag: \"V1\",\n value: {\n typeInformationTreeRoot: rootLookupHash,\n extrinsicMetadataHash: Blake3256(extrinsicMetadata.enc(extrinsic)),\n ...info,\n },\n }\n\n return (digested = Blake3256(metadataDigest.enc(digest)))\n }\n\n const generateProof = (knownIndexes: number[]) => {\n const proofData = getProofData(lookupEncoded, knownIndexes)\n\n const hashTree = getHashTree()\n const proofs = proofData.proofIdxs.map((idx) => hashTree[idx])\n\n return mergeUint8([\n compact.enc(proofData.leaves.length),\n ...proofData.leaves,\n compact.enc(proofData.leafIdxs.length),\n ...proofData.leafIdxs.map((x) => u32.enc(x)),\n compact.enc(proofs.length),\n ...proofs,\n extrinsicMetadata.enc(extrinsic),\n extraInfo.enc(info),\n ])\n }\n\n const getProofForExtrinsicPayload = (\n extrinsicPayload: Uint8Array | HexString,\n ) => {\n const typeRefs: Array<TypeRef> = [\n extrinsic.callTy,\n ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),\n ...extrinsic.signedExtensions.map((x) => x.includedInSignedData),\n ]\n return generateProof(\n decodeAndCollectKnownLeafs(extrinsicPayload, typeRefs, lookup),\n )\n }\n\n const getProofForExtrinsicParts = (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => {\n const bytes = mergeUint8(\n [callData, includedInExtrinsic, includedInSignedData].map(toBytes),\n )\n return getProofForExtrinsicPayload(bytes)\n }\n\n const getProofForExtrinsic = (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => {\n let [, { version, signed }, bytes] = extrinsicDec(transaction)\n\n if (version !== extrinsic.version)\n throw new Error(\"Incorrect extrinsic version\")\n\n const typeRefs: TypeRef[] = signed\n ? [\n extrinsic.addressTy,\n extrinsic.signatureTy,\n ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),\n extrinsic.callTy,\n ]\n : [extrinsic.callTy]\n\n if (txAdditionalSigned) {\n bytes = mergeUint8([bytes, toBytes(txAdditionalSigned)])\n typeRefs.push(\n ...extrinsic.signedExtensions.map((x) => x.includedInSignedData),\n )\n }\n\n return generateProof(decodeAndCollectKnownLeafs(bytes, typeRefs, lookup))\n }\n\n return {\n digest,\n getProofForExtrinsic,\n getProofForExtrinsicParts,\n getProofForExtrinsicPayload,\n }\n}\n","import {\n Bytes,\n Codec,\n CodecType,\n Option,\n ScaleEnum,\n Struct,\n Tuple,\n V15,\n Vector,\n _void,\n bool,\n compact,\n compactNumber,\n enhanceDecoder,\n str,\n u16,\n u32,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\n\nconst extraInfoInner = {\n specVersion: u32,\n specName: str,\n base58Prefix: u16,\n decimals: u8,\n tokenSymbol: str,\n}\nexport const extraInfo = Struct(extraInfoInner)\nexport type ExtraInfo = CodecType<typeof extraInfo>\n\nexport const hash = Bytes(32)\nexport const metadataDigest = ScaleEnum({\n V0: _void,\n V1: Struct({\n typeInformationTreeRoot: hash,\n extrinsicMetadataHash: hash,\n ...extraInfoInner,\n }),\n})\nexport type MetadataDigest = CodecType<typeof metadataDigest>\n\nexport const scalePrimitive = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n})\nexport type ScalePrimitive = CodecType<typeof scalePrimitive>\n\nexport const typeRef = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n compactU8: _void,\n compactU16: _void,\n compactU32: _void,\n compactU64: _void,\n compactU128: _void,\n compactU256: _void,\n void: _void,\n perId: compactNumber,\n})\nexport type TypeRef = CodecType<typeof typeRef>\n\nconst field = Struct({\n name: Option(str),\n ty: typeRef,\n typeName: Option(str),\n})\nexport const typeDef = ScaleEnum({\n composite: Vector(field),\n enumeration: Struct({\n name: str,\n fields: Vector(field),\n index: compactNumber,\n }),\n sequence: typeRef,\n array: Struct({\n len: u32,\n typeParam: typeRef,\n }),\n tuple: Vector(typeRef),\n bitSequence: Struct({\n numBytes: u8,\n leastSignificantBitFirst: bool,\n }),\n})\nexport type TypeDef = CodecType<typeof typeDef>\n\nexport const lookupType = Struct({\n path: Vector(str),\n typeDef: typeDef,\n typeId: compactNumber,\n})\nexport type LookupEntry = CodecType<typeof lookupType>\nexport type Lookup = Array<LookupEntry>\nexport const lookup: Codec<Lookup> = Vector(lookupType)\n\nexport const extrinsicMetadata = Struct({\n version: u8,\n addressTy: typeRef,\n callTy: typeRef,\n signatureTy: typeRef,\n signedExtensions: Vector(\n Struct({\n identifier: str,\n includedInExtrinsic: typeRef,\n includedInSignedData: typeRef,\n }),\n ),\n})\nexport type ExtrinsicMetadata = CodecType<typeof extrinsicMetadata>\nexport type LookupValue = V15[\"lookup\"] extends Array<infer T> ? T : never\n\nconst versionDecoder = enhanceDecoder(u8[1], (value) => ({\n version: value & ~(1 << 7),\n signed: !!(value & (1 << 7)),\n}))\n\nexport const extrinsicDec = Tuple.dec(\n compact[1],\n versionDecoder,\n Bytes(Infinity)[1],\n)\n\nexport const proof = Struct({\n leaves: lookup,\n leafIdxs: Vector(u32),\n proofs: Vector(hash),\n extrinsic: extrinsicMetadata,\n info: extraInfo,\n})\nexport type Proof = CodecType<typeof proof>\n","import { V15 } from \"@polkadot-api/substrate-bindings\"\nimport { LookupValue } from \"./codecs\"\n\nexport const getAccessibleTypes = (\n metadata: V15,\n definitions: Map<number, LookupValue>,\n): Map<number, number> => {\n const types = new Set<number>()\n\n const collectTypesFromId = (id: number) => {\n if (types.has(id)) return\n\n const { tag, value } = definitions.get(id)!.def\n switch (tag) {\n case \"composite\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n break\n case \"variant\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ fields }) => {\n fields.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n })\n break\n case \"tuple\":\n if (!value.length) break\n types.add(id)\n value.forEach(collectTypesFromId)\n break\n case \"sequence\":\n types.add(id)\n collectTypesFromId(value)\n break\n case \"array\":\n types.add(id)\n collectTypesFromId(value.type)\n break\n case \"bitSequence\": // bitSequence inner types are not stored\n types.add(id)\n // primitive and compact are not stored\n }\n }\n\n collectTypesFromId(metadata.extrinsic.call)\n collectTypesFromId(metadata.extrinsic.address)\n collectTypesFromId(metadata.extrinsic.signature)\n metadata.extrinsic.signedExtensions.forEach(({ type, additionalSigned }) => {\n collectTypesFromId(type)\n collectTypesFromId(additionalSigned)\n })\n\n const sortedTypes = [...types].sort((a, b) => a - b)\n return new Map(sortedTypes.map((value, idx) => [value, idx]))\n}\n","import { Lookup, LookupValue, ScalePrimitive, TypeDef, TypeRef } from \"./codecs\"\n\nconst bitSequenceBytes = {\n u8: 1,\n u16: 2,\n u32: 4,\n u64: 8,\n}\n\nconst constructTypeDef = (\n definitions: Map<number, LookupValue>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n frameId: number,\n): TypeDef[] => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n switch (tag) {\n case \"composite\":\n return [\n {\n tag,\n value: value.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n ]\n case \"variant\": {\n return value.map((v) => ({\n tag: \"enumeration\",\n value: {\n name: v.name,\n index: v.index,\n fields: v.fields.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n }))\n }\n case \"sequence\":\n return [\n {\n tag,\n value: getTypeRef(value),\n },\n ]\n case \"array\":\n return [\n {\n tag,\n value: {\n len: value.len,\n typeParam: getTypeRef(value.type),\n },\n },\n ]\n case \"tuple\":\n return [\n {\n tag,\n value: value.map(getTypeRef),\n },\n ]\n case \"bitSequence\": {\n const primitive = getPrimitive(value.bitStoreType)\n const numBytes = bitSequenceBytes[primitive as \"u8\"]\n if (!numBytes) throw new Error(\"Invalid primitive for BitSequence\")\n\n const storeOrderPath = definitions.get(value.bitOrderType)!.path\n const leastSignificantBitFirst = storeOrderPath.includes(\"Lsb0\")\n if (!leastSignificantBitFirst && !storeOrderPath.includes(\"Msb0\"))\n throw new Error(\"BitOrderType not recognized\")\n\n return [\n {\n tag: \"bitSequence\",\n value: { numBytes, leastSignificantBitFirst },\n },\n ]\n }\n }\n\n throw new Error(`FrameId(${frameId}) should have been filtered out`)\n}\n\nexport const getLookup = (\n definitions: Map<number, LookupValue>,\n accessibleTypes: Map<number, number>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n) => {\n const typeTree: Lookup = []\n ;[...accessibleTypes.entries()].forEach(([frameId, typeId]) => {\n const { path } = definitions.get(frameId)!\n constructTypeDef(definitions, getTypeRef, getPrimitive, frameId).forEach(\n (typeDef) => {\n typeTree.push({\n path,\n typeId,\n typeDef,\n })\n },\n )\n })\n\n typeTree.sort((a, b) => {\n if (a.typeId !== b.typeId) return a.typeId - b.typeId // in general\n // should only happen for variants\n if (a.typeDef.tag !== \"enumeration\" || b.typeDef.tag !== \"enumeration\")\n throw new Error(\"Found two types with same id\")\n return a.typeDef.value.index - b.typeDef.value.index\n })\n return typeTree\n}\n","import {\n Option,\n Bytes,\n metadata,\n compact,\n Tuple,\n V15,\n} from \"@polkadot-api/substrate-bindings\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\n\nconst opaqueBytes = Bytes()\nconst optionOpaque = Option(opaqueBytes)\nconst opaqueOpaqueBytes = Tuple(compact, opaqueBytes)\n\nconst getAnyMetadata = (input: Uint8Array | HexString) => {\n try {\n return metadata.dec(input)\n } catch (_) {}\n\n // comes from metadata.metadata_at_version\n try {\n return metadata.dec(optionOpaque.dec(input)!)\n } catch (_) {}\n\n // comes from state.getMetadata\n try {\n return metadata.dec(opaqueBytes.dec(input))\n } catch (_) {}\n\n // comes from metadata.metadata\n try {\n return metadata.dec(opaqueOpaqueBytes.dec(input)[1])\n } catch (_) {}\n\n throw null\n}\n\nexport const getMetadata = (input: Uint8Array | HexString): V15 => {\n try {\n const { metadata } = getAnyMetadata(input)\n if (metadata.tag !== \"v15\") throw new Error(\"Wrong metadata version\")\n return metadata.value\n } catch (e) {\n throw e || new Error(\"Unable to decode metadata\")\n }\n}\n","import { type HexString } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex } from \"@polkadot-api/utils\"\n\nexport const mergeUint8 = (inputs: Array<Uint8Array>): Uint8Array => {\n const len = inputs.length\n let totalLen = 0\n for (let i = 0; i < len; i++) totalLen += inputs[i].byteLength\n const result = new Uint8Array(totalLen)\n\n for (let idx = 0, at = 0; idx < len; idx++) {\n const current = inputs[idx]\n result.set(current, at)\n at += current.byteLength\n }\n\n return result\n}\n\nexport const toBytes = (input: Uint8Array | HexString) =>\n typeof input === \"string\" ? fromHex(input) : input\n\nexport const compactTypeRefs = {\n null: \"void\" as const,\n u8: \"compactU8\" as const,\n u16: \"compactU16\" as const,\n u32: \"compactU32\" as const,\n u64: \"compactU64\" as const,\n u128: \"compactU128\" as const,\n u256: \"compactU256\" as const,\n}\n","import {\n HexString,\n _void,\n compact,\n createDecoder,\n i128,\n i16,\n i256,\n i32,\n i64,\n i8,\n str,\n u128,\n u16,\n u256,\n u32,\n u64,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\nimport { Lookup, TypeDef, TypeRef } from \"./codecs\"\n\nconst typeRefDecoders = {\n bool: u8,\n char: u8,\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 void: _void,\n compactU8: compact,\n compactU16: compact,\n compactU32: compact,\n compactU64: compact,\n compactU128: compact,\n compactU256: compact,\n}\n\nconst innerDecodeAndCollect = (\n input: Uint8Array,\n typeRef: TypeRef,\n idToLookups: Map<number, Array<number>>,\n lookup: Lookup,\n collected: Set<number>,\n) => {\n if (typeRef.tag !== \"perId\") {\n typeRefDecoders[typeRef.tag][1](input)\n return\n }\n\n const handleTypeRef = (typeRef: TypeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, collected)\n }\n\n const lookupIdxs = idToLookups.get(typeRef.value)!\n const [currentIdx] = lookupIdxs\n const current = lookup[currentIdx]\n\n if (lookupIdxs.length === 1) collected.add(currentIdx)\n\n switch (current.typeDef.tag) {\n case \"enumeration\": {\n const selectedIdx = u8.dec(input)\n const [selected, collectedIdx] = lookupIdxs\n .map(\n (lookupIdx) =>\n [lookup[lookupIdx].typeDef, lookupIdx] as [\n TypeDef & { tag: \"enumeration\" },\n number,\n ],\n )\n .find(([x]) => x.value.index === selectedIdx)!\n collected.add(collectedIdx)\n selected.value.fields.forEach(({ ty }) => {\n handleTypeRef(ty)\n })\n break\n }\n case \"sequence\": {\n const len = compact.dec(input)\n for (let i = 0; i < len; i++) handleTypeRef(current.typeDef.value)\n break\n }\n case \"array\": {\n for (let i = 0; i < current.typeDef.value.len; i++)\n handleTypeRef(current.typeDef.value.typeParam)\n break\n }\n case \"composite\": {\n current.typeDef.value.forEach((x) => {\n handleTypeRef(x.ty)\n })\n break\n }\n case \"tuple\": {\n current.typeDef.value.forEach(handleTypeRef)\n break\n }\n case \"bitSequence\":\n throw new Error(\"bitSequence is not supported\")\n }\n}\n\nexport const decodeAndCollectKnownLeafs = (\n data: Uint8Array | HexString,\n typeRefs: Array<TypeRef>,\n lookup: Lookup,\n): Array<number> => {\n let input = new Uint8Array()\n createDecoder((_input) => {\n input = _input\n })(data)\n\n const idToLookups = new Map<number, number[]>()\n lookup.forEach((lookup, idx) => {\n const arr = idToLookups.get(lookup.typeId)\n if (arr) arr.push(idx)\n else idToLookups.set(lookup.typeId, [idx])\n })\n\n const result = new Set<number>()\n typeRefs.forEach((typeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, result)\n })\n\n return [...result].sort((a, b) => a - b)\n}\n","const getLevelFromIdx = (idx: number) => Math.log2(idx + 1) | 0\nconst getAncestorIdx = (from: number, nLevels: number) =>\n ((from + 1) >> nLevels) - 1\n\nexport function getProofData(\n leaves: Array<Uint8Array>,\n knownLeavesIdxs: Array<number>,\n) {\n const knownLeaves = knownLeavesIdxs.map((idx) => leaves[idx])\n\n const startingIdx = leaves.length - 1\n const leafIdxs = knownLeavesIdxs.map((idx) => startingIdx + idx)\n\n const proofIdxs: Array<number> = []\n if (leafIdxs.length) {\n const nLevels = getLevelFromIdx(leafIdxs.at(-1)!)\n const splitPosition = Math.pow(2, nLevels) - 1\n const splitIdx = leafIdxs.findIndex((x) => x >= splitPosition)\n if (splitIdx > 0) {\n leafIdxs.unshift(...leafIdxs.splice(splitIdx))\n knownLeaves.unshift(...knownLeaves.splice(splitIdx))\n }\n }\n\n let targetIdx = 0\n const traverse = (nodeIdx: number): void => {\n if (targetIdx === leafIdxs.length) {\n proofIdxs.push(nodeIdx)\n return\n }\n\n const target = leafIdxs[targetIdx]\n if (target === nodeIdx) {\n ++targetIdx\n return\n }\n\n const currentLevel = getLevelFromIdx(nodeIdx)\n const targetLevel = getLevelFromIdx(target)\n\n if (nodeIdx !== getAncestorIdx(target, targetLevel - currentLevel)) {\n proofIdxs.push(nodeIdx)\n return\n }\n\n const leftSon = 2 * nodeIdx + 1\n traverse(leftSon)\n traverse(leftSon + 1)\n }\n traverse(0)\n\n return {\n leaves: knownLeaves,\n leafIdxs,\n proofIdxs,\n }\n}\n"],"mappings":"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","names":["compact","u32","metadata","typeDef","Option","Bytes","compact","Tuple","metadata","_void","compact","str","u16","u32","u8","typeRef","lookup","metadata","lookup","digest","hashTree","compact","u32"]}
@@ -1197,9 +1197,42 @@ declare const proof: Codec<{
1197
1197
  type Proof = CodecType<typeof proof>;
1198
1198
 
1199
1199
  interface MetadataMerkleizer {
1200
+ /**
1201
+ * @returns Digest value of the metadata (aka its merkleized root-hash)
1202
+ */
1200
1203
  digest: () => Uint8Array;
1204
+ /**
1205
+ * Get proof for an `Extrinsic`.
1206
+ *
1207
+ * @param transaction Encoded `Extrinsic`, both signed or unsigned.
1208
+ * @param txAdditionalSigned Optionally collect types for given
1209
+ * `additionalSigned` part of signedExtensions.
1210
+ * @returns Encoded `Proof`
1211
+ */
1201
1212
  getProofForExtrinsic: (transaction: Uint8Array | HexString, txAdditionalSigned?: Uint8Array | HexString) => Uint8Array;
1213
+ /**
1214
+ * Get proof for `ExtrinsicPayload` parts.
1215
+ *
1216
+ * @param callData Call data of the transaction. It has to be
1217
+ * bare; i.e.
1218
+ * without prepended compact length.
1219
+ * @param includedInExtrinsic Extra part of the signed extensions, all of
1220
+ * them concatenated.
1221
+ * @param includedInSignedData Additional signed part of the signed
1222
+ * extensions, all of them concatenated.
1223
+ * @returns Encoded `Proof`
1224
+ */
1202
1225
  getProofForExtrinsicParts: (callData: Uint8Array | HexString, includedInExtrinsic: Uint8Array | HexString, includedInSignedData: Uint8Array | HexString) => Uint8Array;
1226
+ /**
1227
+ * Get proof for `ExtrinsicPayload`.
1228
+ *
1229
+ * @param extrinsicPayload Call data, extra part of signedExtensions and
1230
+ * additional signed part of signedExtensions
1231
+ * concatenated. It has to be bare; i.e. without
1232
+ * prepended compact length.
1233
+ * @returns Encoded `Proof`
1234
+ */
1235
+ getProofForExtrinsicPayload: (extrinsicPayload: Uint8Array | HexString) => Uint8Array;
1203
1236
  }
1204
1237
  declare const merkleizeMetadata: (metadataBytes: Uint8Array | HexString, info: ExtraInfo) => MetadataMerkleizer;
1205
1238
 
package/dist/min/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var L=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var X=Object.getOwnPropertyNames;var Y=Object.prototype.hasOwnProperty;var Z=(t,a)=>{for(var s in a)L(t,s,{get:a[s],enumerable:!0})},ee=(t,a,s,p)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of X(a))!Y.call(t,o)&&o!==s&&L(t,o,{get:()=>a[o],enumerable:!(p=Q(a,o))||p.enumerable});return t};var te=t=>ee(L({},"__esModule",{value:!0}),t);var le={};Z(le,{extraInfo:()=>I,extrinsicMetadata:()=>U,hash:()=>A,lookup:()=>M,lookupType:()=>k,merkleizeMetadata:()=>de,proof:()=>O});module.exports=te(le);var h=require("@polkadot-api/substrate-bindings");var e=require("@polkadot-api/substrate-bindings"),B={specVersion:e.u32,specName:e.str,base58Prefix:e.u16,decimals:e.u8,tokenSymbol:e.str},I=(0,e.Struct)(B),A=(0,e.Bytes)(32),F=(0,e.ScaleEnum)({V0:e._void,V1:(0,e.Struct)({typeInformationTreeRoot:A,extrinsicMetadataHash:A,...B})}),ve=(0,e.ScaleEnum)({bool:e._void,char:e._void,str:e._void,u8:e._void,u16:e._void,u32:e._void,u64:e._void,u128:e._void,u256:e._void,i8:e._void,i16:e._void,i32:e._void,i64:e._void,i128:e._void,i256:e._void}),T=(0,e.ScaleEnum)({bool:e._void,char:e._void,str:e._void,u8:e._void,u16:e._void,u32:e._void,u64:e._void,u128:e._void,u256:e._void,i8:e._void,i16:e._void,i32:e._void,i64:e._void,i128:e._void,i256:e._void,compactU8:e._void,compactU16:e._void,compactU32:e._void,compactU64:e._void,compactU128:e._void,compactU256:e._void,void:e._void,perId:e.compactNumber}),C=(0,e.Struct)({name:(0,e.Option)(e.str),ty:T,typeName:(0,e.Option)(e.str)}),re=(0,e.ScaleEnum)({composite:(0,e.Vector)(C),enumeration:(0,e.Struct)({name:e.str,fields:(0,e.Vector)(C),index:e.compactNumber}),sequence:T,array:(0,e.Struct)({len:e.u32,typeParam:T}),tuple:(0,e.Vector)(T),bitSequence:(0,e.Struct)({numBytes:e.u8,leastSignificantBitFirst:e.bool})}),k=(0,e.Struct)({path:(0,e.Vector)(e.str),typeDef:re,typeId:e.compactNumber}),M=(0,e.Vector)(k),U=(0,e.Struct)({version:e.u8,addressTy:T,callTy:T,signatureTy:T,signedExtensions:(0,e.Vector)((0,e.Struct)({identifier:e.str,includedInExtrinsic:T,includedInSignedData:T}))}),ne=(0,e.enhanceDecoder)(e.u8[1],t=>({version:t&-129,signed:!!(t&128)})),N=e.Tuple.dec(e.compact[1],ne,(0,e.Bytes)(1/0)[1]),O=(0,e.Struct)({leaves:M,leafIdxs:(0,e.Vector)(e.u32),proofs:(0,e.Vector)(A),extrinsic:U,info:I});var _=(t,a)=>{let s=new Set,p=r=>{if(s.has(r))return;let{tag:n,value:i}=a.get(r).def;switch(n){case"composite":if(!i.length)break;s.add(r),i.forEach(({type:u})=>{p(u)});break;case"variant":if(!i.length)break;s.add(r),i.forEach(({fields:u})=>{u.forEach(({type:l})=>{p(l)})});break;case"tuple":if(!i.length)break;s.add(r),i.forEach(p);break;case"sequence":s.add(r),p(i);break;case"array":s.add(r),p(i.type);break;case"bitSequence":s.add(r)}};p(t.extrinsic.call),p(t.extrinsic.address),p(t.extrinsic.signature),t.extrinsic.signedExtensions.forEach(({type:r,additionalSigned:n})=>{p(r),p(n)});let o=[...s].sort((r,n)=>r-n);return new Map(o.map((r,n)=>[r,n]))};var oe={u8:1,u16:2,u32:4,u64:8},ae=(t,a,s,p)=>{let{def:{tag:o,value:r}}=t.get(p);switch(o){case"composite":return[{tag:o,value:r.map(n=>({name:n.name,typeName:n.typeName,ty:a(n.type)}))}];case"variant":return r.map(n=>({tag:"enumeration",value:{name:n.name,index:n.index,fields:n.fields.map(i=>({name:i.name,typeName:i.typeName,ty:a(i.type)}))}}));case"sequence":return[{tag:o,value:a(r)}];case"array":return[{tag:o,value:{len:r.len,typeParam:a(r.type)}}];case"tuple":return[{tag:o,value:r.map(a)}];case"bitSequence":{let n=s(r.bitStoreType),i=oe[n];if(!i)throw new Error("Invalid primitive for BitSequence");let u=t.get(r.bitOrderType).path,l=u.includes("Lsb0");if(!l&&!u.includes("Msb0"))throw new Error("BitOrderType not recognized");return[{tag:"bitSequence",value:{numBytes:i,leastSignificantBitFirst:l}}]}}throw new Error(`FrameId(${p}) should have been filtered out`)},z=(t,a,s,p)=>{let o=[];return[...a.entries()].forEach(([r,n])=>{let{path:i}=t.get(r);ae(t,s,p,r).forEach(u=>{o.push({path:i,typeId:n,typeDef:u})})}),o.sort((r,n)=>{if(r.typeId!==n.typeId)return r.typeId-n.typeId;if(r.typeDef.tag!=="enumeration"||n.typeDef.tag!=="enumeration")throw new Error("Found two types with same id");return r.typeDef.value.index-n.typeDef.value.index}),o};var x=require("@polkadot-api/substrate-bindings"),P=(0,x.Bytes)(),ie=(0,x.Option)(P),ce=(0,x.Tuple)(x.compact,P),se=t=>{try{return x.metadata.dec(t)}catch{}try{return x.metadata.dec(ie.dec(t))}catch{}try{return x.metadata.dec(P.dec(t))}catch{}try{return x.metadata.dec(ce.dec(t)[1])}catch{}throw null},K=t=>{try{let{metadata:a}=se(t);if(a.tag!=="v15")throw new Error("Wrong metadata version");return a.value}catch(a){throw a||new Error("Unable to decode metadata")}};var W=require("@polkadot-api/utils"),D=t=>{let a=t.length,s=0;for(let o=0;o<a;o++)s+=t[o].byteLength;let p=new Uint8Array(s);for(let o=0,r=0;o<a;o++){let n=t[o];p.set(n,r),r+=n.byteLength}return p},H=t=>typeof t=="string"?(0,W.fromHex)(t):t,$={null:"void",u8:"compactU8",u16:"compactU16",u32:"compactU32",u64:"compactU64",u128:"compactU128",u256:"compactU256"};var c=require("@polkadot-api/substrate-bindings"),pe={bool:c.u8,char:c.u8,str:c.str,u8:c.u8,u16:c.u16,u32:c.u32,u64:c.u64,u128:c.u128,u256:c.u256,i8:c.i8,i16:c.i16,i32:c.i32,i64:c.i64,i128:c.i128,i256:c.i256,void:c._void,compactU8:c.compact,compactU16:c.compact,compactU32:c.compact,compactU64:c.compact,compactU128:c.compact,compactU256:c.compact},j=(t,a,s,p,o)=>{if(a.tag!=="perId"){pe[a.tag][1](t);return}let r=l=>{j(t,l,s,p,o)},n=s.get(a.value),[i]=n,u=p[i];switch(n.length===1&&o.add(i),u.typeDef.tag){case"enumeration":{let l=c.u8.dec(t),[y,E]=n.map(f=>[p[f].typeDef,f]).find(([f])=>f.value.index===l);o.add(E),y.value.fields.forEach(({ty:f})=>{r(f)});break}case"sequence":{let l=c.compact.dec(t);for(let y=0;y<l;y++)r(u.typeDef.value);break}case"array":{for(let l=0;l<u.typeDef.value.len;l++)r(u.typeDef.value.typeParam);break}case"composite":{u.typeDef.value.forEach(l=>{r(l.ty)});break}case"tuple":{u.typeDef.value.forEach(r);break}case"bitSequence":throw new Error("bitSequence is not supported")}},V=(t,a,s)=>{let p=new Uint8Array;(0,c.createDecoder)(n=>{p=n})(t);let o=new Map;s.forEach((n,i)=>{let u=o.get(n.typeId);u?u.push(i):o.set(n.typeId,[i])});let r=new Set;return a.forEach(n=>{j(p,n,o,s,r)}),[...r].sort((n,i)=>n-i)};var R=t=>Math.log2(t+1)|0,ue=(t,a)=>(t+1>>a)-1;function G(t,a){let s=a.map(u=>t[u]),p=t.length-1,o=a.map(u=>p+u),r=[];if(o.length){let u=R(o.at(-1)),l=Math.pow(2,u)-1,y=o.findIndex(E=>E>=l);y>0&&(o.unshift(...o.splice(y)),s.unshift(...s.splice(y)))}let n=0,i=u=>{if(n===o.length){r.push(u);return}let l=o[n];if(l===u){++n;return}let y=R(u),E=R(l);if(u!==ue(l,E-y)){r.push(u);return}let f=2*u+1;i(f),i(f+1)};return i(0),{leaves:s,leafIdxs:o,proofIdxs:r}}var de=(t,a)=>{let s=K(t),p=new Map(s.lookup.map(m=>[m.id,m])),o=_(s,p),r=m=>{let{def:{tag:d,value:g}}=p.get(m);if(d==="primitive")return g.tag;if(d!=="composite"&&d!=="tuple"||g.length>1)throw new Error("The provided definition doesn't map to a primitive");return g.length===0?null:r(d==="tuple"?g[0]:g[0].type)},n=m=>{let{def:d}=p.get(m);if(d.tag==="primitive")return{tag:d.value.tag,value:void 0};if(d.tag==="compact"){let g=r(d.value),v=$[g];if(!v)throw new Error("Invalid primitive for Compact");return{tag:v,value:void 0}}return o.has(m)?{tag:"perId",value:o.get(m)}:{tag:"void",value:void 0}},i={version:s.extrinsic.version,addressTy:n(s.extrinsic.address),callTy:n(s.extrinsic.call),signatureTy:n(s.extrinsic.signature),signedExtensions:s.extrinsic.signedExtensions.map(m=>({identifier:m.identifier,includedInExtrinsic:n(m.type),includedInSignedData:n(m.additionalSigned)}))},u=z(p,o,n,r),l=u.map(k.enc),y,E=()=>{if(y)return y;if(!l.length)return y=[new Uint8Array(32).fill(0)];y=new Array(l.length*2-1);let m=l.length-1;for(let d=0;d<l.length;d++)y[m+d]=(0,h.Blake3256)(l[d]);for(let d=y.length-2;d>0;d-=2)y[(d-1)/2]=(0,h.Blake3256)(D([y[d],y[d+1]]));return y},f,J=()=>{if(f)return f;let d={tag:"V1",value:{typeInformationTreeRoot:E()[0],extrinsicMetadataHash:(0,h.Blake3256)(U.enc(i)),...a}};return f=(0,h.Blake3256)(F.enc(d))},q=m=>{let d=G(l,m),g=E(),v=d.proofIdxs.map(b=>g[b]);return D([h.compact.enc(d.leaves.length),...d.leaves,h.compact.enc(d.leafIdxs.length),...d.leafIdxs.map(b=>h.u32.enc(b)),h.compact.enc(v.length),...v,U.enc(i),I.enc(a)])};return{digest:J,getProofForExtrinsic:(m,d)=>{let[,{version:g,signed:v},b]=N(m);if(g!==i.version)throw new Error("Incorrect extrinsic version");let S=v?[i.addressTy,i.signatureTy,...i.signedExtensions.map(w=>w.includedInExtrinsic),i.callTy]:[i.callTy];return d&&(b=D([b,H(d)]),S.push(...i.signedExtensions.map(w=>w.includedInSignedData))),q(V(b,S,u))},getProofForExtrinsicParts:(m,d,g)=>{let v=D([m,d,g].map(H)),b=[i.callTy,...i.signedExtensions.map(S=>S.includedInExtrinsic),...i.signedExtensions.map(S=>S.includedInSignedData)];return q(V(v,b,u))}}};
1
+ "use strict";var w=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var Z=Object.prototype.hasOwnProperty;var ee=(t,a)=>{for(var s in a)w(t,s,{get:a[s],enumerable:!0})},te=(t,a,s,p)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of Y(a))!Z.call(t,o)&&o!==s&&w(t,o,{get:()=>a[o],enumerable:!(p=X(a,o))||p.enumerable});return t};var re=t=>te(w({},"__esModule",{value:!0}),t);var ye={};ee(ye,{extraInfo:()=>A,extrinsicMetadata:()=>S,hash:()=>U,lookup:()=>P,lookupType:()=>I,merkleizeMetadata:()=>le,proof:()=>_});module.exports=re(ye);var h=require("@polkadot-api/substrate-bindings");var e=require("@polkadot-api/substrate-bindings"),F={specVersion:e.u32,specName:e.str,base58Prefix:e.u16,decimals:e.u8,tokenSymbol:e.str},A=(0,e.Struct)(F),U=(0,e.Bytes)(32),N=(0,e.ScaleEnum)({V0:e._void,V1:(0,e.Struct)({typeInformationTreeRoot:U,extrinsicMetadataHash:U,...F})}),be=(0,e.ScaleEnum)({bool:e._void,char:e._void,str:e._void,u8:e._void,u16:e._void,u32:e._void,u64:e._void,u128:e._void,u256:e._void,i8:e._void,i16:e._void,i32:e._void,i64:e._void,i128:e._void,i256:e._void}),b=(0,e.ScaleEnum)({bool:e._void,char:e._void,str:e._void,u8:e._void,u16:e._void,u32:e._void,u64:e._void,u128:e._void,u256:e._void,i8:e._void,i16:e._void,i32:e._void,i64:e._void,i128:e._void,i256:e._void,compactU8:e._void,compactU16:e._void,compactU32:e._void,compactU64:e._void,compactU128:e._void,compactU256:e._void,void:e._void,perId:e.compactNumber}),B=(0,e.Struct)({name:(0,e.Option)(e.str),ty:b,typeName:(0,e.Option)(e.str)}),ne=(0,e.ScaleEnum)({composite:(0,e.Vector)(B),enumeration:(0,e.Struct)({name:e.str,fields:(0,e.Vector)(B),index:e.compactNumber}),sequence:b,array:(0,e.Struct)({len:e.u32,typeParam:b}),tuple:(0,e.Vector)(b),bitSequence:(0,e.Struct)({numBytes:e.u8,leastSignificantBitFirst:e.bool})}),I=(0,e.Struct)({path:(0,e.Vector)(e.str),typeDef:ne,typeId:e.compactNumber}),P=(0,e.Vector)(I),S=(0,e.Struct)({version:e.u8,addressTy:b,callTy:b,signatureTy:b,signedExtensions:(0,e.Vector)((0,e.Struct)({identifier:e.str,includedInExtrinsic:b,includedInSignedData:b}))}),oe=(0,e.enhanceDecoder)(e.u8[1],t=>({version:t&-129,signed:!!(t&128)})),O=e.Tuple.dec(e.compact[1],oe,(0,e.Bytes)(1/0)[1]),_=(0,e.Struct)({leaves:P,leafIdxs:(0,e.Vector)(e.u32),proofs:(0,e.Vector)(U),extrinsic:S,info:A});var z=(t,a)=>{let s=new Set,p=r=>{if(s.has(r))return;let{tag:n,value:i}=a.get(r).def;switch(n){case"composite":if(!i.length)break;s.add(r),i.forEach(({type:u})=>{p(u)});break;case"variant":if(!i.length)break;s.add(r),i.forEach(({fields:u})=>{u.forEach(({type:l})=>{p(l)})});break;case"tuple":if(!i.length)break;s.add(r),i.forEach(p);break;case"sequence":s.add(r),p(i);break;case"array":s.add(r),p(i.type);break;case"bitSequence":s.add(r)}};p(t.extrinsic.call),p(t.extrinsic.address),p(t.extrinsic.signature),t.extrinsic.signedExtensions.forEach(({type:r,additionalSigned:n})=>{p(r),p(n)});let o=[...s].sort((r,n)=>r-n);return new Map(o.map((r,n)=>[r,n]))};var ae={u8:1,u16:2,u32:4,u64:8},ie=(t,a,s,p)=>{let{def:{tag:o,value:r}}=t.get(p);switch(o){case"composite":return[{tag:o,value:r.map(n=>({name:n.name,typeName:n.typeName,ty:a(n.type)}))}];case"variant":return r.map(n=>({tag:"enumeration",value:{name:n.name,index:n.index,fields:n.fields.map(i=>({name:i.name,typeName:i.typeName,ty:a(i.type)}))}}));case"sequence":return[{tag:o,value:a(r)}];case"array":return[{tag:o,value:{len:r.len,typeParam:a(r.type)}}];case"tuple":return[{tag:o,value:r.map(a)}];case"bitSequence":{let n=s(r.bitStoreType),i=ae[n];if(!i)throw new Error("Invalid primitive for BitSequence");let u=t.get(r.bitOrderType).path,l=u.includes("Lsb0");if(!l&&!u.includes("Msb0"))throw new Error("BitOrderType not recognized");return[{tag:"bitSequence",value:{numBytes:i,leastSignificantBitFirst:l}}]}}throw new Error(`FrameId(${p}) should have been filtered out`)},K=(t,a,s,p)=>{let o=[];return[...a.entries()].forEach(([r,n])=>{let{path:i}=t.get(r);ie(t,s,p,r).forEach(u=>{o.push({path:i,typeId:n,typeDef:u})})}),o.sort((r,n)=>{if(r.typeId!==n.typeId)return r.typeId-n.typeId;if(r.typeDef.tag!=="enumeration"||n.typeDef.tag!=="enumeration")throw new Error("Found two types with same id");return r.typeDef.value.index-n.typeDef.value.index}),o};var x=require("@polkadot-api/substrate-bindings"),L=(0,x.Bytes)(),ce=(0,x.Option)(L),se=(0,x.Tuple)(x.compact,L),pe=t=>{try{return x.metadata.dec(t)}catch{}try{return x.metadata.dec(ce.dec(t))}catch{}try{return x.metadata.dec(L.dec(t))}catch{}try{return x.metadata.dec(se.dec(t)[1])}catch{}throw null},W=t=>{try{let{metadata:a}=pe(t);if(a.tag!=="v15")throw new Error("Wrong metadata version");return a.value}catch(a){throw a||new Error("Unable to decode metadata")}};var $=require("@polkadot-api/utils"),k=t=>{let a=t.length,s=0;for(let o=0;o<a;o++)s+=t[o].byteLength;let p=new Uint8Array(s);for(let o=0,r=0;o<a;o++){let n=t[o];p.set(n,r),r+=n.byteLength}return p},M=t=>typeof t=="string"?(0,$.fromHex)(t):t,j={null:"void",u8:"compactU8",u16:"compactU16",u32:"compactU32",u64:"compactU64",u128:"compactU128",u256:"compactU256"};var c=require("@polkadot-api/substrate-bindings"),ue={bool:c.u8,char:c.u8,str:c.str,u8:c.u8,u16:c.u16,u32:c.u32,u64:c.u64,u128:c.u128,u256:c.u256,i8:c.i8,i16:c.i16,i32:c.i32,i64:c.i64,i128:c.i128,i256:c.i256,void:c._void,compactU8:c.compact,compactU16:c.compact,compactU32:c.compact,compactU64:c.compact,compactU128:c.compact,compactU256:c.compact},G=(t,a,s,p,o)=>{if(a.tag!=="perId"){ue[a.tag][1](t);return}let r=l=>{G(t,l,s,p,o)},n=s.get(a.value),[i]=n,u=p[i];switch(n.length===1&&o.add(i),u.typeDef.tag){case"enumeration":{let l=c.u8.dec(t),[m,T]=n.map(g=>[p[g].typeDef,g]).find(([g])=>g.value.index===l);o.add(T),m.value.fields.forEach(({ty:g})=>{r(g)});break}case"sequence":{let l=c.compact.dec(t);for(let m=0;m<l;m++)r(u.typeDef.value);break}case"array":{for(let l=0;l<u.typeDef.value.len;l++)r(u.typeDef.value.typeParam);break}case"composite":{u.typeDef.value.forEach(l=>{r(l.ty)});break}case"tuple":{u.typeDef.value.forEach(r);break}case"bitSequence":throw new Error("bitSequence is not supported")}},H=(t,a,s)=>{let p=new Uint8Array;(0,c.createDecoder)(n=>{p=n})(t);let o=new Map;s.forEach((n,i)=>{let u=o.get(n.typeId);u?u.push(i):o.set(n.typeId,[i])});let r=new Set;return a.forEach(n=>{G(p,n,o,s,r)}),[...r].sort((n,i)=>n-i)};var V=t=>Math.log2(t+1)|0,de=(t,a)=>(t+1>>a)-1;function J(t,a){let s=a.map(u=>t[u]),p=t.length-1,o=a.map(u=>p+u),r=[];if(o.length){let u=V(o.at(-1)),l=Math.pow(2,u)-1,m=o.findIndex(T=>T>=l);m>0&&(o.unshift(...o.splice(m)),s.unshift(...s.splice(m)))}let n=0,i=u=>{if(n===o.length){r.push(u);return}let l=o[n];if(l===u){++n;return}let m=V(u),T=V(l);if(u!==de(l,T-m)){r.push(u);return}let g=2*u+1;i(g),i(g+1)};return i(0),{leaves:s,leafIdxs:o,proofIdxs:r}}var le=(t,a)=>{let s=W(t),p=new Map(s.lookup.map(y=>[y.id,y])),o=z(s,p),r=y=>{let{def:{tag:d,value:f}}=p.get(y);if(d==="primitive")return f.tag;if(d!=="composite"&&d!=="tuple"||f.length>1)throw new Error("The provided definition doesn't map to a primitive");return f.length===0?null:r(d==="tuple"?f[0]:f[0].type)},n=y=>{let{def:d}=p.get(y);if(d.tag==="primitive")return{tag:d.value.tag,value:void 0};if(d.tag==="compact"){let f=r(d.value),v=j[f];if(!v)throw new Error("Invalid primitive for Compact");return{tag:v,value:void 0}}return o.has(y)?{tag:"perId",value:o.get(y)}:{tag:"void",value:void 0}},i={version:s.extrinsic.version,addressTy:n(s.extrinsic.address),callTy:n(s.extrinsic.call),signatureTy:n(s.extrinsic.signature),signedExtensions:s.extrinsic.signedExtensions.map(y=>({identifier:y.identifier,includedInExtrinsic:n(y.type),includedInSignedData:n(y.additionalSigned)}))},u=K(p,o,n,r),l=u.map(I.enc),m,T=()=>{if(m)return m;if(!l.length)return m=[new Uint8Array(32).fill(0)];m=new Array(l.length*2-1);let y=l.length-1;for(let d=0;d<l.length;d++)m[y+d]=(0,h.Blake3256)(l[d]);for(let d=m.length-2;d>0;d-=2)m[(d-1)/2]=(0,h.Blake3256)(k([m[d],m[d+1]]));return m},g,Q=()=>{if(g)return g;let d={tag:"V1",value:{typeInformationTreeRoot:T()[0],extrinsicMetadataHash:(0,h.Blake3256)(S.enc(i)),...a}};return g=(0,h.Blake3256)(N.enc(d))},R=y=>{let d=J(l,y),f=T(),v=d.proofIdxs.map(E=>f[E]);return k([h.compact.enc(d.leaves.length),...d.leaves,h.compact.enc(d.leafIdxs.length),...d.leafIdxs.map(E=>h.u32.enc(E)),h.compact.enc(v.length),...v,S.enc(i),A.enc(a)])},q=y=>{let d=[i.callTy,...i.signedExtensions.map(f=>f.includedInExtrinsic),...i.signedExtensions.map(f=>f.includedInSignedData)];return R(H(y,d,u))};return{digest:Q,getProofForExtrinsic:(y,d)=>{let[,{version:f,signed:v},E]=O(y);if(f!==i.version)throw new Error("Incorrect extrinsic version");let C=v?[i.addressTy,i.signatureTy,...i.signedExtensions.map(D=>D.includedInExtrinsic),i.callTy]:[i.callTy];return d&&(E=k([E,M(d)]),C.push(...i.signedExtensions.map(D=>D.includedInSignedData))),R(H(E,C,u))},getProofForExtrinsicParts:(y,d,f)=>{let v=k([y,d,f].map(M));return q(v)},getProofForExtrinsicPayload:q}};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/main.ts","../../src/codecs.ts","../../src/get-accessible-types.ts","../../src/get-lookup.ts","../../src/get-metadata.ts","../../src/utils.ts","../../src/decode-and-collect.ts","../../src/proof.ts"],"sourcesContent":["export * from \"./main\"\nexport {\n proof,\n Proof,\n lookup,\n Lookup,\n lookupType,\n LookupEntry,\n hash,\n extrinsicMetadata,\n ExtrinsicMetadata,\n TypeRef,\n extraInfo,\n ExtraInfo,\n} from \"./codecs\"\n","import {\n Blake3256,\n HexString,\n compact,\n u32,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n ExtraInfo,\n ExtrinsicMetadata,\n LookupValue,\n MetadataDigest,\n ScalePrimitive,\n TypeRef,\n extraInfo,\n extrinsicMetadata,\n lookupType,\n metadataDigest,\n extrinsicDec,\n} from \"./codecs\"\nimport { getAccessibleTypes } from \"./get-accessible-types\"\nimport { getLookup } from \"./get-lookup\"\nimport { getMetadata } from \"./get-metadata\"\nimport { compactTypeRefs, mergeUint8, toBytes } from \"./utils\"\nimport { decodeAndCollectKnownLeafs } from \"./decode-and-collect\"\nimport { getProofData } from \"./proof\"\n\nexport interface MetadataMerkleizer {\n // it returns the digest value of the metadata (aka its merkleized root-hash)\n digest: () => Uint8Array\n\n // given an extrinsic, it returns an encoded `Proof`\n getProofForExtrinsic: (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => Uint8Array\n\n // given the extrinsic parts, it returns an encoded `Proof`\n getProofForExtrinsicParts: (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => Uint8Array\n}\n\nexport const merkleizeMetadata = (\n metadataBytes: Uint8Array | HexString,\n info: ExtraInfo,\n): MetadataMerkleizer => {\n const metadata = getMetadata(metadataBytes)\n\n const definitions = new Map<number, LookupValue>(\n metadata.lookup.map((value) => [value.id, value]),\n )\n const accessibleTypes = getAccessibleTypes(metadata, definitions)\n const getPrimitive = (frameId: number): ScalePrimitive[\"tag\"] | null => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n\n if (tag === \"primitive\") return value.tag\n\n if ((tag !== \"composite\" && tag !== \"tuple\") || value.length > 1)\n throw new Error(\"The provided definition doesn't map to a primitive\")\n\n return value.length === 0\n ? null // signals `void`\n : getPrimitive(tag === \"tuple\" ? value[0] : value[0].type)\n }\n\n const getTypeRef = (frameId: number): TypeRef => {\n const { def } = definitions.get(frameId)!\n\n if (def.tag === \"primitive\") return { tag: def.value.tag, value: undefined }\n\n if (def.tag === \"compact\") {\n const primitive = getPrimitive(def.value)\n const tag = compactTypeRefs[primitive as \"u8\"]\n if (!tag) throw new Error(\"Invalid primitive for Compact\")\n return { tag, value: undefined }\n }\n\n return accessibleTypes.has(frameId)\n ? { tag: \"perId\", value: accessibleTypes.get(frameId)! }\n : { tag: \"void\", value: undefined }\n }\n\n const extrinsic: ExtrinsicMetadata = {\n version: metadata.extrinsic.version,\n addressTy: getTypeRef(metadata.extrinsic.address),\n callTy: getTypeRef(metadata.extrinsic.call),\n signatureTy: getTypeRef(metadata.extrinsic.signature),\n signedExtensions: metadata.extrinsic.signedExtensions.map((se) => ({\n identifier: se.identifier,\n includedInExtrinsic: getTypeRef(se.type),\n includedInSignedData: getTypeRef(se.additionalSigned),\n })),\n }\n\n const lookup = getLookup(\n definitions,\n accessibleTypes,\n getTypeRef,\n getPrimitive,\n )\n const lookupEncoded = lookup.map(lookupType.enc)\n\n let hashTree: Array<Uint8Array> | undefined\n const getHashTree = (): Array<Uint8Array> => {\n if (hashTree) return hashTree\n\n if (!lookupEncoded.length) return (hashTree = [new Uint8Array(32).fill(0)])\n\n hashTree = new Array(lookupEncoded.length * 2 - 1)\n\n let leavesStartIdx = lookupEncoded.length - 1\n for (let i = 0; i < lookupEncoded.length; i++)\n hashTree[leavesStartIdx + i] = Blake3256(lookupEncoded[i])\n\n for (let i = hashTree.length - 2; i > 0; i -= 2)\n hashTree[(i - 1) / 2] = Blake3256(\n mergeUint8([hashTree[i], hashTree[i + 1]]),\n )\n\n return hashTree\n }\n\n let digested: undefined | Uint8Array\n const digest = () => {\n if (digested) return digested\n const rootLookupHash = getHashTree()[0]\n\n const digest: MetadataDigest = {\n tag: \"V1\",\n value: {\n typeInformationTreeRoot: rootLookupHash,\n extrinsicMetadataHash: Blake3256(extrinsicMetadata.enc(extrinsic)),\n ...info,\n },\n }\n\n return (digested = Blake3256(metadataDigest.enc(digest)))\n }\n\n const generateProof = (knownIndexes: number[]) => {\n const proofData = getProofData(lookupEncoded, knownIndexes)\n\n const hashTree = getHashTree()\n const proofs = proofData.proofIdxs.map((idx) => hashTree[idx])\n\n return mergeUint8([\n compact.enc(proofData.leaves.length),\n ...proofData.leaves,\n compact.enc(proofData.leafIdxs.length),\n ...proofData.leafIdxs.map((x) => u32.enc(x)),\n compact.enc(proofs.length),\n ...proofs,\n extrinsicMetadata.enc(extrinsic),\n extraInfo.enc(info),\n ])\n }\n\n const getProofForExtrinsicParts = (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => {\n const bytes = mergeUint8(\n [callData, includedInExtrinsic, includedInSignedData].map(toBytes),\n )\n const typeRefs: Array<TypeRef> = [\n extrinsic.callTy,\n ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),\n ...extrinsic.signedExtensions.map((x) => x.includedInSignedData),\n ]\n return generateProof(decodeAndCollectKnownLeafs(bytes, typeRefs, lookup))\n }\n\n const getProofForExtrinsic = (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => {\n let [, { version, signed }, bytes] = extrinsicDec(transaction)\n\n if (version !== extrinsic.version)\n throw new Error(\"Incorrect extrinsic version\")\n\n const typeRefs: TypeRef[] = signed\n ? [\n extrinsic.addressTy,\n extrinsic.signatureTy,\n ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),\n extrinsic.callTy,\n ]\n : [extrinsic.callTy]\n\n if (txAdditionalSigned) {\n bytes = mergeUint8([bytes, toBytes(txAdditionalSigned)])\n typeRefs.push(\n ...extrinsic.signedExtensions.map((x) => x.includedInSignedData),\n )\n }\n\n return generateProof(decodeAndCollectKnownLeafs(bytes, typeRefs, lookup))\n }\n\n return {\n digest,\n getProofForExtrinsic,\n getProofForExtrinsicParts,\n }\n}\n","import {\n Bytes,\n Codec,\n CodecType,\n Option,\n ScaleEnum,\n Struct,\n Tuple,\n V15,\n Vector,\n _void,\n bool,\n compact,\n compactNumber,\n enhanceDecoder,\n str,\n u16,\n u32,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\n\nconst extraInfoInner = {\n specVersion: u32,\n specName: str,\n base58Prefix: u16,\n decimals: u8,\n tokenSymbol: str,\n}\nexport const extraInfo = Struct(extraInfoInner)\nexport type ExtraInfo = CodecType<typeof extraInfo>\n\nexport const hash = Bytes(32)\nexport const metadataDigest = ScaleEnum({\n V0: _void,\n V1: Struct({\n typeInformationTreeRoot: hash,\n extrinsicMetadataHash: hash,\n ...extraInfoInner,\n }),\n})\nexport type MetadataDigest = CodecType<typeof metadataDigest>\n\nexport const scalePrimitive = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n})\nexport type ScalePrimitive = CodecType<typeof scalePrimitive>\n\nexport const typeRef = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n compactU8: _void,\n compactU16: _void,\n compactU32: _void,\n compactU64: _void,\n compactU128: _void,\n compactU256: _void,\n void: _void,\n perId: compactNumber,\n})\nexport type TypeRef = CodecType<typeof typeRef>\n\nconst field = Struct({\n name: Option(str),\n ty: typeRef,\n typeName: Option(str),\n})\nexport const typeDef = ScaleEnum({\n composite: Vector(field),\n enumeration: Struct({\n name: str,\n fields: Vector(field),\n index: compactNumber,\n }),\n sequence: typeRef,\n array: Struct({\n len: u32,\n typeParam: typeRef,\n }),\n tuple: Vector(typeRef),\n bitSequence: Struct({\n numBytes: u8,\n leastSignificantBitFirst: bool,\n }),\n})\nexport type TypeDef = CodecType<typeof typeDef>\n\nexport const lookupType = Struct({\n path: Vector(str),\n typeDef: typeDef,\n typeId: compactNumber,\n})\nexport type LookupEntry = CodecType<typeof lookupType>\nexport type Lookup = Array<LookupEntry>\nexport const lookup: Codec<Lookup> = Vector(lookupType)\n\nexport const extrinsicMetadata = Struct({\n version: u8,\n addressTy: typeRef,\n callTy: typeRef,\n signatureTy: typeRef,\n signedExtensions: Vector(\n Struct({\n identifier: str,\n includedInExtrinsic: typeRef,\n includedInSignedData: typeRef,\n }),\n ),\n})\nexport type ExtrinsicMetadata = CodecType<typeof extrinsicMetadata>\nexport type LookupValue = V15[\"lookup\"] extends Array<infer T> ? T : never\n\nconst versionDecoder = enhanceDecoder(u8[1], (value) => ({\n version: value & ~(1 << 7),\n signed: !!(value & (1 << 7)),\n}))\n\nexport const extrinsicDec = Tuple.dec(\n compact[1],\n versionDecoder,\n Bytes(Infinity)[1],\n)\n\nexport const proof = Struct({\n leaves: lookup,\n leafIdxs: Vector(u32),\n proofs: Vector(hash),\n extrinsic: extrinsicMetadata,\n info: extraInfo,\n})\nexport type Proof = CodecType<typeof proof>\n","import { V15 } from \"@polkadot-api/substrate-bindings\"\nimport { LookupValue } from \"./codecs\"\n\nexport const getAccessibleTypes = (\n metadata: V15,\n definitions: Map<number, LookupValue>,\n): Map<number, number> => {\n const types = new Set<number>()\n\n const collectTypesFromId = (id: number) => {\n if (types.has(id)) return\n\n const { tag, value } = definitions.get(id)!.def\n switch (tag) {\n case \"composite\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n break\n case \"variant\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ fields }) => {\n fields.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n })\n break\n case \"tuple\":\n if (!value.length) break\n types.add(id)\n value.forEach(collectTypesFromId)\n break\n case \"sequence\":\n types.add(id)\n collectTypesFromId(value)\n break\n case \"array\":\n types.add(id)\n collectTypesFromId(value.type)\n break\n case \"bitSequence\": // bitSequence inner types are not stored\n types.add(id)\n // primitive and compact are not stored\n }\n }\n\n collectTypesFromId(metadata.extrinsic.call)\n collectTypesFromId(metadata.extrinsic.address)\n collectTypesFromId(metadata.extrinsic.signature)\n metadata.extrinsic.signedExtensions.forEach(({ type, additionalSigned }) => {\n collectTypesFromId(type)\n collectTypesFromId(additionalSigned)\n })\n\n const sortedTypes = [...types].sort((a, b) => a - b)\n return new Map(sortedTypes.map((value, idx) => [value, idx]))\n}\n","import { Lookup, LookupValue, ScalePrimitive, TypeDef, TypeRef } from \"./codecs\"\n\nconst bitSequenceBytes = {\n u8: 1,\n u16: 2,\n u32: 4,\n u64: 8,\n}\n\nconst constructTypeDef = (\n definitions: Map<number, LookupValue>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n frameId: number,\n): TypeDef[] => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n switch (tag) {\n case \"composite\":\n return [\n {\n tag,\n value: value.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n ]\n case \"variant\": {\n return value.map((v) => ({\n tag: \"enumeration\",\n value: {\n name: v.name,\n index: v.index,\n fields: v.fields.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n }))\n }\n case \"sequence\":\n return [\n {\n tag,\n value: getTypeRef(value),\n },\n ]\n case \"array\":\n return [\n {\n tag,\n value: {\n len: value.len,\n typeParam: getTypeRef(value.type),\n },\n },\n ]\n case \"tuple\":\n return [\n {\n tag,\n value: value.map(getTypeRef),\n },\n ]\n case \"bitSequence\": {\n const primitive = getPrimitive(value.bitStoreType)\n const numBytes = bitSequenceBytes[primitive as \"u8\"]\n if (!numBytes) throw new Error(\"Invalid primitive for BitSequence\")\n\n const storeOrderPath = definitions.get(value.bitOrderType)!.path\n const leastSignificantBitFirst = storeOrderPath.includes(\"Lsb0\")\n if (!leastSignificantBitFirst && !storeOrderPath.includes(\"Msb0\"))\n throw new Error(\"BitOrderType not recognized\")\n\n return [\n {\n tag: \"bitSequence\",\n value: { numBytes, leastSignificantBitFirst },\n },\n ]\n }\n }\n\n throw new Error(`FrameId(${frameId}) should have been filtered out`)\n}\n\nexport const getLookup = (\n definitions: Map<number, LookupValue>,\n accessibleTypes: Map<number, number>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n) => {\n const typeTree: Lookup = []\n ;[...accessibleTypes.entries()].forEach(([frameId, typeId]) => {\n const { path } = definitions.get(frameId)!\n constructTypeDef(definitions, getTypeRef, getPrimitive, frameId).forEach(\n (typeDef) => {\n typeTree.push({\n path,\n typeId,\n typeDef,\n })\n },\n )\n })\n\n typeTree.sort((a, b) => {\n if (a.typeId !== b.typeId) return a.typeId - b.typeId // in general\n // should only happen for variants\n if (a.typeDef.tag !== \"enumeration\" || b.typeDef.tag !== \"enumeration\")\n throw new Error(\"Found two types with same id\")\n return a.typeDef.value.index - b.typeDef.value.index\n })\n return typeTree\n}\n","import {\n Option,\n Bytes,\n metadata,\n compact,\n Tuple,\n V15,\n} from \"@polkadot-api/substrate-bindings\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\n\nconst opaqueBytes = Bytes()\nconst optionOpaque = Option(opaqueBytes)\nconst opaqueOpaqueBytes = Tuple(compact, opaqueBytes)\n\nconst getAnyMetadata = (input: Uint8Array | HexString) => {\n try {\n return metadata.dec(input)\n } catch (_) {}\n\n // comes from metadata.metadata_at_version\n try {\n return metadata.dec(optionOpaque.dec(input)!)\n } catch (_) {}\n\n // comes from state.getMetadata\n try {\n return metadata.dec(opaqueBytes.dec(input))\n } catch (_) {}\n\n // comes from metadata.metadata\n try {\n return metadata.dec(opaqueOpaqueBytes.dec(input)[1])\n } catch (_) {}\n\n throw null\n}\n\nexport const getMetadata = (input: Uint8Array | HexString): V15 => {\n try {\n const { metadata } = getAnyMetadata(input)\n if (metadata.tag !== \"v15\") throw new Error(\"Wrong metadata version\")\n return metadata.value\n } catch (e) {\n throw e || new Error(\"Unable to decode metadata\")\n }\n}\n","import { type HexString } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex } from \"@polkadot-api/utils\"\n\nexport const mergeUint8 = (inputs: Array<Uint8Array>): Uint8Array => {\n const len = inputs.length\n let totalLen = 0\n for (let i = 0; i < len; i++) totalLen += inputs[i].byteLength\n const result = new Uint8Array(totalLen)\n\n for (let idx = 0, at = 0; idx < len; idx++) {\n const current = inputs[idx]\n result.set(current, at)\n at += current.byteLength\n }\n\n return result\n}\n\nexport const toBytes = (input: Uint8Array | HexString) =>\n typeof input === \"string\" ? fromHex(input) : input\n\nexport const compactTypeRefs = {\n null: \"void\" as const,\n u8: \"compactU8\" as const,\n u16: \"compactU16\" as const,\n u32: \"compactU32\" as const,\n u64: \"compactU64\" as const,\n u128: \"compactU128\" as const,\n u256: \"compactU256\" as const,\n}\n","import {\n HexString,\n _void,\n compact,\n createDecoder,\n i128,\n i16,\n i256,\n i32,\n i64,\n i8,\n str,\n u128,\n u16,\n u256,\n u32,\n u64,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\nimport { Lookup, TypeDef, TypeRef } from \"./codecs\"\n\nconst typeRefDecoders = {\n bool: u8,\n char: u8,\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 void: _void,\n compactU8: compact,\n compactU16: compact,\n compactU32: compact,\n compactU64: compact,\n compactU128: compact,\n compactU256: compact,\n}\n\nconst innerDecodeAndCollect = (\n input: Uint8Array,\n typeRef: TypeRef,\n idToLookups: Map<number, Array<number>>,\n lookup: Lookup,\n collected: Set<number>,\n) => {\n if (typeRef.tag !== \"perId\") {\n typeRefDecoders[typeRef.tag][1](input)\n return\n }\n\n const handleTypeRef = (typeRef: TypeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, collected)\n }\n\n const lookupIdxs = idToLookups.get(typeRef.value)!\n const [currentIdx] = lookupIdxs\n const current = lookup[currentIdx]\n\n if (lookupIdxs.length === 1) collected.add(currentIdx)\n\n switch (current.typeDef.tag) {\n case \"enumeration\": {\n const selectedIdx = u8.dec(input)\n const [selected, collectedIdx] = lookupIdxs\n .map(\n (lookupIdx) =>\n [lookup[lookupIdx].typeDef, lookupIdx] as [\n TypeDef & { tag: \"enumeration\" },\n number,\n ],\n )\n .find(([x]) => x.value.index === selectedIdx)!\n collected.add(collectedIdx)\n selected.value.fields.forEach(({ ty }) => {\n handleTypeRef(ty)\n })\n break\n }\n case \"sequence\": {\n const len = compact.dec(input)\n for (let i = 0; i < len; i++) handleTypeRef(current.typeDef.value)\n break\n }\n case \"array\": {\n for (let i = 0; i < current.typeDef.value.len; i++)\n handleTypeRef(current.typeDef.value.typeParam)\n break\n }\n case \"composite\": {\n current.typeDef.value.forEach((x) => {\n handleTypeRef(x.ty)\n })\n break\n }\n case \"tuple\": {\n current.typeDef.value.forEach(handleTypeRef)\n break\n }\n case \"bitSequence\":\n throw new Error(\"bitSequence is not supported\")\n }\n}\n\nexport const decodeAndCollectKnownLeafs = (\n data: Uint8Array | HexString,\n typeRefs: Array<TypeRef>,\n lookup: Lookup,\n): Array<number> => {\n let input = new Uint8Array()\n createDecoder((_input) => {\n input = _input\n })(data)\n\n const idToLookups = new Map<number, number[]>()\n lookup.forEach((lookup, idx) => {\n const arr = idToLookups.get(lookup.typeId)\n if (arr) arr.push(idx)\n else idToLookups.set(lookup.typeId, [idx])\n })\n\n const result = new Set<number>()\n typeRefs.forEach((typeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, result)\n })\n\n return [...result].sort((a, b) => a - b)\n}\n","const getLevelFromIdx = (idx: number) => Math.log2(idx + 1) | 0\nconst getAncestorIdx = (from: number, nLevels: number) =>\n ((from + 1) >> nLevels) - 1\n\nexport function getProofData(\n leaves: Array<Uint8Array>,\n knownLeavesIdxs: Array<number>,\n) {\n const knownLeaves = knownLeavesIdxs.map((idx) => leaves[idx])\n\n const startingIdx = leaves.length - 1\n const leafIdxs = knownLeavesIdxs.map((idx) => startingIdx + idx)\n\n const proofIdxs: Array<number> = []\n if (leafIdxs.length) {\n const nLevels = getLevelFromIdx(leafIdxs.at(-1)!)\n const splitPosition = Math.pow(2, nLevels) - 1\n const splitIdx = leafIdxs.findIndex((x) => x >= splitPosition)\n if (splitIdx > 0) {\n leafIdxs.unshift(...leafIdxs.splice(splitIdx))\n knownLeaves.unshift(...knownLeaves.splice(splitIdx))\n }\n }\n\n let targetIdx = 0\n const traverse = (nodeIdx: number): void => {\n if (targetIdx === leafIdxs.length) {\n proofIdxs.push(nodeIdx)\n return\n }\n\n const target = leafIdxs[targetIdx]\n if (target === nodeIdx) {\n ++targetIdx\n return\n }\n\n const currentLevel = getLevelFromIdx(nodeIdx)\n const targetLevel = getLevelFromIdx(target)\n\n if (nodeIdx !== getAncestorIdx(target, targetLevel - currentLevel)) {\n proofIdxs.push(nodeIdx)\n return\n }\n\n const leftSon = 2 * nodeIdx + 1\n traverse(leftSon)\n traverse(leftSon + 1)\n }\n traverse(0)\n\n return {\n leaves: knownLeaves,\n leafIdxs,\n proofIdxs,\n }\n}\n"],"mappings":"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","names":["src_exports","__export","extraInfo","extrinsicMetadata","hash","lookup","lookupType","merkleizeMetadata","proof","__toCommonJS","import_substrate_bindings","import_substrate_bindings","extraInfoInner","extraInfo","hash","metadataDigest","scalePrimitive","typeRef","field","typeDef","lookupType","lookup","extrinsicMetadata","versionDecoder","value","extrinsicDec","proof","getAccessibleTypes","metadata","definitions","types","collectTypesFromId","id","tag","value","type","fields","additionalSigned","sortedTypes","a","b","idx","bitSequenceBytes","constructTypeDef","definitions","getTypeRef","getPrimitive","frameId","tag","value","f","v","primitive","numBytes","storeOrderPath","leastSignificantBitFirst","getLookup","accessibleTypes","typeTree","typeId","path","typeDef","a","b","import_substrate_bindings","opaqueBytes","optionOpaque","opaqueOpaqueBytes","getAnyMetadata","input","getMetadata","metadata","e","import_utils","mergeUint8","inputs","len","totalLen","i","result","idx","at","current","toBytes","input","compactTypeRefs","import_substrate_bindings","typeRefDecoders","innerDecodeAndCollect","input","typeRef","idToLookups","lookup","collected","handleTypeRef","lookupIdxs","currentIdx","current","selectedIdx","selected","collectedIdx","lookupIdx","x","ty","len","i","decodeAndCollectKnownLeafs","data","typeRefs","_input","idx","arr","result","a","b","getLevelFromIdx","idx","getAncestorIdx","from","nLevels","getProofData","leaves","knownLeavesIdxs","knownLeaves","startingIdx","leafIdxs","proofIdxs","splitPosition","splitIdx","x","targetIdx","traverse","nodeIdx","target","currentLevel","targetLevel","leftSon","merkleizeMetadata","metadataBytes","info","metadata","getMetadata","definitions","value","accessibleTypes","getAccessibleTypes","getPrimitive","frameId","tag","getTypeRef","def","primitive","compactTypeRefs","extrinsic","se","lookup","getLookup","lookupEncoded","lookupType","hashTree","getHashTree","leavesStartIdx","i","mergeUint8","digested","digest","extrinsicMetadata","metadataDigest","generateProof","knownIndexes","proofData","getProofData","proofs","idx","x","extraInfo","transaction","txAdditionalSigned","version","signed","bytes","extrinsicDec","typeRefs","toBytes","decodeAndCollectKnownLeafs","callData","includedInExtrinsic","includedInSignedData"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/main.ts","../../src/codecs.ts","../../src/get-accessible-types.ts","../../src/get-lookup.ts","../../src/get-metadata.ts","../../src/utils.ts","../../src/decode-and-collect.ts","../../src/proof.ts"],"sourcesContent":["export * from \"./main\"\nexport {\n proof,\n Proof,\n lookup,\n Lookup,\n lookupType,\n LookupEntry,\n hash,\n extrinsicMetadata,\n ExtrinsicMetadata,\n TypeRef,\n extraInfo,\n ExtraInfo,\n} from \"./codecs\"\n","import {\n Blake3256,\n HexString,\n compact,\n u32,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n ExtraInfo,\n ExtrinsicMetadata,\n LookupValue,\n MetadataDigest,\n ScalePrimitive,\n TypeRef,\n extraInfo,\n extrinsicMetadata,\n lookupType,\n metadataDigest,\n extrinsicDec,\n} from \"./codecs\"\nimport { getAccessibleTypes } from \"./get-accessible-types\"\nimport { getLookup } from \"./get-lookup\"\nimport { getMetadata } from \"./get-metadata\"\nimport { compactTypeRefs, mergeUint8, toBytes } from \"./utils\"\nimport { decodeAndCollectKnownLeafs } from \"./decode-and-collect\"\nimport { getProofData } from \"./proof\"\n\nexport interface MetadataMerkleizer {\n /**\n * @returns Digest value of the metadata (aka its merkleized root-hash)\n */\n digest: () => Uint8Array\n\n /**\n * Get proof for an `Extrinsic`.\n *\n * @param transaction Encoded `Extrinsic`, both signed or unsigned.\n * @param txAdditionalSigned Optionally collect types for given\n * `additionalSigned` part of signedExtensions.\n * @returns Encoded `Proof`\n */\n getProofForExtrinsic: (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => Uint8Array\n\n /**\n * Get proof for `ExtrinsicPayload` parts.\n *\n * @param callData Call data of the transaction. It has to be\n * bare; i.e.\n * without prepended compact length.\n * @param includedInExtrinsic Extra part of the signed extensions, all of\n * them concatenated.\n * @param includedInSignedData Additional signed part of the signed\n * extensions, all of them concatenated.\n * @returns Encoded `Proof`\n */\n getProofForExtrinsicParts: (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => Uint8Array\n\n /**\n * Get proof for `ExtrinsicPayload`.\n *\n * @param extrinsicPayload Call data, extra part of signedExtensions and\n * additional signed part of signedExtensions\n * concatenated. It has to be bare; i.e. without\n * prepended compact length.\n * @returns Encoded `Proof`\n */\n getProofForExtrinsicPayload: (\n extrinsicPayload: Uint8Array | HexString,\n ) => Uint8Array\n}\n\nexport const merkleizeMetadata = (\n metadataBytes: Uint8Array | HexString,\n info: ExtraInfo,\n): MetadataMerkleizer => {\n const metadata = getMetadata(metadataBytes)\n\n const definitions = new Map<number, LookupValue>(\n metadata.lookup.map((value) => [value.id, value]),\n )\n const accessibleTypes = getAccessibleTypes(metadata, definitions)\n const getPrimitive = (frameId: number): ScalePrimitive[\"tag\"] | null => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n\n if (tag === \"primitive\") return value.tag\n\n if ((tag !== \"composite\" && tag !== \"tuple\") || value.length > 1)\n throw new Error(\"The provided definition doesn't map to a primitive\")\n\n return value.length === 0\n ? null // signals `void`\n : getPrimitive(tag === \"tuple\" ? value[0] : value[0].type)\n }\n\n const getTypeRef = (frameId: number): TypeRef => {\n const { def } = definitions.get(frameId)!\n\n if (def.tag === \"primitive\") return { tag: def.value.tag, value: undefined }\n\n if (def.tag === \"compact\") {\n const primitive = getPrimitive(def.value)\n const tag = compactTypeRefs[primitive as \"u8\"]\n if (!tag) throw new Error(\"Invalid primitive for Compact\")\n return { tag, value: undefined }\n }\n\n return accessibleTypes.has(frameId)\n ? { tag: \"perId\", value: accessibleTypes.get(frameId)! }\n : { tag: \"void\", value: undefined }\n }\n\n const extrinsic: ExtrinsicMetadata = {\n version: metadata.extrinsic.version,\n addressTy: getTypeRef(metadata.extrinsic.address),\n callTy: getTypeRef(metadata.extrinsic.call),\n signatureTy: getTypeRef(metadata.extrinsic.signature),\n signedExtensions: metadata.extrinsic.signedExtensions.map((se) => ({\n identifier: se.identifier,\n includedInExtrinsic: getTypeRef(se.type),\n includedInSignedData: getTypeRef(se.additionalSigned),\n })),\n }\n\n const lookup = getLookup(\n definitions,\n accessibleTypes,\n getTypeRef,\n getPrimitive,\n )\n const lookupEncoded = lookup.map(lookupType.enc)\n\n let hashTree: Array<Uint8Array> | undefined\n const getHashTree = (): Array<Uint8Array> => {\n if (hashTree) return hashTree\n\n if (!lookupEncoded.length) return (hashTree = [new Uint8Array(32).fill(0)])\n\n hashTree = new Array(lookupEncoded.length * 2 - 1)\n\n let leavesStartIdx = lookupEncoded.length - 1\n for (let i = 0; i < lookupEncoded.length; i++)\n hashTree[leavesStartIdx + i] = Blake3256(lookupEncoded[i])\n\n for (let i = hashTree.length - 2; i > 0; i -= 2)\n hashTree[(i - 1) / 2] = Blake3256(\n mergeUint8([hashTree[i], hashTree[i + 1]]),\n )\n\n return hashTree\n }\n\n let digested: undefined | Uint8Array\n const digest = () => {\n if (digested) return digested\n const rootLookupHash = getHashTree()[0]\n\n const digest: MetadataDigest = {\n tag: \"V1\",\n value: {\n typeInformationTreeRoot: rootLookupHash,\n extrinsicMetadataHash: Blake3256(extrinsicMetadata.enc(extrinsic)),\n ...info,\n },\n }\n\n return (digested = Blake3256(metadataDigest.enc(digest)))\n }\n\n const generateProof = (knownIndexes: number[]) => {\n const proofData = getProofData(lookupEncoded, knownIndexes)\n\n const hashTree = getHashTree()\n const proofs = proofData.proofIdxs.map((idx) => hashTree[idx])\n\n return mergeUint8([\n compact.enc(proofData.leaves.length),\n ...proofData.leaves,\n compact.enc(proofData.leafIdxs.length),\n ...proofData.leafIdxs.map((x) => u32.enc(x)),\n compact.enc(proofs.length),\n ...proofs,\n extrinsicMetadata.enc(extrinsic),\n extraInfo.enc(info),\n ])\n }\n\n const getProofForExtrinsicPayload = (\n extrinsicPayload: Uint8Array | HexString,\n ) => {\n const typeRefs: Array<TypeRef> = [\n extrinsic.callTy,\n ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),\n ...extrinsic.signedExtensions.map((x) => x.includedInSignedData),\n ]\n return generateProof(\n decodeAndCollectKnownLeafs(extrinsicPayload, typeRefs, lookup),\n )\n }\n\n const getProofForExtrinsicParts = (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => {\n const bytes = mergeUint8(\n [callData, includedInExtrinsic, includedInSignedData].map(toBytes),\n )\n return getProofForExtrinsicPayload(bytes)\n }\n\n const getProofForExtrinsic = (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => {\n let [, { version, signed }, bytes] = extrinsicDec(transaction)\n\n if (version !== extrinsic.version)\n throw new Error(\"Incorrect extrinsic version\")\n\n const typeRefs: TypeRef[] = signed\n ? [\n extrinsic.addressTy,\n extrinsic.signatureTy,\n ...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),\n extrinsic.callTy,\n ]\n : [extrinsic.callTy]\n\n if (txAdditionalSigned) {\n bytes = mergeUint8([bytes, toBytes(txAdditionalSigned)])\n typeRefs.push(\n ...extrinsic.signedExtensions.map((x) => x.includedInSignedData),\n )\n }\n\n return generateProof(decodeAndCollectKnownLeafs(bytes, typeRefs, lookup))\n }\n\n return {\n digest,\n getProofForExtrinsic,\n getProofForExtrinsicParts,\n getProofForExtrinsicPayload,\n }\n}\n","import {\n Bytes,\n Codec,\n CodecType,\n Option,\n ScaleEnum,\n Struct,\n Tuple,\n V15,\n Vector,\n _void,\n bool,\n compact,\n compactNumber,\n enhanceDecoder,\n str,\n u16,\n u32,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\n\nconst extraInfoInner = {\n specVersion: u32,\n specName: str,\n base58Prefix: u16,\n decimals: u8,\n tokenSymbol: str,\n}\nexport const extraInfo = Struct(extraInfoInner)\nexport type ExtraInfo = CodecType<typeof extraInfo>\n\nexport const hash = Bytes(32)\nexport const metadataDigest = ScaleEnum({\n V0: _void,\n V1: Struct({\n typeInformationTreeRoot: hash,\n extrinsicMetadataHash: hash,\n ...extraInfoInner,\n }),\n})\nexport type MetadataDigest = CodecType<typeof metadataDigest>\n\nexport const scalePrimitive = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n})\nexport type ScalePrimitive = CodecType<typeof scalePrimitive>\n\nexport const typeRef = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n compactU8: _void,\n compactU16: _void,\n compactU32: _void,\n compactU64: _void,\n compactU128: _void,\n compactU256: _void,\n void: _void,\n perId: compactNumber,\n})\nexport type TypeRef = CodecType<typeof typeRef>\n\nconst field = Struct({\n name: Option(str),\n ty: typeRef,\n typeName: Option(str),\n})\nexport const typeDef = ScaleEnum({\n composite: Vector(field),\n enumeration: Struct({\n name: str,\n fields: Vector(field),\n index: compactNumber,\n }),\n sequence: typeRef,\n array: Struct({\n len: u32,\n typeParam: typeRef,\n }),\n tuple: Vector(typeRef),\n bitSequence: Struct({\n numBytes: u8,\n leastSignificantBitFirst: bool,\n }),\n})\nexport type TypeDef = CodecType<typeof typeDef>\n\nexport const lookupType = Struct({\n path: Vector(str),\n typeDef: typeDef,\n typeId: compactNumber,\n})\nexport type LookupEntry = CodecType<typeof lookupType>\nexport type Lookup = Array<LookupEntry>\nexport const lookup: Codec<Lookup> = Vector(lookupType)\n\nexport const extrinsicMetadata = Struct({\n version: u8,\n addressTy: typeRef,\n callTy: typeRef,\n signatureTy: typeRef,\n signedExtensions: Vector(\n Struct({\n identifier: str,\n includedInExtrinsic: typeRef,\n includedInSignedData: typeRef,\n }),\n ),\n})\nexport type ExtrinsicMetadata = CodecType<typeof extrinsicMetadata>\nexport type LookupValue = V15[\"lookup\"] extends Array<infer T> ? T : never\n\nconst versionDecoder = enhanceDecoder(u8[1], (value) => ({\n version: value & ~(1 << 7),\n signed: !!(value & (1 << 7)),\n}))\n\nexport const extrinsicDec = Tuple.dec(\n compact[1],\n versionDecoder,\n Bytes(Infinity)[1],\n)\n\nexport const proof = Struct({\n leaves: lookup,\n leafIdxs: Vector(u32),\n proofs: Vector(hash),\n extrinsic: extrinsicMetadata,\n info: extraInfo,\n})\nexport type Proof = CodecType<typeof proof>\n","import { V15 } from \"@polkadot-api/substrate-bindings\"\nimport { LookupValue } from \"./codecs\"\n\nexport const getAccessibleTypes = (\n metadata: V15,\n definitions: Map<number, LookupValue>,\n): Map<number, number> => {\n const types = new Set<number>()\n\n const collectTypesFromId = (id: number) => {\n if (types.has(id)) return\n\n const { tag, value } = definitions.get(id)!.def\n switch (tag) {\n case \"composite\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n break\n case \"variant\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ fields }) => {\n fields.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n })\n break\n case \"tuple\":\n if (!value.length) break\n types.add(id)\n value.forEach(collectTypesFromId)\n break\n case \"sequence\":\n types.add(id)\n collectTypesFromId(value)\n break\n case \"array\":\n types.add(id)\n collectTypesFromId(value.type)\n break\n case \"bitSequence\": // bitSequence inner types are not stored\n types.add(id)\n // primitive and compact are not stored\n }\n }\n\n collectTypesFromId(metadata.extrinsic.call)\n collectTypesFromId(metadata.extrinsic.address)\n collectTypesFromId(metadata.extrinsic.signature)\n metadata.extrinsic.signedExtensions.forEach(({ type, additionalSigned }) => {\n collectTypesFromId(type)\n collectTypesFromId(additionalSigned)\n })\n\n const sortedTypes = [...types].sort((a, b) => a - b)\n return new Map(sortedTypes.map((value, idx) => [value, idx]))\n}\n","import { Lookup, LookupValue, ScalePrimitive, TypeDef, TypeRef } from \"./codecs\"\n\nconst bitSequenceBytes = {\n u8: 1,\n u16: 2,\n u32: 4,\n u64: 8,\n}\n\nconst constructTypeDef = (\n definitions: Map<number, LookupValue>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n frameId: number,\n): TypeDef[] => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n switch (tag) {\n case \"composite\":\n return [\n {\n tag,\n value: value.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n ]\n case \"variant\": {\n return value.map((v) => ({\n tag: \"enumeration\",\n value: {\n name: v.name,\n index: v.index,\n fields: v.fields.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n }))\n }\n case \"sequence\":\n return [\n {\n tag,\n value: getTypeRef(value),\n },\n ]\n case \"array\":\n return [\n {\n tag,\n value: {\n len: value.len,\n typeParam: getTypeRef(value.type),\n },\n },\n ]\n case \"tuple\":\n return [\n {\n tag,\n value: value.map(getTypeRef),\n },\n ]\n case \"bitSequence\": {\n const primitive = getPrimitive(value.bitStoreType)\n const numBytes = bitSequenceBytes[primitive as \"u8\"]\n if (!numBytes) throw new Error(\"Invalid primitive for BitSequence\")\n\n const storeOrderPath = definitions.get(value.bitOrderType)!.path\n const leastSignificantBitFirst = storeOrderPath.includes(\"Lsb0\")\n if (!leastSignificantBitFirst && !storeOrderPath.includes(\"Msb0\"))\n throw new Error(\"BitOrderType not recognized\")\n\n return [\n {\n tag: \"bitSequence\",\n value: { numBytes, leastSignificantBitFirst },\n },\n ]\n }\n }\n\n throw new Error(`FrameId(${frameId}) should have been filtered out`)\n}\n\nexport const getLookup = (\n definitions: Map<number, LookupValue>,\n accessibleTypes: Map<number, number>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n) => {\n const typeTree: Lookup = []\n ;[...accessibleTypes.entries()].forEach(([frameId, typeId]) => {\n const { path } = definitions.get(frameId)!\n constructTypeDef(definitions, getTypeRef, getPrimitive, frameId).forEach(\n (typeDef) => {\n typeTree.push({\n path,\n typeId,\n typeDef,\n })\n },\n )\n })\n\n typeTree.sort((a, b) => {\n if (a.typeId !== b.typeId) return a.typeId - b.typeId // in general\n // should only happen for variants\n if (a.typeDef.tag !== \"enumeration\" || b.typeDef.tag !== \"enumeration\")\n throw new Error(\"Found two types with same id\")\n return a.typeDef.value.index - b.typeDef.value.index\n })\n return typeTree\n}\n","import {\n Option,\n Bytes,\n metadata,\n compact,\n Tuple,\n V15,\n} from \"@polkadot-api/substrate-bindings\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\n\nconst opaqueBytes = Bytes()\nconst optionOpaque = Option(opaqueBytes)\nconst opaqueOpaqueBytes = Tuple(compact, opaqueBytes)\n\nconst getAnyMetadata = (input: Uint8Array | HexString) => {\n try {\n return metadata.dec(input)\n } catch (_) {}\n\n // comes from metadata.metadata_at_version\n try {\n return metadata.dec(optionOpaque.dec(input)!)\n } catch (_) {}\n\n // comes from state.getMetadata\n try {\n return metadata.dec(opaqueBytes.dec(input))\n } catch (_) {}\n\n // comes from metadata.metadata\n try {\n return metadata.dec(opaqueOpaqueBytes.dec(input)[1])\n } catch (_) {}\n\n throw null\n}\n\nexport const getMetadata = (input: Uint8Array | HexString): V15 => {\n try {\n const { metadata } = getAnyMetadata(input)\n if (metadata.tag !== \"v15\") throw new Error(\"Wrong metadata version\")\n return metadata.value\n } catch (e) {\n throw e || new Error(\"Unable to decode metadata\")\n }\n}\n","import { type HexString } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex } from \"@polkadot-api/utils\"\n\nexport const mergeUint8 = (inputs: Array<Uint8Array>): Uint8Array => {\n const len = inputs.length\n let totalLen = 0\n for (let i = 0; i < len; i++) totalLen += inputs[i].byteLength\n const result = new Uint8Array(totalLen)\n\n for (let idx = 0, at = 0; idx < len; idx++) {\n const current = inputs[idx]\n result.set(current, at)\n at += current.byteLength\n }\n\n return result\n}\n\nexport const toBytes = (input: Uint8Array | HexString) =>\n typeof input === \"string\" ? fromHex(input) : input\n\nexport const compactTypeRefs = {\n null: \"void\" as const,\n u8: \"compactU8\" as const,\n u16: \"compactU16\" as const,\n u32: \"compactU32\" as const,\n u64: \"compactU64\" as const,\n u128: \"compactU128\" as const,\n u256: \"compactU256\" as const,\n}\n","import {\n HexString,\n _void,\n compact,\n createDecoder,\n i128,\n i16,\n i256,\n i32,\n i64,\n i8,\n str,\n u128,\n u16,\n u256,\n u32,\n u64,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\nimport { Lookup, TypeDef, TypeRef } from \"./codecs\"\n\nconst typeRefDecoders = {\n bool: u8,\n char: u8,\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 void: _void,\n compactU8: compact,\n compactU16: compact,\n compactU32: compact,\n compactU64: compact,\n compactU128: compact,\n compactU256: compact,\n}\n\nconst innerDecodeAndCollect = (\n input: Uint8Array,\n typeRef: TypeRef,\n idToLookups: Map<number, Array<number>>,\n lookup: Lookup,\n collected: Set<number>,\n) => {\n if (typeRef.tag !== \"perId\") {\n typeRefDecoders[typeRef.tag][1](input)\n return\n }\n\n const handleTypeRef = (typeRef: TypeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, collected)\n }\n\n const lookupIdxs = idToLookups.get(typeRef.value)!\n const [currentIdx] = lookupIdxs\n const current = lookup[currentIdx]\n\n if (lookupIdxs.length === 1) collected.add(currentIdx)\n\n switch (current.typeDef.tag) {\n case \"enumeration\": {\n const selectedIdx = u8.dec(input)\n const [selected, collectedIdx] = lookupIdxs\n .map(\n (lookupIdx) =>\n [lookup[lookupIdx].typeDef, lookupIdx] as [\n TypeDef & { tag: \"enumeration\" },\n number,\n ],\n )\n .find(([x]) => x.value.index === selectedIdx)!\n collected.add(collectedIdx)\n selected.value.fields.forEach(({ ty }) => {\n handleTypeRef(ty)\n })\n break\n }\n case \"sequence\": {\n const len = compact.dec(input)\n for (let i = 0; i < len; i++) handleTypeRef(current.typeDef.value)\n break\n }\n case \"array\": {\n for (let i = 0; i < current.typeDef.value.len; i++)\n handleTypeRef(current.typeDef.value.typeParam)\n break\n }\n case \"composite\": {\n current.typeDef.value.forEach((x) => {\n handleTypeRef(x.ty)\n })\n break\n }\n case \"tuple\": {\n current.typeDef.value.forEach(handleTypeRef)\n break\n }\n case \"bitSequence\":\n throw new Error(\"bitSequence is not supported\")\n }\n}\n\nexport const decodeAndCollectKnownLeafs = (\n data: Uint8Array | HexString,\n typeRefs: Array<TypeRef>,\n lookup: Lookup,\n): Array<number> => {\n let input = new Uint8Array()\n createDecoder((_input) => {\n input = _input\n })(data)\n\n const idToLookups = new Map<number, number[]>()\n lookup.forEach((lookup, idx) => {\n const arr = idToLookups.get(lookup.typeId)\n if (arr) arr.push(idx)\n else idToLookups.set(lookup.typeId, [idx])\n })\n\n const result = new Set<number>()\n typeRefs.forEach((typeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, result)\n })\n\n return [...result].sort((a, b) => a - b)\n}\n","const getLevelFromIdx = (idx: number) => Math.log2(idx + 1) | 0\nconst getAncestorIdx = (from: number, nLevels: number) =>\n ((from + 1) >> nLevels) - 1\n\nexport function getProofData(\n leaves: Array<Uint8Array>,\n knownLeavesIdxs: Array<number>,\n) {\n const knownLeaves = knownLeavesIdxs.map((idx) => leaves[idx])\n\n const startingIdx = leaves.length - 1\n const leafIdxs = knownLeavesIdxs.map((idx) => startingIdx + idx)\n\n const proofIdxs: Array<number> = []\n if (leafIdxs.length) {\n const nLevels = getLevelFromIdx(leafIdxs.at(-1)!)\n const splitPosition = Math.pow(2, nLevels) - 1\n const splitIdx = leafIdxs.findIndex((x) => x >= splitPosition)\n if (splitIdx > 0) {\n leafIdxs.unshift(...leafIdxs.splice(splitIdx))\n knownLeaves.unshift(...knownLeaves.splice(splitIdx))\n }\n }\n\n let targetIdx = 0\n const traverse = (nodeIdx: number): void => {\n if (targetIdx === leafIdxs.length) {\n proofIdxs.push(nodeIdx)\n return\n }\n\n const target = leafIdxs[targetIdx]\n if (target === nodeIdx) {\n ++targetIdx\n return\n }\n\n const currentLevel = getLevelFromIdx(nodeIdx)\n const targetLevel = getLevelFromIdx(target)\n\n if (nodeIdx !== getAncestorIdx(target, targetLevel - currentLevel)) {\n proofIdxs.push(nodeIdx)\n return\n }\n\n const leftSon = 2 * nodeIdx + 1\n traverse(leftSon)\n traverse(leftSon + 1)\n }\n traverse(0)\n\n return {\n leaves: knownLeaves,\n leafIdxs,\n proofIdxs,\n }\n}\n"],"mappings":"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","names":["src_exports","__export","extraInfo","extrinsicMetadata","hash","lookup","lookupType","merkleizeMetadata","proof","__toCommonJS","import_substrate_bindings","import_substrate_bindings","extraInfoInner","extraInfo","hash","metadataDigest","scalePrimitive","typeRef","field","typeDef","lookupType","lookup","extrinsicMetadata","versionDecoder","value","extrinsicDec","proof","getAccessibleTypes","metadata","definitions","types","collectTypesFromId","id","tag","value","type","fields","additionalSigned","sortedTypes","a","b","idx","bitSequenceBytes","constructTypeDef","definitions","getTypeRef","getPrimitive","frameId","tag","value","f","v","primitive","numBytes","storeOrderPath","leastSignificantBitFirst","getLookup","accessibleTypes","typeTree","typeId","path","typeDef","a","b","import_substrate_bindings","opaqueBytes","optionOpaque","opaqueOpaqueBytes","getAnyMetadata","input","getMetadata","metadata","e","import_utils","mergeUint8","inputs","len","totalLen","i","result","idx","at","current","toBytes","input","compactTypeRefs","import_substrate_bindings","typeRefDecoders","innerDecodeAndCollect","input","typeRef","idToLookups","lookup","collected","handleTypeRef","lookupIdxs","currentIdx","current","selectedIdx","selected","collectedIdx","lookupIdx","x","ty","len","i","decodeAndCollectKnownLeafs","data","typeRefs","_input","idx","arr","result","a","b","getLevelFromIdx","idx","getAncestorIdx","from","nLevels","getProofData","leaves","knownLeavesIdxs","knownLeaves","startingIdx","leafIdxs","proofIdxs","splitPosition","splitIdx","x","targetIdx","traverse","nodeIdx","target","currentLevel","targetLevel","leftSon","merkleizeMetadata","metadataBytes","info","metadata","getMetadata","definitions","value","accessibleTypes","getAccessibleTypes","getPrimitive","frameId","tag","getTypeRef","def","primitive","compactTypeRefs","extrinsic","se","lookup","getLookup","lookupEncoded","lookupType","hashTree","getHashTree","leavesStartIdx","i","mergeUint8","digested","digest","extrinsicMetadata","metadataDigest","generateProof","knownIndexes","proofData","getProofData","proofs","idx","x","extraInfo","getProofForExtrinsicPayload","extrinsicPayload","typeRefs","decodeAndCollectKnownLeafs","transaction","txAdditionalSigned","version","signed","bytes","extrinsicDec","toBytes","callData","includedInExtrinsic","includedInSignedData"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polkadot-api/merkleize-metadata",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "author": "Carlo Sala (https://github.com/carlosala)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -35,7 +35,7 @@
35
35
  "dist"
36
36
  ],
37
37
  "dependencies": {
38
- "@polkadot-api/substrate-bindings": "0.5.0",
38
+ "@polkadot-api/substrate-bindings": "0.6.0",
39
39
  "@polkadot-api/utils": "0.1.0"
40
40
  },
41
41
  "scripts": {