UNPKG

@nervosnetwork/ckb-sdk-utils

Version:

Utils module of @nervosnetwork/ckb-sdk-core

118 lines 4.8 kB
import { serializeScript } from './script.js'; import { toUint32Le, toUint64Le } from '../convertors/index.js'; import { serializeArray, serializeStruct, serializeTable, serializeDynVec, serializeFixVec, serializeOption, } from './basic.js'; export const serializeVersion = (version) => toUint32Le(version); export const serializeOutPoint = (outPoint) => { if (!outPoint) return ''; const struct = new Map([ ['txHash', outPoint.txHash], ['index', toUint32Le(outPoint.index)], ]); return serializeStruct(struct); }; export const serializeDepType = (type) => { if (type === 'code') return '0x00'; if (type === 'depGroup') return '0x01'; throw new TypeError("Dep type must be either of 'code' or 'depGroup'"); }; export const serializeCellDep = (dep) => { const serializedOutPoint = serializeOutPoint(dep.outPoint); const serializedDepType = serializeDepType(dep.depType); const struct = new Map([ ['outPoint', serializedOutPoint], ['depType', serializedDepType], ]); return serializeStruct(struct); }; export const serializeCellDeps = (cellDeps) => { const serializedCellDepList = cellDeps.map(dep => serializeCellDep(dep)); return serializeFixVec(serializedCellDepList); }; export const serializeHeaderDeps = (deps) => { const serializedHeaderDepList = deps.map(dep => serializeArray(dep)); return serializeFixVec(serializedHeaderDepList); }; export const serializeInput = (input) => { const serializedOutPoint = serializeOutPoint(input.previousOutput); const serializedSince = toUint64Le(input.since); const struct = new Map([ ['since', serializedSince], ['previousOutput', serializedOutPoint], ]); return serializeStruct(struct); }; export const serializeInputs = (inputs) => { const serializedInputList = inputs.map(input => serializeInput(input)); return serializeFixVec(serializedInputList); }; export const serializeOutput = (output) => { const serializedCapacity = toUint64Le(output.capacity); const serializedLockScript = serializeScript(output.lock); const serialiedTypeScript = output.type ? serializeScript(output.type) : ''; const table = new Map([ ['capacity', serializedCapacity], ['lock', serializedLockScript], ['type', serialiedTypeScript], ]); return serializeTable(table); }; export const serializeOutputs = (outputs) => { const serializedOutputList = outputs.map(output => serializeOutput(output)); return serializeDynVec(serializedOutputList); }; export const serializeOutputsData = (outputsData) => { const serializedOutputsDatumList = outputsData.map(datum => serializeFixVec(datum)); return serializeDynVec(serializedOutputsDatumList); }; export const serializeWitnessArgs = (witnessArgs) => { const [serializedLock, serializedInputType, serializedOutputType] = [ witnessArgs.lock, witnessArgs.inputType, witnessArgs.outputType, ].map(args => { if (serializeOption(args) === '0x') { return '0x'; } return serializeFixVec(args); }); const table = new Map([ ['lock', serializedLock], ['inputType', serializedInputType], ['outputType', serializedOutputType], ]); return serializeTable(table); }; export const serializeWitnesses = (witnesses) => { const serializedWitnessList = witnesses.map(witness => serializeFixVec(witness)); return serializeDynVec(serializedWitnessList); }; export const serializeRawTransaction = (rawTransaction) => { const serializedVersion = serializeVersion(rawTransaction.version); const serializedCellDeps = serializeCellDeps(rawTransaction.cellDeps); const serializedHeaderDeps = serializeHeaderDeps(rawTransaction.headerDeps); const serializedInputs = serializeInputs(rawTransaction.inputs); const serializedOutputs = serializeOutputs(rawTransaction.outputs); const serializedOutputsData = serializeOutputsData(rawTransaction.outputsData); const table = new Map([ ['version', serializedVersion], ['cellDeps', serializedCellDeps], ['headerDeps', serializedHeaderDeps], ['inputs', serializedInputs], ['outputs', serializedOutputs], ['outputsData', serializedOutputsData], ]); return serializeTable(table); }; export const serializeTransaction = (rawTransaction) => { const serializedRawTransaction = serializeRawTransaction(rawTransaction); const serializedWitnesses = serializeWitnesses(rawTransaction.witnesses || []); const table = new Map([ ['raw', serializedRawTransaction], ['witnesses', serializedWitnesses], ]); return serializeTable(table); }; //# sourceMappingURL=transaction.js.map