Skip to content

Commit

Permalink
fixing phoenix dex trades (merge after transfers PR) (#6093)
Browse files Browse the repository at this point in the history
* fix a few first

* ssss

* change

* shorter

* lol

* fix

* add more QA filter time rows

* fix

* fix

* revert raydium

* revert raydium v4

* add

* change

* push

* test seed

* test

* types

* 111

* 111

* remove day filter

* mvoe seed

* price

---------

Co-authored-by: Alan Ghobadi <[email protected]>
  • Loading branch information
andrewhong5297 and aalan3 authored Jun 26, 2024
1 parent aa4672a commit ef61abf
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 23 deletions.
65 changes: 42 additions & 23 deletions solana/models/_sector/dex/phoenix/phoenix_v1_trades.sql
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,29 @@
{% set project_start_date = '2023-02-15' %} --grabbed program deployed at time (account created at)

WITH
pools as (
SELECT
tkA.symbol as tokenA_symbol
, length(json_extract_scalar(initializeParams, '$.InitializeParams.numBaseLotsPerBaseUnit')) - 1 as tokenA_decimals --if lot size is 1000, then its 3 decimals
, ip.account_baseMint as tokenA
, ip.account_baseVault as tokenAVault
, tkB.symbol as tokenB_symbol
, length(json_extract_scalar(initializeParams, '$.InitializeParams.numQuoteLotsPerQuoteUnit')) - 1 as tokenB_decimals
, ip.account_quoteMint as tokenB
, ip.account_quoteVault as tokenBVault
, cast(json_extract_scalar(initializeParams, '$.InitializeParams.takerFeeBps') as double)/100 as fee_tier
, ip.account_market as pool_id
, ip.call_tx_id as init_tx
FROM {{ source('phoenix_v1_solana','phoenix_v1_call_InitializeMarket') }} ip
LEFT JOIN {{ ref('tokens_solana_fungible') }} tkA ON tkA.token_mint_address = ip.account_baseMint
LEFT JOIN {{ ref('tokens_solana_fungible') }} tkB ON tkB.token_mint_address = ip.account_quoteMint
market_metadata as (
SELECT
market_id
, cast(raw_base_units_per_base_unit as int) as raw_base_units_per_base_unit
FROM {{ ref('phoenix_solana_market_metadata') }}
)

, pools as (
SELECT
tkA.symbol as tokenA_symbol
, length(json_extract_scalar(initializeParams, '$.InitializeParams.numBaseLotsPerBaseUnit')) - 1 as tokenA_decimals --if lot size is 1000, then its 3 decimals
, ip.account_baseMint as tokenA
, ip.account_baseVault as tokenAVault
, tkB.symbol as tokenB_symbol
, length(json_extract_scalar(initializeParams, '$.InitializeParams.numQuoteLotsPerQuoteUnit')) - 1 as tokenB_decimals
, ip.account_quoteMint as tokenB
, ip.account_quoteVault as tokenBVault
, cast(json_extract_scalar(initializeParams, '$.InitializeParams.takerFeeBps') as double)/100 as fee_tier
, ip.account_market as pool_id
, ip.call_tx_id as init_tx
FROM {{ source('phoenix_v1_solana','phoenix_v1_call_InitializeMarket') }} ip
LEFT JOIN {{ ref('tokens_solana_fungible') }} tkA ON tkA.token_mint_address = ip.account_baseMint
LEFT JOIN {{ ref('tokens_solana_fungible') }} tkB ON tkB.token_mint_address = ip.account_quoteMint
)

, logs AS (
Expand Down Expand Up @@ -101,6 +108,7 @@
{% if is_incremental() %}
AND {{incremental_predicate('l.call_block_time')}}
{% endif %}
-- AND call_block_time >= now() - interval '7' day --qa
),
max_log_index AS (
SELECT
Expand Down Expand Up @@ -128,6 +136,7 @@
, 'phoenix' as project
, 1 as version
, 'solana' as blockchain
, l.call_block_slot as block_slot
, case when s.call_outer_executing_account = 'PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY' then 'direct'
else s.call_outer_executing_account
end as trade_source
Expand All @@ -139,22 +148,22 @@
else COALESCE(tokenA_symbol, tokenA)
end as token_bought_symbol
, case when s.side = 1 then l.tokenB_filled
else l.tokenA_filled
else (l.tokenA_filled*coalesce(mm.raw_base_units_per_base_unit,1)) --base unit can be adjusted by phoenix, i.e. for BONK it starts at 1e6. There is a script for updating the markets seed file.
end as token_bought_amount_raw
, case when s.side = 1 then l.tokenB_filled/pow(10,p.tokenB_decimals)
else l.tokenA_filled/pow(10,p.tokenA_decimals)
else (l.tokenA_filled*coalesce(mm.raw_base_units_per_base_unit,1))/pow(10,p.tokenA_decimals)
end token_bought_amount
, case when s.side = 1 then COALESCE(tokenA_symbol, tokenA)
else COALESCE(tokenB_symbol, tokenB)
end as token_sold_symbol
, case when s.side = 1 then l.tokenA_filled
, case when s.side = 1 then (l.tokenA_filled*coalesce(mm.raw_base_units_per_base_unit,1))
else l.tokenB_filled
end as token_sold_amount_raw
, case when s.side = 1 then l.tokenA_filled/pow(10,p.tokenA_decimals)
, case when s.side = 1 then (l.tokenA_filled*coalesce(mm.raw_base_units_per_base_unit,1))/pow(10,p.tokenA_decimals)
else l.tokenB_filled/pow(10,p.tokenB_decimals)
end token_sold_amount
, p.pool_id
, s.account_trader as trader_id
, s.call_tx_signer as trader_id
, s.call_tx_id as tx_id
, s.call_outer_instruction_index as outer_instruction_index
, COALESCE(s.call_inner_instruction_index,0) as inner_instruction_index
Expand All @@ -179,15 +188,18 @@
*
, 2 * bytearray_to_integer (bytearray_substring (call_data, 3, 1)) - 1 as side --if side = 1 then tokenB was bought, else tokenA was bought
FROM {{ source('phoenix_v1_solana','phoenix_v1_call_Swap') }}
WHERE 1=1
{% if is_incremental() %}
WHERE {{incremental_predicate('call_block_time')}}
AND {{incremental_predicate('call_block_time')}}
{% endif %}
-- AND call_block_time >= now() - interval '7' day --qa
) s ON s.call_block_slot = l.call_block_slot
AND s.call_tx_id = l.call_tx_id
AND s.account_market = l.market
AND s.call_outer_instruction_index = l.call_outer_instruction_index
AND COALESCE(s.call_inner_instruction_index, 0) <= COALESCE(l.call_inner_instruction_index,0) --only get swaps before the log call
JOIN pools p ON l.market = p.pool_id
LEFT JOIN market_metadata mm ON l.market = mm.market_id
)

SELECT
Expand All @@ -196,6 +208,7 @@ SELECT
, tb.version
, CAST(date_trunc('month', tb.block_time) AS DATE) as block_month
, tb.block_time
, tb.block_slot
, tb.token_pair
, tb.trade_source
, tb.token_bought_symbol
Expand All @@ -204,14 +217,18 @@ SELECT
, tb.token_sold_symbol
, tb.token_sold_amount
, tb.token_sold_amount_raw
, COALESCE(tb.token_sold_amount * p_sold.price, tb.token_bought_amount * p_bought.price) as amount_usd
, case when p_sold.price is not null and p_bought.price is not null
then least(tb.token_sold_amount * p_sold.price, tb.token_bought_amount * p_bought.price)
else COALESCE(tb.token_sold_amount * p_sold.price, tb.token_bought_amount * p_bought.price)
end as amount_usd
, tb.fee_tier as fee_tier
, tb.fee_tier * COALESCE(tb.token_sold_amount * p_sold.price, tb.token_bought_amount * p_bought.price) as fee_usd
, tb.token_sold_mint_address
, tb.token_bought_mint_address
, tb.token_sold_vault
, tb.token_bought_vault
, tb.pool_id as project_program_id
, 'PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY' as project_main_id
, tb.trader_id
, tb.tx_id
, tb.outer_instruction_index
Expand All @@ -225,6 +242,7 @@ LEFT JOIN {{ source('prices', 'usd') }} p_bought ON p_bought.blockchain = 'solan
AND {{incremental_predicate('p_bought.minute')}}
{% else %}
AND p_bought.minute >= TIMESTAMP '{{project_start_date}}'
-- AND p_bought.minute >= now() - interval '7' day --qa
{% endif %}
LEFT JOIN {{ source('prices', 'usd') }} p_sold ON p_sold.blockchain = 'solana'
AND date_trunc('minute', tb.block_time) = p_sold.minute
Expand All @@ -233,6 +251,7 @@ LEFT JOIN {{ source('prices', 'usd') }} p_sold ON p_sold.blockchain = 'solana'
AND {{incremental_predicate('p_sold.minute')}}
{% else %}
AND p_sold.minute >= TIMESTAMP '{{project_start_date}}'
-- AND p_sold.minute >= now() - interval '7' day --qa
{% endif %}
WHERE 1=1
AND recent_swap = 1
6 changes: 6 additions & 0 deletions solana/models/_sector/dex/phoenix/schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ models:
- &block_time
name: block_time
description: "UTC event block time of each DEX trade"
- &block_slot
name: block_slot
description: "block slot of each DEX trade"
- &trade_source
name: trade_source
description: "Was the trade a direct call to the dexor did it go through another program like Jupiter (Dex Aggregator)"
Expand Down Expand Up @@ -85,6 +88,9 @@ models:
- &project_program_id
name: project_program_id
description: "pool program id of the project"
- &project_main_id
name: project_main_id
description: "main program id of the project"
- &trader_id
name: trader_id
description: "id (address) of trader who purchased a token"
Expand Down
24 changes: 24 additions & 0 deletions solana/seeds/phoenix_solana/_schema.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
version: 2

seeds:
- name: phoenix_solana_market_metadata
config:
column_types:
market_id: varchar
base_mint: varchar
quote_mint: varchar
base_decimals: bigint
quote_decimals: bigint
base_atoms_per_raw_base_unit: bigint
quote_atoms_per_quote_unit: bigint
base_atoms_per_base_lot: bigint
quote_atoms_per_quote_lot: bigint
tick_size_in_quote_atoms_per_base_unit: bigint
base_lots_per_base_unit: bigint
market_name: varchar
base_symbol: varchar
quote_symbol: varchar
raw_base_units_per_base_unit: double
raw_base_units_per_base_lot: double
quote_units_per_quote_lot: double
tick_size_in_quote_units_per_raw_base_unit: double
14 changes: 14 additions & 0 deletions solana/seeds/phoenix_solana/phoenix_solana_market_metadata.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
market_id,base_mint,quote_mint,base_decimals,quote_decimals,base_atoms_per_raw_base_unit,quote_atoms_per_quote_unit,base_atoms_per_base_lot,quote_atoms_per_quote_lot,tick_size_in_quote_atoms_per_base_unit,base_lots_per_base_unit,market_name,base_symbol,quote_symbol,raw_base_units_per_base_unit,raw_base_units_per_base_lot,quote_units_per_quote_lot,tick_size_in_quote_units_per_raw_base_unit
4DoNfFBfF7UokCC2FQzriy7yHK6DY6NVdYpuekQ5pRgg,So11111111111111111111111111111111111111112,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,9,6,1000000000,1000000,1000000,1,1000,1000,SOL/USDC,SOL,USDC,1.000000000000000,0.001000000000000,0.000001000000000,0.001000000000000
FZRgpfpvicJ3p23DfmZuvUgcQZBHJsWScTf2N2jK8dy6,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,So11111111111111111111111111111111111111112,9,9,1000000000,1000000000,100000,1,10000,10000,mSOL/SOL,mSOL,SOL,1.000000000000000,0.000100000000000,0.000000001000000,0.000010000000000
GBMoNx84HsFdVK63t8BZuDgyZhSBaeKWB4pHHpoeRM9z,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,5,6,100000,1000000,10000000000,1,100,10,Bonk/USDC,Bonk,USDC,1000000.000000000000000,100000.000000000000000,0.000001000000000,0.000000000100000
FicF181nDsEcasznMTPp9aLa5Rbpdtd11GtSEa1UUWzx,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,So11111111111111111111111111111111111111112,5,9,100000,1000000000,100000000,1,10000,1000,Bonk/SOL,Bonk,SOL,1000000.000000000000000,1000.000000000000000,0.000000001000000,0.000000000010000
2t9TBYyUyovhHQq434uAiBxW6DmJCg7w4xdDoSK6LRjP,J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn,So11111111111111111111111111111111111111112,9,9,1000000000,1000000000,100000,1,10000,10000,JitoSOL/SOL,JitoSOL,SOL,1.000000000000000,0.000100000000000,0.000000001000000,0.000010000000000
Ew3vFDdtdGrknJAVVfraxCA37uNJtimXYPY4QjnfhFHH,7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,8,6,100000000,1000000,10000,1,10000,10000,WETH/USDC,WETH,USDC,1.000000000000000,0.000100000000000,0.000001000000000,0.010000000000000
2sTMN9A1D1qeZLF95XQgJCUPiKe5DiV52jLfZGqMP46m,HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,6,6,1000000,1000000,10000,1,100,100,PYTH/USDC,PYTH,USDC,1.000000000000000,0.010000000000000,0.000001000000000,0.000100000000000
BRLLmdtPGuuFn3BU6orYw4KHaohAEptBToi3dwRUnHQZ,jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,9,6,1000000000,1000000,10000000,1,100,100,JTO/USDC,JTO,USDC,1.000000000000000,0.010000000000000,0.000001000000000,0.000100000000000
5x91Aaegvx1JmW7g8gDfWqwb6kPF7CdNunqNoYCdLjk1,HzwqbKZw8HxMN6bF2yFZNrht3c2iXXzpKcFu7uBEDKtr,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,6,6,1000000,1000000,100000,1,10,10,EURC/USDC,EURC,USDC,1.000000000000000,0.100000000000000,0.000001000000000,0.000010000000000
6ojSigXF7nDPyhFRgmn3V9ywhYseKF9J32ZrranMGVSX,EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,6,6,1000000,1000000,10000,1,100,100,$WIF/USDC,$WIF,USDC,1.000000000000000,0.010000000000000,0.000001000000000,0.000100000000000
3J9LfemPBLowAJgpG3YdYPB9n6pUk7HEjwgS6Y5ToSFg,So11111111111111111111111111111111111111112,Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,9,6,1000000000,1000000,1000000,1,1000,1000,SOL/USDT,SOL,USDT,1.000000000000000,0.001000000000000,0.000001000000000,0.001000000000000
2jxpfobdZDU3z9MsDCjAz8psSaTb5HPoDEtusFLGrPnD,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,5,6,100000,1000000,100000000,1,1000,1000,Bonk/USDT,Bonk,USDT,1000000.000000000000000,1000.000000000000000,0.000001000000000,0.000000001000000
5LQLfGtqcC5rm2WuGxJf4tjqYmDjsQAbKo2AMLQ8KB7p,J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,9,6,1000000000,1000000,1000000,1,1000,1000,JitoSOL/USDC,JitoSOL,USDC,1.000000000000000,0.001000000000000,0.000001000000000,0.001000000000000

0 comments on commit ef61abf

Please sign in to comment.