diff --git a/data/testing__swaps_intermediate_orca.csv b/data/testing__swaps_intermediate_orca.csv new file mode 100644 index 00000000..8264b8a8 --- /dev/null +++ b/data/testing__swaps_intermediate_orca.csv @@ -0,0 +1,37 @@ +tx_id,succeeded,swapper,from_mint,from_amt,to_mint,to_amt,swap_index +2QxzLChDGEBNfEHEAQogmVZv8VKqS3AzScNfJcrgsrMKVZSDGWBfbefpXYnPqYePdPDRg2K28gyafcqDhbAFfPv2,TRUE,HdGsWDaxSDBesEYXmAYsG7WZYkKxUv3qhGJgmXSXnm3d,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,765.228731,So11111111111111111111111111111111111111112,23.300788434,1 +5LsYW2yEZJERFRD6jykprokamCZWRvEZRMqufNR625x9GELRawThDvcfRiwnHSx7hRBBdZzUqUPzPzBK6cyeBtHb,TRUE,FnJZCfHc6LuZKCWMJGsHmpmqPeVVpxiJR3upiFp8TWsG,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.185291,9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i,4.904269,1 +3FpKL3EjTkSEyRhYakEqZ9ErDPHVGzZZ6upyba3wYkmshus4hPoM5NZEgzkMGefPcLrtX9iANWnbA5KA6WERktk2,TRUE,FnJZCfHc6LuZKCWMJGsHmpmqPeVVpxiJR3upiFp8TWsG,So11111111111111111111111111111111111111112,0.089771208,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2.926124,1 +3mcp7RNz4qjQ37Sr3MZUrChpEYV66LDNkrVDoZWaMND61vcD6HpicftULvG8cYZChKyxESfNW7D6ZY7NnAwGwPK4,TRUE,95DFFq1icXkx9tdFMCYKwB3GV5R4gE3Fj93BHBBGpSCZ,So11111111111111111111111111111111111111112,14.183999998,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1384.017514,1 +3mcp7RNz4qjQ37Sr3MZUrChpEYV66LDNkrVDoZWaMND61vcD6HpicftULvG8cYZChKyxESfNW7D6ZY7NnAwGwPK4,TRUE,95DFFq1icXkx9tdFMCYKwB3GV5R4gE3Fj93BHBBGpSCZ,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1382.714683,AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB,219.620024112,2 +4EbgFcL5CM7B87EgZqW7KyAyVKRrvcifpPWvwP26UDmgQ4nb1NZdqjqZigUtUWXat9gH97kLenYpBVWaRmJ98MmD,TRUE,FnJZCfHc6LuZKCWMJGsHmpmqPeVVpxiJR3upiFp8TWsG,So11111111111111111111111111111111111111112,0.015372265,2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk,0.000357,1 +4EbgFcL5CM7B87EgZqW7KyAyVKRrvcifpPWvwP26UDmgQ4nb1NZdqjqZigUtUWXat9gH97kLenYpBVWaRmJ98MmD,TRUE,FnJZCfHc6LuZKCWMJGsHmpmqPeVVpxiJR3upiFp8TWsG,SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt,0.597252,So11111111111111111111111111111111111111112,0.015520937,2 +KJ6M8YcsHbQr3CXSQpubh5pWxcgLyboZLg6HGJFZ6WUm9QFuqDrP1jQRfeMbbzzMqTJ4FzjxPYEpdnNBYtzM4wD,TRUE,AxTFCGaCtyizxoii9L1NcpdFzmuAd5Xm7yHEebLjmxN6,So11111111111111111111111111111111111111112,0.849975124,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,45.68329,1 +KJ6M8YcsHbQr3CXSQpubh5pWxcgLyboZLg6HGJFZ6WUm9QFuqDrP1jQRfeMbbzzMqTJ4FzjxPYEpdnNBYtzM4wD,TRUE,AxTFCGaCtyizxoii9L1NcpdFzmuAd5Xm7yHEebLjmxN6,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,45.68329,AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB,15.001785844,2 +3xsQC8Zn5juvP9bPPiVHRi3kp7NnLzaziWzBqFH7eyXcQNRzfDAUdKqz4Nv5kwK9PQpi6eozq5V1pUw1fg15FrJQ,TRUE,3LtjpMgF25NCaGdLAntnw9gSZwPbXNzP4fBtiPDV2CWW,So11111111111111111111111111111111111111112,0.049999997,orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE,1.928452,1 +3hPfLKsSs5dG9GWq3286PGJjTgRrzzPwmRigVcnwVJ3BjVygRHf3TNSf6T1xw6FzaKAaR4TykfuFSuv3PcdWbdMF,TRUE,GjMxHDsRz2BabBKbyc3NxGbxBUYug7ujT5JdQ2Eerxfk,So11111111111111111111111111111111111111112,0.000099984,SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt,0.004306,1 +5aSxXzFNBtkeSmuGV3Jq3UAf9B3LEXEZSvB5u2SVoQj3XDmYA7jrMjMK39Gw8eKDjtkYh2CaGtnzB71jn3FMEdT9,TRUE,9SoYUhp9x1NiR4gsrU8NYzUC4ZMXnpTh3TDm6ot1qd2J,So11111111111111111111111111111111111111112,0.049999995,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2.49579,1 +4fK4xxJEEgQ4wcyMJr377uFfVyEmpoNLy2Wi5XD17yRoujNEoYJu7EpXHtcPAiEoBy7ZkirSiZhbJ2Hy1HbJGtYo,TRUE,3a9RHGL9HVxCsbtPpvJYZLEZrpGqpGG6g6LHzVBgPK1T,So11111111111111111111111111111111111111112,0.359662996,7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU,3331.554114357,1 +4fK4xxJEEgQ4wcyMJr377uFfVyEmpoNLy2Wi5XD17yRoujNEoYJu7EpXHtcPAiEoBy7ZkirSiZhbJ2Hy1HbJGtYo,TRUE,3a9RHGL9HVxCsbtPpvJYZLEZrpGqpGG6g6LHzVBgPK1T,7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU,3331.554098893,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,19.632909,2 +1kBLMk3k5rxtsT2CTabiLZrMngUH8YuBhsonRrcHh9gW1kcZ2xXMt3pUUAMPGxdGJv37eSn1NLC1LNNAhf5mXVV,TRUE,FnJZCfHc6LuZKCWMJGsHmpmqPeVVpxiJR3upiFp8TWsG,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2.271457,So11111111111111111111111111111111111111112,0.050037222,1 +1kBLMk3k5rxtsT2CTabiLZrMngUH8YuBhsonRrcHh9gW1kcZ2xXMt3pUUAMPGxdGJv37eSn1NLC1LNNAhf5mXVV,TRUE,FnJZCfHc6LuZKCWMJGsHmpmqPeVVpxiJR3upiFp8TWsG,So11111111111111111111111111111111111111112,0.050037207,BQcdHdAQW1hczDbBi9hiegXAR7A98Q9jx3X3iBBBDiq4,1.76098,2 +1kBLMk3k5rxtsT2CTabiLZrMngUH8YuBhsonRrcHh9gW1kcZ2xXMt3pUUAMPGxdGJv37eSn1NLC1LNNAhf5mXVV,TRUE,FnJZCfHc6LuZKCWMJGsHmpmqPeVVpxiJR3upiFp8TWsG,BQcdHdAQW1hczDbBi9hiegXAR7A98Q9jx3X3iBBBDiq4,1.76098,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2.278336,3 +2G1tUPa52pUZr3zdheC7bY6G3kyifFPMNh7F8HYSLDb6gwshr1RVRqMWL9YQfzvQ18nZdddBqk2RViTYoqBwDSPD,TRUE,E6rRQBgWFxJZ1T6Rs66VwkArz6EeTqhX2ULEfCvSeb4o,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,202.768742,4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R,38.540547,1 +2G1tUPa52pUZr3zdheC7bY6G3kyifFPMNh7F8HYSLDb6gwshr1RVRqMWL9YQfzvQ18nZdddBqk2RViTYoqBwDSPD,TRUE,E6rRQBgWFxJZ1T6Rs66VwkArz6EeTqhX2ULEfCvSeb4o,4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R,38.540162,So11111111111111111111111111111111111111112,1.41520601,2 +2G1tUPa52pUZr3zdheC7bY6G3kyifFPMNh7F8HYSLDb6gwshr1RVRqMWL9YQfzvQ18nZdddBqk2RViTYoqBwDSPD,TRUE,E6rRQBgWFxJZ1T6Rs66VwkArz6EeTqhX2ULEfCvSeb4o,So11111111111111111111111111111111111111112,1.414977011,9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E,0.004818,3 +2G1tUPa52pUZr3zdheC7bY6G3kyifFPMNh7F8HYSLDb6gwshr1RVRqMWL9YQfzvQ18nZdddBqk2RViTYoqBwDSPD,TRUE,E6rRQBgWFxJZ1T6Rs66VwkArz6EeTqhX2ULEfCvSeb4o,9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E,0.004818,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,207.989933,4 +5dTuKTQEBQEDs7V1WBfuv5MTkMstgkSucdZAvycPapPriBSU6pLXCYqCZ8ChVE21Sgn6prVTbuATbQkhz3ZNpBcF,TRUE,DT1mBDFsNBc1UXa25RdxNvnjL5Lro7su7gX1zpLyCmWe,4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R,0.000796,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.00085,1 +4oAVYzKr4t7tQJbme1G9Lo2kycgLXWFgzZSdxtfYwfxxPDYqBWvUbhAs359qfhoyy9mJZjQwX72HbJsAmTDpcdRV,TRUE,5a2vAasrNmMwsHS6GhWQfStbBaPs8XPc4nZqmTjWAg2M,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2000,So11111111111111111111111111111111111111112,37.265600236,1 +4txTBFpBZT4tRAmZLkfQ2qiuhZEKKv9ks5j2DAxBcGPDvWZstXHapazCbC4voBB5XkTwh9CwBJ7aWHxtiFKH9PVM,TRUE,HiVf8RKNETMYVyVrqcaoMGAP8CyMZ67cLtnGfJJ82bCx,7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU,295.483796745,So11111111111111111111111111111111111111112,0.068308233,1 +sG5f1439MhvTafpgv8d8zKrAcUnkEH3YKSaP3wbZCoBfiWLsjdV8FjAmpHy3RkgL2azLm1v6MdpzRWhockKPxmY,TRUE,sx7E38PqhZ8NDYWoNzHoKF71SKHMDA5h2Wskbyiu4BB,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1.554385,4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R,2.019437,1 +TwENfn52KvbVWajAyAbmq8VaaojPJVsMbU5SBS5pRcx8hLqMnMZyrEzVXjxLA4Td6YBjBccLfDHJhWVnctEa4aH,TRUE,C5vAhLenoUz9hWXnviFQJjyFZLjp3Ndh7BntS3yJfki5,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,21.861627,AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3,0.688737,1 +24xxMyhpZPNZkEpteNgkFxy1okm21NtDBMoU9BXWBYUidiM6DCdabNsPq8Qxj9Qbrq9CoPHqXibQn7xY46Z6JUxJ,TRUE,C5vAhLenoUz9hWXnviFQJjyFZLjp3Ndh7BntS3yJfki5,2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk,0.000091,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.120178,1 +4L9qNjj5YVHK6Z55zMRFeK5ggVk9atktvmqK4KYjuBDrapg8FbR3748JW2yrQndJgvcU9voeE7jdN3Lmfshi3sWB,TRUE,GReSWJ89VBhPFVLFetnUA6r5Br4WemZp5CDHGvV85fwy,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,10,Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1,2409.610112,1 +51aYyFt2b9dWKWHpS5VU3eFuuW1Ep7pNzT37vPkcDmzREQHP1HAWxnCdx2GU4hfS75aHZnkd1NqQiGaLM18Myq9P,TRUE,GaYVu6BDzEcTX8HVM8PGd1x1XUWZafVrMzDAe2VgiAAB,ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx,19.99990748,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.133885,1 +JpE6Qx8PGvcEDqitoSEgqSBGPxfm6EntvtUhz6JNB9cnYh26ErGWFLge6atiywH4NeMNjLWAj91QN7EHyVNjmBs,TRUE,C3csyuyMtcDBTqP3gL9n1PbuL9r37ed7wavooBZEtcx8,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.539,MangoCzJ36AjZyKwVj3VnYU4GTonjfVEnJmvvWaxLac,12.491308,1 +Ki2PGcudggRqtb3B9SnufSgGJkSwxdjAvEhBqAyVatXxaUcuzzxX3eKvJpUGykUDr1cYxwhJJppTZvia4Lx9dF2,TRUE,ogDsdvMKRRRMmsrT2hTPdkQBu1qY2z1jBDzgpi8HZri,7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs,0.3866529,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,467.782806,1 +3X1fHTehR6UMfUMH9uPJir5YW6LjzgNfKr7QhKqnCq74VoY6jJHcmCL2YvNi2PA2CLjPLpCQaq3UKDxUyzQoxv3A,TRUE,Gfrpgxxk2Ds5f4BNPmngNZq2bcxupsqKnUZ6dBBLqHqH,So11111111111111111111111111111111111111112,6,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,219.405943,1 +4vnF6WX4Zcu4AskYsh79GcrJ2vHbuNpxshqYuSAJGWPegsULsmGFakoLYHkv3M2d6RZ4innAUfVPcknk5ToEuGtq,TRUE,GMJHfti4je12kPmrGJTstx38DB6vDhbeAfEijyGybwxK,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.01,So11111111111111111111111111111111111111112,0.0001983,1 +4vnF6WX4Zcu4AskYsh79GcrJ2vHbuNpxshqYuSAJGWPegsULsmGFakoLYHkv3M2d6RZ4innAUfVPcknk5ToEuGtq,TRUE,GMJHfti4je12kPmrGJTstx38DB6vDhbeAfEijyGybwxK,So11111111111111111111111111111111111111112,0.0001983,7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj,0.000190827,2 +4vnF6WX4Zcu4AskYsh79GcrJ2vHbuNpxshqYuSAJGWPegsULsmGFakoLYHkv3M2d6RZ4innAUfVPcknk5ToEuGtq,TRUE,GMJHfti4je12kPmrGJTstx38DB6vDhbeAfEijyGybwxK,7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj,0.000190827,USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX,0.009936,3 +4vnF6WX4Zcu4AskYsh79GcrJ2vHbuNpxshqYuSAJGWPegsULsmGFakoLYHkv3M2d6RZ4innAUfVPcknk5ToEuGtq,TRUE,GMJHfti4je12kPmrGJTstx38DB6vDhbeAfEijyGybwxK,USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX,0.009936,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.009959,4 diff --git a/models/silver/swaps/silver__swaps_intermediate_orca.sql b/models/silver/swaps/silver__swaps_intermediate_orca.sql new file mode 100644 index 00000000..c9defd7d --- /dev/null +++ b/models/silver/swaps/silver__swaps_intermediate_orca.sql @@ -0,0 +1,479 @@ +{{ config( + materialized = 'incremental', + unique_key = ["block_id","tx_id","swap_index"], + merge_predicates = ["DBT_INTERNAL_DEST.block_timestamp::date >= LEAST(current_date-7,(select min(block_timestamp)::date from {{ this }}__dbt_tmp))"], + cluster_by = ['block_timestamp::DATE','_inserted_timestamp::DATE'], + post_hook = "ALTER TABLE {{ this }} ADD SEARCH OPTIMIZATION" +) }} + +WITH base_events AS( + + SELECT + * + FROM + {{ ref('silver__events') }} + WHERE + ( + program_id IN ( + -- Orca + '9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP', + 'DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1', + 'whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc', + --program ids for acct mapping + 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', + 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', + --program ids that identify the swapper in certain tx + '8rGFmebhhTikfJP5bUe2uLHcejSiukdJhiLEKoit962a', + 'E16pm4Z4jiFxVEeBcSuYfJHy6TQYfYRAhGYt7cEUYfEV' + + ) + ) + AND block_id > 111442741 -- token balances owner field not guaranteed to be populated before this slot + +{% if is_incremental() %} +-- AND block_timestamp :: DATE = '2022-11-01' +AND _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) + FROM + {{ this }} +) +{% else %} + AND block_timestamp :: DATE >= '2021-12-14' +{% endif %} +), +dex_txs AS ( + SELECT + e.*, + IFF(ARRAY_SIZE(signers) = 1, signers [0] :: STRING, NULL) AS swapper, + signers + FROM + base_events e + INNER JOIN {{ ref('silver__transactions') }} + t + ON t.tx_id = e.tx_id + AND t.block_timestamp :: DATE = e.block_timestamp :: DATE + WHERE + program_id IN ( + -- Orca + '9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP', + 'DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1', + 'whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc' + ) + AND inner_instruction_program_ids [0] <> 'DecZY86MU5Gj7kppfUCEmd4LbXXuyZH1yHaP2NTqdiZB' + +{% if is_incremental() %} +-- AND t.block_timestamp :: DATE = '2022-11-01' +AND t._inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) + FROM + {{ this }} +) +{% else %} + AND t.block_timestamp :: DATE >= '2021-12-14' +{% endif %} +), +base_transfers AS ( + SELECT + tr.* + FROM + {{ ref('silver__transfers') }} + tr + INNER JOIN ( + SELECT + DISTINCT tx_id + FROM + dex_txs + ) d + ON d.tx_id = tr.tx_id + +{% if is_incremental() %} +WHERE + -- block_timestamp :: DATE = '2022-11-01' + _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) + FROM + {{ this }} + ) +{% else %} +WHERE + block_timestamp :: DATE >= '2021-12-14' +{% endif %} +), +base_post_token_balances AS ( + SELECT + pb.* + FROM + {{ ref('silver___post_token_balances') }} + pb + INNER JOIN ( + SELECT + DISTINCT tx_id + FROM + dex_txs + ) d + ON d.tx_id = pb.tx_id + +{% if is_incremental() %} +WHERE + -- block_timestamp :: DATE = '2022-11-01' + _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) + FROM + {{ this }} + ) +{% else %} +WHERE + block_timestamp :: DATE >= '2021-12-14' +{% endif %} +), +swapper_map_temp as( + SELECT e.tx_id, + e.instruction :accounts[0] :: STRING AS swapper + from base_events e + INNER JOIN ( + SELECT + DISTINCT tx_id + FROM + dex_txs + ) d + ON d.tx_id = e.tx_id + WHERE program_id in ('8rGFmebhhTikfJP5bUe2uLHcejSiukdJhiLEKoit962a','E16pm4Z4jiFxVEeBcSuYfJHy6TQYfYRAhGYt7cEUYfEV') + +), + +swaps_temp AS( + SELECT + A.block_id, + A.block_timestamp, + A.tx_id, + COALESCE(SPLIT_PART(INDEX :: text, '.', 1) :: INT, INDEX :: INT) AS INDEX, + COALESCE(NULLIF(SPLIT_PART(INDEX :: text, '.', 2), '') :: INT, NULL) AS inner_index, + A.program_id, + A.tx_from, + A.tx_to, + A.amount, + A.mint, + A.succeeded, + A._inserted_timestamp + FROM + base_transfers AS A + WHERE + A.tx_id IN ( + SELECT + tx_id + FROM + dex_txs + ) +), +multisig_account_mapping AS( + SELECT + tx_id, + instruction :parsed :info :account :: STRING AS associated_account, + instruction :parsed :info :multisigOwner :: STRING AS owner + FROM + base_events + WHERE + program_id = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' + AND event_type = 'closeAccount' + UNION + SELECT + tx_id, + instruction :parsed :info :delegate :: STRING AS associated_account, + instruction :parsed :info :multisigOwner :: STRING AS owner + FROM + base_events + WHERE + program_id = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' + AND event_type = 'approve' +), +account_mappings AS ( + SELECT + * + FROM + multisig_account_mapping + UNION + SELECT + tx_id, + tx_to AS associated_account, + tx_from AS owner + FROM + swaps_temp + WHERE + amount = 0.00203928 + AND mint = 'So11111111111111111111111111111111111111112' + UNION + SELECT + tx_id, + account AS associated_account, + owner + FROM + base_post_token_balances + UNION + SELECT + e.tx_id, + e.instruction :parsed :info :account :: STRING AS associated_account, + COALESCE( + e.instruction :parsed :info :source :: STRING, + e.instruction :parsed :info :owner :: STRING + ) AS owner + FROM + base_events e + INNER JOIN ( + SELECT + DISTINCT tx_id + FROM + dex_txs + ) d + ON d.tx_id = e.tx_id + WHERE + ( + ( + e.program_id = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' + AND e.event_type = 'create' + ) + OR ( + e.program_id = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' + AND e.event_type = 'closeAccount' + ) + ) + UNION + SELECT + e.tx_id, + e.instruction :parsed :info :delegate :: STRING AS associated_account, + e.instruction :parsed :info :owner :: STRING AS owner + FROM + base_events e + INNER JOIN ( + SELECT + DISTINCT tx_id + FROM + dex_txs + ) d + ON d.tx_id = e.tx_id + WHERE + ( + e.program_id = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' + AND e.event_type = 'approve' + ) +), +swaps_w_destination AS ( + SELECT + s.block_id, + s.block_timestamp, + s.tx_id, + s.index, + s.inner_index, + COALESCE( + m1.owner, + s.tx_from + ) AS tx_from, + COALESCE( + m2.owner, + s.tx_to + ) AS tx_to, + s.amount, + s.mint, + s.succeeded, + s._inserted_timestamp, + COALESCE( + sm.swapper, + e.swapper + ) AS tmp_swapper, + e.signers, + e.program_id + FROM + swaps_temp s + LEFT OUTER JOIN dex_txs e + ON s.tx_id = e.tx_id + AND s.index = e.index + LEFT OUTER JOIN account_mappings m1 + ON s.tx_id = m1.tx_id + AND s.tx_from = m1.associated_account + AND s.tx_to <> m1.owner + LEFT OUTER JOIN account_mappings m2 + ON s.tx_id = m2.tx_id + AND s.tx_to = m2.associated_account + AND s.tx_from <> m2.owner + left outer join swapper_map_temp sm + on s.tx_id = sm.tx_id + WHERE + s.program_id <> '11111111111111111111111111111111' +), +multi_signer_swapper AS ( + SELECT + tx_id, + silver.udf_get_multi_signers_swapper(ARRAY_AGG(tx_from), ARRAY_AGG(tx_to), ARRAY_AGG(signers) [0]) AS swapper + FROM + swaps_w_destination + WHERE + succeeded + AND ARRAY_SIZE(signers) > 1 + AND tmp_swapper IS NULL + GROUP BY + 1 +), +unique_tx_from_and_to AS( + SELECT + tx_id, + INDEX, + COUNT(DISTINCT(tx_from)) AS num_tx_from, + COUNT(DISTINCT(tx_to)) AS num_tx_to + FROM + swaps_w_destination + GROUP BY + 1, + 2 + HAVING + num_tx_from > 1 + AND num_tx_to > 1), +swaps_filtered_temp AS( + SELECT + s.*, + COALESCE( + s.tmp_swapper, + m.swapper + ) AS swapper + FROM + swaps_w_destination s + INNER JOIN unique_tx_from_and_to u + ON s.tx_id = u.tx_id + AND s.index = u.index + LEFT OUTER JOIN multi_signer_swapper m + ON s.tx_id = m.tx_id +), +min_inner_index_of_swapper AS( + SELECT + tx_id, + INDEX, + MIN(inner_index) AS min_inner_index_swapper + FROM + swaps_filtered_temp + WHERE + tx_from = swapper + GROUP BY + 1, + 2 +), +swaps AS( + SELECT + d.*, + m.min_inner_index_swapper, + ROW_NUMBER() over ( + PARTITION BY d.tx_id + ORDER BY + d.index, + d.inner_index + ) AS rn, + ROW_NUMBER() over ( + PARTITION BY d.tx_id, + d.index + ORDER BY + d.inner_index + ) AS inner_rn + FROM + swaps_filtered_temp d + LEFT JOIN min_inner_index_of_swapper m + ON m.tx_id = d.tx_id + AND m.index = d.index + WHERE + d.swapper IS NOT NULL +), +final_temp AS ( + SELECT + s1.block_id, + s1.block_timestamp, + s1.tx_id, + s1.succeeded, + s1.program_id, + s1.swapper, + s1.mint, + s1.amount, + s1.rn, + s1._inserted_timestamp, + s2.mint AS to_mint, + s2.amount AS to_amt + FROM + swaps s1 + LEFT OUTER JOIN swaps s2 + ON s1.tx_id = s2.tx_id + AND s1.index = s2.index + AND s1.inner_index <> s2.inner_index + WHERE + s1.inner_index = s1.min_inner_index_swapper + AND s1.swapper = s2.tx_to + AND s1.mint <> s2.mint + UNION + SELECT + s1.block_id, + s1.block_timestamp, + s1.tx_id, + s1.succeeded, + s1.program_id, + s1.swapper, + s1.mint, + s1.amount, + s1.rn, + s1._inserted_timestamp, + NULL, + NULL + FROM + swaps s1 + WHERE + s1.inner_index <> s1.min_inner_index_swapper + AND s1.tx_from = s1.swapper + UNION + SELECT + s1.block_id, + s1.block_timestamp, + s1.tx_id, + s1.succeeded, + s1.program_id, + s1.swapper, + NULL AS mint, + NULL AS amount, + s1.rn, + s1._inserted_timestamp, + s1.mint AS to_mint, + s1.amount AS to_amt + FROM + swaps s1 + LEFT OUTER JOIN swaps s2 + ON s1.tx_id = s2.tx_id + AND s1.index = s2.index + AND s2.inner_index = s2.min_inner_index_swapper + WHERE( + ( + s1.inner_index <> s1.min_inner_index_swapper + AND s1.tx_to = s1.swapper + AND s2.mint = s1.mint + ) + OR s1.min_inner_index_swapper IS NULL + ) +) +SELECT + block_id, + block_timestamp, + tx_id, + succeeded, + program_id, + swapper, + mint AS from_mint, + amount AS from_amt, + to_mint, + to_amt, + _inserted_timestamp, + ROW_NUMBER() over ( + PARTITION BY tx_id + ORDER BY + rn + ) AS swap_index +FROM + final_temp +WHERE + (COALESCE(to_amt, 0) > 0 + OR COALESCE(from_amt, 0) > 0) + AND program_id IS NOT NULL diff --git a/models/silver/swaps/silver__swaps_intermediate_orca.yml b/models/silver/swaps/silver__swaps_intermediate_orca.yml new file mode 100644 index 00000000..0d063fd6 --- /dev/null +++ b/models/silver/swaps/silver__swaps_intermediate_orca.yml @@ -0,0 +1,101 @@ +version: 2 +models: + - name: silver__swaps_intermediate_orca + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - BLOCK_ID + - TX_ID + - SWAP_INDEX + - compare_model_subset: + name: silver__swaps_intermediate_orca_business_logic_test + compare_model: ref('testing__swaps_intermediate_orca') + compare_columns: + - tx_id + - succeeded + - swapper + - from_mint + - from_amt + - to_mint + - to_amt + - swap_index + model_condition: "where tx_id in ('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')" + - tx_excluded: + name: silver__swaps_intermediate_orca_tx_excluded_test + excluded_tx_ids: + - 4VroTTqAjpsxYMTgnBzBSJG2P9uB2orenKxiEfvxbTBnAficioUuCijnAYotMmAH4pB6kgziKHvMgHNf7nU8g646 + - 5JHjPkrTy1bWJv6ph8n1Tpk5ABBBuD89NZdyANUpbjdY8Zr2HKUyhJEjSrffQVEfAwYA3d9kVqK84qwuqVSZELp8 + - 5e9ATFzcta5RfXB9tjCZfpE7qV1cBUh5H5ocNrwxSfC4D7KqRXTCRL3om4FTwNprwUmn9VMAUJAKm5qVYaJ8vsq6 + - 3wSxtF5Mqeh5ybZVH1U4nE577pZSrhCr3td8GbJeCfwZfanpP7wrDXMiCUdhd5njhkWW6FKGgEzptDKsY8CW33RA + - 5hgT6wotqHT6c49iwJXexnvnCToteo5npbRStjFveMerx4RtR75azqXWKoaFyEWbXmLcEXR68EWwFgj5BzxjjXuy + - 3PdQf87gUGqRKrTXWzqpuduUVhe2cCfSFbmDbbJWQg4MwmsQu43esBRz3HQPsGZ98a8ZjtcNsxNDsrxhV1LBWNJn + - 4BhhKEKu1z7qXGPaoX1114oQ5Beqa2VWfgBvoW2dzcU6CmpAGPfztJZim2ZeF6MQsjdAAaiyr4ToChr3fa88mJpA + - 2Mnf63t8QQr4K59nC2UHunvuVirmASru4R3dsnpT6GNs2ZbGBhjS7NHAFrnTHScVYsjo2EivsqPgBMfvrTxL6dtC + - uxyRadaVq9gkEP7Z77iuDaHHbBpVeDh7pd6vn4ggzHhEpZEJAT7tT4L1TA6jVD5CAt6HhFipaygKKsZeHtEEmtM + columns: + - name: BLOCK_TIMESTAMP + description: "{{ doc('block_timestamp') }}" + tests: + - not_null + - dbt_expectations.expect_row_values_to_have_recent_data: + datepart: day + interval: 2 + - name: BLOCK_ID + description: "{{ doc('block_id') }}" + tests: + - not_null + - name: TX_ID + description: "{{ doc('tx_id') }}" + tests: + - not_null + - name: SUCCEEDED + description: "{{ doc('tx_succeeded') }}" + tests: + - not_null + - name: PROGRAM_ID + description: "{{ doc('program_id') }}" + - name: SWAPPER + description: Address that initiated the swap + - name: FROM_AMT + description: Total amount of the token sent in to initiate the swap + tests: + - name: FROM_MINT + description: Token being sent or swapped from + tests: + - name: TO_AMT + description: Total amount of the token received in the swap + tests: + - name: TO_MINT + description: Token being received or swapped for + tests: + - name: SWAP_INDEX + description: Order in which the intermediate swap was executed + tests: + - not_null: + where: succeeded = TRUE + - name: _INSERTED_TIMESTAMP + description: "{{ doc('_inserted_timestamp') }}" + tests: + - not_null \ No newline at end of file