PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo/sdk-coin-xrp/dist/src
Просмотр файла: ripple.js
"use strict";
/**
* @hidden
*/
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;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
/**
*/
const rippleKeypairs = __importStar(require("ripple-keypairs"));
const xrpl = __importStar(require("xrpl"));
const secp256k1_1 = require("@bitgo/secp256k1");
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const binary = __importStar(require("ripple-binary-codec"));
/**
* Convert an XRP address to a BigNumber for numeric comparison.
* This is needed for proper sorting of signers as required by the XRP protocol.
*
* @param address - The XRP address to convert
* @returns BigNumber representation of the address
*/
function addressToBigNumber(address) {
const hex = Buffer.from(xrpl.decodeAccountID(address)).toString('hex');
return new bignumber_js_1.default(hex, 16);
}
function computeSignature(tx, privateKey, signAs) {
const signingData = signAs ? binary.encodeForMultisigning(tx, signAs) : binary.encodeForSigning(tx);
return rippleKeypairs.sign(signingData, privateKey);
}
/**
* Sign Ripple transaction with a secp256k1 private key
* @param txHex
* @param privateKey
* @param options
* @returns {{signedTransaction: *, id}}
*/
const signWithPrivateKey = function (txHex, privateKey, options) {
let privateKeyBuffer = Buffer.from(privateKey, 'hex');
if (privateKeyBuffer.length === 33 && privateKeyBuffer[0] === 0) {
privateKeyBuffer = privateKeyBuffer.slice(1, 33);
}
const publicKey = secp256k1_1.ECPair.fromPrivateKey(privateKeyBuffer).publicKey.toString('hex').toUpperCase();
let tx;
try {
tx = binary.decode(txHex);
}
catch (e) {
try {
tx = JSON.parse(txHex);
}
catch (e) {
throw new Error('txHex needs to be either hex or JSON string for XRP');
}
}
tx.SigningPubKey = options && options.signAs ? '' : publicKey;
if (options && options.signAs) {
const expectedSigner = rippleKeypairs.deriveAddress(publicKey);
if (options.signAs !== expectedSigner) {
throw new Error('signAs does not match private key');
}
const signer = {
Account: options.signAs,
SigningPubKey: publicKey,
TxnSignature: computeSignature(tx, privateKey, options.signAs),
};
// Ordering of private key signing matters, or the Ripple fullnode will throw an 'Unsorted Signers array' error.
// XRP requires Signers array to be sorted based on numeric value of signer addresses (lowest first)
if (tx.Signers) {
// Add the current signer
tx.Signers.push({ Signer: signer });
// Sort the Signers array by numeric value of Account (address) to ensure proper ordering
tx.Signers.sort((a, b) => {
const addressBN1 = addressToBigNumber(a.Signer.Account);
const addressBN2 = addressToBigNumber(b.Signer.Account);
return addressBN1.comparedTo(addressBN2);
});
}
else {
tx.Signers = [{ Signer: signer }];
}
}
else {
tx.TxnSignature = computeSignature(tx, privateKey, undefined);
}
const serialized = binary.encode(tx);
return {
signedTransaction: serialized,
id: xrpl.hashes.hashSignedTx(serialized),
};
};
module.exports = { ...xrpl, signWithPrivateKey };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlwcGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JpcHBsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSDtHQUNHO0FBQ0gsZ0VBQWtEO0FBQ2xELDJDQUE2QjtBQUM3QixnREFBMEM7QUFDMUMsZ0VBQXFDO0FBRXJDLDREQUE4QztBQUU5Qzs7Ozs7O0dBTUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLE9BQWU7SUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sSUFBSSxzQkFBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU07SUFDOUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEcsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTztJQUM3RCxJQUFJLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RELElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVB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aGlkZGVuXG4gKi9cblxuLyoqXG4gKi9cbmltcG9ydCAqIGFzIHJpcHBsZUtleXBhaXJzIGZyb20gJ3JpcHBsZS1rZXlwYWlycyc7XG5pbXBvcnQgKiBhcyB4cnBsIGZyb20gJ3hycGwnO1xuaW1wb3J0IHsgRUNQYWlyIH0gZnJvbSAnQGJpdGdvL3NlY3AyNTZrMSc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbmltcG9ydCAqIGFzIGJpbmFyeSBmcm9tICdyaXBwbGUtYmluYXJ5LWNvZGVjJztcblxuLyoqXG4gKiBDb252ZXJ0IGFuIFhSUCBhZGRyZXNzIHRvIGEgQmlnTnVtYmVyIGZvciBudW1lcmljIGNvbXBhcmlzb24uXG4gKiBUaGlzIGlzIG5lZWRlZCBmb3IgcHJvcGVyIHNvcnRpbmcgb2Ygc2lnbmVycyBhcyByZXF1aXJlZCBieSB0aGUgWFJQIHByb3RvY29sLlxuICpcbiAqIEBwYXJhbSBhZGRyZXNzIC0gVGhlIFhSUCBhZGRyZXNzIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIEJpZ051bWJlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWRkcmVzc1xuICovXG5mdW5jdGlvbiBhZGRyZXNzVG9CaWdOdW1iZXIoYWRkcmVzczogc3RyaW5nKTogQmlnTnVtYmVyIHtcbiAgY29uc3QgaGV4ID0gQnVmZmVyLmZyb20oeHJwbC5kZWNvZGVBY2NvdW50SUQoYWRkcmVzcykpLnRvU3RyaW5nKCdoZXgnKTtcbiAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoaGV4LCAxNik7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTaWduYXR1cmUodHgsIHByaXZhdGVLZXksIHNpZ25Bcykge1xuICBjb25zdCBzaWduaW5nRGF0YSA9IHNpZ25BcyA/IGJpbmFyeS5lbmNvZGVGb3JNdWx0aXNpZ25pbmcodHgsIHNpZ25BcykgOiBiaW5hcnkuZW5jb2RlRm9yU2lnbmluZyh0eCk7XG4gIHJldHVybiByaXBwbGVLZXlwYWlycy5zaWduKHNpZ25pbmdEYXRhLCBwcml2YXRlS2V5KTtcbn1cblxuLyoqXG4gKiBTaWduIFJpcHBsZSB0cmFuc2FjdGlvbiB3aXRoIGEgc2VjcDI1NmsxIHByaXZhdGUga2V5XG4gKiBAcGFyYW0gdHhIZXhcbiAqIEBwYXJhbSBwcml2YXRlS2V5XG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMge3tzaWduZWRUcmFuc2FjdGlvbjogKiwgaWR9fVxuICovXG5jb25zdCBzaWduV2l0aFByaXZhdGVLZXkgPSBmdW5jdGlvbiAodHhIZXgsIHByaXZhdGVLZXksIG9wdGlvbnMpIHtcbiAgbGV0IHByaXZhdGVLZXlCdWZmZXIgPSBCdWZmZXIuZnJvbShwcml2YXRlS2V5LCAnaGV4Jyk7XG4gIGlmIChwcml2YXRlS2V5QnVmZmVyLmxlbmd0aCA9PT0gMzMgJiYgcHJpdmF0ZUtleUJ1ZmZlclswXSA9PT0gMCkge1xuICAgIHByaXZhdGVLZXlCdWZmZXIgPSBwcml2YXRlS2V5QnVmZmVyLnNsaWNlKDEsIDMzKTtcbiAgfVxuICBjb25zdCBwdWJsaWNLZXkgPSBFQ1BhaXIuZnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleUJ1ZmZlcikucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKS50b1VwcGVyQ2FzZSgpO1xuXG4gIGxldCB0eDtcbiAgdHJ5IHtcbiAgICB0eCA9IGJpbmFyeS5kZWNvZGUodHhIZXgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHR4ID0gSlNPTi5wYXJzZSh0eEhleCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eEhleCBuZWVkcyB0byBiZSBlaXRoZXIgaGV4IG9yIEpTT04gc3RyaW5nIGZvciBYUlAnKTtcbiAgICB9XG4gIH1cblxuICB0eC5TaWduaW5nUHViS2V5ID0gb3B0aW9ucyAmJiBvcHRpb25zLnNpZ25BcyA/ICcnIDogcHVibGljS2V5O1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2lnbkFzKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRTaWduZXIgPSByaXBwbGVLZXlwYWlycy5kZXJpdmVBZGRyZXNzKHB1YmxpY0tleSk7XG4gICAgaWYgKG9wdGlvbnMuc2lnbkFzICE9PSBleHBlY3RlZFNpZ25lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduQXMgZG9lcyBub3QgbWF0Y2ggcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmVyID0ge1xuICAgICAgQWNjb3VudDogb3B0aW9ucy5zaWduQXMsXG4gICAgICBTaWduaW5nUHViS2V5OiBwdWJsaWNLZXksXG4gICAgICBUeG5TaWduYXR1cmU6IGNvbXB1dGVTaWduYXR1cmUodHgsIHByaXZhdGVLZXksIG9wdGlvbnMuc2lnbkFzKSxcbiAgICB9O1xuICAgIC8vIE9yZGVyaW5nIG9mIHByaXZhdGUga2V5IHNpZ25pbmcgbWF0dGVycywgb3IgdGhlIFJpcHBsZSBmdWxsbm9kZSB3aWxsIHRocm93IGFuICdVbnNvcnRlZCBTaWduZXJzIGFycmF5JyBlcnJvci5cbiAgICAvLyBYUlAgcmVxdWlyZXMgU2lnbmVycyBhcnJheSB0byBiZSBzb3J0ZWQgYmFzZWQgb24gbnVtZXJpYyB2YWx1ZSBvZiBzaWduZXIgYWRkcmVzc2VzIChsb3dlc3QgZmlyc3QpXG4gICAgaWYgKHR4LlNpZ25lcnMpIHtcbiAgICAgIC8vIEFkZCB0aGUgY3VycmVudCBzaWduZXJcbiAgICAgIHR4LlNpZ25lcnMucHVzaCh7IFNpZ25lcjogc2lnbmVyIH0pO1xuXG4gICAgICAvLyBTb3J0IHRoZSBTaWduZXJzIGFycmF5IGJ5IG51bWVyaWMgdmFsdWUgb2YgQWNjb3VudCAoYWRkcmVzcykgdG8gZW5zdXJlIHByb3BlciBvcmRlcmluZ1xuICAgICAgdHguU2lnbmVycy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NCTjEgPSBhZGRyZXNzVG9CaWdOdW1iZXIoYS5TaWduZXIuQWNjb3VudCk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NCTjIgPSBhZGRyZXNzVG9CaWdOdW1iZXIoYi5TaWduZXIuQWNjb3VudCk7XG4gICAgICAgIHJldHVybiBhZGRyZXNzQk4xLmNvbXBhcmVkVG8oYWRkcmVzc0JOMik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHguU2lnbmVycyA9IFt7IFNpZ25lcjogc2lnbmVyIH1dO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0eC5UeG5TaWduYXR1cmUgPSBjb21wdXRlU2lnbmF0dXJlKHR4LCBwcml2YXRlS2V5LCB1bmRlZmluZWQpO1xuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IGJpbmFyeS5lbmNvZGUodHgpO1xuICByZXR1cm4ge1xuICAgIHNpZ25lZFRyYW5zYWN0aW9uOiBzZXJpYWxpemVkLFxuICAgIGlkOiB4cnBsLmhhc2hlcy5oYXNoU2lnbmVkVHgoc2VyaWFsaXplZCksXG4gIH07XG59O1xuXG5leHBvcnQgPSB7IC4uLnhycGwsIHNpZ25XaXRoUHJpdmF0ZUtleSB9O1xuIl19Выполнить команду
Для локальной разработки. Не используйте в интернете!