@ledgerhq/hw-app-canton
Version:
Ledger Hardware Wallet Canton Application API
35 lines • 1.5 kB
JavaScript
import { encodeDamlTransaction, encodeInputContract, encodeMetadata, encodeNode, } from "./encodeTransaction";
/**
* Splits a Canton transaction into components for prepared transaction signing.
* Converts protobuf transaction data into structured components that can be
* sent to the Ledger device for signing.
*
* @param transaction - The transaction JSON structure from the Gateway API
* @returns Prepared transaction components ready for device signing
*/
export function splitTransaction(transaction) {
const { transaction: transactionData, metadata } = transaction;
// Process DAML transaction
const damlTransactionBytes = encodeDamlTransaction(transactionData);
// Process input contracts
const inputContracts = (metadata.inputContracts || []).map((contract) => encodeInputContract(contract));
// Process metadata
const metadataBytes = encodeMetadata(metadata, inputContracts.length);
// Process nodes
const nodesArray = transactionData.nodes || [];
const nodes = new Array(nodesArray.length);
const lastIndex = nodesArray.length - 1;
for (const node of nodesArray) {
const nodeId = Number.parseInt(node.nodeId || "0", 10);
const nodeBytes = encodeNode(node);
const pos = lastIndex - nodeId;
nodes[pos] = nodeBytes;
}
return {
damlTransaction: damlTransactionBytes,
nodes,
metadata: metadataBytes,
inputContracts,
};
}
//# sourceMappingURL=splitTransaction.js.map