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