mirror of
https://github.com/FlipsideCrypto/solana-models.git
synced 2026-02-06 13:26:46 +00:00
An 2296/intermediate swaps tables 2 (#157)
* create testing data * table w failed and successful txfers * initial model * create transfers2 and testing data * add expected results * testing additions * check-in * remove not-null requirement * add business test cases, simplify, need acct owners * wip * clean tests and update model * update model for edge cases * fix expected test case * check in * logic for unordered swaps * create single model for all dex swaps * check in updates * remove mint actions * general model * remove jup v4 * clean up * update transfers2 * update name * test that specific tx are excluded * initial changes per pr comments * add program_id * Add base_events and combine union * uncomment incremental logic * move block_id filter to base_events * remove flatten, map accounts directly to transfer to/from * filter out non-swap actions and fix join logic * remove raydium logic and rename * remove raydium swap in test * Include TRPY swaps * update table config * add program_id column to yml * add additional test records * updates per PR comments * remove dependency of excluded tx test on csv * remove unnecessary program_id * remove orca dex references * additional inner join logic * query cleanup/formatting * add test cases * add back delegate mapping for saber + test cases * An 2455/intermediate swaps raydium (#161) * Intermediate swaps model for raydium * add test cases, remove unnecessary filter and hook * tweak event filters and join optimizations * revisions per pr comments * update excluded tx tests and remove csv dependency * add token accts * add test cases, round amts to 8 decimals * use associated accts given in swap instruction * handle multisig authorities * add test case Co-authored-by: Desmond Hui <desmond@flipsidecrypto.com> * add udf to get swapper from multi signer txs python udf for getting swapper if multiple signers * use udf for getting multi signer swapper * add more multi signer test cases * add mappings and test cases for solrise initiated swaps Co-authored-by: Desmond Hui <desmond@flipsidecrypto.com>
This commit is contained in:
parent
f7419aafb6
commit
2cc12c6960
94
data/testing__swaps_intermediate_generic.csv
Normal file
94
data/testing__swaps_intermediate_generic.csv
Normal file
@ -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
|
||||
|
16
data/testing__swaps_intermediate_raydium.csv
Normal file
16
data/testing__swaps_intermediate_raydium.csv
Normal file
@ -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
|
||||
|
@ -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 %}
|
||||
|
||||
@ -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 %}
|
||||
14
macros/tests/tx_excluded.sql
Normal file
14
macros/tests/tx_excluded.sql
Normal file
@ -0,0 +1,14 @@
|
||||
{% test tx_excluded(
|
||||
model,
|
||||
excluded_tx_ids
|
||||
) %}
|
||||
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
{{ model }}
|
||||
WHERE
|
||||
tx_id IN(
|
||||
{{ "'" + excluded_tx_ids | join("','") + "'"}}
|
||||
)
|
||||
{% endtest %}
|
||||
313
models/silver/silver__transfers2.sql
Normal file
313
models/silver/silver__transfers2.sql
Normal file
@ -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
|
||||
55
models/silver/silver__transfers2.yml
Normal file
55
models/silver/silver__transfers2.yml
Normal file
@ -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
|
||||
473
models/silver/swaps/silver__swaps_intermediate_generic.sql
Normal file
473
models/silver/swaps/silver__swaps_intermediate_generic.sql
Normal file
@ -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
|
||||
131
models/silver/swaps/silver__swaps_intermediate_generic.yml
Normal file
131
models/silver/swaps/silver__swaps_intermediate_generic.yml
Normal file
@ -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
|
||||
478
models/silver/swaps/silver__swaps_intermediate_raydium.sql
Normal file
478
models/silver/swaps/silver__swaps_intermediate_raydium.sql
Normal file
@ -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
|
||||
83
models/silver/swaps/silver__swaps_intermediate_raydium.yml
Normal file
83
models/silver/swaps/silver__swaps_intermediate_raydium.yml
Normal file
@ -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
|
||||
Loading…
Reference in New Issue
Block a user