mirror of
https://github.com/FlipsideCrypto/avalanche-models.git
synced 2026-02-06 11:06:55 +00:00
70 lines
1.5 KiB
SQL
70 lines
1.5 KiB
SQL
{% macro task_get_abis() %}
|
|
{% set sql %}
|
|
EXECUTE IMMEDIATE
|
|
'create or replace task bronze_api.get_block_explorer_abis
|
|
warehouse = DBT_CLOUD_AVALANCHE
|
|
allow_overlapping_execution = false
|
|
schedule = \'300 minute\'
|
|
as
|
|
BEGIN
|
|
INSERT INTO
|
|
bronze_api.contract_abis(
|
|
contract_address,
|
|
abi_data,
|
|
_inserted_timestamp
|
|
)
|
|
|
|
WITH api_keys AS (
|
|
SELECT
|
|
api_key
|
|
FROM
|
|
crosschain.silver.apis_keys
|
|
WHERE
|
|
api_name = \'snowtrace\'
|
|
),
|
|
base AS (
|
|
SELECT
|
|
contract_address
|
|
FROM
|
|
silver.relevant_abi_contracts
|
|
EXCEPT
|
|
SELECT
|
|
contract_address
|
|
FROM
|
|
bronze_api.contract_abis
|
|
WHERE
|
|
abi_data :data :result :: STRING <> \'Max rate limit reached\'
|
|
LIMIT
|
|
100
|
|
)
|
|
SELECT
|
|
contract_address,
|
|
ethereum.streamline.udf_api(
|
|
\'GET\',
|
|
CONCAT(
|
|
\'https://api.snowtrace.io/api?module=contract&action=getabi&address=\',
|
|
contract_address,
|
|
\'&apikey=\',
|
|
api_key
|
|
),{},{}
|
|
) AS abi_data,
|
|
SYSDATE()
|
|
FROM
|
|
base
|
|
LEFT JOIN api_keys
|
|
ON 1 = 1
|
|
where exists (select 1 from base limit 1);
|
|
END;'
|
|
|
|
{% endset %}
|
|
{% do run_query(sql) %}
|
|
|
|
{% if target.database.upper() == 'AVALANCHE' %}
|
|
{% set sql %}
|
|
alter task bronze_api.get_block_explorer_abis resume;
|
|
{% endset %}
|
|
{% do run_query(sql) %}
|
|
{% endif %}
|
|
|
|
{% endmacro %}
|