UNPKG

@bitgo/unspents

Version:

Defines the chain codes used for different unspent types and methods to calculate bitcoin transaction sizes

97 lines 12.1 kB
"use strict"; /** * Defines input sizes for BitGo signature scripts. */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.inputComponentsP2shP2pk = exports.inputComponentsP2trScriptSpendLevel2 = exports.inputComponentsP2trScriptSpendLevel1 = exports.inputComponentsP2trKeySpend = exports.inputComponentsP2wsh = exports.inputComponentsP2shP2wsh = exports.inputComponentsP2sh = void 0; exports.varSliceSize = varSliceSize; exports.getInputByteLength = getInputByteLength; exports.getInputWeight = getInputWeight; exports.getInputComponentsWeight = getInputComponentsWeight; const varuint_bitcoin_1 = __importDefault(require("varuint-bitcoin")); function varSliceSize(someScript) { const length = someScript.length; return varuint_bitcoin_1.default.encodingLength(length) + length; } function vectorSize(someVector) { const length = someVector.length; return (varuint_bitcoin_1.default.encodingLength(length) + someVector.reduce((sum, witness) => { return sum + varSliceSize(witness); }, 0)); } function getInputByteLength(input, allowWitness) { return (40 /* inputId(32), index(4), nSequence(4) */ + varSliceSize(input.script) + (allowWitness ? vectorSize(input.witness) : 0)); } function getInputWeight(input) { return 3 * getInputByteLength(input, false) + getInputByteLength(input, true); } function getInputComponentsWeight(c) { const scriptSize = c.script.reduce((a, b) => a + b, 0); return getInputWeight({ script: { length: scriptSize }, witness: c.witness.map((v) => ({ length: v })), }); } const opSize = 1; const op0Size = opSize; const opPushSize = opSize; const opCheckSigVerifySize = opSize; const opCheckSigSize = opSize; const ecdsaSignatureSize = 72; const schnorrPubkeySize = 32; const schnorrSignatureNoSighashSize = 64; const p2msPubScriptSize = 105; // Note: This is valid for a compressed public key only const p2wshPubScriptSize = 34; const p2pkPubScriptSize = 35; function p2trScriptSpend(level) { return [ schnorrSignatureNoSighashSize, schnorrSignatureNoSighashSize, opPushSize + schnorrPubkeySize + opCheckSigSize + opPushSize + schnorrPubkeySize + opCheckSigVerifySize, /* header byte */ 1 + /* inner key */ 32 + /* inner leaf */ 32 * level, ]; } function p2msSigScriptSize(witness) { return [ witness ? 0 : op0Size, (witness ? 0 : opPushSize) + ecdsaSignatureSize, (witness ? 0 : opPushSize) + ecdsaSignatureSize, (witness ? 0 : /* OP_PUSHDATA2 */ opPushSize + 1) + p2msPubScriptSize, ]; } exports.inputComponentsP2sh = { script: p2msSigScriptSize(false), witness: [], }; exports.inputComponentsP2shP2wsh = { script: [opSize + p2wshPubScriptSize], witness: p2msSigScriptSize(true), }; exports.inputComponentsP2wsh = { script: [], witness: p2msSigScriptSize(true), }; // See: https://murchandamus.medium.com/2-of-3-multisig-inputs-using-pay-to-taproot-d5faf2312ba3 exports.inputComponentsP2trKeySpend = { script: [], witness: [schnorrSignatureNoSighashSize], }; exports.inputComponentsP2trScriptSpendLevel1 = { script: [], witness: p2trScriptSpend(1), }; exports.inputComponentsP2trScriptSpendLevel2 = { script: [], witness: p2trScriptSpend(2), }; exports.inputComponentsP2shP2pk = { script: [opPushSize + ecdsaSignatureSize, opPushSize + p2pkPubScriptSize], witness: [], }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRXZWlnaHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lucHV0V2VpZ2h0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7OztBQUlILG9DQUlDO0FBc0JELGdEQU1DO0FBRUQsd0NBRUM7QUFPRCw0REFNQztBQW5ERCxzRUFBc0M7QUFFdEMsU0FBZ0IsWUFBWSxDQUFDLFVBQWlCO0lBQzVDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFFakMsT0FBTyx5QkFBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLFVBQW1CO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFFakMsT0FBTyxDQUNMLHlCQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUM5QixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2pDLE9BQU8sR0FBRyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ04sQ0FBQztBQUNKLENBQUM7QUFXRCxTQUFnQixrQkFBa0IsQ0FBQyxLQUFZLEVBQUUsWUFBcUI7SUFDcEUsT0FBTyxDQUNMLEVBQUUsQ0FBQyx5Q0FBeUM7UUFDNUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDMUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMvQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxLQUFZO0lBQ3pDLE9BQU8sQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxrQkFBa0IsQ0FB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QyxDQUFDO0NBQzVCLENBQUM7QUFFVyxRQUFBLG9DQUFvQyxHQUFvQjtJQUNuRSxNQUFNLEVBQUUsRUFBRTtJQUNWLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0NBQzVCLENBQUM7QUFFVyxRQUFBLHVCQUF1QixHQUFvQjtJQUN0RCxNQUFNLEVBQUUsQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLEVBQUUsVUFBVSxHQUFHLGlCQUFpQixDQUFDO0lBQ3pFLE9BQU8sRUFBRSxFQUFFO0NBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGVmaW5lcyBpbnB1dCBzaXplcyBmb3IgQml0R28gc2lnbmF0dXJlIHNjcmlwdHMuXG4gKi9cblxuaW1wb3J0IHZhcnVpbnQgZnJvbSAndmFydWludC1iaXRjb2luJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhclNsaWNlU2l6ZShzb21lU2NyaXB0OiBTaXplZCk6IG51bWJlciB7XG4gIGNvbnN0IGxlbmd0aCA9IHNvbWVTY3JpcHQubGVuZ3RoO1xuXG4gIHJldHVybiB2YXJ1aW50LmVuY29kaW5nTGVuZ3RoKGxlbmd0aCkgKyBsZW5ndGg7XG59XG5cbmZ1bmN0aW9uIHZlY3RvclNpemUoc29tZVZlY3RvcjogU2l6ZWRbXSk6IG51bWJlciB7XG4gIGNvbnN0IGxlbmd0aCA9IHNvbWVWZWN0b3IubGVuZ3RoO1xuXG4gIHJldHVybiAoXG4gICAgdmFydWludC5lbmNvZGluZ0xlbmd0aChsZW5ndGgpICtcbiAgICBzb21lVmVjdG9yLnJlZHVjZSgoc3VtLCB3aXRuZXNzKSA9PiB7XG4gICAgICByZXR1cm4gc3VtICsgdmFyU2xpY2VTaXplKHdpdG5lc3MpO1xuICAgIH0sIDApXG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIFNpemVkID0ge1xuICBsZW5ndGg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIElucHV0ID0ge1xuICBzY3JpcHQ6IFNpemVkO1xuICB3aXRuZXNzOiBTaXplZFtdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0Qnl0ZUxlbmd0aChpbnB1dDogSW5wdXQsIGFsbG93V2l0bmVzczogYm9vbGVhbik6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgNDAgLyogaW5wdXRJZCgzMiksIGluZGV4KDQpLCBuU2VxdWVuY2UoNCkgKi8gK1xuICAgIHZhclNsaWNlU2l6ZShpbnB1dC5zY3JpcHQpICtcbiAgICAoYWxsb3dXaXRuZXNzID8gdmVjdG9yU2l6ZShpbnB1dC53aXRuZXNzKSA6IDApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dFdlaWdodChpbnB1dDogSW5wdXQpOiBudW1iZXIge1xuICByZXR1cm4gMyAqIGdldElucHV0Qnl0ZUxlbmd0aChpbnB1dCwgZmFsc2UpICsgZ2V0SW5wdXRCeXRlTGVuZ3RoKGlucHV0LCB0cnVlKTtcbn1cblxuZXhwb3J0IHR5cGUgSW5wdXRDb21wb25lbnRzID0ge1xuICBzY3JpcHQ6IG51bWJlcltdO1xuICB3aXRuZXNzOiBudW1iZXJbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dENvbXBvbmVudHNXZWlnaHQoYzogSW5wdXRDb21wb25lbnRzKTogbnVtYmVyIHtcbiAgY29uc3Qgc2NyaXB0U2l6ZSA9IGMuc2NyaXB0LnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICByZXR1cm4gZ2V0SW5wdXRXZWlnaHQoe1xuICAgIHNjcmlwdDogeyBsZW5ndGg6IHNjcmlwdFNpemUgfSxcbiAgICB3aXRuZXNzOiBjLndpdG5lc3MubWFwKCh2KSA9PiAoeyBsZW5ndGg6IHYgfSkpLFxuICB9KTtcbn1cblxuY29uc3Qgb3BTaXplID0gMTtcbmNvbnN0IG9wMFNpemUgPSBvcFNpemU7XG5jb25zdCBvcFB1c2hTaXplID0gb3BTaXplO1xuY29uc3Qgb3BDaGVja1NpZ1ZlcmlmeVNpemUgPSBvcFNpemU7XG5jb25zdCBvcENoZWNrU2lnU2l6ZSA9IG9wU2l6ZTtcbmNvbnN0IGVjZHNhU2lnbmF0dXJlU2l6ZSA9IDcyO1xuY29uc3Qgc2Nobm9yclB1YmtleVNpemUgPSAzMjtcbmNvbnN0IHNjaG5vcnJTaWduYXR1cmVOb1NpZ2hhc2hTaXplID0gNjQ7XG5jb25zdCBwMm1zUHViU2NyaXB0U2l6ZSA9IDEwNTsgLy8gTm90ZTogVGhpcyBpcyB2YWxpZCBmb3IgYSBjb21wcmVzc2VkIHB1YmxpYyBrZXkgb25seVxuY29uc3QgcDJ3c2hQdWJTY3JpcHRTaXplID0gMzQ7XG5jb25zdCBwMnBrUHViU2NyaXB0U2l6ZSA9IDM1O1xuXG5mdW5jdGlvbiBwMnRyU2NyaXB0U3BlbmQobGV2ZWw6IDEgfCAyKTogbnVtYmVyW10ge1xuICByZXR1cm4gW1xuICAgIHNjaG5vcnJTaWduYXR1cmVOb1NpZ2hhc2hTaXplLFxuICAgIHNjaG5vcnJTaWduYXR1cmVOb1NpZ2hhc2hTaXplLFxuICAgIG9wUHVzaFNpemUgKyBzY2hub3JyUHVia2V5U2l6ZSArIG9wQ2hlY2tTaWdTaXplICsgb3BQdXNoU2l6ZSArIHNjaG5vcnJQdWJrZXlTaXplICsgb3BDaGVja1NpZ1ZlcmlmeVNpemUsXG4gICAgLyogaGVhZGVyIGJ5dGUgKi8gMSArIC8qIGlubmVyIGtleSAqLyAzMiArIC8qIGlubmVyIGxlYWYgKi8gMzIgKiBsZXZlbCxcbiAgXTtcbn1cblxuZnVuY3Rpb24gcDJtc1NpZ1NjcmlwdFNpemUod2l0bmVzczogYm9vbGVhbikge1xuICByZXR1cm4gW1xuICAgIHdpdG5lc3MgPyAwIDogb3AwU2l6ZSxcbiAgICAod2l0bmVzcyA/IDAgOiBvcFB1c2hTaXplKSArIGVjZHNhU2lnbmF0dXJlU2l6ZSxcbiAgICAod2l0bmVzcyA/IDAgOiBvcFB1c2hTaXplKSArIGVjZHNhU2lnbmF0dXJlU2l6ZSxcbiAgICAod2l0bmVzcyA/IDAgOiAvKiBPUF9QVVNIREFUQTIgKi8gb3BQdXNoU2l6ZSArIDEpICsgcDJtc1B1YlNjcmlwdFNpemUsXG4gIF07XG59XG5cbmV4cG9ydCBjb25zdCBpbnB1dENvbXBvbmVudHNQMnNoOiBJbnB1dENvbXBvbmVudHMgPSB7XG4gIHNjcmlwdDogcDJtc1NpZ1NjcmlwdFNpemUoZmFsc2UpLFxuICB3aXRuZXNzOiBbXSxcbn07XG5cbmV4cG9ydCBjb25zdCBpbnB1dENvbXBvbmVudHNQMnNoUDJ3c2g6IElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBbb3BTaXplICsgcDJ3c2hQdWJTY3JpcHRTaXplXSxcbiAgd2l0bmVzczogcDJtc1NpZ1NjcmlwdFNpemUodHJ1ZSksXG59O1xuXG5leHBvcnQgY29uc3QgaW5wdXRDb21wb25lbnRzUDJ3c2g6IElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBbXSxcbiAgd2l0bmVzczogcDJtc1NpZ1NjcmlwdFNpemUodHJ1ZSksXG59O1xuXG4vLyBTZWU6IGh0dHBzOi8vbXVyY2hhbmRhbXVzLm1lZGl1bS5jb20vMi1vZi0zLW11bHRpc2lnLWlucHV0cy11c2luZy1wYXktdG8tdGFwcm9vdC1kNWZhZjIzMTJiYTNcbmV4cG9ydCBjb25zdCBpbnB1dENvbXBvbmVudHNQMnRyS2V5U3BlbmQ6IElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBbXSxcbiAgd2l0bmVzczogW3NjaG5vcnJTaWduYXR1cmVOb1NpZ2hhc2hTaXplXSxcbn07XG5cbmV4cG9ydCBjb25zdCBpbnB1dENvbXBvbmVudHNQMnRyU2NyaXB0U3BlbmRMZXZlbDE6IElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBbXSxcbiAgd2l0bmVzczogcDJ0clNjcmlwdFNwZW5kKDEpLFxufTtcblxuZXhwb3J0IGNvbnN0IGlucHV0Q29tcG9uZW50c1AydHJTY3JpcHRTcGVuZExldmVsMjogSW5wdXRDb21wb25lbnRzID0ge1xuICBzY3JpcHQ6IFtdLFxuICB3aXRuZXNzOiBwMnRyU2NyaXB0U3BlbmQoMiksXG59O1xuXG5leHBvcnQgY29uc3QgaW5wdXRDb21wb25lbnRzUDJzaFAycGs6IElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBbb3BQdXNoU2l6ZSArIGVjZHNhU2lnbmF0dXJlU2l6ZSwgb3BQdXNoU2l6ZSArIHAycGtQdWJTY3JpcHRTaXplXSxcbiAgd2l0bmVzczogW10sXG59O1xuIl19