Dune. День 2: Как узнать общий объем торгов и кол-во свопов для пары на Uniswap v2?
Материал подготовлен каналом @shitcoinresearch
Задача: Необходимо узнать кол-во свопов, которое было совершено в паре USDC/WETH на Uniswap v2 в разбивке по дням. Делаем запрос:
--0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc - Адрес пары USDC/WETH
select
date_trunc ('day', evt_block_time) as day,
count (*)
from uniswap_v2_ethereum.Pair_evt_Swap
where contract_address = 0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc
group by 1Стоить отметить, что здесь адрес пары был внесен вручную. Его можно посмотреть либо на Etherscan, либо в UI самого Uniswap v2. Но также, можно сделать запрос в Dune по поиску контракта пары, содержащей USDC и WETH:
--0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 - адрес контракта USDC --0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 - адрес контракта WETH select p.pair as Contract_address_USDC_WETH from uniswap_v2_ethereum.Factory_evt_PairCreated p where token0 in (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) and token1 in (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)
При этом, я решил, улучшить запрос, сделав в нем подзапрос:
--0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 USDC
--0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 WETH
select date_trunc ('day', evt_block_time) as day,
count (*)
from uniswap_v2_ethereum.Pair_evt_Swap
where contract_address = (select p.pair as Contract_address_USDC_WETH
from uniswap_v2_ethereum.Factory_evt_PairCreated p
where token0 in (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)
and token1 in (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2))
group by 1
order by day descВизуализируем полученные данные:
Теперь необходимо узнать кол-во свопов за неделю.
Создадим запрос через оператор WITH:
--0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 USDC
--0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 WETH
with
frequency as (
select date_trunc ('week', evt_block_time) as time,
count (*)
from uniswap_v2_ethereum.Pair_evt_Swap
where contract_address = (select p.pair as Contract_address_USDC_WETH
from uniswap_v2_ethereum.Factory_evt_PairCreated p
where token0 in (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)
and token1 in (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2))
group by 1
order by time desc)
select * from frequencyВизуализируем полученный результат:
Теперь определим объем торгов пары, содержащей USDC и WETH, выраженный в долларах. Для этого делаем следующий запрос:
--0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 :USDC
--0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 :WETH
--0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc :pair (USDC,WETH)
with
frequency as (
select
date_trunc ('week', evt_block_time) as time,
count (*)
from uniswap_v2_ethereum.Pair_evt_Swap
where contract_address = 0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc
group by 1
),
volume as (
with
base as (
select
date_trunc ('minute', s.evt_block_time) as time,
case when cast(amount0Out as double) = 0 then p.token1 else p.token0 end as token_bought_address,
case when cast(amount0Out as double) = 0 then cast(amount1Out as double) else cast(amount0Out as double) end as token_bought_amount_raw
from uniswap_v2_ethereum.Pair_evt_Swap s
left join uniswap_v2_ethereum.Factory_evt_PairCreated p
on s.contract_address = p.pair
where s.contract_address = 0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc
)
select date_trunc ('week', b.time) as time,
sum (token_bought_amount_raw / pow(10, coalesce (t.decimals,18)) * price) as total_usd_amount
from base b
left join tokens.erc20 t
on t.contract_address = b.token_bought_address
left join prices.usd p
on p.minute = b.time
and p.blockchain = 'ethereum'
and p.contract_address = b.token_bought_address
group by 1
)
select * from volumeВизуализируем полученный запрос:
Запрос выше, можно упростить, если воспользоваться БД "dex_traders":
--0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 USDC
--0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 WETH
--0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc :pair (USDC,WETH)
with
frequency as (
select
date_trunc ('week', evt_block_time) as time,
count (*) as num_swaps
from uniswap_v2_ethereum.Pair_evt_Swap
where contract_address = 0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc
group by 1
),
dex_traders as (
select
date_trunc ('week', block_date) as time,
sum (amount_usd) as total_usd_amount_dx
from dex.trades
where blockchain = 'ethereum'
and project_contract_address = 0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc
group by 1
)
select
dt.time,
f.num_swaps,
dt.total_usd_amount_dx
from dex_traders dt
left join frequency f
on f.time = dt.time
Визуализируем результаты данного запроса, предварительно настроив отображение осей и подписей:
Домашнее задание: определить пару, содержащую WETH, с наибольшим объёмом торгов в долларах США. Делаем следующий запрос:
--0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 WETH
select
d.token_pair,
d.project_contract_address as contract_address,
sum (d.amount_usd) as total_usd_amount
from dex.trades d
where (token_sold_address = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
or token_bought_address = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)
and blockchain = 'ethereum'
and project = 'uniswap'
and version = '2'
group by 1,2
order by total_usd_amount desc
limit 5В результате, получаем следующие данные:
Визуализирую полученные данные в виде круговой диаграммы для наглядности:
Таким образом, пара, содержащая WETH, с наибольшим долларов объёмом торгов на Uniswap v2, является USDC-WETH. Объем торгов которой за все время составил $43,6 млрд.
Материал подготовлен каналом @shitcoinresearch
Читайте также:
Dune. День 1: Как найти все пары для токенов ERC20 в Uniswap v2?