@nervosnetwork/ckb-sdk-utils
Version:
Utils module of @nervosnetwork/ckb-sdk-core
118 lines • 4.8 kB
JavaScript
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