sei-models/models/evm/silver/abis/silver_evm__verified_abis.sql
Austin f5435bf17c
abi model (#137)
* abi model

* remove legacy model

* tests

* key

* tests

* updates
2025-09-04 20:08:26 -04:00

114 lines
2.2 KiB
SQL

-- depends_on: {{ ref('bronze__contract_abis') }}
{{ config(
materialized = 'incremental',
unique_key = "contract_address",
tags = ['abis']
) }}
WITH base AS (
SELECT
contract_address,
PARSE_JSON(
b.data:result
) AS DATA,
_inserted_timestamp
FROM
{% if is_incremental() %}
{{ ref('bronze__contract_abis') }} b
{% else %}
{{ ref('bronze__contract_abis_fr') }} b
{% endif %}
WHERE
b.data:message::string = 'OK'
{% if is_incremental() %}
AND b._inserted_timestamp >= (
SELECT
COALESCE(
MAX(
_inserted_timestamp
),
'1970-01-01'
)
FROM
{{ this }}
)
{% endif %}
),
etherscan_abis AS (
SELECT
contract_address,
DATA,
_inserted_timestamp,
'etherscan' AS abi_source
FROM
base
),
user_abis AS (
SELECT
contract_address,
abi,
discord_username,
_inserted_timestamp,
'user' AS abi_source,
abi_hash
FROM
{{ ref('silver_evm__user_verified_abis') }}
{% if is_incremental() %}
WHERE
_inserted_timestamp >= (
SELECT
COALESCE(
MAX(
_inserted_timestamp
),
'1970-01-01'
)
FROM
{{ this }}
WHERE
abi_source = 'user'
)
AND contract_address NOT IN (
SELECT
contract_address
FROM
{{ this }}
)
{% endif %}
),
all_abis AS (
SELECT
contract_address,
DATA,
_inserted_timestamp,
abi_source,
NULL AS discord_username,
SHA2(DATA) AS abi_hash
FROM
etherscan_abis
UNION
SELECT
contract_address,
PARSE_JSON(abi) AS DATA,
_inserted_timestamp,
'user' AS abi_source,
discord_username,
abi_hash
FROM
user_abis
)
SELECT
contract_address,
DATA,
_inserted_timestamp,
abi_source,
discord_username,
abi_hash
FROM
all_abis qualify(ROW_NUMBER() over(PARTITION BY contract_address
ORDER BY
_INSERTED_TIMESTAMP DESC)) = 1