PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/micro-eth-signer/lib/api

Просмотр файла: uniswap-common.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UniswapAbstract = exports.validateAddr = exports.sortTokens = exports.wrapContract = exports.WETH = exports.COMMON_BASES = exports.awaitDeep = exports.isPromise = exports.addPercent = exports.DEFAULT_SWAP_OPT = void 0;
const abi = require("../web3.js");
const abiDefault = require("../contracts/index.js");
const base_1 = require("@scure/base");
const P = require("micro-packed");
exports.DEFAULT_SWAP_OPT = { slippagePercent: 0.5, ttl: 30 * 60 };
function addPercent(n, _perc) {
    const perc = BigInt((_perc * 10000) | 0);
    const p100 = 100n * 10000n;
    return ((p100 + perc) * n) / p100;
}
exports.addPercent = addPercent;
function isPromise(o) {
    if (!o || !['object', 'function'].includes(typeof o))
        return false;
    return typeof o.then === 'function';
}
exports.isPromise = isPromise;
async function awaitDeep(o, ignore_errors) {
    let promises = [];
    const traverse = (o) => {
        if (o instanceof Array)
            return o.map((i) => traverse(i));
        if (o instanceof Uint8Array)
            return o;
        if (isPromise(o))
            return { awaitDeep: promises.push(o) };
        if (typeof o === 'object') {
            let ret = {};
            for (let k in o)
                ret[k] = traverse(o[k]);
            return ret;
        }
        return o;
    };
    let out = traverse(o);
    let values;
    if (!ignore_errors)
        values = await Promise.all(promises);
    else {
        values = (await Promise.allSettled(promises)).map((i) => i.status == 'fulfilled' ? i.value : undefined);
    }
    const trBack = (o) => {
        if (o instanceof Array)
            return o.map((i) => trBack(i));
        if (o instanceof Uint8Array)
            return o;
        if (typeof o === 'object') {
            if (typeof o === 'object' && o.awaitDeep)
                return values[o.awaitDeep - 1];
            let ret = {};
            for (let k in o)
                ret[k] = trBack(o[k]);
            return ret;
        }
        return o;
    };
    return trBack(out);
}
exports.awaitDeep = awaitDeep;
exports.COMMON_BASES = ['WETH', 'DAI', 'USDC', 'USDT', 'COMP', 'MKR', 'WBTC', 'AMPL']
    .map((i) => abiDefault.tokenFromSymbol(i))
    .filter((i) => !!i);
exports.WETH = abiDefault.tokenFromSymbol('WETH').contract;
if (!exports.WETH)
    throw new Error('WETH is undefined!');
function wrapContract(contract) {
    contract = contract.toLowerCase();
    return contract === 'eth' ? exports.WETH : contract;
}
exports.wrapContract = wrapContract;
function sortTokens(a, b) {
    a = wrapContract(a);
    b = wrapContract(b);
    if (a === b)
        throw new Error('uniswap.sortTokens: same token!');
    return a < b ? [a, b] : [b, a];
}
exports.sortTokens = sortTokens;
function validateAddr(addr) {
    if (addr === 'eth')
        return true;
    return /^0x[0-9a-f]+$/i.test(addr);
}
exports.validateAddr = validateAddr;
function getToken(token) {
    if (typeof token === 'string' && token.toLowerCase() === 'eth')
        return { symbol: 'ETH', decimals: 18, contract: 'eth' };
    return token;
}
class UniswapAbstract {
    constructor(net) {
        this.net = net;
    }
    // private async coinInfo(netName: string) {
    //   if (!validateAddr(netName)) return;
    //   if (netName === 'eth') return { symbol: 'ETH', decimals: 18 };
    //   //return await this.mgr.tokenInfo('eth', netName);
    // }
    async swap(fromCoin, toCoin, amount, opt = exports.DEFAULT_SWAP_OPT) {
        const fromInfo = getToken(fromCoin);
        const toInfo = getToken(toCoin);
        if (!fromInfo || !toInfo)
            return;
        const fromContract = fromInfo.contract.toLowerCase();
        const toContract = toInfo.contract.toLowerCase();
        if (!fromContract || !toContract)
            return;
        const fromDecimal = P.coders.decimal(fromInfo.decimals);
        const toDecimal = P.coders.decimal(toInfo.decimals);
        const inputAmount = fromDecimal.decode(amount);
        try {
            const path = await this.bestPath(fromContract, toContract, inputAmount);
            const expectedAmount = toDecimal.encode(path.amountOut);
            return {
                name: this.name,
                expectedAmount,
                tx: async (_fromAddress, toAddress) => {
                    const txUni = this.txData(toAddress, fromContract, toContract, path, inputAmount, undefined, opt);
                    return {
                        amount: abi.Decimal.encode(txUni.value),
                        address: txUni.to,
                        expectedAmount,
                        data: abi.add0x(base_1.hex.encode(txUni.data)),
                        allowance: txUni.allowance && {
                            token: txUni.allowance.token,
                            contract: this.contract,
                            amount: fromDecimal.encode(txUni.allowance.amount),
                        },
                    };
                },
            };
        }
        catch (e) {
            // @ts-ignore
            console.log('E', e);
            return;
        }
    }
}
exports.UniswapAbstract = UniswapAbstract;

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


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