UNPKG

@bitgo/utxo-bin

Version:

Command-line utility for BitGo UTXO transactions

93 lines 13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getPrevOut = getPrevOut; exports.getParserTxProperties = getParserTxProperties; exports.getParserTxInputProperties = getParserTxInputProperties; const utxolib = require("@bitgo/utxo-lib"); function getPrevOut(prevOutput, prevOutpoint, network) { if (prevOutput.witnessUtxo) { return prevOutput.witnessUtxo; } const outputIndex = typeof prevOutpoint === 'number' ? prevOutpoint : utxolib.bitgo.getOutputIdForInput(prevOutpoint).vout; if (prevOutput.nonWitnessUtxo) { const tx = utxolib.bitgo.createTransactionFromBuffer(prevOutput.nonWitnessUtxo, network, { amountType: 'bigint' }); return tx.outs[outputIndex]; } return undefined; } function getOutputSum(outputs) { return outputs.reduce((sum, o) => sum + o.value, BigInt(0)); } function getParserTxProperties(tx, prevOutputs) { if (tx instanceof utxolib.bitgo.UtxoTransaction) { let complete = true; try { const txb = utxolib.bitgo.createTransactionBuilderFromTransaction(tx); txb.build(); } catch (e) { complete = false; } return { format: complete ? 'network' : 'legacy', complete, id: tx.getId(), weight: tx.weight(), inputs: tx.ins, outputs: tx.outs, outputSum: getOutputSum(tx.outs), inputSum: prevOutputs ? getOutputSum(prevOutputs) : undefined, hasWitnesses: tx.hasWitnesses(), }; } if (tx instanceof utxolib.bitgo.UtxoPsbt) { let signedTx; let complete = true; try { const clone = tx.clone(); clone.finalizeAllInputs(); signedTx = clone.extractTransaction(); } catch (e) { complete = false; // ignore } const unsignedTx = tx.getUnsignedTx(); return { format: 'psbt', complete, id: (signedTx ?? unsignedTx).getId(), weight: (signedTx ?? unsignedTx).weight(), inputs: tx.txInputs, outputs: tx.txOutputs, outputSum: getOutputSum(tx.txOutputs), inputSum: tx.data.inputs .map((input, i) => getPrevOut(input, tx.txInputs[i], tx.network)?.value) .reduce((sum, v) => sum === undefined || v === undefined ? undefined : sum + v, BigInt(0)), hasWitnesses: tx.data.inputs.some((i) => i.witnessUtxo !== undefined), }; } throw new Error('unknown transaction type'); } function getParserTxInputProperties(input, prevOut) { const outputId = utxolib.bitgo.getOutputIdForInput(input); if ('sequence' in input && 'script' in input && 'witness' in input) { // full-signed or legacy case return { ...outputId, sequence: input.sequence, script: input.script, witness: input.witness, }; } if (!prevOut) { throw new Error('missing prevOut'); } return { ...outputId, sequence: input.sequence, script: prevOut.redeemScript, witness: prevOut.witnessScript ? [prevOut.witnessScript] : [], }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyc2VyVHguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvUGFyc2VyVHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSxnQ0FvQkM7QUFNRCxzREFxRUM7QUFDRCxnRUE4QkM7QUF0SUQsMkNBQTJDO0FBUTNDLFNBQWdCLFVBQVUsQ0FDeEIsVUFBbUMsRUFDbkMsWUFBMEMsRUFDMUMsT0FBd0I7SUFPeEIsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0IsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FDZixPQUFPLFlBQVksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekcsSUFBSSxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDOUIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25ILE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE9BQTRCO0lBQ2hELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FDbkMsRUFBWSxFQUNaLFdBQW1EO0lBWW5ELElBQUksRUFBRSxZQUFZLE9BQU8sQ0FBQyxL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QUNELFNBQWdCLDBCQUEwQixDQUN4QyxLQUFvQixFQUNwQixPQUFpQztJQVFqQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELElBQUksVUFBVSxJQUFJLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNuRSw2QkFBNkI7UUFDN0IsT0FBTztZQUNMLEdBQUcsUUFBUTtZQUNYLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1NBQ3ZCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxPQUFPO1FBQ0wsR0FBRyxRQUFRO1FBQ1gsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1FBQ3hCLE1BQU0sRUFBRSxPQUFPLENBQUMsWUFBWTtRQUM1QixPQUFPLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7S0FDOUQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmV4cG9ydCB0eXBlIFBhcnNlclR4ID0gdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PiB8IHV0eG9saWIuYml0Z28uVXR4b1BzYnQ7XG5leHBvcnQgdHlwZSBQYXJzZXJUeElucHV0ID1cbiAgfCB1dHhvbGliLlR4SW5wdXQgLyogdHhpbnB1dCBoYXMgdGhlIFR4T3V0UG9pbnQgYW5kIGFsc28gc2NyaXB0IGFuZCB3aXRuZXNzIGRhdGEgKi9cbiAgfCB1dHhvbGliLlBzYnRUeElucHV0IC8qIHRoaXMgaXMgYmFzaWNhbGx5IGVxdWl2YWxlbnQgdG8gVHhPdXRQb2ludCBvbmx5ICovO1xuZXhwb3J0IHR5cGUgUGFyc2VyVHhPdXRwdXQgPSB1dHhvbGliLlR4T3V0cHV0PGJpZ2ludD4gfCB1dHhvbGliLlBzYnRUeE91dHB1dDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByZXZPdXQoXG4gIHByZXZPdXRwdXQ6IHV0eG9saWIuYml0Z28uUHNidElucHV0LFxuICBwcmV2T3V0cG9pbnQ6IHV0eG9saWIuUHNidFR4SW5wdXQgfCBudW1iZXIsXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTpcbiAgfCB7XG4gICAgICB2YWx1ZTogYmlnaW50O1xuICAgICAgc2NyaXB0OiBCdWZmZXI7XG4gICAgfVxuICB8IHVuZGVmaW5lZCB7XG4gIGlmIChwcmV2T3V0cHV0LndpdG5lc3NVdHhvKSB7XG4gICAgcmV0dXJuIHByZXZPdXRwdXQud2l0bmVzc1V0eG87XG4gIH1cbiAgY29uc3Qgb3V0cHV0SW5kZXggPVxuICAgIHR5cGVvZiBwcmV2T3V0cG9pbnQgPT09ICdudW1iZXInID8gcHJldk91dHBvaW50IDogdXR4b2xpYi5iaXRnby5nZXRPdXRwdXRJZEZvcklucHV0KHByZXZPdXRwb2ludCkudm91dDtcbiAgaWYgKHByZXZPdXRwdXQubm9uV2l0bmVzc1V0eG8pIHtcbiAgICBjb25zdCB0eCA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKHByZXZPdXRwdXQubm9uV2l0bmVzc1V0eG8sIG5ldHdvcmssIHsgYW1vdW50VHlwZTogJ2JpZ2ludCcgfSk7XG4gICAgcmV0dXJuIHR4Lm91dHNbb3V0cHV0SW5kZXhdO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldE91dHB1dFN1bShvdXRwdXRzOiB7IHZhbHVlOiBiaWdpbnQgfVtdKTogYmlnaW50IHtcbiAgcmV0dXJuIG91dHB1dHMucmVkdWNlKChzdW0sIG8pID0+IHN1bSArIG8udmFsdWUsIEJpZ0ludCgwKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJzZXJUeFByb3BlcnRpZXMoXG4gIHR4OiBQYXJzZXJUeCxcbiAgcHJldk91dHB1dHM6IHV0eG9saWIuVHhPdXRwdXQ8YmlnaW50PltdIHwgdW5kZWZpbmVkXG4pOiB7XG4gIGZvcm1hdDogJ25ldHdvcmsnIHwgJ2xlZ2FjeScgfCAncHNidCc7XG4gIGNvbXBsZXRlOiBib29sZWFuO1xuICBpZDogc3RyaW5nO1xuICB3ZWlnaHQ6IG51bWJlcjtcbiAgaW5wdXRzOiBQYXJzZXJUeElucHV0W107XG4gIG91dHB1dHM6IFBhcnNlclR4T3V0cHV0W107XG4gIG91dHB1dFN1bTogYmlnaW50O1xuICBpbnB1dFN1bTogYmlnaW50IHwgdW5kZWZpbmVkO1xuICBoYXNXaXRuZXNzZXM6IGJvb2xlYW47XG59IHtcbiAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pIHtcbiAgICBsZXQgY29tcGxldGUgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eGIgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uQnVpbGRlckZyb21UcmFuc2FjdGlvbih0eCk7XG4gICAgICB0eGIuYnVpbGQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb21wbGV0ZSA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0OiBjb21wbGV0ZSA/ICduZXR3b3JrJyA6ICdsZWdhY3knLFxuICAgICAgY29tcGxldGUsXG4gICAgICBpZDogdHguZ2V0SWQoKSxcbiAgICAgIHdlaWdodDogdHgud2VpZ2h0KCksXG4gICAgICBpbnB1dHM6IHR4LmlucyxcbiAgICAgIG91dHB1dHM6IHR4Lm91dHMsXG4gICAgICBvdXRwdXRTdW06IGdldE91dHB1dFN1bSh0eC5vdXRzKSxcbiAgICAgIGlucHV0U3VtOiBwcmV2T3V0cHV0cyA/IGdldE91dHB1dFN1bShwcmV2T3V0cHV0cykgOiB1bmRlZmluZWQsXG4gICAgICBoYXNXaXRuZXNzZXM6IHR4Lmhhc1dpdG5lc3NlcygpLFxuICAgIH07XG4gIH1cblxuICBpZiAodHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgbGV0IHNpZ25lZFR4O1xuICAgIGxldCBjb21wbGV0ZSA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsb25lID0gdHguY2xvbmUoKTtcbiAgICAgIGNsb25lLmZpbmFsaXplQWxsSW5wdXRzKCk7XG4gICAgICBzaWduZWRUeCA9IGNsb25lLmV4dHJhY3RUcmFuc2FjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbXBsZXRlID0gZmFsc2U7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG5cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gdHguZ2V0VW5zaWduZWRUeCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1hdDogJ3BzYnQnLFxuICAgICAgY29tcGxldGUsXG4gICAgICBpZDogKHNpZ25lZFR4ID8/IHVuc2lnbmVkVHgpLmdldElkKCksXG4gICAgICB3ZWlnaHQ6IChzaWduZWRUeCA/PyB1bnNpZ25lZFR4KS53ZWlnaHQoKSxcbiAgICAgIGlucHV0czogdHgudHhJbnB1dHMsXG4gICAgICBvdXRwdXRzOiB0eC50eE91dHB1dHMsXG4gICAgICBvdXRwdXRTdW06IGdldE91dHB1dFN1bSh0eC50eE91dHB1dHMpLFxuICAgICAgaW5wdXRTdW06IHR4LmRhdGEuaW5wdXRzXG4gICAgICAgIC5tYXAoKGlucHV0LCBpKSA9PiBnZXRQcmV2T3V0KGlucHV0LCB0eC50eElucHV0c1tpXSwgdHgubmV0d29yayk/LnZhbHVlKVxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChzdW06IGJpZ2ludCB8IHVuZGVmaW5lZCwgdjogYmlnaW50IHwgdW5kZWZpbmVkKSA9PlxuICAgICAgICAgICAgc3VtID09PSB1bmRlZmluZWQgfHwgdiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc3VtICsgdixcbiAgICAgICAgICBCaWdJbnQoMClcbiAgICAgICAgKSxcbiAgICAgIGhhc1dpdG5lc3NlczogdHguZGF0YS5pbnB1dHMuc29tZSgoaSkgPT4gaS53aXRuZXNzVXR4byAhPT0gdW5kZWZpbmVkKSxcbiAgICB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHRyYW5zYWN0aW9uIHR5cGUnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJzZXJUeElucHV0UHJvcGVydGllcyhcbiAgaW5wdXQ6IFBhcnNlclR4SW5wdXQsXG4gIHByZXZPdXQ/OiB1dHhvbGliLmJpdGdvLlBzYnRJbnB1dFxuKToge1xuICB0eGlkOiBzdHJpbmc7XG4gIHZvdXQ6IG51bWJlcjtcbiAgc2VxdWVuY2U/OiBudW1iZXI7XG4gIHNjcmlwdD86IEJ1ZmZlcjtcbiAgd2l0bmVzcz86IEJ1ZmZlcltdO1xufSB7XG4gIGNvbnN0IG91dHB1dElkID0gdXR4b2xpYi5iaXRnby5nZXRPdXRwdXRJZEZvcklucHV0KGlucHV0KTtcbiAgaWYgKCdzZXF1ZW5jZScgaW4gaW5wdXQgJiYgJ3NjcmlwdCcgaW4gaW5wdXQgJiYgJ3dpdG5lc3MnIGluIGlucHV0KSB7XG4gICAgLy8gZnVsbC1zaWduZWQgb3IgbGVnYWN5IGNhc2VcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3V0cHV0SWQsXG4gICAgICBzZXF1ZW5jZTogaW5wdXQuc2VxdWVuY2UsXG4gICAgICBzY3JpcHQ6IGlucHV0LnNjcmlwdCxcbiAgICAgIHdpdG5lc3M6IGlucHV0LndpdG5lc3MsXG4gICAgfTtcbiAgfVxuXG4gIGlmICghcHJldk91dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBwcmV2T3V0Jyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5vdXRwdXRJZCxcbiAgICBzZXF1ZW5jZTogaW5wdXQuc2VxdWVuY2UsXG4gICAgc2NyaXB0OiBwcmV2T3V0LnJlZGVlbVNjcmlwdCxcbiAgICB3aXRuZXNzOiBwcmV2T3V0LndpdG5lc3NTY3JpcHQgPyBbcHJldk91dC53aXRuZXNzU2NyaXB0XSA6IFtdLFxuICB9O1xufVxuIl19