@coolwallet/kas
Version:
96 lines (95 loc) • 13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getMassAndSize = getMassAndSize;
exports.minimumRequiredTransactionRelayFee = minimumRequiredTransactionRelayFee;
var SompiPerKaspa = 100000000;
// MaxSompi is the maximum transaction amount allowed in sompi.
var MaxSompi = 21000000 * SompiPerKaspa;
// minimumRelayTransactionFee in sompi per 1kg (or 1000 grams)
function minimumRequiredTransactionRelayFee(mass) {
var minimumRelayTransactionFee = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
var minimumFee = mass * minimumRelayTransactionFee / 1000;
if (minimumFee === 0 && minimumRelayTransactionFee > 0) {
minimumFee = minimumRelayTransactionFee;
}
// Set the minimum fee to the maximum possible value if the calculated
// fee is not in the valid range for monetary amounts.
if (minimumFee > MaxSompi) {
minimumFee = MaxSompi;
}
return minimumFee;
}
function estimatedOutpointSerializedSize() {
var txSize = 0;
txSize += 32; // Previous tx ID
txSize += 4; // Index (u32)
return txSize;
}
function estimatedTransactionInputsSerializedSize(input) {
var txSize = 0;
txSize += estimatedOutpointSerializedSize();
txSize += 8; // length of signature script (u64)
if ('signatureScript' in input && input.signatureScript.length > 0) {
txSize += input.signatureScript.length / 2;
} else {
txSize += 66;
}
txSize += 8; // sequence (uint64)
return txSize;
}
function estimatedOutputsSerializedSize(output) {
var txSize = 0;
txSize += 8; // value (u64)
txSize += 2; // output.ScriptPublicKey.Version (u16)
txSize += 8; // length of script public key (u64)
txSize += output.scriptPublicKey.scriptPublicKey.length / 2;
return txSize;
}
var MassPerSigOp = 1000;
var MassPerTxByte = 1;
var MassPerScriptPubKeyByte = 10;
function estimateTransactionSerializedSize(inputs, outputs) {
var txSize = 0;
txSize += 2; // Tx version (u16)
txSize += 8; // length of inputs (u64)
var inputsSize = inputs.map(function (input) {
return estimatedTransactionInputsSerializedSize(input);
}).reduce(function (pre, next) {
return pre + next;
}, 0);
txSize += inputsSize;
txSize += 8; // length of outputs (u64)
var outputsSize = outputs.map(estimatedOutputsSerializedSize).reduce(function (pre, next) {
return pre + next;
}, 0);
txSize += outputsSize;
txSize += 8; // lock time (u64)
txSize += '0000000000000000000000000000000000000000'.length / 2; // subnetworkId
txSize += 8; // gas (u64)
txSize += '0000000000000000000000000000000000000000000000000000000000000000'.length / 2; // payload
txSize += '0000000000000000'.length / 2; // length of unknown (u64)
return txSize;
}
function calculateInputSigOpCounts(inputs) {
return inputs.reduce(function (total, input) {
return total + input.sigOpCount;
}, 0);
}
function calculateOutputsScriptPubKeySize(outputs) {
return outputs.reduce(function (total, output) {
// version (uint16) + scriptPublicKey
return total + 2 + output.scriptPublicKey.scriptPublicKey.length / 2;
}, 0);
}
function getMassAndSize(inputs, outputs) {
var txSize = estimateTransactionSerializedSize(inputs, outputs);
var totalSigOpCount = calculateInputSigOpCounts(inputs);
var totalScriptPubKeySize = calculateOutputsScriptPubKeySize(outputs);
return {
txSize: txSize,
mass: txSize * MassPerTxByte + totalScriptPubKeySize * MassPerScriptPubKeyByte + totalSigOpCount * MassPerSigOp
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTb21waVBlckthc3BhIiwiTWF4U29tcGkiLCJtaW5pbXVtUmVxdWlyZWRUcmFuc2FjdGlvblJlbGF5RmVlIiwibWFzcyIsIm1pbmltdW1SZWxheVRyYW5zYWN0aW9uRmVlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwibWluaW11bUZlZSIsImVzdGltYXRlZE91dHBvaW50U2VyaWFsaXplZFNpemUiLCJ0eFNpemUiLCJlc3RpbWF0ZWRUcmFuc2FjdGlvbklucHV0c1NlcmlhbGl6ZWRTaXplIiwiaW5wdXQiLCJzaWduYXR1cmVTY3JpcHQiLCJlc3RpbWF0ZWRPdXRwdXRzU2VyaWFsaXplZFNpemUiLCJvdXRwdXQiLCJzY3JpcHRQdWJsaWNLZXkiLCJNYXNzUGVyU2lnT3AiLCJNYXNzUGVyVHhCeXRlIiwiTWFzc1BlclNjcmlwdFB1YktleUJ5dGUiLCJlc3RpbWF0ZVRyYW5zYWN0aW9uU2VyaWFsaXplZFNpemUiLCJpbnB1dHMiLCJvdXRwdXRzIiwiaW5wdXRzU2l6ZSIsIm1hcCIsInJlZHVjZSIsInByZSIsIm5leHQiLCJvdXRwdXRzU2l6ZSIsImNhbGN1bGF0ZUlucHV0U2lnT3BDb3VudHMiLCJ0b3RhbCIsInNpZ09wQ291bnQiLCJjYWxjdWxhdGVPdXRwdXRzU2NyaXB0UHViS2V5U2l6ZSIsImdldE1hc3NBbmRTaXplIiwidG90YWxTaWdPcENvdW50IiwidG90YWxTY3JpcHRQdWJLZXlTaXplIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2VzdGltYXRlRmVlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uSW5wdXQsIFRyYW5zYWN0aW9uT3V0cHV0LCBUeEluZm8gfSBmcm9tICcuLi9jb25maWcvdHlwZXMnO1xuXG5jb25zdCBTb21waVBlckthc3BhID0gMTAwXzAwMF8wMDA7XG4vLyBNYXhTb21waSBpcyB0aGUgbWF4aW11bSB0cmFuc2FjdGlvbiBhbW91bnQgYWxsb3dlZCBpbiBzb21waS5cbmNvbnN0IE1heFNvbXBpID0gMjFfMDAwXzAwMCAqIFNvbXBpUGVyS2FzcGE7XG4vLyBtaW5pbXVtUmVsYXlUcmFuc2FjdGlvbkZlZSBpbiBzb21waSBwZXIgMWtnIChvciAxMDAwIGdyYW1zKVxuZXhwb3J0IGZ1bmN0aW9uIG1pbmltdW1SZXF1aXJlZFRyYW5zYWN0aW9uUmVsYXlGZWUobWFzczogbnVtYmVyLCBtaW5pbXVtUmVsYXlUcmFuc2FjdGlvbkZlZSA9IDEwMDApOiBudW1iZXIge1xuICBsZXQgbWluaW11bUZlZSA9IChtYXNzICogbWluaW11bVJlbGF5VHJhbnNhY3Rpb25GZWUpIC8gMTAwMDtcblxuICBpZiAobWluaW11bUZlZSA9PT0gMCAmJiBtaW5pbXVtUmVsYXlUcmFuc2FjdGlvbkZlZSA+IDApIHtcbiAgICBtaW5pbXVtRmVlID0gbWluaW11bVJlbGF5VHJhbnNhY3Rpb25GZWU7XG4gIH1cbiAgLy8gU2V0IHRoZSBtaW5pbXVtIGZlZSB0byB0aGUgbWF4aW11bSBwb3NzaWJsZSB2YWx1ZSBpZiB0aGUgY2FsY3VsYXRlZFxuICAvLyBmZWUgaXMgbm90IGluIHRoZSB2YWxpZCByYW5nZSBmb3IgbW9uZXRhcnkgYW1vdW50cy5cbiAgaWYgKG1pbmltdW1GZWUgPiBNYXhTb21waSkge1xuICAgIG1pbmltdW1GZWUgPSBNYXhTb21waTtcbiAgfVxuXG4gIHJldHVybiBtaW5pbXVtRmVlO1xufVxuXG5mdW5jdGlvbiBlc3RpbWF0ZWRPdXRwb2ludFNlcmlhbGl6ZWRTaXplKCk6IG51bWJlciB7XG4gIGxldCB0eFNpemUgPSAwO1xuICB0eFNpemUgKz0gMzI7IC8vIFByZXZpb3VzIHR4IElEXG4gIHR4U2l6ZSArPSA0OyAvLyBJbmRleCAodTMyKVxuICByZXR1cm4gdHhTaXplO1xufVxuXG5mdW5jdGlvbiBlc3RpbWF0ZWRUcmFuc2FjdGlvbklucHV0c1NlcmlhbGl6ZWRTaXplKGlucHV0OiBUcmFuc2FjdGlvbklucHV0KTogbnVtYmVyIHtcbiAgbGV0IHR4U2l6ZSA9IDA7XG4gIHR4U2l6ZSArPSBlc3RpbWF0ZWRPdXRwb2ludFNlcmlhbGl6ZWRTaXplKCk7XG5cbiAgdHhTaXplICs9IDg7IC8vIGxlbmd0aCBvZiBzaWduYXR1cmUgc2NyaXB0ICh1NjQpXG4gIGlmICgnc2lnbmF0dXJlU2NyaXB0JyBpbiBpbnB1dCAmJiBpbnB1dC5zaWduYXR1cmVTY3JpcHQubGVuZ3RoID4gMCkge1xuICAgIHR4U2l6ZSArPSBpbnB1dC5zaWduYXR1cmVTY3JpcHQubGVuZ3RoIC8gMjtcbiAgfSBlbHNlIHtcbiAgICB0eFNpemUgKz0gNjY7XG4gIH1cblxuICB0eFNpemUgKz0gODsgLy8gc2VxdWVuY2UgKHVpbnQ2NClcbiAgcmV0dXJuIHR4U2l6ZTtcbn1cblxuZnVuY3Rpb24gZXN0aW1hdGVkT3V0cHV0c1NlcmlhbGl6ZWRTaXplKG91dHB1dDogVHJhbnNhY3Rpb25PdXRwdXQpOiBudW1iZXIge1xuICBsZXQgdHhTaXplID0gMDtcbiAgdHhTaXplICs9IDg7IC8vIHZhbHVlICh1NjQpXG4gIHR4U2l6ZSArPSAyOyAvLyBvdXRwdXQuU2NyaXB0UHVibGljS2V5LlZlcnNpb24gKHUxNilcbiAgdHhTaXplICs9IDg7IC8vIGxlbmd0aCBvZiBzY3JpcHQgcHVibGljIGtleSAodTY0KVxuICB0eFNpemUgKz0gb3V0cHV0LnNjcmlwdFB1YmxpY0tleS5zY3JpcHRQdWJsaWNLZXkubGVuZ3RoIC8gMjtcbiAgcmV0dXJuIHR4U2l6ZTtcbn1cblxuY29uc3QgTWFzc1BlclNpZ09wID0gMTAwMDtcbmNvbnN0IE1hc3NQZXJUeEJ5dGUgPSAxO1xuY29uc3QgTWFzc1BlclNjcmlwdFB1YktleUJ5dGUgPSAxMDtcbmZ1bmN0aW9uIGVzdGltYXRlVHJhbnNhY3Rpb25TZXJpYWxpemVkU2l6ZShpbnB1dHM6IEFycmF5PFRyYW5zYWN0aW9uSW5wdXQ+LCBvdXRwdXRzOiBBcnJheTxUcmFuc2FjdGlvbk91dHB1dD4pOiBudW1iZXIge1xuICBsZXQgdHhTaXplID0gMDtcbiAgdHhTaXplICs9IDI7IC8vIFR4IHZlcnNpb24gKHUxNilcbiAgdHhTaXplICs9IDg7IC8vIGxlbmd0aCBvZiBpbnB1dHMgKHU2NClcbiAgY29uc3QgaW5wdXRzU2l6ZSA9IGlucHV0c1xuICAgIC5tYXAoKGlucHV0KSA9PiBlc3RpbWF0ZWRUcmFuc2FjdGlvbklucHV0c1NlcmlhbGl6ZWRTaXplKGlucHV0KSlcbiAgICAucmVkdWNlKChwcmUsIG5leHQpID0+IHByZSArIG5leHQsIDApO1xuICB0eFNpemUgKz0gaW5wdXRzU2l6ZTtcblxuICB0eFNpemUgKz0gODsgLy8gbGVuZ3RoIG9mIG91dHB1dHMgKHU2NClcbiAgY29uc3Qgb3V0cHV0c1NpemUgPSBvdXRwdXRzLm1hcChlc3RpbWF0ZWRPdXRwdXRzU2VyaWFsaXplZFNpemUpLnJlZHVjZSgocHJlLCBuZXh0KSA9PiBwcmUgKyBuZXh0LCAwKTtcbiAgdHhTaXplICs9IG91dHB1dHNTaXplO1xuXG4gIHR4U2l6ZSArPSA4OyAvLyBsb2NrIHRpbWUgKHU2NClcbiAgdHhTaXplICs9ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJy5sZW5ndGggLyAyOyAvLyBzdWJuZXR3b3JrSWRcbiAgdHhTaXplICs9IDg7IC8vIGdhcyAodTY0KVxuICB0eFNpemUgKz0gJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLmxlbmd0aCAvIDI7IC8vIHBheWxvYWRcbiAgdHhTaXplICs9ICcwMDAwMDAwMDAwMDAwMDAwJy5sZW5ndGggLyAyOyAvLyBsZW5ndGggb2YgdW5rbm93biAodTY0KVxuICByZXR1cm4gdHhTaXplO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVJbnB1dFNpZ09wQ291bnRzKGlucHV0czogQXJyYXk8VHJhbnNhY3Rpb25JbnB1dD4pOiBudW1iZXIge1xuICByZXR1cm4gaW5wdXRzLnJlZHVjZSgodG90YWwsIGlucHV0KSA9PiB0b3RhbCArIGlucHV0LnNpZ09wQ291bnQsIDApO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVPdXRwdXRzU2NyaXB0UHViS2V5U2l6ZShvdXRwdXRzOiBBcnJheTxUcmFuc2FjdGlvbk91dHB1dD4pOiBudW1iZXIge1xuICByZXR1cm4gb3V0cHV0cy5yZWR1Y2UoKHRvdGFsLCBvdXRwdXQpID0+IHtcbiAgICAvLyB2ZXJzaW9uICh1aW50MTYpICsgc2NyaXB0UHVibGljS2V5XG4gICAgcmV0dXJuIHRvdGFsICsgMiArIG91dHB1dC5zY3JpcHRQdWJsaWNLZXkuc2NyaXB0UHVibGljS2V5Lmxlbmd0aCAvIDI7XG4gIH0sIDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFzc0FuZFNpemUoaW5wdXRzOiBBcnJheTxUcmFuc2FjdGlvbklucHV0Piwgb3V0cHV0czogQXJyYXk8VHJhbnNhY3Rpb25PdXRwdXQ+KTogVHhJbmZvIHtcbiAgY29uc3QgdHhTaXplID0gZXN0aW1hdGVUcmFuc2FjdGlvblNlcmlhbGl6ZWRTaXplKGlucHV0cywgb3V0cHV0cyk7XG4gIGNvbnN0IHRvdGFsU2lnT3BDb3VudCA9IGNhbGN1bGF0ZUlucHV0U2lnT3BDb3VudHMoaW5wdXRzKTtcbiAgY29uc3QgdG90YWxTY3JpcHRQdWJLZXlTaXplID0gY2FsY3VsYXRlT3V0cHV0c1NjcmlwdFB1YktleVNpemUob3V0cHV0cyk7XG4gIHJldHVybiB7XG4gICAgdHhTaXplLFxuICAgIG1hc3M6IHR4U2l6ZSAqIE1hc3NQZXJUeEJ5dGUgKyB0b3RhbFNjcmlwdFB1YktleVNpemUgKiBNYXNzUGVyU2NyaXB0UHViS2V5Qnl0ZSArIHRvdGFsU2lnT3BDb3VudCAqIE1hc3NQZXJTaWdPcCxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBLElBQU1BLGFBQWEsR0FBRyxTQUFXO0FBQ2pDO0FBQ0EsSUFBTUMsUUFBUSxHQUFHLFFBQVUsR0FBR0QsYUFBYTtBQUMzQztBQUNPLFNBQVNFLGtDQUFrQ0EsQ0FBQ0MsSUFBWSxFQUE2QztFQUFBLElBQTNDQywwQkFBMEIsR0FBQUMsU0FBQSxDQUFBQyxN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