@canton-network/core-tx-visualizer 1.3.2 → 1.4.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/hashing_scheme_v2.d.ts +2 -0
- package/dist/hashing_scheme_v2.d.ts.map +1 -1
- package/dist/index.cjs +18 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -21
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { PreparedTransaction } from '@canton-network/core-ledger-proto';
|
|
2
|
+
import { Value } from '@canton-network/core-ledger-proto';
|
|
2
3
|
export declare function encodeString(value?: string): Promise<Uint8Array>;
|
|
4
|
+
export declare function encodeValue(value: Value): Promise<Uint8Array>;
|
|
3
5
|
export declare function computePreparedTransaction(preparedTransaction: PreparedTransaction): Promise<Uint8Array>;
|
|
4
6
|
export declare function computeSha256CantonHash(purpose: number, bytes: Uint8Array): Promise<Uint8Array<ArrayBufferLike>>;
|
|
5
7
|
export declare function computeMultiHashForTopology(hashes: Uint8Array[]): Promise<Uint8Array<ArrayBufferLike>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashing_scheme_v2.d.ts","sourceRoot":"","sources":["../src/hashing_scheme_v2.ts"],"names":[],"mappings":"AAGA,OAAO,EAOH,mBAAmB,EACtB,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"hashing_scheme_v2.d.ts","sourceRoot":"","sources":["../src/hashing_scheme_v2.ts"],"names":[],"mappings":"AAGA,OAAO,EAOH,mBAAmB,EACtB,MAAM,mCAAmC,CAAA;AAO1C,OAAO,EAKH,KAAK,EACR,MAAM,mCAAmC,CAAA;AAiC1C,wBAAsB,YAAY,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAG1E;AAkND,wBAAsB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAyGnE;AAiJD,wBAAsB,0BAA0B,CAC5C,mBAAmB,EAAE,mBAAmB,GACzC,OAAO,CAAC,UAAU,CAAC,CAErB;AAED,wBAAsB,uBAAuB,CACzC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,UAAU,wCAQpB;AAED,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,wCAerE"}
|
package/dist/index.cjs
CHANGED
|
@@ -506,38 +506,35 @@ var validateAuthorizedPartyIds = (preparedTransaction, authorizedPartyIds) => {
|
|
|
506
506
|
preparedTx = preparedTransaction;
|
|
507
507
|
}
|
|
508
508
|
const results = {};
|
|
509
|
+
const updateParty = (party, location) => {
|
|
510
|
+
if (!results[party]) {
|
|
511
|
+
results[party] = {
|
|
512
|
+
isAuthorized: authorizedPartyIds.includes(party),
|
|
513
|
+
locations: []
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
results[party].locations.push(location);
|
|
517
|
+
};
|
|
509
518
|
preparedTx.metadata?.submitterInfo?.actAs.forEach((party) => {
|
|
510
|
-
|
|
511
|
-
isAuthorized: authorizedPartyIds.includes(party),
|
|
512
|
-
locations: [
|
|
513
|
-
...results[party].locations,
|
|
514
|
-
"metadata.submitterInfo.actAs"
|
|
515
|
-
]
|
|
516
|
-
};
|
|
519
|
+
updateParty(party, "metadata.submitterInfo.actAs");
|
|
517
520
|
});
|
|
518
521
|
preparedTx.transaction?.nodes.forEach((node) => {
|
|
519
522
|
if (node.versionedNode.oneofKind === "v1") {
|
|
520
523
|
if (node.versionedNode.v1.nodeType.oneofKind === "create") {
|
|
521
524
|
node.versionedNode.v1.nodeType.create.signatories.forEach(
|
|
522
525
|
(party) => {
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
`transaction.nodes.${node.nodeId}.create.signatories`
|
|
528
|
-
]
|
|
529
|
-
};
|
|
526
|
+
updateParty(
|
|
527
|
+
party,
|
|
528
|
+
`transaction.nodes.${node.nodeId}.create.signatories`
|
|
529
|
+
);
|
|
530
530
|
}
|
|
531
531
|
);
|
|
532
532
|
node.versionedNode.v1.nodeType.create.stakeholders.forEach(
|
|
533
533
|
(party) => {
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
`transaction.nodes.${node.nodeId}.create.stakeholders`
|
|
539
|
-
]
|
|
540
|
-
};
|
|
534
|
+
updateParty(
|
|
535
|
+
party,
|
|
536
|
+
`transaction.nodes.${node.nodeId}.create.stakeholders`
|
|
537
|
+
);
|
|
541
538
|
}
|
|
542
539
|
);
|
|
543
540
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts","../src/hashing_scheme_v2.ts","../src/index.ts"],"names":["HashingSchemeVersion","seed","PreparedTransaction","TopologyTransaction"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/** Take a base64 encoded string and return a Uint8Array of the decoded bytes */\nexport function fromBase64(b64: string): Uint8Array {\n const binaryString = atob(b64)\n const len = binaryString.length\n const bytes = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i)\n }\n return bytes\n}\n\n/** Take a byte buffer (Uint8Array) and encode it into a base64 string */\nexport function toBase64(data: Uint8Array): string {\n let binaryString = ''\n const len = data.byteLength\n for (let i = 0; i < len; i++) {\n binaryString += String.fromCharCode(data[i])\n }\n return btoa(binaryString)\n}\n\n/** Take a byte buffer (Uint8Array) and encode it into a hex string */\nexport function toHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('')\n}\n\nexport function fromHex(hex: string): Uint8Array {\n if (hex.length % 2 !== 0) {\n throw new Error('Invalid hex string length')\n }\n\n const bytes = new Uint8Array(hex.length / 2)\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16)\n }\n return bytes\n}\n\nexport async function sha256(\n message: string | Uint8Array\n): Promise<Uint8Array> {\n const msg =\n typeof message === 'string'\n ? new TextEncoder().encode(message)\n : message\n\n return crypto.subtle\n .digest('SHA-256', new Uint8Array(msg))\n .then((hash) => new Uint8Array(hash))\n}\n\n/** Utility to concatenate byte arrays or single bytes */\nexport async function mkByteArray(\n ...args: (number | Uint8Array)[]\n): Promise<Uint8Array> {\n const normalizedArgs: Uint8Array[] = args.map((arg) => {\n if (typeof arg === 'number') {\n return new Uint8Array([arg])\n } else {\n return arg\n }\n })\n\n let totalLength = 0\n normalizedArgs.forEach((arg) => {\n totalLength += arg.length\n })\n\n const mergedArray = new Uint8Array(totalLength)\n let offset = 0\n\n normalizedArgs.forEach((arg) => {\n mergedArray.set(arg, offset)\n offset += arg.length\n })\n\n return mergedArray\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n DamlTransaction,\n DamlTransaction_Node,\n DamlTransaction_NodeSeed,\n HashingSchemeVersion,\n Metadata,\n Metadata_InputContract,\n PreparedTransaction,\n} from '@canton-network/core-ledger-proto'\nimport {\n Create,\n Exercise,\n Fetch,\n Rollback,\n} from '@canton-network/core-ledger-proto'\nimport {\n GenMap_Entry,\n Identifier,\n RecordField,\n TextMap_Entry,\n Value,\n} from '@canton-network/core-ledger-proto'\nimport { mkByteArray, sha256, toHex } from './utils.js'\n\n// Hash purpose reserved for prepared transaction\nconst PREPARED_TRANSACTION_HASH_PURPOSE = Uint8Array.from([\n 0x00, 0x00, 0x00, 0x30,\n])\n\nconst NODE_ENCODING_VERSION = Uint8Array.from([0x01])\n\nconst HASHING_SCHEME_VERSION = Uint8Array.from([HashingSchemeVersion.V2])\n\nasync function encodeBool(value: boolean): Promise<Uint8Array> {\n return new Uint8Array([value ? 1 : 0])\n}\n\nasync function encodeInt32(value: number): Promise<Uint8Array> {\n const buffer = new ArrayBuffer(4)\n const view = new DataView(buffer)\n view.setInt32(0, value, false) // true for little-endian\n return new Uint8Array(buffer)\n}\n\nasync function encodeInt64(\n value: bigint | number | undefined\n): Promise<Uint8Array> {\n const num = typeof value === 'bigint' ? value : BigInt(value || 0)\n const buffer = new ArrayBuffer(8)\n const view = new DataView(buffer)\n view.setBigInt64(0, num, false) // true for little-endian\n return new Uint8Array(buffer)\n}\n\nexport async function encodeString(value: string = ''): Promise<Uint8Array> {\n const utf8Bytes = new TextEncoder().encode(value)\n return encodeBytes(utf8Bytes)\n}\n\nasync function encodeBytes(value: Uint8Array): Promise<Uint8Array> {\n const length = await encodeInt32(value.length)\n return mkByteArray(length, value)\n}\n\nasync function encodeHash(value: Uint8Array): Promise<Uint8Array> {\n return value\n}\n\nfunction encodeHexString(value: string = ''): Promise<Uint8Array> {\n // Convert hex string to Uint8Array\n const bytes = new Uint8Array(value.length / 2)\n for (let i = 0; i < value.length; i += 2) {\n bytes[i / 2] = parseInt(value.slice(i, i + 2), 16)\n }\n return encodeBytes(bytes)\n}\n\n// Maybe suspicious?\nasync function encodeOptional<T>(\n value: T | undefined | null,\n encodeFn: (arg: T) => Promise<Uint8Array>\n): Promise<Uint8Array> {\n if (value === undefined || value === null) {\n return new Uint8Array([0]) // Return empty array for undefined fields\n } else {\n return mkByteArray(1, await encodeFn(value))\n }\n}\n\n// Maybe suspicious?\nasync function encodeProtoOptional<T, P extends object>(\n parentValue: P,\n fieldName: keyof P,\n value: T,\n encodeFn: (value: T) => Promise<Uint8Array>\n): Promise<Uint8Array> {\n if (parentValue && parentValue[fieldName] !== undefined) {\n return mkByteArray(1, await encodeFn(value))\n } else {\n return new Uint8Array([0]) // Return empty array for undefined fields\n }\n}\n\nasync function encodeRepeated<T>(\n values: T[] = [],\n encodeFn: (value: T) => Promise<Uint8Array>\n): Promise<Uint8Array> {\n const length = await encodeInt32(values.length)\n const encodedValues = await Promise.all(values.map(encodeFn))\n return mkByteArray(length, ...encodedValues)\n}\n\nfunction findSeed(\n nodeId: string,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Uint8Array | undefined {\n const seed = nodeSeeds.find(\n (seed) => seed.nodeId.toString() === nodeId\n )?.seed\n\n return seed\n}\n\nasync function encodeIdentifier(identifier: Identifier): Promise<Uint8Array> {\n return mkByteArray(\n await encodeString(identifier.packageId),\n await encodeRepeated(identifier.moduleName.split('.'), encodeString),\n await encodeRepeated(identifier.entityName.split('.'), encodeString)\n )\n}\n\nasync function encodeMetadata(metadata: Metadata): Promise<Uint8Array> {\n return mkByteArray(\n Uint8Array.from([0x01]),\n await encodeRepeated(metadata.submitterInfo?.actAs, encodeString),\n await encodeString(metadata.submitterInfo?.commandId),\n await encodeString(metadata.transactionUuid),\n await encodeInt32(metadata.mediatorGroup),\n await encodeString(metadata.synchronizerId),\n await encodeProtoOptional(\n metadata,\n 'minLedgerEffectiveTime',\n metadata.minLedgerEffectiveTime,\n encodeInt64\n ),\n await encodeProtoOptional(\n metadata,\n 'maxLedgerEffectiveTime',\n metadata.maxLedgerEffectiveTime,\n encodeInt64\n ),\n await encodeInt64(metadata.preparationTime),\n await encodeRepeated(metadata.inputContracts, encodeInputContract)\n )\n}\n\nasync function encodeCreateNode(\n create: Create | undefined,\n nodeId: string,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return create\n ? mkByteArray(\n NODE_ENCODING_VERSION,\n await encodeString(create.lfVersion),\n 0 /** Create node tag */,\n await encodeOptional(findSeed(nodeId, nodeSeeds), encodeHash),\n await encodeHexString(create.contractId),\n await encodeString(create.packageName),\n await encodeIdentifier(create.templateId!),\n await encodeValue(create.argument!),\n await encodeRepeated(create.signatories, encodeString),\n await encodeRepeated(create.stakeholders, encodeString)\n )\n : mkByteArray()\n}\n\nasync function encodeExerciseNode(\n exercise: Exercise,\n nodeId: string,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return mkByteArray(\n NODE_ENCODING_VERSION,\n await encodeString(exercise.lfVersion),\n 1 /** Exercise node tag */,\n await encodeHash(findSeed(nodeId, nodeSeeds)!),\n await encodeHexString(exercise.contractId),\n await encodeString(exercise.packageName),\n await encodeIdentifier(exercise.templateId!),\n await encodeRepeated(exercise.signatories, encodeString),\n await encodeRepeated(exercise.stakeholders, encodeString),\n await encodeRepeated(exercise.actingParties, encodeString),\n await encodeProtoOptional(\n exercise,\n 'interfaceId',\n exercise.interfaceId!,\n encodeIdentifier\n ),\n await encodeString(exercise.choiceId),\n await encodeValue(exercise.chosenValue!),\n await encodeBool(exercise.consuming),\n await encodeProtoOptional(\n exercise,\n 'exerciseResult',\n exercise.exerciseResult!,\n encodeValue\n ),\n await encodeRepeated(exercise.choiceObservers, encodeString),\n await encodeRepeated(\n exercise.children,\n encodeNodeId(nodesDict, nodeSeeds)\n )\n )\n}\n\nasync function encodeFetchNode(fetch: Fetch): Promise<Uint8Array> {\n return mkByteArray(\n NODE_ENCODING_VERSION,\n await encodeString(fetch.lfVersion),\n 2 /** Fetch node tag */,\n await encodeHexString(fetch.contractId),\n await encodeString(fetch.packageName),\n await encodeIdentifier(fetch.templateId!),\n await encodeRepeated(fetch.signatories, encodeString),\n await encodeRepeated(fetch.stakeholders, encodeString),\n await encodeProtoOptional(\n fetch,\n 'interfaceId',\n fetch.interfaceId!,\n encodeIdentifier\n ),\n await encodeRepeated(fetch.actingParties, encodeString)\n )\n}\n\nasync function encodeRollbackNode(\n rollback: Rollback,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return mkByteArray(\n NODE_ENCODING_VERSION,\n 3 /** Rollback node tag */,\n await encodeRepeated(\n rollback.children,\n encodeNodeId(nodesDict, nodeSeeds)\n )\n )\n}\n\nasync function encodeInputContract(contract: Metadata_InputContract) {\n if (contract.contract.oneofKind === 'v1')\n return mkByteArray(\n await encodeInt64(contract.createdAt),\n await sha256(\n await encodeCreateNode(\n contract.contract.v1,\n 'unused_node_id',\n []\n )\n )\n )\n else throw new Error('Unsupported contract version')\n}\n\nasync function encodeValue(value: Value): Promise<Uint8Array> {\n if (value.sum.oneofKind === 'unit') {\n return Uint8Array.from([0]) // Unit value\n } else if (value.sum.oneofKind === 'bool') {\n return mkByteArray(\n Uint8Array.from([0x01]),\n await encodeBool(value.sum.bool)\n )\n } else if (value.sum.oneofKind === 'int64') {\n return mkByteArray(\n Uint8Array.from([0x02]),\n await encodeInt64(parseInt(value.sum.int64))\n )\n } else if (value.sum.oneofKind === 'numeric') {\n return mkByteArray(\n Uint8Array.from([0x03]),\n await encodeString(value.sum.numeric)\n )\n } else if (value.sum.oneofKind === 'timestamp') {\n return mkByteArray(\n Uint8Array.from([0x04]),\n await encodeInt64(BigInt(value.sum.timestamp))\n )\n } else if (value.sum.oneofKind === 'date') {\n return mkByteArray(\n Uint8Array.from([0x05]),\n await encodeInt32(value.sum.date)\n )\n } else if (value.sum.oneofKind === 'party') {\n return mkByteArray(\n Uint8Array.from([0x06]),\n await encodeString(value.sum.party)\n )\n } else if (value.sum.oneofKind === 'text') {\n return mkByteArray(\n Uint8Array.from([0x07]),\n await encodeString(value.sum.text)\n )\n } else if (value.sum.oneofKind === 'contractId') {\n return mkByteArray(\n Uint8Array.from([0x08]),\n await encodeHexString(value.sum.contractId)\n )\n } else if (value.sum.oneofKind === 'optional') {\n return mkByteArray(\n Uint8Array.from([0x09]),\n await encodeProtoOptional(\n value.sum.optional,\n 'value',\n value.sum.optional.value as Value,\n encodeValue\n )\n )\n } else if (value.sum.oneofKind === 'list') {\n return mkByteArray(\n Uint8Array.from([0x0a]),\n await encodeRepeated(value.sum.list.elements, encodeValue)\n )\n } else if (value.sum.oneofKind === 'textMap') {\n return mkByteArray(\n Uint8Array.from([0x0b]),\n await encodeRepeated(value.sum.textMap?.entries, encodeTextMapEntry)\n )\n } else if (value.sum.oneofKind === 'record') {\n return mkByteArray(\n Uint8Array.from([0x0c]),\n await encodeProtoOptional(\n value.sum.record,\n 'recordId',\n value.sum.record.recordId!,\n encodeIdentifier\n ),\n await encodeRepeated(value.sum.record.fields, encodeRecordField)\n )\n } else if (value.sum.oneofKind === 'variant') {\n return mkByteArray(\n Uint8Array.from([0x0d]),\n await encodeProtoOptional(\n value.sum.variant,\n 'variantId',\n value.sum.variant.variantId!,\n encodeIdentifier\n ),\n await encodeString(value.sum.variant.constructor),\n await encodeValue(value.sum.variant.value!)\n )\n } else if (value.sum.oneofKind === 'enum') {\n return mkByteArray(\n Uint8Array.from([0x0e]),\n await encodeProtoOptional(\n value.sum.enum,\n 'enumId',\n value.sum.enum.enumId!,\n encodeIdentifier\n ),\n await encodeString(value.sum.enum.constructor)\n )\n } else if (value.sum.oneofKind === 'genMap') {\n return mkByteArray(\n Uint8Array.from([0x0f]),\n await encodeRepeated(value.sum.genMap?.entries, encodeGenMapEntry)\n )\n }\n\n throw new Error('Unsupported value type: ' + JSON.stringify(value))\n}\n\nasync function encodeTextMapEntry(entry: TextMap_Entry): Promise<Uint8Array> {\n return mkByteArray(\n await encodeString(entry.key),\n await encodeValue(entry.value!)\n )\n}\n\nasync function encodeRecordField(field: RecordField): Promise<Uint8Array> {\n return mkByteArray(\n await encodeOptional(field.label, encodeString),\n await encodeValue(field.value!)\n )\n}\n\nasync function encodeGenMapEntry(entry: GenMap_Entry): Promise<Uint8Array> {\n return mkByteArray(\n await encodeValue(entry.key!),\n await encodeValue(entry.value!)\n )\n}\n\nfunction encodeNodeId(\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): (nodeId: string) => Promise<Uint8Array> {\n return async (nodeId: string): Promise<Uint8Array> => {\n const node = nodesDict[nodeId]\n if (!node) {\n throw new Error(`Node with ID ${nodeId} not found in transaction`)\n }\n\n const encodedNode = await encodeNode(node, nodesDict, nodeSeeds)\n return sha256(encodedNode)\n }\n}\n\nasync function encodeNode(\n node: DamlTransaction_Node,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n if (node.versionedNode.oneofKind === 'v1') {\n if (node.versionedNode.v1.nodeType.oneofKind === 'create') {\n return encodeCreateNode(\n node.versionedNode.v1.nodeType.create,\n node.nodeId,\n nodeSeeds\n )\n } else if (node.versionedNode.v1.nodeType.oneofKind === 'exercise') {\n return encodeExerciseNode(\n node.versionedNode.v1.nodeType.exercise,\n node.nodeId,\n nodesDict,\n nodeSeeds\n )\n } else if (node.versionedNode.v1.nodeType.oneofKind === 'fetch') {\n return encodeFetchNode(node.versionedNode.v1.nodeType.fetch)\n } else if (node.versionedNode.v1.nodeType.oneofKind === 'rollback') {\n return encodeRollbackNode(\n node.versionedNode.v1.nodeType.rollback,\n nodesDict,\n nodeSeeds\n )\n }\n\n throw new Error('Unsupported node type')\n } else {\n throw new Error(`Unsupported node version`)\n }\n}\n\nfunction createNodesDict(\n preparedTransaction: PreparedTransaction\n): Record<string, DamlTransaction_Node> {\n const nodesDict: Record<string, DamlTransaction_Node> = {}\n const nodes = preparedTransaction.transaction?.nodes || []\n for (const node of nodes) {\n nodesDict[node.nodeId] = node\n }\n return nodesDict\n}\n\nasync function encodeTransaction(\n transaction: DamlTransaction,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return mkByteArray(\n await encodeString(transaction.version),\n await encodeRepeated(\n transaction.roots,\n encodeNodeId(nodesDict, nodeSeeds)\n )\n )\n}\n\nasync function hashTransaction(\n transaction: DamlTransaction,\n nodesDict: Record<string, DamlTransaction_Node>\n): Promise<Uint8Array> {\n const encodedTransaction = await encodeTransaction(\n transaction,\n nodesDict,\n transaction.nodeSeeds\n )\n\n const hash = await sha256(\n await mkByteArray(PREPARED_TRANSACTION_HASH_PURPOSE, encodedTransaction)\n )\n\n return hash\n}\n\nasync function hashMetadata(metadata: Metadata): Promise<Uint8Array> {\n const hash = await sha256(\n await mkByteArray(\n PREPARED_TRANSACTION_HASH_PURPOSE,\n await encodeMetadata(metadata)\n )\n )\n\n return hash\n}\n\nasync function encodePreparedTransaction(\n preparedTransaction: PreparedTransaction\n): Promise<Uint8Array> {\n const nodesDict = createNodesDict(preparedTransaction)\n\n const transactionHash = await hashTransaction(\n preparedTransaction.transaction!,\n nodesDict\n )\n const metadataHash = await hashMetadata(preparedTransaction.metadata!)\n\n return mkByteArray(\n PREPARED_TRANSACTION_HASH_PURPOSE,\n HASHING_SCHEME_VERSION,\n transactionHash,\n metadataHash\n )\n}\n\nexport async function computePreparedTransaction(\n preparedTransaction: PreparedTransaction\n): Promise<Uint8Array> {\n return sha256(await encodePreparedTransaction(preparedTransaction))\n}\n\nexport async function computeSha256CantonHash(\n purpose: number,\n bytes: Uint8Array\n) {\n const encodedPurpose = await encodeInt32(purpose)\n\n const hashInput = await mkByteArray(encodedPurpose, bytes)\n const hashBytes = await sha256(hashInput)\n const multiprefix = new Uint8Array([0x12, 0x20])\n return mkByteArray(multiprefix, hashBytes)\n}\n\nexport async function computeMultiHashForTopology(hashes: Uint8Array[]) {\n const sortedHashes = hashes\n .slice()\n .sort((a, b) => toHex(a).localeCompare(toHex(b)))\n\n const numHashesBytes = await encodeInt32(sortedHashes.length)\n\n const concatenatedHashes = [numHashesBytes]\n\n for (const h of sortedHashes) {\n const lengthBytes = await encodeInt32(h.length)\n concatenatedHashes.push(lengthBytes, h)\n }\n\n return mkByteArray(...concatenatedHashes)\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n PreparedTransaction,\n TopologyTransaction,\n} from '@canton-network/core-ledger-proto'\nimport { computePreparedTransaction } from './hashing_scheme_v2.js'\nimport { fromBase64, toBase64, toHex } from './utils.js'\nexport {\n computeSha256CantonHash,\n computeMultiHashForTopology,\n} from './hashing_scheme_v2.js'\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Decodes a base64 encoded prepared transaction into a well-typed data model, generated directly from Protobuf definitions.\n *\n * @param preparedTransaction - The prepared transaction in base64 format\n * @returns The decoded prepared transaction\n */\nexport const decodePreparedTransaction = (\n preparedTransaction: string\n): PreparedTransaction => {\n const bytes = fromBase64(preparedTransaction)\n return PreparedTransaction.fromBinary(bytes)\n}\n\nexport const decodeTopologyTransaction = (\n topologyTx: string\n): TopologyTransaction => {\n const bytes = fromBase64(topologyTx)\n return TopologyTransaction.fromBinary(bytes)\n}\n\n/**\n * Computes the hash of a prepared transaction.\n *\n * @param preparedTransaction - The prepared transaction to hash\n * @param format - The format of the output hash (base64 or hex)\n * @returns The computed hash in the specified format\n */\nexport const hashPreparedTransaction = async (\n preparedTransaction: string | PreparedTransaction,\n format: 'base64' | 'hex' = 'base64'\n): Promise<string> => {\n let preparedTx: PreparedTransaction\n\n if (typeof preparedTransaction === 'string') {\n preparedTx = decodePreparedTransaction(preparedTransaction)\n } else {\n preparedTx = preparedTransaction\n }\n\n const hash = await computePreparedTransaction(preparedTx)\n\n switch (format) {\n case 'base64':\n return toBase64(hash)\n case 'hex':\n return toHex(hash)\n }\n}\n\ntype ValidationResult = Record<\n string,\n {\n isAuthorized: boolean\n locations: string[]\n }\n>\n\nexport const validateAuthorizedPartyIds = (\n preparedTransaction: string | PreparedTransaction,\n authorizedPartyIds: string[]\n): ValidationResult => {\n let preparedTx: PreparedTransaction\n\n if (typeof preparedTransaction === 'string') {\n preparedTx = decodePreparedTransaction(preparedTransaction)\n } else {\n preparedTx = preparedTransaction\n }\n\n const results: ValidationResult = {}\n preparedTx.metadata?.submitterInfo?.actAs.forEach((party) => {\n results[party] = {\n isAuthorized: authorizedPartyIds.includes(party),\n locations: [\n ...results[party].locations,\n 'metadata.submitterInfo.actAs',\n ],\n }\n })\n\n // then check transaction nodes\n preparedTx.transaction?.nodes.forEach((node) => {\n if (node.versionedNode.oneofKind === 'v1') {\n if (node.versionedNode.v1.nodeType.oneofKind === 'create') {\n node.versionedNode.v1.nodeType.create.signatories.forEach(\n (party) => {\n results[party] = {\n isAuthorized: authorizedPartyIds.includes(party),\n locations: [\n ...results[party].locations,\n `transaction.nodes.${node.nodeId}.create.signatories`,\n ],\n }\n }\n )\n\n node.versionedNode.v1.nodeType.create.stakeholders.forEach(\n (party) => {\n results[party] = {\n isAuthorized: authorizedPartyIds.includes(party),\n locations: [\n ...results[party].locations,\n `transaction.nodes.${node.nodeId}.create.stakeholders`,\n ],\n }\n }\n )\n }\n\n if (node.versionedNode.v1.nodeType.oneofKind === 'exercise') {\n throw new Error('Unsupported')\n }\n\n if (node.versionedNode.v1.nodeType.oneofKind === 'fetch') {\n throw new Error('Unsupported')\n }\n\n if (node.versionedNode.v1.nodeType.oneofKind === 'rollback') {\n // do we need to check these nodes?\n }\n }\n })\n\n return results\n}\n\n/** Parsed transaction metadata to JSON for display purposes */\nexport interface ParsedTransactionInfo {\n packageName?: string\n moduleName?: string\n entityName?: string\n isCreate: boolean\n isExercise: boolean\n signatories?: string[]\n stakeholders?: string[]\n jsonString?: string\n //defined as packageName:ModuleName:EntityName\n templateId?: string\n choiceId?: string\n amount?: string\n}\n\nfunction decodePreparedTransactionToJsonString(txBase64: string): string {\n const t = decodePreparedTransaction(txBase64)\n return JSON.stringify(\n t,\n (key, value) => (typeof value === 'bigint' ? value.toString() : value),\n 2\n )\n}\n\nfunction getNodeType(node: any) {\n if (node?.versionedNode?.oneofKind !== 'v1') {\n return null\n }\n\n return node.versionedNode.v1?.nodeType ?? null\n}\n\nfunction findNodeById(nodes: any[], nodeId: string | undefined) {\n if (!nodeId) {\n return null\n }\n\n return nodes.find((node) => node?.nodeId === nodeId) ?? null\n}\n\nfunction getPrimaryNode(obj: any, nodes: any[]) {\n const rootId = obj?.transaction?.roots?.[0]\n return findNodeById(nodes, rootId)\n}\n\nfunction getFirstNodeOfType(nodes: any[], type: string) {\n return nodes.find((node) => getNodeType(node)?.oneofKind === type) ?? null\n}\n\nfunction getRecordFields(value: any) {\n if (value?.sum?.oneofKind !== 'record') {\n return []\n }\n\n return value.sum.record?.fields ?? []\n}\n\nfunction getFieldValue(value: any, label: string) {\n return getRecordFields(value).find((field: any) => field?.label === label)\n ?.value\n}\n\nfunction getNumericValue(value: any): string | undefined {\n if (value?.sum?.oneofKind === 'numeric' && value.sum.numeric) {\n return value.sum.numeric\n }\n\n return undefined\n}\n\nfunction extractChoiceIdAndAmount(obj: any) {\n const nodes = obj?.transaction?.nodes ?? []\n if (!Array.isArray(nodes) || nodes.length === 0) {\n return {}\n }\n\n const primaryNode = getPrimaryNode(obj, nodes)\n const primaryExerciseNode =\n getNodeType(primaryNode)?.oneofKind === 'exercise' ? primaryNode : null\n const exerciseNode =\n primaryExerciseNode || getFirstNodeOfType(nodes, 'exercise')\n const createNode = getFirstNodeOfType(nodes, 'create')\n\n const exercise = getNodeType(exerciseNode)?.exercise\n const create = getNodeType(createNode)?.create\n\n const choiceId = exercise?.choiceId\n const amount =\n getNumericValue(getFieldValue(exercise?.chosenValue, 'amount')) ??\n getNumericValue(getFieldValue(create?.argument, 'amount')) ??\n getNumericValue(\n getFieldValue(\n getFieldValue(create?.argument, 'amount'),\n 'initialAmount'\n )\n )\n\n return {\n ...(choiceId ? { choiceId } : {}),\n ...(amount ? { amount } : {}),\n }\n}\n\nexport function parsePreparedTransaction(\n txBase64: string\n): ParsedTransactionInfo {\n const jsonString = decodePreparedTransactionToJsonString(txBase64)\n const obj = JSON.parse(jsonString)\n\n const result: ParsedTransactionInfo = {\n jsonString,\n isCreate: false,\n isExercise: false,\n }\n\n function deepSearch(value: any) {\n if (value === null || typeof value !== 'object') return\n\n // Extract fields if present\n if (typeof value.packageName === 'string') {\n result.packageName = value.packageName\n }\n if (Array.isArray(value.signatories)) {\n result.signatories = value.signatories\n }\n if (Array.isArray(value.stakeholders)) {\n result.stakeholders = value.stakeholders\n }\n if (value.templateId?.moduleName) {\n result.moduleName = value.templateId.moduleName\n }\n if (value.templateId?.entityName) {\n result.entityName = value.templateId.entityName\n }\n if (value.nodeType?.create) {\n result.isCreate = true\n }\n if (value.nodeType?.exercise) {\n result.isExercise = true\n }\n // Continue walking the object\n for (const key of Object.keys(value)) {\n deepSearch(value[key])\n }\n }\n\n deepSearch(obj)\n result.templateId = `${result.packageName || 'N/A'}:${result.moduleName || 'N/A'}:${result.entityName || 'N/A'}` // Ensure this is always set to the defined value\n\n Object.assign(result, extractChoiceIdAndAmount(obj))\n\n return result\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/hashing_scheme_v2.ts","../src/index.ts"],"names":["HashingSchemeVersion","seed","PreparedTransaction","TopologyTransaction"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/** Take a base64 encoded string and return a Uint8Array of the decoded bytes */\nexport function fromBase64(b64: string): Uint8Array {\n const binaryString = atob(b64)\n const len = binaryString.length\n const bytes = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i)\n }\n return bytes\n}\n\n/** Take a byte buffer (Uint8Array) and encode it into a base64 string */\nexport function toBase64(data: Uint8Array): string {\n let binaryString = ''\n const len = data.byteLength\n for (let i = 0; i < len; i++) {\n binaryString += String.fromCharCode(data[i])\n }\n return btoa(binaryString)\n}\n\n/** Take a byte buffer (Uint8Array) and encode it into a hex string */\nexport function toHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('')\n}\n\nexport function fromHex(hex: string): Uint8Array {\n if (hex.length % 2 !== 0) {\n throw new Error('Invalid hex string length')\n }\n\n const bytes = new Uint8Array(hex.length / 2)\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16)\n }\n return bytes\n}\n\nexport async function sha256(\n message: string | Uint8Array\n): Promise<Uint8Array> {\n const msg =\n typeof message === 'string'\n ? new TextEncoder().encode(message)\n : message\n\n return crypto.subtle\n .digest('SHA-256', new Uint8Array(msg))\n .then((hash) => new Uint8Array(hash))\n}\n\n/** Utility to concatenate byte arrays or single bytes */\nexport async function mkByteArray(\n ...args: (number | Uint8Array)[]\n): Promise<Uint8Array> {\n const normalizedArgs: Uint8Array[] = args.map((arg) => {\n if (typeof arg === 'number') {\n return new Uint8Array([arg])\n } else {\n return arg\n }\n })\n\n let totalLength = 0\n normalizedArgs.forEach((arg) => {\n totalLength += arg.length\n })\n\n const mergedArray = new Uint8Array(totalLength)\n let offset = 0\n\n normalizedArgs.forEach((arg) => {\n mergedArray.set(arg, offset)\n offset += arg.length\n })\n\n return mergedArray\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n DamlTransaction,\n DamlTransaction_Node,\n DamlTransaction_NodeSeed,\n HashingSchemeVersion,\n Metadata,\n Metadata_InputContract,\n PreparedTransaction,\n} from '@canton-network/core-ledger-proto'\nimport {\n Create,\n Exercise,\n Fetch,\n Rollback,\n} from '@canton-network/core-ledger-proto'\nimport {\n GenMap_Entry,\n Identifier,\n RecordField,\n TextMap_Entry,\n Value,\n} from '@canton-network/core-ledger-proto'\nimport { mkByteArray, sha256, toHex } from './utils.js'\n\n// Hash purpose reserved for prepared transaction\nconst PREPARED_TRANSACTION_HASH_PURPOSE = Uint8Array.from([\n 0x00, 0x00, 0x00, 0x30,\n])\n\nconst NODE_ENCODING_VERSION = Uint8Array.from([0x01])\n\nconst HASHING_SCHEME_VERSION = Uint8Array.from([HashingSchemeVersion.V2])\n\nasync function encodeBool(value: boolean): Promise<Uint8Array> {\n return new Uint8Array([value ? 1 : 0])\n}\n\nasync function encodeInt32(value: number): Promise<Uint8Array> {\n const buffer = new ArrayBuffer(4)\n const view = new DataView(buffer)\n view.setInt32(0, value, false) // true for little-endian\n return new Uint8Array(buffer)\n}\n\nasync function encodeInt64(\n value: bigint | number | undefined\n): Promise<Uint8Array> {\n const num = typeof value === 'bigint' ? value : BigInt(value || 0)\n const buffer = new ArrayBuffer(8)\n const view = new DataView(buffer)\n view.setBigInt64(0, num, false) // true for little-endian\n return new Uint8Array(buffer)\n}\n\nexport async function encodeString(value: string = ''): Promise<Uint8Array> {\n const utf8Bytes = new TextEncoder().encode(value)\n return encodeBytes(utf8Bytes)\n}\n\nasync function encodeBytes(value: Uint8Array): Promise<Uint8Array> {\n const length = await encodeInt32(value.length)\n return mkByteArray(length, value)\n}\n\nasync function encodeHash(value: Uint8Array): Promise<Uint8Array> {\n return value\n}\n\nfunction encodeHexString(value: string = ''): Promise<Uint8Array> {\n // Convert hex string to Uint8Array\n const bytes = new Uint8Array(value.length / 2)\n for (let i = 0; i < value.length; i += 2) {\n bytes[i / 2] = parseInt(value.slice(i, i + 2), 16)\n }\n return encodeBytes(bytes)\n}\n\n// Maybe suspicious?\nasync function encodeOptional<T>(\n value: T | undefined | null,\n encodeFn: (arg: T) => Promise<Uint8Array>\n): Promise<Uint8Array> {\n if (value === undefined || value === null) {\n return new Uint8Array([0]) // Return empty array for undefined fields\n } else {\n return mkByteArray(1, await encodeFn(value))\n }\n}\n\n// Maybe suspicious?\nasync function encodeProtoOptional<T, P extends object>(\n parentValue: P,\n fieldName: keyof P,\n value: T,\n encodeFn: (value: T) => Promise<Uint8Array>\n): Promise<Uint8Array> {\n if (parentValue && parentValue[fieldName] !== undefined) {\n return mkByteArray(1, await encodeFn(value))\n } else {\n return new Uint8Array([0]) // Return empty array for undefined fields\n }\n}\n\nasync function encodeRepeated<T>(\n values: T[] = [],\n encodeFn: (value: T) => Promise<Uint8Array>\n): Promise<Uint8Array> {\n const length = await encodeInt32(values.length)\n const encodedValues = await Promise.all(values.map(encodeFn))\n return mkByteArray(length, ...encodedValues)\n}\n\nfunction findSeed(\n nodeId: string,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Uint8Array | undefined {\n const seed = nodeSeeds.find(\n (seed) => seed.nodeId.toString() === nodeId\n )?.seed\n\n return seed\n}\n\nasync function encodeIdentifier(identifier: Identifier): Promise<Uint8Array> {\n return mkByteArray(\n await encodeString(identifier.packageId),\n await encodeRepeated(identifier.moduleName.split('.'), encodeString),\n await encodeRepeated(identifier.entityName.split('.'), encodeString)\n )\n}\n\nasync function encodeMetadata(metadata: Metadata): Promise<Uint8Array> {\n return mkByteArray(\n Uint8Array.from([0x01]),\n await encodeRepeated(metadata.submitterInfo?.actAs, encodeString),\n await encodeString(metadata.submitterInfo?.commandId),\n await encodeString(metadata.transactionUuid),\n await encodeInt32(metadata.mediatorGroup),\n await encodeString(metadata.synchronizerId),\n await encodeProtoOptional(\n metadata,\n 'minLedgerEffectiveTime',\n metadata.minLedgerEffectiveTime,\n encodeInt64\n ),\n await encodeProtoOptional(\n metadata,\n 'maxLedgerEffectiveTime',\n metadata.maxLedgerEffectiveTime,\n encodeInt64\n ),\n await encodeInt64(metadata.preparationTime),\n await encodeRepeated(metadata.inputContracts, encodeInputContract)\n )\n}\n\nasync function encodeCreateNode(\n create: Create | undefined,\n nodeId: string,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return create\n ? mkByteArray(\n NODE_ENCODING_VERSION,\n await encodeString(create.lfVersion),\n 0 /** Create node tag */,\n await encodeOptional(findSeed(nodeId, nodeSeeds), encodeHash),\n await encodeHexString(create.contractId),\n await encodeString(create.packageName),\n await encodeIdentifier(create.templateId!),\n await encodeValue(create.argument!),\n await encodeRepeated(create.signatories, encodeString),\n await encodeRepeated(create.stakeholders, encodeString)\n )\n : mkByteArray()\n}\n\nasync function encodeExerciseNode(\n exercise: Exercise,\n nodeId: string,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return mkByteArray(\n NODE_ENCODING_VERSION,\n await encodeString(exercise.lfVersion),\n 1 /** Exercise node tag */,\n await encodeHash(findSeed(nodeId, nodeSeeds)!),\n await encodeHexString(exercise.contractId),\n await encodeString(exercise.packageName),\n await encodeIdentifier(exercise.templateId!),\n await encodeRepeated(exercise.signatories, encodeString),\n await encodeRepeated(exercise.stakeholders, encodeString),\n await encodeRepeated(exercise.actingParties, encodeString),\n await encodeProtoOptional(\n exercise,\n 'interfaceId',\n exercise.interfaceId!,\n encodeIdentifier\n ),\n await encodeString(exercise.choiceId),\n await encodeValue(exercise.chosenValue!),\n await encodeBool(exercise.consuming),\n await encodeProtoOptional(\n exercise,\n 'exerciseResult',\n exercise.exerciseResult!,\n encodeValue\n ),\n await encodeRepeated(exercise.choiceObservers, encodeString),\n await encodeRepeated(\n exercise.children,\n encodeNodeId(nodesDict, nodeSeeds)\n )\n )\n}\n\nasync function encodeFetchNode(fetch: Fetch): Promise<Uint8Array> {\n return mkByteArray(\n NODE_ENCODING_VERSION,\n await encodeString(fetch.lfVersion),\n 2 /** Fetch node tag */,\n await encodeHexString(fetch.contractId),\n await encodeString(fetch.packageName),\n await encodeIdentifier(fetch.templateId!),\n await encodeRepeated(fetch.signatories, encodeString),\n await encodeRepeated(fetch.stakeholders, encodeString),\n await encodeProtoOptional(\n fetch,\n 'interfaceId',\n fetch.interfaceId!,\n encodeIdentifier\n ),\n await encodeRepeated(fetch.actingParties, encodeString)\n )\n}\n\nasync function encodeRollbackNode(\n rollback: Rollback,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return mkByteArray(\n NODE_ENCODING_VERSION,\n 3 /** Rollback node tag */,\n await encodeRepeated(\n rollback.children,\n encodeNodeId(nodesDict, nodeSeeds)\n )\n )\n}\n\nasync function encodeInputContract(contract: Metadata_InputContract) {\n if (contract.contract.oneofKind === 'v1')\n return mkByteArray(\n await encodeInt64(contract.createdAt),\n await sha256(\n await encodeCreateNode(\n contract.contract.v1,\n 'unused_node_id',\n []\n )\n )\n )\n else throw new Error('Unsupported contract version')\n}\n\nexport async function encodeValue(value: Value): Promise<Uint8Array> {\n if (value.sum.oneofKind === 'unit') {\n return Uint8Array.from([0]) // Unit value\n } else if (value.sum.oneofKind === 'bool') {\n return mkByteArray(\n Uint8Array.from([0x01]),\n await encodeBool(value.sum.bool)\n )\n } else if (value.sum.oneofKind === 'int64') {\n return mkByteArray(\n Uint8Array.from([0x02]),\n await encodeInt64(parseInt(value.sum.int64))\n )\n } else if (value.sum.oneofKind === 'numeric') {\n return mkByteArray(\n Uint8Array.from([0x03]),\n await encodeString(value.sum.numeric)\n )\n } else if (value.sum.oneofKind === 'timestamp') {\n return mkByteArray(\n Uint8Array.from([0x04]),\n await encodeInt64(BigInt(value.sum.timestamp))\n )\n } else if (value.sum.oneofKind === 'date') {\n return mkByteArray(\n Uint8Array.from([0x05]),\n await encodeInt32(value.sum.date)\n )\n } else if (value.sum.oneofKind === 'party') {\n return mkByteArray(\n Uint8Array.from([0x06]),\n await encodeString(value.sum.party)\n )\n } else if (value.sum.oneofKind === 'text') {\n return mkByteArray(\n Uint8Array.from([0x07]),\n await encodeString(value.sum.text)\n )\n } else if (value.sum.oneofKind === 'contractId') {\n return mkByteArray(\n Uint8Array.from([0x08]),\n await encodeHexString(value.sum.contractId)\n )\n } else if (value.sum.oneofKind === 'optional') {\n return mkByteArray(\n Uint8Array.from([0x09]),\n await encodeProtoOptional(\n value.sum.optional,\n 'value',\n value.sum.optional.value as Value,\n encodeValue\n )\n )\n } else if (value.sum.oneofKind === 'list') {\n return mkByteArray(\n Uint8Array.from([0x0a]),\n await encodeRepeated(value.sum.list.elements, encodeValue)\n )\n } else if (value.sum.oneofKind === 'textMap') {\n return mkByteArray(\n Uint8Array.from([0x0b]),\n await encodeRepeated(value.sum.textMap?.entries, encodeTextMapEntry)\n )\n } else if (value.sum.oneofKind === 'record') {\n return mkByteArray(\n Uint8Array.from([0x0c]),\n await encodeProtoOptional(\n value.sum.record,\n 'recordId',\n value.sum.record.recordId!,\n encodeIdentifier\n ),\n await encodeRepeated(value.sum.record.fields, encodeRecordField)\n )\n } else if (value.sum.oneofKind === 'variant') {\n return mkByteArray(\n Uint8Array.from([0x0d]),\n await encodeProtoOptional(\n value.sum.variant,\n 'variantId',\n value.sum.variant.variantId!,\n encodeIdentifier\n ),\n await encodeString(value.sum.variant.constructor),\n await encodeValue(value.sum.variant.value!)\n )\n } else if (value.sum.oneofKind === 'enum') {\n return mkByteArray(\n Uint8Array.from([0x0e]),\n await encodeProtoOptional(\n value.sum.enum,\n 'enumId',\n value.sum.enum.enumId!,\n encodeIdentifier\n ),\n await encodeString(value.sum.enum.constructor)\n )\n } else if (value.sum.oneofKind === 'genMap') {\n return mkByteArray(\n Uint8Array.from([0x0f]),\n await encodeRepeated(value.sum.genMap?.entries, encodeGenMapEntry)\n )\n }\n\n throw new Error('Unsupported value type: ' + JSON.stringify(value))\n}\n\nasync function encodeTextMapEntry(entry: TextMap_Entry): Promise<Uint8Array> {\n return mkByteArray(\n await encodeString(entry.key),\n await encodeValue(entry.value!)\n )\n}\n\nasync function encodeRecordField(field: RecordField): Promise<Uint8Array> {\n return mkByteArray(\n await encodeOptional(field.label, encodeString),\n await encodeValue(field.value!)\n )\n}\n\nasync function encodeGenMapEntry(entry: GenMap_Entry): Promise<Uint8Array> {\n return mkByteArray(\n await encodeValue(entry.key!),\n await encodeValue(entry.value!)\n )\n}\n\nfunction encodeNodeId(\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): (nodeId: string) => Promise<Uint8Array> {\n return async (nodeId: string): Promise<Uint8Array> => {\n const node = nodesDict[nodeId]\n if (!node) {\n throw new Error(`Node with ID ${nodeId} not found in transaction`)\n }\n\n const encodedNode = await encodeNode(node, nodesDict, nodeSeeds)\n return sha256(encodedNode)\n }\n}\n\nasync function encodeNode(\n node: DamlTransaction_Node,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n if (node.versionedNode.oneofKind === 'v1') {\n if (node.versionedNode.v1.nodeType.oneofKind === 'create') {\n return encodeCreateNode(\n node.versionedNode.v1.nodeType.create,\n node.nodeId,\n nodeSeeds\n )\n } else if (node.versionedNode.v1.nodeType.oneofKind === 'exercise') {\n return encodeExerciseNode(\n node.versionedNode.v1.nodeType.exercise,\n node.nodeId,\n nodesDict,\n nodeSeeds\n )\n } else if (node.versionedNode.v1.nodeType.oneofKind === 'fetch') {\n return encodeFetchNode(node.versionedNode.v1.nodeType.fetch)\n } else if (node.versionedNode.v1.nodeType.oneofKind === 'rollback') {\n return encodeRollbackNode(\n node.versionedNode.v1.nodeType.rollback,\n nodesDict,\n nodeSeeds\n )\n }\n\n throw new Error('Unsupported node type')\n } else {\n throw new Error(`Unsupported node version`)\n }\n}\n\nfunction createNodesDict(\n preparedTransaction: PreparedTransaction\n): Record<string, DamlTransaction_Node> {\n const nodesDict: Record<string, DamlTransaction_Node> = {}\n const nodes = preparedTransaction.transaction?.nodes || []\n for (const node of nodes) {\n nodesDict[node.nodeId] = node\n }\n return nodesDict\n}\n\nasync function encodeTransaction(\n transaction: DamlTransaction,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return mkByteArray(\n await encodeString(transaction.version),\n await encodeRepeated(\n transaction.roots,\n encodeNodeId(nodesDict, nodeSeeds)\n )\n )\n}\n\nasync function hashTransaction(\n transaction: DamlTransaction,\n nodesDict: Record<string, DamlTransaction_Node>\n): Promise<Uint8Array> {\n const encodedTransaction = await encodeTransaction(\n transaction,\n nodesDict,\n transaction.nodeSeeds\n )\n\n const hash = await sha256(\n await mkByteArray(PREPARED_TRANSACTION_HASH_PURPOSE, encodedTransaction)\n )\n\n return hash\n}\n\nasync function hashMetadata(metadata: Metadata): Promise<Uint8Array> {\n const hash = await sha256(\n await mkByteArray(\n PREPARED_TRANSACTION_HASH_PURPOSE,\n await encodeMetadata(metadata)\n )\n )\n\n return hash\n}\n\nasync function encodePreparedTransaction(\n preparedTransaction: PreparedTransaction\n): Promise<Uint8Array> {\n const nodesDict = createNodesDict(preparedTransaction)\n\n const transactionHash = await hashTransaction(\n preparedTransaction.transaction!,\n nodesDict\n )\n const metadataHash = await hashMetadata(preparedTransaction.metadata!)\n\n return mkByteArray(\n PREPARED_TRANSACTION_HASH_PURPOSE,\n HASHING_SCHEME_VERSION,\n transactionHash,\n metadataHash\n )\n}\n\nexport async function computePreparedTransaction(\n preparedTransaction: PreparedTransaction\n): Promise<Uint8Array> {\n return sha256(await encodePreparedTransaction(preparedTransaction))\n}\n\nexport async function computeSha256CantonHash(\n purpose: number,\n bytes: Uint8Array\n) {\n const encodedPurpose = await encodeInt32(purpose)\n\n const hashInput = await mkByteArray(encodedPurpose, bytes)\n const hashBytes = await sha256(hashInput)\n const multiprefix = new Uint8Array([0x12, 0x20])\n return mkByteArray(multiprefix, hashBytes)\n}\n\nexport async function computeMultiHashForTopology(hashes: Uint8Array[]) {\n const sortedHashes = hashes\n .slice()\n .sort((a, b) => toHex(a).localeCompare(toHex(b)))\n\n const numHashesBytes = await encodeInt32(sortedHashes.length)\n\n const concatenatedHashes = [numHashesBytes]\n\n for (const h of sortedHashes) {\n const lengthBytes = await encodeInt32(h.length)\n concatenatedHashes.push(lengthBytes, h)\n }\n\n return mkByteArray(...concatenatedHashes)\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n PreparedTransaction,\n TopologyTransaction,\n} from '@canton-network/core-ledger-proto'\nimport { computePreparedTransaction } from './hashing_scheme_v2.js'\nimport { fromBase64, toBase64, toHex } from './utils.js'\nexport {\n computeSha256CantonHash,\n computeMultiHashForTopology,\n} from './hashing_scheme_v2.js'\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Decodes a base64 encoded prepared transaction into a well-typed data model, generated directly from Protobuf definitions.\n *\n * @param preparedTransaction - The prepared transaction in base64 format\n * @returns The decoded prepared transaction\n */\nexport const decodePreparedTransaction = (\n preparedTransaction: string\n): PreparedTransaction => {\n const bytes = fromBase64(preparedTransaction)\n return PreparedTransaction.fromBinary(bytes)\n}\n\nexport const decodeTopologyTransaction = (\n topologyTx: string\n): TopologyTransaction => {\n const bytes = fromBase64(topologyTx)\n return TopologyTransaction.fromBinary(bytes)\n}\n\n/**\n * Computes the hash of a prepared transaction.\n *\n * @param preparedTransaction - The prepared transaction to hash\n * @param format - The format of the output hash (base64 or hex)\n * @returns The computed hash in the specified format\n */\nexport const hashPreparedTransaction = async (\n preparedTransaction: string | PreparedTransaction,\n format: 'base64' | 'hex' = 'base64'\n): Promise<string> => {\n let preparedTx: PreparedTransaction\n\n if (typeof preparedTransaction === 'string') {\n preparedTx = decodePreparedTransaction(preparedTransaction)\n } else {\n preparedTx = preparedTransaction\n }\n\n const hash = await computePreparedTransaction(preparedTx)\n\n switch (format) {\n case 'base64':\n return toBase64(hash)\n case 'hex':\n return toHex(hash)\n }\n}\n\ntype ValidationResult = Record<\n string,\n {\n isAuthorized: boolean\n locations: string[]\n }\n>\n\nexport const validateAuthorizedPartyIds = (\n preparedTransaction: string | PreparedTransaction,\n authorizedPartyIds: string[]\n): ValidationResult => {\n let preparedTx: PreparedTransaction\n\n if (typeof preparedTransaction === 'string') {\n preparedTx = decodePreparedTransaction(preparedTransaction)\n } else {\n preparedTx = preparedTransaction\n }\n\n const results: ValidationResult = {}\n const updateParty = (party: string, location: string) => {\n if (!results[party]) {\n results[party] = {\n isAuthorized: authorizedPartyIds.includes(party),\n locations: [],\n }\n }\n\n results[party].locations.push(location)\n }\n\n preparedTx.metadata?.submitterInfo?.actAs.forEach((party) => {\n updateParty(party, 'metadata.submitterInfo.actAs')\n })\n\n // then check transaction nodes\n preparedTx.transaction?.nodes.forEach((node) => {\n if (node.versionedNode.oneofKind === 'v1') {\n if (node.versionedNode.v1.nodeType.oneofKind === 'create') {\n node.versionedNode.v1.nodeType.create.signatories.forEach(\n (party) => {\n updateParty(\n party,\n `transaction.nodes.${node.nodeId}.create.signatories`\n )\n }\n )\n\n node.versionedNode.v1.nodeType.create.stakeholders.forEach(\n (party) => {\n updateParty(\n party,\n `transaction.nodes.${node.nodeId}.create.stakeholders`\n )\n }\n )\n }\n\n if (node.versionedNode.v1.nodeType.oneofKind === 'exercise') {\n throw new Error('Unsupported')\n }\n\n if (node.versionedNode.v1.nodeType.oneofKind === 'fetch') {\n throw new Error('Unsupported')\n }\n\n if (node.versionedNode.v1.nodeType.oneofKind === 'rollback') {\n // do we need to check these nodes?\n }\n }\n })\n\n return results\n}\n\n/** Parsed transaction metadata to JSON for display purposes */\nexport interface ParsedTransactionInfo {\n packageName?: string\n moduleName?: string\n entityName?: string\n isCreate: boolean\n isExercise: boolean\n signatories?: string[]\n stakeholders?: string[]\n jsonString?: string\n //defined as packageName:ModuleName:EntityName\n templateId?: string\n choiceId?: string\n amount?: string\n}\n\nfunction decodePreparedTransactionToJsonString(txBase64: string): string {\n const t = decodePreparedTransaction(txBase64)\n return JSON.stringify(\n t,\n (key, value) => (typeof value === 'bigint' ? value.toString() : value),\n 2\n )\n}\n\nfunction getNodeType(node: any) {\n if (node?.versionedNode?.oneofKind !== 'v1') {\n return null\n }\n\n return node.versionedNode.v1?.nodeType ?? null\n}\n\nfunction findNodeById(nodes: any[], nodeId: string | undefined) {\n if (!nodeId) {\n return null\n }\n\n return nodes.find((node) => node?.nodeId === nodeId) ?? null\n}\n\nfunction getPrimaryNode(obj: any, nodes: any[]) {\n const rootId = obj?.transaction?.roots?.[0]\n return findNodeById(nodes, rootId)\n}\n\nfunction getFirstNodeOfType(nodes: any[], type: string) {\n return nodes.find((node) => getNodeType(node)?.oneofKind === type) ?? null\n}\n\nfunction getRecordFields(value: any) {\n if (value?.sum?.oneofKind !== 'record') {\n return []\n }\n\n return value.sum.record?.fields ?? []\n}\n\nfunction getFieldValue(value: any, label: string) {\n return getRecordFields(value).find((field: any) => field?.label === label)\n ?.value\n}\n\nfunction getNumericValue(value: any): string | undefined {\n if (value?.sum?.oneofKind === 'numeric' && value.sum.numeric) {\n return value.sum.numeric\n }\n\n return undefined\n}\n\nfunction extractChoiceIdAndAmount(obj: any) {\n const nodes = obj?.transaction?.nodes ?? []\n if (!Array.isArray(nodes) || nodes.length === 0) {\n return {}\n }\n\n const primaryNode = getPrimaryNode(obj, nodes)\n const primaryExerciseNode =\n getNodeType(primaryNode)?.oneofKind === 'exercise' ? primaryNode : null\n const exerciseNode =\n primaryExerciseNode || getFirstNodeOfType(nodes, 'exercise')\n const createNode = getFirstNodeOfType(nodes, 'create')\n\n const exercise = getNodeType(exerciseNode)?.exercise\n const create = getNodeType(createNode)?.create\n\n const choiceId = exercise?.choiceId\n const amount =\n getNumericValue(getFieldValue(exercise?.chosenValue, 'amount')) ??\n getNumericValue(getFieldValue(create?.argument, 'amount')) ??\n getNumericValue(\n getFieldValue(\n getFieldValue(create?.argument, 'amount'),\n 'initialAmount'\n )\n )\n\n return {\n ...(choiceId ? { choiceId } : {}),\n ...(amount ? { amount } : {}),\n }\n}\n\nexport function parsePreparedTransaction(\n txBase64: string\n): ParsedTransactionInfo {\n const jsonString = decodePreparedTransactionToJsonString(txBase64)\n const obj = JSON.parse(jsonString)\n\n const result: ParsedTransactionInfo = {\n jsonString,\n isCreate: false,\n isExercise: false,\n }\n\n function deepSearch(value: any) {\n if (value === null || typeof value !== 'object') return\n\n // Extract fields if present\n if (typeof value.packageName === 'string') {\n result.packageName = value.packageName\n }\n if (Array.isArray(value.signatories)) {\n result.signatories = value.signatories\n }\n if (Array.isArray(value.stakeholders)) {\n result.stakeholders = value.stakeholders\n }\n if (value.templateId?.moduleName) {\n result.moduleName = value.templateId.moduleName\n }\n if (value.templateId?.entityName) {\n result.entityName = value.templateId.entityName\n }\n if (value.nodeType?.create) {\n result.isCreate = true\n }\n if (value.nodeType?.exercise) {\n result.isExercise = true\n }\n // Continue walking the object\n for (const key of Object.keys(value)) {\n deepSearch(value[key])\n }\n }\n\n deepSearch(obj)\n result.templateId = `${result.packageName || 'N/A'}:${result.moduleName || 'N/A'}:${result.entityName || 'N/A'}` // Ensure this is always set to the defined value\n\n Object.assign(result, extractChoiceIdAndAmount(obj))\n\n return result\n}\n"]}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,mBAAmB,EACnB,mBAAmB,EACtB,MAAM,mCAAmC,CAAA;AAG1C,OAAO,EACH,uBAAuB,EACvB,2BAA2B,GAC9B,MAAM,wBAAwB,CAAA;AAI/B;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GAClC,qBAAqB,MAAM,KAC5B,mBAGF,CAAA;AAED,eAAO,MAAM,yBAAyB,GAClC,YAAY,MAAM,KACnB,mBAGF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAChC,qBAAqB,MAAM,GAAG,mBAAmB,EACjD,SAAQ,QAAQ,GAAG,KAAgB,KACpC,OAAO,CAAC,MAAM,CAiBhB,CAAA;AAED,KAAK,gBAAgB,GAAG,MAAM,CAC1B,MAAM,EACN;IACI,YAAY,EAAE,OAAO,CAAA;IACrB,SAAS,EAAE,MAAM,EAAE,CAAA;CACtB,CACJ,CAAA;AAED,eAAO,MAAM,0BAA0B,GACnC,qBAAqB,MAAM,GAAG,mBAAmB,EACjD,oBAAoB,MAAM,EAAE,KAC7B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,mBAAmB,EACnB,mBAAmB,EACtB,MAAM,mCAAmC,CAAA;AAG1C,OAAO,EACH,uBAAuB,EACvB,2BAA2B,GAC9B,MAAM,wBAAwB,CAAA;AAI/B;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GAClC,qBAAqB,MAAM,KAC5B,mBAGF,CAAA;AAED,eAAO,MAAM,yBAAyB,GAClC,YAAY,MAAM,KACnB,mBAGF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAChC,qBAAqB,MAAM,GAAG,mBAAmB,EACjD,SAAQ,QAAQ,GAAG,KAAgB,KACpC,OAAO,CAAC,MAAM,CAiBhB,CAAA;AAED,KAAK,gBAAgB,GAAG,MAAM,CAC1B,MAAM,EACN;IACI,YAAY,EAAE,OAAO,CAAA;IACrB,SAAS,EAAE,MAAM,EAAE,CAAA;CACtB,CACJ,CAAA;AAED,eAAO,MAAM,0BAA0B,GACnC,qBAAqB,MAAM,GAAG,mBAAmB,EACjD,oBAAoB,MAAM,EAAE,KAC7B,gBA+DF,CAAA;AAED,+DAA+D;AAC/D,MAAM,WAAW,qBAAqB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB;AA0FD,wBAAgB,wBAAwB,CACpC,QAAQ,EAAE,MAAM,GACjB,qBAAqB,CA+CvB"}
|
package/dist/index.js
CHANGED
|
@@ -504,38 +504,35 @@ var validateAuthorizedPartyIds = (preparedTransaction, authorizedPartyIds) => {
|
|
|
504
504
|
preparedTx = preparedTransaction;
|
|
505
505
|
}
|
|
506
506
|
const results = {};
|
|
507
|
+
const updateParty = (party, location) => {
|
|
508
|
+
if (!results[party]) {
|
|
509
|
+
results[party] = {
|
|
510
|
+
isAuthorized: authorizedPartyIds.includes(party),
|
|
511
|
+
locations: []
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
results[party].locations.push(location);
|
|
515
|
+
};
|
|
507
516
|
preparedTx.metadata?.submitterInfo?.actAs.forEach((party) => {
|
|
508
|
-
|
|
509
|
-
isAuthorized: authorizedPartyIds.includes(party),
|
|
510
|
-
locations: [
|
|
511
|
-
...results[party].locations,
|
|
512
|
-
"metadata.submitterInfo.actAs"
|
|
513
|
-
]
|
|
514
|
-
};
|
|
517
|
+
updateParty(party, "metadata.submitterInfo.actAs");
|
|
515
518
|
});
|
|
516
519
|
preparedTx.transaction?.nodes.forEach((node) => {
|
|
517
520
|
if (node.versionedNode.oneofKind === "v1") {
|
|
518
521
|
if (node.versionedNode.v1.nodeType.oneofKind === "create") {
|
|
519
522
|
node.versionedNode.v1.nodeType.create.signatories.forEach(
|
|
520
523
|
(party) => {
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
`transaction.nodes.${node.nodeId}.create.signatories`
|
|
526
|
-
]
|
|
527
|
-
};
|
|
524
|
+
updateParty(
|
|
525
|
+
party,
|
|
526
|
+
`transaction.nodes.${node.nodeId}.create.signatories`
|
|
527
|
+
);
|
|
528
528
|
}
|
|
529
529
|
);
|
|
530
530
|
node.versionedNode.v1.nodeType.create.stakeholders.forEach(
|
|
531
531
|
(party) => {
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
`transaction.nodes.${node.nodeId}.create.stakeholders`
|
|
537
|
-
]
|
|
538
|
-
};
|
|
532
|
+
updateParty(
|
|
533
|
+
party,
|
|
534
|
+
`transaction.nodes.${node.nodeId}.create.stakeholders`
|
|
535
|
+
);
|
|
539
536
|
}
|
|
540
537
|
);
|
|
541
538
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts","../src/hashing_scheme_v2.ts","../src/index.ts"],"names":["seed","PreparedTransaction"],"mappings":"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","file":"index.js","sourcesContent":["// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/** Take a base64 encoded string and return a Uint8Array of the decoded bytes */\nexport function fromBase64(b64: string): Uint8Array {\n const binaryString = atob(b64)\n const len = binaryString.length\n const bytes = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i)\n }\n return bytes\n}\n\n/** Take a byte buffer (Uint8Array) and encode it into a base64 string */\nexport function toBase64(data: Uint8Array): string {\n let binaryString = ''\n const len = data.byteLength\n for (let i = 0; i < len; i++) {\n binaryString += String.fromCharCode(data[i])\n }\n return btoa(binaryString)\n}\n\n/** Take a byte buffer (Uint8Array) and encode it into a hex string */\nexport function toHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('')\n}\n\nexport function fromHex(hex: string): Uint8Array {\n if (hex.length % 2 !== 0) {\n throw new Error('Invalid hex string length')\n }\n\n const bytes = new Uint8Array(hex.length / 2)\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16)\n }\n return bytes\n}\n\nexport async function sha256(\n message: string | Uint8Array\n): Promise<Uint8Array> {\n const msg =\n typeof message === 'string'\n ? new TextEncoder().encode(message)\n : message\n\n return crypto.subtle\n .digest('SHA-256', new Uint8Array(msg))\n .then((hash) => new Uint8Array(hash))\n}\n\n/** Utility to concatenate byte arrays or single bytes */\nexport async function mkByteArray(\n ...args: (number | Uint8Array)[]\n): Promise<Uint8Array> {\n const normalizedArgs: Uint8Array[] = args.map((arg) => {\n if (typeof arg === 'number') {\n return new Uint8Array([arg])\n } else {\n return arg\n }\n })\n\n let totalLength = 0\n normalizedArgs.forEach((arg) => {\n totalLength += arg.length\n })\n\n const mergedArray = new Uint8Array(totalLength)\n let offset = 0\n\n normalizedArgs.forEach((arg) => {\n mergedArray.set(arg, offset)\n offset += arg.length\n })\n\n return mergedArray\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n DamlTransaction,\n DamlTransaction_Node,\n DamlTransaction_NodeSeed,\n HashingSchemeVersion,\n Metadata,\n Metadata_InputContract,\n PreparedTransaction,\n} from '@canton-network/core-ledger-proto'\nimport {\n Create,\n Exercise,\n Fetch,\n Rollback,\n} from '@canton-network/core-ledger-proto'\nimport {\n GenMap_Entry,\n Identifier,\n RecordField,\n TextMap_Entry,\n Value,\n} from '@canton-network/core-ledger-proto'\nimport { mkByteArray, sha256, toHex } from './utils.js'\n\n// Hash purpose reserved for prepared transaction\nconst PREPARED_TRANSACTION_HASH_PURPOSE = Uint8Array.from([\n 0x00, 0x00, 0x00, 0x30,\n])\n\nconst NODE_ENCODING_VERSION = Uint8Array.from([0x01])\n\nconst HASHING_SCHEME_VERSION = Uint8Array.from([HashingSchemeVersion.V2])\n\nasync function encodeBool(value: boolean): Promise<Uint8Array> {\n return new Uint8Array([value ? 1 : 0])\n}\n\nasync function encodeInt32(value: number): Promise<Uint8Array> {\n const buffer = new ArrayBuffer(4)\n const view = new DataView(buffer)\n view.setInt32(0, value, false) // true for little-endian\n return new Uint8Array(buffer)\n}\n\nasync function encodeInt64(\n value: bigint | number | undefined\n): Promise<Uint8Array> {\n const num = typeof value === 'bigint' ? value : BigInt(value || 0)\n const buffer = new ArrayBuffer(8)\n const view = new DataView(buffer)\n view.setBigInt64(0, num, false) // true for little-endian\n return new Uint8Array(buffer)\n}\n\nexport async function encodeString(value: string = ''): Promise<Uint8Array> {\n const utf8Bytes = new TextEncoder().encode(value)\n return encodeBytes(utf8Bytes)\n}\n\nasync function encodeBytes(value: Uint8Array): Promise<Uint8Array> {\n const length = await encodeInt32(value.length)\n return mkByteArray(length, value)\n}\n\nasync function encodeHash(value: Uint8Array): Promise<Uint8Array> {\n return value\n}\n\nfunction encodeHexString(value: string = ''): Promise<Uint8Array> {\n // Convert hex string to Uint8Array\n const bytes = new Uint8Array(value.length / 2)\n for (let i = 0; i < value.length; i += 2) {\n bytes[i / 2] = parseInt(value.slice(i, i + 2), 16)\n }\n return encodeBytes(bytes)\n}\n\n// Maybe suspicious?\nasync function encodeOptional<T>(\n value: T | undefined | null,\n encodeFn: (arg: T) => Promise<Uint8Array>\n): Promise<Uint8Array> {\n if (value === undefined || value === null) {\n return new Uint8Array([0]) // Return empty array for undefined fields\n } else {\n return mkByteArray(1, await encodeFn(value))\n }\n}\n\n// Maybe suspicious?\nasync function encodeProtoOptional<T, P extends object>(\n parentValue: P,\n fieldName: keyof P,\n value: T,\n encodeFn: (value: T) => Promise<Uint8Array>\n): Promise<Uint8Array> {\n if (parentValue && parentValue[fieldName] !== undefined) {\n return mkByteArray(1, await encodeFn(value))\n } else {\n return new Uint8Array([0]) // Return empty array for undefined fields\n }\n}\n\nasync function encodeRepeated<T>(\n values: T[] = [],\n encodeFn: (value: T) => Promise<Uint8Array>\n): Promise<Uint8Array> {\n const length = await encodeInt32(values.length)\n const encodedValues = await Promise.all(values.map(encodeFn))\n return mkByteArray(length, ...encodedValues)\n}\n\nfunction findSeed(\n nodeId: string,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Uint8Array | undefined {\n const seed = nodeSeeds.find(\n (seed) => seed.nodeId.toString() === nodeId\n )?.seed\n\n return seed\n}\n\nasync function encodeIdentifier(identifier: Identifier): Promise<Uint8Array> {\n return mkByteArray(\n await encodeString(identifier.packageId),\n await encodeRepeated(identifier.moduleName.split('.'), encodeString),\n await encodeRepeated(identifier.entityName.split('.'), encodeString)\n )\n}\n\nasync function encodeMetadata(metadata: Metadata): Promise<Uint8Array> {\n return mkByteArray(\n Uint8Array.from([0x01]),\n await encodeRepeated(metadata.submitterInfo?.actAs, encodeString),\n await encodeString(metadata.submitterInfo?.commandId),\n await encodeString(metadata.transactionUuid),\n await encodeInt32(metadata.mediatorGroup),\n await encodeString(metadata.synchronizerId),\n await encodeProtoOptional(\n metadata,\n 'minLedgerEffectiveTime',\n metadata.minLedgerEffectiveTime,\n encodeInt64\n ),\n await encodeProtoOptional(\n metadata,\n 'maxLedgerEffectiveTime',\n metadata.maxLedgerEffectiveTime,\n encodeInt64\n ),\n await encodeInt64(metadata.preparationTime),\n await encodeRepeated(metadata.inputContracts, encodeInputContract)\n )\n}\n\nasync function encodeCreateNode(\n create: Create | undefined,\n nodeId: string,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return create\n ? mkByteArray(\n NODE_ENCODING_VERSION,\n await encodeString(create.lfVersion),\n 0 /** Create node tag */,\n await encodeOptional(findSeed(nodeId, nodeSeeds), encodeHash),\n await encodeHexString(create.contractId),\n await encodeString(create.packageName),\n await encodeIdentifier(create.templateId!),\n await encodeValue(create.argument!),\n await encodeRepeated(create.signatories, encodeString),\n await encodeRepeated(create.stakeholders, encodeString)\n )\n : mkByteArray()\n}\n\nasync function encodeExerciseNode(\n exercise: Exercise,\n nodeId: string,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return mkByteArray(\n NODE_ENCODING_VERSION,\n await encodeString(exercise.lfVersion),\n 1 /** Exercise node tag */,\n await encodeHash(findSeed(nodeId, nodeSeeds)!),\n await encodeHexString(exercise.contractId),\n await encodeString(exercise.packageName),\n await encodeIdentifier(exercise.templateId!),\n await encodeRepeated(exercise.signatories, encodeString),\n await encodeRepeated(exercise.stakeholders, encodeString),\n await encodeRepeated(exercise.actingParties, encodeString),\n await encodeProtoOptional(\n exercise,\n 'interfaceId',\n exercise.interfaceId!,\n encodeIdentifier\n ),\n await encodeString(exercise.choiceId),\n await encodeValue(exercise.chosenValue!),\n await encodeBool(exercise.consuming),\n await encodeProtoOptional(\n exercise,\n 'exerciseResult',\n exercise.exerciseResult!,\n encodeValue\n ),\n await encodeRepeated(exercise.choiceObservers, encodeString),\n await encodeRepeated(\n exercise.children,\n encodeNodeId(nodesDict, nodeSeeds)\n )\n )\n}\n\nasync function encodeFetchNode(fetch: Fetch): Promise<Uint8Array> {\n return mkByteArray(\n NODE_ENCODING_VERSION,\n await encodeString(fetch.lfVersion),\n 2 /** Fetch node tag */,\n await encodeHexString(fetch.contractId),\n await encodeString(fetch.packageName),\n await encodeIdentifier(fetch.templateId!),\n await encodeRepeated(fetch.signatories, encodeString),\n await encodeRepeated(fetch.stakeholders, encodeString),\n await encodeProtoOptional(\n fetch,\n 'interfaceId',\n fetch.interfaceId!,\n encodeIdentifier\n ),\n await encodeRepeated(fetch.actingParties, encodeString)\n )\n}\n\nasync function encodeRollbackNode(\n rollback: Rollback,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return mkByteArray(\n NODE_ENCODING_VERSION,\n 3 /** Rollback node tag */,\n await encodeRepeated(\n rollback.children,\n encodeNodeId(nodesDict, nodeSeeds)\n )\n )\n}\n\nasync function encodeInputContract(contract: Metadata_InputContract) {\n if (contract.contract.oneofKind === 'v1')\n return mkByteArray(\n await encodeInt64(contract.createdAt),\n await sha256(\n await encodeCreateNode(\n contract.contract.v1,\n 'unused_node_id',\n []\n )\n )\n )\n else throw new Error('Unsupported contract version')\n}\n\nasync function encodeValue(value: Value): Promise<Uint8Array> {\n if (value.sum.oneofKind === 'unit') {\n return Uint8Array.from([0]) // Unit value\n } else if (value.sum.oneofKind === 'bool') {\n return mkByteArray(\n Uint8Array.from([0x01]),\n await encodeBool(value.sum.bool)\n )\n } else if (value.sum.oneofKind === 'int64') {\n return mkByteArray(\n Uint8Array.from([0x02]),\n await encodeInt64(parseInt(value.sum.int64))\n )\n } else if (value.sum.oneofKind === 'numeric') {\n return mkByteArray(\n Uint8Array.from([0x03]),\n await encodeString(value.sum.numeric)\n )\n } else if (value.sum.oneofKind === 'timestamp') {\n return mkByteArray(\n Uint8Array.from([0x04]),\n await encodeInt64(BigInt(value.sum.timestamp))\n )\n } else if (value.sum.oneofKind === 'date') {\n return mkByteArray(\n Uint8Array.from([0x05]),\n await encodeInt32(value.sum.date)\n )\n } else if (value.sum.oneofKind === 'party') {\n return mkByteArray(\n Uint8Array.from([0x06]),\n await encodeString(value.sum.party)\n )\n } else if (value.sum.oneofKind === 'text') {\n return mkByteArray(\n Uint8Array.from([0x07]),\n await encodeString(value.sum.text)\n )\n } else if (value.sum.oneofKind === 'contractId') {\n return mkByteArray(\n Uint8Array.from([0x08]),\n await encodeHexString(value.sum.contractId)\n )\n } else if (value.sum.oneofKind === 'optional') {\n return mkByteArray(\n Uint8Array.from([0x09]),\n await encodeProtoOptional(\n value.sum.optional,\n 'value',\n value.sum.optional.value as Value,\n encodeValue\n )\n )\n } else if (value.sum.oneofKind === 'list') {\n return mkByteArray(\n Uint8Array.from([0x0a]),\n await encodeRepeated(value.sum.list.elements, encodeValue)\n )\n } else if (value.sum.oneofKind === 'textMap') {\n return mkByteArray(\n Uint8Array.from([0x0b]),\n await encodeRepeated(value.sum.textMap?.entries, encodeTextMapEntry)\n )\n } else if (value.sum.oneofKind === 'record') {\n return mkByteArray(\n Uint8Array.from([0x0c]),\n await encodeProtoOptional(\n value.sum.record,\n 'recordId',\n value.sum.record.recordId!,\n encodeIdentifier\n ),\n await encodeRepeated(value.sum.record.fields, encodeRecordField)\n )\n } else if (value.sum.oneofKind === 'variant') {\n return mkByteArray(\n Uint8Array.from([0x0d]),\n await encodeProtoOptional(\n value.sum.variant,\n 'variantId',\n value.sum.variant.variantId!,\n encodeIdentifier\n ),\n await encodeString(value.sum.variant.constructor),\n await encodeValue(value.sum.variant.value!)\n )\n } else if (value.sum.oneofKind === 'enum') {\n return mkByteArray(\n Uint8Array.from([0x0e]),\n await encodeProtoOptional(\n value.sum.enum,\n 'enumId',\n value.sum.enum.enumId!,\n encodeIdentifier\n ),\n await encodeString(value.sum.enum.constructor)\n )\n } else if (value.sum.oneofKind === 'genMap') {\n return mkByteArray(\n Uint8Array.from([0x0f]),\n await encodeRepeated(value.sum.genMap?.entries, encodeGenMapEntry)\n )\n }\n\n throw new Error('Unsupported value type: ' + JSON.stringify(value))\n}\n\nasync function encodeTextMapEntry(entry: TextMap_Entry): Promise<Uint8Array> {\n return mkByteArray(\n await encodeString(entry.key),\n await encodeValue(entry.value!)\n )\n}\n\nasync function encodeRecordField(field: RecordField): Promise<Uint8Array> {\n return mkByteArray(\n await encodeOptional(field.label, encodeString),\n await encodeValue(field.value!)\n )\n}\n\nasync function encodeGenMapEntry(entry: GenMap_Entry): Promise<Uint8Array> {\n return mkByteArray(\n await encodeValue(entry.key!),\n await encodeValue(entry.value!)\n )\n}\n\nfunction encodeNodeId(\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): (nodeId: string) => Promise<Uint8Array> {\n return async (nodeId: string): Promise<Uint8Array> => {\n const node = nodesDict[nodeId]\n if (!node) {\n throw new Error(`Node with ID ${nodeId} not found in transaction`)\n }\n\n const encodedNode = await encodeNode(node, nodesDict, nodeSeeds)\n return sha256(encodedNode)\n }\n}\n\nasync function encodeNode(\n node: DamlTransaction_Node,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n if (node.versionedNode.oneofKind === 'v1') {\n if (node.versionedNode.v1.nodeType.oneofKind === 'create') {\n return encodeCreateNode(\n node.versionedNode.v1.nodeType.create,\n node.nodeId,\n nodeSeeds\n )\n } else if (node.versionedNode.v1.nodeType.oneofKind === 'exercise') {\n return encodeExerciseNode(\n node.versionedNode.v1.nodeType.exercise,\n node.nodeId,\n nodesDict,\n nodeSeeds\n )\n } else if (node.versionedNode.v1.nodeType.oneofKind === 'fetch') {\n return encodeFetchNode(node.versionedNode.v1.nodeType.fetch)\n } else if (node.versionedNode.v1.nodeType.oneofKind === 'rollback') {\n return encodeRollbackNode(\n node.versionedNode.v1.nodeType.rollback,\n nodesDict,\n nodeSeeds\n )\n }\n\n throw new Error('Unsupported node type')\n } else {\n throw new Error(`Unsupported node version`)\n }\n}\n\nfunction createNodesDict(\n preparedTransaction: PreparedTransaction\n): Record<string, DamlTransaction_Node> {\n const nodesDict: Record<string, DamlTransaction_Node> = {}\n const nodes = preparedTransaction.transaction?.nodes || []\n for (const node of nodes) {\n nodesDict[node.nodeId] = node\n }\n return nodesDict\n}\n\nasync function encodeTransaction(\n transaction: DamlTransaction,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return mkByteArray(\n await encodeString(transaction.version),\n await encodeRepeated(\n transaction.roots,\n encodeNodeId(nodesDict, nodeSeeds)\n )\n )\n}\n\nasync function hashTransaction(\n transaction: DamlTransaction,\n nodesDict: Record<string, DamlTransaction_Node>\n): Promise<Uint8Array> {\n const encodedTransaction = await encodeTransaction(\n transaction,\n nodesDict,\n transaction.nodeSeeds\n )\n\n const hash = await sha256(\n await mkByteArray(PREPARED_TRANSACTION_HASH_PURPOSE, encodedTransaction)\n )\n\n return hash\n}\n\nasync function hashMetadata(metadata: Metadata): Promise<Uint8Array> {\n const hash = await sha256(\n await mkByteArray(\n PREPARED_TRANSACTION_HASH_PURPOSE,\n await encodeMetadata(metadata)\n )\n )\n\n return hash\n}\n\nasync function encodePreparedTransaction(\n preparedTransaction: PreparedTransaction\n): Promise<Uint8Array> {\n const nodesDict = createNodesDict(preparedTransaction)\n\n const transactionHash = await hashTransaction(\n preparedTransaction.transaction!,\n nodesDict\n )\n const metadataHash = await hashMetadata(preparedTransaction.metadata!)\n\n return mkByteArray(\n PREPARED_TRANSACTION_HASH_PURPOSE,\n HASHING_SCHEME_VERSION,\n transactionHash,\n metadataHash\n )\n}\n\nexport async function computePreparedTransaction(\n preparedTransaction: PreparedTransaction\n): Promise<Uint8Array> {\n return sha256(await encodePreparedTransaction(preparedTransaction))\n}\n\nexport async function computeSha256CantonHash(\n purpose: number,\n bytes: Uint8Array\n) {\n const encodedPurpose = await encodeInt32(purpose)\n\n const hashInput = await mkByteArray(encodedPurpose, bytes)\n const hashBytes = await sha256(hashInput)\n const multiprefix = new Uint8Array([0x12, 0x20])\n return mkByteArray(multiprefix, hashBytes)\n}\n\nexport async function computeMultiHashForTopology(hashes: Uint8Array[]) {\n const sortedHashes = hashes\n .slice()\n .sort((a, b) => toHex(a).localeCompare(toHex(b)))\n\n const numHashesBytes = await encodeInt32(sortedHashes.length)\n\n const concatenatedHashes = [numHashesBytes]\n\n for (const h of sortedHashes) {\n const lengthBytes = await encodeInt32(h.length)\n concatenatedHashes.push(lengthBytes, h)\n }\n\n return mkByteArray(...concatenatedHashes)\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n PreparedTransaction,\n TopologyTransaction,\n} from '@canton-network/core-ledger-proto'\nimport { computePreparedTransaction } from './hashing_scheme_v2.js'\nimport { fromBase64, toBase64, toHex } from './utils.js'\nexport {\n computeSha256CantonHash,\n computeMultiHashForTopology,\n} from './hashing_scheme_v2.js'\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Decodes a base64 encoded prepared transaction into a well-typed data model, generated directly from Protobuf definitions.\n *\n * @param preparedTransaction - The prepared transaction in base64 format\n * @returns The decoded prepared transaction\n */\nexport const decodePreparedTransaction = (\n preparedTransaction: string\n): PreparedTransaction => {\n const bytes = fromBase64(preparedTransaction)\n return PreparedTransaction.fromBinary(bytes)\n}\n\nexport const decodeTopologyTransaction = (\n topologyTx: string\n): TopologyTransaction => {\n const bytes = fromBase64(topologyTx)\n return TopologyTransaction.fromBinary(bytes)\n}\n\n/**\n * Computes the hash of a prepared transaction.\n *\n * @param preparedTransaction - The prepared transaction to hash\n * @param format - The format of the output hash (base64 or hex)\n * @returns The computed hash in the specified format\n */\nexport const hashPreparedTransaction = async (\n preparedTransaction: string | PreparedTransaction,\n format: 'base64' | 'hex' = 'base64'\n): Promise<string> => {\n let preparedTx: PreparedTransaction\n\n if (typeof preparedTransaction === 'string') {\n preparedTx = decodePreparedTransaction(preparedTransaction)\n } else {\n preparedTx = preparedTransaction\n }\n\n const hash = await computePreparedTransaction(preparedTx)\n\n switch (format) {\n case 'base64':\n return toBase64(hash)\n case 'hex':\n return toHex(hash)\n }\n}\n\ntype ValidationResult = Record<\n string,\n {\n isAuthorized: boolean\n locations: string[]\n }\n>\n\nexport const validateAuthorizedPartyIds = (\n preparedTransaction: string | PreparedTransaction,\n authorizedPartyIds: string[]\n): ValidationResult => {\n let preparedTx: PreparedTransaction\n\n if (typeof preparedTransaction === 'string') {\n preparedTx = decodePreparedTransaction(preparedTransaction)\n } else {\n preparedTx = preparedTransaction\n }\n\n const results: ValidationResult = {}\n preparedTx.metadata?.submitterInfo?.actAs.forEach((party) => {\n results[party] = {\n isAuthorized: authorizedPartyIds.includes(party),\n locations: [\n ...results[party].locations,\n 'metadata.submitterInfo.actAs',\n ],\n }\n })\n\n // then check transaction nodes\n preparedTx.transaction?.nodes.forEach((node) => {\n if (node.versionedNode.oneofKind === 'v1') {\n if (node.versionedNode.v1.nodeType.oneofKind === 'create') {\n node.versionedNode.v1.nodeType.create.signatories.forEach(\n (party) => {\n results[party] = {\n isAuthorized: authorizedPartyIds.includes(party),\n locations: [\n ...results[party].locations,\n `transaction.nodes.${node.nodeId}.create.signatories`,\n ],\n }\n }\n )\n\n node.versionedNode.v1.nodeType.create.stakeholders.forEach(\n (party) => {\n results[party] = {\n isAuthorized: authorizedPartyIds.includes(party),\n locations: [\n ...results[party].locations,\n `transaction.nodes.${node.nodeId}.create.stakeholders`,\n ],\n }\n }\n )\n }\n\n if (node.versionedNode.v1.nodeType.oneofKind === 'exercise') {\n throw new Error('Unsupported')\n }\n\n if (node.versionedNode.v1.nodeType.oneofKind === 'fetch') {\n throw new Error('Unsupported')\n }\n\n if (node.versionedNode.v1.nodeType.oneofKind === 'rollback') {\n // do we need to check these nodes?\n }\n }\n })\n\n return results\n}\n\n/** Parsed transaction metadata to JSON for display purposes */\nexport interface ParsedTransactionInfo {\n packageName?: string\n moduleName?: string\n entityName?: string\n isCreate: boolean\n isExercise: boolean\n signatories?: string[]\n stakeholders?: string[]\n jsonString?: string\n //defined as packageName:ModuleName:EntityName\n templateId?: string\n choiceId?: string\n amount?: string\n}\n\nfunction decodePreparedTransactionToJsonString(txBase64: string): string {\n const t = decodePreparedTransaction(txBase64)\n return JSON.stringify(\n t,\n (key, value) => (typeof value === 'bigint' ? value.toString() : value),\n 2\n )\n}\n\nfunction getNodeType(node: any) {\n if (node?.versionedNode?.oneofKind !== 'v1') {\n return null\n }\n\n return node.versionedNode.v1?.nodeType ?? null\n}\n\nfunction findNodeById(nodes: any[], nodeId: string | undefined) {\n if (!nodeId) {\n return null\n }\n\n return nodes.find((node) => node?.nodeId === nodeId) ?? null\n}\n\nfunction getPrimaryNode(obj: any, nodes: any[]) {\n const rootId = obj?.transaction?.roots?.[0]\n return findNodeById(nodes, rootId)\n}\n\nfunction getFirstNodeOfType(nodes: any[], type: string) {\n return nodes.find((node) => getNodeType(node)?.oneofKind === type) ?? null\n}\n\nfunction getRecordFields(value: any) {\n if (value?.sum?.oneofKind !== 'record') {\n return []\n }\n\n return value.sum.record?.fields ?? []\n}\n\nfunction getFieldValue(value: any, label: string) {\n return getRecordFields(value).find((field: any) => field?.label === label)\n ?.value\n}\n\nfunction getNumericValue(value: any): string | undefined {\n if (value?.sum?.oneofKind === 'numeric' && value.sum.numeric) {\n return value.sum.numeric\n }\n\n return undefined\n}\n\nfunction extractChoiceIdAndAmount(obj: any) {\n const nodes = obj?.transaction?.nodes ?? []\n if (!Array.isArray(nodes) || nodes.length === 0) {\n return {}\n }\n\n const primaryNode = getPrimaryNode(obj, nodes)\n const primaryExerciseNode =\n getNodeType(primaryNode)?.oneofKind === 'exercise' ? primaryNode : null\n const exerciseNode =\n primaryExerciseNode || getFirstNodeOfType(nodes, 'exercise')\n const createNode = getFirstNodeOfType(nodes, 'create')\n\n const exercise = getNodeType(exerciseNode)?.exercise\n const create = getNodeType(createNode)?.create\n\n const choiceId = exercise?.choiceId\n const amount =\n getNumericValue(getFieldValue(exercise?.chosenValue, 'amount')) ??\n getNumericValue(getFieldValue(create?.argument, 'amount')) ??\n getNumericValue(\n getFieldValue(\n getFieldValue(create?.argument, 'amount'),\n 'initialAmount'\n )\n )\n\n return {\n ...(choiceId ? { choiceId } : {}),\n ...(amount ? { amount } : {}),\n }\n}\n\nexport function parsePreparedTransaction(\n txBase64: string\n): ParsedTransactionInfo {\n const jsonString = decodePreparedTransactionToJsonString(txBase64)\n const obj = JSON.parse(jsonString)\n\n const result: ParsedTransactionInfo = {\n jsonString,\n isCreate: false,\n isExercise: false,\n }\n\n function deepSearch(value: any) {\n if (value === null || typeof value !== 'object') return\n\n // Extract fields if present\n if (typeof value.packageName === 'string') {\n result.packageName = value.packageName\n }\n if (Array.isArray(value.signatories)) {\n result.signatories = value.signatories\n }\n if (Array.isArray(value.stakeholders)) {\n result.stakeholders = value.stakeholders\n }\n if (value.templateId?.moduleName) {\n result.moduleName = value.templateId.moduleName\n }\n if (value.templateId?.entityName) {\n result.entityName = value.templateId.entityName\n }\n if (value.nodeType?.create) {\n result.isCreate = true\n }\n if (value.nodeType?.exercise) {\n result.isExercise = true\n }\n // Continue walking the object\n for (const key of Object.keys(value)) {\n deepSearch(value[key])\n }\n }\n\n deepSearch(obj)\n result.templateId = `${result.packageName || 'N/A'}:${result.moduleName || 'N/A'}:${result.entityName || 'N/A'}` // Ensure this is always set to the defined value\n\n Object.assign(result, extractChoiceIdAndAmount(obj))\n\n return result\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/hashing_scheme_v2.ts","../src/index.ts"],"names":["seed","PreparedTransaction"],"mappings":"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","file":"index.js","sourcesContent":["// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/** Take a base64 encoded string and return a Uint8Array of the decoded bytes */\nexport function fromBase64(b64: string): Uint8Array {\n const binaryString = atob(b64)\n const len = binaryString.length\n const bytes = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i)\n }\n return bytes\n}\n\n/** Take a byte buffer (Uint8Array) and encode it into a base64 string */\nexport function toBase64(data: Uint8Array): string {\n let binaryString = ''\n const len = data.byteLength\n for (let i = 0; i < len; i++) {\n binaryString += String.fromCharCode(data[i])\n }\n return btoa(binaryString)\n}\n\n/** Take a byte buffer (Uint8Array) and encode it into a hex string */\nexport function toHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('')\n}\n\nexport function fromHex(hex: string): Uint8Array {\n if (hex.length % 2 !== 0) {\n throw new Error('Invalid hex string length')\n }\n\n const bytes = new Uint8Array(hex.length / 2)\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16)\n }\n return bytes\n}\n\nexport async function sha256(\n message: string | Uint8Array\n): Promise<Uint8Array> {\n const msg =\n typeof message === 'string'\n ? new TextEncoder().encode(message)\n : message\n\n return crypto.subtle\n .digest('SHA-256', new Uint8Array(msg))\n .then((hash) => new Uint8Array(hash))\n}\n\n/** Utility to concatenate byte arrays or single bytes */\nexport async function mkByteArray(\n ...args: (number | Uint8Array)[]\n): Promise<Uint8Array> {\n const normalizedArgs: Uint8Array[] = args.map((arg) => {\n if (typeof arg === 'number') {\n return new Uint8Array([arg])\n } else {\n return arg\n }\n })\n\n let totalLength = 0\n normalizedArgs.forEach((arg) => {\n totalLength += arg.length\n })\n\n const mergedArray = new Uint8Array(totalLength)\n let offset = 0\n\n normalizedArgs.forEach((arg) => {\n mergedArray.set(arg, offset)\n offset += arg.length\n })\n\n return mergedArray\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n DamlTransaction,\n DamlTransaction_Node,\n DamlTransaction_NodeSeed,\n HashingSchemeVersion,\n Metadata,\n Metadata_InputContract,\n PreparedTransaction,\n} from '@canton-network/core-ledger-proto'\nimport {\n Create,\n Exercise,\n Fetch,\n Rollback,\n} from '@canton-network/core-ledger-proto'\nimport {\n GenMap_Entry,\n Identifier,\n RecordField,\n TextMap_Entry,\n Value,\n} from '@canton-network/core-ledger-proto'\nimport { mkByteArray, sha256, toHex } from './utils.js'\n\n// Hash purpose reserved for prepared transaction\nconst PREPARED_TRANSACTION_HASH_PURPOSE = Uint8Array.from([\n 0x00, 0x00, 0x00, 0x30,\n])\n\nconst NODE_ENCODING_VERSION = Uint8Array.from([0x01])\n\nconst HASHING_SCHEME_VERSION = Uint8Array.from([HashingSchemeVersion.V2])\n\nasync function encodeBool(value: boolean): Promise<Uint8Array> {\n return new Uint8Array([value ? 1 : 0])\n}\n\nasync function encodeInt32(value: number): Promise<Uint8Array> {\n const buffer = new ArrayBuffer(4)\n const view = new DataView(buffer)\n view.setInt32(0, value, false) // true for little-endian\n return new Uint8Array(buffer)\n}\n\nasync function encodeInt64(\n value: bigint | number | undefined\n): Promise<Uint8Array> {\n const num = typeof value === 'bigint' ? value : BigInt(value || 0)\n const buffer = new ArrayBuffer(8)\n const view = new DataView(buffer)\n view.setBigInt64(0, num, false) // true for little-endian\n return new Uint8Array(buffer)\n}\n\nexport async function encodeString(value: string = ''): Promise<Uint8Array> {\n const utf8Bytes = new TextEncoder().encode(value)\n return encodeBytes(utf8Bytes)\n}\n\nasync function encodeBytes(value: Uint8Array): Promise<Uint8Array> {\n const length = await encodeInt32(value.length)\n return mkByteArray(length, value)\n}\n\nasync function encodeHash(value: Uint8Array): Promise<Uint8Array> {\n return value\n}\n\nfunction encodeHexString(value: string = ''): Promise<Uint8Array> {\n // Convert hex string to Uint8Array\n const bytes = new Uint8Array(value.length / 2)\n for (let i = 0; i < value.length; i += 2) {\n bytes[i / 2] = parseInt(value.slice(i, i + 2), 16)\n }\n return encodeBytes(bytes)\n}\n\n// Maybe suspicious?\nasync function encodeOptional<T>(\n value: T | undefined | null,\n encodeFn: (arg: T) => Promise<Uint8Array>\n): Promise<Uint8Array> {\n if (value === undefined || value === null) {\n return new Uint8Array([0]) // Return empty array for undefined fields\n } else {\n return mkByteArray(1, await encodeFn(value))\n }\n}\n\n// Maybe suspicious?\nasync function encodeProtoOptional<T, P extends object>(\n parentValue: P,\n fieldName: keyof P,\n value: T,\n encodeFn: (value: T) => Promise<Uint8Array>\n): Promise<Uint8Array> {\n if (parentValue && parentValue[fieldName] !== undefined) {\n return mkByteArray(1, await encodeFn(value))\n } else {\n return new Uint8Array([0]) // Return empty array for undefined fields\n }\n}\n\nasync function encodeRepeated<T>(\n values: T[] = [],\n encodeFn: (value: T) => Promise<Uint8Array>\n): Promise<Uint8Array> {\n const length = await encodeInt32(values.length)\n const encodedValues = await Promise.all(values.map(encodeFn))\n return mkByteArray(length, ...encodedValues)\n}\n\nfunction findSeed(\n nodeId: string,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Uint8Array | undefined {\n const seed = nodeSeeds.find(\n (seed) => seed.nodeId.toString() === nodeId\n )?.seed\n\n return seed\n}\n\nasync function encodeIdentifier(identifier: Identifier): Promise<Uint8Array> {\n return mkByteArray(\n await encodeString(identifier.packageId),\n await encodeRepeated(identifier.moduleName.split('.'), encodeString),\n await encodeRepeated(identifier.entityName.split('.'), encodeString)\n )\n}\n\nasync function encodeMetadata(metadata: Metadata): Promise<Uint8Array> {\n return mkByteArray(\n Uint8Array.from([0x01]),\n await encodeRepeated(metadata.submitterInfo?.actAs, encodeString),\n await encodeString(metadata.submitterInfo?.commandId),\n await encodeString(metadata.transactionUuid),\n await encodeInt32(metadata.mediatorGroup),\n await encodeString(metadata.synchronizerId),\n await encodeProtoOptional(\n metadata,\n 'minLedgerEffectiveTime',\n metadata.minLedgerEffectiveTime,\n encodeInt64\n ),\n await encodeProtoOptional(\n metadata,\n 'maxLedgerEffectiveTime',\n metadata.maxLedgerEffectiveTime,\n encodeInt64\n ),\n await encodeInt64(metadata.preparationTime),\n await encodeRepeated(metadata.inputContracts, encodeInputContract)\n )\n}\n\nasync function encodeCreateNode(\n create: Create | undefined,\n nodeId: string,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return create\n ? mkByteArray(\n NODE_ENCODING_VERSION,\n await encodeString(create.lfVersion),\n 0 /** Create node tag */,\n await encodeOptional(findSeed(nodeId, nodeSeeds), encodeHash),\n await encodeHexString(create.contractId),\n await encodeString(create.packageName),\n await encodeIdentifier(create.templateId!),\n await encodeValue(create.argument!),\n await encodeRepeated(create.signatories, encodeString),\n await encodeRepeated(create.stakeholders, encodeString)\n )\n : mkByteArray()\n}\n\nasync function encodeExerciseNode(\n exercise: Exercise,\n nodeId: string,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return mkByteArray(\n NODE_ENCODING_VERSION,\n await encodeString(exercise.lfVersion),\n 1 /** Exercise node tag */,\n await encodeHash(findSeed(nodeId, nodeSeeds)!),\n await encodeHexString(exercise.contractId),\n await encodeString(exercise.packageName),\n await encodeIdentifier(exercise.templateId!),\n await encodeRepeated(exercise.signatories, encodeString),\n await encodeRepeated(exercise.stakeholders, encodeString),\n await encodeRepeated(exercise.actingParties, encodeString),\n await encodeProtoOptional(\n exercise,\n 'interfaceId',\n exercise.interfaceId!,\n encodeIdentifier\n ),\n await encodeString(exercise.choiceId),\n await encodeValue(exercise.chosenValue!),\n await encodeBool(exercise.consuming),\n await encodeProtoOptional(\n exercise,\n 'exerciseResult',\n exercise.exerciseResult!,\n encodeValue\n ),\n await encodeRepeated(exercise.choiceObservers, encodeString),\n await encodeRepeated(\n exercise.children,\n encodeNodeId(nodesDict, nodeSeeds)\n )\n )\n}\n\nasync function encodeFetchNode(fetch: Fetch): Promise<Uint8Array> {\n return mkByteArray(\n NODE_ENCODING_VERSION,\n await encodeString(fetch.lfVersion),\n 2 /** Fetch node tag */,\n await encodeHexString(fetch.contractId),\n await encodeString(fetch.packageName),\n await encodeIdentifier(fetch.templateId!),\n await encodeRepeated(fetch.signatories, encodeString),\n await encodeRepeated(fetch.stakeholders, encodeString),\n await encodeProtoOptional(\n fetch,\n 'interfaceId',\n fetch.interfaceId!,\n encodeIdentifier\n ),\n await encodeRepeated(fetch.actingParties, encodeString)\n )\n}\n\nasync function encodeRollbackNode(\n rollback: Rollback,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return mkByteArray(\n NODE_ENCODING_VERSION,\n 3 /** Rollback node tag */,\n await encodeRepeated(\n rollback.children,\n encodeNodeId(nodesDict, nodeSeeds)\n )\n )\n}\n\nasync function encodeInputContract(contract: Metadata_InputContract) {\n if (contract.contract.oneofKind === 'v1')\n return mkByteArray(\n await encodeInt64(contract.createdAt),\n await sha256(\n await encodeCreateNode(\n contract.contract.v1,\n 'unused_node_id',\n []\n )\n )\n )\n else throw new Error('Unsupported contract version')\n}\n\nexport async function encodeValue(value: Value): Promise<Uint8Array> {\n if (value.sum.oneofKind === 'unit') {\n return Uint8Array.from([0]) // Unit value\n } else if (value.sum.oneofKind === 'bool') {\n return mkByteArray(\n Uint8Array.from([0x01]),\n await encodeBool(value.sum.bool)\n )\n } else if (value.sum.oneofKind === 'int64') {\n return mkByteArray(\n Uint8Array.from([0x02]),\n await encodeInt64(parseInt(value.sum.int64))\n )\n } else if (value.sum.oneofKind === 'numeric') {\n return mkByteArray(\n Uint8Array.from([0x03]),\n await encodeString(value.sum.numeric)\n )\n } else if (value.sum.oneofKind === 'timestamp') {\n return mkByteArray(\n Uint8Array.from([0x04]),\n await encodeInt64(BigInt(value.sum.timestamp))\n )\n } else if (value.sum.oneofKind === 'date') {\n return mkByteArray(\n Uint8Array.from([0x05]),\n await encodeInt32(value.sum.date)\n )\n } else if (value.sum.oneofKind === 'party') {\n return mkByteArray(\n Uint8Array.from([0x06]),\n await encodeString(value.sum.party)\n )\n } else if (value.sum.oneofKind === 'text') {\n return mkByteArray(\n Uint8Array.from([0x07]),\n await encodeString(value.sum.text)\n )\n } else if (value.sum.oneofKind === 'contractId') {\n return mkByteArray(\n Uint8Array.from([0x08]),\n await encodeHexString(value.sum.contractId)\n )\n } else if (value.sum.oneofKind === 'optional') {\n return mkByteArray(\n Uint8Array.from([0x09]),\n await encodeProtoOptional(\n value.sum.optional,\n 'value',\n value.sum.optional.value as Value,\n encodeValue\n )\n )\n } else if (value.sum.oneofKind === 'list') {\n return mkByteArray(\n Uint8Array.from([0x0a]),\n await encodeRepeated(value.sum.list.elements, encodeValue)\n )\n } else if (value.sum.oneofKind === 'textMap') {\n return mkByteArray(\n Uint8Array.from([0x0b]),\n await encodeRepeated(value.sum.textMap?.entries, encodeTextMapEntry)\n )\n } else if (value.sum.oneofKind === 'record') {\n return mkByteArray(\n Uint8Array.from([0x0c]),\n await encodeProtoOptional(\n value.sum.record,\n 'recordId',\n value.sum.record.recordId!,\n encodeIdentifier\n ),\n await encodeRepeated(value.sum.record.fields, encodeRecordField)\n )\n } else if (value.sum.oneofKind === 'variant') {\n return mkByteArray(\n Uint8Array.from([0x0d]),\n await encodeProtoOptional(\n value.sum.variant,\n 'variantId',\n value.sum.variant.variantId!,\n encodeIdentifier\n ),\n await encodeString(value.sum.variant.constructor),\n await encodeValue(value.sum.variant.value!)\n )\n } else if (value.sum.oneofKind === 'enum') {\n return mkByteArray(\n Uint8Array.from([0x0e]),\n await encodeProtoOptional(\n value.sum.enum,\n 'enumId',\n value.sum.enum.enumId!,\n encodeIdentifier\n ),\n await encodeString(value.sum.enum.constructor)\n )\n } else if (value.sum.oneofKind === 'genMap') {\n return mkByteArray(\n Uint8Array.from([0x0f]),\n await encodeRepeated(value.sum.genMap?.entries, encodeGenMapEntry)\n )\n }\n\n throw new Error('Unsupported value type: ' + JSON.stringify(value))\n}\n\nasync function encodeTextMapEntry(entry: TextMap_Entry): Promise<Uint8Array> {\n return mkByteArray(\n await encodeString(entry.key),\n await encodeValue(entry.value!)\n )\n}\n\nasync function encodeRecordField(field: RecordField): Promise<Uint8Array> {\n return mkByteArray(\n await encodeOptional(field.label, encodeString),\n await encodeValue(field.value!)\n )\n}\n\nasync function encodeGenMapEntry(entry: GenMap_Entry): Promise<Uint8Array> {\n return mkByteArray(\n await encodeValue(entry.key!),\n await encodeValue(entry.value!)\n )\n}\n\nfunction encodeNodeId(\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): (nodeId: string) => Promise<Uint8Array> {\n return async (nodeId: string): Promise<Uint8Array> => {\n const node = nodesDict[nodeId]\n if (!node) {\n throw new Error(`Node with ID ${nodeId} not found in transaction`)\n }\n\n const encodedNode = await encodeNode(node, nodesDict, nodeSeeds)\n return sha256(encodedNode)\n }\n}\n\nasync function encodeNode(\n node: DamlTransaction_Node,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n if (node.versionedNode.oneofKind === 'v1') {\n if (node.versionedNode.v1.nodeType.oneofKind === 'create') {\n return encodeCreateNode(\n node.versionedNode.v1.nodeType.create,\n node.nodeId,\n nodeSeeds\n )\n } else if (node.versionedNode.v1.nodeType.oneofKind === 'exercise') {\n return encodeExerciseNode(\n node.versionedNode.v1.nodeType.exercise,\n node.nodeId,\n nodesDict,\n nodeSeeds\n )\n } else if (node.versionedNode.v1.nodeType.oneofKind === 'fetch') {\n return encodeFetchNode(node.versionedNode.v1.nodeType.fetch)\n } else if (node.versionedNode.v1.nodeType.oneofKind === 'rollback') {\n return encodeRollbackNode(\n node.versionedNode.v1.nodeType.rollback,\n nodesDict,\n nodeSeeds\n )\n }\n\n throw new Error('Unsupported node type')\n } else {\n throw new Error(`Unsupported node version`)\n }\n}\n\nfunction createNodesDict(\n preparedTransaction: PreparedTransaction\n): Record<string, DamlTransaction_Node> {\n const nodesDict: Record<string, DamlTransaction_Node> = {}\n const nodes = preparedTransaction.transaction?.nodes || []\n for (const node of nodes) {\n nodesDict[node.nodeId] = node\n }\n return nodesDict\n}\n\nasync function encodeTransaction(\n transaction: DamlTransaction,\n nodesDict: Record<string, DamlTransaction_Node>,\n nodeSeeds: DamlTransaction_NodeSeed[]\n): Promise<Uint8Array> {\n return mkByteArray(\n await encodeString(transaction.version),\n await encodeRepeated(\n transaction.roots,\n encodeNodeId(nodesDict, nodeSeeds)\n )\n )\n}\n\nasync function hashTransaction(\n transaction: DamlTransaction,\n nodesDict: Record<string, DamlTransaction_Node>\n): Promise<Uint8Array> {\n const encodedTransaction = await encodeTransaction(\n transaction,\n nodesDict,\n transaction.nodeSeeds\n )\n\n const hash = await sha256(\n await mkByteArray(PREPARED_TRANSACTION_HASH_PURPOSE, encodedTransaction)\n )\n\n return hash\n}\n\nasync function hashMetadata(metadata: Metadata): Promise<Uint8Array> {\n const hash = await sha256(\n await mkByteArray(\n PREPARED_TRANSACTION_HASH_PURPOSE,\n await encodeMetadata(metadata)\n )\n )\n\n return hash\n}\n\nasync function encodePreparedTransaction(\n preparedTransaction: PreparedTransaction\n): Promise<Uint8Array> {\n const nodesDict = createNodesDict(preparedTransaction)\n\n const transactionHash = await hashTransaction(\n preparedTransaction.transaction!,\n nodesDict\n )\n const metadataHash = await hashMetadata(preparedTransaction.metadata!)\n\n return mkByteArray(\n PREPARED_TRANSACTION_HASH_PURPOSE,\n HASHING_SCHEME_VERSION,\n transactionHash,\n metadataHash\n )\n}\n\nexport async function computePreparedTransaction(\n preparedTransaction: PreparedTransaction\n): Promise<Uint8Array> {\n return sha256(await encodePreparedTransaction(preparedTransaction))\n}\n\nexport async function computeSha256CantonHash(\n purpose: number,\n bytes: Uint8Array\n) {\n const encodedPurpose = await encodeInt32(purpose)\n\n const hashInput = await mkByteArray(encodedPurpose, bytes)\n const hashBytes = await sha256(hashInput)\n const multiprefix = new Uint8Array([0x12, 0x20])\n return mkByteArray(multiprefix, hashBytes)\n}\n\nexport async function computeMultiHashForTopology(hashes: Uint8Array[]) {\n const sortedHashes = hashes\n .slice()\n .sort((a, b) => toHex(a).localeCompare(toHex(b)))\n\n const numHashesBytes = await encodeInt32(sortedHashes.length)\n\n const concatenatedHashes = [numHashesBytes]\n\n for (const h of sortedHashes) {\n const lengthBytes = await encodeInt32(h.length)\n concatenatedHashes.push(lengthBytes, h)\n }\n\n return mkByteArray(...concatenatedHashes)\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n PreparedTransaction,\n TopologyTransaction,\n} from '@canton-network/core-ledger-proto'\nimport { computePreparedTransaction } from './hashing_scheme_v2.js'\nimport { fromBase64, toBase64, toHex } from './utils.js'\nexport {\n computeSha256CantonHash,\n computeMultiHashForTopology,\n} from './hashing_scheme_v2.js'\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Decodes a base64 encoded prepared transaction into a well-typed data model, generated directly from Protobuf definitions.\n *\n * @param preparedTransaction - The prepared transaction in base64 format\n * @returns The decoded prepared transaction\n */\nexport const decodePreparedTransaction = (\n preparedTransaction: string\n): PreparedTransaction => {\n const bytes = fromBase64(preparedTransaction)\n return PreparedTransaction.fromBinary(bytes)\n}\n\nexport const decodeTopologyTransaction = (\n topologyTx: string\n): TopologyTransaction => {\n const bytes = fromBase64(topologyTx)\n return TopologyTransaction.fromBinary(bytes)\n}\n\n/**\n * Computes the hash of a prepared transaction.\n *\n * @param preparedTransaction - The prepared transaction to hash\n * @param format - The format of the output hash (base64 or hex)\n * @returns The computed hash in the specified format\n */\nexport const hashPreparedTransaction = async (\n preparedTransaction: string | PreparedTransaction,\n format: 'base64' | 'hex' = 'base64'\n): Promise<string> => {\n let preparedTx: PreparedTransaction\n\n if (typeof preparedTransaction === 'string') {\n preparedTx = decodePreparedTransaction(preparedTransaction)\n } else {\n preparedTx = preparedTransaction\n }\n\n const hash = await computePreparedTransaction(preparedTx)\n\n switch (format) {\n case 'base64':\n return toBase64(hash)\n case 'hex':\n return toHex(hash)\n }\n}\n\ntype ValidationResult = Record<\n string,\n {\n isAuthorized: boolean\n locations: string[]\n }\n>\n\nexport const validateAuthorizedPartyIds = (\n preparedTransaction: string | PreparedTransaction,\n authorizedPartyIds: string[]\n): ValidationResult => {\n let preparedTx: PreparedTransaction\n\n if (typeof preparedTransaction === 'string') {\n preparedTx = decodePreparedTransaction(preparedTransaction)\n } else {\n preparedTx = preparedTransaction\n }\n\n const results: ValidationResult = {}\n const updateParty = (party: string, location: string) => {\n if (!results[party]) {\n results[party] = {\n isAuthorized: authorizedPartyIds.includes(party),\n locations: [],\n }\n }\n\n results[party].locations.push(location)\n }\n\n preparedTx.metadata?.submitterInfo?.actAs.forEach((party) => {\n updateParty(party, 'metadata.submitterInfo.actAs')\n })\n\n // then check transaction nodes\n preparedTx.transaction?.nodes.forEach((node) => {\n if (node.versionedNode.oneofKind === 'v1') {\n if (node.versionedNode.v1.nodeType.oneofKind === 'create') {\n node.versionedNode.v1.nodeType.create.signatories.forEach(\n (party) => {\n updateParty(\n party,\n `transaction.nodes.${node.nodeId}.create.signatories`\n )\n }\n )\n\n node.versionedNode.v1.nodeType.create.stakeholders.forEach(\n (party) => {\n updateParty(\n party,\n `transaction.nodes.${node.nodeId}.create.stakeholders`\n )\n }\n )\n }\n\n if (node.versionedNode.v1.nodeType.oneofKind === 'exercise') {\n throw new Error('Unsupported')\n }\n\n if (node.versionedNode.v1.nodeType.oneofKind === 'fetch') {\n throw new Error('Unsupported')\n }\n\n if (node.versionedNode.v1.nodeType.oneofKind === 'rollback') {\n // do we need to check these nodes?\n }\n }\n })\n\n return results\n}\n\n/** Parsed transaction metadata to JSON for display purposes */\nexport interface ParsedTransactionInfo {\n packageName?: string\n moduleName?: string\n entityName?: string\n isCreate: boolean\n isExercise: boolean\n signatories?: string[]\n stakeholders?: string[]\n jsonString?: string\n //defined as packageName:ModuleName:EntityName\n templateId?: string\n choiceId?: string\n amount?: string\n}\n\nfunction decodePreparedTransactionToJsonString(txBase64: string): string {\n const t = decodePreparedTransaction(txBase64)\n return JSON.stringify(\n t,\n (key, value) => (typeof value === 'bigint' ? value.toString() : value),\n 2\n )\n}\n\nfunction getNodeType(node: any) {\n if (node?.versionedNode?.oneofKind !== 'v1') {\n return null\n }\n\n return node.versionedNode.v1?.nodeType ?? null\n}\n\nfunction findNodeById(nodes: any[], nodeId: string | undefined) {\n if (!nodeId) {\n return null\n }\n\n return nodes.find((node) => node?.nodeId === nodeId) ?? null\n}\n\nfunction getPrimaryNode(obj: any, nodes: any[]) {\n const rootId = obj?.transaction?.roots?.[0]\n return findNodeById(nodes, rootId)\n}\n\nfunction getFirstNodeOfType(nodes: any[], type: string) {\n return nodes.find((node) => getNodeType(node)?.oneofKind === type) ?? null\n}\n\nfunction getRecordFields(value: any) {\n if (value?.sum?.oneofKind !== 'record') {\n return []\n }\n\n return value.sum.record?.fields ?? []\n}\n\nfunction getFieldValue(value: any, label: string) {\n return getRecordFields(value).find((field: any) => field?.label === label)\n ?.value\n}\n\nfunction getNumericValue(value: any): string | undefined {\n if (value?.sum?.oneofKind === 'numeric' && value.sum.numeric) {\n return value.sum.numeric\n }\n\n return undefined\n}\n\nfunction extractChoiceIdAndAmount(obj: any) {\n const nodes = obj?.transaction?.nodes ?? []\n if (!Array.isArray(nodes) || nodes.length === 0) {\n return {}\n }\n\n const primaryNode = getPrimaryNode(obj, nodes)\n const primaryExerciseNode =\n getNodeType(primaryNode)?.oneofKind === 'exercise' ? primaryNode : null\n const exerciseNode =\n primaryExerciseNode || getFirstNodeOfType(nodes, 'exercise')\n const createNode = getFirstNodeOfType(nodes, 'create')\n\n const exercise = getNodeType(exerciseNode)?.exercise\n const create = getNodeType(createNode)?.create\n\n const choiceId = exercise?.choiceId\n const amount =\n getNumericValue(getFieldValue(exercise?.chosenValue, 'amount')) ??\n getNumericValue(getFieldValue(create?.argument, 'amount')) ??\n getNumericValue(\n getFieldValue(\n getFieldValue(create?.argument, 'amount'),\n 'initialAmount'\n )\n )\n\n return {\n ...(choiceId ? { choiceId } : {}),\n ...(amount ? { amount } : {}),\n }\n}\n\nexport function parsePreparedTransaction(\n txBase64: string\n): ParsedTransactionInfo {\n const jsonString = decodePreparedTransactionToJsonString(txBase64)\n const obj = JSON.parse(jsonString)\n\n const result: ParsedTransactionInfo = {\n jsonString,\n isCreate: false,\n isExercise: false,\n }\n\n function deepSearch(value: any) {\n if (value === null || typeof value !== 'object') return\n\n // Extract fields if present\n if (typeof value.packageName === 'string') {\n result.packageName = value.packageName\n }\n if (Array.isArray(value.signatories)) {\n result.signatories = value.signatories\n }\n if (Array.isArray(value.stakeholders)) {\n result.stakeholders = value.stakeholders\n }\n if (value.templateId?.moduleName) {\n result.moduleName = value.templateId.moduleName\n }\n if (value.templateId?.entityName) {\n result.entityName = value.templateId.entityName\n }\n if (value.nodeType?.create) {\n result.isCreate = true\n }\n if (value.nodeType?.exercise) {\n result.isExercise = true\n }\n // Continue walking the object\n for (const key of Object.keys(value)) {\n deepSearch(value[key])\n }\n }\n\n deepSearch(obj)\n result.templateId = `${result.packageName || 'N/A'}:${result.moduleName || 'N/A'}:${result.entityName || 'N/A'}` // Ensure this is always set to the defined value\n\n Object.assign(result, extractChoiceIdAndAmount(obj))\n\n return result\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canton-network/core-tx-visualizer",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Decode and visualize prepared transactions from Canton",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"vitest": "^4.1.2"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@canton-network/core-ledger-proto": "^1.
|
|
36
|
+
"@canton-network/core-ledger-proto": "^1.4.0",
|
|
37
37
|
"@types/node": "^25.3.3",
|
|
38
38
|
"camelcase-keys": "^10.0.2"
|
|
39
39
|
},
|