diff --git a/.DS_Store b/.DS_Store index 23f2a046..bc5da11a 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index dad33a45..04e8aa08 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ target/ dbt_modules/ logs/ + +.venv/ \ No newline at end of file diff --git a/models/.DS_Store b/models/.DS_Store index d5ccbcb2..63ce89cf 100644 Binary files a/models/.DS_Store and b/models/.DS_Store differ diff --git a/models/ethereum/aave/.DS_Store b/models/ethereum/aave/.DS_Store index a37ebf14..c20a6dd4 100644 Binary files a/models/ethereum/aave/.DS_Store and b/models/ethereum/aave/.DS_Store differ diff --git a/models/ethereum/aave/aave__borrows.sql b/models/ethereum/aave/aave__borrows.sql new file mode 100644 index 00000000..f176937f --- /dev/null +++ b/models/ethereum/aave/aave__borrows.sql @@ -0,0 +1,220 @@ +{{ + config( + materialized='table', + unique_key='tx_id || event_index', + incremental_strategy='delete+insert', + tags=['snowflake', 'ethereum', 'aave', 'aave_borrows'] + ) +}} + + +WITH +atokens AS( + SELECT + inputs:_reserve::string AS reserve_token, + a.value::string AS balances, + CASE + WHEN contract_address IN( + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d')) THEN 'Aave V2' + WHEN contract_address IN( + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba')) THEN 'Aave AMM' + ELSE 'Aave V1' + END AS aave_version + FROM + {{ref('ethereum__reads')}} + ,lateral flatten(input => SPLIT(value_string,'^')) a + WHERE 1=1 + AND block_timestamp::date >= '2021-06-01' + AND contract_address IN ( + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d'), -- AAVE V2 Data Provider (per docs) + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), -- AAVE AMM Lending Pool (per docs) + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), -- AAVE V2 Lending Pool (per docs) + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba'), -- AAVE AMM Data Provider (per docs) + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119')) -- AAVE V1 +), + + +underlying AS( + SELECT + CASE + WHEN reserve_token = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE reserve_token END AS token_contract, + aave_version, + MAX( + CASE + WHEN SPLIT(balances,':')[0]::string = 'aTokenAddress' THEN SPLIT(balances,':')[1] + ELSE '' END) AS aave_token + FROM + atokens + WHERE 1=1 + GROUP BY 1,2 +), + + +-- implementing aave oracle prices denominated in wei +oracle AS( + SELECT + --block_timestamp, + date_trunc('hour',block_timestamp) AS block_hour, + inputs:address::string AS token_address, + AVG(value_numeric) AS value_ethereum -- values are given in wei and need to be converted to ethereum + FROM + {{ref('ethereum__reads')}} + WHERE 1=1 + AND contract_address = '0xa50ba011c48153de246e5192c8f9258a2ba79ca9' -- check if there is only one oracle + AND block_timestamp::date >= '2021-01-01' + GROUP BY 1,2 +), + +-- wen we don't have oracle pricces we use ethereum__token_prices_hourly as a backup +backup_prices AS( + SELECT + token_address, + hour, + decimals, + CASE WHEN symbol = 'KNCL' THEN 'KNC' ELSE symbol END AS symbol, + AVG(price) AS price -- table has duplicated rows for KNC / KNCL so we need to do a trick + FROM + {{ref('ethereum__token_prices_hourly')}} + WHERE 1=1 + AND hour::date >= '2021-01-01' + GROUP BY 1,2,3,4 +), + + +prices_hourly AS( + SELECT + underlying.aave_token, + underlying.token_contract, + underlying.aave_version, + (oracle.value_ethereum / POW(10,(18 - backup_prices.decimals))) * eth_prices.price AS oracle_price, + backup_prices.price AS backup_price, + oracle.block_hour AS oracle_hour, + backup_prices.hour AS backup_prices_hour, + eth_prices.price AS eth_price, + backup_prices.decimals AS decimals, + backup_prices.symbol + FROM + underlying + LEFT JOIN oracle + ON LOWER(underlying.token_contract) = LOWER(oracle.token_address) + LEFT JOIN backup_prices + ON underlying.token_contract = backup_prices.token_address + AND oracle.block_hour = backup_prices.hour + LEFT JOIN {{ref('ethereum__token_prices_hourly')}} eth_prices + ON oracle.block_hour = eth_prices.hour + AND eth_prices.hour::date >= '2021-01-01' + AND eth_prices.symbol = 'ETH' +), + + +coalesced_prices AS( + SELECT + prices_hourly.decimals AS decimals, + prices_hourly.symbol AS symbol, + prices_hourly.aave_token AS aave_token, + prices_hourly.token_contract AS token_contract, + prices_hourly.aave_version AS aave_version, + COALESCE(prices_hourly.oracle_price,prices_hourly.backup_price) AS coalesced_price, + COALESCE(prices_hourly.oracle_hour,prices_hourly.backup_prices_hour) AS coalesced_hour + FROM + prices_hourly +), + +-- daily avg price used when hourly price is missing (it happens a lot) +prices_daily_backup AS( + SELECT + token_address, + CASE WHEN symbol = 'KNCL' THEN 'KNC' ELSE symbol END AS symbol, + date_trunc('day',hour) AS block_date, + AVG(price) AS avg_daily_price, + MAX(decimals) AS decimals + FROM + backup_prices + WHERE 1=1 + GROUP BY 1,2,3 +), + +-- decimals backup +decimals_backup AS( + SELECT + address AS token_address, + meta:decimals AS decimals, + name + FROM + {{source('ethereum', 'ethereum_contracts')}} + WHERE 1=1 + AND meta:decimals IS NOT NULL +), + +--borrows from Aave LendingPool contract +borrow AS( + SELECT + DISTINCT block_id, + block_timestamp, + event_index, + CASE + WHEN COALESCE(event_inputs:reserve::string,event_inputs:_reserve::string) = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE COALESCE(event_inputs:reserve::string,event_inputs:_reserve::string) + END AS aave_market, + COALESCE(event_inputs:amount,event_inputs:_amount) AS borrow_quantity, --not adjusted for decimals + tx_from_address AS borrower_address, + tx_to_address AS lending_pool_contract, + tx_id, + COALESCE(event_inputs:borrowRateMode,event_inputs:_borrowRateMode) AS borrow_rate_mode, + CASE + WHEN contract_address = LOWER('0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9') THEN 'Aave V2' + WHEN contract_address = LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119') THEN 'Aave V1' + WHEN contract_address = LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb') THEN 'Aave AMM' + ELSE 'ERROR' END AS aave_version + FROM + {{ref('ethereum__events_emitted')}} + WHERE 1=1 + AND block_timestamp::date >= '2021-01-01' + AND contract_address IN(--Aave V2 LendingPool contract address + LOWER('0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9'),--V2 + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119'),--V1 + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'))--AMM + AND event_name = 'Borrow' --this is a borrow + AND tx_succeeded = TRUE --excludes failed txs +) + + +SELECT + borrow.tx_id, + borrow.block_id, + borrow.block_timestamp, + borrow.event_index, + LOWER(borrow.aave_market) AS aave_market, + LOWER(underlying.aave_token) AS aave_token, + borrow.borrow_quantity / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS borrowed_atokens, + borrow.borrow_quantity * COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS borrowed_usd, + LOWER(borrow.borrower_address) AS borrower_address, + CASE WHEN borrow_rate_mode = 2 THEN 'Variable Rate' ELSE 'Stable Rate' END AS borrow_rate_mode, + LOWER(borrow.lending_pool_contract) AS lending_pool_contract, + borrow.aave_version, + COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) AS token_price, + COALESCE(coalesced_prices.symbol,backup_prices.symbol,prices_daily_backup.symbol) AS symbol +FROM + borrow + LEFT JOIN coalesced_prices + ON LOWER(borrow.aave_market) = LOWER(coalesced_prices.token_contract) + AND borrow.aave_version = coalesced_prices.aave_version + AND date_trunc('hour',borrow.block_timestamp) = coalesced_prices.coalesced_hour + LEFT JOIN backup_prices + ON LOWER(borrow.aave_market) = LOWER(backup_prices.token_address) + AND date_trunc('hour',borrow.block_timestamp) = backup_prices.hour + LEFT JOIN prices_daily_backup + ON LOWER(borrow.aave_market) = LOWER(prices_daily_backup.token_address) + AND date_trunc('day',borrow.block_timestamp) = prices_daily_backup.block_date + LEFT JOIN underlying + ON LOWER(borrow.aave_market) = LOWER(underlying.token_contract) + AND borrow.aave_version = underlying.aave_version + LEFT JOIN decimals_backup + ON LOWER(borrow.aave_market) = LOWER(decimals_backup.token_address) diff --git a/models/ethereum/aave/aave__deposits.sql b/models/ethereum/aave/aave__deposits.sql new file mode 100644 index 00000000..4b2e6b22 --- /dev/null +++ b/models/ethereum/aave/aave__deposits.sql @@ -0,0 +1,218 @@ +{{ + config( + materialized='table', + unique_key='tx_id || event_index', + incremental_strategy='delete+insert', + tags=['snowflake', 'ethereum', 'aave', 'aave_deposits'] + ) +}} + + +WITH +atokens AS( + SELECT + inputs:_reserve::string AS reserve_token, + a.value::string AS balances, + CASE + WHEN contract_address IN( + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d')) THEN 'Aave V2' + WHEN contract_address IN( + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba')) THEN 'Aave AMM' + ELSE 'Aave V1' + END AS aave_version + FROM + {{ref('ethereum__reads')}} + ,lateral flatten(input => SPLIT(value_string,'^')) a + WHERE 1=1 + AND block_timestamp::date >= '2021-06-01' + AND contract_address IN ( + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d'), -- AAVE V2 Data Provider (per docs) + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), -- AAVE AMM Lending Pool (per docs) + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), -- AAVE V2 Lending Pool (per docs) + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba'), -- AAVE AMM Data Provider (per docs) + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119')) -- AAVE V1 +), + + +underlying AS( + SELECT + CASE + WHEN reserve_token = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE reserve_token END AS token_contract, + aave_version, + MAX( + CASE + WHEN SPLIT(balances,':')[0]::string = 'aTokenAddress' THEN SPLIT(balances,':')[1] + ELSE '' END) AS aave_token + FROM + atokens + WHERE 1=1 + GROUP BY 1,2 +), + + +-- implementing aave oracle prices denominated in wei +oracle AS( + SELECT + --block_timestamp, + date_trunc('hour',block_timestamp) AS block_hour, + inputs:address::string AS token_address, + AVG(value_numeric) AS value_ethereum -- values are given in wei and need to be converted to ethereum + FROM + {{ref('ethereum__reads')}} + WHERE 1=1 + AND contract_address = '0xa50ba011c48153de246e5192c8f9258a2ba79ca9' -- check if there is only one oracle + AND block_timestamp::date >= '2021-01-01' + GROUP BY 1,2 +), + +-- wen we don't have oracle pricces we use ethereum__token_prices_hourly as a backup +backup_prices AS( + SELECT + token_address, + hour, + decimals, + CASE WHEN symbol = 'KNCL' THEN 'KNC' ELSE symbol END AS symbol, + AVG(price) AS price -- table has duplicated rows for KNC / KNCL so we need to do a trick + FROM + {{ref('ethereum__token_prices_hourly')}} + WHERE 1=1 + AND hour::date >= '2021-01-01' + GROUP BY 1,2,3,4 +), + + +prices_hourly AS( + SELECT + underlying.aave_token, + underlying.token_contract, + underlying.aave_version, + (oracle.value_ethereum / POW(10,(18 - backup_prices.decimals))) * eth_prices.price AS oracle_price, + backup_prices.price AS backup_price, + oracle.block_hour AS oracle_hour, + backup_prices.hour AS backup_prices_hour, + eth_prices.price AS eth_price, + backup_prices.decimals AS decimals, + backup_prices.symbol + FROM + underlying + LEFT JOIN oracle + ON LOWER(underlying.token_contract) = LOWER(oracle.token_address) + LEFT JOIN backup_prices + ON LOWER(underlying.token_contract) = LOWER(backup_prices.token_address) + AND oracle.block_hour = backup_prices.hour + LEFT JOIN {{ref('ethereum__token_prices_hourly')}} eth_prices + ON oracle.block_hour = eth_prices.hour + AND eth_prices.hour::date >= '2021-01-01' + AND eth_prices.symbol = 'ETH' +), + + +coalesced_prices AS( + SELECT + prices_hourly.decimals AS decimals, + prices_hourly.symbol AS symbol, + prices_hourly.aave_token AS aave_token, + prices_hourly.token_contract AS token_contract, + prices_hourly.aave_version AS aave_version, + COALESCE(prices_hourly.oracle_price,prices_hourly.backup_price) AS coalesced_price, + COALESCE(prices_hourly.oracle_hour,prices_hourly.backup_prices_hour) AS coalesced_hour + FROM + prices_hourly +), + +-- daily avg price used when hourly price is missing (it happens a lot) +prices_daily_backup AS( + SELECT + token_address, + CASE WHEN symbol = 'KNCL' THEN 'KNC' ELSE symbol END AS symbol, + date_trunc('day',hour) AS block_date, + AVG(price) AS avg_daily_price, + MAX(decimals) AS decimals + FROM + backup_prices + WHERE 1=1 + GROUP BY 1,2,3 +), + +-- decimals backup +decimals_backup AS( + SELECT + address AS token_address, + meta:decimals AS decimals, + name + FROM + {{source('ethereum', 'ethereum_contracts')}} + WHERE 1=1 + AND meta:decimals IS NOT NULL +), + +--deposits from Aave LendingPool contract +deposits AS( + SELECT + DISTINCT block_id, + block_timestamp, + event_index, + CASE + WHEN COALESCE(event_inputs:reserve::string,event_inputs:_reserve::string) = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE COALESCE(event_inputs:reserve::string,event_inputs:_reserve::string) + END AS aave_market, + COALESCE(event_inputs:amount,event_inputs:_amount) AS deposit_quantity, --not adjusted for decimals + tx_from_address AS depositor_address, + tx_to_address AS lending_pool_contract, + tx_id, + CASE + WHEN contract_address = LOWER('0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9') THEN 'Aave V2' + WHEN contract_address = LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119') THEN 'Aave V1' + WHEN contract_address = LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb') THEN 'Aave AMM' + ELSE 'ERROR' END AS aave_version + FROM + {{ref('ethereum__events_emitted')}} deposit + WHERE 1=1 + AND block_timestamp::date >= '2021-01-01' + AND contract_address IN(--Aave V2 LendingPool contract address + LOWER('0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9'),--V2 + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119'),--V1 + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'))--AMM + AND event_name = 'Deposit' --this is a deposit + AND tx_succeeded = TRUE --excludes failed txs +) + + +SELECT + deposits.tx_id, + deposits.block_id, + deposits.block_timestamp, + deposits.event_index, + LOWER(deposits.aave_market) AS aave_market, + LOWER(underlying.aave_token) AS aave_token, + deposits.deposit_quantity / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS issued_atokens, + deposits.deposit_quantity * COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS supplied_usd, + LOWER(deposits.depositor_address) AS depositor_address, + LOWER(deposits.lending_pool_contract) AS lending_pool_contract, + deposits.aave_version, + COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) AS token_price, + COALESCE(coalesced_prices.symbol,backup_prices.symbol,prices_daily_backup.symbol) AS symbol +FROM + deposits + LEFT JOIN coalesced_prices + ON LOWER(deposits.aave_market) = LOWER(coalesced_prices.token_contract) + AND deposits.aave_version = coalesced_prices.aave_version + AND date_trunc('hour',deposits.block_timestamp) = coalesced_prices.coalesced_hour + LEFT JOIN backup_prices + ON LOWER(deposits.aave_market) = LOWER(backup_prices.token_address) + AND date_trunc('hour',deposits.block_timestamp) = backup_prices.hour + LEFT JOIN prices_daily_backup + ON LOWER(deposits.aave_market) = LOWER(prices_daily_backup.token_address) + AND date_trunc('day',deposits.block_timestamp) = prices_daily_backup.block_date + LEFT JOIN underlying + ON LOWER(deposits.aave_market) = LOWER(underlying.token_contract) + AND deposits.aave_version = underlying.aave_version + LEFT JOIN decimals_backup + ON LOWER(deposits.aave_market) = LOWER(decimals_backup.token_address) diff --git a/models/ethereum/aave/aave__flashloans.sql b/models/ethereum/aave/aave__flashloans.sql new file mode 100644 index 00000000..3a06b281 --- /dev/null +++ b/models/ethereum/aave/aave__flashloans.sql @@ -0,0 +1,225 @@ +{{ + config( + materialized='table', + unique_key='tx_id || event_index', + incremental_strategy='delete+insert', + tags=['snowflake', 'ethereum', 'aave', 'aave_flashloans'] + ) +}} + + +WITH +atokens AS( + SELECT + inputs:_reserve::string AS reserve_token, + a.value::string AS balances, + CASE + WHEN contract_address IN( + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d')) THEN 'Aave V2' + WHEN contract_address IN( + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba')) THEN 'Aave AMM' + ELSE 'Aave V1' + END AS aave_version + FROM + {{ref('ethereum__reads')}} + ,lateral flatten(input => SPLIT(value_string,'^')) a + WHERE 1=1 + AND block_timestamp::date >= '2021-06-01' + AND contract_address IN ( + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d'), -- AAVE V2 Data Provider (per docs) + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), -- AAVE AMM Lending Pool (per docs) + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), -- AAVE V2 Lending Pool (per docs) + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba'), -- AAVE AMM Data Provider (per docs) + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119')) -- AAVE V1 +), + + +underlying AS( + SELECT + CASE + WHEN reserve_token = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE reserve_token END AS token_contract, + aave_version, + MAX( + CASE + WHEN SPLIT(balances,':')[0]::string = 'aTokenAddress' THEN SPLIT(balances,':')[1] + ELSE '' END) AS aave_token + FROM + atokens + WHERE 1=1 + GROUP BY 1,2 +), + + +-- implementing aave oracle prices denominated in wei +oracle AS( + SELECT + --block_timestamp, + date_trunc('hour',block_timestamp) AS block_hour, + inputs:address::string AS token_address, + AVG(value_numeric) AS value_ethereum -- values are given in wei and need to be converted to ethereum + FROM + {{ref('ethereum__reads')}} + WHERE 1=1 + AND contract_address = '0xa50ba011c48153de246e5192c8f9258a2ba79ca9' -- check if there is only one oracle + AND block_timestamp::date >= '2021-01-01' + GROUP BY 1,2 +), + +-- wen we don't have oracle pricces we use ethereum__token_prices_hourly as a backup +backup_prices AS( + SELECT + token_address, + hour, + decimals, + CASE WHEN symbol = 'KNCL' THEN 'KNC' ELSE symbol END AS symbol, + AVG(price) AS price -- table has duplicated rows for KNC / KNCL so we need to do a trick + FROM + {{ref('ethereum__token_prices_hourly')}} + WHERE 1=1 + AND hour::date >= '2021-01-01' + GROUP BY 1,2,3,4 +), + + +prices_hourly AS( + SELECT + underlying.aave_token, + underlying.token_contract, + underlying.aave_version, + (oracle.value_ethereum / POW(10,(18 - backup_prices.decimals))) * eth_prices.price AS oracle_price, + backup_prices.price AS backup_price, + oracle.block_hour AS oracle_hour, + backup_prices.hour AS backup_prices_hour, + eth_prices.price AS eth_price, + backup_prices.decimals AS decimals, + backup_prices.symbol + FROM + underlying + LEFT JOIN oracle + ON LOWER(underlying.token_contract) = LOWER(oracle.token_address) + LEFT JOIN backup_prices + ON LOWER(underlying.token_contract) = LOWER(backup_prices.token_address) + AND oracle.block_hour = backup_prices.hour + LEFT JOIN {{ref('ethereum__token_prices_hourly')}} eth_prices + ON oracle.block_hour = eth_prices.hour + AND eth_prices.hour::date >= '2021-01-01' + AND eth_prices.symbol = 'ETH' +), + + +coalesced_prices AS( + SELECT + prices_hourly.decimals AS decimals, + prices_hourly.symbol AS symbol, + prices_hourly.aave_token AS aave_token, + prices_hourly.token_contract AS token_contract, + prices_hourly.aave_version AS aave_version, + COALESCE(prices_hourly.oracle_price,prices_hourly.backup_price) AS coalesced_price, + COALESCE(prices_hourly.oracle_hour,prices_hourly.backup_prices_hour) AS coalesced_hour + FROM + prices_hourly +), + +-- daily avg price used when hourly price is missing (it happens a lot) +prices_daily_backup AS( + SELECT + token_address, + CASE WHEN symbol = 'KNCL' THEN 'KNC' ELSE symbol END AS symbol, + date_trunc('day',hour) AS block_date, + AVG(price) AS avg_daily_price, + MAX(decimals) AS decimals + FROM + backup_prices + WHERE 1=1 + GROUP BY 1,2,3 +), + +-- decimals backup +decimals_backup AS( + SELECT + address AS token_address, + meta:decimals AS decimals, + name + FROM + {{source('ethereum', 'ethereum_contracts')}} + WHERE 1=1 + AND meta:decimals IS NOT NULL +), + +--deposits into Aave LendingPool contract +flashloan AS( + SELECT + DISTINCT block_id, + block_timestamp, + event_index, + CASE + WHEN COALESCE(event_inputs:reserve::string,event_inputs:_reserve::string) = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE COALESCE(event_inputs:reserve::string,event_inputs:_reserve::string) + END AS aave_market, + COALESCE(event_inputs:amount,event_inputs:_amount) AS flashloan_quantity, --not adjusted for decimals + COALESCE(event_inputs:initiator::string,tx_from_address) AS initiator_address, + COALESCE(event_inputs:target::string,event_inputs:_target::string) AS target_address, + COALESCE(event_inputs:premium,event_inputs:_totalFee) AS premium_quantity, + tx_to_address AS lending_pool_contract, + tx_id, + CASE + WHEN contract_address = LOWER('0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9') THEN 'Aave V2' + WHEN contract_address = LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119') THEN 'Aave V1' + WHEN contract_address = LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb') THEN 'Aave AMM' + ELSE 'ERROR' END AS aave_version + FROM + {{ref('ethereum__events_emitted')}} + WHERE 1=1 + AND block_timestamp::date >= '2021-01-01' + AND contract_address IN(--Aave V2 LendingPool contract address + LOWER('0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9'),--V2 + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119'),--V1 + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'))--AMM + AND event_name = 'FlashLoan' --this is a flashloan + AND tx_succeeded = TRUE --excludes failed txs + --LIMIT 100 +) + + +SELECT + flashloan.tx_id, + flashloan.block_id, + flashloan.block_timestamp, + flashloan.event_index, + LOWER(flashloan.aave_market) AS aave_market, + LOWER(underlying.aave_token) AS aave_token, + flashloan.flashloan_quantity / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS flashloan_amount, + flashloan.flashloan_quantity * COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS flashloan_amount_usd, + flashloan.premium_quantity / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS premium_amount, + flashloan.premium_quantity * COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS premium_amount_usd, + LOWER(initiator_address) AS initiator_address, + LOWER(target_address) AS target_address, + flashloan.aave_version, + COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) AS token_price, + COALESCE(coalesced_prices.symbol,backup_prices.symbol,prices_daily_backup.symbol) AS symbol +FROM + flashloan + LEFT JOIN coalesced_prices + ON LOWER(flashloan.aave_market) = LOWER(coalesced_prices.token_contract) + AND flashloan.aave_version = coalesced_prices.aave_version + AND date_trunc('hour',flashloan.block_timestamp) = coalesced_prices.coalesced_hour + LEFT JOIN backup_prices + ON LOWER(flashloan.aave_market) = LOWER(backup_prices.token_address) + AND date_trunc('hour',flashloan.block_timestamp) = backup_prices.hour + LEFT JOIN prices_daily_backup + ON LOWER(flashloan.aave_market) = LOWER(prices_daily_backup.token_address) + AND date_trunc('day',flashloan.block_timestamp) = prices_daily_backup.block_date + LEFT JOIN underlying + ON LOWER(flashloan.aave_market) = LOWER(underlying.token_contract) + AND flashloan.aave_version = underlying.aave_version + LEFT JOIN decimals_backup + ON LOWER(flashloan.aave_market) = LOWER(decimals_backup.token_address) diff --git a/models/ethereum/aave/aave__liquidations.sql b/models/ethereum/aave/aave__liquidations.sql new file mode 100644 index 00000000..47c54600 --- /dev/null +++ b/models/ethereum/aave/aave__liquidations.sql @@ -0,0 +1,249 @@ +{{ + config( + materialized='table', + unique_key='tx_id || event_index', + incremental_strategy='delete+insert', + tags=['snowflake', 'ethereum', 'aave', 'aave_liquidations'] + ) +}} + + +WITH +atokens AS( + SELECT + inputs:_reserve::string AS reserve_token, + a.value::string AS balances, + CASE + WHEN contract_address IN( + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d')) THEN 'Aave V2' + WHEN contract_address IN( + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba')) THEN 'Aave AMM' + ELSE 'Aave V1' + END AS aave_version + FROM + {{ref('ethereum__reads')}} + ,lateral flatten(input => SPLIT(value_string,'^')) a + WHERE 1=1 + AND block_timestamp::date >= '2021-06-01' + AND contract_address IN ( + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d'), -- AAVE V2 Data Provider (per docs) + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), -- AAVE AMM Lending Pool (per docs) + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), -- AAVE V2 Lending Pool (per docs) + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba'), -- AAVE AMM Data Provider (per docs) + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119')) -- AAVE V1 +), + + +underlying AS( + SELECT + CASE + WHEN reserve_token = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE reserve_token END AS token_contract, + aave_version, + MAX( + CASE + WHEN SPLIT(balances,':')[0]::string = 'aTokenAddress' THEN SPLIT(balances,':')[1] + ELSE '' END) AS aave_token + FROM + atokens + WHERE 1=1 + GROUP BY 1,2 +), + + +-- implementing aave oracle prices denominated in wei +oracle AS( + SELECT + --block_timestamp, + date_trunc('hour',block_timestamp) AS block_hour, + inputs:address::string AS token_address, + AVG(value_numeric) AS value_ethereum -- values are given in wei and need to be converted to ethereum + FROM + {{ref('ethereum__reads')}} + WHERE 1=1 + AND contract_address = '0xa50ba011c48153de246e5192c8f9258a2ba79ca9' -- check if there is only one oracle + AND block_timestamp::date >= '2021-01-01' + GROUP BY 1,2 +), + +-- wen we don't have oracle pricces we use ethereum__token_prices_hourly as a backup +backup_prices AS( + SELECT + token_address, + hour, + decimals, + CASE WHEN symbol = 'KNCL' THEN 'KNC' ELSE symbol END AS symbol, + AVG(price) AS price -- table has duplicated rows for KNC / KNCL so we need to do a trick + FROM + {{ref('ethereum__token_prices_hourly')}} + WHERE 1=1 + AND hour::date >= '2021-01-01' + GROUP BY 1,2,3,4 +), + + +prices_hourly AS( + SELECT + underlying.aave_token, + underlying.token_contract, + underlying.aave_version, + (oracle.value_ethereum / POW(10,(18 - backup_prices.decimals))) * eth_prices.price AS oracle_price, + backup_prices.price AS backup_price, + oracle.block_hour AS oracle_hour, + backup_prices.hour AS backup_prices_hour, + eth_prices.price AS eth_price, + backup_prices.decimals AS decimals, + backup_prices.symbol + FROM + underlying + LEFT JOIN oracle + ON LOWER(underlying.token_contract) = LOWER(oracle.token_address) + LEFT JOIN backup_prices + ON LOWER(underlying.token_contract) = LOWER(backup_prices.token_address) + AND oracle.block_hour = backup_prices.hour + LEFT JOIN {{ref('ethereum__token_prices_hourly')}} eth_prices + ON oracle.block_hour = eth_prices.hour + AND eth_prices.hour::date >= '2021-01-01' + AND eth_prices.symbol = 'ETH' +), + + +coalesced_prices AS( + SELECT + prices_hourly.decimals AS decimals, + prices_hourly.symbol AS symbol, + prices_hourly.aave_token AS aave_token, + prices_hourly.token_contract AS token_contract, + prices_hourly.aave_version AS aave_version, + COALESCE(prices_hourly.oracle_price,prices_hourly.backup_price) AS coalesced_price, + COALESCE(prices_hourly.oracle_hour,prices_hourly.backup_prices_hour) AS coalesced_hour + FROM + prices_hourly +), + +-- daily avg price used when hourly price is missing (it happens a lot) +prices_daily_backup AS( + SELECT + token_address, + CASE WHEN symbol = 'KNCL' THEN 'KNC' ELSE symbol END AS symbol, + date_trunc('day',hour) AS block_date, + AVG(price) AS avg_daily_price, + MAX(decimals) AS decimals + FROM + backup_prices + WHERE 1=1 + GROUP BY 1,2,3 +), + +-- decimals backup +decimals_backup AS( + SELECT + address AS token_address, + meta:decimals AS decimals, + name + FROM + {{source('ethereum', 'ethereum_contracts')}} + WHERE 1=1 + AND meta:decimals IS NOT NULL +), + +--liquidations to Aave LendingPool contract +liquidation AS(--need to fix aave v1 + SELECT + DISTINCT block_id, + block_timestamp, + event_index, + CASE + WHEN COALESCE(event_inputs:collateralAsset::string,event_inputs:_collateral::string) = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE COALESCE(event_inputs:collateralAsset::string,event_inputs:_collateral::string) + END AS collateral_asset, + CASE + WHEN COALESCE(event_inputs:debtAsset::string,event_inputs:_reserve::string) = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE COALESCE(event_inputs:debtAsset::string,event_inputs:_reserve::string) + END AS debt_asset, + COALESCE(event_inputs:debtToCover,event_inputs:_purchaseAmount) AS debt_to_cover_amount, --not adjusted for decimals + COALESCE(event_inputs:liquidatedCollateralAmount,event_inputs:_liquidatedCollateralAmount) AS liquidated_amount, + COALESCE(event_inputs:liquidator::string,event_inputs:_liquidator::string) AS liquidator_address, + COALESCE(event_inputs:user::string,event_inputs:_user::string) AS borrower_address, + tx_to_address AS lending_pool_contract, + tx_id, + CASE + WHEN contract_address = LOWER('0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9') THEN 'Aave V2' + WHEN contract_address = LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119') THEN 'Aave V1' + WHEN contract_address = LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb') THEN 'Aave AMM' + ELSE 'ERROR' END AS aave_version + FROM + {{ref('ethereum__events_emitted')}} + WHERE 1=1 + AND block_timestamp::date >= '2021-01-01' + AND contract_address IN(--Aave V2 LendingPool contract address + LOWER('0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9'),--V2 + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119'),--V1 + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'))--AMM + AND event_name = 'LiquidationCall' --this is a liquidation + AND tx_succeeded = TRUE --excludes failed txs +) + + +SELECT + liquidation.tx_id, + liquidation.block_id, + liquidation.block_timestamp, + liquidation.event_index, + LOWER(liquidation.collateral_asset) AS collateral_asset, + LOWER(underlying.aave_token) AS collateral_aave_token, + liquidation.liquidated_amount / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS liquidated_amount, + liquidation.liquidated_amount * COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS liquidated_amount_usd, + LOWER(liquidation.debt_asset) AS debt_asset, + LOWER(underlying_debt.aave_token) AS debt_aave_token, + liquidation.debt_to_cover_amount / + POW(10,COALESCE(coalesced_prices_debt.decimals,backup_prices_debt.decimals,prices_daily_backup_debt.decimals,decimals_backup_debt.decimals,18)) AS debt_to_cover_amount, + liquidation.debt_to_cover_amount * COALESCE(coalesced_prices_debt.coalesced_price,backup_prices_debt.price,prices_daily_backup_debt.avg_daily_price) / + POW(10,COALESCE(coalesced_prices_debt.decimals,backup_prices_debt.decimals,prices_daily_backup_debt.decimals,decimals_backup_debt.decimals,18)) AS debt_to_cover_amount_usd, + liquidation.liquidator_address AS liquidator, + liquidation.borrower_address AS borrower, + liquidation.aave_version, + COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) AS collateral_token_price, + COALESCE(coalesced_prices.symbol,backup_prices.symbol,prices_daily_backup.symbol) AS collateral_token_symbol, + COALESCE(coalesced_prices_debt.coalesced_price,backup_prices_debt.price,prices_daily_backup_debt.avg_daily_price) AS debt_token_price, + COALESCE(coalesced_prices_debt.symbol,backup_prices_debt.symbol,prices_daily_backup_debt.symbol) AS debt_token_symbol +FROM + liquidation + LEFT JOIN coalesced_prices + ON LOWER(liquidation.collateral_asset) = LOWER(coalesced_prices.token_contract) + AND liquidation.aave_version = coalesced_prices.aave_version + AND date_trunc('hour',liquidation.block_timestamp) = coalesced_prices.coalesced_hour + LEFT JOIN backup_prices + ON LOWER(liquidation.collateral_asset) = LOWER(backup_prices.token_address) + AND date_trunc('hour',liquidation.block_timestamp) = backup_prices.hour + LEFT JOIN prices_daily_backup + ON LOWER(liquidation.collateral_asset) = LOWER(prices_daily_backup.token_address) + AND date_trunc('day',liquidation.block_timestamp) = prices_daily_backup.block_date + LEFT JOIN underlying + ON LOWER(liquidation.collateral_asset) = LOWER(underlying.token_contract) + AND liquidation.aave_version = underlying.aave_version + LEFT JOIN decimals_backup + ON LOWER(liquidation.collateral_asset) = LOWER(decimals_backup.token_address) +-- need to join twice to cover both collateral asset and debt asset + LEFT JOIN coalesced_prices AS coalesced_prices_debt + ON LOWER(liquidation.debt_asset) = LOWER(coalesced_prices_debt.token_contract) + AND liquidation.aave_version = coalesced_prices_debt.aave_version + AND date_trunc('hour',liquidation.block_timestamp) = coalesced_prices_debt.coalesced_hour + LEFT JOIN backup_prices AS backup_prices_debt + ON LOWER(liquidation.debt_asset) = LOWER(backup_prices_debt.token_address) + AND date_trunc('hour',liquidation.block_timestamp) = backup_prices_debt.hour + LEFT JOIN prices_daily_backup AS prices_daily_backup_debt + ON LOWER(liquidation.debt_asset) = LOWER(prices_daily_backup_debt.token_address) + AND date_trunc('day',liquidation.block_timestamp) = prices_daily_backup_debt.block_date + LEFT JOIN underlying AS underlying_debt + ON LOWER(liquidation.debt_asset) = LOWER(underlying_debt.token_contract) + AND liquidation.aave_version = underlying_debt.aave_version + LEFT JOIN decimals_backup AS decimals_backup_debt + ON LOWER(liquidation.debt_asset) = LOWER(decimals_backup_debt.token_address) diff --git a/models/ethereum/aave/aave__market_stats.sql b/models/ethereum/aave/aave__market_stats.sql new file mode 100644 index 00000000..b2df3313 --- /dev/null +++ b/models/ethereum/aave/aave__market_stats.sql @@ -0,0 +1,281 @@ +{{ + config( + materialized='table', + unique_key='block_hour || aave_version || underlying_contract || atoken_price || aave_price || reserve_price', + incremental_strategy='delete+insert', + tags=['snowflake', 'ethereum', 'aave', 'aave_market_stats'] + ) +}} + +-- first grab the contract reads from the lending pool (V1,V2 and AMM) and data provider contracts (V2,AMM) +-- they are all as one concatonated string so we need to parse them out +WITH aave_reads AS ( + + SELECT + DISTINCT + date_trunc('hour',block_timestamp) AS blockhour, + contract_address AS lending_pool_add, + CASE + WHEN contract_address IN (LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d'),LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba')) THEN 'DataProvider' + ELSE 'LendingPool' END AS + lending_pool_type, + function_name, + CASE + WHEN contract_address IN (LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'),LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d')) THEN 'Aave V2' + WHEN contract_address IN (LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'),LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba')) THEN 'Aave AMM' + ELSE 'Aave V1' + END AS aave_version, + inputs, + (SPLIT(LOWER(VALUE_STR),'^')) AS coins + FROM {{source('ethereum', 'ethereum_reads')}} + WHERE + + contract_address IN ( + + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d'), -- AAVE V2 Data Provider (per docs) + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), -- AAVE AMM Lending Pool (per docs) + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), -- AAVE V2 Lending Pool (per docs) + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba'), -- AAVE AMM Data Provider (per docs) + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119') -- AAVE V1 +) + AND block_timestamp >= CURRENT_DATE - 60 + + -- first split them into a log format where we have one row per field per read +), long_format AS ( + SELECT + DISTINCT + blockhour, + aave_version, + lending_pool_add, + lending_pool_type, + CASE WHEN LOWER(COALESCE(inputs:address,inputs:_reserve)) = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE LOWER(COALESCE(inputs:address,inputs:_reserve)) END AS reserve_token, + --inputs::STRING AS input_type, + --inputs::STRING AS input_address, + (SPLIT(LOWER(value::STRING),':'))[0] AS field_name, + (SPLIT(LOWER(value::STRING),':'))[1] AS value + FROM aave_reads, + Table(Flatten(aave_reads.coins)) + WHERE value::STRING <> '0x0000000000000000000000000000000000000000'-- AND inputs:address IS NULL +), + -- cast to a wide format next putting one column for every field in every read +wide_format AS ( + SELECT * + FROM long_format + pivot(max(value) for field_name + IN ('averagestableborrowrate', 'id', 'interestratestrategyaddress', 'stabledebttokenaddress', + 'currentstableborrowrate', 'currentvariableborrowrate', 'totalliquidity', 'currentliquidityrate', + 'variableborrowindex', 'variableborrowrate', 'atokenaddress', 'availableliquidity', 'version', + 'liquidityrate', 'stableborrowrate', 'totalborrowsstable', 'totalborrowsvariable', + 'lastupdatetimestamp', 'liquidityindex', 'utilizationrate', + 'variabledebttokenaddress', 'totalstabledebt', 'totalvariabledebt')) + +), +-- combine redundant columns, decimal adjust rates (these all use the same adjustment) +reads_parsed AS ( + SELECT + DISTINCT + blockhour,aave_version,lending_pool_add,lending_pool_type,reserve_token, + COALESCE("'atokenaddress'",'-')::STRING AS atoken_address, + COALESCE("'stabledebttokenaddress'",'-')::STRING AS stable_debt_token_address, + COALESCE("'variabledebttokenaddress'",'-')::STRING AS variable_debt_token_address, + COALESCE("'availableliquidity'","'totalliquidity'",NULL)::NUMERIC AS available_liquidity, + COALESCE("'currentliquidityrate'","'liquidityrate'",NULL)::NUMERIC/POWER(10,27) AS liquidity_rate, + COALESCE("'averagestableborrowrate'","'currentstableborrowrate'",NULL)::NUMERIC/POWER(10,27) AS stbl_borrow_rate, + COALESCE("'currentvariableborrowrate'","'variableborrowindex'","'variableborrowrate'",NULL)::NUMERIC/POWER(10,27) AS variable_borrow_rate, + COALESCE("'totalstabledebt'","'totalborrowsstable'",NULL)::NUMERIC AS total_stable_debt, + COALESCE("'totalvariabledebt'","'totalborrowsvariable'",NULL)::NUMERIC AS total_variable_debt, + COALESCE("'utilizationrate'",NULL)::NUMERIC/POWER(10,27) AS utilization_rate + FROM wide_format + ORDER BY reserve_token, blockhour DESC + +), +-- splitting these up for organization +lending_pools_v2 AS ( + SELECT * FROM reads_parsed WHERE lending_pool_type = 'LendingPool' AND aave_version <> 'V1' +), data_providers_v2 AS ( + SELECT * FROM reads_parsed WHERE lending_pool_type = 'DataProvider' AND aave_version <> 'V1' +), lending_pools_v1 AS ( + SELECT * FROM reads_parsed WHERE lending_pool_type = 'LendingPool' AND aave_version = 'V1' +), +-- format v2/amm data. Need to combine reads from the lending pool and data provider +aave_v2 AS ( + + SELECT + lp.blockhour, + lp.reserve_token, + lp.aave_version, + lp.lending_pool_add, + dp.lending_pool_add AS data_provider, + lp.atoken_address, + lp.stable_debt_token_address, + lp.variable_debt_token_address, + (dp.available_liquidity + dp.total_stable_debt + dp.total_variable_debt) AS total_liquidity, + CASE WHEN lp.liquidity_rate IS NOT NULL THEN lp.liquidity_rate + ELSE dp.liquidity_rate END AS liquidity_rate, + CASE WHEN lp.stbl_borrow_rate IS NOT NULL THEN lp.stbl_borrow_rate + ELSE dp.stbl_borrow_rate END AS stbl_borrow_rate, + CASE WHEN lp.variable_borrow_rate IS NOT NULL THEN lp.variable_borrow_rate + ELSE dp.variable_borrow_rate END AS variable_borrow_rate, + dp.total_stable_debt AS total_stable_debt, + dp.total_variable_debt AS total_variable_debt, + CASE WHEN total_liquidity <> 0 THEN ((dp.total_stable_debt + dp.total_variable_debt)/total_liquidity) ELSE 0 END AS utilization_rate + FROM + lending_pools_v2 lp + LEFT OUTER JOIN + data_providers_v2 dp + ON lp.reserve_token = dp.reserve_token and lp.blockhour = dp.blockhour and lp.aave_version = dp.aave_version + ORDER BY blockhour DESC + +), +-- format v1 data +aave_v1 AS ( + SELECT + lp.blockhour, + lp.reserve_token, + lp.aave_version, + lp.lending_pool_add, + '-' AS data_provider, + lp.atoken_address, + lp.stable_debt_token_address, + lp.variable_debt_token_address, + lp.available_liquidity AS total_liquidity, + lp.liquidity_rate, + lp.stbl_borrow_rate, + lp.variable_borrow_rate, + lp.total_stable_debt, + lp.total_variable_debt, + lp.utilization_rate + FROM + lending_pools_v1 lp + ORDER BY blockhour DESC +), +aave AS ( + + SELECT * FROM aave_v2 + UNION + SELECT * FROM aave_v1 + +), +-- get decimals, preferably from contract reads but using the prices table as a fallback +decimals_raw as ( + + SELECT address AS token_address, + meta:decimals AS decimals,name, + 2 as weight + FROM {{source('ethereum', 'ethereum_contracts')}} + WHERE meta:decimals IS NOT NULL + + UNION + + SELECT DISTINCT token_address, + decimals,symbol AS name, + 1 AS weight + FROM {{ref('ethereum__token_prices_hourly')}} + WHERE + decimals IS NOT NULL + +), decimals AS ( + SELECT token_address,decimals,name + FROM decimals_raw + QUALIFY (row_number() OVER (partition by token_address order by weight desc)) = 1 +), +-- implementing aave oracle prices denominated in wei +oracle AS( + SELECT + date_trunc('hour',block_timestamp) AS hour, + LOWER(inputs:address::string) AS token_address, + MEDIAN(value_numeric) AS value_ethereum -- values are given in wei and need to be converted to ethereum + FROM + {{ref('ethereum__reads')}} + WHERE + contract_address = '0xa50ba011c48153de246e5192c8f9258a2ba79ca9' -- check if there is only one oracle + AND block_timestamp::date >= '2021-05-01' + GROUP BY 1,2 +), +--pull hourly prices for each underlying +aave_prices AS ( + SELECT + o.hour, + (o.value_ethereum * POWER(10,18)) * p.price AS price, -- this is all to get price in wei to price in USD + o.token_address + FROM + oracle o + INNER JOIN {{ref('ethereum__token_prices_hourly')}} p + ON o.hour = p.hour + AND p.hour::date >= '2021-05-01' + AND p.token_address = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + +), +-- calculate what we can +aave_data AS ( + SELECT + a.blockhour, + a.reserve_token, + --l.address_name AS reserve_name, + COALESCE(p.symbol,REGEXP_REPLACE(l.address_name,'AAVE.*: a','')) AS reserve_name, + a.aave_version, + a.lending_pool_add, + COALESCE(p.price,ap.price) AS reserve_price, + a.data_provider, + a.atoken_address, + a.stable_debt_token_address, + a.variable_debt_token_address, + a.total_liquidity/POWER(10,d.decimals) AS total_liquidity_token, + a.total_liquidity*COALESCE(p.price,ap.price)/POWER(10,d.decimals) AS total_liquidity_usd, + a.liquidity_rate, + a.stbl_borrow_rate, + a.variable_borrow_rate, + a.total_stable_debt/POWER(10,d.decimals) AS total_stable_debt_token, + a.total_stable_debt*COALESCE(p.price,ap.price)/POWER(10,d.decimals) AS total_stable_debt_usd, + a.total_variable_debt/POWER(10,d.decimals)AS total_variable_debt_token, + a.total_variable_debt*COALESCE(p.price,ap.price)/POWER(10,d.decimals)AS total_variable_debt_usd, + utilization_rate + FROM aave a + --LEFT OUTER JOIN + --silver.ethereum_address_labels l ON a.reserve_token = l.address + LEFT OUTER JOIN + decimals d ON a.reserve_token = d.token_address + LEFT OUTER JOIN + {{source('ethereum', 'ethereum_address_labels')}} l ON a.atoken_address = l.address + LEFT OUTER JOIN + aave_prices ap ON a.reserve_token = ap.token_address AND a.blockhour = ap.hour + LEFT OUTER JOIN + {{ref('ethereum__token_prices_hourly')}} p ON a.reserve_token = p.token_address AND a.blockhour = p.hour + ORDER BY reserve_token, blockhour DESC + +) + +--finally format to spec/with some adjustments +SELECT + a.blockhour as block_hour, + a.lending_pool_add, -- use these two for debugging reads, input the underlying token + a.data_provider, -- + a.reserve_name, + a.atoken_address, + a.stable_debt_token_address, + a.variable_debt_token_address, + a.reserve_token AS underlying_contract, + a.reserve_price, + atok.price AS atoken_price, + a.total_liquidity_token, + a.total_liquidity_usd, + a.total_stable_debt_token, + a.total_stable_debt_usd, + a.total_variable_debt_token, + a.total_variable_debt_usd, + a.liquidity_rate AS supply_rate, + a.stbl_borrow_rate AS borrow_rate_stable, + a.variable_borrow_rate AS borrow_rate_variable, + aave.price AS aave_price, + a.aave_version, + 'ethereum' AS blockchain +FROM +aave_data a +LEFT OUTER JOIN +{{ref('ethereum__token_prices_hourly')}} atok +ON a.atoken_address = atok.token_address AND a.blockhour = atok.hour +LEFT OUTER JOIN +{{ref('ethereum__token_prices_hourly')}} aave +ON aave.token_address = LOWER('0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9') AND a.blockhour = aave.hour +ORDER BY underlying_contract, blockhour DESC \ No newline at end of file diff --git a/models/ethereum/aave/aave__proposals.sql b/models/ethereum/aave/aave__proposals.sql new file mode 100644 index 00000000..d78cd4a2 --- /dev/null +++ b/models/ethereum/aave/aave__proposals.sql @@ -0,0 +1,76 @@ +{{ + config( + materialized='incremental', + sort='block_id', + unique_key='proposal_tx || proposal_id', + incremental_strategy='delete+insert', + tags=['snowflake', 'ethereum', 'aave', 'aave_proposals'] + ) +}} + + +WITH + p AS ( + SELECT + block_id,block_timestamp,contract_address AS governance_contract,event_inputs:id::STRING AS proposal_id, + 'Created' AS status, + event_inputs:targets AS targets, + LOWER(event_inputs:creator::STRING) AS proposer, + tx_id, + event_inputs:endBlock::INTEGER AS end_voting_period, + event_inputs:startBlock::INTEGER AS start_voting_period, + CURRENT_DATE AS now + FROM {{ ref('ethereum__events_emitted') }} + WHERE + event_name = 'ProposalCreated' AND contract_address = '0xec568fffba86c094cf06b22134b23074dfe2252c' + +), q AS ( + SELECT DISTINCT + event_inputs:id::STRING AS id, + 'Queued' AS status + FROM {{ ref('ethereum__events_emitted') }} + WHERE + event_name = 'ProposalQueued' AND contract_address = '0xec568fffba86c094cf06b22134b23074dfe2252c' +), e AS ( + + SELECT DISTINCT + COALESCE(event_inputs:id::STRING,event_inputs:proposalId::STRING) AS id, + 'Executed' AS status + FROM {{ ref('ethereum__events_emitted') }} + WHERE + event_name = 'ProposalExecuted' AND contract_address = '0xec568fffba86c094cf06b22134b23074dfe2252c' + + +), c AS ( + SELECT CURRENT_DATE AS now,MAX(block_id) AS current_block + FROM ethereum.events_emitted WHERE block_timestamp >= CURRENT_DATE - 3 +) + + +SELECT + p.block_id, + p.start_voting_period, + p.end_voting_period, + p.block_timestamp, + p.governance_contract, + p.proposal_id, + CASE + WHEN c.current_block > p.end_voting_period AND e.status IS NULL AND q.status IS NULL THEN 'Failed' + ELSE COALESCE(e.status,q.status,p.status) END + AS status, + p.targets, + p.proposer, + p.tx_id AS proposal_tx, + 'ethereum' AS blockchain + FROM + p + LEFT OUTER JOIN + q + ON p.proposal_id = q.id + LEFT OUTER JOIN + e + ON p.proposal_id = e.id + LEFT OUTER JOIN + c + ON p.now = c.now + ORDER BY block_timestamp DESC \ No newline at end of file diff --git a/models/ethereum/aave/aave__repayments.sql b/models/ethereum/aave/aave__repayments.sql new file mode 100644 index 00000000..c9db2cbc --- /dev/null +++ b/models/ethereum/aave/aave__repayments.sql @@ -0,0 +1,220 @@ +{{ + config( + materialized='table', + unique_key='tx_id || event_index', + incremental_strategy='delete+insert', + tags=['snowflake', 'ethereum', 'aave', 'aave_repayments'] + ) +}} + + +WITH +atokens AS( + SELECT + inputs:_reserve::string AS reserve_token, + a.value::string AS balances, + CASE + WHEN contract_address IN( + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d')) THEN 'Aave V2' + WHEN contract_address IN( + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba')) THEN 'Aave AMM' + ELSE 'Aave V1' + END AS aave_version + FROM + {{ref('ethereum__reads')}} + ,lateral flatten(input => SPLIT(value_string,'^')) a + WHERE 1=1 + AND block_timestamp::date >= '2021-06-01' + AND contract_address IN ( + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d'), -- AAVE V2 Data Provider (per docs) + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), -- AAVE AMM Lending Pool (per docs) + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), -- AAVE V2 Lending Pool (per docs) + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba'), -- AAVE AMM Data Provider (per docs) + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119')) -- AAVE V1 +), + + +underlying AS( + SELECT + CASE + WHEN reserve_token = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE reserve_token END AS token_contract, + aave_version, + MAX( + CASE + WHEN SPLIT(balances,':')[0]::string = 'aTokenAddress' THEN SPLIT(balances,':')[1] + ELSE '' END) AS aave_token + FROM + atokens + WHERE 1=1 + GROUP BY 1,2 +), + + +-- implementing aave oracle prices denominated in wei +oracle AS( + SELECT + --block_timestamp, + date_trunc('hour',block_timestamp) AS block_hour, + inputs:address::string AS token_address, + AVG(value_numeric) AS value_ethereum -- values are given in wei and need to be converted to ethereum + FROM + {{ref('ethereum__reads')}} + WHERE 1=1 + AND contract_address = '0xa50ba011c48153de246e5192c8f9258a2ba79ca9' -- check if there is only one oracle + AND block_timestamp::date >= '2021-01-01' + GROUP BY 1,2 +), + +-- wen we don't have oracle pricces we use ethereum__token_prices_hourly as a backup +backup_prices AS( + SELECT + token_address, + hour, + decimals, + CASE WHEN symbol = 'KNCL' THEN 'KNC' ELSE symbol END AS symbol, + AVG(price) AS price -- table has duplicated rows for KNC / KNCL so we need to do a trick + FROM + {{ref('ethereum__token_prices_hourly')}} + WHERE 1=1 + AND hour::date >= '2021-01-01' + GROUP BY 1,2,3,4 +), + + +prices_hourly AS( + SELECT + underlying.aave_token, + underlying.token_contract, + underlying.aave_version, + (oracle.value_ethereum / POW(10,(18 - backup_prices.decimals))) * eth_prices.price AS oracle_price, + backup_prices.price AS backup_price, + oracle.block_hour AS oracle_hour, + backup_prices.hour AS backup_prices_hour, + eth_prices.price AS eth_price, + backup_prices.decimals AS decimals, + backup_prices.symbol + FROM + underlying + LEFT JOIN oracle + ON LOWER(underlying.token_contract) = LOWER(oracle.token_address) + LEFT JOIN backup_prices + ON LOWER(underlying.token_contract) = LOWER(backup_prices.token_address) + AND oracle.block_hour = backup_prices.hour + LEFT JOIN {{ref('ethereum__token_prices_hourly')}} eth_prices + ON oracle.block_hour = eth_prices.hour + AND eth_prices.hour::date >= '2021-01-01' + AND eth_prices.symbol = 'ETH' +), + + +coalesced_prices AS( + SELECT + prices_hourly.decimals AS decimals, + prices_hourly.symbol AS symbol, + prices_hourly.aave_token AS aave_token, + prices_hourly.token_contract AS token_contract, + prices_hourly.aave_version AS aave_version, + COALESCE(prices_hourly.oracle_price,prices_hourly.backup_price) AS coalesced_price, + COALESCE(prices_hourly.oracle_hour,prices_hourly.backup_prices_hour) AS coalesced_hour + FROM + prices_hourly +), + +-- daily avg price used when hourly price is missing (it happens a lot) +prices_daily_backup AS( + SELECT + token_address, + CASE WHEN symbol = 'KNCL' THEN 'KNC' ELSE symbol END AS symbol, + date_trunc('day',hour) AS block_date, + AVG(price) AS avg_daily_price, + MAX(decimals) AS decimals + FROM + backup_prices + WHERE 1=1 + GROUP BY 1,2,3 +), + +-- decimals backup +decimals_backup AS( + SELECT + address AS token_address, + meta:decimals AS decimals, + name + FROM + {{source('ethereum', 'ethereum_contracts')}} + WHERE 1=1 + AND meta:decimals IS NOT NULL +), + +--repayments to Aave LendingPool contract +repay AS( + SELECT + DISTINCT block_id, + block_timestamp, + event_index, + CASE + WHEN COALESCE(event_inputs:reserve::string,event_inputs:_reserve::string) = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE COALESCE(event_inputs:reserve::string,event_inputs:_reserve::string) + END AS aave_market, + COALESCE(event_inputs:amount,event_inputs:_amountMinusFees) AS repayed_amount, --not adjusted for decimals + tx_from_address AS repayer_address, + COALESCE(event_inputs:owner::string,event_inputs:_user::string) AS borrower_address, + tx_to_address AS lending_pool_contract, + tx_id, + CASE + WHEN contract_address = LOWER('0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9') THEN 'Aave V2' + WHEN contract_address = LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119') THEN 'Aave V1' + WHEN contract_address = LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb') THEN 'Aave AMM' + ELSE 'ERROR' END AS aave_version + FROM + {{ref('ethereum__events_emitted')}} + WHERE 1=1 + AND block_timestamp::date >= '2021-01-01' + AND contract_address IN(--Aave V2 LendingPool contract address + LOWER('0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9'),--V2 + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119'),--V1 + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'))--AMM + AND event_name = 'Repay' --this is a repayment + AND tx_succeeded = TRUE --excludes failed txs +) + + +SELECT + repay.tx_id, + repay.block_id, + repay.block_timestamp, + repay.event_index, + LOWER(repay.aave_market) AS aave_market, + LOWER(underlying.aave_token) AS aave_token, + repay.repayed_amount / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS repayed_atokens, + repay.repayed_amount * COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS repayed_amount_usd, + repay.repayer_address AS payer, + repay.borrower_address AS borrower, + LOWER(repay.lending_pool_contract) AS lending_pool_contract, + repay.aave_version, + COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) AS token_price, + COALESCE(coalesced_prices.symbol,backup_prices.symbol,prices_daily_backup.symbol) AS symbol +FROM + repay + LEFT JOIN coalesced_prices + ON LOWER(repay.aave_market) = LOWER(coalesced_prices.token_contract) + AND repay.aave_version = coalesced_prices.aave_version + AND date_trunc('hour',repay.block_timestamp) = coalesced_prices.coalesced_hour + LEFT JOIN backup_prices + ON LOWER(repay.aave_market) = LOWER(backup_prices.token_address) + AND date_trunc('hour',repay.block_timestamp) = backup_prices.hour + LEFT JOIN prices_daily_backup + ON LOWER(repay.aave_market) = LOWER(prices_daily_backup.token_address) + AND date_trunc('day',repay.block_timestamp) = prices_daily_backup.block_date + LEFT JOIN underlying + ON LOWER(repay.aave_market) = LOWER(underlying.token_contract) + AND repay.aave_version = underlying.aave_version + LEFT JOIN decimals_backup + ON LOWER(repay.aave_market) = LOWER(decimals_backup.token_address) diff --git a/models/ethereum/aave/aave__votes.sql b/models/ethereum/aave/aave__votes.sql new file mode 100644 index 00000000..838fbd0d --- /dev/null +++ b/models/ethereum/aave/aave__votes.sql @@ -0,0 +1,25 @@ +{{ + config( + materialized='incremental', + sort='block_id', + unique_key='tx_id || voter', + incremental_strategy='delete+insert', + tags=['snowflake', 'ethereum', 'aave', 'aave_votes'] + ) +}} + + + + +SELECT block_id, + block_timestamp, + contract_address AS governance_contract, + event_inputs:id::NUMERIC AS proposal_id, + event_inputs:support::STRING AS support, + event_inputs:votingPower::NUMERIC AS voting_power, + LOWER(event_inputs:voter::STRING) AS voter, + tx_id, + 'ethereum' AS blockchain +FROM {{ ref('ethereum__events_emitted') }} +WHERE +event_name = 'VoteEmitted' AND contract_address = '0xec568fffba86c094cf06b22134b23074dfe2252c' \ No newline at end of file diff --git a/models/ethereum/aave/aave__withdraws.sql b/models/ethereum/aave/aave__withdraws.sql new file mode 100644 index 00000000..1fe76422 --- /dev/null +++ b/models/ethereum/aave/aave__withdraws.sql @@ -0,0 +1,217 @@ +{{ + config( + materialized='table', + unique_key='tx_id || event_index', + incremental_strategy='delete+insert', + tags=['snowflake', 'ethereum', 'aave', 'aave_withdraws'] + ) +}} + + +WITH +atokens AS( + SELECT + inputs:_reserve::string AS reserve_token, + a.value::string AS balances, + CASE + WHEN contract_address IN( + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d')) THEN 'Aave V2' + WHEN contract_address IN( + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba')) THEN 'Aave AMM' + ELSE 'Aave V1' + END AS aave_version + FROM + {{ref('ethereum__reads')}} + ,lateral flatten(input => SPLIT(value_string,'^')) a + WHERE 1=1 + AND block_timestamp::date >= '2021-06-01' + AND contract_address IN ( + LOWER('0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d'), -- AAVE V2 Data Provider (per docs) + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'), -- AAVE AMM Lending Pool (per docs) + LOWER('0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9'), -- AAVE V2 Lending Pool (per docs) + LOWER('0xc443AD9DDE3cecfB9dfC5736578f447aFE3590ba'), -- AAVE AMM Data Provider (per docs) + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119')) -- AAVE V1 +), + + +underlying AS( + SELECT + CASE + WHEN reserve_token = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE reserve_token END AS token_contract, + aave_version, + MAX( + CASE + WHEN SPLIT(balances,':')[0]::string = 'aTokenAddress' THEN SPLIT(balances,':')[1] + ELSE '' END) AS aave_token + FROM + atokens + WHERE 1=1 + GROUP BY 1,2 +), + + +-- implementing aave oracle prices denominated in wei +oracle AS( + SELECT + --block_timestamp, + date_trunc('hour',block_timestamp) AS block_hour, + inputs:address::string AS token_address, + AVG(value_numeric) AS value_ethereum -- values are given in wei and need to be converted to ethereum + FROM + {{ref('ethereum__reads')}} + WHERE 1=1 + AND contract_address = '0xa50ba011c48153de246e5192c8f9258a2ba79ca9' -- check if there is only one oracle + AND block_timestamp::date >= '2021-01-01' + GROUP BY 1,2 +), + +-- wen we don't have oracle pricces we use ethereum__token_prices_hourly as a backup +backup_prices AS( + SELECT + token_address, + hour, + decimals, + CASE WHEN symbol = 'KNCL' THEN 'KNC' ELSE symbol END AS symbol, + AVG(price) AS price -- table has duplicated rows for KNC / KNCL so we need to do a trick + FROM + {{ref('ethereum__token_prices_hourly')}} + WHERE 1=1 + AND hour::date >= '2021-01-01' + GROUP BY 1,2,3,4 +), + + +prices_hourly AS( + SELECT + underlying.aave_token, + underlying.token_contract, + underlying.aave_version, + (oracle.value_ethereum / POW(10,(18 - backup_prices.decimals))) * eth_prices.price AS oracle_price, + backup_prices.price AS backup_price, + oracle.block_hour AS oracle_hour, + backup_prices.hour AS backup_prices_hour, + eth_prices.price AS eth_price, + backup_prices.decimals AS decimals, + backup_prices.symbol + FROM + underlying + LEFT JOIN oracle + ON LOWER(underlying.token_contract) = LOWER(oracle.token_address) + LEFT JOIN backup_prices + ON LOWER(underlying.token_contract) = LOWER(backup_prices.token_address) + AND oracle.block_hour = backup_prices.hour + LEFT JOIN {{ref('ethereum__token_prices_hourly')}} eth_prices + ON oracle.block_hour = eth_prices.hour + AND eth_prices.hour::date >= '2021-01-01' + AND eth_prices.symbol = 'ETH' +), + + +coalesced_prices AS( + SELECT + prices_hourly.decimals AS decimals, + prices_hourly.symbol AS symbol, + prices_hourly.aave_token AS aave_token, + prices_hourly.token_contract AS token_contract, + prices_hourly.aave_version AS aave_version, + COALESCE(prices_hourly.oracle_price,prices_hourly.backup_price) AS coalesced_price, + COALESCE(prices_hourly.oracle_hour,prices_hourly.backup_prices_hour) AS coalesced_hour + FROM + prices_hourly +), + +-- daily avg price used when hourly price is missing (it happens a lot) +prices_daily_backup AS( + SELECT + token_address, + CASE WHEN symbol = 'KNCL' THEN 'KNC' ELSE symbol END AS symbol, + date_trunc('day',hour) AS block_date, + AVG(price) AS avg_daily_price, + MAX(decimals) AS decimals + FROM + backup_prices + WHERE 1=1 + GROUP BY 1,2,3 +), + +-- decimals backup +decimals_backup AS( + SELECT + address AS token_address, + meta:decimals AS decimals, + name + FROM + {{source('ethereum', 'ethereum_contracts')}} + WHERE 1=1 + AND meta:decimals IS NOT NULL +), + +--withdraws to Aave LendingPool contract +withdraw AS(--does not retrieve Aave V1 + SELECT + DISTINCT block_id, + block_timestamp, + event_index, + CASE + WHEN COALESCE(event_inputs:token::string,event_inputs:_reserve::string) = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + THEN '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + ELSE COALESCE(event_inputs:token::string,event_inputs:_reserve::string) + END AS aave_market, + COALESCE(event_inputs:amount,event_inputs:_amount) AS withdraw_amount, --not adjusted for decimals + COALESCE(event_inputs:to::string,event_inputs:_user::string) AS depositor, + tx_to_address AS lending_pool_contract, + tx_id, + CASE + WHEN contract_address = LOWER('0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9') THEN 'Aave V2' + WHEN contract_address = LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119') THEN 'Aave V1' + WHEN contract_address = LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb') THEN 'Aave AMM' + ELSE 'ERROR' END AS aave_version + FROM + {{ref('ethereum__events_emitted')}} + WHERE 1=1 + AND block_timestamp::date >= '2021-01-01' + AND contract_address IN(--Aave V2 LendingPool contract address + LOWER('0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9'),--V2 + LOWER('0x398eC7346DcD622eDc5ae82352F02bE94C62d119'),--V1 + LOWER('0x7937d4799803fbbe595ed57278bc4ca21f3bffcb'))--AMM + AND event_name IN('Withdraw','RedeemUnderlying') --this is a withdraw + AND tx_succeeded = TRUE --excludes failed txs +) + + +SELECT + withdraw.tx_id, + withdraw.block_id, + withdraw.block_timestamp, + withdraw.event_index, + LOWER(withdraw.aave_market) AS aave_market, + LOWER(underlying.aave_token) AS aave_token, + withdraw.withdraw_amount / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS withdrawn_atokens, + withdraw.withdraw_amount * COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) / + POW(10,COALESCE(coalesced_prices.decimals,backup_prices.decimals,prices_daily_backup.decimals,decimals_backup.decimals,18)) AS withdrawn_usd, + LOWER(withdraw.depositor) AS depositor_address, + withdraw.aave_version, + COALESCE(coalesced_prices.coalesced_price,backup_prices.price,prices_daily_backup.avg_daily_price) AS token_price, + COALESCE(coalesced_prices.symbol,backup_prices.symbol,prices_daily_backup.symbol) AS symbol +FROM + withdraw + LEFT JOIN coalesced_prices + ON LOWER(withdraw.aave_market) = LOWER(coalesced_prices.token_contract) + AND withdraw.aave_version = coalesced_prices.aave_version + AND date_trunc('hour',withdraw.block_timestamp) = coalesced_prices.coalesced_hour + LEFT JOIN backup_prices + ON LOWER(withdraw.aave_market) = LOWER(backup_prices.token_address) + AND date_trunc('hour',withdraw.block_timestamp) = backup_prices.hour + LEFT JOIN prices_daily_backup + ON LOWER(withdraw.aave_market) = LOWER(prices_daily_backup.token_address) + AND date_trunc('day',withdraw.block_timestamp) = prices_daily_backup.block_date + LEFT JOIN underlying + ON LOWER(withdraw.aave_market) = LOWER(underlying.token_contract) + AND withdraw.aave_version = underlying.aave_version + LEFT JOIN decimals_backup + ON LOWER(withdraw.aave_market) = LOWER(decimals_backup.token_address) diff --git a/models/ethereum/compound/compound__borrows.sql b/models/ethereum/compound/compound__borrows.sql index 4e77912b..78650d07 100644 --- a/models/ethereum/compound/compound__borrows.sql +++ b/models/ethereum/compound/compound__borrows.sql @@ -24,6 +24,12 @@ WITH ctoks as ( WHEN contract_address = '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9' THEN 'cUSDT' WHEN contract_address = '0xc11b1268c1a384e55c48c2391d8d480264a3a7f4' THEN 'cWBTC' WHEN contract_address = '0xccf4429db6322d5c611ee964527d42e5d685dd6a' THEN 'cWBTC2' + WHEN contract_address = '0xe65cdb6479bac1e22340e4e755fae7e509ecd06c' THEN 'cAAVE' + WHEN contract_address = '0xface851a4921ce59e912d19329929ce6da6eb0c7' THEN 'cLINK' + WHEN contract_address = '0x95b4ef2869ebd94beb4eee400a99824bf5dc325b' THEN 'cMKR' + WHEN contract_address = '0x4b0181102a0112a2ef11abee5563bb4a3176c9d7' THEN 'cSUSHI' + WHEN contract_address = '0x80a2ae356fc9ef4305676f7a3e2ed04e12c33946' THEN 'cYFI' + WHEN contract_address = '0x12392f67bdf24fae0af363c24ac620a2f67dad86' THEN 'cTUSD' WHEN contract_address = '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407' THEN 'cZRX' end project_name FROM {{ref('ethereum__events_emitted')}} WHERE contract_address in ( @@ -38,7 +44,13 @@ WITH ctoks as ( '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9', -- cusdt '0xc11b1268c1a384e55c48c2391d8d480264a3a7f4', -- cwbtc '0xccf4429db6322d5c611ee964527d42e5d685dd6a', -- cwbtc2 - '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407' -- czrx + '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407', -- czrx + '0xe65cdb6479bac1e22340e4e755fae7e509ecd06c', -- caave + '0xface851a4921ce59e912d19329929ce6da6eb0c7', -- clink + '0x95b4ef2869ebd94beb4eee400a99824bf5dc325b', -- cmkr + '0x4b0181102a0112a2ef11abee5563bb4a3176c9d7', -- csushi + '0x80a2ae356fc9ef4305676f7a3e2ed04e12c33946', -- cyfi + '0x12392f67bdf24fae0af363c24ac620a2f67dad86' -- ctusd ) AND block_timestamp > getdate() - interval '31 days' ), diff --git a/models/ethereum/compound/compound__deposits.sql b/models/ethereum/compound/compound__deposits.sql index ac3837af..821fe32b 100644 --- a/models/ethereum/compound/compound__deposits.sql +++ b/models/ethereum/compound/compound__deposits.sql @@ -24,6 +24,12 @@ WITH ctoks as ( WHEN contract_address = '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9' THEN 'cUSDT' WHEN contract_address = '0xc11b1268c1a384e55c48c2391d8d480264a3a7f4' THEN 'cWBTC' WHEN contract_address = '0xccf4429db6322d5c611ee964527d42e5d685dd6a' THEN 'cWBTC2' + WHEN contract_address = '0xe65cdb6479bac1e22340e4e755fae7e509ecd06c' THEN 'cAAVE' + WHEN contract_address = '0xface851a4921ce59e912d19329929ce6da6eb0c7' THEN 'cLINK' + WHEN contract_address = '0x95b4ef2869ebd94beb4eee400a99824bf5dc325b' THEN 'cMKR' + WHEN contract_address = '0x4b0181102a0112a2ef11abee5563bb4a3176c9d7' THEN 'cSUSHI' + WHEN contract_address = '0x80a2ae356fc9ef4305676f7a3e2ed04e12c33946' THEN 'cYFI' + WHEN contract_address = '0x12392f67bdf24fae0af363c24ac620a2f67dad86' THEN 'cTUSD' WHEN contract_address = '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407' THEN 'cZRX' end project_name FROM {{ref('ethereum__events_emitted')}} WHERE contract_address in ( @@ -38,7 +44,13 @@ WITH ctoks as ( '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9', -- cusdt '0xc11b1268c1a384e55c48c2391d8d480264a3a7f4', -- cwbtc '0xccf4429db6322d5c611ee964527d42e5d685dd6a', -- cwbtc2 - '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407' -- czrx + '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407', -- czrx + '0xe65cdb6479bac1e22340e4e755fae7e509ecd06c', -- caave + '0xface851a4921ce59e912d19329929ce6da6eb0c7', -- clink + '0x95b4ef2869ebd94beb4eee400a99824bf5dc325b', -- cmkr + '0x4b0181102a0112a2ef11abee5563bb4a3176c9d7', -- csushi + '0x80a2ae356fc9ef4305676f7a3e2ed04e12c33946', -- cyfi + '0x12392f67bdf24fae0af363c24ac620a2f67dad86' -- ctusd ) AND block_timestamp > getdate() - interval '31 days' ), diff --git a/models/ethereum/compound/compound__liquidations.sql b/models/ethereum/compound/compound__liquidations.sql index 9238597e..3f5c6fdc 100644 --- a/models/ethereum/compound/compound__liquidations.sql +++ b/models/ethereum/compound/compound__liquidations.sql @@ -11,7 +11,7 @@ -- pull all ctoken addresses and corresponding name WITH ctoks as ( - SELECT + SELECT DISTINCT contract_address as address, CASE WHEN contract_address = '0x6c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e' THEN 'cBAT' WHEN contract_address = '0x70e36f6bf80a52b3b46b3af8e106cc0ed743e8e4' THEN 'cCOMP' @@ -24,6 +24,12 @@ WITH ctoks as ( WHEN contract_address = '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9' THEN 'cUSDT' WHEN contract_address = '0xc11b1268c1a384e55c48c2391d8d480264a3a7f4' THEN 'cWBTC' WHEN contract_address = '0xccf4429db6322d5c611ee964527d42e5d685dd6a' THEN 'cWBTC2' + WHEN contract_address = '0xe65cdb6479bac1e22340e4e755fae7e509ecd06c' THEN 'cAAVE' + WHEN contract_address = '0xface851a4921ce59e912d19329929ce6da6eb0c7' THEN 'cLINK' + WHEN contract_address = '0x95b4ef2869ebd94beb4eee400a99824bf5dc325b' THEN 'cMKR' + WHEN contract_address = '0x4b0181102a0112a2ef11abee5563bb4a3176c9d7' THEN 'cSUSHI' + WHEN contract_address = '0x80a2ae356fc9ef4305676f7a3e2ed04e12c33946' THEN 'cYFI' + WHEN contract_address = '0x12392f67bdf24fae0af363c24ac620a2f67dad86' THEN 'cTUSD' WHEN contract_address = '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407' THEN 'cZRX' end project_name FROM {{ref('ethereum__events_emitted')}} WHERE contract_address in ( @@ -38,7 +44,13 @@ WITH ctoks as ( '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9', -- cusdt '0xc11b1268c1a384e55c48c2391d8d480264a3a7f4', -- cwbtc '0xccf4429db6322d5c611ee964527d42e5d685dd6a', -- cwbtc2 - '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407' -- czrx + '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407', -- czrx + '0xe65cdb6479bac1e22340e4e755fae7e509ecd06c', -- caave + '0xface851a4921ce59e912d19329929ce6da6eb0c7', -- clink + '0x95b4ef2869ebd94beb4eee400a99824bf5dc325b', -- cmkr + '0x4b0181102a0112a2ef11abee5563bb4a3176c9d7', -- csushi + '0x80a2ae356fc9ef4305676f7a3e2ed04e12c33946', -- cyfi + '0x12392f67bdf24fae0af363c24ac620a2f67dad86' -- ctusd ) AND block_timestamp > getdate() - interval '31 days' ), diff --git a/models/ethereum/compound/compound__market_stats.sql b/models/ethereum/compound/compound__market_stats.sql index 139e3618..f9da549e 100644 --- a/models/ethereum/compound/compound__market_stats.sql +++ b/models/ethereum/compound/compound__market_stats.sql @@ -24,6 +24,12 @@ WITH ctoks as ( WHEN contract_address = '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9' THEN 'cUSDT' WHEN contract_address = '0xc11b1268c1a384e55c48c2391d8d480264a3a7f4' THEN 'cWBTC' WHEN contract_address = '0xccf4429db6322d5c611ee964527d42e5d685dd6a' THEN 'cWBTC2' + WHEN contract_address = '0xe65cdb6479bac1e22340e4e755fae7e509ecd06c' THEN 'cAAVE' + WHEN contract_address = '0xface851a4921ce59e912d19329929ce6da6eb0c7' THEN 'cLINK' + WHEN contract_address = '0x95b4ef2869ebd94beb4eee400a99824bf5dc325b' THEN 'cMKR' + WHEN contract_address = '0x4b0181102a0112a2ef11abee5563bb4a3176c9d7' THEN 'cSUSHI' + WHEN contract_address = '0x80a2ae356fc9ef4305676f7a3e2ed04e12c33946' THEN 'cYFI' + WHEN contract_address = '0x12392f67bdf24fae0af363c24ac620a2f67dad86' THEN 'cTUSD' WHEN contract_address = '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407' THEN 'cZRX' end project_name FROM {{ref('ethereum__events_emitted')}} WHERE contract_address in ( @@ -38,7 +44,13 @@ WITH ctoks as ( '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9', -- cusdt '0xc11b1268c1a384e55c48c2391d8d480264a3a7f4', -- cwbtc '0xccf4429db6322d5c611ee964527d42e5d685dd6a', -- cwbtc2 - '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407' -- czrx + '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407', -- czrx + '0xe65cdb6479bac1e22340e4e755fae7e509ecd06c', -- caave + '0xface851a4921ce59e912d19329929ce6da6eb0c7', -- clink + '0x95b4ef2869ebd94beb4eee400a99824bf5dc325b', -- cmkr + '0x4b0181102a0112a2ef11abee5563bb4a3176c9d7', -- csushi + '0x80a2ae356fc9ef4305676f7a3e2ed04e12c33946', -- cyfi + '0x12392f67bdf24fae0af363c24ac620a2f67dad86' -- ctusd ) AND block_timestamp > getdate() - interval '31 days' ), diff --git a/models/ethereum/compound/compound__redemptions.sql b/models/ethereum/compound/compound__redemptions.sql index d2211335..747ad759 100644 --- a/models/ethereum/compound/compound__redemptions.sql +++ b/models/ethereum/compound/compound__redemptions.sql @@ -24,6 +24,12 @@ WITH ctoks as ( WHEN contract_address = '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9' THEN 'cUSDT' WHEN contract_address = '0xc11b1268c1a384e55c48c2391d8d480264a3a7f4' THEN 'cWBTC' WHEN contract_address = '0xccf4429db6322d5c611ee964527d42e5d685dd6a' THEN 'cWBTC2' + WHEN contract_address = '0xe65cdb6479bac1e22340e4e755fae7e509ecd06c' THEN 'cAAVE' + WHEN contract_address = '0xface851a4921ce59e912d19329929ce6da6eb0c7' THEN 'cLINK' + WHEN contract_address = '0x95b4ef2869ebd94beb4eee400a99824bf5dc325b' THEN 'cMKR' + WHEN contract_address = '0x4b0181102a0112a2ef11abee5563bb4a3176c9d7' THEN 'cSUSHI' + WHEN contract_address = '0x80a2ae356fc9ef4305676f7a3e2ed04e12c33946' THEN 'cYFI' + WHEN contract_address = '0x12392f67bdf24fae0af363c24ac620a2f67dad86' THEN 'cTUSD' WHEN contract_address = '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407' THEN 'cZRX' end project_name FROM {{ref('ethereum__events_emitted')}} WHERE contract_address in ( @@ -38,7 +44,13 @@ WITH ctoks as ( '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9', -- cusdt '0xc11b1268c1a384e55c48c2391d8d480264a3a7f4', -- cwbtc '0xccf4429db6322d5c611ee964527d42e5d685dd6a', -- cwbtc2 - '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407' -- czrx + '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407', -- czrx + '0xe65cdb6479bac1e22340e4e755fae7e509ecd06c', -- caave + '0xface851a4921ce59e912d19329929ce6da6eb0c7', -- clink + '0x95b4ef2869ebd94beb4eee400a99824bf5dc325b', -- cmkr + '0x4b0181102a0112a2ef11abee5563bb4a3176c9d7', -- csushi + '0x80a2ae356fc9ef4305676f7a3e2ed04e12c33946', -- cyfi + '0x12392f67bdf24fae0af363c24ac620a2f67dad86' -- ctusd ) AND block_timestamp > getdate() - interval '31 days' ), diff --git a/models/ethereum/compound/compound__repayments.sql b/models/ethereum/compound/compound__repayments.sql index 8ed48713..52d84407 100644 --- a/models/ethereum/compound/compound__repayments.sql +++ b/models/ethereum/compound/compound__repayments.sql @@ -24,6 +24,12 @@ WITH ctoks as ( WHEN contract_address = '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9' THEN 'cUSDT' WHEN contract_address = '0xc11b1268c1a384e55c48c2391d8d480264a3a7f4' THEN 'cWBTC' WHEN contract_address = '0xccf4429db6322d5c611ee964527d42e5d685dd6a' THEN 'cWBTC2' + WHEN contract_address = '0xe65cdb6479bac1e22340e4e755fae7e509ecd06c' THEN 'cAAVE' + WHEN contract_address = '0xface851a4921ce59e912d19329929ce6da6eb0c7' THEN 'cLINK' + WHEN contract_address = '0x95b4ef2869ebd94beb4eee400a99824bf5dc325b' THEN 'cMKR' + WHEN contract_address = '0x4b0181102a0112a2ef11abee5563bb4a3176c9d7' THEN 'cSUSHI' + WHEN contract_address = '0x80a2ae356fc9ef4305676f7a3e2ed04e12c33946' THEN 'cYFI' + WHEN contract_address = '0x12392f67bdf24fae0af363c24ac620a2f67dad86' THEN 'cTUSD' WHEN contract_address = '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407' THEN 'cZRX' end project_name FROM {{ref('ethereum__events_emitted')}} WHERE contract_address in ( @@ -38,7 +44,13 @@ WITH ctoks as ( '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9', -- cusdt '0xc11b1268c1a384e55c48c2391d8d480264a3a7f4', -- cwbtc '0xccf4429db6322d5c611ee964527d42e5d685dd6a', -- cwbtc2 - '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407' -- czrx + '0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407', -- czrx + '0xe65cdb6479bac1e22340e4e755fae7e509ecd06c', -- caave + '0xface851a4921ce59e912d19329929ce6da6eb0c7', -- clink + '0x95b4ef2869ebd94beb4eee400a99824bf5dc325b', -- cmkr + '0x4b0181102a0112a2ef11abee5563bb4a3176c9d7', -- csushi + '0x80a2ae356fc9ef4305676f7a3e2ed04e12c33946', -- cyfi + '0x12392f67bdf24fae0af363c24ac620a2f67dad86' -- ctusd ) AND block_timestamp > getdate() - interval '31 days' ), diff --git a/models/ethereum/dex/ethereum__dex_swaps.sql b/models/ethereum/dex/ethereum__dex_swaps.sql index 9090d274..d47c0702 100644 --- a/models/ethereum/dex/ethereum__dex_swaps.sql +++ b/models/ethereum/dex/ethereum__dex_swaps.sql @@ -37,7 +37,7 @@ WITH decimals_raw as ( decimals IS NOT NULL ), decimals AS ( - SELECT token_address,decimals + SELECT token_address,decimals,weight FROM decimals_raw QUALIFY (row_number() OVER (partition by token_address order by weight desc)) = 1 ), @@ -48,13 +48,16 @@ WITH decimals_raw as ( p.pool_name, p.token0 AS token_address, tx_id, - event_inputs:amount0In / POWER(10, d.decimals) AS amount_in, - event_inputs:amount0Out / POWER(10, d.decimals) AS amount_out, + event_inputs:amount0In / POWER(10, d0.decimals) AS amount_in, + event_inputs:amount0Out / POWER(10, d0.decimals) AS amount_out, REGEXP_REPLACE(event_inputs:sender,'\"','') AS from_address, REGEXP_REPLACE(event_inputs:to,'\"','') AS to_address, - CASE WHEN event_inputs:amount0In > 0 THEN event_inputs:amount0In * price0.price / POWER(10, d.decimals) - ELSE event_inputs:amount0Out * price0.price / POWER(10, d.decimals) END + CASE WHEN event_inputs:amount0In > 0 THEN event_inputs:amount0In * price0.price / POWER(10, d0.decimals) + ELSE event_inputs:amount0Out * price0.price / POWER(10, d0.decimals) END AS amount_usd, + --CASE WHEN event_inputs:amount1In > 0 THEN event_inputs:amount1In * price1.price / POWER(10, d1.decimals) + -- ELSE event_inputs:amount1Out * price1.price / POWER(10, d1.decimals) END + --AS other_amount_usd, CASE WHEN p.factory_address = '0xc0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac' THEN 'sushiswap' ELSE 'uniswap-v2' END AS platform, event_index, CASE WHEN event_inputs:amount0In > 0 THEN 'IN' @@ -67,8 +70,14 @@ WITH decimals_raw as ( LEFT JOIN {{ref('ethereum__token_prices_hourly')}} price0 ON p.token0 = price0.token_address AND DATE_TRUNC('hour',s0.block_timestamp) = price0.hour - LEFT JOIN decimals d - ON p.token0 = d.token_address + LEFT JOIN decimals d0 + ON p.token0 = d0.token_address + + --LEFT JOIN {{ref('ethereum__token_prices_hourly')}} price1 + -- ON p.token1 = price1.token_address AND DATE_TRUNC('hour',s0.block_timestamp) = price0.hour + + --LEFT JOIN decimals d1 + -- ON p.token1 = d1.token_address WHERE event_name = 'Swap' AND platform <> 'uniswap-v3' @@ -86,13 +95,16 @@ WITH decimals_raw as ( p.pool_name, p.token1 AS token_address, tx_id, - event_inputs:amount1In / POWER(10, d.decimals) AS amount_in, - event_inputs:amount1Out / POWER(10, d.decimals) AS amount_out, + event_inputs:amount1In / POWER(10, d1.decimals) AS amount_in, + event_inputs:amount1Out / POWER(10, d1.decimals) AS amount_out, REGEXP_REPLACE(event_inputs:sender,'\"','') AS from_address, REGEXP_REPLACE(event_inputs:to,'\"','') AS to_address, - CASE WHEN event_inputs:amount1In > 0 THEN event_inputs:amount1In * price1.price / POWER(10, d.decimals) - ELSE event_inputs:amount1Out * price1.price / POWER(10, d.decimals) END + CASE WHEN event_inputs:amount1In > 0 THEN event_inputs:amount1In * price1.price / POWER(10, d1.decimals) + ELSE event_inputs:amount1Out * price1.price / POWER(10, d1.decimals) END AS amount_usd, + -- CASE WHEN event_inputs:amount1In > 0 THEN event_inputs:amount1In * price1.price / POWER(10, d1.decimals) + -- ELSE event_inputs:amount1Out * price1.price / POWER(10, d1.decimals) END + --AS other_amount_usd, CASE WHEN p.factory_address = '0xc0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac' THEN 'sushiswap' ELSE 'uniswap-v2' END AS platform, event_index, CASE WHEN event_inputs:amount1In > 0 THEN 'IN' @@ -103,12 +115,18 @@ WITH decimals_raw as ( LEFT JOIN {{ref('ethereum__dex_liquidity_pools')}} p ON s0.contract_address = p.pool_address - LEFT JOIN {{ref('ethereum__token_prices_hourly')}} price1 + --LEFT JOIN {{ref('ethereum__token_prices_hourly')}} price0 + -- ON p.token0 = price0.token_address AND DATE_TRUNC('hour',s0.block_timestamp) = price0.hour + + --LEFT JOIN decimals d0 + -- ON p.token0 = d0.token_address + + LEFT JOIN {{ref('ethereum__token_prices_hourly')}} price1 ON p.token1 = price1.token_address AND DATE_TRUNC('hour',s0.block_timestamp) = price1.hour - LEFT JOIN decimals d - ON p.token0 = d.token_address - + LEFT JOIN decimals d1 + ON p.token1 = d1.token_address + WHERE event_name = 'Swap' AND platform <> 'uniswap-v3' @@ -173,8 +191,22 @@ WITH decimals_raw as ( WHERE (amount1_adjusted > 0 OR amount0_adjusted > 0) AND platform = 'uniswap-v3' ) -SELECT * +SELECT + block_timestamp,pool_address, + pool_name, + token_address, + tx_id, + amount_in,amount_out, + from_address, + to_address, + -- CASE WHEN ((amount_usd - other_amount_usd) / amount_usd) > .15 THEN other_amount_usd + -- ELSE amount_usd END AS amount_usd, + amount_usd, + platform, + event_index, + direction FROM usd_swaps +WHERE pool_address NOT IN ('0xdc6a5faf34affccc6a00d580ecb3308fc1848f22') -- stop-gap for big price swings, the actual solution adds an enormous amount of runtime UNION diff --git a/models/ethereum/ethereum__token_prices_hourly.sql b/models/ethereum/ethereum__token_prices_hourly.sql index e2eb4723..30c17fb0 100644 --- a/models/ethereum/ethereum__token_prices_hourly.sql +++ b/models/ethereum/ethereum__token_prices_hourly.sql @@ -33,4 +33,4 @@ WHERE AND recorded_at >= '2020-05-05'::timestamp {% endif %} -GROUP BY p.symbol, hour, token_address, d.decimals +GROUP BY 1,2,3,4 diff --git a/models/ethereum/ethereum__token_prices_hourly_v2.sql b/models/ethereum/ethereum__token_prices_hourly_v2.sql index e2eb4723..30c17fb0 100644 --- a/models/ethereum/ethereum__token_prices_hourly_v2.sql +++ b/models/ethereum/ethereum__token_prices_hourly_v2.sql @@ -33,4 +33,4 @@ WHERE AND recorded_at >= '2020-05-05'::timestamp {% endif %} -GROUP BY p.symbol, hour, token_address, d.decimals +GROUP BY 1,2,3,4 diff --git a/models/ethereum/ethereum__udm_events.sql b/models/ethereum/ethereum__udm_events.sql index ac67c935..5679d251 100644 --- a/models/ethereum/ethereum__udm_events.sql +++ b/models/ethereum/ethereum__udm_events.sql @@ -78,20 +78,22 @@ WITH token_prices AS ( {% endif %} ), originator AS ( - SELECT DISTINCT - tx_id, - from_address as origin_address, - from_label_type as origin_label_type, - from_label_subtype as origin_label_subtype, - from_label as origin_label, - from_address_name as origin_address_name, - input_method as origin_function_signature, + SELECT + tx_hash as tx_id, + t.from_address as origin_address, + from_labels.l1_label as origin_label_type, + from_labels.l2_label as origin_label_subtype, + from_labels.project_name as origin_label, + from_labels.address_name as origin_address_name, + t.input_method as origin_function_signature, f.text_signature as origin_function_name - FROM events e + FROM {{source('ethereum', 'ethereum_transactions') }} t LEFT OUTER JOIN {{ source('ethereum', 'sha256_function_signatures') }} as f - ON e.input_method = f.hex_signature AND f.importance = 1 - WHERE (e.event_id IS NULL AND e.contract_address IS NULL AND e.eth_value = 0) OR e.fee > 0 + ON t.input_method = f.hex_signature AND f.importance = 1 + LEFT OUTER JOIN + silver.ethereum_address_labels as from_labels + ON t.from_address = from_labels.address ), full_events AS ( SELECT diff --git a/models/polygon/polygon__events_emitted.sql b/models/polygon/polygon__events_emitted.sql new file mode 100644 index 00000000..4f3540bf --- /dev/null +++ b/models/polygon/polygon__events_emitted.sql @@ -0,0 +1,58 @@ +{{ + config( + materialized='incremental', + unique_key='block_id || tx_id || event_index', + incremental_strategy='delete+insert', + cluster_by=['block_id','block_timestamp'], + tags=['snowflake', 'polygon', 'polygon_events_emitted_gold'] + ) +}} + +with poly_labels AS ( + SELECT + l1_label, + l2_label, + project_name, + address_name, + address + FROM + {{ source('shared','udm_address_labels_new') }} + WHERE + blockchain = 'polygon' +) +SELECT + BLOCK_ID AS block_id, + BLOCK_TIMESTAMP AS block_timestamp, + TX_ID AS tx_id, + EVENT_INDEX AS event_index, + EVENT_INPUTS AS event_inputs, + EVENT_NAME AS event_name, + EVENT_REMOVED AS event_removed, + TX_FROM AS tx_from_address, + from_labels.l1_label as tx_from_label_type, + from_labels.l2_label as tx_from_label_subtype, + from_labels.project_name as tx_from_label, + from_labels.address_name as tx_from_address_name, + TX_TO AS tx_to_address, + to_labels.l1_label as tx_to_label_type, + to_labels.l2_label as tx_to_label_subtype, + to_labels.project_name as tx_to_label, + to_labels.address_name as tx_to_address_name, + CONTRACT_ADDRESS AS contract_address, + COALESCE(contract_labels.address_name,CONTRACT_NAME) AS contract_name, + TX_SUCCEEDED AS tx_succeeded +FROM {{ source('silver_polygon', 'events_emitted') }} b + +LEFT OUTER JOIN poly_labels as from_labels + ON b.TX_FROM = from_labels.address + +LEFT OUTER JOIN poly_labels as to_labels + ON b.TX_TO = to_labels.address + +LEFT OUTER JOIN poly_labels as contract_labels + ON b.CONTRACT_ADDRESS = contract_labels.address + +WHERE 1=1 +{% if is_incremental() %} + AND b.block_timestamp::date >= (select max(block_timestamp::date) from {{source('polygon', 'events_emitted')}}) +{% endif %} \ No newline at end of file diff --git a/models/polygon/polygon__transactions.sql b/models/polygon/polygon__transactions.sql new file mode 100644 index 00000000..69f1bedd --- /dev/null +++ b/models/polygon/polygon__transactions.sql @@ -0,0 +1,89 @@ +{{ config( + materialized='incremental', + unique_key='block_id || tx_id', + incremental_strategy='delete+insert', + cluster_by = ['block_timestamp', 'block_id'], + tags=['snowflake', 'polygon', 'polygon_transactions_gold'] +)}} + +WITH events AS ( + SELECT + tx_id + , sum(case when log_index is not null then 1 else 0 end) as event_count + FROM + {{ source('silver_polygon','udm_events') }} + where 1=1 + {% if is_incremental() %} + and block_timestamp::date >= (select max(block_timestamp::date) from {{source('polygon', 'transactions')}}) + {% endif %} + group by 1 +), +txn AS ( + SELECT + * + FROM + {{source('silver_polygon', 'transactions')}} + WHERE 1=1 + {% if is_incremental() %} + AND block_timestamp::date >= (select max(block_timestamp::date) from {{source('polygon', 'transactions')}}) + {% endif %} +), +poly_labels AS ( + SELECT + l1_label, + l2_label, + project_name, + address_name, + address + FROM + {{ source('shared','udm_address_labels_new') }} + WHERE + blockchain = 'polygon' +), +poly_prices AS ( + SELECT + p.symbol, + date_trunc('hour', recorded_at) as hour, + avg(price) as price + FROM {{ source('shared','prices_v2') }} p + WHERE + p.asset_id = '3890' + {% if is_incremental() %} + AND p.recorded_at::date >= (select max(block_timestamp::date) from {{source('polygon', 'transactions')}}) + {% endif %} + group by 1,2 + ) +SELECT + t.block_timestamp, + t.block_id as block_id, + t.tx_id, + tx_position, + nonce, + from_address, + from_labels.l1_label as from_label_type, + from_labels.l2_label as from_label_subtype, + from_labels.project_name as from_label, + from_labels.address_name as from_address_name, + to_address, + to_labels.l1_label as to_label_type, + to_labels.l2_label as to_label_subtype, + to_labels.project_name as to_label, + to_labels.address_name as to_address_name, + c.symbol, + t.input_method as function_signature, + f.text_signature as function_name, + gas_price, + gas_limit, + gas_used, + fee, + fee * p.price as fee_usd, + case when success = 1 then true else false end as success, + event_count + FROM txn t + LEFT JOIN events e ON e.tx_id = t.tx_id + LEFT JOIN {{source('ethereum', 'sha256_function_signatures')}} f ON t.input_method = f.hex_signature + AND f.importance = 1 + LEFT JOIN {{ source('shared','market_asset_metadata') }} c ON lower(t.to_address) = lower(c.token_address) + LEFT JOIN poly_prices p ON date_trunc('hour', t.block_timestamp) = p.hour + LEFT JOIN poly_labels as from_labels ON from_address = from_labels.address + LEFT JOIN poly_labels as to_labels ON to_address = to_labels.address diff --git a/models/polygon/polygon__udm_events.sql b/models/polygon/polygon__udm_events.sql new file mode 100644 index 00000000..513aeb33 --- /dev/null +++ b/models/polygon/polygon__udm_events.sql @@ -0,0 +1,176 @@ +{{ config( + materialized = 'incremental', + unique_key = 'block_id || tx_id || event_id', + incremental_strategy = 'delete+insert', + cluster_by = ['block_timestamp', 'block_id'], + tags = ['snowflake', 'polygon', 'polygon_udm_events_gold'] +) }} + +WITH token_prices AS ( + + SELECT + p.symbol, + DATE_TRUNC('hour',recorded_at) AS HOUR, + LOWER(A.token_address) AS token_address, + AVG(price) AS price + FROM + {{ source('shared','prices_v2') }} p + JOIN {{ source('shared','market_asset_metadata') }} A + ON p.asset_id :: STRING = A.asset_id :: STRING + WHERE + A.platform in ('polygon','polygon-pos') + {% if is_incremental() %} + AND recorded_at::date >= (select max(block_timestamp::date) from {{source('polygon', 'udm_events')}}) + {% endif %} +GROUP BY + p.symbol, + HOUR, + token_address +), +poly_prices AS ( + SELECT + p.symbol, + date_trunc('hour', recorded_at) as hour, + avg(price) as price + FROM {{ source('shared','prices_v2') }} p + WHERE + p.asset_id = '3890' + {% if is_incremental() %} + AND recorded_at >= (select max(block_timestamp::date) from {{source('polygon', 'udm_events')}}) + {% endif %} + group by 1,2 + ), +poly_labels AS ( + SELECT + l1_label, + l2_label, + project_name, + address_name, + address + FROM + {{ source('shared','udm_address_labels_new') }} + WHERE + blockchain = 'polygon' +), +base_udm_events AS ( + SELECT + * + FROM + {{ ref('silver_polygon__udm_events')}} + where 1=1 + + {% if is_incremental() %} + AND block_timestamp::date >= (select max(block_timestamp::date) from {{source('polygon', 'udm_events')}}) + {% endif %} +), +base_tx AS ( + SELECT + * + FROM + {{ ref('silver_polygon__transactions')}} + WHERE 1=1 + + {% if is_incremental() %} + AND block_timestamp::date >= (select max(block_timestamp::date) from {{source('polygon', 'udm_events')}}) + {% endif %} +), +events AS ( + SELECT + block_timestamp, + block_id, + tx_id, + from_address, + from_labels.l1_label AS from_label_type, + from_labels.l2_label AS from_label_subtype, + from_labels.project_name AS from_label, + from_labels.address_name AS from_address_name, + to_address, + to_labels.l1_label AS to_label_type, + to_labels.l2_label AS to_label_subtype, + to_labels.project_name AS to_label, + to_labels.address_name AS to_address_name, + log_method AS event_name, + NULL AS event_type, + log_index AS event_id, + contract_address, + CASE + WHEN e.symbol = 'ETH' THEN 'MATIC' + ELSE e.symbol + END AS symbol, + input_method, + native_value, + token_value, + fee + FROM + base_udm_events e + LEFT OUTER JOIN poly_labels AS from_labels + ON e.from_address = from_labels.address + LEFT OUTER JOIN poly_labels AS to_labels + ON e.to_address = to_labels.address + LEFT OUTER JOIN poly_labels AS contract_labels + ON e.contract_address = contract_labels.address +), +originator AS ( + SELECT + tx_id, + t.from_address AS origin_address, + from_labels.l1_label AS origin_label_type, + from_labels.l2_label AS origin_label_subtype, + from_labels.project_name AS origin_label, + from_labels.address_name AS origin_address_name, + t.input_method AS origin_function_signature, + f.text_signature AS origin_function_name + FROM + base_tx t + LEFT OUTER JOIN {{ source('ethereum','sha256_function_signatures') }} AS f + ON t.input_method = f.hex_signature + AND f.importance = 1 + LEFT OUTER JOIN poly_labels AS from_labels + ON t.from_address = from_labels.address +) + select block_timestamp, + block_id, + e.tx_id, + o.origin_address, + o.origin_label_type, + o.origin_label_subtype, + o.origin_label, + o.origin_address_name, + o.origin_function_signature, + o.origin_function_name, + case when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then null::string else from_address end as from_address, + case when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then null::string else from_label_type end as from_label_type, + case when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then null::string else from_label_subtype end as from_label_subtype, + case when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then null::string else from_label end as from_label, + case when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then null::string else from_address_name end as from_address_name, + case when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then null::string else to_address end as to_address, + case when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then null::string else to_label_type end as to_label_type, + case when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then null::string else to_label_subtype end as to_label_subtype, + case when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then null::string else to_label end as to_label, + case when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then null::string else to_address_name end as to_address_name, + case when e.event_name = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' or token_value > 0 then 'transfer' + when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then coalesce(d.method, event_name) + else event_name end as event_name, + case when e.event_name = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then 'erc20_transfer' + when native_value > 0 then 'native_matic' + when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then d.type + else event_type end as event_type, + event_id, + contract_address, + case when e.event_name = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then coalesce(e.symbol, p.symbol) + when native_value > 0 then 'MATIC' + else e.symbol end as symbol, + -- native_value, + case when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then null::float + when native_value > 0 then native_value else token_value/pow(10,de.decimal) end amount, + case when event_name is not null and event_name != '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then null::float + when e.event_name = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' then token_value * p.price / pow(10,de.decimal) + when native_value > 0 then native_value * pp.price + else null end as amount_usd + from events e + join originator o on e.tx_id = o.tx_id + left join token_prices p on p.token_address = e.contract_address + and date_trunc('hour', e.block_timestamp) = p.hour + left join poly_prices pp on date_trunc('hour', e.block_timestamp) = pp.hour + left join {{ source('ethereum','ethereum_decoded_log_methods') }} d on e.event_name = d.encoded_log_method + left join {{ ref('polygon_dbt__decimals')}} de on lower(de.token_id) = lower(e.contract_address) \ No newline at end of file diff --git a/models/polygon/polygon_dbt__decimals.sql b/models/polygon/polygon_dbt__decimals.sql new file mode 100644 index 00000000..db906f17 --- /dev/null +++ b/models/polygon/polygon_dbt__decimals.sql @@ -0,0 +1,717 @@ +{{ + config( + materialized='table', + unique_key='token_id', + tags=['snowflake', 'polygon', 'polygon_dbt_decimals'] + ) +}} + +select token_id +, decimal::int as decimal +from ( +select '0x95bbe8fbd32088bc13e67b05c7e783ad6ca854d8' as token_id, '18' as decimal union +select '0x82b6205002ecd05e97642d38d61e2cfeac0e18ce' as token_id, '9' as decimal union +select '0x9ccdf331f97449a84d100918e1e233b097a3e13f' as token_id, '18' as decimal union +select '0x7075cab6bcca06613e2d071bd918d1a0241379e2' as token_id, '18' as decimal union +select '0xa38735c2be496a0c2d4fe32c7459c1d391501035' as token_id, '18' as decimal union +select '0x1f71bc1f88f09ece59e844dea4fcc4fa73934117' as token_id, '18' as decimal union +select '0xf0e7beedc882a66c151d03b594503317b8472336' as token_id, '18' as decimal union +select '0x52c57f0ea393bb213445f47c48c5f34e419061c7' as token_id, '18' as decimal union +select '0x56b1c1e028c2e0a8852906e1ee7730ed67a3d9bb' as token_id, '18' as decimal union +select '0x9ec5abd7a442b8325f529dab25019674d0ba983d' as token_id, '18' as decimal union +select '0xf4cbd4a7143e221eb983d292c0d13275f12c8172' as token_id, '18' as decimal union +select '0x67ce67ec4fcd4aca0fcb738dd080b2a21ff69d75' as token_id, '8' as decimal union +select '0xe38eb5a707d9a09757246dc37df11b35e47ba782' as token_id, '18' as decimal union +select '0x06d02e9d62a13fc76bb229373fb3bbbd1101d2fc' as token_id, '18' as decimal union +select '0x7827f070d3f0dcae72ac6a9e1953459d50a426a7' as token_id, '18' as decimal union +select '0xfd39c9bb69cc3bd57959284acf855ae65d06f8cf' as token_id, '18' as decimal union +select '0x72bba3aa59a1ccb1591d7cddb714d8e4d5597e96' as token_id, '18' as decimal union +select '0x103308793661879166464cd0d0370ac3b8a2a1cb' as token_id, '8' as decimal union +select '0x918c749a09fa539e1dc8019f875fab9eb1ebc6a3' as token_id, '18' as decimal union +select '0x4e92f6f10496f3fcb790cc6969cc15b87c8f9199' as token_id, '18' as decimal union +select '0x5ffd62d3c3ee2e81c00a7b9079fb248e7df024a8' as token_id, '18' as decimal union +select '0x4349d5464203f1da44513c1feab502839e69dbf8' as token_id, '18' as decimal union +select '0x7d8c139d5bfbafdfd1d2d0284e7fc862babe4137' as token_id, '18' as decimal union +select '0xd93c61d4418d77a537b6b57478c108e193362f0c' as token_id, '18' as decimal union +select '0xd3f0cd30a2d3aefb180d23f3f38aa1c4e0b1c98a' as token_id, '18' as decimal union +select '0x400784930560ab531bd840eb00f52e9cf66bdf98' as token_id, '18' as decimal union +select '0x3c27f2d0744da4f96d9ab5f4212d8162c031dea9' as token_id, '18' as decimal union +select '0xa219a63c170d0bcde994886d53878f86c5126106' as token_id, '18' as decimal union +select '0x4b54bc363f5f9c6e0fcd82eac6919ae213464cc6' as token_id, '18' as decimal union +select '0x8dc302e2141da59c934d900886dbf1518fd92cd4' as token_id, '18' as decimal union +select '0x40ccd55b789fdee8d434915dc2aa6bd938506a92' as token_id, '18' as decimal union +select '0x22308317a4aa9e8196065e0b3647e582d44c4d7b' as token_id, '18' as decimal union +select '0x068180071617528606371c31892ecbf2b70ac1d2' as token_id, '18' as decimal union +select '0xc4e82ba0fe6763cbe5e9cbca0ba7cbd6f91c6018' as token_id, '18' as decimal union +select '0xa3590a0e0c9963d048a9f43cf1ee506fb27d9129' as token_id, '18' as decimal union +select '0x9b0162d3b3b4e73fe7dbb10b141e03539199a8f2' as token_id, '18' as decimal union +select '0xbb6c356bdc5c258cb4e39c112d68fb6a9a9f6e26' as token_id, '18' as decimal union +select '0xf31cdcf1f518a8722d8cd595d18fe17f28e16cb5' as token_id, '18' as decimal union +select '0x8e600198218aeaeb6a4b4f84771df8b38930ddce' as token_id, '8' as decimal union +select '0x722eb54cd20d13938df8e792a5849a2391c8463f' as token_id, '18' as decimal union +select '0x25788a1a171ec66da6502f9975a15b609ff54cf6' as token_id, '18' as decimal union +select '0x59e9261255644c411afdd00bd89162d09d862e38' as token_id, '18' as decimal union +select '0xe8a51d0dd1b4525189dda2187f90ddf0932b5482' as token_id, '18' as decimal union +select '0x268ad27c28601d28b79c792c14e95bd2b7a030f8' as token_id, '4' as decimal union +select '0x43df9c0a1156c96cea98737b511ac89d0e2a1f46' as token_id, '18' as decimal union +select '0xfcf1e2fc0a398925ddb09222842b376e3a7d573b' as token_id, '18' as decimal union +select '0xeb94a5e2c643403e29fa1d7197e7e0708b09ad84' as token_id, '18' as decimal union +select '0xf0059cc2b3e980065a906940fbce5f9db7ae40a7' as token_id, '18' as decimal union +select '0xc91c06db0f7bffba61e2a5645cc15686f0a8c828' as token_id, '18' as decimal union +select '0x48e3883233461c2ef4cb3fcf419d6db07fb86cea' as token_id, '8' as decimal union +select '0xb3b681dee0435ecc0a508e40b02b3c9068d618cd' as token_id, '18' as decimal union +select '0xe90777bd6c84bf4762565ed83bc5784cc9faf8c4' as token_id, '18' as decimal union +select '0x6b4e056b0a2c7d967728b0d0329a61b746b04cd8' as token_id, '18' as decimal union +select '0x66e16d50c07a01bb473ec794349d45aa1a0e5dc2' as token_id, '18' as decimal union +select '0xe7f960685aba7327ada3b161ea252703c87be0bf' as token_id, '8' as decimal union +select '0x01fa5b3a5d77bcf705dd505bbcbb34bce310e7fe' as token_id, '18' as decimal union +select '0xdae89da41a96956e9e70320ac9c0dd077070d3a5' as token_id, '18' as decimal union +select '0x41b3966b4ff7b427969ddf5da3627d6aeae9a48e' as token_id, '18' as decimal union +select '0xe64106154816a252da7728e35a0060f15d66cb34' as token_id, '8' as decimal union +select '0x2e220744f9ac1bf3045b0588d339f5fd3bb8623a' as token_id, '18' as decimal union +select '0x164fbef6729c86b0fd719789d2f985afa15a4430' as token_id, '18' as decimal union +select '0x42f37a1296b2981f7c3caced84c5096b2eb0c72c' as token_id, '18' as decimal union +select '0xd9e658caed24fb0486e92f0f1702f77a712790da' as token_id, '0' as decimal union +select '0xb77e62709e39ad1cbeebe77cf493745aec0f453a' as token_id, '18' as decimal union +select '0x1e289178612f5b6d32f692e312dcf783c74b2162' as token_id, '18' as decimal union +select '0x9bd0463b12b432afbdd6b79ae2032267676ce948' as token_id, '18' as decimal union +select '0x1d545d7ff917e08d7bf26320343b16bdf51fdbb6' as token_id, '18' as decimal union +select '0x176f5ab638cf4ff3b6239ba609c3fadaa46ef5b0' as token_id, '18' as decimal union +select '0x835273d47a2a4cc84693639f8d890af1caea611d' as token_id, '18' as decimal union +select '0xecae5e66d7f2bae250dff839216a01c2702adffd' as token_id, '18' as decimal union +select '0xe8f157e041df3b28151b667364e9c90789da7923' as token_id, '18' as decimal union +select '0x7ec26842f195c852fa843bb9f6d8b583a274a157' as token_id, '18' as decimal union +select '0xf30355ba14b2d3b31597ec71a4542f57e902cb80' as token_id, '18' as decimal union +select '0x7886a4ebdda9f1861d6a081cd794b3e79c375011' as token_id, '18' as decimal union +select '0x2808edb7398b25e0f6c41cd98fd114d924008c87' as token_id, '18' as decimal union +select '0x431351dbfe3e03be7842e411c6627acb0763c5fc' as token_id, '9' as decimal union +select '0xe8388f307caa9c338955465f0ae2aa4c3e023dd8' as token_id, '12' as decimal union +select '0x0c51f415cf478f8d08c246a6c6ee180c5dc3a012' as token_id, '18' as decimal union +select '0x6a9d92f366f01b1980c4e75f0d9fa54db658105d' as token_id, '18' as decimal union +select '0xf1bd521984b4b46176ef4e77f3de01b9fbbe5191' as token_id, '18' as decimal union +select '0xfe9ca7cf13e33b23af63fea696f4aae1b7a65585' as token_id, '18' as decimal union +select '0x66d7fdcc7403f18cae9b0e2e8385649d2acbc12a' as token_id, '18' as decimal union +select '0x885b6e6dbb84148f98c806800bc19c9a9db4cfeb' as token_id, '18' as decimal union +select '0x3c59c5d7eeab0ac5a041ad88a0a4a6603112b184' as token_id, '4' as decimal union +select '0x3fc8bd9b0d8054cbdc174c4ed4b41a95d3c6a427' as token_id, '18' as decimal union +select '0xe47dbe919c8ab0c1a1c1e97a1eefc2b946253924' as token_id, '18' as decimal union +select '0xe117837c0c8a53765cb6b4a16ebc84b3a71dd0bd' as token_id, '18' as decimal union +select '0x13607aa9b2ffdd8340f4628049bd35c02a68fa05' as token_id, '18' as decimal union +select '0xd07a7fac2857901e4bec0d89bbdae764723aab86' as token_id, '18' as decimal union +select '0x41d36d3bd6297fe288e31c75de8b7453de9daf90' as token_id, '9' as decimal union +select '0x1a47e3316282d57df146f87c58a1fb4b26992bbf' as token_id, '18' as decimal union +select '0xd0252fb67606ed74d0cacd17b2eb38446e4466c9' as token_id, '18' as decimal union +select '0xb6f10be9201fb110b3aa275267a234e84ade8e95' as token_id, '18' as decimal union +select '0x5667dcc0ab74d1b1355c3b2061893399331b57e2' as token_id, '18' as decimal union +select '0x266af96fece1c3dd4b8a0a6de9ae7a3bd5408ee9' as token_id, '6' as decimal union +select '0xdf2d3db12254b062b96424f27f44649321901499' as token_id, '18' as decimal union +select '0x6127bb5a1b847ff57bf7b9469c4db6e310466214' as token_id, '18' as decimal union +select '0x454e1ec2f58ee542b75d2ab713ed53cd33ba4308' as token_id, '7' as decimal union +select '0xa3ed22eee92a3872709823a6970069e12a4540eb' as token_id, '18' as decimal union +select '0x434b5acf47e2883fc83d326d69f32965945c1f3d' as token_id, '18' as decimal union +select '0xffb6eff3e73db35b3efcf2bcd160fc517c5df9ec' as token_id, '18' as decimal union +select '0xe9949106f0777e7a2e36df891d59583ac94dc896' as token_id, '18' as decimal union +select '0xdda7b23d2d72746663e7939743f929a3d85fc975' as token_id, '18' as decimal union +select '0x3d32a7dc8b0c62a73639bf0d4fe8d229a2431ec8' as token_id, '18' as decimal union +select '0x5e648d09170c346dd27df9db332591e4faa6a844' as token_id, '18' as decimal union +select '0x00e5646f60ac6fb446f621d146b6e1886f002905' as token_id, '18' as decimal union +select '0x2ab4f9ac80f33071211729e45cfc346c1f8446d5' as token_id, '18' as decimal union +select '0x5559edb74751a0ede9dea4dc23aee72cca6be3d5' as token_id, '18' as decimal union +select '0xbe34506683c842dea90244333f9e8312672f1106' as token_id, '18' as decimal union +select '0x19782d3dc4701ceeedcd90f0993f0a9126ed89d0' as token_id, '18' as decimal union +select '0x3d6c5c1a66e7b43342fca37827b7faf3bd074dd3' as token_id, '18' as decimal union +select '0x556f501cf8a43216df5bc9cc57eb04d4ffaa9e6d' as token_id, '8' as decimal union +select '0x2e1ad108ff1d8c782fcbbb89aad783ac49586756' as token_id, '18' as decimal union +select '0x0621d647cecbfb64b79e44302c1933cb4f27054d' as token_id, '18' as decimal union +select '0xcde5e3d90631cacb842fa86f62dd0fc08a3ce43d' as token_id, '18' as decimal union +select '0xd893dde7346cc0ab46dc7ea468aeb69d9bf087c5' as token_id, '18' as decimal union +select '0xdd24aa9166dcdf0b37d0fca17d6ea87748771dcc' as token_id, '18' as decimal union +select '0x8346ab8d5ea7a9db0209aed2d1806afa0e2c4c21' as token_id, '18' as decimal union +select '0x222cc013116d43a8b6befa84aaf7c11cbc073496' as token_id, '18' as decimal union +select '0xff898089e368ecc47fc37fd0d905fbcf0d70e820' as token_id, '18' as decimal union +select '0xc96a4a6b780af3a6383962ea0ac96dd3c40532d4' as token_id, '8' as decimal union +select '0xaecebfcf604ad245eaf0d5bd68459c3a7a6399c2' as token_id, '18' as decimal union +select '0x07cc1cc3628cc1615120df781ef9fc8ec2feae09' as token_id, '18' as decimal union +select '0x02730ea33f0e83203ea336d676e76d215a925376' as token_id, '18' as decimal union +select '0x4016489b230980fd43511e28e7fb91ed795c90c5' as token_id, '4' as decimal union +select '0xe82b6a867d325541e0c5d18ff7179b9b92f8d4ee' as token_id, '18' as decimal union +select '0x09e1943dd2a4e82032773594f50cf54453000b97' as token_id, '8' as decimal union +select '0x9377eeb7419486fd4d485671d50baa4bf77c2222' as token_id, '18' as decimal union +select '0x1b630a1f5838d142f4e91cc4163cd41f5139b166' as token_id, '18' as decimal union +select '0x986d3ea4089488f77469697c50517ee12f36e1bc' as token_id, '18' as decimal union +select '0x69f240ed3456a098f2d0d898566597e7551a7c81' as token_id, '18' as decimal union +select '0xdd0fdc648a9dbc9be5a735fe4561893a13399da2' as token_id, '18' as decimal union +select '0x055dc5c3b7c386f2daefec554bb42831fb4107be' as token_id, '18' as decimal union +select '0x263534a4fe3cb249df46810718b7b612a30ebbff' as token_id, '18' as decimal union +select '0x4b64399ca6609ebb5cb649eaa50387c2d9fe20eb' as token_id, '18' as decimal union +select '0x12255b2dadc7e18fd34353daa161974cc917c8dd' as token_id, '9' as decimal union +select '0xf2ced5f137e27f68e6a01cc6c4198729e200e457' as token_id, '8' as decimal union +select '0x048c83a1176a1d3d12cb8c305179d360b1e4c958' as token_id, '18' as decimal union +select '0xa63beffd33ab3a2efd92a39a7d2361cee14ceba8' as token_id, '18' as decimal union +select '0xd617a689f1b8d3b27d51cf7789f18bd43d8c1706' as token_id, '8' as decimal union +select '0x6ccbf3627b2c83afef05bf2f035e7f7b210fe30d' as token_id, '18' as decimal union +select '0x147697003255510f6431a44443e67b227109832e' as token_id, '18' as decimal union +select '0x5df1a47e05b4caba0ed3df13662642f05314764d' as token_id, '18' as decimal union +select '0x7dd3d9e1868a7da87509a601e7dbbf938c819a32' as token_id, '18' as decimal union +select '0x4ba47b10ea8f544f8969ba61df3e5be67692a122' as token_id, '18' as decimal union +select '0x73e86097021714509d3f193dfd0bbbc57b3cdcc6' as token_id, '18' as decimal union +select '0x9c1c23e60b72bc88a043bf64afdb16a02540ae8f' as token_id, '18' as decimal union +select '0x8b62011d9e73922ac5ef6d30a82588cb33f98055' as token_id, '18' as decimal union +select '0x157b28e46f301c596668a4b85c59f710f9c4bbaa' as token_id, '8' as decimal union +select '0x101a023270368c0d50bffb62780f4afd4ea79c35' as token_id, '18' as decimal union +select '0x692597b009d13c4049a947cab2239b7d6517875f' as token_id, '18' as decimal union +select '0xdab529f40e671a1d4bf91361c21bf9f0c9712ab7' as token_id, '18' as decimal union +select '0x29a13af916fe709b10029b578c94759675c9e91e' as token_id, '18' as decimal union +select '0x0539f01d9ed66c3133a0b0fab83f4fa69b3608e8' as token_id, '18' as decimal union +select '0xd8a2b5ed27d57d003962032ea78f3738ff5617a8' as token_id, '18' as decimal union +select '0xc26d47d5c33ac71ac5cf9f776d63ba292a4f7842' as token_id, '18' as decimal union +select '0x4d8181f051e617642e233be09cea71cc3308ffd4' as token_id, '18' as decimal union +select '0xf89887862538ce8efbdbadd5d483ae4a09dd9688' as token_id, '18' as decimal union +select '0xdb725f82818de83e99f1dac22a9b5b51d3d04dd4' as token_id, '18' as decimal union +select '0x7e7ff932fab08a0af569f93ce65e7b8b23698ad8' as token_id, '18' as decimal union +select '0xb9585ec9d4c97ad9ded7250bb9a199fe8eed0eca' as token_id, '4' as decimal union +select '0x6abb753c1893194de4a83c6e8b4eadfc105fd5f5' as token_id, '18' as decimal union +select '0xf689e85988d3a7921e852867ce49f53388985e6d' as token_id, '18' as decimal union +select '0x780053837ce2ceead2a90d9151aa21fc89ed49c2' as token_id, '18' as decimal union +select '0x5095cc6511b70e287bc525aa57afbc60eb73ac47' as token_id, '18' as decimal union +select '0x61299774020da444af134c82fa83e3810b309991' as token_id, '18' as decimal union +select '0x6f83ffedfd8774d09329d92bf3647654ee171dfa' as token_id, '18' as decimal union +select '0x5eb8d998371971d01954205c7afe90a7af6a95ac' as token_id, '18' as decimal union +select '0x65a05db8322701724c197af82c9cae41195b0aa8' as token_id, '18' as decimal union +select '0xc30dd0cce2e683aa68c87c280e73beb3dec9b3ba' as token_id, '18' as decimal union +select '0x1109c91f24f1e485f7c04d286c12b7f709e89a16' as token_id, '18' as decimal union +select '0xfb65ef42f7c8a70ff73f627db6e9ba2aff1f20fa' as token_id, '18' as decimal union +select '0x0e0ffc562d72316b783e887bbaae1fd794adb530' as token_id, '18' as decimal union +select '0x6d1b94027453c457e90c28e83154b02718bd48b2' as token_id, '18' as decimal union +select '0xc81278a52ad0e1485b7c3cdf79079220ddd68b7d' as token_id, '18' as decimal union +select '0xdd418748fecfc870b7322b1d11402814f5ee55ab' as token_id, '18' as decimal union +select '0x76e3f52ad78c367f23cfa08febf122053ee4f781' as token_id, '18' as decimal union +select '0xdee1ebd2a9f6fe069a045601ebee7c42572abd5f' as token_id, '18' as decimal union +select '0x2052344ceace7f140da3e819c7729fef72f97851' as token_id, '7' as decimal union +select '0x6968105460f67c3bf751be7c15f92f5286fd0ce5' as token_id, '18' as decimal union +select '0xa8e198fc5c68264b185619a96748f855720494c0' as token_id, '18' as decimal union +select '0xd8324ae24af9b499cb75fb0bad8e0094c10cac58' as token_id, '8' as decimal union +select '0xeba044af66a6d959c12e91fccd74ea1c3ca07578' as token_id, '18' as decimal union +select '0x160d64f91ad7c4d9ac4ba2c44a0e77373ca69ebe' as token_id, '18' as decimal union +select '0xfeff6c1643d38b13a198cfe1d76505701c380af0' as token_id, '18' as decimal union +select '0x33e09c93c7515bc346bf49d4e4bd0c7be63f814d' as token_id, '18' as decimal union +select '0x000de668684839f97d4845f32a43e913366ec08c' as token_id, '8' as decimal union +select '0xc73a8f11ec303ed81000ac5eae94bf2d65b67dd6' as token_id, '18' as decimal union +select '0xa383abd0fe30fa2b781c0b454bfcc0475c6c8844' as token_id, '18' as decimal union +select '0x10635bf5c17f5e4c0ed9012aef7c12f96a57a4dd' as token_id, '18' as decimal union +select '0x032f85b8fbf8540a92b986d953e4c3a61c76d39e' as token_id, '18' as decimal union +select '0xa041544fe2be56cce31ebb69102b965e06aace80' as token_id, '18' as decimal union +select '0x2b88ad57897a8b496595925f43048301c37615da' as token_id, '18' as decimal union +select '0x7b38c0d5dfc91d0a3fef2f8dab3be404c1f61fa4' as token_id, '18' as decimal union +select '0x32ef6dcb27ae8697e217fe3594d665535b176721' as token_id, '18' as decimal union +select '0xce59e5c0f130da0796509a0d32f44b0a6c81b9de' as token_id, '9' as decimal union +select '0xdf00c50a3dae240860f57b77508203b8d9593283' as token_id, '18' as decimal union +select '0x9d8a8d15a45fb10060f1d642fb97aa28f5cdede2' as token_id, '18' as decimal union +select '0x46a5d492788f8afdfc743ab7d7bd13f996249ed5' as token_id, '18' as decimal union +select '0x2628d301b161db70e3dbbac88d9d900ca426ff02' as token_id, '18' as decimal union +select '0xc059a4777279e30c5238da786384700cd14d8f47' as token_id, '18' as decimal union +select '0x5b3455590ec7f5a25119885ed62afba9bc2e5d65' as token_id, '18' as decimal union +select '0x9e7deba360c77949bb75d16dc81b2393c15005eb' as token_id, '18' as decimal union +select '0xa69d14d6369e414a32a5c7e729b7afbafd285965' as token_id, '4' as decimal union +select '0x313d009888329c9d1cf4f75ca3f32566335bd604' as token_id, '18' as decimal union +select '0x50a4a434247089848991dd8f09b889d4e2870ab6' as token_id, '18' as decimal union +select '0x638df98ad8069a15569da5a6b01181804c47e34c' as token_id, '18' as decimal union +select '0xd7671bdce849eabef4da313ccc80e689151ee811' as token_id, '18' as decimal union +select '0xd0ee109352c6116db0f17f4aa8519cdbfc7e7887' as token_id, '18' as decimal union +select '0xc49079e96ceaf20c9900f1b77aa09d2d5a011341' as token_id, '18' as decimal union +select '0xcbab27b2d5b468eea509bd430100922341bc3f1a' as token_id, '18' as decimal union +select '0x26f10028c105501678531a19fe025b93ae055a9f' as token_id, '18' as decimal union +select '0x9a37814d1ec68ca5f8aab205f628869f3926ce3e' as token_id, '18' as decimal union +select '0xf18ac368001b0ddc80aa6a8374deb49e868efdb8' as token_id, '18' as decimal union +select '0xa8b1e0764f85f53dfe21760e8afe5446d82606ac' as token_id, '18' as decimal union +select '0xdd539b42daddc0ca55fb3ac2260240e61414d92b' as token_id, '9' as decimal union +select '0x232eab56c4fb3f84c6fb0a50c087c74b7b43c6ad' as token_id, '18' as decimal union +select '0x23fe1ee2f536427b7e8ac02fb037a7f867037fe8' as token_id, '18' as decimal union +select '0x7d836da4dd2afda1d09992980569e22597f09981' as token_id, '18' as decimal union +select '0xbbbe128568222623d21299f019a978c8587b33dc' as token_id, '18' as decimal union +select '0xa79e0bfc579c709819f4a0e95d4597f03093b011' as token_id, '18' as decimal union +select '0x9fa22bda93a0ecef300928c0358003b63647c5d8' as token_id, '18' as decimal union +select '0x95c300e7740d2a88a44124b424bfc1cb2f9c3b89' as token_id, '18' as decimal union +select '0x554f074d9ccda8f483d1812d4874cbebd682644e' as token_id, '18' as decimal union +select '0x2c7a7358e60f2d145fac48c71950a2c523636075' as token_id, '18' as decimal union +select '0xc6d54d2f624bc83815b49d9c2203b1330b841ca0' as token_id, '18' as decimal union +select '0x2f9679f1db7e1a3ffd659e1880339e18b482f17a' as token_id, '9' as decimal union +select '0x7f2841a5c7e69e921897fbfbce95caea34634a35' as token_id, '18' as decimal union +select '0x98113e216578359b8c0eb3a9fddd64285e91120a' as token_id, '18' as decimal union +select '0xc518edfb9667214be3559b86e73777d1c4789163' as token_id, '9' as decimal union +select '0x7205705771547cf79201111b4bd8aaf29467b9ec' as token_id, '18' as decimal union +select '0x0cfc9a713a5c17bc8a5ff0379467f6558bacd0e0' as token_id, '18' as decimal union +select '0x79b9a1c21ecf6a22a6d722a5bfb437ef776e87cd' as token_id, '18' as decimal union +select '0xc8a94a3d3d2dabc3c1caffffdca6a7543c3e3e65' as token_id, '2' as decimal union +select '0x030a6b1da67963fc22265d8c6686d1878d581b6b' as token_id, '6' as decimal union +select '0xac311fa85e8645bb1db53ecc04fa8d41997facf8' as token_id, '18' as decimal union +select '0x7e6afec8cf917976d11fe65a34d3c17289fe3ae0' as token_id, '18' as decimal union +select '0xf2b5a8c37278bcdd50727d5ca879f8e5a4642e2e' as token_id, '8' as decimal union +select '0xe111178a87a3bff0c8d18decba5798827539ae99' as token_id, '2' as decimal union +select '0x5de4005155933c0e1612ce808f12b4cd8daabc82' as token_id, '18' as decimal union +select '0x977777c5d1208742343bb1f4cab182e56d624f1f' as token_id, '18' as decimal union +select '0xf1938ce12400f9a761084e7a80d37e732a4da056' as token_id, '18' as decimal union +select '0x4985e0b13554fb521840e893574d3848c10fcc6f' as token_id, '18' as decimal union +select '0x62414d03084eeb269e18c970a21f45d2967f0170' as token_id, '18' as decimal union +select '0x1631244689ec1fecbdd22fb5916e920dfc9b8d30' as token_id, '18' as decimal union +select '0x4d0def42cf57d6f27cd4983042a55dce1c9f853c' as token_id, '18' as decimal union +select '0x5ecba59dacc1adc5bdea35f38a732823fc3de977' as token_id, '18' as decimal union +select '0x53aec293212e3b792563bc16f1be26956adb12e9' as token_id, '18' as decimal union +select '0x13654478010268c8c729e8078313c3d0acc21819' as token_id, '18' as decimal union +select '0xe3322702bedaaed36cddab233360b939775ae5f1' as token_id, '18' as decimal union +select '0x311f87466049bfc25fdc2bc2e9bb7e40dae0e68f' as token_id, '18' as decimal union +select '0x24212089b9d90b4d06ef10bd80ca14ec9356d98f' as token_id, '18' as decimal union +select '0x329434fe066ac71d5fb93489f955a6959658097b' as token_id, '18' as decimal union +select '0x3f99009295dedd768f7284afe07cdfed70c3e3ac' as token_id, '18' as decimal union +select '0xb382c1cfa622795a534e5bd56fac93d59bac8b0d' as token_id, '18' as decimal union +select '0x45c27821e80f8789b60fd8b600c73815d34dda6c' as token_id, '18' as decimal union +select '0xcbb2da0127042546ceff56da69faf3f2ba6d1c51' as token_id, '18' as decimal union +select '0x043a3aa319b563ac25d4e342d32bffb51298db7b' as token_id, '18' as decimal union +select '0xb3658a5493332e952fc86991c24c9c759d2d8cd0' as token_id, '18' as decimal union +select '0x314338767151e6ed23db8a41c6f6943c1958ee56' as token_id, '18' as decimal union +select '0xb718412ef9c238c3a90079f21b57808ff8c18f1c' as token_id, '18' as decimal union +select '0xc17d249c8a675c2e67a5b305a3e6b23cc45d81aa' as token_id, '8' as decimal union +select '0x664a31f4985f1ef31d90d73e3da7ed880a052195' as token_id, '18' as decimal union +select '0x8a2870fb69a90000d6439b7adfb01d4ba383a415' as token_id, '18' as decimal union +select '0x9bd3b7c3dcc24708cbf122523546ee5c6caefce8' as token_id, '18' as decimal union +select '0x93c2c75a674700e9ed7a46cf220ec140aea09fad' as token_id, '18' as decimal union +select '0xe0339c80ffde91f3e20494df88d4206d86024cdf' as token_id, '18' as decimal union +select '0x6f7c932e7684666c9fd1d44527765433e01ff61d' as token_id, '18' as decimal union +select '0x0f40d69ff494a9e74b1f20a89eff299b2a05918f' as token_id, '18' as decimal union +select '0x3962f4a0a0051dcce0be73a7e09cef5756736712' as token_id, '18' as decimal union +select '0x7e85e6b00a8e9c757f2fef60d047b6f787c66a1e' as token_id, '18' as decimal union +select '0x84e1670f61347cdaed56dcc736fb990fbb47ddc1' as token_id, '18' as decimal union +select '0xeb5c9e515629b725d3588a55e2a43964dcfde8ca' as token_id, '18' as decimal union +select '0xd62355546a93bfb0e891e905ff40b3b26ff5f2b1' as token_id, '18' as decimal union +select '0x38332d8671961ae13d0bde040d536eb336495eea' as token_id, '18' as decimal union +select '0xdd4959cd915ae74dcd3f51e11e40fe112ac7aa69' as token_id, '18' as decimal union +select '0x09450784a86a083041f5773836dca457531ea00b' as token_id, '18' as decimal union +select '0x596ebe76e2db4470966ea395b0d063ac6197a8c5' as token_id, '18' as decimal union +select '0x1b599beb7b1f50807dd58fd7e8ffcf073b435e71' as token_id, '18' as decimal union +select '0x24ad14a4f0bb79a9dcf201514cb0e651c79db76b' as token_id, '18' as decimal union +select '0xd1c9704bb651d334e9a600dbc056504cc773479f' as token_id, '18' as decimal union +select '0xcae54386449c0a7ce2d680982e3d08250dc3ec3b' as token_id, '9' as decimal union +select '0x418839451873b0e69e628f95dc39a877a9715196' as token_id, '18' as decimal union +select '0xc1fe55e82a992f870f68ba208617486bee7ad0fc' as token_id, '18' as decimal union +select '0xf7d9e281c5cb4c6796284c5b663b3593d2037af2' as token_id, '18' as decimal union +select '0x221afac78d2725d090499b973bb42fc93cca2ef5' as token_id, '18' as decimal union +select '0xb090b6310970dd028a007981a24c1a492568a816' as token_id, '18' as decimal union +select '0x21389a523b3a9f39bb3a4065572994455faf59e8' as token_id, '18' as decimal union +select '0x8f3dc8321cba3abe08fb29055a0a10dc79223252' as token_id, '18' as decimal union +select '0x868547eb48e0ed2fd3db52db9818ab9496ea4ef1' as token_id, '8' as decimal union +select '0xae07b360cf41c8971f6c544620a6ed428ff3a661' as token_id, '18' as decimal union +select '0x82dcf1df86ada26b2dcd9ba6334cedb8c2448e9e' as token_id, '18' as decimal union +select '0x106035dedca635d75d6ff05f98f25916829edb77' as token_id, '2' as decimal union +select '0x614389eaae0a6821dc49062d56bda3d9d45fa2ff' as token_id, '18' as decimal union +select '0x26361cfc497021ecc366ec11cafa27290f3c055c' as token_id, '10' as decimal union +select '0xbe32718f77aa63d95658ddd8ef472039c71eb704' as token_id, '4' as decimal union +select '0x67bcde6a52be923d3223fcae927ab16b352768bb' as token_id, '18' as decimal union +select '0x032b3217241fe53ffadb334a9d06aacd2a9153d9' as token_id, '18' as decimal union +select '0xfd81cfcd9c525b0a4c83cdc37fd23f7e233cde45' as token_id, '18' as decimal union +select '0xad93e067e149f0a5ecd12d8ea83b05581dd6374c' as token_id, '18' as decimal union +select '0xfdde616084427f0a231d0664a985e1f820e34693' as token_id, '18' as decimal union +select '0xa7051c5a22d963b81d71c2ba64d46a877fbc1821' as token_id, '18' as decimal union +select '0x5b0a0cd03e9df1829e00128ebe277cc3247da346' as token_id, '18' as decimal union +select '0x4f38008d9e2b6f1374199b29d6610021f70f174b' as token_id, '18' as decimal union +select '0x3a4bed49ab592a227bae8f41efd0d38e6e06d96c' as token_id, '18' as decimal union +select '0x6f934b45fc6043527d73c7c99313dd838e723db7' as token_id, '18' as decimal union +select '0x9eecd634c7a934f752af0eb90dda9ecc262f199f' as token_id, '18' as decimal union +select '0x92c59f1cc9a322670cca29594e4d994d48bdfd36' as token_id, '18' as decimal union +select '0x2e789b197a1874ca6384082090e0ebed30f16e1a' as token_id, '18' as decimal union +select '0xad684e79ce4b6d464f2ff7c3fd51646892e24b96' as token_id, '4' as decimal union +select '0xf6f85b3f9fd581c2ee717c404f7684486f057f95' as token_id, '18' as decimal union +select '0x553d3d295e0f695b9228246232edf400ed3560b5' as token_id, '18' as decimal union +select '0x5f084f3ee7ea09e4c01cee3cdf1b5620a3344fd0' as token_id, '18' as decimal union +select '0x1fcbe5937b0cc2adf69772d228fa4205acf4d9b2' as token_id, '18' as decimal union +select '0x37ff2a6cf0e8061cbd9a00919690f1b0a46ee674' as token_id, '9' as decimal union +select '0x220ed61d1f1cc754cb71978585d69e07be576315' as token_id, '4' as decimal union +select '0x0b220b82f3ea3b7f6d9a1d8ab58930c064a2b5bf' as token_id, '18' as decimal union +select '0x00d5149cdf7cec8725bf50073c51c4fa58ecca12' as token_id, '18' as decimal union +select '0xc8ed802a2cb6240b05b8c310137086bf4bc11b55' as token_id, '18' as decimal union +select '0x1002068d890ac351143bc5ae70711175e75f1ea8' as token_id, '9' as decimal union +select '0xb8cb8a7f4c2885c03e57e973c74827909fdc2032' as token_id, '18' as decimal union +select '0x19334a0e0a6089d4014f82e9077ec1a27e27bfa1' as token_id, '9' as decimal union +select '0xfdc99999c4139f953a3af41de986687275bd4f4b' as token_id, '9' as decimal union +select '0x0aab8dc887d34f00d50e19aee48371a941390d14' as token_id, '6' as decimal union +select '0xbd18f2909a2b55637007fa273069febe9dab8664' as token_id, '18' as decimal union +select '0xe21b9bda4ecef9e4652bc5c6863f731c2151ef28' as token_id, '18' as decimal union +select '0xfe7ff8b5dfba93a9eab7aee447c3c72990052d93' as token_id, '18' as decimal union +select '0x33c9f7c0afe2722cb9e426360c261fb755b4483d' as token_id, '18' as decimal union +select '0x8ba941b64901e306667a287a370f145d98811096' as token_id, '18' as decimal union +select '0x34cba1561424b192f263883ba2b8ccbbc12bb13f' as token_id, '18' as decimal union +select '0x90fb380ddebaf872cc1f8d8e8c604ff2f4697c19' as token_id, '18' as decimal union +select '0x37c6656cd3882a422d87bd15ac547c5515c0df1c' as token_id, '18' as decimal union +select '0x7dd51d62ca7c94664111eee95b38dffda14d582d' as token_id, '18' as decimal union +select '0x121ef177a0489271b4339bc29ee64609b47d43c4' as token_id, '18' as decimal union +select '0xf86302c0716098ef5b3d358099683904f449ffb8' as token_id, '18' as decimal union +select '0xfbd8a3b908e764dbcd51e27992464b4432a1132b' as token_id, '18' as decimal union +select '0x9f9003c25d475ca76d925bfad0c568d8b3720353' as token_id, '18' as decimal union +select '0x03bc3f7affbe592e3f3502cf818aafb93b12334c' as token_id, '18' as decimal union +select '0x69CBC7449ee102eB792f1656744bF1A7c1bACB7e' as token_id, '18' as decimal union +select '0x0102bbfddffbd8d28d3a1b9c47017f62f42768f2' as token_id, '18' as decimal union +select '0x7c4a54f5d20b4023d6746f1f765f4dfe7c39a7e6' as token_id, '8' as decimal union +select '0x840195888db4d6a99ed9f73fcd3b225bb3cb1a79' as token_id, '18' as decimal union +select '0x76bf0c28e604cc3fe9967c83b3c3f31c213cfe64' as token_id, '18' as decimal union +select '0xb8dd82e944354b7bf9e9e0744ba5ff786581d372' as token_id, '18' as decimal union +select '0x9e2d266d6c90f6c0d80a88159b15958f7135b8af' as token_id, '18' as decimal union +select '0x47536f17f4ff30e64a96a7555826b8f9e66ec468' as token_id, '18' as decimal union +select '0x9c9c3d859a4c0dd0505ae57714f3231fe8a07149' as token_id, '9' as decimal union +select '0x7075cab6bcca06613e2d071bd918d1a0241379e2' as token_id, '18' as decimal union +select '0xa1428174f516f527fafdd146b883bb4428682737' as token_id, '18' as decimal union +select '0xaa9654becca45b5bdfa5ac646c939c62b527d394' as token_id, '18' as decimal union +select '0xf1c1a3c2481a3a8a3f173a9ab5ade275292a6fa3' as token_id, '18' as decimal union +select '0x4deb2036240f74ea5a6e7ce8bf32f74e3502cf38' as token_id, '9' as decimal union +select '0x3bfce6d6f0d3d3f1326d86abdbe2845b4740dc2e' as token_id, '18' as decimal union +select '0xc3ec80343d2bae2f8e680fdadde7c17e71e114ea' as token_id, '18' as decimal union +select '0x2e4b0fb46a46c90cb410fe676f24e466753b469f' as token_id, '18' as decimal union +select '0x4de7fea447b837d7e77848a4b6c0662a64a84e14' as token_id, '18' as decimal union +select '0x47536f17f4ff30e64a96a7555826b8f9e66ec468' as token_id, '18' as decimal union +select '0xeb2778f74E5ee038E67AA6c77f0F0451ABd748FD' as token_id, '18' as decimal union +select '0x9719d867a500ef117cc201206b8ab51e794d3f82' as token_id, '6' as decimal union +select '0xcE899f26928a2B21c6a2Fddd393EF37c61dbA918' as token_id, '18' as decimal union +select '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270' as token_id, '18' as decimal union +select '0x07738eb4ce8932ca961c815cb12c9d4ab5bd0da4' as token_id, '18' as decimal union +select '0x05089C9EBFFa4F0AcA269e32056b1b36B37ED71b' as token_id, '18' as decimal union +select '0xebf9b87583c284f0a1b7af72371f84d2a7567285' as token_id, '9' as decimal union +select '0x98ea609569bd25119707451ef982b90e3eb719cd' as token_id, '18' as decimal union +select '0xd55fce7cdab84d84f2ef3f99816d765a2a94a509' as token_id, '18' as decimal union +select '0x1c40ac03aacaf5f85808674e526e9c26309db92f' as token_id, '18' as decimal union +select '0x642f7511a68c57fae8ac0caa618673a66166e4c7' as token_id, '18' as decimal union +select '0x877c836246b39d9883b7061a8ba54a5d0ee61e72' as token_id, '18' as decimal union +select '0x771762d0ab8ea6906f3cbc700161ee8e9891bcb9' as token_id, '9' as decimal union +select '0xbe9512e2754cb938dd69bbb96c8a09cb28a02d6d' as token_id, '18' as decimal union +select '0x029c2bf9e5e7bf11328f045205308244e11efc46' as token_id, '18' as decimal union +select '0xd85d1e945766fea5eda9103f918bd915fbca63e6' as token_id, '4' as decimal union +select '0x2a93172c8dccbfbc60a39d56183b7279a2f647b4' as token_id, '18' as decimal union +select '0x8d1566569d5b695d44a9a234540f68d393cdc40d' as token_id, '18' as decimal union +select '0x42dbbd5ae373fea2fc320f62d44c058522bb3758' as token_id, '18' as decimal union +select '0x61daecab65ee2a1d5b6032df030f3faa3d116aa7' as token_id, '18' as decimal union +select '0x3a3df212b7aa91aa0402b9035b098891d276572b' as token_id, '18' as decimal union +select '0x4c4bf319237d98a30a929a96112effa8da3510eb' as token_id, '18' as decimal union +select '0x3dc7b06dd0b1f08ef9acbbd2564f8605b4868eea' as token_id, '18' as decimal union +select '0xdae5f1590db13e3b40423b5b5c5fbf175515910b' as token_id, '6' as decimal union +select '0xd9a2c5c0fb2f138c2b96582d29a648df70f80465' as token_id, '18' as decimal union +select '0xb272b6d99858b0efb079946942006727fe105201' as token_id, '18' as decimal union +select '0xf153eff70dc0bf3b085134928daeea248d9b30d0' as token_id, '9' as decimal union +select '0xd0660cd418a64a1d44e9214ad8e459324d8157f1' as token_id, '12' as decimal union +select '0xdf7837de1f2fa4631d716cf2502f8b230f1dcc32' as token_id, '2' as decimal union +select '0x8A953CfE442c5E8855cc6c61b1293FA648BAE472' as token_id, '18' as decimal union +select '0xce899f26928a2b21c6a2fddd393ef37c61dba918' as token_id, '18' as decimal union +select '0xdf2140dee6b07ae495382bc1cd446f7b328f63e3' as token_id, '9' as decimal union +select '0x4c16f69302ccb511c5fac682c7626b9ef0dc126a' as token_id, '18' as decimal union +select '0x245e5ddb65efea6522fa913229df1f4957fb2e21' as token_id, '18' as decimal union +select '0x6c0ab120dbd11ba701aff6748568311668f63fe0' as token_id, '18' as decimal union +select '0xfd6cf3a1fcb42371fd7e69633d31303868b8171a' as token_id, '18' as decimal union +select '0x87b078cf94b188efb9d2208cae47a66ea7fea09a' as token_id, '18' as decimal union +select '0x8c92e38eca8210f4fcbf17f0951b198dd7668292' as token_id, '18' as decimal union +select '0x0e59d50add2d90f5111aca875bae0a72d95b4762' as token_id, '18' as decimal union +select '0xd86b5923f3ad7b585ed81b448170ae026c65ae9a' as token_id, '18' as decimal union +select '0xfe6a2342f7c5d234e8496df12c468be17e0c181f' as token_id, '18' as decimal union +select '0x8bb30e0e67b11b978a5040144c410e1ccddcba30' as token_id, '10' as decimal union +select '0x72d6066f486bd0052eefb9114b66ae40e0a6031a' as token_id, '8' as decimal union +select '0x7dc0cb65ec6019330a6841e9c274f2ee57a6ca6c' as token_id, '18' as decimal union +select '0x1c954e8fe737f99f68fa1ccda3e51ebdb291948c' as token_id, '18' as decimal union +select '0xee7666aacaefaa6efeef62ea40176d3eb21953b9' as token_id, '18' as decimal union +select '0x76e63a3e7ba1e2e61d3da86a87479f983de89a7e' as token_id, '18' as decimal union +select '0x05089c9ebffa4f0aca269e32056b1b36b37ed71b' as token_id, '18' as decimal union +select '0x823CD4264C1b951C9209aD0DeAea9988fE8429bF' as token_id, '18' as decimal union +select '0xa3fa99a148fa48d14ed51d610c367c61876997f1' as token_id, '18' as decimal union +select '0x9c78ee466d6cb57a4d01fd887d2b5dfb2d46288f' as token_id, '18' as decimal union +select '0x60ac2e84078ce30cbc68e3d7b18bcf613271ce6b' as token_id, '18' as decimal union +select '0x42dbbd5ae373fea2fc320f62d44c058522bb3758' as token_id, '18' as decimal union +select '0x9c2c5fd7b07e95ee044ddeba0e97a665f142394f' as token_id, '18' as decimal union +select '0x0d962a1a2a27b402e4d84772dea65ac8592eb6bf' as token_id, '18' as decimal union +select '0x3BfcE6D6F0d3D3f1326d86abdbe2845b4740Dc2E' as token_id, '18' as decimal union +select '0x0aff058e91dc7c74c5e5f8aeb6f209b53e3b4681' as token_id, '18' as decimal union +select '0x26f6cb841f9d4d72b68d7dcb6fdb5d6c832dd2a7' as token_id, '9' as decimal union +select '0xa656dc2b1061f80f4e847bba2d9bd52db4889836' as token_id, '18' as decimal union +select '0xd0f3121a190d85de0ab6131f2bcecdbfcfb38891' as token_id, '18' as decimal union +select '0x9c49ba0212bb5db371e66b59d1565b7c06e4894e' as token_id, '18' as decimal union +select '0xeFb3009DdAc87E8144803d78E235E7fb4cd36e61' as token_id, '9' as decimal union +select '0x6b1faaa2771e8b3aa0e0ba6830436e2df2a0abd6' as token_id, '18' as decimal union +select '0x9e725Cf7265D12fd5f59499AFf1258CA92CAc74d' as token_id, '18' as decimal union +select '0x7e4c577ca35913af564ee2a24d882a4946ec492b' as token_id, '18' as decimal union +select '0x11a819beb0aa3327e39f52f90d65cc9bca499f33' as token_id, '18' as decimal union +select '0xa3860f969075045d82de85b06bb665f93c4bae32' as token_id, '18' as decimal union +select '0xab0b2ddb9c7e440fac8e140a89c0dbcbf2d7bbff' as token_id, '18' as decimal union +select '0xd5d84e75f48e75f01fb2eb6dfd8ea148ee3d0feb' as token_id, '18' as decimal union +select '0x85955046df4668e1dd369d2de9f3aeb98dd2a369' as token_id, '18' as decimal union +select '0x1d2a0e5ec8e5bbdca5cb219e649b565d8e5c3360' as token_id, '18' as decimal union +select '0xd46df541148932690b81092f600f35208afd4325' as token_id, '18' as decimal union +select '0x5fe2b58c013d7601147dcdd68c143a77499f5531' as token_id, '18' as decimal union +select '0x8505b9d2254a7ae468c0e9dd10ccea3a837aef5c' as token_id, '18' as decimal union +select '0x72572ccf5208b59f4bcc14e6653d8c31cd1fc5a0' as token_id, '18' as decimal union +select '0xaaa5b9e6c589642f98a1cda99b9d024b8407285a' as token_id, '18' as decimal union +select '0x2791bca1f2de4661ed88a30c99a7a9449aa84174' as token_id, '6' as decimal union +select '0x3ecdeb8fc5023839b92b0c293d049d61069e02b1' as token_id, '18' as decimal union +select '0x16eccfdbb4ee1a85a33f3a9b21175cd7ae753db4' as token_id, '18' as decimal union +select '0x80244c2441779361f35803b8c711c6c8fc6054a3' as token_id, '18' as decimal union +select '0x578360adf0bbb2f10ec9cec7ef89ef495511ed5f' as token_id, '8' as decimal union +select '0xab7589de4c581db0fb265e25a8e7809d84ccd7e8' as token_id, '18' as decimal union +select '0x127984b5e6d5c59f81dacc9f1c8b3bdc8494572e' as token_id, '18' as decimal union +select '0xdbf31df14b66535af65aac99c32e9ea844e14501' as token_id, '8' as decimal union +select '0x2ce13e4199443fdfff531abb30c9b6594446bbc7' as token_id, '18' as decimal union +select '0xfe1a200637464fbc9b60bc7aecb9b86c0e1d486e' as token_id, '18' as decimal union +select '0xc004e2318722ea2b15499d6375905d75ee5390b8' as token_id, '8' as decimal union +select '0xa5eb60ca85898f8b26e18ff7c7e43623ccba772c' as token_id, '18' as decimal union +select '0x0000000000000000000000000000000000001010' as token_id, '18' as decimal union +select '0x3a3Df212b7AA91Aa0402B9035b098891d276572B' as token_id, '18' as decimal union +select '0x0c8c8ae8bc3a69dc8482c01ceacfb588bb516b01' as token_id, '18' as decimal union +select '0x361a5a4993493ce00f61c32d4ecca5512b82ce90' as token_id, '18' as decimal union +select '0xb82A20B4522680951F11c94c54B8800c1C237693' as token_id, '18' as decimal union +select '0x5f1657896b38c4761dbc5484473c7a7c845910b6' as token_id, '18' as decimal union +select '0x175bdc4e52eecb675b86fc4c9a3ea3f80adbb610' as token_id, '18' as decimal union +select '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270' as token_id, '18' as decimal union +select '0xc2132d05d31c914a87c6611c10748aeb04b58e8f' as token_id, '6' as decimal union +select '0x52ede6bba83b7b4ba1d738df0df713d6a2036b71' as token_id, '18' as decimal union +select '0x033d942a6b495c4071083f4cde1f17e986fe856c' as token_id, '4' as decimal union +select '0x348e62131fce2f4e0d5ead3fe1719bc039b380a9' as token_id, '18' as decimal union +select '0xe6fc6c7cb6d2c31b359a49a33ef08ab87f4de7ce' as token_id, '6' as decimal union +select '0xd99bafe5031cc8b345cb2e8c80135991f12d7130' as token_id, '18' as decimal union +select '0x6f8a06447ff6fcf75d803135a7de15ce88c1d4ec' as token_id, '18' as decimal union +select '0x3cef98bb43d732e2f285ee605a8158cde967d219' as token_id, '18' as decimal union +select '0x8765f05adce126d70bcdf1b0a48db573316662eb' as token_id, '18' as decimal union +select '0x9d3ad47f8ddcbca3d72b3f36671a353379309042' as token_id, '18' as decimal union +select '0x0b3f868e0be5597d5db7feb59e1cadbb0fdda50a' as token_id, '18' as decimal union +select '0x13748d548d95d78a3c83fe3f32604b4796cffa23' as token_id, '9' as decimal union +select '0x172370d5cd63279efa6d502dab29171933a610af' as token_id, '18' as decimal union +select '0x11602a402281974a70c2b4824d58ebede967e2be' as token_id, '18' as decimal union +select '0x7cdc0421469398e0f3aa8890693d86c840ac8931' as token_id, '18' as decimal union +select '0xE1C8f3d529BEa8E3fA1FAC5B416335a2f998EE1C' as token_id, '18' as decimal union +select '0xca9e4a7617d5fdaaa49beb8dc8e506706324e253' as token_id, '18' as decimal union +select '0x3809dcdd5dde24b37abe64a5a339784c3323c44f' as token_id, '18' as decimal union +select '0x2e2dde47952b9c7defde7424d00dd2341ad927ca' as token_id, '18' as decimal union +select '0xf5ea626334037a2cf0155d49ea6462fddc6eff19' as token_id, '18' as decimal union +select '0xde799636af0d8d65a17aaa83b66cbbe9b185eb01' as token_id, '18' as decimal union +select '0x598e49f01befeb1753737934a5b11fea9119c796' as token_id, '11' as decimal union +select '0x7e4c577ca35913af564ee2a24d882a4946ec492b' as token_id, '18' as decimal union +select '0x98ea609569bD25119707451eF982b90E3eb719cD' as token_id, '18' as decimal union +select '0x68f044b59d96ec856ac72c29df997348c8c1fff3' as token_id, '18' as decimal union +select '0xb9638272ad6998708de56bbc0a290a1de534a578' as token_id, '18' as decimal union +select '0xc22d189ff43868a347fda822842b67b1c8c57612' as token_id, '18' as decimal union +select '0xdc0e17eae3b9651875030244b971fa0223a1764f' as token_id, '18' as decimal union +select '0x5c7f7fe4766fe8f0fa9b41e2e4194d939488ff1c' as token_id, '18' as decimal union +select '0xd201b8511aab3e9b094b35abcd5d7863c78d6d0e' as token_id, '18' as decimal union +select '0x94c7d657f1c8be06a4dc009d2d475bb559d858cb' as token_id, '18' as decimal union +select '0x9719d867A500Ef117cC201206B8ab51e794d3F82' as token_id, '6' as decimal union +select '0x28424507fefb6f7f8e9d3860f56504e4e5f5f390' as token_id, '18' as decimal union +select '0xf629712180bef6f4c569b704e03d0acbe276eb6d' as token_id, '18' as decimal union +select '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619' as token_id, '18' as decimal union +select '0xcfb54a6d2da14abecd231174fc5735b4436965d8' as token_id, '18' as decimal union +select '0xf501dd45a1198c2e1b5aef5314a68b9006d842e0' as token_id, '18' as decimal union +select '0x3a3e7650f8b9f667da98f236010fbf44ee4b2975' as token_id, '18' as decimal union +select '0x823cd4264c1b951c9209ad0deaea9988fe8429bf' as token_id, '18' as decimal union +select '0x9e01e0a928588ae6e669b8d1f0f1fa4ab976f617' as token_id, '18' as decimal union +select '0xecf8f2fa183b1c4d2a269bf98a54fce86c812d3e' as token_id, '18' as decimal union +select '0xda6f81c2426131337b0cf73768b94c2004390b0e' as token_id, '18' as decimal union +select '0xa1c57f48f0deb89f569dfbe6e2b7f46d33606fd4' as token_id, '18' as decimal union +select '0xf88332547c680f755481bf489d890426248bb275' as token_id, '18' as decimal union +select '0xb82a20b4522680951f11c94c54b8800c1c237693' as token_id, '18' as decimal union +select '0xd1e6354fb05bf72a8909266203dab80947dceccf' as token_id, '18' as decimal union +select '0xa6b37fc85d870711c56fbcb8afe2f8db049ae774' as token_id, '18' as decimal union +select '0x9af3b7dc29d3c4b1a5731408b6a9656fa7ac3b72' as token_id, '18' as decimal union +select '0x0361bdeab89df6bbcc52c43589fabba5143d19dd' as token_id, '18' as decimal union +select '0x46f48fbdedaa6f5500993bede9539ef85f4bee8e' as token_id, '18' as decimal union +select '0x3c5d1617c30ba71972add4b0c9a6b9848f2afeed' as token_id, '18' as decimal union +select '0x34c1b299a74588d6abdc1b85a53345a48428a521' as token_id, '18' as decimal union +select '0x8f18dc399594b451eda8c5da02d0563c0b2d0f16' as token_id, '9' as decimal union +select '0x60d55f02a771d515e077c9c2403a1ef324885cec' as token_id, '6' as decimal union +select '0x580a84c73811e1839f75d86d75d88cca0c241ff4' as token_id, '18' as decimal union +select '0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39' as token_id, '18' as decimal union +select '0x8f3cf7ad23cd3cadbd9735aff958023239c6a063' as token_id, '18' as decimal union +select '0xc3fdbadc7c795ef1d6ba111e06ff8f16a20ea539' as token_id, '18' as decimal union +select '0x609255414ff5289f87c99baf9737a4ec85a18643' as token_id, '18' as decimal union +select '0x8ca5ed20346c5d8a21a849d59c64f0884a532882' as token_id, '18' as decimal union +select '0xcbce9f77921c2e90522d438df4c5582f4c617768' as token_id, '18' as decimal union +select '0xe0b22e0037b130a9f56bbb537684e6fa18192341' as token_id, '18' as decimal union +select '0xfb005a1834eaaa6e55945b4b756e6873cecfe5ae' as token_id, '18' as decimal union +select '0xc56d17dD519e5eB43a19C9759b5D5372115220BD' as token_id, '18' as decimal union +select '0xeb2778f74e5ee038e67aa6c77f0f0451abd748fd' as token_id, '18' as decimal union +select '0xf28164a485b0b2c90639e47b0f377b4a438a16b1' as token_id, '18' as decimal union +select '0x6bb45ceac714c52342ef73ec663479da35934bf7' as token_id, '18' as decimal union +select '0x7f426F6Dc648e50464a0392E60E1BB465a67E9cf' as token_id, '18' as decimal union +select '0xe118e8b6dc166cd83695825eb1d30e792435bb00' as token_id, '9' as decimal union +select '0x9240d4bfa7f1d64bec2fdc8af2f70c04aec4293b' as token_id, '9' as decimal union +select '0x4c4bf319237d98a30a929a96112effa8da3510eb' as token_id, '18' as decimal union +select '0x2b9e7ccdf0f4e5b24757c1e1a80e311e34cb10c7' as token_id, '18' as decimal union +select '0xC004e2318722EA2b15499D6375905d75Ee5390B8' as token_id, '8' as decimal union +select '0x4cebdbcb286101a17d3ea1f7fe7bbded2b2053dd' as token_id, '18' as decimal union +select '0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3' as token_id, '18' as decimal union +select '0x831753dd7087cac61ab5644b308642cc1c33dc13' as token_id, '18' as decimal union +select '0xb565cf70613ca464d68427106af80c67a8e4b801' as token_id, '18' as decimal union +select '0x771762d0AB8EA6906F3CBC700161eE8e9891bcb9' as token_id, '9' as decimal union +select '0x8df3aad3a84da6b69a4da8aec3ea40d9091b2ac4' as token_id, '18' as decimal union +select '0xccbe9b810d6574701d324fd6dbe0a1b68f9d5bf7' as token_id, '18' as decimal union +select '0x6ae7dfc73e0dde2aa99ac063dcf7e8a63265108c' as token_id, '18' as decimal union +select '0xede1b77c0ccc45bfa949636757cd2ca7ef30137f' as token_id, '18' as decimal union +select '0x2727ab1c2d22170abc9b595177b2d5c6e1ab7b7b' as token_id, '18' as decimal union +select '0xfdc26cda2d2440d0e83cd1dee8e8be48405806dc' as token_id, '18' as decimal union +select '0x1132f58810ee9ff13e97aeccd8dda688cc5eb8f4' as token_id, '9' as decimal union +select '0xcfe2cf35d2bdde84967e67d00ad74237e234ce59' as token_id, '18' as decimal union +select '0xa2ca40dbe72028d3ac78b5250a8cb8c404e7fb8c' as token_id, '18' as decimal union +select '0x104592a158490a9228070e0a8e5343b499e125d0' as token_id, '18' as decimal union +select '0x692597b009d13c4049a947cab2239b7d6517875f' as token_id, '18' as decimal union +select '0xfbdd194376de19a88118e84e279b977f165d01b8' as token_id, '18' as decimal union +select '0x245e5ddb65eFea6522Fa913229dF1f4957fB2e21' as token_id, '18' as decimal union +select '0xe52509181feb30eb4979e29ec70d50fd5c44d590' as token_id, '18' as decimal union +select '0xf521d590fb1e0b432fd0e020cdbd6c6397d652c2' as token_id, '18' as decimal union +select '0x20D3922b4a1A8560E1aC99FBA4faDe0c849e2142' as token_id, '18' as decimal union +select '0xda537104d6a5edd53c6fbba9a898708e465260b6' as token_id, '18' as decimal union +select '0xd354d56dae3588f1145dd664bc5094437b889d6f' as token_id, '18' as decimal union +select '0x46d3EC8CE3eC767414F16FE12176De23E3E5B46A' as token_id, '18' as decimal union +select '0xd354d56dae3588f1145dd664bc5094437b889d6f' as token_id, '18' as decimal union +select '0x11b077300211dc3b4b316f02440a39dbb1818f19' as token_id, '18' as decimal union +select '0x66c59dded4ef01a3412a8b019b6e41d4a8c49a35' as token_id, '18' as decimal union +select '0x5b4cf2c120a9702225814e18543ee658c5f8631e' as token_id, '18' as decimal union +select '0x42435f467d33e5c4146a4e8893976ef12bbce762' as token_id, '18' as decimal union +select '0x24834bbec7e39ef42f4a75eaf8e5b6486d3f0e57' as token_id, '18' as decimal union +select '0x138b9c072879219cd6ef2d6d9e0d179b3396f07b' as token_id, '18' as decimal union +select '0xa3Fa99A148fA48D14Ed51d610c367C61876997F1' as token_id, '18' as decimal union +select '0xe20f7d1f0ec39c4d5db01f53554f2ef54c71f613' as token_id, '18' as decimal union +select '0x4a81f8796e0c6ad4877a51c86693b0de8093f2ef' as token_id, '18' as decimal union +select '0x1da554d34027ca8de74c5b1cd2fa53a8a1492c94' as token_id, '18' as decimal union +select '0x5b6ab5078bd2bbf1a215fffba16a94b7df7f639d' as token_id, '18' as decimal union +select '0x47cac8a868e301afb89b52ac31665858938e96b5' as token_id, '9' as decimal union +select '0x99da82c5464c49962cdda44fe30d352bc5da0580' as token_id, '9' as decimal union +select '0x6ccf12b480a99c54b23647c995f4525d544a7e72' as token_id, '18' as decimal union +select '0x9b71b5511998e0798625b8fa74e86d8192de78c1' as token_id, '18' as decimal union +select '0x6ddb31002abc64e1479fc439692f7ea061e78165' as token_id, '18' as decimal union +select '0x8d43b5c7e3d7577bbf75b70c3880b99164a23634' as token_id, '18' as decimal union +select '0xe82808eaa78339b06a691fd92e1be79671cad8d3' as token_id, '18' as decimal union +select '0x21de43d96cfddd203da3352545e0054534776652' as token_id, '18' as decimal union +select '0x72a5a58f79ffc2102227b92faeba93b169a3a3f1' as token_id, '18' as decimal union +select '0x50b728d8d964fd00c2d0aad81718b71311fef68a' as token_id, '18' as decimal union +select '0x029C2bf9E5e7bf11328f045205308244e11Efc46' as token_id, '18' as decimal union +select '0x76bf0c28e604cc3fe9967c83b3c3f31c213cfe64' as token_id, '18' as decimal union +select '0x3c5D1617C30BA71972adD4b0C9A6B9848f2afeeD' as token_id, '18' as decimal union +select '0x385eeac5cb85a38a9a07a70c73e0a3271cfb54a7' as token_id, '18' as decimal union +select '0xe20f7d1f0ec39c4d5db01f53554f2ef54c71f613' as token_id, '18' as decimal union +select '0xe86e8beb7340659dddce61727e500e3a5ad75a90' as token_id, '18' as decimal union +select '0xb140665dde25c644c6b418e417c930de8a8a6ac9' as token_id, '0' as decimal union +select '0x1379e8886a944d2d9d440b3d88df536aea08d9f3' as token_id, '18' as decimal union +select '0x3e121107f6f22da4911079845a470757af4e1a1b' as token_id, '18' as decimal union +select '0xAa9654BECca45B5BDFA5ac646c939C62b527D394' as token_id, '18' as decimal union +select '0x69cbc7449ee102eb792f1656744bf1a7c1bacb7e' as token_id, '18' as decimal union +select '0xa88b4ce79c5814fb7df5cc53a46bdf8e485168f9' as token_id, '18' as decimal union +select '0x914034f0ff781c430aa9594851cc95806fd19dc6' as token_id, '18' as decimal union +select '0x83a6da342099835bcaa9c219dd76a5033c837de5' as token_id, '18' as decimal union +select '0x7c28f627ea3aec8b882b51eb1935f66e5b875714' as token_id, '18' as decimal union +select '0xd86b5923f3ad7b585ed81b448170ae026c65ae9a' as token_id, '18' as decimal union +select '0xaf24765f631c8830b5528b57002241ee7eef1c14' as token_id, '6' as decimal union +select '0x1c0a798b5a5273a9e54028eb1524fd337b24145f' as token_id, '18' as decimal union +select '0x840195888db4d6a99ed9f73fcd3b225bb3cb1a79' as token_id, '18' as decimal union +select '0x874e178A2f3f3F9d34db862453Cd756E7eAb0381' as token_id, '18' as decimal union +select '0xc8bcb58caef1be972c0b638b1dd8b0748fdc8a44' as token_id, '18' as decimal union +select '0xb33eaad8d922b1083446dc23f610c2567fb5180f' as token_id, '18' as decimal union +select '0x8095d18fb1e702d69402a6a8c7a56bc1cce6ecc2' as token_id, '18' as decimal union +select '0xd6df932a45c0f255f85145f286ea0b292b21c90b' as token_id, '18' as decimal union +select '0xf4b8888427b00d7caf21654408b7cba2ecf4ebd9' as token_id, '18' as decimal union +select '0x7fbc10850cae055b27039af31bd258430e714c62' as token_id, '8' as decimal union +select '0xf7058856f405542cd660e8ce4751248f2d037f2b' as token_id, '4' as decimal union +select '0x874e178a2f3f3f9d34db862453cd756e7eab0381' as token_id, '18' as decimal union +select '0x87f654c4b347230c60cad8d7ea9cf0d7238bcc79' as token_id, '18' as decimal union +select '0x0e50bea95fe001a370a4f1c220c49aedcb982dec' as token_id, '18' as decimal union +select '0x8fe2526045e6658cd60c3ecbd92f6d33e73a1d1b' as token_id, '6' as decimal union +select '0x0c5ebed5cb5bd838bdc43e1583d9d054f3d7be6c' as token_id, '18' as decimal union +select '0xdf4d2226c810976c582a8111d831fa5fc543f7e5' as token_id, '18' as decimal union +select '0xc9c1c1c20b3658f8787cc2fd702267791f224ce1' as token_id, '18' as decimal union +select '0x96963189dc1dfbe8de4b1bb03c603adefcd3e59d' as token_id, '8' as decimal union +select '0x65c2c7095bfdc8460d7302b6a95c66cd5d8b2cff' as token_id, '18' as decimal union +select '0xe8b3d257202a9dfe00ec396b8a8a45fced1f5798' as token_id, '18' as decimal union +select '0xdd24e07c3c840ae6435e7c9f98e6ee6ce168d788' as token_id, '18' as decimal union +select '0xa3d595823beede02cc755ab4e22ad009a70cb590' as token_id, '9' as decimal union +select '0xf2c1b3b6eb00a3fe46478fc2e7a5e04997feba22' as token_id, '18' as decimal union +select '0xeab9cfb094db203e6035c2e7268a86debed5bd14' as token_id, '6' as decimal union +select '0xfa15611aa3775fbfe1375fb56cd3027f5d3dd2db' as token_id, '18' as decimal union +select '0xcf46c5bf01deae14a272f89a7b6c9e96a48f5546' as token_id, '18' as decimal union +select '0xc3cffdaf8f3fdf07da6d5e3a89b8723d5e385ff8' as token_id, '18' as decimal union +select '0xde4e5b3672c4077b69216b77d99d8ec35ec6c31a' as token_id, '18' as decimal union +select '0x6f3b3286fd86d8b47ec737ceb3d0d354cc657b3e' as token_id, '18' as decimal union +select '0x7120441ad773a6704d13dac8d8ccfe94da9afc9b' as token_id, '18' as decimal union +select '0xb6d5d0e2bad865750bc2cb21bbae636c3bad6581' as token_id, '18' as decimal union +select '0x1b815d120b3ef02039ee11dc2d33de7aa4a8c603' as token_id, '18' as decimal union +select '0xe2341718c6c0cbfa8e6686102dd8fbf4047a9e9b' as token_id, '18' as decimal union +select '0x990f860968714c2d16e91ec0cd9709a94264cf64' as token_id, '18' as decimal union +select '0x8c208bc2a808a088a78398fed8f2640cab0b6edb' as token_id, '18' as decimal union +select '0x13405cc33ffae0a9f91febb66b6b85a9c54da13a' as token_id, '18' as decimal union +select '0x6ee244034336f0135dcef9a5755d03a9f51dd114' as token_id, '18' as decimal union +select '0x282d8efce846a88b159800bd4130ad77443fa1a1' as token_id, '18' as decimal union +select '0x9ecf85badebd3ecf6ef79db44bb59519cbd21d82' as token_id, '9' as decimal union +select '0x800eb319e3f0e962d3ca8d625c871b8f1bdf2bc8' as token_id, '8' as decimal union +select '0xbe662058e00849c3eef2ac9664f37fefdf2cdbfe' as token_id, '9' as decimal union +select '0xb6509cbd9e2d1cec787a7357eb1578b86a0c702d' as token_id, '18' as decimal union +select '0x4e8dc2149eac3f3def36b1c281ea466338249371' as token_id, '18' as decimal union +select '0xfe712251173a2cd5f5be2b46bb528328ea3565e1' as token_id, '18' as decimal union +select '0x392f5c034b5423569a09bb172f408acb62a1be7a' as token_id, '18' as decimal union +select '0x49fc111e5ddd5580f48d6fdc4314540cb3a5cc4b' as token_id, '4' as decimal union +select '0x083bdf826f6a7419d3cef30b9e338316224c8e8b' as token_id, '18' as decimal union +select '0x09c5a4bca808bd1ba2b8e6b3aaf7442046b4ca5b' as token_id, '18' as decimal union +select '0x08bba6abe87e2a8c226a1c6c0d0e9cae758f82ec' as token_id, '18' as decimal union +select '0x8f6196901a4a153d8ee8f3fa779a042f6092d908' as token_id, '18' as decimal union +select '0xc25351811983818c9fe6d8c580531819c8ade90f' as token_id, '18' as decimal union +select '0x217ca87921b066728febc2d093fe9a6503450c47' as token_id, '18' as decimal union +select '0xf4b0903774532aee5ee567c02aab681a81539e92' as token_id, '18' as decimal union +select '0x580a84c73811e1839f75d86d75d88cca0c241ff4' as token_id, '18' as decimal union +select '0x8a953cfe442c5e8855cc6c61b1293fa648bae472' as token_id, '18' as decimal union +select '0xbe5cf150e1ff59ca7f2499eaa13bfc40aae70e78' as token_id, '18' as decimal union +select '0x81c88f5cff4fd506df906cb32f8b02218701b0c7' as token_id, '8' as decimal union +select '0x13748d548d95d78a3c83fe3f32604b4796cffa23' as token_id, '9' as decimal union +select '0x20d3922b4a1a8560e1ac99fba4fade0c849e2142' as token_id, '18' as decimal union +select '0xab72ee159ff70b64beecbbb0fbbe58b372391c54' as token_id, '18' as decimal union +select '0x034b2090b579228482520c589dbd397c53fc51cc' as token_id, '18' as decimal union +select '0xedd6ca8a4202d4a36611e2fff109648c4863ae19' as token_id, '18' as decimal union +select '0x64afdf9e28946419e325d801fb3053d8b8ffdc23' as token_id, '18' as decimal union +select '0xa7305ae84519ff8be02484cda45834c4e7d13dd6' as token_id, '18' as decimal union +select '0x1a13f4ca1d028320a707d99520abfefca3998b7f' as token_id, '6' as decimal union +select '0x669ddc70273084ea30e6cd4f28ca6e2c70735065' as token_id, '18' as decimal union +select '0x5c2ed810328349100a66b82b78a1791b101c9d61' as token_id, '8' as decimal union +select '0xad5dc12e88c6534eea8cfe2265851d9d4a1472ad' as token_id, '18' as decimal union +select '0x8f18dC399594b451EdA8c5da02d0563c0b2d0f16' as token_id, '9' as decimal union +select '0x1132f58810ee9ff13e97aeccd8dda688cc5eb8f4' as token_id, '9' as decimal union +select '0x1ba3510a9ceeb72e5cdba8bcdde9647e1f20fb4b' as token_id, '18' as decimal union +select '0xf480f38c366daac4305dc484b2ad7a496ff00cea' as token_id, '18' as decimal union +select '0xb75bbd79985a8092b05224f62d7fed25924b075d' as token_id, '18' as decimal union +select '0xa9e0cde4be86f5df7e2888753e5f663a41220469' as token_id, '18' as decimal union +select '0xefb3009ddac87e8144803d78e235e7fb4cd36e61' as token_id, '9' as decimal union +select '0x883abe4168705d2e5da925d28538b7a6aa9d8419' as token_id, '18' as decimal union +select '0xf84bd51eab957c2e7b7d646a3427c5a50848281d' as token_id, '8' as decimal union +select '0x2fe8733dcb25bfbba79292294347415417510067' as token_id, '18' as decimal union +select '0x468003b688943977e6130f4f68f23aad939a1040' as token_id, '9' as decimal union +select '0xfed16c746cb5bfed009730f9e3e6a673006105c7' as token_id, '0' as decimal union +select '0x957d1ad5214468332c5e6c00305a25116f9a46bb' as token_id, '18' as decimal union +select '0xfc5a11d0fe8b5ad23b8a643df5eae60b979ce1bf' as token_id, '18' as decimal union +select '0xce4e6da9c509cb33c23d748713c681c959f68658' as token_id, '18' as decimal union +select '0x0184316f58b9a44acdd3e683257259dc0cf2202a' as token_id, '18' as decimal union +select '0x0e2a70c08e884ea76116fccdc8b8be559162f08e' as token_id, '6' as decimal union +select '0x4fdce518fe527439fe76883e6b51a1c522b61b7c' as token_id, '18' as decimal union +select '0xc68e83a305b0fad69e264a1769a0a070f190d2d6' as token_id, '18' as decimal union +select '0x98b1d7ba836a0a73d741735a309a18febeb6299c' as token_id, '18' as decimal union +select '0xa7305ae84519ff8be02484cda45834c4e7d13dd6' as token_id, '18' as decimal union +select '0x1e42edbe5376e717c1b22904c59e406426e8173f' as token_id, '18' as decimal union +select '0x4e9a46ea6a22f3894abee2302ad42fd3b69e21e2' as token_id, '8' as decimal union +select '0xd6a5ab46ead26f49b03bbb1f9eb1ad5c1767974a' as token_id, '18' as decimal union +select '0xDAE5F1590db13E3B40423B5b5c5fbf175515910b' as token_id, '6' as decimal union +select '0xc56d17dd519e5eb43a19c9759b5d5372115220bd' as token_id, '18' as decimal union +select '0x8c8bdbe9cee455732525086264a4bf9cf821c498' as token_id, '18' as decimal union +select '0x23d29d30e35c5e8d321e1dc9a8a61bfd846d4c5c' as token_id, '8' as decimal union +select '0xe3ab61371ecc88534c522922a026f2296116c109' as token_id, '18' as decimal union +select '0x521cddc0cba84f14c69c1e99249f781aa73ee0bc' as token_id, '18' as decimal union +select '0x2e2DDe47952b9c7deFDE7424d00dD2341AD927Ca' as token_id, '18' as decimal union +select '0x5a3064cbdccf428ae907796cf6ad5a664cd7f3d8' as token_id, '18' as decimal union +select '0x03aa5daf9fd5f7f33c67afbcd53c1c1e87c4c9f7' as token_id, '18' as decimal union +select '0x0102bbfddffbd8d28d3a1b9c47017f62f42768f2' as token_id, '18' as decimal union +select '0x3ef402af15eeb3c80b4441e60913f31a5c41e077' as token_id, '18' as decimal union +select '0xa0e390e9cea0d0e8cd40048ced9fa9ea10d71639' as token_id, '18' as decimal union +select '0xe52509181feb30eb4979e29ec70d50fd5c44d590' as token_id, '18' as decimal union +select '0xd016caae879c42cb0d74bb1a265021bf980a7e96' as token_id, '18' as decimal union +select '0xaaa5b9e6c589642f98a1cda99b9d024b8407285a' as token_id, '18' as decimal union +select '0x27f8d03b3a2196956ed754badc28d73be8830a6e' as token_id, '18' as decimal union +select '0xc168e40227e4ebd8c1cae80f7a55a4f0e6d66c97' as token_id, '18' as decimal union +select '0x71b821aa52a49f32eed535fca6eb5aa130085978' as token_id, '8' as decimal union +select '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6' as token_id, '8' as decimal union +select '0xd28449bb9bb659725accad52947677cce3719fd7' as token_id, '18' as decimal union +select '0x23001f892c0c82b79303edc9b9033cd190bb21c7' as token_id, '18' as decimal union +select '0x08158a6b5d4018340387d1a302f882e98a8bc5b4' as token_id, '18' as decimal union +select '0x874e178a2f3f3f9d34db862453cd756e7eab0381' as token_id, '18' as decimal union +select '0x87f654c4b347230c60cad8d7ea9cf0d7238bcc79' as token_id, '18' as decimal) a +where a.decimal <> 'NA' \ No newline at end of file diff --git a/models/polygon/polygon_dbt__events_emitted.sql b/models/polygon/polygon_dbt__events_emitted.sql new file mode 100644 index 00000000..633cdc8f --- /dev/null +++ b/models/polygon/polygon_dbt__events_emitted.sql @@ -0,0 +1,34 @@ +{{ + config( + materialized='incremental', + unique_key='chain_id || block_id || tx_id || event_index', + incremental_strategy='delete+insert', + tags=['snowflake', 'polygon_silver', 'polygon_dbt_events_emitted','polygon'] + ) +}} + +with base_tables as ( + select * + from {{source('bronze', 'prod_matic_sink_510901820')}} + where record_content:model:name::string = 'polygon_events_emitted_model' + {% if is_incremental() %} + AND (record_metadata:CreateTime::int/1000)::timestamp::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('polygon_dbt', 'events_emitted')}}) + {% endif %} + ) + +select (record_metadata:CreateTime::int/1000)::timestamp as system_created_at +, record_content:model:blockchain::string as chain_id +, a.value:block_id::int as block_id +, a.value:block_timestamp::timestamp as block_timestamp +, a.value:contract_address::string as contract_address +, a.value:contract_name::string as contract_name +, a.value:event_index::int as event_index +, a.value:event_inputs::object as event_inputs +, a.value:event_name::string as event_name +, a.value:event_removed::boolean as event_removed +, a.value:tx_from::string as tx_from +, a.value:tx_id::string as tx_id +, a.value:tx_succeeded::boolean as tx_succeeded +, a.value:tx_to::string as tx_to +from base_tables +,lateral flatten(input => record_content:results) a \ No newline at end of file diff --git a/models/polygon/polygon_dbt__transactions.sql b/models/polygon/polygon_dbt__transactions.sql new file mode 100644 index 00000000..cbd1b507 --- /dev/null +++ b/models/polygon/polygon_dbt__transactions.sql @@ -0,0 +1,36 @@ +{{ + config( + materialized='incremental', + unique_key='chain_id || block_id || tx_id', + incremental_strategy='delete+insert', + tags=['snowflake', 'polygon_silver', 'polygon_dbt_transactions','polygon'] + ) +}} + +with base_tables as ( + select * + from {{source('bronze', 'prod_matic_sink_510901820')}} + where record_content:model:name::string = 'polygon_txs_model' + {% if is_incremental() %} + AND (record_metadata:CreateTime::int/1000)::timestamp::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('polygon_dbt', 'transactions')}}) + {% endif %} + ) + +select (record_metadata:CreateTime::int/1000)::timestamp as system_created_at +, record_content:model:blockchain::string as chain_id +, a.value:block_id::int as block_id +, a.value:block_timestamp::timestamp as block_timestamp +, a.value:fee::float as fee +, a.value:from_address::string as from_address +, a.value:gas_limit::int as gas_limit +, a.value:gas_price::int as gas_price +, a.value:gas_used::int as gas_used +, a.value:input_method::string as input_method +, a.value:native_value::float as native_value +, a.value:nonce::int as nonce +, a.value:success::boolean as success +, a.value:to_address::string as to_address +, a.value:tx_id::string as tx_id +, a.value:tx_position::int as tx_position +from base_tables +,lateral flatten(input => record_content:results) a \ No newline at end of file diff --git a/models/polygon/polygon_dbt__udm_events.sql b/models/polygon/polygon_dbt__udm_events.sql new file mode 100644 index 00000000..3f021b76 --- /dev/null +++ b/models/polygon/polygon_dbt__udm_events.sql @@ -0,0 +1,36 @@ +{{ + config( + materialized='incremental', + unique_key='chain_id || block_id || tx_id || log_index', + incremental_strategy='delete+insert', + tags=['snowflake', 'polygon_silver', 'polygon_dbt_udm_events','polygon'] + ) +}} + +with base_tables as ( + select * + from {{source('bronze', 'prod_matic_sink_510901820')}} + where record_content:model:name::string = 'polygon_udm_events_model' + {% if is_incremental() %} + AND (record_metadata:CreateTime::int/1000)::timestamp::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('polygon_dbt', 'udm_events')}}) + {% endif %} + ) + +select (record_metadata:CreateTime::int/1000)::timestamp as system_created_at +, record_content:model:blockchain::string as chain_id +, a.value:block_id::int as block_id +, a.value:block_timestamp::timestamp as block_timestamp +, a.value:contract_address::string as contract_address +, a.value:fee::float as fee +, a.value:from_address::string as from_address +, a.value:input_method::string as input_method +, a.value:log_index::int as log_index +, a.value:log_method::string as log_method +, a.value:name::string as name +, a.value:native_value::float as native_value +, a.value:symbol::string as symbol +, a.value:to_address::string as to_address +, a.value:token_value::float as token_value +, a.value:tx_id::string as tx_id +from base_tables +,lateral flatten(input => record_content:results) a diff --git a/models/polygon/silver/silver_polygon__events_emitted.sql b/models/polygon/silver/silver_polygon__events_emitted.sql new file mode 100644 index 00000000..9c6b6685 --- /dev/null +++ b/models/polygon/silver/silver_polygon__events_emitted.sql @@ -0,0 +1,17 @@ +{{ + config( + materialized='incremental', + unique_key='chain_id || block_id || tx_id || event_index', + incremental_strategy='delete+insert', + cluster_by=['block_timestamp', 'block_id'], + tags=['snowflake', 'polygon_silver', 'polygon_events_emitted','polygon'] + ) +}} + +select * +from {{ ref('polygon_dbt__events_emitted')}} +WHERE 1=1 +{% if is_incremental() %} + AND system_created_at >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('silver_polygon', 'events_emitted')}}) +{% endif %} +QUALIFY(row_number() over(partition by chain_id, block_id, tx_id, event_index order by system_created_at desc)) = 1 \ No newline at end of file diff --git a/models/polygon/silver/silver_polygon__transactions.sql b/models/polygon/silver/silver_polygon__transactions.sql new file mode 100644 index 00000000..c82aed12 --- /dev/null +++ b/models/polygon/silver/silver_polygon__transactions.sql @@ -0,0 +1,17 @@ +{{ + config( + materialized='incremental', + unique_key='chain_id || block_id || tx_id', + incremental_strategy='delete+insert', + cluster_by=['block_timestamp', 'block_id'], + tags=['snowflake', 'polygon_silver', 'polygon_transactions','polygon'] + ) +}} + +select * +from {{ ref('polygon_dbt__transactions')}} +WHERE 1=1 +{% if is_incremental() %} + AND system_created_at >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('silver_polygon', 'transactions')}}) +{% endif %} +QUALIFY(row_number() over(partition by chain_id, block_id, tx_id order by system_created_at desc)) = 1 \ No newline at end of file diff --git a/models/polygon/silver/silver_polygon__udm_events.sql b/models/polygon/silver/silver_polygon__udm_events.sql new file mode 100644 index 00000000..436c0790 --- /dev/null +++ b/models/polygon/silver/silver_polygon__udm_events.sql @@ -0,0 +1,17 @@ +{{ + config( + materialized='incremental', + unique_key='chain_id || block_id || tx_id || log_index', + incremental_strategy='delete+insert', + cluster_by=['block_timestamp', 'block_id'], + tags=['snowflake', 'polygon_silver', 'polygon_udm_events','polygon'] + ) +}} + +select * +from {{ ref('polygon_dbt__udm_events')}} +WHERE 1=1 +{% if is_incremental() %} + AND system_created_at >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('silver_polygon', 'udm_events')}}) +{% endif %} +QUALIFY(row_number() over(partition by chain_id, block_id, tx_id, log_index order by system_created_at desc)) = 1 \ No newline at end of file diff --git a/models/sources.yml b/models/sources.yml index f92cfb7f..36e5916a 100644 --- a/models/sources.yml +++ b/models/sources.yml @@ -148,3 +148,34 @@ sources: - name: msg_events - name: transactions - name: transitions + - name: silver_polygon + schema: silver_polygon + tables: + - name: udm_events + - name: events_emitted + - name: transactions + - name: polygon_dbt + schema: polygon_dbt + tables: + - name: udm_events + - name: events_emitted + - name: transactions + - name: polygon + schema: polygon + tables: + - name: udm_events + - name: events_emitted + - name: transactions + - name: bronze + schema: bronze + tables: + - name: prod_matic_sink_510901820 + - name: prod_terra_sink_645110886 + - name: terra_dbt + schema: terra_dbt + tables: + - name: blocks + - name: msgs + - name: msg_events + - name: transactions + - name: transitions diff --git a/models/terra/silver/silver_terra__blocks.sql b/models/terra/silver/silver_terra__blocks.sql index e263471f..5bb2d9ee 100644 --- a/models/terra/silver/silver_terra__blocks.sql +++ b/models/terra/silver/silver_terra__blocks.sql @@ -1,27 +1,17 @@ {{ config( - materialized='incremental', - sort=['block_timestamp', 'block_id'], - unique_key='chain_id || block_id || proposer_address', + materialized='incremental', + unique_key='chain_id || block_id', incremental_strategy='delete+insert', cluster_by=['block_timestamp', 'block_id'], - tags=['snowflake', 'terra_silver', 'blocks'] + tags=['snowflake', 'terra_silver', 'terra_blocks'] ) }} -{% set BRONZE_BACKFILL_TABLE = '"FLIPSIDE_PROD_DB"."BRONZE"."DS_BF_TERRA_BLOCK_MODEL_V2021_06_15_0_PROD_1027559933"' %} -{% set BRONZE_TABLES = [BRONZE_BACKFILL_TABLE] %} - -{{ - bronze_kafka_extract( - BRONZE_TABLES, - " - t.value:blockchain::string as blockchain, - t.value:block_id::bigint as block_id, - t.value:block_timestamp::timestamp as block_timestamp, - t.value:chain_id::string as chain_id, - t.value:proposer_address::string as proposer_address - ", - "chain_id, block_id, proposer_address" - ) -}} +select * +from {{ ref('terra_dbt__blocks')}} +WHERE 1=1 +{% if is_incremental() %} + AND system_created_at::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('silver_terra', 'blocks')}}) +{% endif %} +QUALIFY(row_number() over(partition by chain_id, block_id order by system_created_at desc)) = 1 \ No newline at end of file diff --git a/models/terra/silver/silver_terra__msg_events.sql b/models/terra/silver/silver_terra__msg_events.sql index 27f12275..86e1bea6 100644 --- a/models/terra/silver/silver_terra__msg_events.sql +++ b/models/terra/silver/silver_terra__msg_events.sql @@ -1,36 +1,17 @@ {{ config( - materialized='incremental', - sort=['block_timestamp', 'block_id'], - unique_key='chain_id || tx_id || msg_index || event_index', + materialized='incremental', + unique_key='chain_id || block_id || tx_id || msg_index || event_index || event_type', incremental_strategy='delete+insert', - cluster_by=['block_timestamp', 'block_id'], - tags=['snowflake', 'terra_silver', 'msgs'] + cluster_by=['block_timestamp', 'block_id', 'tx_id'], + tags=['snowflake', 'terra_silver', 'terra_msg_events'] ) }} -{% set BRONZE_BACKFILL_TABLE = '"FLIPSIDE_PROD_DB"."BRONZE"."DS_BF_TERRA_MSG_EVENT_MODEL_V2021_06_15_0_PROD_1133065308"' %} -{% set BRONZE_TABLES = [BRONZE_BACKFILL_TABLE] %} - -{{ - bronze_kafka_extract( - BRONZE_TABLES, - " - t.value:blockchain::string as blockchain, - t.value:block_id::bigint as block_id, - t.value:block_timestamp::timestamp as block_timestamp, - t.value:chain_id::string as chain_id, - t.value:tx_id::string as tx_id, - t.value:tx_module::string as tx_module, - t.value:tx_status::string as tx_status, - t.value:tx_type::string as tx_type, - t.value:msg_index::integer as msg_index, - t.value:msg_type::string as msg_type, - t.value:msg_module::string as msg_module, - t.value:event_type::string as event_type, - t.value:event_index::integer as event_index, - t.value:event_attributes::object as event_attributes - ", - "chain_id, tx_id, msg_index, event_index" - ) -}} +select * +from {{ ref('terra_dbt__msg_events')}} +WHERE 1=1 +{% if is_incremental() %} + AND system_created_at::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('silver_terra', 'msg_events')}}) +{% endif %} +QUALIFY(row_number() over(partition by chain_id, block_id, tx_id, msg_index, event_index, event_type order by system_created_at desc)) = 1 diff --git a/models/terra/silver/silver_terra__msgs.sql b/models/terra/silver/silver_terra__msgs.sql index 800615c3..bf9149b6 100644 --- a/models/terra/silver/silver_terra__msgs.sql +++ b/models/terra/silver/silver_terra__msgs.sql @@ -1,36 +1,17 @@ {{ config( - materialized='incremental', - sort=['block_timestamp', 'block_id'], - unique_key='chain_id || tx_id || msg_index', + materialized='incremental', + unique_key='chain_id || block_id || tx_id || msg_index', incremental_strategy='delete+insert', - cluster_by=['block_timestamp', 'block_id'], - tags=['snowflake', 'terra_silver', 'msgs'] + cluster_by=['block_timestamp', 'block_id', 'tx_id'], + tags=['snowflake', 'terra_silver', 'terra_msgs'] ) }} -{% set BRONZE_BACKFILL_TABLE = '"FLIPSIDE_PROD_DB"."BRONZE"."DS_BF_TERRA_MSG_MODEL_V2021_06_15_0_PROD_246303625"' %} --- {% set BRONZE_REALTIME_TABLE = '"FLIPSIDE_PROD_DB"."BRONZE"."DOOR_SINK_TERRA_MSG_MODEL_PROD_78141091"' %} -{% set BRONZE_TABLES = [BRONZE_BACKFILL_TABLE] %} - - -{{ - bronze_kafka_extract( - BRONZE_TABLES, - " - t.value:blockchain::string as blockchain, - t.value:block_id::bigint as block_id, - t.value:block_timestamp::timestamp as block_timestamp, - t.value:chain_id::string as chain_id, - t.value:tx_id::string as tx_id, - t.value:tx_type::string as tx_type, - t.value:tx_status::string as tx_status, - t.value:tx_module::string as tx_module, - t.value:msg_index::integer as msg_index, - t.value:msg_type::string as msg_type, - t.value:msg_module::string as msg_module, - t.value:msg_value::variant as msg_value - ", - "chain_id, tx_id, msg_index" - ) -}} +select * +from {{ ref('terra_dbt__msgs')}} +WHERE 1=1 +{% if is_incremental() %} + AND system_created_at::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('silver_terra', 'msgs')}}) +{% endif %} +QUALIFY(row_number() over(partition by chain_id, block_id, tx_id, msg_index order by system_created_at desc)) = 1 diff --git a/models/terra/silver/silver_terra__transactions.sql b/models/terra/silver/silver_terra__transactions.sql index ada0e307..02d979a8 100644 --- a/models/terra/silver/silver_terra__transactions.sql +++ b/models/terra/silver/silver_terra__transactions.sql @@ -1,37 +1,17 @@ {{ config( - materialized='incremental', - sort=['block_timestamp', 'block_id'], - unique_key='chain_id || tx_id', + materialized='incremental', + unique_key='chain_id || block_id || tx_id', incremental_strategy='delete+insert', cluster_by=['block_timestamp', 'block_id'], - tags=['snowflake', 'terra_silver', 'msgs'] + tags=['snowflake', 'terra_silver', 'terra_transactions'] ) }} -{% set BRONZE_BACKFILL_TABLE = '"FLIPSIDE_PROD_DB"."BRONZE"."DS_BF_TERRA_TX_MODEL_V2021_06_15_0_PROD_174292778"' %} --- {% set BRONZE_REALTIME_TABLE = '"FLIPSIDE_PROD_DB"."BRONZE"."DOOR_SINK_TERRA_TX_MODEL_PROD_1210790700"' %} -{% set BRONZE_TABLES = [BRONZE_BACKFILL_TABLE] %} - -{{ - bronze_kafka_extract( - BRONZE_TABLES, - " - t.value:blockchain::string as blockchain, - t.value:block_id::bigint as block_id, - t.value:block_timestamp::timestamp as block_timestamp, - t.value:chain_id::string as chain_id, - t.value:codespace::string as codespace, - t.value:tx_id::string as tx_id, - t.value:tx_type::string as tx_type, - t.value:tx_module::string as tx_module, - t.value:tx_status::string as tx_status, - t.value:tx_status_msg::string as tx_status_msg, - t.value:tx_code::integer as tx_code, - t.value:fee::array as fee, - t.value:gas_wanted::double as gas_wanted, - t.value:gas_used::double as gas_used - ", - "chain_id, tx_id" - ) -}} +select * +from {{ ref('terra_dbt__transactions')}} +WHERE 1=1 +{% if is_incremental() %} + AND system_created_at::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('silver_terra', 'transactions')}}) +{% endif %} +QUALIFY(row_number() over(partition by chain_id, block_id, tx_id order by system_created_at desc)) = 1 \ No newline at end of file diff --git a/models/terra/silver/silver_terra__transitions.sql b/models/terra/silver/silver_terra__transitions.sql index 65c91e76..e22b0e14 100644 --- a/models/terra/silver/silver_terra__transitions.sql +++ b/models/terra/silver/silver_terra__transitions.sql @@ -1,30 +1,17 @@ {{ config( - materialized='incremental', - sort=['block_timestamp', 'block_id'], + materialized='incremental', unique_key='chain_id || block_id || index || transition_type || event', incremental_strategy='delete+insert', cluster_by=['block_timestamp', 'block_id'], - tags=['snowflake', 'terra_silver', 'transitions'] + tags=['snowflake', 'terra_silver', 'terra_transitions'] ) }} -{% set BRONZE_BACKFILL_TABLE = '"FLIPSIDE_PROD_DB"."BRONZE"."DS_BF_TERRA_TRANSITION_MODEL_V2021_06_15_0_PROD_680478501"' %} -{% set BRONZE_TABLES = [BRONZE_BACKFILL_TABLE] %} - -{{ - bronze_kafka_extract( - BRONZE_TABLES, - " - t.value:blockchain::string as blockchain, - t.value:block_id::bigint as block_id, - t.value:block_timestamp::timestamp as block_timestamp, - t.value:chain_id::string as chain_id, - t.value:event::string as event, - t.value:index::integer as index, - t.value:transition_type::string as transition_type, - t.value:attributes::object as event_attributes - ", - "chain_id, block_id, event, index, transition_type" - ) -}} +select * +from {{ ref('terra_dbt__transitions')}} +WHERE 1=1 +{% if is_incremental() %} + AND system_created_at::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('silver_terra', 'transitions')}}) +{% endif %} +QUALIFY(row_number() over(partition by chain_id, block_id, index, transition_type, event order by system_created_at desc)) = 1 diff --git a/models/terra/terra__blocks.sql b/models/terra/terra__blocks.sql index 3a108cc2..b30b116f 100644 --- a/models/terra/terra__blocks.sql +++ b/models/terra/terra__blocks.sql @@ -1,7 +1,7 @@ {{ config( materialized='view', - tags=['snowflake', 'terra_views', 'blocks'] + tags=['snowflake', 'terra_views', 'blocks', 'terra'], ) }} diff --git a/models/terra/terra__daily_balances.sql b/models/terra/terra__daily_balances.sql index 44131263..c21a8aca 100644 --- a/models/terra/terra__daily_balances.sql +++ b/models/terra/terra__daily_balances.sql @@ -39,9 +39,9 @@ ON LEFT OUTER JOIN {{source('shared','udm_address_labels_new')}} as address_labels ON b.address = address_labels.address -WHERE +WHERE 1=1 {% if is_incremental() %} - date >= getdate() - interval '3 days' - {% else %} - date >= getdate() - interval '12 months' + AND date >= getdate() - interval '3 days' + -- {% else %} + -- date >= getdate() - interval '12 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra__gov_submit_proposal.sql b/models/terra/terra__gov_submit_proposal.sql index 04dbf847..ca27f4eb 100644 --- a/models/terra/terra__gov_submit_proposal.sql +++ b/models/terra/terra__gov_submit_proposal.sql @@ -67,6 +67,6 @@ WHERE msg_module = 'gov' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra__gov_vote.sql b/models/terra/terra__gov_vote.sql index 0ba71063..d2a91b92 100644 --- a/models/terra/terra__gov_vote.sql +++ b/models/terra/terra__gov_vote.sql @@ -26,15 +26,15 @@ WITH balances as ( {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' - {% else %} - AND block_timestamp >= getdate() - interval '9 months' + -- {% else %} + -- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ) {% if is_incremental() %} AND date >= getdate() - interval '1 days' -{% else %} - AND date >= getdate() - interval '9 months' +-- {% else %} +-- AND date >= getdate() - interval '9 months' {% endif %} ) @@ -69,6 +69,6 @@ WHERE msg_module = 'gov' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra__msg_events.sql b/models/terra/terra__msg_events.sql index 97a2b4db..77c79ea6 100644 --- a/models/terra/terra__msg_events.sql +++ b/models/terra/terra__msg_events.sql @@ -1,7 +1,7 @@ {{ config( materialized='view', - tags=['snowflake', 'terra_views', 'msg_events'] + tags=['snowflake', 'terra_views', 'msg_events', 'terra'] ) }} diff --git a/models/terra/terra__msgs.sql b/models/terra/terra__msgs.sql index 47f405d8..8b4f2a5e 100644 --- a/models/terra/terra__msgs.sql +++ b/models/terra/terra__msgs.sql @@ -1,7 +1,7 @@ {{ config( materialized='view', - tags=['snowflake', 'terra_views', 'msgs'] + tags=['snowflake', 'terra_views', 'msgs', 'terra'] ) }} diff --git a/models/terra/terra__oracle_prices.sql b/models/terra/terra__oracle_prices.sql index 3b548f39..6a8f93cf 100644 --- a/models/terra/terra__oracle_prices.sql +++ b/models/terra/terra__oracle_prices.sql @@ -66,8 +66,8 @@ WHERE msg_value:contract = 'terra1t6xe0txzywdg85n6k8c960cuwgh6l8esw6lau9' --Mirr {% if is_incremental() %} AND m.block_timestamp >= getdate() - interval '1 days' - {% else %} - AND m.block_timestamp >= getdate() - interval '9 months' + -- {% else %} + -- AND m.block_timestamp >= getdate() - interval '9 months' {% endif %} ) diff --git a/models/terra/terra__swaps.sql b/models/terra/terra__swaps.sql index 4632a4ac..30f71cec 100644 --- a/models/terra/terra__swaps.sql +++ b/models/terra/terra__swaps.sql @@ -29,8 +29,8 @@ WHERE msg_module = 'market' AND msg_type = 'market/MsgSwap' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), @@ -52,8 +52,8 @@ WHERE event_type = 'transfer' AND msg_type = 'market/MsgSwap' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), @@ -69,8 +69,8 @@ WHERE event_type = 'swap' AND msg_type = 'market/MsgSwap' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), diff --git a/models/terra/terra__tax_rate.sql b/models/terra/terra__tax_rate.sql index 71dceb4d..3dea74b9 100644 --- a/models/terra/terra__tax_rate.sql +++ b/models/terra/terra__tax_rate.sql @@ -15,9 +15,9 @@ SELECT block_number, tax_rate FROM {{source('terra', 'udm_custom_fields_terra_tax_rate')}} -WHERE +WHERE 1=1 {% if is_incremental() %} - block_timestamp >= getdate() - interval '1 days' -{% else %} - block_timestamp >= getdate() - interval '9 months' + AND block_timestamp >= getdate() - interval '1 days' +-- {% else %} +-- block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra__transactions.sql b/models/terra/terra__transactions.sql index 21d08185..486ce077 100644 --- a/models/terra/terra__transactions.sql +++ b/models/terra/terra__transactions.sql @@ -1,7 +1,7 @@ {{ config( materialized='view', - tags=['snowflake', 'terra_views', 'transactions'] + tags=['snowflake', 'terra_views', 'transactions', 'terra'] ) }} diff --git a/models/terra/terra__transfers.sql b/models/terra/terra__transfers.sql index 160c135c..c7c8c871 100644 --- a/models/terra/terra__transfers.sql +++ b/models/terra/terra__transfers.sql @@ -49,8 +49,8 @@ inputs as( {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' - {% else %} - AND block_timestamp >= getdate() - interval '9 months' + -- {% else %} + -- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), @@ -66,8 +66,8 @@ outputs as( {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' - {% else %} - AND block_timestamp >= getdate() - interval '9 months' + -- {% else %} + -- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), @@ -110,8 +110,8 @@ WHERE msg_module = 'bank' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ) diff --git a/models/terra/terra__transitions.sql b/models/terra/terra__transitions.sql index e7e3bf33..1b6c5c0f 100644 --- a/models/terra/terra__transitions.sql +++ b/models/terra/terra__transitions.sql @@ -1,7 +1,7 @@ {{ config( materialized='view', - tags=['snowflake', 'terra_views', 'transitions'] + tags=['snowflake', 'terra_views', 'transitions', 'terra'] ) }} diff --git a/models/terra/terra__validator_voting_power.sql b/models/terra/terra__validator_voting_power.sql index cfb44d70..b29efd16 100644 --- a/models/terra/terra__validator_voting_power.sql +++ b/models/terra/terra__validator_voting_power.sql @@ -16,9 +16,9 @@ SELECT address, voting_power FROM {{source('terra', 'terra_validator_voting_power')}} -WHERE +WHERE 1=1 {% if is_incremental() %} - block_timestamp >= getdate() - interval '1 days' -{% else %} - block_timestamp >= getdate() - interval '9 months' + AND block_timestamp >= getdate() - interval '1 days' +-- {% else %} +-- block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra_dbt__blocks.sql b/models/terra/terra_dbt__blocks.sql new file mode 100644 index 00000000..b1d57375 --- /dev/null +++ b/models/terra/terra_dbt__blocks.sql @@ -0,0 +1,26 @@ +{{ + config( + materialized='incremental', + unique_key='chain_id || block_id', + incremental_strategy='delete+insert', + tags=['snowflake', 'terra_silver', 'terra_blocks'] + ) +}} + +with base_tables as ( + select * + from {{source('bronze', 'prod_terra_sink_645110886')}} + where record_content:model:name::string = 'terra_block_model' + {% if is_incremental() %} + AND (record_metadata:CreateTime::int/1000)::timestamp::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('terra_dbt', 'blocks')}}) + {% endif %} + ) + +select (record_metadata:CreateTime::int/1000)::timestamp as system_created_at +, record_content:model:blockchain::string as chain_id +, t.value:block_id::int as block_id +, t.value:block_timestamp::timestamp as block_timestamp +, t.value:blockchain::string as blockchain +, t.value:proposer_address::string as proposer_address +from base_tables +,lateral flatten(input => record_content:results) t \ No newline at end of file diff --git a/models/terra/terra_dbt__create_validator.sql b/models/terra/terra_dbt__create_validator.sql index e453aa0c..213685d3 100644 --- a/models/terra/terra_dbt__create_validator.sql +++ b/models/terra/terra_dbt__create_validator.sql @@ -34,8 +34,8 @@ WHERE msg_module = 'staking' AND msg_type = 'staking/MsgCreateValidator' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), @@ -66,8 +66,8 @@ WHERE msg_module = 'staking' AND msg_type = 'staking/MsgCreateValidator' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), diff --git a/models/terra/terra_dbt__delegate.sql b/models/terra/terra_dbt__delegate.sql index c79fc115..7a9e9da9 100644 --- a/models/terra/terra_dbt__delegate.sql +++ b/models/terra/terra_dbt__delegate.sql @@ -28,8 +28,8 @@ WITH staking AS ( AND tx_status = 'SUCCEEDED' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' - {% else %} - AND block_timestamp >= getdate() - interval '9 months' + -- {% else %} + -- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ) diff --git a/models/terra/terra_dbt__delegate_events.sql b/models/terra/terra_dbt__delegate_events.sql index b6a919d9..b46bf19b 100644 --- a/models/terra/terra_dbt__delegate_events.sql +++ b/models/terra/terra_dbt__delegate_events.sql @@ -38,6 +38,6 @@ WHERE msg_module = 'staking' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} diff --git a/models/terra/terra_dbt__delegate_feed_consent.sql b/models/terra/terra_dbt__delegate_feed_consent.sql index 21de34a4..2ad9a02a 100644 --- a/models/terra/terra_dbt__delegate_feed_consent.sql +++ b/models/terra/terra_dbt__delegate_feed_consent.sql @@ -25,6 +25,6 @@ WHERE msg_module = 'oracle' AND msg_type = 'oracle/MsgDelegateFeedConsent' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra_dbt__edit_validator.sql b/models/terra/terra_dbt__edit_validator.sql index a5785472..f984de52 100644 --- a/models/terra/terra_dbt__edit_validator.sql +++ b/models/terra/terra_dbt__edit_validator.sql @@ -37,8 +37,8 @@ WHERE msg_module = 'staking' AND msg_type = 'staking/MsgEditValidator' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), @@ -65,8 +65,8 @@ staking AS ( AND chain_id = 'columbus-3' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' - {% else %} - AND block_timestamp >= getdate() - interval '9 months' + -- {% else %} + -- AND block_timestamp >= getdate() - interval '9 months' {% endif %} UNION @@ -93,8 +93,8 @@ WHERE msg_module = 'staking' AND chain_id = 'columbus-4' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), diff --git a/models/terra/terra_dbt__gov_deposit.sql b/models/terra/terra_dbt__gov_deposit.sql index ee6ca8ee..a8fed56b 100644 --- a/models/terra/terra_dbt__gov_deposit.sql +++ b/models/terra/terra_dbt__gov_deposit.sql @@ -25,6 +25,6 @@ WHERE msg_module = 'gov' AND msg_type = 'gov/MsgDeposit' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra_dbt__grant_authorization.sql b/models/terra/terra_dbt__grant_authorization.sql index 2046b90a..41d147da 100644 --- a/models/terra/terra_dbt__grant_authorization.sql +++ b/models/terra/terra_dbt__grant_authorization.sql @@ -28,6 +28,6 @@ WHERE msg_module = 'msgauth' AND msg_type = 'msgauth/MsgGrantAuthorization' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra_dbt__grant_exec_authorized.sql b/models/terra/terra_dbt__grant_exec_authorized.sql index 0a86613c..474246ff 100644 --- a/models/terra/terra_dbt__grant_exec_authorized.sql +++ b/models/terra/terra_dbt__grant_exec_authorized.sql @@ -29,6 +29,6 @@ WHERE msg_module = 'msgauth' AND msg_type = 'msgauth/MsgExecAuthorized' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra_dbt__modify_withdraw_address.sql b/models/terra/terra_dbt__modify_withdraw_address.sql index 51610e7f..fd339fca 100644 --- a/models/terra/terra_dbt__modify_withdraw_address.sql +++ b/models/terra/terra_dbt__modify_withdraw_address.sql @@ -32,8 +32,8 @@ WHERE msg_module = 'distribution' AND msg_type = 'distribution/MsgModifyWithdrawAddress' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), @@ -53,8 +53,8 @@ WHERE msg_module = 'distribution' AND msg_type = 'distribution/MsgModifyWithdrawAddress' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), diff --git a/models/terra/terra_dbt__msg_events.sql b/models/terra/terra_dbt__msg_events.sql new file mode 100644 index 00000000..28e4bde7 --- /dev/null +++ b/models/terra/terra_dbt__msg_events.sql @@ -0,0 +1,35 @@ +{{ + config( + materialized='incremental', + unique_key='chain_id || block_id || tx_id || msg_index || event_index', + incremental_strategy='delete+insert', + tags=['snowflake', 'terra_silver', 'terra_msg_events'] + ) +}} + +with base_tables as ( + select * + from {{source('bronze', 'prod_terra_sink_645110886')}} + where record_content:model:name::string = 'terra_msg_event_model' + {% if is_incremental() %} + AND (record_metadata:CreateTime::int/1000)::timestamp::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('terra_dbt', 'msg_events')}}) + {% endif %} + ) + +select (record_metadata:CreateTime::int/1000)::timestamp as system_created_at, + t.value:blockchain::string as blockchain, + t.value:block_id::bigint as block_id, + t.value:block_timestamp::timestamp as block_timestamp, + t.value:chain_id::string as chain_id, + t.value:tx_id::string as tx_id, + t.value:tx_module::string as tx_module, + t.value:tx_status::string as tx_status, + t.value:tx_type::string as tx_type, + t.value:msg_index::integer as msg_index, + t.value:msg_type::string as msg_type, + t.value:msg_module::string as msg_module, + t.value:event_type::string as event_type, + t.value:event_index::integer as event_index, + t.value:event_attributes::object as event_attributes +from base_tables +,lateral flatten(input => record_content:results) t \ No newline at end of file diff --git a/models/terra/terra_dbt__msg_events_bank_transfer_events.sql b/models/terra/terra_dbt__msg_events_bank_transfer_events.sql index 969c1905..270ce16c 100644 --- a/models/terra/terra_dbt__msg_events_bank_transfer_events.sql +++ b/models/terra/terra_dbt__msg_events_bank_transfer_events.sql @@ -33,8 +33,8 @@ WITH input AS ( AND event_type = 'transfer' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), tbl_recipient AS ( @@ -56,8 +56,8 @@ tbl_recipient AS ( WHERE message_attribute = 'recipient' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), tbl_amount AS ( diff --git a/models/terra/terra_dbt__msg_events_cosmos_message.sql b/models/terra/terra_dbt__msg_events_cosmos_message.sql index 93ef3270..fc742d42 100644 --- a/models/terra/terra_dbt__msg_events_cosmos_message.sql +++ b/models/terra/terra_dbt__msg_events_cosmos_message.sql @@ -29,6 +29,6 @@ WHERE msg_module = 'cosmos' AND event_type = 'message' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra_dbt__msg_events_gov_proposal_vote_events.sql b/models/terra/terra_dbt__msg_events_gov_proposal_vote_events.sql index c5e20735..329f7750 100644 --- a/models/terra/terra_dbt__msg_events_gov_proposal_vote_events.sql +++ b/models/terra/terra_dbt__msg_events_gov_proposal_vote_events.sql @@ -29,6 +29,6 @@ WHERE msg_module = 'gov' AND event_type = 'proposal_vote' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra_dbt__msg_events_market_swap.sql b/models/terra/terra_dbt__msg_events_market_swap.sql index 9e9805f9..e54f6b42 100644 --- a/models/terra/terra_dbt__msg_events_market_swap.sql +++ b/models/terra/terra_dbt__msg_events_market_swap.sql @@ -29,6 +29,6 @@ WHERE msg_module = 'market' AND event_type = 'swap' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra_dbt__msg_events_msgauth_grant_events.sql b/models/terra/terra_dbt__msg_events_msgauth_grant_events.sql index 54b56c9e..108c0cbe 100644 --- a/models/terra/terra_dbt__msg_events_msgauth_grant_events.sql +++ b/models/terra/terra_dbt__msg_events_msgauth_grant_events.sql @@ -29,6 +29,6 @@ WHERE msg_module = 'msgauth' AND event_type = 'grant_authorization' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra_dbt__msg_events_oracle_events.sql b/models/terra/terra_dbt__msg_events_oracle_events.sql index 7d91a49c..3442cf32 100644 --- a/models/terra/terra_dbt__msg_events_oracle_events.sql +++ b/models/terra/terra_dbt__msg_events_oracle_events.sql @@ -29,6 +29,6 @@ WHERE msg_module = 'oracle' AND event_type = 'vote' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra_dbt__msgs.sql b/models/terra/terra_dbt__msgs.sql new file mode 100644 index 00000000..8417f5bf --- /dev/null +++ b/models/terra/terra_dbt__msgs.sql @@ -0,0 +1,33 @@ +{{ + config( + materialized='incremental', + unique_key='chain_id || block_id || tx_id || msg_index', + incremental_strategy='delete+insert', + tags=['snowflake', 'terra_silver', 'terra_msgs'] + ) +}} + +with base_tables as ( + select * + from {{source('bronze', 'prod_terra_sink_645110886')}} + where record_content:model:name::string = 'terra_msg_model' + {% if is_incremental() %} + AND (record_metadata:CreateTime::int/1000)::timestamp::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('terra_dbt', 'msgs')}}) + {% endif %} + ) + +select (record_metadata:CreateTime::int/1000)::timestamp as system_created_at, + t.value:blockchain::string as blockchain, + t.value:block_id::bigint as block_id, + t.value:block_timestamp::timestamp as block_timestamp, + t.value:chain_id::string as chain_id, + t.value:tx_id::string as tx_id, + t.value:tx_type::string as tx_type, + t.value:tx_status::string as tx_status, + t.value:tx_module::string as tx_module, + t.value:msg_index::integer as msg_index, + t.value:msg_type::string as msg_type, + t.value:msg_module::string as msg_module, + t.value:msg_value::variant as msg_value +from base_tables +,lateral flatten(input => record_content:results) t \ No newline at end of file diff --git a/models/terra/terra_dbt__oracle_events.sql b/models/terra/terra_dbt__oracle_events.sql index 62942268..bc37415c 100644 --- a/models/terra/terra_dbt__oracle_events.sql +++ b/models/terra/terra_dbt__oracle_events.sql @@ -29,8 +29,8 @@ WHERE msg_module = 'oracle' AND msg_type = 'oracle/MsgAggregateExchangeRateVote' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} UNION @@ -53,6 +53,6 @@ WHERE msg_module = 'oracle' AND msg_type = 'oracle/MsgExchangeRateVote' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra_dbt__redelegate.sql b/models/terra/terra_dbt__redelegate.sql index 3c8206f9..ea1d3824 100644 --- a/models/terra/terra_dbt__redelegate.sql +++ b/models/terra/terra_dbt__redelegate.sql @@ -29,8 +29,8 @@ WHERE msg_module = 'staking' AND tx_status = 'SUCCEEDED' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ) diff --git a/models/terra/terra_dbt__staking.sql b/models/terra/terra_dbt__staking.sql index a46371f5..525db8f4 100644 --- a/models/terra/terra_dbt__staking.sql +++ b/models/terra/terra_dbt__staking.sql @@ -30,8 +30,8 @@ WITH staking_msg_events AS ( AND event_type = 'delegate' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), staking_msg AS ( @@ -52,8 +52,8 @@ staking_msg AS ( AND msg_type = 'staking/MsgDelegate' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ) diff --git a/models/terra/terra_dbt__transactions.sql b/models/terra/terra_dbt__transactions.sql new file mode 100644 index 00000000..c1801fcc --- /dev/null +++ b/models/terra/terra_dbt__transactions.sql @@ -0,0 +1,35 @@ +{{ + config( + materialized='incremental', + unique_key='chain_id || block_id || tx_id', + incremental_strategy='delete+insert', + tags=['snowflake', 'terra_silver', 'terra_transactions'] + ) +}} + +with base_tables as ( + select * + from {{source('bronze', 'prod_terra_sink_645110886')}} + where record_content:model:name::string = 'terra_tx_model' + {% if is_incremental() %} + AND (record_metadata:CreateTime::int/1000)::timestamp::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('terra_dbt', 'transactions')}}) + {% endif %} + ) + +select (record_metadata:CreateTime::int/1000)::timestamp as system_created_at, + t.value:blockchain::string as blockchain, + t.value:block_id::bigint as block_id, + t.value:block_timestamp::timestamp as block_timestamp, + t.value:chain_id::string as chain_id, + t.value:codespace::string as codespace, + t.value:tx_id::string as tx_id, + t.value:tx_type::string as tx_type, + t.value:tx_module::string as tx_module, + t.value:tx_status::string as tx_status, + t.value:tx_status_msg::string as tx_status_msg, + t.value:tx_code::integer as tx_code, + t.value:fee::array as fee, + t.value:gas_wanted::double as gas_wanted, + t.value:gas_used::double as gas_used +from base_tables +,lateral flatten(input => record_content:results) t \ No newline at end of file diff --git a/models/terra/terra_dbt__transitions.sql b/models/terra/terra_dbt__transitions.sql new file mode 100644 index 00000000..85836e54 --- /dev/null +++ b/models/terra/terra_dbt__transitions.sql @@ -0,0 +1,29 @@ +{{ + config( + materialized='incremental', + unique_key='chain_id || block_id || index || transition_type || event', + incremental_strategy='delete+insert', + tags=['snowflake', 'terra_silver', 'terra_transitions'] + ) +}} + +with base_tables as ( + select * + from {{source('bronze', 'prod_terra_sink_645110886')}} + where record_content:model:name::string = 'terra_transition_model' + {% if is_incremental() %} + AND (record_metadata:CreateTime::int/1000)::timestamp::date >= (select dateadd('day',-1,max(system_created_at::date)) from {{source('terra_dbt', 'transitions')}}) + {% endif %} + ) + +select (record_metadata:CreateTime::int/1000)::timestamp as system_created_at, + t.value:blockchain::string as blockchain, + t.value:block_id::bigint as block_id, + t.value:block_timestamp::timestamp as block_timestamp, + t.value:chain_id::string as chain_id, + t.value:event::string as event, + t.value:index::integer as index, + t.value:transition_type::string as transition_type, + t.value:attributes::object as event_attributes +from base_tables +,lateral flatten(input => record_content:results) t \ No newline at end of file diff --git a/models/terra/terra_dbt__undelegate.sql b/models/terra/terra_dbt__undelegate.sql index 9f1d6311..014610a1 100644 --- a/models/terra/terra_dbt__undelegate.sql +++ b/models/terra/terra_dbt__undelegate.sql @@ -28,8 +28,8 @@ WITH staking AS ( AND tx_status = 'SUCCEEDED' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' - {% else %} - AND block_timestamp >= getdate() - interval '9 months' + -- {% else %} + -- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ) diff --git a/models/terra/terra_dbt__unjail.sql b/models/terra/terra_dbt__unjail.sql index b69ac9b7..c53d8d76 100644 --- a/models/terra/terra_dbt__unjail.sql +++ b/models/terra/terra_dbt__unjail.sql @@ -22,6 +22,6 @@ FROM {{source('silver_terra', 'msgs')}} WHERE msg_module = 'cosmos' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' -{% else %} - AND block_timestamp >= getdate() - interval '9 months' +-- {% else %} +-- AND block_timestamp >= getdate() - interval '9 months' {% endif %} \ No newline at end of file diff --git a/models/terra/terra_dbt__withdraw_delegator_rewards.sql b/models/terra/terra_dbt__withdraw_delegator_rewards.sql index 6c88c692..6ada98f8 100644 --- a/models/terra/terra_dbt__withdraw_delegator_rewards.sql +++ b/models/terra/terra_dbt__withdraw_delegator_rewards.sql @@ -34,8 +34,8 @@ WITH rewards_event AS ( AND tx_status = 'SUCCEEDED' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' - {% else %} - AND block_timestamp >= getdate() - interval '9 months' + -- {% else %} + -- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), @@ -59,8 +59,8 @@ rewards AS ( AND tx_status = 'SUCCEEDED' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' - {% else %} - AND block_timestamp >= getdate() - interval '9 months' + -- {% else %} + -- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), diff --git a/models/terra/terra_dbt__withdraw_validator_commission.sql b/models/terra/terra_dbt__withdraw_validator_commission.sql index bd166194..fb0595d6 100644 --- a/models/terra/terra_dbt__withdraw_validator_commission.sql +++ b/models/terra/terra_dbt__withdraw_validator_commission.sql @@ -34,8 +34,8 @@ WITH rewards_event AS ( AND tx_status = 'SUCCEEDED' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' - {% else %} - AND block_timestamp >= getdate() - interval '9 months' + -- {% else %} + -- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ), @@ -59,8 +59,8 @@ rewards AS ( AND tx_status = 'SUCCEEDED' {% if is_incremental() %} AND block_timestamp >= getdate() - interval '1 days' - {% else %} - AND block_timestamp >= getdate() - interval '9 months' + -- {% else %} + -- AND block_timestamp >= getdate() - interval '9 months' {% endif %} ),