PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo/sdk-coin-near/dist/src/lib

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

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Utils = void 0;
const bs58_1 = __importDefault(require("bs58"));
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const sdk_core_1 = require("@bitgo/sdk-core");
const statics_1 = require("@bitgo/statics");
const keyPair_1 = require("./keyPair");
class Utils {
    /** @inheritdoc */
    isValidAddress(address) {
        return this.isValidAccountId(address);
    }
    /** @inheritdoc */
    isValidBlockId(hash) {
        return (0, sdk_core_1.isBase58)(hash, 32);
    }
    /** @inheritdoc */
    isValidPrivateKey(key) {
        return this.isValidKey(key);
    }
    /** @inheritdoc */
    isValidPublicKey(pubKey) {
        return this.isValidAccountId(pubKey);
    }
    /**
     * Check if the key have the correct format
     *
     * @param {string} key - string to be checked
     * @return {boolean} true if the string have the correct format otherwise return false
     */
    isValidKey(key) {
        try {
            new keyPair_1.KeyPair({ prv: key });
            return true;
        }
        catch {
            return false;
        }
    }
    /**
     * Check if the account have the correct format
     *
     * @param {string} accountId - string to be checked
     * @return {boolean} if the string can have the correct format and match the expected length
     * or can create a new keyPair
     */
    isValidAccountId(accountId) {
        if (!accountId) {
            return false;
        }
        return ((/^(([a-z\d]+[\-_])*[a-z\d]+\.)*([a-z\d]+[\-_])*[a-z\d]+$/.test(accountId) &&
            accountId.length >= 2 &&
            accountId.length <= 64) ||
            (0, sdk_core_1.isBase58)(accountId, 32));
    }
    /** @inheritdoc */
    isValidSignature(signature) {
        return (0, sdk_core_1.isBase58)(signature, 64);
    }
    /** @inheritdoc */
    isValidTransactionId(txId) {
        return (0, sdk_core_1.isBase58)(txId, 32);
    }
    base58Encode(value) {
        return bs58_1.default.encode(value);
    }
    /**
     * Check if base58 decoded string is equal to length
     *
     * @param {string} value - string to be checked
     * @param {number} length - expected decoded length
     * @return {boolean} if the string can be decoded as base58 and match the expected length
     */
    isBase58(value, length) {
        try {
            return !!value && bs58_1.default.decode(value).length === length;
        }
        catch (e) {
            return false;
        }
    }
    /**
     * Find the bitgo token name using contract address
     *
     * @param {String} contractAddress the token contract address
     * @returns {String} token name
     */
    findTokenNameFromContractAddress(contractAddress) {
        const token = statics_1.coins
            .filter((coin) => coin instanceof statics_1.Nep141Token && coin.contractAddress === contractAddress)
            .map((coin) => coin);
        return token ? token[0].name : undefined;
    }
    /**
     * Find the token instance using the bitgo token name
     *
     * @param {String} tokenName the bitgo name of the token
     * @returns {Nep141Token|undefined} token instance if found
     */
    getTokenInstanceFromTokenName(tokenName) {
        const token = statics_1.coins
            .filter((coin) => coin instanceof statics_1.Nep141Token && coin.name === tokenName)
            .map((coin) => coin);
        return token ? token[0] : undefined;
    }
    /**
     * Convert from raw gas units to yocto Near value
     *
     * @param {String} gasUnits - raw gas units (e.g. "30000000000000" = 30TGas)
     * @returns {String} value in yoctoNear as a string
     */
    convertGasUnitsToYoctoNear(gasUnits) {
        const YOCTO_PER_NEAR = new bignumber_js_1.default('1e24');
        const NEAR_PER_TGAS = new bignumber_js_1.default('0.0001'); // 1 TGas = 0.0001 Near
        const GAS_UNITS_PER_TGAS = new bignumber_js_1.default('1e12'); // 1 TGas = 1e12 gas units
        const gas = new bignumber_js_1.default(gasUnits);
        const tgas = gas.dividedBy(GAS_UNITS_PER_TGAS);
        const nearCost = tgas.multipliedBy(NEAR_PER_TGAS);
        const yoctoCost = nearCost.multipliedBy(YOCTO_PER_NEAR);
        return yoctoCost.integerValue(bignumber_js_1.default.ROUND_FLOOR).toString();
    }
    /**
     * Convert the given record into base64 string
     *
     * @param {Record<String, String>} data the input in the form of a map
     * @returns {String} base64 encoded string
     */
    convertToBase64(data) {
        return Buffer.from(JSON.stringify(data)).toString('base64');
    }
}
exports.Utils = Utils;
const utils = new Utils();
exports.default = utils;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUF3QjtBQUN4QixnRUFBcUM7QUFFckMsOENBQXNEO0FBQ3RELDRDQUFvRDtBQUVwRCx1Q0FBb0M7QUFFcEMsTUFBYSxLQUFLO0lBQ2hCLGtCQUFrQjtJQUNsQixjQUFjLENBQUMsT0FBZTtRQUM1QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sSUFBQSxtQkFBUSxFQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQixDQUFDLEdBQVc7UUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZ0JBQWdCLENBQUMsTUFBYztRQUM3QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsR0FBVztRQUNwQixJQUFJLENBQUM7WUFDSCxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxDQUNMLENBQUMseURBQXlELENBQUMsSUFBSSxD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QyxJQUE0QjtRQUMxQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBQ0Y7QUExSUQsc0JBMElDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUUxQixrQkFBZSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcblxuaW1wb3J0IHsgQmFzZVV0aWxzLCBpc0Jhc2U1OCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucywgTmVwMTQxVG9rZW4gfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5cbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZEFjY291bnRJZChhZGRyZXNzKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNCYXNlNTgoaGFzaCwgMzIpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRQcml2YXRlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZEtleShrZXkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRQdWJsaWNLZXkocHViS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkQWNjb3VudElkKHB1YktleSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGtleSBoYXZlIHRoZSBjb3JyZWN0IGZvcm1hdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gc3RyaW5nIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgc3RyaW5nIGhhdmUgdGhlIGNvcnJlY3QgZm9ybWF0IG90aGVyd2lzZSByZXR1cm4gZmFsc2VcbiAgICovXG4gIGlzVmFsaWRLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgYWNjb3VudCBoYXZlIHRoZSBjb3JyZWN0IGZvcm1hdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWNjb3VudElkIC0gc3RyaW5nIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gaWYgdGhlIHN0cmluZyBjYW4gaGF2ZSB0aGUgY29ycmVjdCBmb3JtYXQgYW5kIG1hdGNoIHRoZSBleHBlY3RlZCBsZW5ndGhcbiAgICogb3IgY2FuIGNyZWF0ZSBhIG5ldyBrZXlQYWlyXG4gICAqL1xuICBpc1ZhbGlkQWNjb3VudElkKGFjY291bnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFhY2NvdW50SWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICgvXigoW2EtelxcZF0rW1xcLV9dKSpbYS16XFxkXStcXC4pKihbYS16XFxkXStbXFwtX10pKlthLXpcXGRdKyQvLnRlc3QoYWNjb3VudElkKSAmJlxuICAgICAgICBhY2NvdW50SWQubGVuZ3RoID49IDIgJiZcbiAgICAgICAgYWNjb3VudElkLmxlbmd0aCA8PSA2NCkgfHxcbiAgICAgIGlzQmFzZTU4KGFjY291bnRJZCwgMzIpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQmFzZTU4KHNpZ25hdHVyZSwgNjQpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0Jhc2U1OCh0eElkLCAzMik7XG4gIH1cblxuICBiYXNlNThFbmNvZGUodmFsdWU6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICAgIHJldHVybiBiczU4LmVuY29kZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYmFzZTU4IGRlY29kZWQgc3RyaW5nIGlzIGVxdWFsIHRvIGxlbmd0aFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBzdHJpbmcgdG8gYmUgY2hlY2tlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIC0gZXhwZWN0ZWQgZGVjb2RlZCBsZW5ndGhcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gaWYgdGhlIHN0cmluZyBjYW4gYmUgZGVjb2RlZCBhcyBiYXNlNTggYW5kIG1hdGNoIHRoZSBleHBlY3RlZCBsZW5ndGhcbiAgICovXG4gIGlzQmFzZTU4KHZhbHVlOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAhIXZhbHVlICYmIGJzNTguZGVjb2RlKHZhbHVlKS5sZW5ndGggPT09IGxlbmd0aDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGJpdGdvIHRva2VuIG5hbWUgdXNpbmcgY29udHJhY3QgYWRkcmVzc1xuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY29udHJhY3RBZGRyZXNzIHRoZSB0b2tlbiBjb250cmFjdCBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHRva2VuIG5hbWVcbiAgICovXG4gIGZpbmRUb2tlbk5hbWVGcm9tQ29udHJhY3RBZGRyZXNzKGNvbnRyYWN0QWRkcmVzczogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0b2tlbiA9IGNvaW5zXG4gICAgICAuZmlsdGVyKChjb2luKSA9PiBjb2luIGluc3RhbmNlb2YgTmVwMTQxVG9rZW4gJiYgY29pbi5jb250cmFjdEFkZHJlc3MgPT09IGNvbnRyYWN0QWRkcmVzcylcbiAgICAgIC5tYXAoKGNvaW4pID0+IGNvaW4gYXMgTmVwMTQxVG9rZW4pO1xuICAgIHJldHVybiB0b2tlbiA/IHRva2VuWzBdLm5hbWUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgdG9rZW4gaW5zdGFuY2UgdXNpbmcgdGhlIGJpdGdvIHRva2VuIG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHRva2VuTmFtZSB0aGUgYml0Z28gbmFtZSBvZiB0aGUgdG9rZW5cbiAgICogQHJldHVybnMge05lcDE0MVRva2VufHVuZGVmaW5lZH0gdG9rZW4gaW5zdGFuY2UgaWYgZm91bmRcbiAgICovXG4gIGdldFRva2VuSW5zdGFuY2VGcm9tVG9rZW5OYW1lKHRva2VuTmFtZTogc3RyaW5nKTogTmVwMTQxVG9rZW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHRva2VuID0gY29pbnNcbiAgICAgIC5maWx0ZXIoKGNvaW4pID0+IGNvaW4gaW5zdGFuY2VvZiBOZXAxNDFUb2tlbiAmJiBjb2luLm5hbWUgPT09IHRva2VuTmFtZSlcbiAgICAgIC5tYXAoKGNvaW4pID0+IGNvaW4gYXMgTmVwMTQxVG9rZW4pO1xuICAgIHJldHVybiB0b2tlbiA/IHRva2VuWzBdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgZnJvbSByYXcgZ2FzIHVuaXRzIHRvIHlvY3RvIE5lYXIgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGdhc1VuaXRzIC0gcmF3IGdhcyB1bml0cyAoZS5nLiBcIjMwMDAwMDAwMDAwMDAwXCIgPSAzMFRHYXMpXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHZhbHVlIGluIHlvY3RvTmVhciBhcyBhIHN0cmluZ1xuICAgKi9cbiAgY29udmVydEdhc1VuaXRzVG9Zb2N0b05lYXIoZ2FzVW5pdHM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgWU9DVE9fUEVSX05FQVIgPSBuZXcgQmlnTnVtYmVyKCcxZTI0Jyk7XG4gICAgY29uc3QgTkVBUl9QRVJfVEdBUyA9IG5ldyBCaWdOdW1iZXIoJzAuMDAwMScpOyAvLyAxIFRHYXMgPSAwLjAwMDEgTmVhclxuICAgIGNvbnN0IEdBU19VTklUU19QRVJfVEdBUyA9IG5ldyBCaWdOdW1iZXIoJzFlMTInKTsgLy8gMSBUR2FzID0gMWUxMiBnYXMgdW5pdHNcblxuICAgIGNvbnN0IGdhcyA9IG5ldyBCaWdOdW1iZXIoZ2FzVW5pdHMpO1xuICAgIGNvbnN0IHRnYXMgPSBnYXMuZGl2aWRlZEJ5KEdBU19VTklUU19QRVJfVEdBUyk7XG4gICAgY29uc3QgbmVhckNvc3QgPSB0Z2FzLm11bHRpcGxpZWRCeShORUFSX1BFUl9UR0FTKTtcbiAgICBjb25zdCB5b2N0b0Nvc3QgPSBuZWFyQ29zdC5tdWx0aXBsaWVkQnkoWU9DVE9fUEVSX05FQVIpO1xuXG4gICAgcmV0dXJuIHlvY3RvQ29zdC5pbnRlZ2VyVmFsdWUoQmlnTnVtYmVyLlJPVU5EX0ZMT09SKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGdpdmVuIHJlY29yZCBpbnRvIGJhc2U2NCBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHtSZWNvcmQ8U3RyaW5nLCBTdHJpbmc+fSBkYXRhIHRoZSBpbnB1dCBpbiB0aGUgZm9ybSBvZiBhIG1hcFxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBiYXNlNjQgZW5jb2RlZCBzdHJpbmdcbiAgICovXG4gIGNvbnZlcnRUb0Jhc2U2NChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoZGF0YSkpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==

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


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