Viewing File: /home/ubuntu/efiexchange-node-base/node_modules/bip174/src/lib/parser/toBuffer.js
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
const convert = require('../converter');
const tools_1 = require('../converter/tools');
function psbtToBuffer({ globalMap, inputs, outputs }) {
const { globalKeyVals, inputKeyVals, outputKeyVals } = psbtToKeyVals({
globalMap,
inputs,
outputs,
});
const globalBuffer = tools_1.keyValsToBuffer(globalKeyVals);
const keyValsOrEmptyToBuffer = keyVals =>
keyVals.length === 0
? [Buffer.from([0])]
: keyVals.map(tools_1.keyValsToBuffer);
const inputBuffers = keyValsOrEmptyToBuffer(inputKeyVals);
const outputBuffers = keyValsOrEmptyToBuffer(outputKeyVals);
const header = Buffer.allocUnsafe(5);
header.writeUIntBE(0x70736274ff, 0, 5);
return Buffer.concat(
[header, globalBuffer].concat(inputBuffers, outputBuffers),
);
}
exports.psbtToBuffer = psbtToBuffer;
const sortKeyVals = (a, b) => {
return a.key.compare(b.key);
};
function keyValsFromMap(keyValMap, converterFactory) {
const keyHexSet = new Set();
const keyVals = Object.entries(keyValMap).reduce((result, [key, value]) => {
if (key === 'unknownKeyVals') return result;
// We are checking for undefined anyways. So ignore TS error
// @ts-ignore
const converter = converterFactory[key];
if (converter === undefined) return result;
const encodedKeyVals = (Array.isArray(value) ? value : [value]).map(
converter.encode,
);
const keyHexes = encodedKeyVals.map(kv => kv.key.toString('hex'));
keyHexes.forEach(hex => {
if (keyHexSet.has(hex))
throw new Error('Serialize Error: Duplicate key: ' + hex);
keyHexSet.add(hex);
});
return result.concat(encodedKeyVals);
}, []);
// Get other keyVals that have not yet been gotten
const otherKeyVals = keyValMap.unknownKeyVals
? keyValMap.unknownKeyVals.filter(keyVal => {
return !keyHexSet.has(keyVal.key.toString('hex'));
})
: [];
return keyVals.concat(otherKeyVals).sort(sortKeyVals);
}
function psbtToKeyVals({ globalMap, inputs, outputs }) {
// First parse the global keyVals
// Get any extra keyvals to pass along
return {
globalKeyVals: keyValsFromMap(globalMap, convert.globals),
inputKeyVals: inputs.map(i => keyValsFromMap(i, convert.inputs)),
outputKeyVals: outputs.map(o => keyValsFromMap(o, convert.outputs)),
};
}
exports.psbtToKeyVals = psbtToKeyVals;
Back to Directory
File Manager