Выберите поддерживаемый токен с максимальным балансом в обычных единицах, затем разрешённый токен назначения. Для USDC допустимы два направления, поэтому нужен явный выбор или правило приоритета.
Определение оптимальной пары токенов для обмена в криптокошельке
Выберите поддерживаемый токен с максимальным балансом в обычных единицах, затем разрешённый токен назначения. Для USDC допустимы два направления, поэтому нужен явный выбор или правило приоритета.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать функцию, которая выбирает подходящую пару токенов для свопа в пользовательском кошельке.
- Функция принимает один параметр – адрес кошелька (например,
walletAddress). - На выходе функция возвращает два символа токенов: из какого токена будет происходить обмен и в какой токен он будет направлен.
- Токен, из которого совершается своп, выбирается как тот, у которого на балансе самое большое количество единиц.
- Поддерживаемые пары для обмена:
ETH ↔ USDCиUSDT ↔ USDC. - Курс обмена считается фиксированным: 1 ETH = 2000 USDC (или USDT).
Ответ
Выберите поддерживаемый токен с максимальным балансом в обычных единицах, затем разрешённый токен назначения. Для USDC допустимы два направления, поэтому нужен явный выбор или правило приоритета.
По условию сравнивается количество, не стоимость: курс ETH здесь не нужен. Пример с соглашениями: при равенстве приоритет ETH, USDT, USDC; из USDC выбираем USDT.
async function choosePair(walletAddress) {
const balances = await getNormalizedBalances(walletAddress);
const tokens = ['ETH', 'USDT', 'USDC'];
let from = null;
for (const token of tokens) {
const value = balances[token] ?? 0;
if (!Number.isFinite(value) || value < 0) throw new Error('Invalid balance');
if (value > 0 && (from === null || value > balances[from])) from = token;
}
if (!from) throw new Error('No supported balance');
return [from, from === 'USDC' ? 'USDT' : 'USDC'];
}
getNormalizedBalances — адаптер API кошелька, возвращающий приведённые к decimals балансы. Для реальных денежных расчётов нужны точные десятичные значения, сеть, адреса токенов и проверка комиссий. Это учебный выбор пары, не отправка транзакции.