PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-ton/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;
exports.getFeeEstimate = getFeeEstimate;
const sdk_core_1 = require("@bitgo/sdk-core");
const tonweb_1 = __importDefault(require("tonweb"));
class Utils {
    /** @inheritdoc */
    isValidAddress(address) {
        try {
            if (address.length != 48) {
                return false;
            }
            Buffer.from(address, 'base64');
            return true;
        }
        catch (e) {
            return false;
        }
    }
    /** @inheritdoc */
    isValidBlockId(hash) {
        try {
            return Buffer.from(hash, 'base64').length === 32;
        }
        catch (e) {
            return false;
        }
    }
    /** @inheritdoc */
    isValidPrivateKey(key) {
        throw new Error('Method not implemented.');
    }
    /** @inheritdoc */
    isValidPublicKey(key) {
        return (0, sdk_core_1.isValidEd25519PublicKey)(key);
    }
    /** @inheritdoc */
    isValidSignature(signature) {
        throw new Error('Method not implemented.');
    }
    /** @inheritdoc */
    isValidTransactionId(txId) {
        try {
            return Buffer.from(txId, 'base64').length === 32;
        }
        catch (e) {
            return false;
        }
    }
    async getAddressFromPublicKey(publicKey, bounceable = true, isUserFriendly = true) {
        const tonweb = new tonweb_1.default(new tonweb_1.default.HttpProvider(''));
        const WalletClass = tonweb.wallet.all['v4R2'];
        const wallet = new WalletClass(tonweb.provider, {
            publicKey: tonweb_1.default.utils.hexToBytes(publicKey),
            wc: 0,
        });
        const address = await wallet.getAddress();
        return address.toString(isUserFriendly, true, bounceable);
    }
    getAddress(address, bounceable = true) {
        if (bounceable) {
            return new tonweb_1.default.Address(address).isBounceable
                ? address
                : new tonweb_1.default.Address(address).toString(true, true, bounceable);
        }
        else {
            return new tonweb_1.default.Address(address).isBounceable
                ? new tonweb_1.default.Address(address).toString(true, true, bounceable)
                : address;
        }
    }
    async getMessageHashFromData(data) {
        const cell = tonweb_1.default.boc.Cell.oneFromBoc(tonweb_1.default.utils.base64ToBytes(data));
        // this is need to be confirmed by ton team
        const message = cell.refs[0].refs[0];
        const hash = tonweb_1.default.utils.bytesToBase64(await message.hash());
        return hash.toString();
    }
    getRawWalletAddressFromCell(data) {
        const cell = tonweb_1.default.boc.Cell.oneFromBoc(tonweb_1.default.utils.base64ToBytes(data));
        const slice = cell.beginParse();
        const address = slice.loadAddress();
        return address.toString();
    }
}
exports.Utils = Utils;
const DUMMY_PRIVATE_KEY = '43e8594854cb53947c4a1a2fab926af11e123f6251dcd5bd0dfb100604186430'; // This dummy private key is used only for fee estimation
/**
 * Function to estimate the fee for a transaction.
 * This function uses the dummy private key exclusively for fee estimation.
 * @param wallet - The wallet instance.
 * @param toAddress - The destination address.
 * @param amount - The amount to transfer.
 * @param seqno - The sequence number for the transaction.
 * @returns The estimated fee for the transaction.
 */
async function getFeeEstimate(wallet, toAddress, amount, seqno) {
    try {
        const secretKey = tonweb_1.default.utils.stringToBytes(DUMMY_PRIVATE_KEY);
        const feeEstimate = await wallet.methods
            .transfer({
            secretKey,
            toAddress,
            amount,
            seqno,
            sendMode: 1,
        })
            .estimateFee();
        return feeEstimate;
    }
    catch (error) {
        throw new Error(`Failed to estimate fee: ${error.message}`);
    }
}
const utils = new Utils();
exports.default = utils;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQXFHQSx3Q0FnQkM7QUFySEQsOENBQXFFO0FBQ3JFLG9EQUE0QjtBQUU1QixNQUFhLEtBQUs7SUFDaEIsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLElBQUksQ0FBQztZQUNILElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsY0FBYyxDQUFDLElBQVk7UUFDekIsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO1FBQ25ELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUIsQ0FBQyxHQUFXO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGdCQUFnQixDQUFDLEdBQVc7UUFDMUIsT0FBTyxJQUFBLGtDQUF1QixFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFD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LFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7Q0FDRjtBQXBGRCxzQkFvRkM7QUFFRCxNQUFNLGlCQUFpQixHQUFHLGtFQUFrRSxDQUFDLENBQUMseURBQXlEO0FBRXZKOzs7Ozs7OztHQVFHO0FBRUksS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUFXLEVBQUUsU0FBaUIsRUFBRSxNQUFjLEVBQUUsS0FBYTtJQUNoRyxJQUFJLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FBRyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRSxNQUFNLFdBQVcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPO2FBQ3JDLFFBQVEsQ0FBQztZQUNSLFNBQVM7WUFDVCxTQUFTO1lBQ1QsTUFBTTtZQUNOLEtBQUs7WUFDTCxRQUFRLEVBQUUsQ0FBQztTQUNaLENBQUM7YUFDRCxXQUFXLEVBQUUsQ0FBQztRQUNqQixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUUxQixrQkFBZSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVXRpbHMsIGlzVmFsaWRFZDI1NTE5UHVibGljS2V5IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCBUb25XZWIgZnJvbSAndG9ud2ViJztcblxuZXhwb3J0IGNsYXNzIFV0aWxzIGltcGxlbWVudHMgQmFzZVV0aWxzIHtcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAoYWRkcmVzcy5sZW5ndGggIT0gNDgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgQnVmZmVyLmZyb20oYWRkcmVzcywgJ2Jhc2U2NCcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhhc2gsICdiYXNlNjQnKS5sZW5ndGggPT09IDMyO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFByaXZhdGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFB1YmxpY0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1ZhbGlkRWQyNTUxOVB1YmxpY0tleShrZXkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh0eElkLCAnYmFzZTY0JykubGVuZ3RoID09PSAzMjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcsIGJvdW5jZWFibGUgPSB0cnVlLCBpc1VzZXJGcmllbmRseSA9IHRydWUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHRvbndlYiA9IG5ldyBUb25XZWIobmV3IFRvbldlYi5IdHRwUHJvdmlkZXIoJycpKTtcbiAgICBjb25zdCBXYWxsZXRDbGFzcyA9IHRvbndlYi53YWxsZXQuYWxsWyd2NFIyJ107XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldENsYXNzKHRvbndlYi5wcm92aWRlciwge1xuICAgICAgcHVibGljS2V5OiBUb25XZWIudXRpbHMuaGV4VG9CeXRlcyhwdWJsaWNLZXkpLFxuICAgICAgd2M6IDAsXG4gICAgfSk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGF3YWl0IHdhbGxldC5nZXRBZGRyZXNzKCk7XG4gICAgcmV0dXJuIGFkZHJlc3MudG9TdHJpbmcoaXNVc2VyRnJpZW5kbHksIHRydWUsIGJvdW5jZWFibGUpO1xuICB9XG5cbiAgZ2V0QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIGJvdW5jZWFibGUgPSB0cnVlKTogc3RyaW5nIHtcbiAgICBpZiAoYm91bmNlYWJsZSkge1xuICAgICAgcmV0dXJuIG5ldyBUb25XZWIuQWRkcmVzcyhhZGRyZXNzKS5pc0JvdW5jZWFibGVcbiAgICAgICAgPyBhZGRyZXNzXG4gICAgICAgIDogbmV3IFRvbldlYi5BZGRyZXNzKGFkZHJlc3MpLnRvU3RyaW5nKHRydWUsIHRydWUsIGJvdW5jZWFibGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFRvbldlYi5BZGRyZXNzKGFkZHJlc3MpLmlzQm91bmNlYWJsZVxuICAgICAgICA/IG5ldyBUb25XZWIuQWRkcmVzcyhhZGRyZXNzKS50b1N0cmluZyh0cnVlLCB0cnVlLCBib3VuY2VhYmxlKVxuICAgICAgICA6IGFkZHJlc3M7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0TWVzc2FnZUhhc2hGcm9tRGF0YShkYXRhOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNlbGwgPSBUb25XZWIuYm9jLkNlbGwub25lRnJvbUJvYyhUb25XZWIudXRpbHMuYmFzZTY0VG9CeXRlcyhkYXRhKSk7XG4gICAgLy8gdGhpcyBpcyBuZWVkIHRvIGJlIGNvbmZpcm1lZCBieSB0b24gdGVhbVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjZWxsLnJlZnNbMF0ucmVmc1swXTtcbiAgICBjb25zdCBoYXNoID0gVG9uV2ViLnV0aWxzLmJ5dGVzVG9CYXNlNjQoYXdhaXQgbWVzc2FnZS5oYXNoKCkpO1xuICAgIHJldHVybiBoYXNoLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXRSYXdXYWxsZXRBZGRyZXNzRnJvbUNlbGwoZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjZWxsID0gVG9uV2ViLmJvYy5DZWxsLm9uZUZyb21Cb2MoVG9uV2ViLnV0aWxzLmJhc2U2NFRvQnl0ZXMoZGF0YSkpO1xuICAgIGNvbnN0IHNsaWNlID0gKGNlbGwgYXMgYW55KS5iZWdpblBhcnNlKCk7XG4gICAgY29uc3QgYWRkcmVzcyA9IHNsaWNlLmxvYWRBZGRyZXNzKCk7XG4gICAgcmV0dXJuIGFkZHJlc3MudG9TdHJpbmcoKTtcbiAgfVxufVxuXG5jb25zdCBEVU1NWV9QUklWQVRFX0tFWSA9ICc0M2U4NTk0ODU0Y2I1Mzk0N2M0YTFhMmZhYjkyNmFmMTFlMTIzZjYyNTFkY2Q1YmQwZGZiMTAwNjA0MTg2NDMwJzsgLy8gVGhpcyBkdW1teSBwcml2YXRlIGtleSBpcyB1c2VkIG9ubHkgZm9yIGZlZSBlc3RpbWF0aW9uXG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZXN0aW1hdGUgdGhlIGZlZSBmb3IgYSB0cmFuc2FjdGlvbi5cbiAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZHVtbXkgcHJpdmF0ZSBrZXkgZXhjbHVzaXZlbHkgZm9yIGZlZSBlc3RpbWF0aW9uLlxuICogQHBhcmFtIHdhbGxldCAtIFRoZSB3YWxsZXQgaW5zdGFuY2UuXG4gKiBAcGFyYW0gdG9BZGRyZXNzIC0gVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MuXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCB0byB0cmFuc2Zlci5cbiAqIEBwYXJhbSBzZXFubyAtIFRoZSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoZSB0cmFuc2FjdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBlc3RpbWF0ZWQgZmVlIGZvciB0aGUgdHJhbnNhY3Rpb24uXG4gKi9cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEZlZUVzdGltYXRlKHdhbGxldDogYW55LCB0b0FkZHJlc3M6IHN0cmluZywgYW1vdW50OiBzdHJpbmcsIHNlcW5vOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHNlY3JldEtleSA9IFRvbldlYi51dGlscy5zdHJpbmdUb0J5dGVzKERVTU1ZX1BSSVZBVEVfS0VZKTtcbiAgICBjb25zdCBmZWVFc3RpbWF0ZSA9IGF3YWl0IHdhbGxldC5tZXRob2RzXG4gICAgICAudHJhbnNmZXIoe1xuICAgICAgICBzZWNyZXRLZXksXG4gICAgICAgIHRvQWRkcmVzcyxcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBzZXFubyxcbiAgICAgICAgc2VuZE1vZGU6IDEsXG4gICAgICB9KVxuICAgICAgLmVzdGltYXRlRmVlKCk7XG4gICAgcmV0dXJuIGZlZUVzdGltYXRlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGVzdGltYXRlIGZlZTogJHtlcnJvci5tZXNzYWdlfWApO1xuICB9XG59XG5cbmNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19

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


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