diff --git a/data/testing__swaps_intermediate_generic.csv b/data/testing__swaps_intermediate_generic.csv new file mode 100644 index 00000000..9c67569b --- /dev/null +++ b/data/testing__swaps_intermediate_generic.csv @@ -0,0 +1,94 @@ +tx_id,succeeded,swapper,from_mint,from_amt,to_mint,to_amt,swap_index +4psUxWtHv1c3aWUeNDb8tiu8tzwV1anoBbLBhLfz1SvMszWUYNnm8XMCXfpfpdqK52664K4ro7fiLXVunv7sjf7i,TRUE,74EaqbbMDZwnoybvbvifP21bNmQu9aQgpekx4anAuxsx,So11111111111111111111111111111111111111112,1,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,198.857425,1 +5hjScoKbdHrAnAFf9yyAktrspQWiFSK8yQK3B2ej91MXz4iSwTUh5ryTt2Hnhb4hAAnmQBMHudAtmgGqsrVNCCMp,TRUE,7UwBQLT7uc8DFabDUwRBgTCjm2Tprh79HoDwhPCap6v7,So11111111111111111111111111111111111111112,0.108984108,4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R,2.8511,1 +2q8rnKLm5CM2ejsCfeJ1w5JCXefkgW1sVUfL4HmfDqn2rhk2dp8e8U7WHcuCvczWNFqUTZAvsNt48YRVKs1JZcer,TRUE,2GGQEUXqc7dj3HYBXsPCy7kGEoXyXx6k9U8ooDxJtRnn,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,55,Gz3u6eJaKEviYpPC5AwUziz891kNX76PNdsmJrnaNNY4,8324.852812161,1 +2q8rnKLm5CM2ejsCfeJ1w5JCXefkgW1sVUfL4HmfDqn2rhk2dp8e8U7WHcuCvczWNFqUTZAvsNt48YRVKs1JZcer,TRUE,2GGQEUXqc7dj3HYBXsPCy7kGEoXyXx6k9U8ooDxJtRnn,Gz3u6eJaKEviYpPC5AwUziz891kNX76PNdsmJrnaNNY4,8324.852812161,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,55.200353,2 +2HYYtA1p674cH6uYoEPkHdtDqBqLZDTGbuJefcJR1NfsAqofJ8kTyXxYhCtcTJxVyiZWni3wctMimii6sWNegwMU,TRUE,J2TL2WhHC1d2AtScxtwaHjYWJkGgPbCuQZgNQ7JjMkMq,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,69.55625,7Q2afV64in6N6SeZsAAB81TJzwDoD6zpqmHkzi9Dcavn,0.49425037,1 +2HYYtA1p674cH6uYoEPkHdtDqBqLZDTGbuJefcJR1NfsAqofJ8kTyXxYhCtcTJxVyiZWni3wctMimii6sWNegwMU,TRUE,J2TL2WhHC1d2AtScxtwaHjYWJkGgPbCuQZgNQ7JjMkMq,7Q2afV64in6N6SeZsAAB81TJzwDoD6zpqmHkzi9Dcavn,0.49425037,So11111111111111111111111111111111111111112,0.500092956,2 +4ppnFcPZq4e25vfXqpMoaKjyFdsbaCQVNmE4UYFYue2F7XcrQJz9VnCoq1AZGczqYKMWuQWmqsobVSK5pSoiwdx7,TRUE,Eda9aTLZvkW1oNYh9xwXAhZ1jpQjmztHrDcLQEFjuqNp,4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R,19.99552,7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU,2763,1 +4ppnFcPZq4e25vfXqpMoaKjyFdsbaCQVNmE4UYFYue2F7XcrQJz9VnCoq1AZGczqYKMWuQWmqsobVSK5pSoiwdx7,TRUE,Eda9aTLZvkW1oNYh9xwXAhZ1jpQjmztHrDcLQEFjuqNp,,,4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R,0.005511,2 +4ppnFcPZq4e25vfXqpMoaKjyFdsbaCQVNmE4UYFYue2F7XcrQJz9VnCoq1AZGczqYKMWuQWmqsobVSK5pSoiwdx7,TRUE,Eda9aTLZvkW1oNYh9xwXAhZ1jpQjmztHrDcLQEFjuqNp,7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU,2762.999979571,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,80.614118,3 +3W94CoGdVY9Lo4mRHi3zEq7YYGb3Z4M9hAte2hyA2A2ybAUawTYvJ3Pq7egsCPTrXcUmZ8F4nu4zukYMRkYEXBTN,TRUE,CSF2iMkMcogig1H5Mh8bFmZ2SqLzZeM6juQTjAdXiCso,So11111111111111111111111111111111111111112,0.759743751,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,0.736088883,1 +5TDdGQREPn6xB8AC9gHhhwbqSc99qsP2pzHJ3s6FTTVDFZ3cUpRS35qtVMQvU2RYroKPZgZSMsKkHgvWwH2Bjgjv,TRUE,Ari31tr1mgSBfB7NrTnGFeYKJHq8XRjvPteuxZvnAegG,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.6,PHnyhLEnsD9SiP9tk9kHHKiCxCTPFnymzPspDqAicMe,6.981833,1 +3q2GQEoUHubwoFTf6pjU9nZYu9ymz5tdWkgpygjnsCsEYvyy2QWfJTgYCcaTvSJ1SW6RN3sz4nrukMm2dDct4ir,TRUE,J2TL2WhHC1d2AtScxtwaHjYWJkGgPbCuQZgNQ7JjMkMq,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,107.805,SHDWyBxihqiCj6YekG2GUr7wqKLeLAMK1gHZck9pL6y,127.98,1 +3q2GQEoUHubwoFTf6pjU9nZYu9ymz5tdWkgpygjnsCsEYvyy2QWfJTgYCcaTvSJ1SW6RN3sz4nrukMm2dDct4ir,TRUE,J2TL2WhHC1d2AtScxtwaHjYWJkGgPbCuQZgNQ7JjMkMq,,,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.002736,2 +3q2GQEoUHubwoFTf6pjU9nZYu9ymz5tdWkgpygjnsCsEYvyy2QWfJTgYCcaTvSJ1SW6RN3sz4nrukMm2dDct4ir,TRUE,J2TL2WhHC1d2AtScxtwaHjYWJkGgPbCuQZgNQ7JjMkMq,SHDWyBxihqiCj6YekG2GUr7wqKLeLAMK1gHZck9pL6y,127.979999969,So11111111111111111111111111111111111111112,1.002256168,3 +5hr56Qdh5ZogtFBaoDPnLroEa7yVAfC6NjbbboNrpUGAoCWcgTtPSXe9Jdx8NhE85u1BAeUT1472C3R42YbDwJXj,TRUE,5gu8vE7cv89RoocZxCPW2nN4rMMuGhb68NTd6hKb2wZD,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,22.969288,Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS,23.08524,1 +4JDczNYimuD8Czc2KW6oruTHtis2UQjAe18r52ngeHaxporYBbzYXwAbKK6R1Pk1VCTmuKqSnnnZL7VyYzdTZk5r,TRUE,9VTZx66r7NJt47DWWzwLfyU9uVFpM9BaQWmurwdoVHFH,Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS,0.099987,BUD1144GGYwmMRFs4Whjfkom5UHqC9a8dZHPVvR2vfPx,0.004894,1 +2kyYvZSnQfd5eaew78fzVpUfDYmHVMyKvQpQ7cs3oqFH5U3UuqzNZyDDuS5Um2eFJCSbjPPdAWqkN9SAP6SPHzZ3,TRUE,4VAyiJCirbe7MyRF4GFtJ2upPa9pVUNrDqeyk4BjQZ1E,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,106.895063,DubwWZNWiNGMMeeQHPnMATNj77YZPZSAz2WVR5WjLJqz,1288.645966409,1 +2kyYvZSnQfd5eaew78fzVpUfDYmHVMyKvQpQ7cs3oqFH5U3UuqzNZyDDuS5Um2eFJCSbjPPdAWqkN9SAP6SPHzZ3,TRUE,4VAyiJCirbe7MyRF4GFtJ2upPa9pVUNrDqeyk4BjQZ1E,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.107002,,,2 +2kyYvZSnQfd5eaew78fzVpUfDYmHVMyKvQpQ7cs3oqFH5U3UuqzNZyDDuS5Um2eFJCSbjPPdAWqkN9SAP6SPHzZ3,TRUE,4VAyiJCirbe7MyRF4GFtJ2upPa9pVUNrDqeyk4BjQZ1E,DubwWZNWiNGMMeeQHPnMATNj77YZPZSAz2WVR5WjLJqz,1287.357319612,So11111111111111111111111111111111111111112,0.79222844,3 +2kyYvZSnQfd5eaew78fzVpUfDYmHVMyKvQpQ7cs3oqFH5U3UuqzNZyDDuS5Um2eFJCSbjPPdAWqkN9SAP6SPHzZ3,TRUE,4VAyiJCirbe7MyRF4GFtJ2upPa9pVUNrDqeyk4BjQZ1E,DubwWZNWiNGMMeeQHPnMATNj77YZPZSAz2WVR5WjLJqz,1.288645966,,,4 +2xWWgyut3mQdPaeiuQ5G3UtbJT2rsahhp4eeiVaCmnjBbYGdN1jvhG326hvETXVtXNYnqyeCbgh7aMoPsqH9oHK5,TRUE,3pBf38wn65xeMKw6U1HbmrnE8fWMoHFN98ZoinprtNV6,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,103.193484,7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU,3428.144575443,1 +2xWWgyut3mQdPaeiuQ5G3UtbJT2rsahhp4eeiVaCmnjBbYGdN1jvhG326hvETXVtXNYnqyeCbgh7aMoPsqH9oHK5,TRUE,3pBf38wn65xeMKw6U1HbmrnE8fWMoHFN98ZoinprtNV6,7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU,3424.716429216,So11111111111111111111111111111111111111112,0.762365186,2 +2xWWgyut3mQdPaeiuQ5G3UtbJT2rsahhp4eeiVaCmnjBbYGdN1jvhG326hvETXVtXNYnqyeCbgh7aMoPsqH9oHK5,TRUE,3pBf38wn65xeMKw6U1HbmrnE8fWMoHFN98ZoinprtNV6,7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU,3.428144575,,,3 +5UexvqZu5dcQ3rN4PV2DuXStLu1aThf4hNs1gH1jEtZbV81XRWiCDUjzKJFNtUEB9dbv8Tu5NNAqzuB47U6EQQ3J,TRUE,J1gXYvi5SnjYkAKqbt7SotGuzdEM6Ff1G3RCxuHyDyXz,Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,5747,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,5746.42461,1 +5UexvqZu5dcQ3rN4PV2DuXStLu1aThf4hNs1gH1jEtZbV81XRWiCDUjzKJFNtUEB9dbv8Tu5NNAqzuB47U6EQQ3J,TRUE,J1gXYvi5SnjYkAKqbt7SotGuzdEM6Ff1G3RCxuHyDyXz,Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,302.490881,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,302.508428,2 +5gtKQy7xpySbWFXtMGbtM3coc8v9A7dLHf4A3x4TTvE8i3BaHLGrr5QFksjbRLmDob9GePjVjuq5DPhDtTE8cG9M,FALSE,9Eh43X6T9wST3N55HDxfhjkSQL2mF3ggFphM26MwcsEK,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,25000,2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk,9.419363,1 +5cDK9Qqk6CEcsdtirvtaEtD5aEnhi8iRtjjD4gSq2MHHoi336KnogSJ82iMSzimCZNKXnwSiV5jRSgcBfPsMEuap,TRUE,GNisgcTZZ2WS5PFAEkVUbFso3wNe22cjhmZiEjGcqeHD,So11111111111111111111111111111111111111112,546.15,5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm,535.080118783,1 +5cDK9Qqk6CEcsdtirvtaEtD5aEnhi8iRtjjD4gSq2MHHoi336KnogSJ82iMSzimCZNKXnwSiV5jRSgcBfPsMEuap,TRUE,GNisgcTZZ2WS5PFAEkVUbFso3wNe22cjhmZiEjGcqeHD,So11111111111111111111111111111111111111112,446.85,5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm,437.640755648,2 +4va5YTjeRQKkhqaRHQVFR7LUGe1V6NYz2HqYDW4uCCCJw7veFFeBmCYRoYyfe11BVSzfCu1JR8dC31wwQzTDQhca,TRUE,61pBb8wg3LoZ3B5pW7UxL3zZMSTFELpDb6jGPSThrR97,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,40.373314,So11111111111111111111111111111111111111112,0.933728607,1 +4va5YTjeRQKkhqaRHQVFR7LUGe1V6NYz2HqYDW4uCCCJw7veFFeBmCYRoYyfe11BVSzfCu1JR8dC31wwQzTDQhca,TRUE,61pBb8wg3LoZ3B5pW7UxL3zZMSTFELpDb6jGPSThrR97,So11111111111111111111111111111111111111112,0.003734914,,,2 +5FoqrCd2EUhVGWZSCZsKcXpmsEVjcqWkcG6vXNDTXMfKAoBnGCSg1tziLGad8K37UHy9oKe9WHCQXkzKwqiRBx3o,FALSE,J3xKkSUowia5q483zwQmijSfnVocGsWg6duFzQYHL9Nn,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,267.77735,So11111111111111111111111111111111111111112,2.741542943,1 +5FoqrCd2EUhVGWZSCZsKcXpmsEVjcqWkcG6vXNDTXMfKAoBnGCSg1tziLGad8K37UHy9oKe9WHCQXkzKwqiRBx3o,FALSE,J3xKkSUowia5q483zwQmijSfnVocGsWg6duFzQYHL9Nn,So11111111111111111111111111111111111111112,2.741542943,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,267.72231,2 +6234EwRrPAFwzM5rcieMKHpzAjHTX4o2AK5uMVEogFMgz5n596n2cXXNZ7UVp2BiWMzzpihcBwnpaKYVEgMhxzmp,TRUE,J3xKkSUowia5q483zwQmijSfnVocGsWg6duFzQYHL9Nn,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,1.512,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,211.772161,1 +6234EwRrPAFwzM5rcieMKHpzAjHTX4o2AK5uMVEogFMgz5n596n2cXXNZ7UVp2BiWMzzpihcBwnpaKYVEgMhxzmp,TRUE,J3xKkSUowia5q483zwQmijSfnVocGsWg6duFzQYHL9Nn,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,211.772161,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,1.512029228,2 +8d6AQJ5KTJUkn2vb8U6EW2pXLDPEgfwPZ3nEsoBgF212YdsgAiAkatJcnfEcsvvrizxGS8nw8j8VqYNjozXpYs7,TRUE,9aH7PQxKLGv2Z6PRGjvBLuKYGKqFncRfSUeg4ztzrZCM,So11111111111111111111111111111111111111112,10,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,986.215356,1 +8d6AQJ5KTJUkn2vb8U6EW2pXLDPEgfwPZ3nEsoBgF212YdsgAiAkatJcnfEcsvvrizxGS8nw8j8VqYNjozXpYs7,TRUE,9aH7PQxKLGv2Z6PRGjvBLuKYGKqFncRfSUeg4ztzrZCM,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,986.215356,So11111111111111111111111111111111111111112,10.002896001,2 +5D9K8nKmHqaiEfNYAbDj6PWfsCCkdg3EcGYszQ9AbaBLC1ve5gpaNPrms1Eruj4aZhTg5DKSp3WAdjkCvHr1WcsY,TRUE,Q5fRgShb9GswfKokajjAba5tsWeRN6wHYP5tBNhsqbU,So11111111111111111111111111111111111111112,0.001,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,0.000966306,1 +5D9K8nKmHqaiEfNYAbDj6PWfsCCkdg3EcGYszQ9AbaBLC1ve5gpaNPrms1Eruj4aZhTg5DKSp3WAdjkCvHr1WcsY,TRUE,Q5fRgShb9GswfKokajjAba5tsWeRN6wHYP5tBNhsqbU,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,0.000966306,So11111111111111111111111111111111111111112,0.000999799,2 +57cxdqYXcqAiZwyhEVg8WomEjh68LVmcfBmpzh5cUTi9kaZfWTGWCgBwWshWm3QkBkTzchTcuj2w4Pyhc2MGmyzf,TRUE,FRAnJ8DFBX4PUKqVvndquemt6D4qmVRjtTotVVjEJxxh,So11111111111111111111111111111111111111112,1.70882161,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,168.774954,1 +57cxdqYXcqAiZwyhEVg8WomEjh68LVmcfBmpzh5cUTi9kaZfWTGWCgBwWshWm3QkBkTzchTcuj2w4Pyhc2MGmyzf,TRUE,FRAnJ8DFBX4PUKqVvndquemt6D4qmVRjtTotVVjEJxxh,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.168774,,,2 +3HUuJga6Xhwbzns8JAXB3BotAJKRFAmua3EtdN6wMEcr3fDUB2NzXD6ZYXJkWDNsg2akc98JcaNDAc24uTkGwwHN,TRUE,J3xKkSUowia5q483zwQmijSfnVocGsWg6duFzQYHL9Nn,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,511.855168,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,6.05,1 +3HUuJga6Xhwbzns8JAXB3BotAJKRFAmua3EtdN6wMEcr3fDUB2NzXD6ZYXJkWDNsg2akc98JcaNDAc24uTkGwwHN,TRUE,J3xKkSUowia5q483zwQmijSfnVocGsWg6duFzQYHL9Nn,,,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.068585,2 +3HUuJga6Xhwbzns8JAXB3BotAJKRFAmua3EtdN6wMEcr3fDUB2NzXD6ZYXJkWDNsg2akc98JcaNDAc24uTkGwwHN,TRUE,J3xKkSUowia5q483zwQmijSfnVocGsWg6duFzQYHL9Nn,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,6.05,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,512.018668,3 +2QTw3GMqsqnV1WdTvhJsELKauEeBP6bo34UKSUbpejxvUeEisZECAkWXaVv7NmwZdJrBxxhnHperdg2PCb1AkNHm,TRUE,81aJvJkJ6CaUhYcGx4VNLiAcDk5nQyqfw4gbstm84Eqh,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,34,Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,34.024478,1 +2QTw3GMqsqnV1WdTvhJsELKauEeBP6bo34UKSUbpejxvUeEisZECAkWXaVv7NmwZdJrBxxhnHperdg2PCb1AkNHm,TRUE,81aJvJkJ6CaUhYcGx4VNLiAcDk5nQyqfw4gbstm84Eqh,Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,34.024478,So11111111111111111111111111111111111111112,0.880711326,2 +2QTw3GMqsqnV1WdTvhJsELKauEeBP6bo34UKSUbpejxvUeEisZECAkWXaVv7NmwZdJrBxxhnHperdg2PCb1AkNHm,TRUE,81aJvJkJ6CaUhYcGx4VNLiAcDk5nQyqfw4gbstm84Eqh,So11111111111111111111111111111111111111112,0.007486046,,,3 +2hZuCGiMkuXxPJ4jZwKf8zzxzs4gUteDb28ZTFd5KnVpmfseP8YBWzRHuLP63iWiwUgb8mFM74o3cmJmag4YniKU,TRUE,4vp8RAz8qGxrkrNJ1axKJCtUEzXE7CKwtnZGVGE6c8k9,So11111111111111111111111111111111111111112,0.499965047,7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs,0.0188,1 +2hZuCGiMkuXxPJ4jZwKf8zzxzs4gUteDb28ZTFd5KnVpmfseP8YBWzRHuLP63iWiwUgb8mFM74o3cmJmag4YniKU,TRUE,4vp8RAz8qGxrkrNJ1axKJCtUEzXE7CKwtnZGVGE6c8k9,,,So11111111111111111111111111111111111111112,0.002626511,2 +4Xdjhm8219RTPpfsi5tMtBKjbUNgm8Kh2kphNpH5vLqGFxFeh3dcntQT5nMZGFaD93BZWJwFtviB1afjWEdXZRsu,TRUE,7676mEXc51P1Je4D2XrHqVdFcAZmvf3Y2Ujo8GZfWXQc,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,28500,So11111111111111111111111111111111111111112,270.3,1 +4Xdjhm8219RTPpfsi5tMtBKjbUNgm8Kh2kphNpH5vLqGFxFeh3dcntQT5nMZGFaD93BZWJwFtviB1afjWEdXZRsu,TRUE,7676mEXc51P1Je4D2XrHqVdFcAZmvf3Y2Ujo8GZfWXQc,,,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.336192,2 +4Xdjhm8219RTPpfsi5tMtBKjbUNgm8Kh2kphNpH5vLqGFxFeh3dcntQT5nMZGFaD93BZWJwFtviB1afjWEdXZRsu,TRUE,7676mEXc51P1Je4D2XrHqVdFcAZmvf3Y2Ujo8GZfWXQc,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1498.5,So11111111111111111111111111111111111111112,14.218227761,3 +4Xdjhm8219RTPpfsi5tMtBKjbUNgm8Kh2kphNpH5vLqGFxFeh3dcntQT5nMZGFaD93BZWJwFtviB1afjWEdXZRsu,TRUE,7676mEXc51P1Je4D2XrHqVdFcAZmvf3Y2Ujo8GZfWXQc,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1.5,,,4 +2CAg4pz6eyZ6eaZznsr4WseRkscjETmzRJ68LJKAxHnd6Whd4Yrvrcfq3UxsVjrF835GF7upMUqSvL6WVJAHLJSc,TRUE,8ZryiFWWZmMT7MHnNBhHffumcEBu25RYMyQhYEMWGFzu,ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx,59.40825068,So11111111111111111111111111111111111111112,0.026927753,1 +5TDdGQREPn6xB8AC9gHhhwbqSc99qsP2pzHJ3s6FTTVDFZ3cUpRS35qtVMQvU2RYroKPZgZSMsKkHgvWwH2Bjgjv,TRUE,Ari31tr1mgSBfB7NrTnGFeYKJHq8XRjvPteuxZvnAegG,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.6,PHnyhLEnsD9SiP9tk9kHHKiCxCTPFnymzPspDqAicMe,6.981833,1 +3yVbSdBHnaoccDG4XpbTQrV1NNbqNiVdKYHio1iPNAnRpdnP1xK1sg6NdkdZKRhjj7tnve589UX3p55UBGWssTCD,TRUE,J2TL2WhHC1d2AtScxtwaHjYWJkGgPbCuQZgNQ7JjMkMq,So11111111111111111111111111111111111111112,1,Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS,104.86192,1 +3yVbSdBHnaoccDG4XpbTQrV1NNbqNiVdKYHio1iPNAnRpdnP1xK1sg6NdkdZKRhjj7tnve589UX3p55UBGWssTCD,TRUE,J2TL2WhHC1d2AtScxtwaHjYWJkGgPbCuQZgNQ7JjMkMq,Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS,104.86192,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,104.435351,2 +3W94CoGdVY9Lo4mRHi3zEq7YYGb3Z4M9hAte2hyA2A2ybAUawTYvJ3Pq7egsCPTrXcUmZ8F4nu4zukYMRkYEXBTN,TRUE,CSF2iMkMcogig1H5Mh8bFmZ2SqLzZeM6juQTjAdXiCso,So11111111111111111111111111111111111111112,0.759743751,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,0.736088883,1 +33fd31332UvoH9YLi2ZDarDqWqmuD2fsFDigc79LKtT1XVYY6N1M8htAkPfjP989yDfKUv8EmprRAcFrZSxQ38Cn,TRUE,An8Q8yMbaYfFY9jhYj59vSc3p15hxiPcY1qYdaVcVyEK,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,218.547238,So11111111111111111111111111111111111111112,1.601351659,1 +3c9M2C4mE3Q14PmiTMTHkQNMkzPRZSCdMXRc1oYooV8iiFJGLyfSMRgsZVWrXVWqsgvsaw6cgv21DXxCRamK8JHJ,TRUE,D6FMG1nxZAZcPgVjfKcxKzSoTuWUrm3gwABmgn9cdyX4,,,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.398722,1 +3c9M2C4mE3Q14PmiTMTHkQNMkzPRZSCdMXRc1oYooV8iiFJGLyfSMRgsZVWrXVWqsgvsaw6cgv21DXxCRamK8JHJ,TRUE,D6FMG1nxZAZcPgVjfKcxKzSoTuWUrm3gwABmgn9cdyX4,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.000398,Fse2oFDfbwT89CqtuoFaHCBnGTMFLartDYDjPLZyc7e,0,2 +nmN84qNUcZtGpCCxm1r8Qct3Z8vgPMRXFfd7QFohE28dVociEgbSA9xrkn44WgKa8GbTH86u3EiicCakCsbKiya,TRUE,D6FMG1nxZAZcPgVjfKcxKzSoTuWUrm3gwABmgn9cdyX4,,,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.403479,1 +nmN84qNUcZtGpCCxm1r8Qct3Z8vgPMRXFfd7QFohE28dVociEgbSA9xrkn44WgKa8GbTH86u3EiicCakCsbKiya,TRUE,D6FMG1nxZAZcPgVjfKcxKzSoTuWUrm3gwABmgn9cdyX4,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.000403,Fse2oFDfbwT89CqtuoFaHCBnGTMFLartDYDjPLZyc7e,9,2 +24XyX2uYVEJoXNLhkgeYPoTtsLDLUoqcxc65sWL4Yn4w9fcUYbbYpLwiFg2PoWgZ5sqUwAjjhvk28DaEP5Vm2mR2,TRUE,5sRWm1HRK3d4NNxYV81xYaW5CqvKsGASnM4Z297RD56v,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,18736.605642,FCqfQSujuPxy6V42UvafBhsysWtEq1vhjfMN1PUbgaxA,18742.37017709,1 +3YjCXu1hbUC31rB7fq9YWry731dAK2SQiReZvaG7vzxg2T9Go1CKqjizk835Ym6emh2xUTS6pafGF2hAg5nRcW6x,TRUE,GUvoD8DWtUPXxiQNJAqJFnHyAytt5w7Zpb4Du3ySw3W9,8XSsNvaKU9FDhYWAv7Yc7qSNwuJSzVrXBNEk7AFiWF69,1600,JEFFSQ3s8T3wKsvp4tnRAsUBW7Cqgnf8ukBZC4C8XBm1,1597.57537839,1 +3YjCXu1hbUC31rB7fq9YWry731dAK2SQiReZvaG7vzxg2T9Go1CKqjizk835Ym6emh2xUTS6pafGF2hAg5nRcW6x,TRUE,GUvoD8DWtUPXxiQNJAqJFnHyAytt5w7Zpb4Du3ySw3W9,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1597.575378,Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,1597.52423,2 +4YaaEGVvhr1ojqv1kSse5zBEs8RLSvZfhfFmJPPRYPKuK7QLdwxxFP9wkbrjRj5HZNZHMRAr6JkCxRnM3KpWzxHP,TRUE,DdDTLPkUf5ZsuhytMkcfVZ5sku6jBNdv9GnYBzorQEji,EjmyN6qEC1Tf1JxiG1ae7UTJhUxSwk1TCWNWqxWV4J6o,2197.33847522,88881Hu2jGMfCs9tMu5Rr7Ah7WBNBuXqde4nR5ZmKYYy,2196.38096256,1 +37LsDiRR7kC5PBoWp3AEvBbuxV45r2qPywbAyFKCYdYQi7uaG11aLhpmoEP5CnBwUzFNF13ZpkCUBELG3yy1gPDV,TRUE,AU2myQWVKTCfSthGGyLEUCHgoYr9g7LmxhftDRFBrtng,JEFFSQ3s8T3wKsvp4tnRAsUBW7Cqgnf8ukBZC4C8XBm1,500,PUhuAtMHsKavMTwZsLaDeKy2jb7ciETHJP7rhbKLJGY,499.017073663,1 +3YVDZZ54VG7vNQvdzkHrx4sfMcBeSUoAUg7U8cE5Rod3GLsXShTAg53BEZ8fHB2Uwkq7Yh75cN9p82H1JVXYXHyz,TRUE,5WZ2k1jttJiM6grc49QrvW7V9mh1RnxG59nYD7c1DqGV,7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU,222.405638284,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2.16,1 +7mN7acM2k7mspxfkqhq66xx8nqLa8BigcDwM8URB48QRr9MkiL5E6nG6hrCyURrqRAssAGZzrsVhRfVtKvhmMS9,FALSE,GfCaec9YGspHjEDk199z4X8NqR4vXopwM1afRn9CMhqB,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,200,DUSTawucrTsGU8hcqRdHDCbuYhCPADMLM2VcCb8VnFnQ,65.745211297,1 +7mN7acM2k7mspxfkqhq66xx8nqLa8BigcDwM8URB48QRr9MkiL5E6nG6hrCyURrqRAssAGZzrsVhRfVtKvhmMS9,FALSE,GfCaec9YGspHjEDk199z4X8NqR4vXopwM1afRn9CMhqB,DUSTawucrTsGU8hcqRdHDCbuYhCPADMLM2VcCb8VnFnQ,65,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,188.4246,2 +2YYqA2s9bwZLiTEfBoQYCdXKznFFjHy1orhTHpP6MG63m29uckPovWQjbzoCnUbRcvP3PvR3btLK7kTHFc4PmqiY,TRUE,5hoGstgd4FKaBxvBMbZwPNb2vo41VXWhwxt86X4KHL43,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.50363,So11111111111111111111111111111111111111112,0.013245787,1 +8NvbDSTvXQtBexQTSgQCqeZDBsZX4vzSeEnxEQ72aXbbxYmEbSxkfCVxm2oe9JCLLD6hVVYQgK24hkHPq1ncKw1,TRUE,5WZ2k1jttJiM6grc49QrvW7V9mh1RnxG59nYD7c1DqGV,7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU,729.722800013,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,7.01,1 +5rMrTe9UhfSTm6ZNSjN7UqNhuDFKaZmbCmgHKqhSRAZi5cAs9d6zuff95RP9sbRsbkmQX3jRtGAn2erarE9pV8cD,TRUE,5kqGoFPBGoYpFcxpa6BFRp3zfNormf52KCo5vQ8Qn5bx,So11111111111111111111111111111111111111112,0,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,0.000000001,1 +5rMrTe9UhfSTm6ZNSjN7UqNhuDFKaZmbCmgHKqhSRAZi5cAs9d6zuff95RP9sbRsbkmQX3jRtGAn2erarE9pV8cD,TRUE,5kqGoFPBGoYpFcxpa6BFRp3zfNormf52KCo5vQ8Qn5bx,So11111111111111111111111111111111111111112,0,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,0.000000001,2 +5rMrTe9UhfSTm6ZNSjN7UqNhuDFKaZmbCmgHKqhSRAZi5cAs9d6zuff95RP9sbRsbkmQX3jRtGAn2erarE9pV8cD,TRUE,5kqGoFPBGoYpFcxpa6BFRp3zfNormf52KCo5vQ8Qn5bx,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,0.000000001,So11111111111111111111111111111111111111112,0.000000001,3 +ojKvTxF4MXgPEoxYYyxakcRbDko4eSYhmUqpCe9hTLJ4QSBxgfotDRbFW2v829N1zapX8MVeQ2D2kX3XnT8hwdL,TRUE,4KVBskF8LWptkBCC1Ldj98Ym7ndHhvVfnwS3AJDwUSzw,9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i,19.002452,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.722861,1 +ojKvTxF4MXgPEoxYYyxakcRbDko4eSYhmUqpCe9hTLJ4QSBxgfotDRbFW2v829N1zapX8MVeQ2D2kX3XnT8hwdL,TRUE,4KVBskF8LWptkBCC1Ldj98Ym7ndHhvVfnwS3AJDwUSzw,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.722861,9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i,19.020759,2 +BkLJ56E93ai36Mwx7Wv8PoXVZ2RZUbCGCGMawZWU2nbEpU3QiipyG9Lr6CajGMtM6s5BnPWqSYuLLf3GzsAe5hQ,TRUE,HGSXs82RMXbTULPwJmrBdB33zrSvn3qvhk7Nrjwb8BVA,USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX,1,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.998039,1 +BkLJ56E93ai36Mwx7Wv8PoXVZ2RZUbCGCGMawZWU2nbEpU3QiipyG9Lr6CajGMtM6s5BnPWqSYuLLf3GzsAe5hQ,TRUE,HGSXs82RMXbTULPwJmrBdB33zrSvn3qvhk7Nrjwb8BVA,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.998039,7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj,0.027274552,2 +BkLJ56E93ai36Mwx7Wv8PoXVZ2RZUbCGCGMawZWU2nbEpU3QiipyG9Lr6CajGMtM6s5BnPWqSYuLLf3GzsAe5hQ,TRUE,HGSXs82RMXbTULPwJmrBdB33zrSvn3qvhk7Nrjwb8BVA,7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj,0.027274551,USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX,1.00022,3 +Zn4aQD6ScgbNfmcKRSYAuyDJ4AWibjwmKGLW2W4QrvMpWtxvHxTta7cxUYMgWTKTHHACF9hV78yKFdkG3CddKju,TRUE,ogDsdvMKRRRMmsrT2hTPdkQBu1qY2z1jBDzgpi8HZri,7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj,5.28470615,So11111111111111111111111111111111111111112,5.52707464,1 +4QJDoXfwFnR354DApr36GCLJGjamwwwSTkgVEwpLbTgwEy8LCqEJsiJPfjEfwQhNtQPQJnmqUjTEcBNRKQ1vfNPN,TRUE,HdGsWDaxSDBesEYXmAYsG7WZYkKxUv3qhGJgmXSXnm3d,So11111111111111111111111111111111111111112,0.429831294,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,0.407981907,1 +5eCovtQh92hfW16oLWCv82uBkbXbkR1GJV6DvYYqik7mSoiJftUy39TqGgJqzkkMD2SpVYNWJPsuxGFHPGn9iVnb,TRUE,FnJZCfHc6LuZKCWMJGsHmpmqPeVVpxiJR3upiFp8TWsG,CASHVDm2wsJXfhj6VWxb7GiMdoLc17Du7paH4bNr5woT,12.782187,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,12.784509,1 +3UrFWezXZNQKf1uScXa7ZWuLW1xGvTwT8zexhP4STWfjkHW22cpUBNVRfn82wZGo1LYVMsrRKiaH3FV3NfzrSssH,TRUE,GtRpifc7ULdyi7zriCU8bs8oDrUR5xfVRdNUeCjoBX37,So11111111111111111111111111111111111111112,1.02,7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj,0.972054099,1 +5kvu9vpkL4zRo7fRaSDAv5iebwKmiVXWWMKx5puXUcszqRcg8YmX5KLHD2NG2BmKYMCAJddTrrJ1M7vYEUaKJtYp,TRUE,9DiVSe2kfRuKK74L2otNtHqdpNbpqD3aGY1QDtRjuVq5,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.0001,Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS,0.000101,1 +394empadgqiJ5EE2KHbTsQVA8V9mssJxFVc5Ygs1jT3DkZYbPxWVyLdLiuSTWbQKCcYy6FMkmCwX5Dm4rZmNe8E4,TRUE,AUq7ZTdLessJAEYWicbiLM8dxERVMNaU5rVjndp9MKU5,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.298803,So11111111111111111111111111111111111111112,0.007107501,1 +394empadgqiJ5EE2KHbTsQVA8V9mssJxFVc5Ygs1jT3DkZYbPxWVyLdLiuSTWbQKCcYy6FMkmCwX5Dm4rZmNe8E4,TRUE,AUq7ZTdLessJAEYWicbiLM8dxERVMNaU5rVjndp9MKU5,So11111111111111111111111111111111111111112,0.000017768,,,2 +4TnvetxYacY6NCZfLNm8rQARU7nDdg5ADrXEfGiiT946ZhDZhSRJuBHcTpQs2BFEHHNc7gr8dMZqV2L8hQAfwyc6,TRUE,E7L6VcjJHw7ArB2umHwygn5dbBYRMSmNWz3kN7r8y3up,4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R,0.985331,So11111111111111111111111111111111111111112,0.016440047,1 +4TnvetxYacY6NCZfLNm8rQARU7nDdg5ADrXEfGiiT946ZhDZhSRJuBHcTpQs2BFEHHNc7gr8dMZqV2L8hQAfwyc6,TRUE,E7L6VcjJHw7ArB2umHwygn5dbBYRMSmNWz3kN7r8y3up,So11111111111111111111111111111111111111112,0.000411001,,,2 +5VYTErgkrxA6Z52UczoPpE1x7UCdAQeeTy4WLxaoWAPiMBNuUPhTwYz8aBDMhgECcnsQVy7y9JVaH5W9ka2kBAUE,TRUE,ExCnKpsswsQi4c86gZADu4JCAwBYBDrg2ytbqDXdy7fm,2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk,1.615,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,3245.932366,1 +5CGW8p9v9gWqF4vcmornAoiFyPptvgtyjsGpGHF6HdowRL24xUx5txqK6oXQuh9w2xNngYtWrsjhGe1Ex62Wt852,TRUE,SAueccx6WsL4pujbfib14C6M1gPfikXBUSt16YRxFgv,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,679.934673,ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx,74733.50602518,1 +3sRvFwjkHorCbgjdpyHmzUoChRgiR6Hrg74JZG6TnfND2jwnUTv9j2jRnKPkCfUL3HL1JRW5ZgwRKS3P2oxeou97,TRUE,GK5k5riTuuSwSAE1HP5PHCsrFDBP8YoGivAwTzWPuRqE,So11111111111111111111111111111111111111112,27.124552627,7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj,25.510966409,1 +3sRvFwjkHorCbgjdpyHmzUoChRgiR6Hrg74JZG6TnfND2jwnUTv9j2jRnKPkCfUL3HL1JRW5ZgwRKS3P2oxeou97,TRUE,GK5k5riTuuSwSAE1HP5PHCsrFDBP8YoGivAwTzWPuRqE,7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj,25.510966409,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,863.952462,2 \ No newline at end of file diff --git a/data/testing__swaps_intermediate_raydium.csv b/data/testing__swaps_intermediate_raydium.csv new file mode 100644 index 00000000..a3ca05be --- /dev/null +++ b/data/testing__swaps_intermediate_raydium.csv @@ -0,0 +1,16 @@ +tx_id,succeeded,swapper,from_mint,from_amt,to_mint,to_amt,swap_index +3VMB8QpABTaRiVD2PEz2QNdNYqV5nks9dNhq4WBG4HpTDYU7huq7pkj76uvanaJrACq7kMSuypWjsQAUbuCLXjnu,TRUE,7aBDBLE29fkUY99qYY7qY2rgFUDRYGJcEJNWc7B67vPt,So11111111111111111111111111111111111111112,5.2531256,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,169.997342,1 +4XMga64PPam74iSFPqnXohswejwtdxL1Dj5azTjBfYwE97PfGcP6JSastTwRFHdnzXTcdyRsMwD7t5ZZdpYzjqJj,TRUE,6LnXi13a9j3B4QGRWNxJNWASwZZ2BsgpfXsorNL6xRVD,5idSc21Ht4FTC7jSNe34d6v5FmY8gonswYHpgC7QZCZW,28.18,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2.843094,1 +4XMga64PPam74iSFPqnXohswejwtdxL1Dj5azTjBfYwE97PfGcP6JSastTwRFHdnzXTcdyRsMwD7t5ZZdpYzjqJj,TRUE,6LnXi13a9j3B4QGRWNxJNWASwZZ2BsgpfXsorNL6xRVD,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2.843094,So11111111111111111111111111111111111111112,0.076159726,2 +4bEAGZx3EkCyuh3arFg1k3hx7CgR2L9aFdxGg3ihWvwdB4KQiheF6JiyRCQcT6LpeJovYdajDg9fsJ3Lor8pN3kk,TRUE,FnJZCfHc6LuZKCWMJGsHmpmqPeVVpxiJR3upiFp8TWsG,CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG,0.16553,Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,1.307385,1 +5QCTzHRQon1ydSsdCdiAR8to3ECt1FynDcU7yfsCAjLB5zMuhfzb14bwzJ8nqqupbXz6G9vEvpnuAbPHXxeh9sBU,TRUE,3j6iS5G3chfbUi4EUZr6JQsrq3tq6LLepPry9KLUMVRt,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,12.005715,Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,12.003572,1 +RJDZyoLB69PXEJzKwwtrhiXR9wmepV2mnjsVwmdj2dG3y5E7bydM6zdYmam88RBDMsrtSz9STEgkBRatzCdyjoQ,TRUE,GZ9syD2zkWkwJVX1Hu1Dft7rjiyiFMKea9CZwSZ9M4hv,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,137.704983,Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,137.680498,1 +cFPb9Lq6S45br6RmfXnALPDiRGtZhwZ99PTcJa8a1e4TewEVLUAX5McbBjbk8G6gJuCab2pWZdZh2knB7JjbebQ,TRUE,CNkWPpgNx3rv5jADxvoyNzM56J3LqgibSjYjANrgk3Z6,3CKQgrcvwhvFqVXXxLTb1u262nh26SJ3uutkSCTtbZxH,2627.445357679,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.051318,1 +cFPb9Lq6S45br6RmfXnALPDiRGtZhwZ99PTcJa8a1e4TewEVLUAX5McbBjbk8G6gJuCab2pWZdZh2knB7JjbebQ,TRUE,CNkWPpgNx3rv5jADxvoyNzM56J3LqgibSjYjANrgk3Z6,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.051318,So11111111111111111111111111111111111111112,0.00152116,2 +fACqZJ8hmUjLoBX2wzUS2gfwQUmV4HfJbXeQ5QbrZKTs2qdYZVREZxZbTaCy7brZT2Ck7QDqVLDBXVvbrLdYkk6,TRUE,DQgcq4NBK7zfS9c9fqj2LfF2AfHWQkLpHaPkPHc9BuUo,AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB,75.74,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2.516153,1 +fACqZJ8hmUjLoBX2wzUS2gfwQUmV4HfJbXeQ5QbrZKTs2qdYZVREZxZbTaCy7brZT2Ck7QDqVLDBXVvbrLdYkk6,TRUE,DQgcq4NBK7zfS9c9fqj2LfF2AfHWQkLpHaPkPHc9BuUo,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2.516153,So11111111111111111111111111111111111111112,0.07136465,2 +2FhZ9SjAJQgWqHPNBBBpz9dsX5JbsZVhmEcdDuSs1WwnLaPstFzZtY6p2cnwQhuutHGgS1rkoAq2ZkFpSTdbwF5X,TRUE,H9vttSQzVoB6pkaW1BtdAT3UTCMEYos1Jj8bS1fgnGyY,,,4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R,0.004993,1 +5UjXW6NCAJSUMzL9uU3e41r7KmUEuX9i9RT2QS5YSG6FKf6HUh6iRopxBkFsL9A7Bhx3PR1GZeUL561Y6DNehj52,TRUE,777bcdooJe4y6rVx6pLWPmPbvCwBACEv19tGDe69tHrH,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.006785,AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB,0.002077025,1 +MtNdTT2uq9hy7woK4mRyPYZ5SNKFoKJY3UNvi4uRiLQJCrQSY7WMV13dLTDCuAWpHZzinNzAXyXRGXjQUYENtvU,TRUE,54q2d7wd6zsQ1pBmivpQXnnLRLA1iUfd9aABvAUY34MB,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,935.919252,4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R,117.063389,1 +39nyp3f5rUMSC4oaYnCVtkiwdbwMByKz7esgmRTFKPhoMgW3RprMgyj9jcrAwoAX9UWLNVGqpB9k79c4gAN7ug1q,TRUE,9v3MFN5aMoT9dUtGw5AoKowZgUUmeM5esbPuurHYgJYm,CYndQCN5WJL2iF4V42mZ5u8CHPAHCLz7wCXYwPd5hJ37,1930658.78465117,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,837.566473,1 +3XEzUVGbpruCZFKcHFsa3yCZAJ4MQ1TTyaHPFi5odqQ3XEpjA5TzUXHuEVSFRoSGiaRSKQpMwGPzw61ZTb9gRfv5,TRUE,HiVf8RKNETMYVyVrqcaoMGAP8CyMZ67cLtnGfJJ82bCx,7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj,0.157984388,So11111111111111111111111111111111111111112,0.167310009,1 \ No newline at end of file diff --git a/macros/create_udfs.sql b/macros/create_udfs.sql index 71328cc7..0c1a6628 100644 --- a/macros/create_udfs.sql +++ b/macros/create_udfs.sql @@ -22,6 +22,10 @@ create_udf_get_all_inner_instruction_program_ids( schema = "silver" ) }} + {{ + create_udf_get_multi_signers_swapper( + schema = "silver" + ) }} {% endset %} {% do run_query(sql) %} {% endif %} diff --git a/macros/python/udfs.sql b/macros/python/udfs.sql index 62d12028..0efbcd42 100644 --- a/macros/python/udfs.sql +++ b/macros/python/udfs.sql @@ -73,4 +73,29 @@ def get_all_inner_instruction_program_ids(inner_instruction) -> list: return program_ids $$; +{% endmacro %} + +{% macro create_udf_get_multi_signers_swapper(schema) %} +create or replace function {{ schema }}.udf_get_multi_signers_swapper(tx_to array, tx_from array, signers array) +returns string +language python +runtime_version = '3.8' +handler = 'get_multi_signers_swapper' +as +$$ +def get_multi_signers_swapper(tx_to, tx_from, signers): + lst = tx_to + tx_from + d = {} + for v in lst: + d[v] = d[v]+1 if d.get(v) else 1 + + cnts = sorted(d.items(), key = lambda x: x[1], reverse = True) + + for v in cnts: + for signer in signers: + if v[0] == signer: + return signer + + return signers[0] +$$; {% endmacro %} \ No newline at end of file diff --git a/macros/tests/tx_excluded.sql b/macros/tests/tx_excluded.sql new file mode 100644 index 00000000..05f29f5d --- /dev/null +++ b/macros/tests/tx_excluded.sql @@ -0,0 +1,14 @@ +{% test tx_excluded( + model, + excluded_tx_ids + ) %} + +SELECT + * +FROM + {{ model }} +WHERE + tx_id IN( + {{ "'" + excluded_tx_ids | join("','") + "'"}} + ) +{% endtest %} diff --git a/models/silver/silver__transfers2.sql b/models/silver/silver__transfers2.sql new file mode 100644 index 00000000..5fe0d04b --- /dev/null +++ b/models/silver/silver__transfers2.sql @@ -0,0 +1,313 @@ +{{ config( + materialized = 'incremental', + unique_key = ["block_id","tx_id","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_transfers_i AS ( + SELECT + block_id, + block_timestamp, + tx_id, + INDEX::string as index, + event_type, + program_id, + instruction, + inner_instruction, + succeeded, + _inserted_timestamp + FROM + {{ ref('silver__events') }} + WHERE + event_type IN ( + 'transfer', + 'transferChecked', + 'transferWithSeed' + ) + +{% if is_incremental() and env_var( + 'DBT_IS_BATCH_LOAD', + "false" +) == "true" %} +AND + block_id BETWEEN ( + SELECT + LEAST(COALESCE(MAX(block_id), 4260184)+1,151386092) + FROM + {{ this }} + ) + AND ( + SELECT + LEAST(COALESCE(MAX(block_id), 4260184)+4000000,151386092) + FROM + {{ this }} + ) +{% elif is_incremental() %} +AND _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) + FROM + {{ this }} + ) +{% else %} +AND + block_id between 4260184 and 5260184 +{% endif %} + + UNION + SELECT + e.block_id, + e.block_timestamp, + e.tx_id, + CONCAT( + e.inner_instruction :index :: NUMBER, + '.', + ii.index + ) AS INDEX, + ii.value :parsed :type :: STRING AS event_type, + ii.value :programId :: STRING AS program_id, + ii.value as instruction, + NULL AS inner_instruction, + e.succeeded, + _inserted_timestamp + FROM + {{ ref('silver__events') }} + e, + TABLE(FLATTEN(e.inner_instruction :instructions)) ii + WHERE + ii.value :parsed :type :: STRING IN ( + 'transfer', + 'transferChecked', + 'transferWithSeed' + ) + +{% if is_incremental() and env_var( + 'DBT_IS_BATCH_LOAD', + "false" +) == "true" %} +AND + block_id BETWEEN ( + SELECT + LEAST(COALESCE(MAX(block_id), 4260184)+1,151386092) + FROM + {{ this }} + ) + AND ( + SELECT + LEAST(COALESCE(MAX(block_id), 4260184)+4000000,151386092) + FROM + {{ this }} + ) +{% elif is_incremental() %} +AND _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) + FROM + {{ this }} + ) +{% else %} +AND + block_id between 4260184 and 5260184 +{% endif %} +), +base_post_token_balances AS ( + SELECT + tx_id, + owner, + account, + mint, + DECIMAL + FROM + {{ ref('silver___post_token_balances') }} + + +{% if is_incremental() and env_var( + 'DBT_IS_BATCH_LOAD', + "false" +) == "true" %} +WHERE + block_id BETWEEN ( + SELECT + LEAST(COALESCE(MAX(block_id), 4260184)+1,151386092) + FROM + {{ this }} + ) + AND ( + SELECT + LEAST(COALESCE(MAX(block_id), 4260184)+4000000,151386092) + FROM + {{ this }} + ) +{% elif is_incremental() %} +WHERE + _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) + FROM + {{ this }} + ) +{% else %} +WHERE + block_id between 4260184 and 5260184 +{% endif %} +), +base_pre_token_balances AS ( + SELECT + tx_id, + owner, + account, + mint, + DECIMAL + FROM + {{ ref('silver___pre_token_balances') }} + +{% if is_incremental() and env_var( + 'DBT_IS_BATCH_LOAD', + "false" +) == "true" %} +WHERE + block_id BETWEEN ( + SELECT + LEAST(COALESCE(MAX(block_id), 4260184)+1,151386092) + FROM + {{ this }} + ) + AND ( + SELECT + LEAST(COALESCE(MAX(block_id), 4260184)+4000000,151386092) + FROM + {{ this }} + ) +{% elif is_incremental() %} +WHERE + _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) + FROM + {{ this }} + ) +{% else %} +WHERE + block_id between 4260184 and 5260184 +{% endif %} +), +spl_transfers AS ( + SELECT + e.block_id, + e.block_timestamp, + e.tx_id, + e.index, + e.program_id, + e.succeeded, + COALESCE( + p.owner, + e.instruction :parsed :info :authority :: STRING, + e.instruction :parsed :info :multisigAuthority :: STRING + ) AS tx_from, + COALESCE( + p2.owner, + instruction :parsed :info :destination :: STRING + ) AS tx_to, + COALESCE( + e.instruction :parsed :info :tokenAmount: decimals, + p.decimal, + p2.decimal, + p3.decimal, + p4.decimal, + 9 -- default to solana decimals + ) AS decimal_adj, + COALESCE ( + e.instruction :parsed :info :amount :: INTEGER, + e.instruction :parsed :info :tokenAmount :amount :: INTEGER + ) / pow( + 10, + decimal_adj + ) AS amount, + COALESCE( + p.mint, + p2.mint, + p3.mint, + p4.mint + ) AS mint, + instruction :parsed :info :source :: STRING as source_token_account, + instruction :parsed :info :destination :: STRING as dest_token_account, + e._inserted_timestamp + FROM + base_transfers_i e + LEFT OUTER JOIN base_pre_token_balances p + ON e.tx_id = p.tx_id + AND e.instruction :parsed :info :source :: STRING = p.account + LEFT OUTER JOIN base_post_token_balances p2 + ON e.tx_id = p2.tx_id + AND e.instruction :parsed :info :destination :: STRING = p2.account + LEFT OUTER JOIN base_post_token_balances p3 + ON e.tx_id = p3.tx_id + AND e.instruction :parsed :info :source :: STRING = p3.account + LEFT OUTER JOIN base_pre_token_balances p4 + ON e.tx_id = p4.tx_id + AND e.instruction :parsed :info :destination :: STRING = p4.account + WHERE + ( + e.instruction :parsed :info :authority :: STRING IS NOT NULL + OR + e.instruction :parsed :info :multisigAuthority :: STRING IS NOT NULL + ) +), +sol_transfers AS ( + SELECT + e.block_id, + e.block_timestamp, + e.tx_id, + e.index, + e.program_id, + e.succeeded, + instruction :parsed :info :source :: STRING AS tx_from, + instruction :parsed :info :destination :: STRING AS tx_to, + instruction :parsed :info :lamports / pow( + 10, + 9 + ) AS amount, + 'So11111111111111111111111111111111111111112' AS mint, + NULL as source_token_account, + NULL as dest_token_account, + e._inserted_timestamp + FROM + base_transfers_i e + WHERE + instruction :parsed :info :lamports :: STRING IS NOT NULL +) +SELECT + block_id, + block_timestamp, + tx_id, + program_id, + succeeded, + INDEX, + tx_from, + tx_to, + amount, + mint, + source_token_account, + dest_token_account, + _inserted_timestamp +FROM + spl_transfers +UNION +SELECT + block_id, + block_timestamp, + tx_id, + program_id, + succeeded, + INDEX, + tx_from, + tx_to, + amount, + mint, + source_token_account, + dest_token_account, + _inserted_timestamp +FROM + sol_transfers diff --git a/models/silver/silver__transfers2.yml b/models/silver/silver__transfers2.yml new file mode 100644 index 00000000..40020363 --- /dev/null +++ b/models/silver/silver__transfers2.yml @@ -0,0 +1,55 @@ +version: 2 +models: + - name: silver__transfers2 + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - BLOCK_ID + - TX_ID + - INDEX + columns: + - name: BLOCK_TIMESTAMP + description: "{{ doc('block_timestamp') }}" + tests: + - not_null: + where: block_id > 39824213 and _inserted_timestamp::date < current_date + - 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: PROGRAM_ID + description: "{{ doc('program_id') }}" + tests: + - not_null + - name: INDEX + description: "{{ doc('index') }}" + tests: + - not_null + - name: TX_FROM + description: "{{ doc('tx_from') }}" + tests: + - not_null + - name: TX_TO + description: "{{ doc('tx_to') }}" + tests: + - not_null + - name: AMOUNT + description: "{{ doc('amount') }}" + tests: + - not_null + - name: MINT + description: "{{ doc('mint') }}" + tests: + - null_threshold: + threshold_percent: 0.70 + - name: _INSERTED_TIMESTAMP + description: "{{ doc('_inserted_timestamp') }}" + tests: + - not_null diff --git a/models/silver/swaps/silver__swaps_intermediate_generic.sql b/models/silver/swaps/silver__swaps_intermediate_generic.sql new file mode 100644 index 00000000..975c1b34 --- /dev/null +++ b/models/silver/swaps/silver__swaps_intermediate_generic.sql @@ -0,0 +1,473 @@ +{{ 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 ( + --jupiter v2/v3 program_ids + 'JUP2jxvXaqu7NQY1GmNF4m1vodw12LVXYxbFL2uJvfo', + 'JUP3c2Uh3WA4Ng34tw6kPd2G4C5BB21Xo36Je1s32Ph', + -- saber + 'Crt7UoUR6QgrFrN7j8rmSQpUTNWNSitSwWvsWGf1qZ5t', + 'SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ', + --program ids for acct mapping + 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', + 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', + --solrise program id (small program but for completenesss...) + 'SLrSmK5ykEhdLkZH8mEsrZsGtDvzrQLKYSwy7PVKQoj' + ) + ) + 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 ( + -- saber + 'Crt7UoUR6QgrFrN7j8rmSQpUTNWNSitSwWvsWGf1qZ5t', + 'SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ' + ) -- jupiter v2,v3 + OR ( + program_id IN ( + 'JUP2jxvXaqu7NQY1GmNF4m1vodw12LVXYxbFL2uJvfo', + 'JUP3c2Uh3WA4Ng34tw6kPd2G4C5BB21Xo36Je1s32Ph' + ) + AND ARRAY_SIZE( + e.instruction :accounts + ) > 6 + ) + ) + AND inner_instruction_program_ids [0] <> 'DecZY86MU5Gj7kppfUCEmd4LbXXuyZH1yHaP2NTqdiZB' --associated with wrapping of tokens + +{% 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__transfers2') }} + 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 %} +), +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(SPLIT_PART(INDEX :: text, '.', 2), 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 + ) +), +delegates_mappings as ( + 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 + WHERE program_id = 'SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ' + ) d + ON d.tx_id = e.tx_id + WHERE + ( + e.program_id = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' + AND e.event_type = 'approve' + ) +), +account_mappings AS ( + 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 + dm.* + FROM + delegates_mappings dm + INNER JOIN dex_txs dt + ON dm.tx_id = dm.tx_id + AND dt.instruction :accounts [2] :: STRING = dm.associated_account + WHERE + dt.program_id = 'SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ' + UNION + SELECT + e.tx_id, + e.instruction :accounts[3] :: STRING AS associated_account, + e.instruction :accounts[0] :: 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 = 'SLrSmK5ykEhdLkZH8mEsrZsGtDvzrQLKYSwy7PVKQoj' + AND instruction:data::string = 't' +), +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, + 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 + 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_generic.yml b/models/silver/swaps/silver__swaps_intermediate_generic.yml new file mode 100644 index 00000000..12b4501f --- /dev/null +++ b/models/silver/swaps/silver__swaps_intermediate_generic.yml @@ -0,0 +1,131 @@ +version: 2 +models: + - name: silver__swaps_intermediate_generic + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - BLOCK_ID + - TX_ID + - SWAP_INDEX + - compare_model_subset: + name: silver__swaps_intermediate_generic_business_logic_test + compare_model: ref('testing__swaps_intermediate_generic') + 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_generic_tx_excluded_test + excluded_tx_ids: + - 4VroTTqAjpsxYMTgnBzBSJG2P9uB2orenKxiEfvxbTBnAficioUuCijnAYotMmAH4pB6kgziKHvMgHNf7nU8g646 + - 5JHjPkrTy1bWJv6ph8n1Tpk5ABBBuD89NZdyANUpbjdY8Zr2HKUyhJEjSrffQVEfAwYA3d9kVqK84qwuqVSZELp8 + - 5e9ATFzcta5RfXB9tjCZfpE7qV1cBUh5H5ocNrwxSfC4D7KqRXTCRL3om4FTwNprwUmn9VMAUJAKm5qVYaJ8vsq6 + - 3wSxtF5Mqeh5ybZVH1U4nE577pZSrhCr3td8GbJeCfwZfanpP7wrDXMiCUdhd5njhkWW6FKGgEzptDKsY8CW33RA + - 5hgT6wotqHT6c49iwJXexnvnCToteo5npbRStjFveMerx4RtR75azqXWKoaFyEWbXmLcEXR68EWwFgj5BzxjjXuy + - 3PdQf87gUGqRKrTXWzqpuduUVhe2cCfSFbmDbbJWQg4MwmsQu43esBRz3HQPsGZ98a8ZjtcNsxNDsrxhV1LBWNJn + - 4BhhKEKu1z7qXGPaoX1114oQ5Beqa2VWfgBvoW2dzcU6CmpAGPfztJZim2ZeF6MQsjdAAaiyr4ToChr3fa88mJpA + - 66ipdTYD19wCrWabViaw8Tn1KrZTz9eJnAtr1ZhETPn7c4aN2qcpiWLNnzoGNMaVzw65e5giwAsjCa7BffqKQ3aB + - 56E5FyopfrJuviUp39HCbNJp64d553HNx6p2RFEXQtwe9K3ahRWwmw5ikK6epeVYheqsgZfe1td8t6ZP6fQgx3dk + - 5mVtJYZGJMrCnNLSK2TV7b75KtWkcGngp5nwSheEghyT1qtBVQxdRhp8Y98sUwkJ7aPFVxZtvjLb3wJEVGDkyTS1 + - 4WX8oi39gn2dH5jK2AqeNDY93ofuYssmDtMJeyErJzhjvkc4jTcJmDetueQQ9FmcR2UzAxzTvjcPVq7HHQkUoggp + 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 diff --git a/models/silver/swaps/silver__swaps_intermediate_raydium.sql b/models/silver/swaps/silver__swaps_intermediate_raydium.sql new file mode 100644 index 00000000..a0e302d0 --- /dev/null +++ b/models/silver/swaps/silver__swaps_intermediate_raydium.sql @@ -0,0 +1,478 @@ +{{ 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'], +) }} + +WITH base_events AS( + + SELECT + * + FROM + {{ ref('silver__events') }} + WHERE + program_id IN ( + --raydium program_ids + '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8', + '5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h', + '93BgeoLHo5AdNbpqy9bD12dtfxtA5M2fh3rj72bE35Y3', + 'routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS', + --program ids for acct mapping + 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', + 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' + ) + AND block_id > 111442741 -- token balances owner field not guaranteed to be populated before this slot + +{% if is_incremental() %} +AND _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) + FROM + {{ this }} +) +{% else %} + AND block_timestamp :: DATE >= '2021-12-14' +{% endif %} +), +dex_txs AS ( + SELECT + e.*, + signers [0] :: STRING AS swapper, + ARRAY_SIZE( + e.instruction :accounts + ) AS instruction_account_size, + CASE + WHEN program_id IN ( + '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8', + '5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h' + ) THEN e.instruction :accounts [instruction_account_size-3] :: STRING + ELSE NULL + END AS source_token_account, + CASE + WHEN program_id IN ( + '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8', + '5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h' + ) THEN e.instruction :accounts [instruction_account_size-2] :: STRING + ELSE NULL + END AS dest_token_account, + CASE + WHEN program_id IN ( + '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8', + '5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h' + ) THEN e.instruction :accounts [instruction_account_size-1] :: STRING + ELSE NULL + END AS user_owner + 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 = '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8' + AND instruction :accounts [2] :: STRING = '5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1' + AND ARRAY_SIZE( + instruction :accounts + ) >= 17 + AND ( + instruction :accounts [6] :: STRING = '9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin' + OR instruction :accounts [7] :: STRING = '9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin' + ) + ) + OR ( + program_id = '5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h' + AND instruction :accounts [2] :: STRING = '3uaZBfHPfmpAHW7dsimC1SnyR61X4bJqQZKWmRSCXJxv' + AND ARRAY_SIZE( + instruction :accounts + ) >= 17 + AND ( + instruction :accounts [6] :: STRING = '9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin' + OR instruction :accounts [7] :: STRING = '9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin' + ) + ) + OR program_id IN ( + '93BgeoLHo5AdNbpqy9bD12dtfxtA5M2fh3rj72bE35Y3', + 'routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS' + ) + ) + ) + +{% if is_incremental() %} +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__transfers2') }} + tr + INNER JOIN ( + SELECT + DISTINCT tx_id + FROM + dex_txs + ) d + ON d.tx_id = tr.tx_id + +{% if is_incremental() %} +WHERE + _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 + _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) + FROM + {{ this }} + ) +{% else %} +WHERE + block_timestamp :: DATE >= '2021-12-14' +{% endif %} +), +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(SPLIT_PART(INDEX :: text, '.', 2), NULL) AS inner_index, + A.program_id, + A.tx_from, + A.tx_to, + A.amount, + A.mint, + A.succeeded, + A.source_token_account, + A.dest_token_account, + A._inserted_timestamp + FROM + base_transfers AS A + WHERE + A.tx_id IN ( + SELECT + tx_id + FROM + dex_txs + ) +), +raydium_account_mapping AS( + SELECT + tx_id, + ii.value :parsed :info :account :: STRING AS associated_account, + COALESCE( + ii.value :parsed :info :source :: STRING, + ii.value :parsed :info :owner :: STRING + ) AS owner + FROM + dex_txs AS d + LEFT OUTER JOIN TABLE(FLATTEN(inner_instruction :instructions)) ii + WHERE + d.program_id IN ( + '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8', + '5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h', + '93BgeoLHo5AdNbpqy9bD12dtfxtA5M2fh3rj72bE35Y3', + 'routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS' + ) + AND associated_account IS NOT NULL +), +account_mappings AS ( + SELECT + * + FROM + raydium_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, + CASE + WHEN e.program_id IN ( + '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8', + '5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h' + ) + AND s.source_token_account = e.source_token_account THEN e.user_owner + ELSE COALESCE( + m1.owner, + s.tx_from + ) + END AS tx_from, + CASE + WHEN e.program_id IN ( + '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8', + '5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h' + ) + AND s.dest_token_account = e.dest_token_account THEN e.user_owner + ELSE COALESCE( + m2.owner, + s.tx_to + ) + END AS tx_to, + s.amount, + s.mint, + s.succeeded, + s._inserted_timestamp, + CASE + WHEN e.program_id IN ( + '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8', + '5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h' + ) THEN e.user_owner + ELSE e.swapper + END AS swapper, + 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 + WHERE + s.program_id <> '11111111111111111111111111111111' +), +min_inner_index_of_swapper AS( + SELECT + tx_id, + INDEX, + MIN(inner_index) AS min_inner_index_swapper + FROM + swaps_w_destination + 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_w_destination 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 diff --git a/models/silver/swaps/silver__swaps_intermediate_raydium.yml b/models/silver/swaps/silver__swaps_intermediate_raydium.yml new file mode 100644 index 00000000..c834c8ad --- /dev/null +++ b/models/silver/swaps/silver__swaps_intermediate_raydium.yml @@ -0,0 +1,83 @@ +version: 2 +models: + - name: silver__swaps_intermediate_raydium + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - BLOCK_ID + - TX_ID + - SWAP_INDEX + - compare_model_subset: + name: silver__swaps_intermediate_raydium_business_logic_test + compare_model: ref('testing__swaps_intermediate_raydium') + compare_columns: + - tx_id + - succeeded + - swapper + - from_mint + - round(from_amt,8) + - to_mint + - round(to_amt,8) + - swap_index + model_condition: "where tx_id in ('3VMB8QpABTaRiVD2PEz2QNdNYqV5nks9dNhq4WBG4HpTDYU7huq7pkj76uvanaJrACq7kMSuypWjsQAUbuCLXjnu', + '4XMga64PPam74iSFPqnXohswejwtdxL1Dj5azTjBfYwE97PfGcP6JSastTwRFHdnzXTcdyRsMwD7t5ZZdpYzjqJj', + '4bEAGZx3EkCyuh3arFg1k3hx7CgR2L9aFdxGg3ihWvwdB4KQiheF6JiyRCQcT6LpeJovYdajDg9fsJ3Lor8pN3kk', + 'fACqZJ8hmUjLoBX2wzUS2gfwQUmV4HfJbXeQ5QbrZKTs2qdYZVREZxZbTaCy7brZT2Ck7QDqVLDBXVvbrLdYkk6', + 'cFPb9Lq6S45br6RmfXnALPDiRGtZhwZ99PTcJa8a1e4TewEVLUAX5McbBjbk8G6gJuCab2pWZdZh2knB7JjbebQ', + 'RJDZyoLB69PXEJzKwwtrhiXR9wmepV2mnjsVwmdj2dG3y5E7bydM6zdYmam88RBDMsrtSz9STEgkBRatzCdyjoQ', + '5QCTzHRQon1ydSsdCdiAR8to3ECt1FynDcU7yfsCAjLB5zMuhfzb14bwzJ8nqqupbXz6G9vEvpnuAbPHXxeh9sBU', + '2FhZ9SjAJQgWqHPNBBBpz9dsX5JbsZVhmEcdDuSs1WwnLaPstFzZtY6p2cnwQhuutHGgS1rkoAq2ZkFpSTdbwF5X', + '5UjXW6NCAJSUMzL9uU3e41r7KmUEuX9i9RT2QS5YSG6FKf6HUh6iRopxBkFsL9A7Bhx3PR1GZeUL561Y6DNehj52', + 'MtNdTT2uq9hy7woK4mRyPYZ5SNKFoKJY3UNvi4uRiLQJCrQSY7WMV13dLTDCuAWpHZzinNzAXyXRGXjQUYENtvU', + '39nyp3f5rUMSC4oaYnCVtkiwdbwMByKz7esgmRTFKPhoMgW3RprMgyj9jcrAwoAX9UWLNVGqpB9k79c4gAN7ug1q', + '3XEzUVGbpruCZFKcHFsa3yCZAJ4MQ1TTyaHPFi5odqQ3XEpjA5TzUXHuEVSFRoSGiaRSKQpMwGPzw61ZTb9gRfv5')" + - tx_excluded: + name: silver__swaps_intermediate_raydium_tx_excluded_test + excluded_tx_ids: + - 48XpWuQQKmoGGoGgrNE73fVJVz2PwcqeoRPiWunb8jHaxXgqDDZ4JiUPQWkjdCTYy98grJit8MX9y2eNHoaKsjqm + - 3XHSw61M1zr1ogrzrZ6wc6wgjp3sZFDustxcJAfuFd4GcNKRvbdmpWFYnqga3qje6seDCnSHqNEmQ2iP4BVftgMk + 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