Dune
March 21, 2023

Dune. День 1: Как найти все пары для токенов ERC20 в Uniswap v2?

Интро: я не являюсь программистом, и не знаю SQL. Но хорошая новость в том, что SQL сам по себе довольно прост в понимании, поэтому тут все зависит только от практики.

За основу взят бесплатный 12-дневный курс по Dune. Параллельно читаю в интернете про SQL, решаю отдельные задачки на тренажерах и мучаю своими дурацкими вопросами более продвинутых товарищей.

Материал подготовлен каналом @shitcoinresearch

Uniswap v2 Factory - один из основных контрактов протокола Uniswap v2, позволяет пользователям создавать пулы (пары). Пул состоит из двух токенов. Пара, состоящая из двух уникальных токенов может быть создана лишь один раз.

Каково количество созданных пар, содержащих USDC и/или WETH?

1. На Etherscan берем контракты USDC и WETH:

USDC: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

WETH: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

2. В Dune cоздаем следующий SQL-запрос:

select count (pair) as "Pairs with USDC and/or WETH"
from uniswap_v2_ethereum.Factory_evt_PairCreated
-- USDC: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 | WETH: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
where token0 in (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)
or token1 in (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)

Визуализируем результат запроса через "Counter", и получаем ответ - на Uniswap v2 было создано 146 574 пар, содержащих USDC и/или WETH:

3. Теперь проверим, сколько пар содержат и USDC и WETH одновременно. Для этого в запросе выше меняем "or" на "and". Получаем довольно очевидный ответ - Всего одна пара, содержит и USDC и WETH:

4. Усложняем запрос: Необходимо вывести дату создания пары USDC/WETH, адрес пары, контракты и символы токенов, составляющих пару:

select p.evt_block_time as time, 
       p.pair as pair_address,
       p.token0,
       t0.symbol as t0_symbol,
       p.token1,
       t1.symbol as t1_symbol
from uniswap_v2_ethereum.Factory_evt_PairCreated p
left join tokens.erc20 t0
       on t0.contract_address = p.token0
left join tokens.erc20 t1
       on t1.contract_address = p.token1   
where token0 in (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) 
and token1 in (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)
and t0.blockchain = 'ethereum' and t1.blockchain = 'ethereum'
-- USDC: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 | WETH: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

Получаем результат:

Домашнее задание:

Вопрос: Какой токен был использован больше всего раз в создании пар за последний год?

Пара представляет собой котировку, состоящую из двух токенов (Токен0/Токен1). Соответственно, токен может быть как на первом месте (Токен0/Токен1), так и на втором месте (Токен0/Токен1). Принимая это во внимание, составляем следующий запрос:

select 
first.Contract_address,
first.Symbol,
second.t0,
first.t1,
first.t1 + second.t0 as Total
from
(select p.token1 as contract_address,
        t1.symbol as symbol,
        count(p.token1) as t1 
from uniswap_v2_ethereum.Factory_evt_PairCreated p
left join tokens.erc20 t1
       on t1.contract_address = p.token1
       where t1.blockchain = 'ethereum'
       and year(p.evt_block_time) = 2022
group by t1.symbol, p.token1
order by count(p.token1) desc)
as first

full join
(select p.token0,
        count(p.token0) as t0 
from uniswap_v2_ethereum.Factory_evt_PairCreated p
left join tokens.erc20 t0
       on t0.contract_address = p.token0
       where t0.blockchain = 'ethereum'
       and year(p.evt_block_time) = 2022
group by t0.symbol, p.token0
order by count() desc)
as second
ON first.contract_address = second.token0
order by total desc

Получаем следующий результат:

Столбец t0 показывает число раз, когда токен был на первом месте в паре;

Столбец t1 показывает число раз, когда токен был на втором месте в паре;

Столбец Total - суммирует t0 и t1.

Итоговая таблица отсортирована по значениям в Total.

Единственный нюанс - я пока не понял, как в запросе задать временной интервал "последние 365 дней", поэтому в таблице указана информация, по парам, созданным в 2022 году.

Таким образом, получаем ответ: в 2022 году, WETH - использовался чаще всего при создании пар на Uniswap v2 (что тоже выглядит вполне логично).

Материал подготовлен каналом @shitcoinresearch