Skip to content

Commit

Permalink
zeroex settler - revise model [base] (#6659)
Browse files Browse the repository at this point in the history
* update maker token value selection

* add filter

* add settler_address

* reorder settler field

* new model

* index

* add incremental

* new base model

* remove bad join condition

* remove fills_within cte

* only last valid log

* udpate vali_logs cte

* fix cte

* log selection update

* maker_token != taker_token

* rewrite tokens cte

* fix source jinja syntax

---------

Co-authored-by: jeff-dude <[email protected]>
  • Loading branch information
RantumBits and jeff-dude authored Sep 18, 2024
1 parent 82ac236 commit 18a46bd
Showing 1 changed file with 101 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ settler_txs AS (
block_number,
method_id,
contract_address,
MAX(varbinary_substring(tracker,1,12)) AS zid,
settler_address,
MAX(varbinary_substring(tracker,2,12)) AS zid,
CASE
WHEN method_id = 0x1fff991f THEN MAX(varbinary_substring(tracker,14,3))
WHEN method_id = 0xfd3ad6d4 THEN MAX(varbinary_substring(tracker,13,3))
Expand All @@ -64,7 +65,8 @@ settler_txs AS (
block_time,
"to" AS contract_address,
varbinary_substring(input,1,4) AS method_id,
varbinary_substring(input,varbinary_position(input,0xfd3ad6d4)+132,32) tracker
varbinary_substring(input,varbinary_position(input,0xfd3ad6d4)+132,32) tracker,
a.settler_address
FROM
{{ source('base', 'traces') }} AS tr
JOIN
Expand All @@ -79,88 +81,83 @@ settler_txs AS (
{% endif %}
)
GROUP BY
1,2,3,4,5
1,2,3,4,5,6
),
tbl_trades as (

tbl_all_logs AS (
with tbl_all_logs AS (
SELECT
logs.tx_hash,
logs.block_time,
logs.block_number,
ROW_NUMBER() OVER (PARTITION BY logs.tx_hash ORDER BY index) rn_first,
index,
CASE
WHEN varbinary_substring(logs.topic2, 13, 20) = logs.tx_from THEN 1
WHEN varbinary_substring(logs.topic1, 13, 20) = st.contract_address THEN 0
WHEN FIRST_VALUE(logs.contract_address) OVER (PARTITION BY logs.tx_hash ORDER BY index) = logs.contract_address THEN 0
ELSE 1
END maker_tkn,
bytearray_to_int256(bytearray_substring(DATA, 23,10)) value,
logs.contract_address AS token,
zid,
st.contract_address,
index,
case when ( (varbinary_substring(logs.topic2, 13, 20) = logs.tx_from) OR
(varbinary_substring(logs.topic2, 13, 20) = first_value(bytearray_substring(logs.topic1,13,20)) over (partition by logs.tx_hash order by index) ) or
topic0 = 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65)
then 1 end as valid,
bytearray_substring(logs.topic2,13,20) as taker,
logs.contract_address as maker_token,
first_value(logs.contract_address) over (partition by logs.tx_hash order by index) as taker_token,
first_value(try_cast(bytearray_to_uint256(bytearray_substring(DATA, 22,11)) as int256) ) over (partition by logs.tx_hash order by index) as taker_amount,
try_cast(bytearray_to_uint256(bytearray_substring(DATA, 22,11)) as int256) as maker_amount,
method_id,
tag
tag,
st.settler_address,
zid,
st.settler_address as contract_address
FROM
{{ source('base', 'logs') }} AS logs
JOIN
settler_txs st ON st.tx_hash = logs.tx_hash AND logs.block_time = st.block_time AND st.block_number = logs.block_number
settler_txs st ON st.tx_hash = logs.tx_hash
AND logs.block_time = st.block_time
AND st.block_number = logs.block_number
AND ( (st.settler_address = bytearray_substring(logs.topic1,13,20))
or (st.settler_address= bytearray_substring(logs.topic2,13,20))
or logs.tx_from = bytearray_substring(logs.topic1,13,20)
or logs.tx_from = bytearray_substring(logs.topic2,13,20)
)
WHERE
topic0 IN (0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65,
0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef,
0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c)
and not(tag = 0x000000 and zid = 0xa00000000000000000000000)
topic0 IN ( 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65,
0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef,
0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c )
and topic1 != 0x0000000000000000000000000000000000000000000000000000000000000000
and zid != 0xa00000000000000000000000
{% if is_incremental() %}
AND {{ incremental_predicate('logs.block_time') }}
{% else %}
AND logs.block_time >= DATE '{{zeroex_settler_start_date}}'
{% endif %}
),

tbl_maker_token AS (
SELECT
ROW_NUMBER() OVER (PARTITION BY tx_hash ORDER BY index DESC) rn_last,
token AS maker_token,
tx_hash,
block_time,
block_number,
index
FROM
tbl_all_logs
WHERE
maker_tkn = 1
),

tbl_trades AS (
SELECT
ta.tx_hash,
ta.block_time,
ta.block_number,
zid,
method_id,
tag,
contract_address,
SUM(value) FILTER (WHERE rn_first = 1) AS taker_amount,
MAX(token) FILTER (WHERE rn_first = 1) AS taker_token,
SUM(value) FILTER (WHERE rn_last = 1) AS maker_amount,
MAX(maker_token) FILTER (WHERE rn_last = 1) AS maker_token
FROM
tbl_all_logs ta
LEFT JOIN
tbl_maker_token mkr ON ta.tx_hash = mkr.tx_hash AND ta.block_time = mkr.block_time AND ta.block_number = mkr.block_number AND ta.index = mkr.index AND mkr.rn_last = 1
GROUP BY
1,2,3,4,5,6,7
),
tbl_valid_logs as (
select *,
row_number() over (partition by tx_hash order by valid, index) rn
from tbl_all_logs
where taker_token != maker_token
)
select * from tbl_valid_logs where rn = 1
),

tokens AS (
SELECT DISTINCT
te.*
FROM
{{ source('tokens', 'erc20') }} AS te
JOIN
tbl_trades ON te.contract_address = taker_token OR te.contract_address = maker_token
WHERE
te.blockchain = 'base'
with token_list as (
select
distinct maker_token as token
from
tbl_trades

union distinct

select
distinct taker_token as token
from tbl_trades
)

select *
from
token_list tl
join
{{ source('tokens', 'erc20') }} AS te ON te.contract_address = tl.token
WHERE
te.blockchain = '{{blockchain}}'
),

prices AS (
Expand All @@ -178,7 +175,34 @@ prices AS (
AND minute >= DATE '{{zeroex_settler_start_date}}'
{% endif %}
),

/*
fills as (
with signatures as (
select distinct signature
from {{ source('base', 'logs_decoded') }} l
join tbl_trades tt on tt.tx_hash = l.tx_hash and l.block_time = tt.block_time and l.block_number = tt.block_number
and event_name in ('TokenExchange', 'OtcOrderFilled', 'SellbaseToken', 'Swap', 'BuyGem', 'DODOSwap', 'SellGem', 'Submitted')
WHERE 1=1
{% if is_incremental() %}
AND {{ incremental_predicate('l.block_time') }}
{% else %}
AND l.block_time >= DATE '{{zeroex_settler_start_date}}'
{% endif %}
)
select tt.tx_hash, tt.block_number, tt.block_time, count(*) fills_within
from {{ source('base', 'logs') }} l
join signatures on signature = topic0
join tbl_trades tt on tt.tx_hash = l.tx_hash and l.block_time = tt.block_time and l.block_number = tt.block_number
WHERE 1=1
{% if is_incremental() %}
AND {{ incremental_predicate('l.block_time') }}
{% else %}
AND l.block_time >= DATE '{{zeroex_settler_start_date}}'
{% endif %}
group by 1,2,3
),
*/
results AS (
SELECT
trades.block_time,
Expand All @@ -189,23 +213,8 @@ results AS (
trades.tx_hash,
"from" AS tx_from,
"to" AS tx_to,
index AS tx_index,
CASE
WHEN varbinary_substring(data,17,10) != 0x00000000000000000000 AND varbinary_substring(data,17,1) != 0x THEN varbinary_substring(data,17,20)
WHEN varbinary_substring(data,177,10) != 0x00000000000000000000 THEN varbinary_substring(data,177,20)
WHEN varbinary_substring(data,277,10) != 0x00000000000000000000 THEN varbinary_substring(data,277,20)
WHEN varbinary_substring(data,629,10) != 0x00000000000000000000 THEN varbinary_substring(data,629,20)
WHEN varbinary_substring(data,693,10) != 0x00000000000000000000 THEN varbinary_substring(data,693,20)
WHEN varbinary_substring(data,917,10) != 0x00000000000000000000 THEN varbinary_substring(data,917,20)
WHEN varbinary_substring(data,949,10) != 0x00000000000000000000 THEN varbinary_substring(data,949,20)
WHEN varbinary_substring(data,981,10) != 0x00000000000000000000 THEN varbinary_substring(data,981,20)
WHEN varbinary_substring(data,1013,10) != 0x00000000000000000000 THEN varbinary_substring(data,1013,20)
WHEN varbinary_substring(data,1141,10) != 0x00000000000000000000 THEN varbinary_substring(data,1141,20)
WHEN varbinary_substring(data,1273,10) != 0x00000000000000000000 THEN varbinary_substring(data,1273,20)
WHEN varbinary_substring(data,1749,4) != 0x00000000 THEN varbinary_substring(data,1749,20)
WHEN varbinary_substring(data,1049,4) != 0x00000000 THEN varbinary_substring(data,1049,20)
WHEN varbinary_substring(data,17,4) != 0x00000000 THEN varbinary_substring(data,17,20)
END AS taker ,
trades.index AS tx_index,
taker ,
CAST(NULL AS varbinary) AS maker,
taker_token,
pt.price,
Expand All @@ -219,16 +228,13 @@ results AS (
maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) AS maker_token_amount,
maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) * pm.price AS maker_amount,
tag,
data,
varbinary_substring(data, varbinary_length(data) - CASE
WHEN varbinary_position (data,0xc4103b48be) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xc4103b48be))
WHEN varbinary_position (data,0xe48d68a156) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe48d68a156))
WHEN varbinary_position (data,0xe422ce6ede) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe422ce6ede))
END -3, 37) taker_indicator_string
-1 as fills_within
FROM
tbl_trades trades
JOIN
{{ source('base', 'transactions') }} tr ON tr.hash = trades.tx_hash AND tr.block_time = trades.block_time AND tr.block_number = trades.block_number
-- LEFT JOIN
-- fills f ON f.tx_hash = trades.tx_hash AND f.block_time = trades.block_time AND f.block_number = trades.block_number
LEFT JOIN
tokens tt ON tt.blockchain = 'base' AND tt.contract_address = taker_token
LEFT JOIN
Expand Down Expand Up @@ -261,13 +267,13 @@ results_usd AS (
maker_token_amount,
taker_token_amount_raw,
maker_token_amount_raw,
CASE WHEN maker_token IN (0x4200000000000000000000000000000000000006,
CASE WHEN maker_token IN (0x4200000000000000000000000000000000000006,
0x833589fcd6edb6e08f4c7c32d4f71b54bda02913,
0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca,
0x5d0af35b4f6f4715961b56168de93bf0062b173d,
0x50c5725949a6f0c72e6c4a641f24049a917db0cb) AND maker_amount IS NOT NULL
THEN maker_amount
WHEN taker_token IN (0x4200000000000000000000000000000000000006,
WHEN taker_token IN (0x4200000000000000000000000000000000000006,
0x833589fcd6edb6e08f4c7c32d4f71b54bda02913,
0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca,
0x5d0af35b4f6f4715961b56168de93bf0062b173d,
Expand All @@ -277,13 +283,7 @@ results_usd AS (
END AS volume_usd,
taker_token,
maker_token,
CASE WHEN (varbinary_substring(taker,1,4) = 0x00000000)
OR taker IS NULL
OR taker = taker_token
OR taker = contract_address
OR taker = 0xdef1c0ded9bec7f1a1670819833240f027b25eff
OR varbinary_substring(taker_indicator_string, 18,20) != contract_address
THEN varbinary_substring(taker_indicator_string, 18,20) ELSE taker END AS taker,
taker,
maker,
tag,
zid,
Expand All @@ -294,15 +294,15 @@ results_usd AS (
(ARRAY[-1]) AS trace_address,
'settler' AS type,
TRUE AS swap_flag,
-1 AS fills_within,
fills_within,
contract_address
FROM
results
)

SELECT DISTINCT
SELECT
*
FROM
results_usd
ORDER BY
block_time DESC
block_time DESC

0 comments on commit 18a46bd

Please sign in to comment.