PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo/utxo-core/dist/src/bip322
Просмотр файла: utils.js
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.addBip322ProofMessage = addBip322ProofMessage;
exports.getBip322ProofMessageAtIndex = getBip322ProofMessageAtIndex;
exports.isBip322ProofCheck = isBip322ProofCheck;
const utxolib = __importStar(require("@bitgo/utxo-lib"));
function addBip322ProofMessage(psbt, inputIndex, message) {
utxolib.bitgo.addProprietaryKeyValuesFromUnknownKeyValues(psbt, 'input', inputIndex, {
key: {
identifier: utxolib.bitgo.PSBT_PROPRIETARY_IDENTIFIER,
subtype: utxolib.bitgo.ProprietaryKeySubtype.BIP322_MESSAGE,
keydata: Buffer.alloc(0),
},
value: message,
});
}
/**
* Get the BIP322 proof message at a specific input index of the PSBT
* @param psbt
* @param inputIndex
* @returns The BIP322 proof message as a Buffer, or undefined if not found
*/
function getBip322ProofMessageAtIndex(psbt, inputIndex) {
if (psbt.data.inputs.length <= inputIndex) {
throw new Error(`Input index ${inputIndex} is out of bounds for the PSBT`);
}
const input = psbt.data.inputs[inputIndex];
const proprietaryKeyVals = utxolib.bitgo.getPsbtInputProprietaryKeyVals(input, {
identifier: utxolib.bitgo.PSBT_PROPRIETARY_IDENTIFIER,
subtype: utxolib.bitgo.ProprietaryKeySubtype.BIP322_MESSAGE,
});
if (proprietaryKeyVals.length === 0) {
return undefined;
}
else if (proprietaryKeyVals.length > 1) {
throw new Error(`Multiple BIP322 messages found at input index ${inputIndex}`);
}
return Buffer.from(proprietaryKeyVals[0].value);
}
/**
* checks if the transaction contains a BIP322 proof
* does not check if the proof is valid
* Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#user-content-Full
* @params tx The transaction or the PSBT to check
* @returns boolean
*/
function isBip322ProofCheck(tx) {
if (tx instanceof utxolib.bitgo.UtxoPsbt) {
if (tx.version !== 0 || tx.locktime !== 0 || tx.data.outputs.length !== 1) {
return false;
}
const output = tx.txOutputs[0];
if (output.script.toString('hex') !== '6a' || output.value !== 0n) {
return false;
}
// Return true if there is a message encoded in every input in the proprietary field
return tx.data.inputs.every((input, index) => getBip322ProofMessageAtIndex(tx, index) !== undefined);
}
else if (tx instanceof utxolib.bitgo.UtxoTransaction) {
if (tx.version !== 0 || tx.locktime !== 0 || tx.outs.length !== 1) {
return false;
}
if (tx.outs.length !== 1) {
return false;
}
const output = tx.outs[0];
// check that the only output is an OP_RETURN with 0 value
if (output.script.toString('hex') !== '6a' || output.value !== 0n) {
return false;
}
for (const input of tx.ins) {
if (input.index !== 0 || input.sequence !== 0) {
return false;
}
}
return true;
}
else {
throw new Error('Unsupported transaction type for BIP322 proof check');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwMzIyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsc0RBU0M7QUFRRCxvRUFlQztBQVNELGdEQW1DQztBQTlFRCx5REFBMkM7QUFFM0MsU0FBZ0IscUJBQXFCLENBQUMsSUFBa0IsRUFBRSxVQUFrQixFQUFFLE9BQWU7SUFDM0YsT0FBTyxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRTtRQUNuRixHQUFHLEVBQUU7WUFDSCxVQUFVLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkI7WUFDckQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsY0FBYztZQUMzRCxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDekI7UUFDRCxLQUFLLEVBQUUsT0FBTztLQUNmLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLDRCQUE0QixDQUFDLElBQWtCLEVBQUUsVUFBa0I7SUFDakYsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLFVBQVUsZ0NBQWdDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLEtBQUssRUFBRTtRQUM3RSxVQUFVLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkI7UUFDckQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsY0FBYztLQUM1RCxDQUFDLENBQUM7SUFDSCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO1NBQU0sSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxFQUFrRTtJQUNuRyxJQUFJLEVBQUUsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNsRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxvRkFBb0Y7UUFDcEYsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDdkcsQ0FBQztTQUFNLElBQUksRUFBRSxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkQsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsMERBQTBEO1FBQzFELElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbEUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztJQUN6RSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEJpcDMyMlByb29mTWVzc2FnZShwc2J0OiB1dHhvbGliLlBzYnQsIGlucHV0SW5kZXg6IG51bWJlciwgbWVzc2FnZTogQnVmZmVyKTogdm9pZCB7XG4gIHV0eG9saWIuYml0Z28uYWRkUHJvcHJpZXRhcnlLZXlWYWx1ZXNGcm9tVW5rbm93bktleVZhbHVlcyhwc2J0LCAnaW5wdXQnLCBpbnB1dEluZGV4LCB7XG4gICAga2V5OiB7XG4gICAgICBpZGVudGlmaWVyOiB1dHhvbGliLmJpdGdvLlBTQlRfUFJPUFJJRVRBUllfSURFTlRJRklFUixcbiAgICAgIHN1YnR5cGU6IHV0eG9saWIuYml0Z28uUHJvcHJpZXRhcnlLZXlTdWJ0eXBlLkJJUDMyMl9NRVNTQUdFLFxuICAgICAga2V5ZGF0YTogQnVmZmVyLmFsbG9jKDApLFxuICAgIH0sXG4gICAgdmFsdWU6IG1lc3NhZ2UsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgQklQMzIyIHByb29mIG1lc3NhZ2UgYXQgYSBzcGVjaWZpYyBpbnB1dCBpbmRleCBvZiB0aGUgUFNCVFxuICogQHBhcmFtIHBzYnRcbiAqIEBwYXJhbSBpbnB1dEluZGV4XG4gKiBAcmV0dXJucyBUaGUgQklQMzIyIHByb29mIG1lc3NhZ2UgYXMgYSBCdWZmZXIsIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJpcDMyMlByb29mTWVzc2FnZUF0SW5kZXgocHNidDogdXR4b2xpYi5Qc2J0LCBpbnB1dEluZGV4OiBudW1iZXIpOiBCdWZmZXIgfCB1bmRlZmluZWQge1xuICBpZiAocHNidC5kYXRhLmlucHV0cy5sZW5ndGggPD0gaW5wdXRJbmRleCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgaW5kZXggJHtpbnB1dEluZGV4fSBpcyBvdXQgb2YgYm91bmRzIGZvciB0aGUgUFNCVGApO1xuICB9XG4gIGNvbnN0IGlucHV0ID0gcHNidC5kYXRhLmlucHV0c1tpbnB1dEluZGV4XTtcbiAgY29uc3QgcHJvcHJpZXRhcnlLZXlWYWxzID0gdXR4b2xpYi5iaXRnby5nZXRQc2J0SW5wdXRQcm9wcmlldGFyeUtleVZhbHMoaW5wdXQsIHtcbiAgICBpZGVudGlmaWVyOiB1dHhvbGliLmJpdGdvLlBTQlRfUFJPUFJJRVRBUllfSURFTlRJRklFUixcbiAgICBzdWJ0eXBlOiB1dHhvbGliLmJpdGdvLlByb3ByaWV0YXJ5S2V5U3VidHlwZS5CSVAzMjJfTUVTU0FHRSxcbiAgfSk7XG4gIGlmIChwcm9wcmlldGFyeUtleVZhbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIGlmIChwcm9wcmlldGFyeUtleVZhbHMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgQklQMzIyIG1lc3NhZ2VzIGZvdW5kIGF0IGlucHV0IGluZGV4ICR7aW5wdXRJbmRleH1gKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ocHJvcHJpZXRhcnlLZXlWYWxzWzBdLnZhbHVlKTtcbn1cblxuLyoqXG4gKiBjaGVja3MgaWYgdGhlIHRyYW5zYWN0aW9uIGNvbnRhaW5zIGEgQklQMzIyIHByb29mXG4gKiBkb2VzIG5vdCBjaGVjayBpZiB0aGUgcHJvb2YgaXMgdmFsaWRcbiAqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDMyMi5tZWRpYXdpa2kjdXNlci1jb250ZW50LUZ1bGxcbiAqIEBwYXJhbXMgdHggVGhlIHRyYW5zYWN0aW9uIG9yIHRoZSBQU0JUIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JpcDMyMlByb29mQ2hlY2sodHg6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+KTogYm9vbGVhbiB7XG4gIGlmICh0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQpIHtcbiAgICBpZiAodHgudmVyc2lvbiAhPT0gMCB8fCB0eC5sb2NrdGltZSAhPT0gMCB8fCB0eC5kYXRhLm91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IHR4LnR4T3V0cHV0c1swXTtcbiAgICBpZiAob3V0cHV0LnNjcmlwdC50b1N0cmluZygnaGV4JykgIT09ICc2YScgfHwgb3V0cHV0LnZhbHVlICE9PSAwbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgbWVzc2FnZSBlbmNvZGVkIGluIGV2ZXJ5IGlucHV0IGluIHRoZSBwcm9wcmlldGFyeSBmaWVsZFxuICAgIHJldHVybiB0eC5kYXRhLmlucHV0cy5ldmVyeSgoaW5wdXQsIGluZGV4KSA9PiBnZXRCaXAzMjJQcm9vZk1lc3NhZ2VBdEluZGV4KHR4LCBpbmRleCkgIT09IHVuZGVmaW5lZCk7XG4gIH0gZWxzZSBpZiAodHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbikge1xuICAgIGlmICh0eC52ZXJzaW9uICE9PSAwIHx8IHR4LmxvY2t0aW1lICE9PSAwIHx8IHR4Lm91dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0eC5vdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXQgPSB0eC5vdXRzWzBdO1xuICAgIC8vIGNoZWNrIHRoYXQgdGhlIG9ubHkgb3V0cHV0IGlzIGFuIE9QX1JFVFVSTiB3aXRoIDAgdmFsdWVcbiAgICBpZiAob3V0cHV0LnNjcmlwdC50b1N0cmluZygnaGV4JykgIT09ICc2YScgfHwgb3V0cHV0LnZhbHVlICE9PSAwbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdHguaW5zKSB7XG4gICAgICBpZiAoaW5wdXQuaW5kZXggIT09IDAgfHwgaW5wdXQuc2VxdWVuY2UgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZSBmb3IgQklQMzIyIHByb29mIGNoZWNrJyk7XG4gIH1cbn1cbiJdfQ==Выполнить команду
Для локальной разработки. Не используйте в интернете!