# Получение цен с 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)