PHP WebShell
Текущая директория: /opt/BitGoJS/modules/utxo-lib/dist/src/bitgo/psbt
Просмотр файла: fromHalfSigned.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getInputUpdate = getInputUpdate;
exports.unsign = unsign;
const assert = require("assert");
const __1 = require("../..");
const parseInput_1 = require("../parseInput");
const signature_1 = require("../signature");
const outputScripts_1 = require("../outputScripts");
function omitUndefined(v) {
return Object.fromEntries(Object.entries(v).filter(([k, v]) => v !== undefined));
}
function getInputUpdate(tx, vin, prevOuts) {
const nonWitnessUtxo = prevOuts[vin].prevTx;
const { script, witness } = tx.ins[vin];
if (script.length === 0 && witness.length === 0) {
return nonWitnessUtxo ? { nonWitnessUtxo } : {};
}
const parsedInput = (0, parseInput_1.parseSignatureScript)(tx.ins[vin]);
assert.ok(parsedInput.scriptType !== 'taprootKeyPathSpend');
function getPartialSigs() {
assert.ok(parsedInput.scriptType !== 'taprootKeyPathSpend');
return (0, signature_1.getSignaturesWithPublicKeys)(tx, vin, prevOuts, parsedInput.publicKeys).flatMap((signature, i) => signature
? [
{
pubkey: parsedInput.publicKeys[i],
signature,
},
]
: []);
}
// Because Zcash directly hashes the value for non-segwit transactions, we do not need to check indirectly
// with the previous transaction. Therefore, we can treat Zcash non-segwit transactions as Bitcoin
// segwit transactions
if (parsedInput.scriptType !== 'taprootScriptPathSpend' &&
!(0, outputScripts_1.hasWitnessData)(parsedInput.scriptType) &&
!nonWitnessUtxo &&
(0, __1.getMainnet)(tx.network) !== __1.networks.zcash) {
throw new Error(`scriptType ${parsedInput.scriptType} requires prevTx Buffer`);
}
switch (parsedInput.scriptType) {
case 'p2shP2pk':
return {
nonWitnessUtxo,
partialSig: [{ pubkey: parsedInput.publicKeys[0], signature: parsedInput.signatures[0] }],
};
case 'p2sh':
case 'p2wsh':
case 'p2shP2wsh':
return omitUndefined({
nonWitnessUtxo,
partialSig: getPartialSigs(),
redeemScript: parsedInput.redeemScript,
witnessScript: parsedInput.witnessScript,
});
case 'taprootScriptPathSpend':
const leafHash = __1.taproot.getTapleafHash(__1.ecc, parsedInput.controlBlock, parsedInput.pubScript);
return {
tapLeafScript: [
{
controlBlock: parsedInput.controlBlock,
script: parsedInput.pubScript,
leafVersion: parsedInput.leafVersion,
},
],
tapScriptSig: getPartialSigs().map((obj) => ({ ...obj, leafHash })),
};
}
}
/**
* Takes a partially signed transaction and removes the scripts and signatures.
*
* Inputs must be one of:
* - p2shP2pk
* - p2sh 2-of-3
* - p2shP2wsh 2-of-3
* - p2wsh 2-of-3
* - p2tr script path 2-of-2
*
* @param tx the partially signed transaction
* @param prevOuts
*
* @return the removed scripts and signatures, ready to be added to a PSBT
*/
function unsign(tx, prevOuts) {
return tx.ins.map((input, vin) => {
const update = getInputUpdate(tx, vin, prevOuts);
input.witness = [];
input.script = Buffer.alloc(0);
return update;
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUhhbGZTaWduZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vcHNidC9mcm9tSGFsZlNpZ25lZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLHdDQW1FQztBQWlCRCx3QkFPQztBQXZHRCxpQ0FBaUM7QUFFakMsNkJBQStFO0FBRS9FLDhDQUFxRDtBQUNyRCw0Q0FBMkQ7QUFDM0Qsb0RBQWtEO0FBRWxELFNBQVMsYUFBYSxDQUFvQyxDQUEwQjtJQUNsRixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFNLENBQUM7QUFDeEYsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FDNUIsRUFBMkIsRUFDM0IsR0FBVyxFQUNYLFFBQW9EO0lBRXBELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxPQUFPLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLGlDQUFvQixFQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEtBQUsscUJBQXFCLENBQUMsQ0FBQztJ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ZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBQc2J0SW5wdXRVcGRhdGUsIFBhcnRpYWxTaWcgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGVjYyBhcyBlY2NMaWIsIFR4T3V0cHV0LCB0YXByb290LCBnZXRNYWlubmV0LCBuZXR3b3JrcyB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IFV0eG9UcmFuc2FjdGlvbiB9IGZyb20gJy4uL1V0eG9UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBwYXJzZVNpZ25hdHVyZVNjcmlwdCB9IGZyb20gJy4uL3BhcnNlSW5wdXQnO1xuaW1wb3J0IHsgZ2V0U2lnbmF0dXJlc1dpdGhQdWJsaWNLZXlzIH0gZnJvbSAnLi4vc2lnbmF0dXJlJztcbmltcG9ydCB7IGhhc1dpdG5lc3NEYXRhIH0gZnJvbSAnLi4vb3V0cHV0U2NyaXB0cyc7XG5cbmZ1bmN0aW9uIG9taXRVbmRlZmluZWQ8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFQge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHYpLmZpbHRlcigoW2ssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQpKSBhcyBUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRVcGRhdGUoXG4gIHR4OiBVdHhvVHJhbnNhY3Rpb248YmlnaW50PixcbiAgdmluOiBudW1iZXIsXG4gIHByZXZPdXRzOiAoVHhPdXRwdXQ8YmlnaW50PiAmIHsgcHJldlR4PzogQnVmZmVyIH0pW11cbik6IFBzYnRJbnB1dFVwZGF0ZSB7XG4gIGNvbnN0IG5vbldpdG5lc3NVdHhvID0gcHJldk91dHNbdmluXS5wcmV2VHg7XG4gIGNvbnN0IHsgc2NyaXB0LCB3aXRuZXNzIH0gPSB0eC5pbnNbdmluXTtcbiAgaWYgKHNjcmlwdC5sZW5ndGggPT09IDAgJiYgd2l0bmVzcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbm9uV2l0bmVzc1V0eG8gPyB7IG5vbldpdG5lc3NVdHhvIH0gOiB7fTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZElucHV0ID0gcGFyc2VTaWduYXR1cmVTY3JpcHQodHguaW5zW3Zpbl0pO1xuICBhc3NlcnQub2socGFyc2VkSW5wdXQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKTtcblxuICBmdW5jdGlvbiBnZXRQYXJ0aWFsU2lncygpOiBQYXJ0aWFsU2lnW10ge1xuICAgIGFzc2VydC5vayhwYXJzZWRJbnB1dC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpO1xuICAgIHJldHVybiBnZXRTaWduYXR1cmVzV2l0aFB1YmxpY0tleXModHgsIHZpbiwgcHJldk91dHMsIHBhcnNlZElucHV0LnB1YmxpY0tleXMpLmZsYXRNYXAoKHNpZ25hdHVyZSwgaSkgPT5cbiAgICAgIHNpZ25hdHVyZVxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHVia2V5OiBwYXJzZWRJbnB1dC5wdWJsaWNLZXlzW2ldLFxuICAgICAgICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXVxuICAgICk7XG4gIH1cbiAgLy8gQmVjYXVzZSBaY2FzaCBkaXJlY3RseSBoYXNoZXMgdGhlIHZhbHVlIGZvciBub24tc2Vnd2l0IHRyYW5zYWN0aW9ucywgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgaW5kaXJlY3RseVxuICAvLyB3aXRoIHRoZSBwcmV2aW91cyB0cmFuc2FjdGlvbi4gVGhlcmVmb3JlLCB3ZSBjYW4gdHJlYXQgWmNhc2ggbm9uLXNlZ3dpdCB0cmFuc2FjdGlvbnMgYXMgQml0Y29pblxuICAvLyBzZWd3aXQgdHJhbnNhY3Rpb25zXG4gIGlmIChcbiAgICBwYXJzZWRJbnB1dC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgJiZcbiAgICAhaGFzV2l0bmVzc0RhdGEocGFyc2VkSW5wdXQuc2NyaXB0VHlwZSkgJiZcbiAgICAhbm9uV2l0bmVzc1V0eG8gJiZcbiAgICBnZXRNYWlubmV0KHR4Lm5ldHdvcmspICE9PSBuZXR3b3Jrcy56Y2FzaFxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHNjcmlwdFR5cGUgJHtwYXJzZWRJbnB1dC5zY3JpcHRUeXBlfSByZXF1aXJlcyBwcmV2VHggQnVmZmVyYCk7XG4gIH1cblxuICBzd2l0Y2ggKHBhcnNlZElucHV0LnNjcmlwdFR5cGUpIHtcbiAgICBjYXNlICdwMnNoUDJwayc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub25XaXRuZXNzVXR4byxcbiAgICAgICAgcGFydGlhbFNpZzogW3sgcHVia2V5OiBwYXJzZWRJbnB1dC5wdWJsaWNLZXlzWzBdLCBzaWduYXR1cmU6IHBhcnNlZElucHV0LnNpZ25hdHVyZXNbMF0gfV0sXG4gICAgICB9O1xuICAgIGNhc2UgJ3Ayc2gnOlxuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgcmV0dXJuIG9taXRVbmRlZmluZWQoe1xuICAgICAgICBub25XaXRuZXNzVXR4byxcbiAgICAgICAgcGFydGlhbFNpZzogZ2V0UGFydGlhbFNpZ3MoKSxcbiAgICAgICAgcmVkZWVtU2NyaXB0OiBwYXJzZWRJbnB1dC5yZWRlZW1TY3JpcHQsXG4gICAgICAgIHdpdG5lc3NTY3JpcHQ6IHBhcnNlZElucHV0LndpdG5lc3NTY3JpcHQsXG4gICAgICB9KTtcbiAgICBjYXNlICd0YXByb290U2NyaXB0UGF0aFNwZW5kJzpcbiAgICAgIGNvbnN0IGxlYWZIYXNoID0gdGFwcm9vdC5nZXRUYXBsZWFmSGFzaChlY2NMaWIsIHBhcnNlZElucHV0LmNvbnRyb2xCbG9jaywgcGFyc2VkSW5wdXQucHViU2NyaXB0KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhcExlYWZTY3JpcHQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb250cm9sQmxvY2s6IHBhcnNlZElucHV0LmNvbnRyb2xCbG9jayxcbiAgICAgICAgICAgIHNjcmlwdDogcGFyc2VkSW5wdXQucHViU2NyaXB0LFxuICAgICAgICAgICAgbGVhZlZlcnNpb246IHBhcnNlZElucHV0LmxlYWZWZXJzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRhcFNjcmlwdFNpZzogZ2V0UGFydGlhbFNpZ3MoKS5tYXAoKG9iaikgPT4gKHsgLi4ub2JqLCBsZWFmSGFzaCB9KSksXG4gICAgICB9O1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgYSBwYXJ0aWFsbHkgc2lnbmVkIHRyYW5zYWN0aW9uIGFuZCByZW1vdmVzIHRoZSBzY3JpcHRzIGFuZCBzaWduYXR1cmVzLlxuICpcbiAqIElucHV0cyBtdXN0IGJlIG9uZSBvZjpcbiAqICAtIHAyc2hQMnBrXG4gKiAgLSBwMnNoIDItb2YtM1xuICogIC0gcDJzaFAyd3NoIDItb2YtM1xuICogIC0gcDJ3c2ggMi1vZi0zXG4gKiAgLSBwMnRyIHNjcmlwdCBwYXRoIDItb2YtMlxuICpcbiAqIEBwYXJhbSB0eCB0aGUgcGFydGlhbGx5IHNpZ25lZCB0cmFuc2FjdGlvblxuICogQHBhcmFtIHByZXZPdXRzXG4gKlxuICogQHJldHVybiB0aGUgcmVtb3ZlZCBzY3JpcHRzIGFuZCBzaWduYXR1cmVzLCByZWFkeSB0byBiZSBhZGRlZCB0byBhIFBTQlRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuc2lnbih0eDogVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4sIHByZXZPdXRzOiBUeE91dHB1dDxiaWdpbnQ+W10pOiBQc2J0SW5wdXRVcGRhdGVbXSB7XG4gIHJldHVybiB0eC5pbnMubWFwKChpbnB1dCwgdmluKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlID0gZ2V0SW5wdXRVcGRhdGUodHgsIHZpbiwgcHJldk91dHMpO1xuICAgIGlucHV0LndpdG5lc3MgPSBbXTtcbiAgICBpbnB1dC5zY3JpcHQgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgcmV0dXJuIHVwZGF0ZTtcbiAgfSk7XG59XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!