---
# System prepended metadata

title: Получение цен с Uniswap бирж

---

# Получение цен с Uniswap бирж

## Через вызов метода смарт-контракта Router v2
1) Идем в гугл и ищем адрес контракта роутера интересующей биржи, например: "traderjoexyz router". Обычно выдача дает ссылку прямо на [эксплорер](https://snowtrace.io/address/0x60ae616a2155ee3d9a68541ba4544862310933d4), но если нет, что ищем найденный адрес в эксплорере
2) Проверяем наличие метода `getAmountsOut`.
3) Вызываем на клиенте метод контракта с аргументами: 
    1) amountIn: `inputAmount * 10 ** tokenIn.decimals`
    5) path: `[tokenIn.address, tokenOut.address]`
6) В ответ получаем массив выходов, нас интересует только последний. Его надо разделить на `10 ** tokenOut.decimals`

## Через callstatic метода обмена смарт-контракта Router v3
1) Так как uniswapV3 существует только в Ethereum Mainnet, то вот его адресс [0xe592427a0aece92de3edee1f18e0157c05861564](https://etherscan.io/address/0xe592427a0aece92de3edee1f18e0157c05861564)
2) Для получение выхода надо вызвать метод `exactInputSingle`, но это не метод на чтение, а внешний метод взаимодействия. Чтобы вызвать его на чтение нужно сделать `staticCall` (должно сработать с `useCall` в `usedapp`)
3) Аргумент вызова кортеж значений:
    1) `tokenIn.address` 
    2) `tokenOut.address`
    3) `3000|500|100` (нужно вызвать три раза для каждого fee)
    4) `recipient` (адрес получателя)
    5) `Uint256Max` (deadline можно указать бесконечный)
    6) `inputAmount * 10 ** tokenIn.decimals`
    7) 0 (минимальное количество получаемых токенов, можно поставить 0, так как транзакцию мы не делаем)
    8) 