base kittypunch silver models

This commit is contained in:
Mike Stepanovic 2025-07-22 08:21:13 -06:00
parent de9b8f0c63
commit dec2182c21
3 changed files with 285 additions and 0 deletions

View File

@ -0,0 +1,108 @@
{{ config(
materialized = 'incremental',
unique_key = 'punchswap_v2_swap_id',
incremental_strategy = 'merge',
merge_exclude_columns = ['inserted_timestamp'],
cluster_by = ['block_timestamp::date', 'modified_timestamp::date'],
tags = ['scheduled_non_core']
) }}
WITH transactions AS (
SELECT
tx_hash,
block_number,
block_timestamp,
FROM_ADDRESS as trader,
TO_ADDRESS as router_address,
ORIGIN_FUNCTION_SIGNATURE as function_sig,
VALUE as native_value,
TX_SUCCEEDED as tx_succeeded
FROM {{ ref('core_evm__fact_transactions') }}
WHERE TO_ADDRESS = '0xf45afe28fd5519d5f8c1d4787a4d5f724c0efa4d' -- PunchSwap V2 Router
AND TX_SUCCEEDED = true
AND ORIGIN_FUNCTION_SIGNATURE IN (
'0x38ed1739', -- swapExactTokensForTokens
'0x7ff36ab5', -- swapExactETHForTokens
'0x18cbafe5', -- swapExactTokensForETH
'0x8803dbee', -- swapTokensForExactTokens
'0xfb3bdb41' -- swapTokensForExactETH
)
{% if is_incremental() %}
AND block_timestamp >= (
SELECT MAX(block_timestamp)
FROM {{ this }}
)
{% endif %}
),
events AS (
SELECT
tx_hash,
block_number,
block_timestamp,
contract_address,
event_index,
topic_0,
topic_1,
topic_2,
topic_3,
DATA
FROM {{ ref('core_evm__fact_event_logs') }}
WHERE tx_hash IN (SELECT tx_hash FROM transactions)
AND topic_0 = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' -- Swap event
),
swap_events AS (
SELECT
e.tx_hash,
e.block_number,
e.block_timestamp,
e.contract_address as pool_address,
e.event_index,
'0x' || SUBSTR(t.trader, 3) as trader,
t.function_sig,
t.native_value,
CASE
WHEN t.function_sig = '0x7ff36ab5' THEN 'ETH_TO_TOKEN'
WHEN t.function_sig = '0x18cbafe5' THEN 'TOKEN_TO_ETH'
ELSE 'TOKEN_TO_TOKEN'
END as swap_type,
utils.udf_hex_to_int(SUBSTR(e.DATA, 1, 64)) as amount0_in,
utils.udf_hex_to_int(SUBSTR(e.DATA, 65, 64)) as amount1_in,
utils.udf_hex_to_int(SUBSTR(e.DATA, 129, 64)) as amount0_out,
utils.udf_hex_to_int(SUBSTR(e.DATA, 193, 64)) as amount1_out
FROM events e
JOIN transactions t ON e.tx_hash = t.tx_hash
)
SELECT
block_number AS block_height,
block_timestamp,
tx_hash AS tx_id,
event_index AS swap_index,
pool_address AS swap_contract,
'PunchSwap V2' AS platform,
trader,
CASE
WHEN swap_type = 'ETH_TO_TOKEN' THEN native_value
ELSE amount0_in
END AS token_in_amount,
CASE
WHEN swap_type = 'ETH_TO_TOKEN' THEN '0x0000000000000000000000000000000000000000'
WHEN amount0_in > 0 THEN '0x' || SUBSTR(topic_1, 27)
ELSE '0x' || SUBSTR(topic_2, 27)
END AS token_in_contract,
NULL AS token_in_destination,
CASE
WHEN swap_type = 'TOKEN_TO_ETH' THEN native_value
ELSE amount0_out
END AS token_out_amount,
CASE
WHEN swap_type = 'TOKEN_TO_ETH' THEN '0x0000000000000000000000000000000000000000'
WHEN amount0_out > 0 THEN '0x' || SUBSTR(topic_1, 27)
ELSE '0x' || SUBSTR(topic_2, 27)
END AS token_out_contract,
NULL AS token_out_source,
{{ dbt_utils.generate_surrogate_key(['tx_hash', 'event_index']) }} AS punchswap_v2_swap_id,
SYSDATE() AS inserted_timestamp,
SYSDATE() AS modified_timestamp,
'{{ invocation_id }}' AS invocation_id
FROM swap_events

View File

@ -0,0 +1,93 @@
{{ config(
materialized = 'incremental',
unique_key = 'punchswap_v3_swap_id',
incremental_strategy = 'merge',
merge_exclude_columns = ['inserted_timestamp'],
cluster_by = ['block_timestamp::date', 'modified_timestamp::date'],
tags = ['scheduled_non_core']
) }}
WITH transactions AS (
SELECT
tx_hash,
block_number,
block_timestamp,
FROM_ADDRESS as trader,
TO_ADDRESS as router_address,
ORIGIN_FUNCTION_SIGNATURE as function_sig,
VALUE as native_value,
TX_SUCCEEDED as tx_succeeded
FROM {{ ref('core_evm__fact_transactions') }}
WHERE TO_ADDRESS = '0xf331959366032a634c7cacf5852fe01ffdb84af0' -- PunchSwap V3 Factory
AND TX_SUCCEEDED = true
AND ORIGIN_FUNCTION_SIGNATURE IS NOT NULL
{% if is_incremental() %}
AND block_timestamp >= (
SELECT MAX(block_timestamp)
FROM {{ this }}
)
{% endif %}
),
events AS (
SELECT
tx_hash,
block_number,
block_timestamp,
contract_address,
event_index,
topic_0,
topic_1,
topic_2,
topic_3,
DATA
FROM {{ ref('core_evm__fact_event_logs') }}
WHERE tx_hash IN (SELECT tx_hash FROM transactions)
AND topic_0 = '0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67' -- Swap event (V3)
),
swap_events AS (
SELECT
e.tx_hash,
e.block_number,
e.block_timestamp,
e.contract_address as pool_address,
e.event_index,
'0x' || SUBSTR(t.trader, 3) as trader,
t.function_sig,
t.native_value,
utils.udf_hex_to_int(SUBSTR(e.DATA, 1, 64)) as sender,
utils.udf_hex_to_int(SUBSTR(e.DATA, 65, 64)) as recipient,
utils.udf_hex_to_int(SUBSTR(e.DATA, 129, 64)) as amount0,
utils.udf_hex_to_int(SUBSTR(e.DATA, 193, 64)) as amount1,
utils.udf_hex_to_int(SUBSTR(e.DATA, 257, 64)) as sqrt_price_x96,
utils.udf_hex_to_int(SUBSTR(e.DATA, 321, 64)) as liquidity,
utils.udf_hex_to_int(SUBSTR(e.DATA, 385, 64)) as tick
FROM events e
JOIN transactions t ON e.tx_hash = t.tx_hash
)
SELECT
block_number AS block_height,
block_timestamp,
tx_hash AS tx_id,
event_index AS swap_index,
pool_address AS swap_contract,
'PunchSwap V3' AS platform,
trader,
CASE
WHEN amount0 > 0 THEN amount0
ELSE amount1
END AS token_in_amount,
NULL AS token_in_contract,
NULL AS token_in_destination,
CASE
WHEN amount0 < 0 THEN ABS(amount0)
ELSE ABS(amount1)
END AS token_out_amount,
NULL AS token_out_contract,
NULL AS token_out_source,
{{ dbt_utils.generate_surrogate_key(['tx_hash', 'event_index']) }} AS punchswap_v3_swap_id,
SYSDATE() AS inserted_timestamp,
SYSDATE() AS modified_timestamp,
'{{ invocation_id }}' AS invocation_id
FROM swap_events

View File

@ -0,0 +1,84 @@
{{ config(
materialized = 'incremental',
unique_key = 'stablekitty_swap_id',
incremental_strategy = 'merge',
merge_exclude_columns = ['inserted_timestamp'],
cluster_by = ['block_timestamp::date', 'modified_timestamp::date'],
tags = ['scheduled_non_core']
) }}
WITH transactions AS (
SELECT
tx_hash,
block_number,
block_timestamp,
FROM_ADDRESS as trader,
TO_ADDRESS as router_address,
ORIGIN_FUNCTION_SIGNATURE as function_sig,
VALUE as native_value,
TX_SUCCEEDED as tx_succeeded
FROM {{ ref('core_evm__fact_transactions') }}
WHERE TO_ADDRESS = '0x09d35647cedc6725696e330be485ccc0d3385819' -- StableKitty Router
AND TX_SUCCEEDED = true
AND ORIGIN_FUNCTION_SIGNATURE = '0xfd44959c' -- exchange function
{% if is_incremental() %}
AND block_timestamp >= (
SELECT MAX(block_timestamp)
FROM {{ this }}
)
{% endif %}
),
events AS (
SELECT
tx_hash,
block_number,
block_timestamp,
contract_address,
event_index,
topic_0,
topic_1,
topic_2,
topic_3,
DATA
FROM {{ ref('core_evm__fact_event_logs') }}
WHERE tx_hash IN (SELECT tx_hash FROM transactions)
AND topic_0 = '0x8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd97140' -- TokenExchange event
),
exchange_events AS (
SELECT
e.tx_hash,
e.block_number,
e.block_timestamp,
e.contract_address as pool_address,
e.event_index,
'0x' || SUBSTR(t.trader, 3) as trader,
t.function_sig,
t.native_value,
utils.udf_hex_to_int(SUBSTR(e.DATA, 1, 64)) as buyer,
utils.udf_hex_to_int(SUBSTR(e.DATA, 65, 64)) as sold_id,
utils.udf_hex_to_int(SUBSTR(e.DATA, 129, 64)) as tokens_sold,
utils.udf_hex_to_int(SUBSTR(e.DATA, 193, 64)) as bought_id,
utils.udf_hex_to_int(SUBSTR(e.DATA, 257, 64)) as tokens_bought
FROM events e
JOIN transactions t ON e.tx_hash = t.tx_hash
)
SELECT
block_number AS block_height,
block_timestamp,
tx_hash AS tx_id,
event_index AS swap_index,
pool_address AS swap_contract,
'StableKitty' AS platform,
trader,
tokens_sold AS token_in_amount,
CONCAT('0x', LPAD(HEX(sold_id), 40, '0')) AS token_in_contract,
NULL AS token_in_destination,
tokens_bought AS token_out_amount,
CONCAT('0x', LPAD(HEX(bought_id), 40, '0')) AS token_out_contract,
NULL AS token_out_source,
{{ dbt_utils.generate_surrogate_key(['tx_hash', 'event_index']) }} AS stablekitty_swap_id,
SYSDATE() AS inserted_timestamp,
SYSDATE() AS modified_timestamp,
'{{ invocation_id }}' AS invocation_id
FROM exchange_events