Flipside Data ScienceFebruary Onboarding #2 - Swap USDC for XLM
Updated 2025-05-30Copy Reference Fork
999
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
›
⌄
WITH base AS (
SELECT
op.*,
f.value AS balance_change
FROM stellar.core.ez_operations op,
LATERAL FLATTEN(input => PARSE_JSON(asset_balance_changes)) f
WHERE contract_id = 'CBQDHNBFBZYE4MKPWBSJOPIYLW4SFSXAXUTSXJN76GNKYVYPCKWC6QUK'
-- AND block_timestamp::DATE >= current_date - 2
and (f.value:from::string in (:userAddresses) or f.value:to::string in (:userAddresses))
and block_timestamp :: date >= :startsAt
),
usdc_tx AS (
SELECT
balance_change:from::STRING AS address,
transaction_hash AS tx_id
FROM base
WHERE balance_change:asset_code::STRING = 'USDC'
and balance_change:from::string in (:userAddresses)
),
base2 as (
SELECT DISTINCT
t.transaction_hash AS tx_id,
t.block_timestamp AS block_timestamp,
t.balance_change:to::STRING AS address,
1 AS action_count,
1 AS quest_step,
'USDC' AS currency,
-- Use a scalar subquery instead of a JOIN
COALESCE(
(SELECT AVG(value[1]::FLOAT)
FROM (SELECT livequery.live.udf_api('https://api.coingecko.com/api/v3/coins/stellar/market_chart?vs_currency=usd&days=365') AS resp),
LATERAL FLATTEN(input => resp:data:prices)
WHERE TO_DATE(value[0]::STRING) = DATE(t.block_timestamp)
), 0
) as price,
t.balance_change:amount::FLOAT AS amount,
QueryRunArchived: QueryRun has been archived