add init silver

This commit is contained in:
mattromano 2024-12-18 13:32:27 -08:00
parent 28501df6ae
commit a03beb9993
12 changed files with 1404 additions and 0 deletions

View File

@ -0,0 +1,86 @@
{{ config(
materialized = 'incremental',
incremental_strategy = 'delete+insert',
unique_key = "block_number",
cluster_by = ['block_timestamp::DATE'],
tags = ['reorg','curated']
) }}
WITH blast_contracts AS (
SELECT
*
FROM
{{ ref('silver__contracts') }}
WHERE
token_name LIKE 'INIT%'
),
underlying AS (
SELECT
tx_hash,
block_timestamp,
block_number,
from_address AS token_address,
to_address AS underlying_asset_address
FROM
blast.core.fact_traces
WHERE
identifier = 'CALL_0_1'
AND LEFT(
input,
10
) = '0x095ea7b3'
AND trace_status = 'SUCCESS'
AND from_address IN (
SELECT
contract_address
FROM
blast_contracts
)
),
unwrapped AS (
SELECT
from_address AS underlying_asset_address,
to_address AS underlying_unwrap_address
FROM
blast.core.fact_traces
WHERE
identifier = 'CALL_0_0'
AND LEFT(
input,
10
) = '0x1a33757d'
AND trace_status = 'SUCCESS'
AND from_address IN (
SELECT
underlying_asset_address
FROM
underlying
)
)
SELECT
A.block_timestamp,
A.block_number,
A.tx_hash,
token_address,
b.token_name,
b.token_symbol,
b.token_decimals,
underlying_asset_address,
C.token_name AS underlying_name,
C.token_symbol AS underlying_symbol,
C.token_decimals AS underlying_decimals,
d.underlying_unwrap_address,
e.token_name AS underlying_unwrap_name,
e.token_symbol AS underlying_unwrap_symbol,
e.token_decimals AS underlying_unwrap_decimals,
b._inserted_timestamp
FROM
underlying A
INNER JOIN blast_contracts b
ON b.contract_address = token_address
LEFT JOIN unwrapped d USING(underlying_asset_address)
INNER JOIN contracts C
ON C.contract_address = underlying_asset_address
LEFT JOIN contracts e
ON e.contract_address = underlying_unwrap_address -- end of asset list

View File

@ -0,0 +1,12 @@
version: 2
models:
- name: silver__init_asset_details
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- TOKEN_ADDRESS

View File

@ -0,0 +1,206 @@
{{ config(
materialized = 'incremental',
incremental_strategy = 'delete+insert',
unique_key = "block_number",
cluster_by = ['block_timestamp::DATE'],
tags = ['reorg','curated']
) }}
WITH asset_details AS (
SELECT
token_address,
token_name,
token_symbol,
token_decimals,
underlying_asset_address,
underlying_name,
underlying_symbol,
underlying_decimals
FROM
{{ ref('silver__init_asset_details') }}
),
init_borrows AS (
SELECT
block_number,
block_timestamp,
tx_hash,
event_index,
origin_from_address,
origin_to_address,
origin_from_address AS borrower,
origin_function_signature,
contract_address,
topics,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
utils.udf_hex_to_int(
topics [2] :: STRING
) :: FLOAT AS posId,
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS pool,
utils.udf_hex_to_int(
segmented_data [0] :: STRING
) :: FLOAT AS loan_amount_raw,
-- receipt token
utils.udf_hex_to_int(
segmented_data [1] :: STRING
) :: FLOAT AS sharesAmt,
-- receipt token
contract_address AS token,
'INIT Capital' AS platform,
inserted_timestamp AS _inserted_timestamp,
_log_id
FROM
{{ ref('core__fact_event_logs') }}
WHERE
contract_address = '0xa7d36f2106b5a5d528a7e2e7a3f436d703113a10'
AND topics [0] :: STRING = '0x49dd87b26edb1c92c93f83b092bd5a425c6bf7a562c0fed02f2576c49f477ba4'
AND tx_status = 'SUCCESS'
),
token_transfer AS (
-- token transfer checks for withdrawal/deposits in usdb/weth(for hooks leveraging)/blast
SELECT
tx_hash,
contract_address,
from_address,
to_address,
raw_amount AS underlying_amount_raw,
token_decimals,
token_symbol,
token_name
FROM
{{ ref('core__fact_token_transfers') }}
LEFT JOIN {{ ref('silver__contracts') }} USING(contract_address)
WHERE
1 = 1
AND contract_address IN (
'0xb1a5700fa2358173fe465e6ea4ff52e36e88e2ad',
'0x4300000000000000000000000000000000000003',
'0x4300000000000000000000000000000000000004'
)
AND (
from_address IN (
SELECT
token_address
FROM
asset_details
) -- for Blast
OR from_address IN (
SELECT
underlying_asset_address
FROM
asset_details
)
) -- to get USDB from WUSDB or WETH FROM WWETH
AND tx_hash IN (
SELECT
tx_hash
FROM
init_borrows
)
),
native_transfer AS (
-- native transfer checks for withdrawal/deposits as eth
SELECT
tx_hash,
from_address AS wrapped_address,
to_address,
value_precise_raw AS eth_value,
'WETH' AS eth_symbol,
18 AS eth_decimals,
'0x4300000000000000000000000000000000000004' AS eth_address
FROM
{{ ref('core__fact_traces') }}
WHERE
from_address IN ('0xf683ce59521aa464066783d78e40cd9412f33d21') -- hard code wweth contract here
AND tx_hash IN (
SELECT
tx_hash
FROM
init_borrows
)
AND TYPE = 'CALL'
AND trace_status = 'SUCCESS'
AND input = '0x'
),
init_combine AS (
SELECT
block_number,
block_timestamp,
b.tx_hash,
event_index,
origin_from_address,
origin_to_address,
origin_function_signature,
b.contract_address,
borrower,
pool,
loan_amount_raw,
C.underlying_decimals AS underlying_wrap_decimals,
-- this does the filtering for if not eth(native) -> if not token(USDB/WETH/BLAST) -> then underlying token (eg. ezETH/weETH/etc)
COALESCE(
eth_value,
underlying_amount_raw
) AS underlying_amount_raw,
COALESCE(
eth_symbol,
d.token_symbol,
C.underlying_symbol
) AS underlying_symbol,
COALESCE(
eth_decimals,
d.token_decimals,
C.underlying_decimals
) AS underlying_decimals,
COALESCE(
eth_address,
C.underlying_asset_address
) AS underlying_asset_address,
underlying_asset_address AS borrows_contract_address,
underlying_symbol AS borrows_symbol,
b.contract_address AS token,
C.token_symbol,
C.token_decimals,
b.platform,
b._log_id,
b._inserted_timestamp
FROM
init_borrows b
LEFT JOIN asset_details C
ON b.pool = C.token_address
LEFT JOIN token_transfer d
ON b.tx_hash = d.tx_hash -- AND b.pool = d.from_address
LEFT JOIN native_transfer e
ON b.tx_hash = e.tx_hash
)
SELECT
block_number,
block_timestamp,
tx_hash,
event_index,
origin_from_address,
origin_to_address,
origin_function_signature,
contract_address,
borrower,
borrows_contract_address,
borrows_symbol,
token AS token_address,
token_symbol,
underlying_symbol,
loan_amount_raw AS amount_unadj,
loan_amount_raw / pow(
10,
underlying_wrap_decimals
) AS amount,
underlying_amount_raw,
underlying_amount_raw / pow(
10,
underlying_decimals
) AS underlyingAmount,
platform,
_inserted_timestamp,
_log_id
FROM
init_combine qualify(ROW_NUMBER() over(PARTITION BY _log_id
ORDER BY
_inserted_timestamp DESC)) = 1

View File

@ -0,0 +1,41 @@
version: 2
models:
- name: silver__init_borrows
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- _log_id
columns:
- name: BLOCK_NUMBER
tests:
- not_null
- name: BLOCK_TIMESTAMP
tests:
- not_null
- name: BORROWER
tests:
- not_null
- name: BORROWS_CONTRACT_ADDRESS
tests:
- not_null
- name: BORROWS_SYMBOL
tests:
- not_null
- name: TOKEN_ADDRESS
tests:
- not_null
- name: TOKEN_SYMBOL
tests:
- not_null
- name: LOAN_AMOUNT
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: TX_HASH
tests:
- not_null
- name: EVENT_INDEX
tests:
- not_null

View File

@ -0,0 +1,310 @@
{{ config(
materialized = 'incremental',
incremental_strategy = 'delete+insert',
unique_key = "block_number",
cluster_by = ['block_timestamp::DATE'],
tags = ['reorg','curated']
) }}
WITH asset_details AS (
SELECT
block_timestamp,
block_number,
tx_hash,
token_address,
token_name,
token_symbol,
token_decimals,
underlying_asset_address,
underlying_name,
underlying_symbol,
underlying_decimals,
underlying_unwrap_address,
underlying_unwrap_name,
underlying_unwrap_symbol,
underlying_unwrap_decimals,
_inserted_timestamp
FROM
{{ ref('silver__init_asset_details') }}
),
init_deposits AS (
SELECT
block_number,
block_timestamp,
tx_hash,
event_index,
origin_from_address,
origin_to_address,
origin_function_signature,
contract_address,
contract_address AS token_address,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
utils.udf_hex_to_int(
topics [1] :: STRING
) :: FLOAT AS posId,
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS pool,
utils.udf_hex_to_int(
segmented_data [0] :: STRING
) :: FLOAT AS minttokens_raw,
-- receipt token
'INIT Capital' AS platform,
inserted_timestamp AS _inserted_timestamp,
_log_id
FROM
{{ ref('core__fact_event_logs') }}
WHERE
contract_address = '0xa7d36f2106b5a5d528a7e2e7a3f436d703113a10'
AND topics [0] :: STRING = '0x722732c12c1c1ba3942aef8ee6e0357b01908558e142501c5f85b356c4dcadf8'
AND tx_status = 'SUCCESS'
),
token_transfer1 AS (
SELECT
t1.tx_hash,
t2.contract_address,
t1.from_address,
t1.to_address,
t1.raw_amount,
t3.token_symbol,
t3.token_decimals,
t3.token_name,
t2.from_address AS from_address2,
t2.to_address AS to_address2,
t2.raw_amount AS base_amount,
--t4.token_decimals as base_decimals, t4.token_symbol as base_symbol, t4.token_name as base_name
-- consolidate names, decimal, symbol, amount
FROM
{{ ref('core__fact_token_transfers') }}
t1
LEFT JOIN {{ ref('core__fact_token_transfers') }}
t2
ON t1.tx_hash = t2.tx_hash
AND t1.contract_address = t2.to_address
LEFT JOIN {{ ref('silver__contracts') }}
t3
ON t2.contract_address = t3.contract_address
WHERE
1 = 1
AND t1.contract_address IN (
SELECT
underlying_asset_address
FROM
asset_details
WHERE
underlying_unwrap_address IS NOT NULL
)
AND t1.tx_hash IN (
SELECT
tx_hash
FROM
init_deposits
)
AND t1.to_address IN (
SELECT
token_address
FROM
asset_details
) -- for Blast
AND t2.contract_address IN (
SELECT
underlying_unwrap_address
FROM
asset_details
)
AND (
t2.to_address IN (
SELECT
underlying_asset_address
FROM
asset_details
)
) -- to get USDB from WUSDB
),
token_transfer2 AS (
SELECT
t1.tx_hash,
t1.contract_address,
t1.from_address,
t1.to_address,
t1.raw_amount,
t3.token_symbol,
t3.token_decimals,
t3.token_name,
NULL AS from_address2,
NULL AS to_address2,
NULL AS base_amount,
NULL AS base_decimals,
NULL AS base_symbol,
NULL AS base_name
FROM
{{ ref('core__fact_token_transfers') }}
t1
LEFT JOIN {{ ref('silver__contracts') }}
t3
ON t1.contract_address = t3.contract_address
WHERE
1 = 1
AND t1.contract_address IN (
SELECT
underlying_asset_address
FROM
asset_details
WHERE
underlying_unwrap_address IS NULL
)
AND t1.tx_hash IN (
SELECT
tx_hash
FROM
init_deposits
)
AND t1.tx_hash NOT IN (
SELECT
tx_hash
FROM
token_transfer1
)
AND t1.to_address IN (
SELECT
token_address
FROM
asset_details
) -- for Blast
),
token_transfer AS (
SELECT
tx_hash,
contract_address,
token_decimals,
token_symbol,
token_name,
COALESCE(
base_amount,
raw_amount
) AS raw_amount,
to_address --coalesce(from_address2, from_address) as from_address
FROM
(
SELECT
tx_hash,
contract_address,
base_amount,
raw_amount,
to_address,
token_name,
token_symbol,
token_decimals
FROM
token_transfer1
UNION ALL
SELECT
tx_hash,
contract_address,
base_amount,
raw_amount,
to_address,
token_name,
token_symbol,
token_decimals
FROM
token_transfer2
)
),
native_transfer AS (
SELECT
tx_hash,
from_address AS wrapped_address,
to_address,
value_precise_raw AS eth_value,
'WETH' AS eth_symbol,
18 AS eth_decimals,
'0x4300000000000000000000000000000000000004' AS eth_address
FROM
{{ ref('core__fact_traces') }}
WHERE
to_address IN ('0xf683ce59521aa464066783d78e40cd9412f33d21') -- hard code wweth contract here
AND tx_hash IN (
SELECT
tx_hash
FROM
init_deposits
)
AND TYPE = 'CALL'
AND trace_status = 'SUCCESS'
AND input = '0x6ad481f3'
),
init_combine AS (
SELECT
b.block_number,
b.block_timestamp,
b.tx_hash,
event_index,
origin_to_address,
origin_from_address,
origin_from_address AS supplier,
origin_function_signature,
b.contract_address,
pool,
minttokens_raw,
COALESCE(
eth_value,
raw_amount
) AS mintAmount_raw,
-- actual out
COALESCE(
eth_decimals,
d.token_decimals
) AS supplied_decimals,
COALESCE(
eth_symbol,
d.token_symbol
) AS supplied_symbol,
COALESCE(
eth_address,
d.contract_address
) AS supplied_contract_address,
C.token_address,
C.token_symbol,
C.token_decimals,
b.platform,
b._log_id,
b._inserted_timestamp
FROM
init_deposits b
LEFT JOIN asset_details C
ON b.pool = C.token_address
LEFT JOIN token_transfer d
ON b.tx_hash = d.tx_hash
AND b.pool = d.to_address
LEFT JOIN native_transfer e
ON b.tx_hash = e.tx_hash
)
SELECT
block_number,
block_timestamp,
tx_hash,
event_index,
origin_to_address,
origin_function_signature,
contract_address,
token_address,
token_symbol,
minttokens_raw / pow(
10,
token_decimals
) AS issued_tokens,
mintAmount_raw AS amount_unadj,
mintAmount_raw / pow(
10,
supplied_decimals
) AS amount,
supplied_contract_address,
supplied_symbol,
supplier,
platform,
_inserted_timestamp,
_log_id
FROM
init_combine qualify(ROW_NUMBER() over(PARTITION BY _log_id
ORDER BY
_inserted_timestamp DESC)) = 1

View File

@ -0,0 +1,47 @@
version: 2
models:
- name: silver__init_deposits
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- _log_id
columns:
- name: BLOCK_NUMBER
tests:
- not_null
- name: BLOCK_TIMESTAMP
tests:
- not_null
- name: TOKEN_ADDRESS
tests:
- not_null
- name: TOKEN_SYMBOL
tests:
- not_null
- name: ISSUED_TOKENS
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: SUPPLIED_BASE_ASSET
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: SUPPLIED_CONTRACT_ADDRESS
tests:
- not_null
- name: SUPPLIED_SYMBOL
tests:
- not_null
- name: SUPPLIER
tests:
- not_null
- name: TX_HASH
tests:
- not_null
- name: EVENT_INDEX
tests:
- not_null

View File

@ -0,0 +1,150 @@
{{ config(
materialized = 'incremental',
incremental_strategy = 'delete+insert',
unique_key = "block_number",
cluster_by = ['block_timestamp::DATE'],
tags = ['reorg','curated']
) }}
WITH asset_details AS (
SELECT
block_timestamp,
block_number,
tx_hash,
token_address,
token_name,
token_symbol,
token_decimals,
underlying_asset_address,
underlying_name,
underlying_symbol,
underlying_decimals,
underlying_unwrap_address,
underlying_unwrap_name,
underlying_unwrap_symbol,
underlying_unwrap_decimals,
_inserted_timestamp
FROM
{{ ref('silver__init_asset_details') }}
),
init_liquidations AS (
SELECT
block_number,
block_timestamp,
tx_hash,
event_index,
origin_from_address,
origin_to_address,
origin_from_address AS borrower,
origin_function_signature,
contract_address,
topics,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
utils.udf_hex_to_int(
topics [1] :: STRING
) :: FLOAT AS posId,
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS liquidator,
CONCAT('0x', SUBSTR(segmented_data [0] :: STRING, 25, 40)) AS poolOut,
utils.udf_hex_to_int(
segmented_data [1] :: STRING
) :: FLOAT AS sharesamt,
-- receipt token
contract_address AS token,
'INIT Capital' AS platform,
inserted_timestamp AS _inserted_timestamp,
_log_id
FROM
{{ ref('core__fact_event_logs') }}
WHERE
contract_address = '0xa7d36f2106b5a5d528a7e2e7a3f436d703113a10'
AND topics [0] :: STRING = '0x6df71caf4cddb1620bcf376243248e0077da98913d65a7e9315bc9984e5fff72'
AND tx_status = 'SUCCESS'
),
token_transfer AS (
SELECT
tx_hash,
contract_address,
from_address,
to_address,
raw_amount AS underlying_amount_raw,
token_decimals,
token_symbol,
token_name
FROM
{{ ref('core__fact_token_transfers') }}
LEFT JOIN {{ ref('silver__contracts') }} USING(contract_address)
WHERE
1 = 1
AND (
contract_address IN (
'0xb1a5700fa2358173fe465e6ea4ff52e36e88e2ad',
'0x4300000000000000000000000000000000000003',
'0x4300000000000000000000000000000000000004'
)
OR contract_address IN (
SELECT
underlying_asset_address
FROM
asset_details
)
)
AND (
from_address IN (
SELECT
token_address
FROM
asset_details
) -- for Blast
OR from_address IN (
SELECT
underlying_asset_address
FROM
asset_details
)
) -- to get USDB from WUSDB
AND tx_hash IN (
SELECT
tx_hash
FROM
init_liquidations
)
)
SELECT
l.block_number,
l.block_timestamp,
l.tx_hash,
event_index,
origin_from_address,
origin_to_address,
origin_function_signature,
l.contract_address,
borrower,
token,
C.token_symbol,
poolOut,
token AS protocol_market,
l.sharesamt AS amount_unadj,
underlying_amount_raw,
l.sharesamt / pow(
10,
C.token_decimals
) AS tokens_seized,
-- in tokens
underlying_amount_raw / pow(
10,
d.token_decimals
) AS amount,
C.underlying_decimals,
C.underlying_asset_address AS liquidation_contract_address,
C.underlying_symbol AS liquidation_contract_symbol,
l.platform,
l._inserted_timestamp,
l._log_id
FROM
init_liquidations l
LEFT JOIN asset_details C
ON l.poolOut = C.token_address
LEFT JOIN token_transfer d
ON l.tx_hash = d.tx_hash
AND C.underlying_asset_address = d.from_address

View File

@ -0,0 +1,56 @@
version: 2
models:
- name: silver__init_liquidations
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- _log_id
columns:
- name: BLOCK_NUMBER
tests:
- not_null
- name: BLOCK_TIMESTAMP
tests:
- not_null
- name: BORROWER
tests:
- not_null
- name: TOKEN
tests:
- not_null
- name: TOKEN_SYMBOL
tests:
- not_null
- name: LIQUIDATOR
tests:
- not_null
- name: TOKENS_SEIZED
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: LIQUIDATION_AMOUNT
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: LIQUIDATION_CONTRACT_ADDRESS
tests:
- not_null
- name: LIQUIDATION_CONTRACT_SYMBOL
tests:
- not_null
- name: TX_HASH
tests:
- not_null
- name: COLLATERAL_TOKEN
tests:
- not_null
- name: COLLATERAL_SYMBOL
tests:
- not_null
- name: EVENT_INDEX
tests:
- not_null

View File

@ -0,0 +1,208 @@
{{ config(
materialized = 'incremental',
incremental_strategy = 'delete+insert',
unique_key = "block_number",
cluster_by = ['block_timestamp::DATE'],
tags = ['reorg','curated']
) }}
WITH asset_details AS (
SELECT
token_address,
token_name,
token_symbol,
token_decimals,
underlying_asset_address,
underlying_name,
underlying_symbol,
underlying_decimals,
underlying_unwrap_address,
underlying_unwrap_name,
underlying_unwrap_symbol,
underlying_unwrap_decimals,
_inserted_timestamp
FROM
{{ ref('silver__init_asset_details') }}
),
init_repayments AS (
SELECT
block_number,
block_timestamp,
tx_hash,
event_index,
origin_from_address,
origin_to_address,
origin_from_address AS borrower,
origin_function_signature,
contract_address,
topics,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
utils.udf_hex_to_int(
topics [2] :: STRING
) :: FLOAT AS posId,
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS pool,
utils.udf_hex_to_int(
segmented_data [0] :: STRING
) :: FLOAT AS sharesAmt,
-- receipt token
utils.udf_hex_to_int(
segmented_data [1] :: STRING
) :: FLOAT AS amtToRepay,
-- receipt token
contract_address AS token,
'INIT Capital' AS platform,
inserted_timestamp AS _inserted_timestamp,
_log_id
FROM
{{ ref('core__fact_event_logs') }}
WHERE
contract_address = '0xa7d36f2106b5a5d528a7e2e7a3f436d703113a10'
AND topics [0] :: STRING = '0x77673b670822baca14a7caf6f8038f811649ab73e4c06083b0e58a53389bece7'
AND tx_status = 'SUCCESS'
),
native_transfer AS (
SELECT
tx_hash,
from_address,
to_address AS wrapped_address,
value_precise_raw AS eth_value,
'WETH' AS eth_symbol,
18 AS eth_decimals,
'0x4300000000000000000000000000000000000004' AS eth_address
FROM
{{ ref('core__fact_traces') }}
WHERE
to_address IN ('0xf683ce59521aa464066783d78e40cd9412f33d21') -- hard code wweth contract here
AND tx_hash IN (
SELECT
tx_hash
FROM
init_repayments
)
AND TYPE = 'CALL'
AND trace_status = 'SUCCESS'
AND input = '0x6ad481f3'
),
token_transfer AS (
SELECT
tx_hash,
contract_address,
from_address,
to_address,
raw_amount AS underlying_amount_raw,
token_decimals,
token_symbol,
token_name
FROM
{{ ref('core__fact_token_transfers') }}
LEFT JOIN {{ ref('silver__contracts') }} USING(contract_address)
WHERE
1 = 1
AND contract_address IN (
'0xb1a5700fa2358173fe465e6ea4ff52e36e88e2ad',
'0x4300000000000000000000000000000000000003',
'0x4300000000000000000000000000000000000004'
)
AND (
to_address IN (
SELECT
token_address
FROM
asset_details
) -- for Blast
OR to_address IN (
SELECT
underlying_asset_address
FROM
asset_details
)
) -- to get USDB from WUSDB
AND tx_hash IN (
SELECT
tx_hash
FROM
init_repayments
)
),
init_combine AS (
SELECT
block_number,
block_timestamp,
b.tx_hash,
event_index,
origin_from_address,
origin_to_address,
origin_function_signature,
b.contract_address,
borrower,
token,
C.token_symbol,
C.token_decimals,
amttorepay,
sharesAmt,
C.underlying_asset_address AS repay_contract_address,
C.underlying_symbol AS repay_contract_symbol,
d.token_decimals AS decimals1,
d.contract_address AS contract_address1,
d.token_symbol AS symbol1,
underlying_decimals AS underlying_wrap_decimals,
COALESCE(
eth_value,
underlying_amount_raw
) AS underlying_amount_raw,
COALESCE(
eth_symbol,
d.token_symbol,
C.underlying_symbol
) AS underlying_symbol,
COALESCE(
eth_decimals,
d.token_decimals,
C.underlying_decimals
) AS underlying_decimals,
COALESCE(
eth_address,
C.underlying_asset_address
) AS underlying_asset_address,
b.platform,
b._log_id,
b._inserted_timestamp
FROM
init_repayments b
LEFT JOIN asset_details C
ON b.pool = C.token_address
LEFT JOIN native_transfer USING(tx_hash)
LEFT JOIN token_transfer d
ON b.tx_hash = d.tx_hash
)
SELECT
block_number,
block_timestamp,
tx_hash,
event_index,
origin_from_address,
origin_to_address,
origin_function_signature,
contract_address,
borrower,
token AS token_address,
token_symbol,
repay_contract_address,
repay_contract_symbol,
underlying_amount_raw AS amount_unadj,
amttorepay / pow(
10,
underlying_wrap_decimals
) AS total_repaid,
underlying_amount_raw / pow(
10,
underlying_decimals
) AS amount,
platform,
_inserted_timestamp,
_log_id
FROM
init_combine qualify(ROW_NUMBER() over(PARTITION BY _log_id
ORDER BY
_inserted_timestamp DESC)) = 1

View File

@ -0,0 +1,44 @@
version: 2
models:
- name: silver__init_repayments
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- _log_id
columns:
- name: BLOCK_NUMBER
tests:
- not_null
- name: BLOCK_TIMESTAMP
tests:
- not_null
- name: BORROWER
tests:
- not_null
- name: TOKEN_ADDRESS
tests:
- not_null
- name: TOKEN_SYMBOL
tests:
- not_null
- name: PAYER
tests:
- not_null
- name: REPAY_CONTRACT_ADDRESS
tests:
- not_null
- name: REPAY_CONTRACT_SYMBOL
tests:
- not_null
- name: REPAYED_AMOUNT
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: TX_HASH
tests:
- not_null
- name: EVENT_INDEX
tests:
- not_null

View File

@ -0,0 +1,197 @@
{{ config(
materialized = 'incremental',
incremental_strategy = 'delete+insert',
unique_key = "block_number",
cluster_by = ['block_timestamp::DATE'],
tags = ['reorg','curated']
) }}
WITH asset_details AS (
SELECT
block_timestamp,
block_number,
tx_hash,
token_address,
token_name,
token_symbol,
token_decimals,
underlying_asset_address,
underlying_name,
underlying_symbol,
underlying_decimals,
underlying_unwrap_address,
underlying_unwrap_name,
underlying_unwrap_symbol,
underlying_unwrap_decimals,
_inserted_timestamp
FROM
{{ ref('silver__init_asset_details') }}
),
init_redemption AS (
SELECT
block_number,
block_timestamp,
tx_hash,
event_index,
origin_from_address,
origin_to_address,
origin_function_signature,
contract_address,
contract_address AS token_address,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
utils.udf_hex_to_int( topics[1] :: STRING ) :: FLOAT as posId,
concat('0x', substr(topics[2] :: string, 27, 40)) as pool,
utils.udf_hex_to_int(
segmented_data [0] :: STRING
) :: FLOAT AS redeemed_token_raw, -- receipt token
'INIT Capital' AS platform,
inserted_timestamp as _inserted_timestamp,
_log_id
FROM
{{ ref('core__fact_event_logs') }}
WHERE
contract_address ='0xa7d36f2106b5a5d528a7e2e7a3f436d703113a10'
AND topics [0] :: STRING = '0x09c2e7b3728acfd99b3f71e4c1a55bcd48019bcc0e45c741f7c2f3393f49ea91'
AND tx_status = 'SUCCESS'
),
token_transfer1 AS (
SELECT
t1.tx_hash, t2.contract_address, t1.from_address, t1.to_address, t1.raw_amount,
t3.token_symbol, t3.token_decimals, t3.token_name,
t2.from_address as from_address2, t2.to_address as to_address2, t2.raw_amount as base_amount,
FROM
{{ ref('core__fact_token_transfers') }} t1
left join
{{ ref('core__fact_token_transfers') }} t2 on t1.tx_hash=t2.tx_hash and t1.contract_address = t2.from_address
left join
{{ ref('silver__contracts') }} t3 on t2.contract_address = t3.contract_address
WHERE
1=1
AND t1.contract_address in (select underlying_asset_address from asset_details where underlying_unwrap_address is not null)
AND t1.tx_hash IN (select tx_hash from init_redemption)
AND t1.from_address in (SELECT token_address FROM ASSET_DETAILS) -- for Blast
AND t2.contract_address IN (select underlying_unwrap_address from asset_details)
AND (t2.from_address in (SELECT underlying_asset_address FROM asset_details)) -- to get USDB from WUSDB
),
token_transfer2 as (
SELECT
t1.tx_hash, t1.contract_address, t1.from_address, t1.to_address, t1.raw_amount,
t3.token_symbol, t3.token_decimals, t3.token_name,
null as from_address2, null as to_address2, null as base_amount, null as base_decimals, null as base_symbol, null as base_name
FROM
{{ ref('core__fact_token_transfers') }} t1
left join
{{ ref('silver__contracts') }} t3 on t1.contract_address = t3.contract_address
WHERE
1=1
AND t1.contract_address in (select underlying_asset_address from asset_details where underlying_unwrap_address is null)
AND t1.tx_hash IN (select tx_hash from init_redemption)
AND t1.tx_hash not in (select tx_hash from token_transfer1)
AND t1.from_address in (SELECT token_address FROM ASSET_DETAILS) -- for Blast
),
token_transfer as (
select
tx_hash,
contract_address,
token_decimals,
token_symbol,
token_name,
coalesce(base_amount, raw_amount) as raw_amount,
from_address
from (
select tx_hash, contract_address, base_amount, raw_amount, from_address2, from_address, token_name, token_symbol, token_decimals from token_transfer1
union all
select tx_hash, contract_address, base_amount, raw_amount, from_address2, from_address, token_name, token_symbol, token_decimals from token_transfer2
)
),
native_transfer AS (
SELECT
tx_hash, from_address as wrapped_address, to_address, value_precise_raw as eth_value, 'WETH' as eth_symbol, 18 as eth_decimals, '0x4300000000000000000000000000000000000004' as eth_address
FROM
blast.core.fact_traces
WHERE
from_address in ('0xf683ce59521aa464066783d78e40cd9412f33d21') -- hard code wweth contract here
AND tx_hash IN (SELECT tx_hash FROM init_redemption)
AND type = 'CALL'
AND trace_status='SUCCESS'
and input='0x'
),
init_combine AS (
SELECT
b.block_number,
b.block_timestamp,
b.tx_hash,
event_index,
origin_from_address,
origin_to_address,
origin_to_address as redeemer,
origin_function_signature,
b.contract_address,
pool,
coalesce(eth_value, raw_amount) as received_amount_raw, -- actual out
coalesce(eth_decimals, d.token_decimals) as received_decimals,
coalesce(eth_symbol, d.token_symbol) as received_symbol,
coalesce(eth_address, d.contract_address) AS received_contract_address,
redeemed_token_raw, -- receipt burnt
C.token_address,
C.token_symbol,
C.token_decimals,
C.token_address AS redeemed_contract_address,
C.token_symbol AS redeemed_symbol,
C.token_decimals AS redeemed_decimals,
b.platform,
b._log_id,
b._inserted_timestamp
FROM
init_redemption b
LEFT JOIN asset_details c
ON b.pool = C.token_address
LEFT JOIN token_transfer d
ON b.tx_hash = d.tx_hash AND b.pool = d.from_address
LEFT JOIN native_transfer e
on b.tx_hash = e.tx_hash
)
SELECT
block_number,
block_timestamp,
tx_hash,
event_index,
origin_from_address,
origin_to_address,
origin_function_signature,
contract_address,
token_address,
token_symbol,
redeemer,
received_amount_raw AS amount_unadj,
received_amount_raw / pow(
10,
received_decimals
) AS amount,
received_contract_address,
received_symbol,
redeemed_token_raw / pow(
10,
redeemed_decimals
) AS redeemed_tokens,
platform,
_inserted_timestamp,
_log_id
FROM
init_combine ee
qualify(ROW_NUMBER() over(PARTITION BY _log_id
ORDER BY
_inserted_timestamp DESC)) = 1

View File

@ -0,0 +1,47 @@
version: 2
models:
- name: silver__init_withdraws
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- _log_id
columns:
- name: BLOCK_NUMBER
tests:
- not_null
- name: BLOCK_TIMESTAMP
tests:
- not_null
- name: TOKEN_ADDRESS
tests:
- not_null
- name: TOKEN_SYMBOL
tests:
- not_null
- name: RECEIVED_AMOUNT
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: RECEIVED_CONTRACT_ADDRESS
tests:
- not_null
- name: RECEIVED_SYMBOL
tests:
- not_null
- name: REDEEMED_TOKEN
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: REDEEMER
tests:
- not_null
- name: TX_HASH
tests:
- not_null
- name: EVENT_INDEX
tests:
- not_null