avalanche-models/macros/api_udf/task_get_abis.sql

70 lines
1.5 KiB
MySQL
Raw Normal View History

{% 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 %}