PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo/utxo-core/dist/src/bip322

Просмотр файла: toSpend.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BIP322_TAG = void 0;
exports.hashMessageWithTag = hashMessageWithTag;
exports.buildToSpendTransaction = buildToSpendTransaction;
exports.buildToSpendTransactionFromChainAndIndex = buildToSpendTransactionFromChainAndIndex;
const fast_sha256_1 = require("fast-sha256");
const utxo_lib_1 = require("@bitgo/utxo-lib");
exports.BIP322_TAG = 'BIP0322-signed-message';
/**
 * Perform a tagged hash
 *
 * @param {string | Buffer} message - The message to hash as a Buffer or utf-8 string
 * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
 * @returns {Buffer} - The resulting hash of the message with the tag.
 */
function hashMessageWithTag(message, tag = exports.BIP322_TAG) {
    // Compute the message hash - SHA256(SHA256(tag) || SHA256(tag) || message)
    // Reference: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
    const tagHasher = new fast_sha256_1.Hash();
    tagHasher.update(Buffer.from(exports.BIP322_TAG));
    const tagHash = tagHasher.digest();
    const messageHasher = new fast_sha256_1.Hash();
    messageHasher.update(tagHash);
    messageHasher.update(tagHash);
    messageHasher.update(Buffer.from(message));
    const messageHash = messageHasher.digest();
    return Buffer.from(messageHash);
}
/**
 * Build a BIP322 "to spend" transaction
 * Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
 *
 * @param {Buffer} scriptPubKey - The scriptPubKey to use for the output
 * @param {string | Buffer} message - The message to include in the transaction
 * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
 * @returns {Transaction} - The constructed transaction
 */
function buildToSpendTransaction(scriptPubKey, message, tag = exports.BIP322_TAG) {
    // Create PSBT object for constructing the transaction
    const psbt = new utxo_lib_1.Psbt();
    // Set default value for nVersion and nLockTime
    psbt.setVersion(0); // nVersion = 0
    psbt.setLocktime(0); // nLockTime = 0
    // Compute the message hash - SHA256(SHA256(tag) || SHA256(tag) || message)
    const messageHash = hashMessageWithTag(message, tag);
    // Construct the scriptSig - OP_0 PUSH32[ message_hash ]
    const scriptSigPartOne = new Uint8Array([0x00, 0x20]); // OP_0 PUSH32
    const scriptSig = new Uint8Array(scriptSigPartOne.length + messageHash.length);
    scriptSig.set(scriptSigPartOne);
    scriptSig.set(messageHash, scriptSigPartOne.length);
    // Set the input
    psbt.addInput({
        hash: '0'.repeat(64), // vin[0].prevout.hash = 0000...000
        index: 0xffffffff, // vin[0].prevout.n = 0xFFFFFFFF
        sequence: 0, // vin[0].nSequence = 0
        finalScriptSig: Buffer.from(scriptSig), // vin[0].scriptSig = OP_0 PUSH32[ message_hash ]
        witnessScript: Buffer.from([]), // vin[0].scriptWitness = []
    });
    // Set the output
    psbt.addOutput({
        value: BigInt(0), // vout[0].nValue = 0
        script: scriptPubKey, // vout[0].scriptPubKey = message_challenge
    });
    // Return transaction
    return psbt.extractTransaction();
}
function buildToSpendTransactionFromChainAndIndex(rootWalletKeys, chain, index, message, tag = exports.BIP322_TAG) {
    const outputScript = utxo_lib_1.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys, utxo_lib_1.bitgo.scriptTypeForChain(chain), utxo_lib_1.networks.bitcoin);
    return buildToSpendTransaction(outputScript.scriptPubKey, message, tag);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TcGVuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXAzMjIvdG9TcGVuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFZQSxnREFZQztBQVdELDBEQWdDQztBQUVELDRGQWFDO0FBbEZELDZDQUFtQztBQUNuQyw4Q0FBcUU7QUFFeEQsUUFBQSxVQUFVLEdBQUcsd0JBQXdCLENBQUM7QUFFbkQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsT0FBd0IsRUFBRSxHQUFHLEdBQUcsa0JBQVU7SUFDM0UsMkVBQTJFO0lBQzNFLGlGQUFpRjtJQUNqRixNQUFNLFNBQVMsR0FBRyxJQUFJLGtCQUFJLEVBQUUsQ0FBQztJQUM3QixTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQVUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksa0JBQUksRUFBRSxDQUFDO0lBQ2pDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDM0MsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLHVCQUF1QixDQUNyQyxZQUFvQixFQUNwQixPQUF3QixFQUN4QixHQUFHLEdBQUcsa0JBQVU7SUFFaEIsc0RBQXNEO0lBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksZUFBSSxFQUFFLENBQUM7SUFDeEIsK0NBQStDO0lBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlO0lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7SUFDckMsMkVBQTJFO0lBQzNFLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRCx3REFBd0Q7SUFDeEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYztJQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxnQkFBZ0I7SUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNaLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLG1DQUFtQztRQUN6RCxLQUFLLEVBQUUsVUFBVSxFQUFFLGdDQUFnQztRQUNuRCxRQUFRLEVBQUUsQ0FBQyxFQUFFLHVCQUF1QjtRQUNwQyxjQUFjLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxpREFBaUQ7UUFDekYsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsNEJBQTRCO0tBQzdELENBQUMsQ0FBQztJQUNILGlCQUFpQjtJQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxxQkFBcUI7UUFDdkMsTUFBTSxFQUFFLFlBQVksRUFBRSwyQ0FBMkM7S0FDbEUsQ0FBQyxDQUFDO0lBQ0gscUJBQXFCO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDbkMsQ0FBQztBQUVELFNBQWdCLHdDQUF3QyxDQUN0RCxjQUFvQyxFQUNwQyxLQUFzQixFQUN0QixLQUFhLEVBQ2IsT0FBd0IsRUFDeEIsR0FBRyxHQUFHLGtCQUFVO0lBRWhCLE1BQU0sWUFBWSxHQUFHLGdCQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUM3RCxjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFDOUQsZ0JBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFDL0IsbUJBQVEsQ0FBQyxPQUFPLENBQ2pCLENBQUM7SUFDRixPQUFPLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYXNoIH0gZnJvbSAnZmFzdC1zaGEyNTYnO1xuaW1wb3J0IHsgUHNidCwgVHJhbnNhY3Rpb24sIGJpdGdvLCBuZXR3b3JrcyB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmV4cG9ydCBjb25zdCBCSVAzMjJfVEFHID0gJ0JJUDAzMjItc2lnbmVkLW1lc3NhZ2UnO1xuXG4vKipcbiAqIFBlcmZvcm0gYSB0YWdnZWQgaGFzaFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gaGFzaCBhcyBhIEJ1ZmZlciBvciB1dGYtOCBzdHJpbmdcbiAqIEBwYXJhbSB7QnVmZmVyfSBbdGFnPUJJUDMyMl9UQUddIC0gVGhlIHRhZyB0byB1c2UgZm9yIGhhc2hpbmcsIGRlZmF1bHRzIHRvIEJJUDMyMl9UQUcuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSAtIFRoZSByZXN1bHRpbmcgaGFzaCBvZiB0aGUgbWVzc2FnZSB3aXRoIHRoZSB0YWcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoTWVzc2FnZVdpdGhUYWcobWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyLCB0YWcgPSBCSVAzMjJfVEFHKTogQnVmZmVyIHtcbiAgLy8gQ29tcHV0ZSB0aGUgbWVzc2FnZSBoYXNoIC0gU0hBMjU2KFNIQTI1Nih0YWcpIHx8IFNIQTI1Nih0YWcpIHx8IG1lc3NhZ2UpXG4gIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDMyMi5tZWRpYXdpa2kjZnVsbFxuICBjb25zdCB0YWdIYXNoZXIgPSBuZXcgSGFzaCgpO1xuICB0YWdIYXNoZXIudXBkYXRlKEJ1ZmZlci5mcm9tKEJJUDMyMl9UQUcpKTtcbiAgY29uc3QgdGFnSGFzaCA9IHRhZ0hhc2hlci5kaWdlc3QoKTtcbiAgY29uc3QgbWVzc2FnZUhhc2hlciA9IG5ldyBIYXNoKCk7XG4gIG1lc3NhZ2VIYXNoZXIudXBkYXRlKHRhZ0hhc2gpO1xuICBtZXNzYWdlSGFzaGVyLnVwZGF0ZSh0YWdIYXNoKTtcbiAgbWVzc2FnZUhhc2hlci51cGRhdGUoQnVmZmVyLmZyb20obWVzc2FnZSkpO1xuICBjb25zdCBtZXNzYWdlSGFzaCA9IG1lc3NhZ2VIYXNoZXIuZGlnZXN0KCk7XG4gIHJldHVybiBCdWZmZXIuZnJvbShtZXNzYWdlSGFzaCk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBCSVAzMjIgXCJ0byBzcGVuZFwiIHRyYW5zYWN0aW9uXG4gKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAzMjIubWVkaWF3aWtpI2Z1bGxcbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gc2NyaXB0UHViS2V5IC0gVGhlIHNjcmlwdFB1YktleSB0byB1c2UgZm9yIHRoZSBvdXRwdXRcbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gaW5jbHVkZSBpbiB0aGUgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7QnVmZmVyfSBbdGFnPUJJUDMyMl9UQUddIC0gVGhlIHRhZyB0byB1c2UgZm9yIGhhc2hpbmcsIGRlZmF1bHRzIHRvIEJJUDMyMl9UQUcuXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb259IC0gVGhlIGNvbnN0cnVjdGVkIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbihcbiAgc2NyaXB0UHViS2V5OiBCdWZmZXIsXG4gIG1lc3NhZ2U6IHN0cmluZyB8IEJ1ZmZlcixcbiAgdGFnID0gQklQMzIyX1RBR1xuKTogVHJhbnNhY3Rpb248YmlnaW50PiB7XG4gIC8vIENyZWF0ZSBQU0JUIG9iamVjdCBmb3IgY29uc3RydWN0aW5nIHRoZSB0cmFuc2FjdGlvblxuICBjb25zdCBwc2J0ID0gbmV3IFBzYnQoKTtcbiAgLy8gU2V0IGRlZmF1bHQgdmFsdWUgZm9yIG5WZXJzaW9uIGFuZCBuTG9ja1RpbWVcbiAgcHNidC5zZXRWZXJzaW9uKDApOyAvLyBuVmVyc2lvbiA9IDBcbiAgcHNidC5zZXRMb2NrdGltZSgwKTsgLy8gbkxvY2tUaW1lID0gMFxuICAvLyBDb21wdXRlIHRoZSBtZXNzYWdlIGhhc2ggLSBTSEEyNTYoU0hBMjU2KHRhZykgfHwgU0hBMjU2KHRhZykgfHwgbWVzc2FnZSlcbiAgY29uc3QgbWVzc2FnZUhhc2ggPSBoYXNoTWVzc2FnZVdpdGhUYWcobWVzc2FnZSwgdGFnKTtcbiAgLy8gQ29uc3RydWN0IHRoZSBzY3JpcHRTaWcgLSBPUF8wIFBVU0gzMlsgbWVzc2FnZV9oYXNoIF1cbiAgY29uc3Qgc2NyaXB0U2lnUGFydE9uZSA9IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDIwXSk7IC8vIE9QXzAgUFVTSDMyXG4gIGNvbnN0IHNjcmlwdFNpZyA9IG5ldyBVaW50OEFycmF5KHNjcmlwdFNpZ1BhcnRPbmUubGVuZ3RoICsgbWVzc2FnZUhhc2gubGVuZ3RoKTtcbiAgc2NyaXB0U2lnLnNldChzY3JpcHRTaWdQYXJ0T25lKTtcbiAgc2NyaXB0U2lnLnNldChtZXNzYWdlSGFzaCwgc2NyaXB0U2lnUGFydE9uZS5sZW5ndGgpO1xuICAvLyBTZXQgdGhlIGlucHV0XG4gIHBzYnQuYWRkSW5wdXQoe1xuICAgIGhhc2g6ICcwJy5yZXBlYXQoNjQpLCAvLyB2aW5bMF0ucHJldm91dC5oYXNoID0gMDAwMC4uLjAwMFxuICAgIGluZGV4OiAweGZmZmZmZmZmLCAvLyB2aW5bMF0ucHJldm91dC5uID0gMHhGRkZGRkZGRlxuICAgIHNlcXVlbmNlOiAwLCAvLyB2aW5bMF0ublNlcXVlbmNlID0gMFxuICAgIGZpbmFsU2NyaXB0U2lnOiBCdWZmZXIuZnJvbShzY3JpcHRTaWcpLCAvLyB2aW5bMF0uc2NyaXB0U2lnID0gT1BfMCBQVVNIMzJbIG1lc3NhZ2VfaGFzaCBdXG4gICAgd2l0bmVzc1NjcmlwdDogQnVmZmVyLmZyb20oW10pLCAvLyB2aW5bMF0uc2NyaXB0V2l0bmVzcyA9IFtdXG4gIH0pO1xuICAvLyBTZXQgdGhlIG91dHB1dFxuICBwc2J0LmFkZE91dHB1dCh7XG4gICAgdmFsdWU6IEJpZ0ludCgwKSwgLy8gdm91dFswXS5uVmFsdWUgPSAwXG4gICAgc2NyaXB0OiBzY3JpcHRQdWJLZXksIC8vIHZvdXRbMF0uc2NyaXB0UHViS2V5ID0gbWVzc2FnZV9jaGFsbGVuZ2VcbiAgfSk7XG4gIC8vIFJldHVybiB0cmFuc2FjdGlvblxuICByZXR1cm4gcHNidC5leHRyYWN0VHJhbnNhY3Rpb24oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVG9TcGVuZFRyYW5zYWN0aW9uRnJvbUNoYWluQW5kSW5kZXgoXG4gIHJvb3RXYWxsZXRLZXlzOiBiaXRnby5Sb290V2FsbGV0S2V5cyxcbiAgY2hhaW46IGJpdGdvLkNoYWluQ29kZSxcbiAgaW5kZXg6IG51bWJlcixcbiAgbWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyLFxuICB0YWcgPSBCSVAzMjJfVEFHXG4pOiBUcmFuc2FjdGlvbjxiaWdpbnQ+IHtcbiAgY29uc3Qgb3V0cHV0U2NyaXB0ID0gYml0Z28ub3V0cHV0U2NyaXB0cy5jcmVhdGVPdXRwdXRTY3JpcHQyb2YzKFxuICAgIHJvb3RXYWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgoY2hhaW4sIGluZGV4KS5wdWJsaWNLZXlzLFxuICAgIGJpdGdvLnNjcmlwdFR5cGVGb3JDaGFpbihjaGFpbiksXG4gICAgbmV0d29ya3MuYml0Y29pblxuICApO1xuICByZXR1cm4gYnVpbGRUb1NwZW5kVHJhbnNhY3Rpb24ob3V0cHV0U2NyaXB0LnNjcmlwdFB1YktleSwgbWVzc2FnZSwgdGFnKTtcbn1cbiJdfQ==

Выполнить команду


Для локальной разработки. Не используйте в интернете!