WITH
wallets AS (
SELECT
tx_from[0] AS wallet,
MIN(block_timestamp)::date AS min_date
FROM terra.transactions
GROUP BY wallet
HAVING min_date >= CURRENT_DATE-90
),
tx_ids AS (
SELECT DISTINCT tx_id
FROM terra.transactions
WHERE tx_from[0] IN (SELECT wallet FROM wallets)
),
contract_addresses as (
SELECT
address
FROM terra.labels
WHERE label ilike '%terraswap%'
)
SELECT
COUNT(DISTINCT msg_value:sender) users_total
FROM terra.msgs
WHERE
tx_status = 'SUCCEEDED'
AND msg_value:contract::string IN (SELECT address FROM contract_addresses)
AND msg_value:execute_msg:send:amount IS NOT NULL
AND msg_value:execute_msg:send:amount/1e6 > 0
AND tx_id IN (SELECT tx_id FROM tx_ids)