mirror of
https://github.com/FlipsideCrypto/solana-models.git
synced 2026-02-06 11:47:08 +00:00
An 4450/add swap protocols (#494)
* add bonk, meteora, phoenix swaps * update desc * add meteora * add test case * remove solana reference * add dooar swaps * remove phoenix; remove solana prefix * add phoenix * phoenix fix * update backfill date * logic for multi swaps w incorrect join * add tests, update logic for multi swap txs * remove db prefix
This commit is contained in:
parent
4af5785a20
commit
a73f9134c1
14
data/testing__swaps_intermediate_bonkswap.csv
Normal file
14
data/testing__swaps_intermediate_bonkswap.csv
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
tx_id,swapper,from_amt,from_mint,to_amt,to_mint,swap_index
|
||||||
|
6nfq85sETizzDw4uuZ7X1S36uNcWUKdvvmtSGJFf7rvM5r8d9XLqFyyE7LLS6uyCkg2ksmgsHcS3umHYMymyeXB,6DBRRXagTDX4yzGSpSZZLUv4LWzSehHWdFxPt4jk8KfT,19000000,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,2.062776725,So11111111111111111111111111111111111111112,1
|
||||||
|
mQxJQ3oPFRsmncvRWwU4ecR4TpsLBF4jdk6HwkHP69kwsPCvFxQxGUiMinGs4iEC5rz7p5ShTnqJ7SeFD6h9v8Z,YUPaMvS8JBJ1qphcXpyxUvfsysGKwFTznsJ6bjcurSV,72176000,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,7.903077732,So11111111111111111111111111111111111111112,1
|
||||||
|
4n9zk2i8qsQVjzgYGPuqJbrUjX92JToVEcTiAnhfExp5VDGs7Lz56ZGySgaxTDMVNQMhXYtMj9E7YcbzJjqBcdyv,4kH5sRStQiJKw5VaKuxaEYMSDnh8pSKwf5W33vz6JbHP,20095000,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,2.193551995,So11111111111111111111111111111111111111112,1
|
||||||
|
3ATCz7Vf2sMNKsqnMDs7hsQdTPzJA2ediwP3RTdcLCGPV1tgGNsaHn2MrEtHvo57zuQhsA1XFz1NBjU8iyPW8C2Z,4kH5sRStQiJKw5VaKuxaEYMSDnh8pSKwf5W33vz6JbHP,3260999.92356,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,34.306508,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1
|
||||||
|
5KzijZM4SmdFBjRx5qQSusr8f17M9mDwyDm1vdhdoa6VF2TmFGNJfLCHCzJRp3aHkheJaDojNF28qx2qWTg1FAKR,CapuXNQoDviLvU1PxFiizLgPNQCxrsag1uMeyk6zLVps,8145100.20245,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,1.143266579,So11111111111111111111111111111111111111112,1
|
||||||
|
5KzijZM4SmdFBjRx5qQSusr8f17M9mDwyDm1vdhdoa6VF2TmFGNJfLCHCzJRp3aHkheJaDojNF28qx2qWTg1FAKR,CapuXNQoDviLvU1PxFiizLgPNQCxrsag1uMeyk6zLVps,1279944.31754,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,17.825619,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2
|
||||||
|
2HemzKoadNauTGqGmjsxnTN1mYm7vfRTjyeM38DYGM7qdGvmMfkFL5VQkHnTJ8giuUD1EV9w9NPQRvRSjSAFZ12A,GGztQqQ6pCPaJQnNpXBgELr5cs3WwDakRbh1iEMzjgSJ,0.052981954,mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So,1673066.26297,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,1
|
||||||
|
2HemzKoadNauTGqGmjsxnTN1mYm7vfRTjyeM38DYGM7qdGvmMfkFL5VQkHnTJ8giuUD1EV9w9NPQRvRSjSAFZ12A,GGztQqQ6pCPaJQnNpXBgELr5cs3WwDakRbh1iEMzjgSJ,1673066.26297,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,0.060935689,So11111111111111111111111111111111111111112,2
|
||||||
|
5ghJVhQyZuQoXLTjznjhmJ3EiGSDtdy1PT6xk7iw5GhukX7F4CmsYtPmh6C5Si8cY31Wuwo1dkX7iCzWgXuvNVgc,2MFoS3MPtvyQ4Wh4M9pdfPjz6UhVoNbFbGJAskCPCj3h,5,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2700400.56329,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,1
|
||||||
|
5ghJVhQyZuQoXLTjznjhmJ3EiGSDtdy1PT6xk7iw5GhukX7F4CmsYtPmh6C5Si8cY31Wuwo1dkX7iCzWgXuvNVgc,2MFoS3MPtvyQ4Wh4M9pdfPjz6UhVoNbFbGJAskCPCj3h,1890280.3943,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,0.075264275,So11111111111111111111111111111111111111112,2
|
||||||
|
5ghJVhQyZuQoXLTjznjhmJ3EiGSDtdy1PT6xk7iw5GhukX7F4CmsYtPmh6C5Si8cY31Wuwo1dkX7iCzWgXuvNVgc,2MFoS3MPtvyQ4Wh4M9pdfPjz6UhVoNbFbGJAskCPCj3h,810120.16899,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,0.029617528,bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1,3
|
||||||
|
6HuXhDg9cc5nkbWmTQYjj7hpAxrJwMW3ZQT21jNgTouabAm3CxBtAdAf9Q21Ffov9kQnADjEmxYLaSZrDFjcbDx,7376pEqjeLxMCJFcUukakevhCxBz18YxWUAqHfRo35v3,5036865.56417,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,0.166144844,So11111111111111111111111111111111111111112,1
|
||||||
|
fgmeRM6JRo9jZk53h4ECQpe5pt2joQK9PpBetFt9pSHpGNBrNjqDhW7Hihivb4n4d6VX2Gkpy3Dzk6wkCTvRjt1,629M6EYnSc3cZ8pTuSFg7bbVy8R1bCW2yoRUcSwR6j73,334187000,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,13.191226035,So11111111111111111111111111111111111111112,1
|
||||||
|
7
data/testing__swaps_intermediate_dooar.csv
Normal file
7
data/testing__swaps_intermediate_dooar.csv
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
tx_id,swapper,from_amt,from_mint,to_amt,to_mint,swap_index
|
||||||
|
31at6mYffEH2eFEFQxFt5vqsJpNpZx8Uofn1R53ABLaLyqAsgrUDQDqxiWSJ5k7JEZk8NF9V4kzT87PTctBHy28G,7GAJstE7XxkopkD2kxZ4Fr2Dq8tLnfRWdYpeEGc159Wr,630.79998877,AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB,7.297702,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1
|
||||||
|
31at6mYffEH2eFEFQxFt5vqsJpNpZx8Uofn1R53ABLaLyqAsgrUDQDqxiWSJ5k7JEZk8NF9V4kzT87PTctBHy28G,7GAJstE7XxkopkD2kxZ4Fr2Dq8tLnfRWdYpeEGc159Wr,7.261195,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.068950166,So11111111111111111111111111111111111111112,2
|
||||||
|
4n6VDefX6cPhJ3pdTpUSqo7FxSDeqeymz7abto5V7KJppBZfhH7KDvZ4m8FCEdkeckkajbjW1KbMq6zqpzYptQk5,BPiunxZKqnVjfyGwxEGDJ8fo2Anc9KZW2w81gpbPRJV3,336.10383,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1253.5036093,7i5KKsX2weiTkry7jA4ZwSuXGhs5eJBEjY8vVxR4pfRx,1
|
||||||
|
3dKk8sbjZ2yocabr8qUaLHsa7bkd4qxnW8gjsqwhTprVfMrPGeCFqmwu2vYFytaE1NViqtiY4ALZjR2we3xnsmP,BgGwn7CJdaiYaxg3vzMrWU2BKd8bzfk1bH1kNXtm75k5,269.253167,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,3.662990159,So11111111111111111111111111111111111111112,1
|
||||||
|
4KvNEeQpzCx9QmsoGt8QNjtBDomYBnGMSNn1GeyWn6qQn2tsavPGEH26jbfoHHHUcesVbogJfXr9ghD6hv9rz6hD,bwwogaBkcPXDAsQ8jiK5L32NqLtwLEfAKjnKf1LKTL2,0.501813453,So11111111111111111111111111111111111111112,36.383661,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1
|
||||||
|
4KvNEeQpzCx9QmsoGt8QNjtBDomYBnGMSNn1GeyWn6qQn2tsavPGEH26jbfoHHHUcesVbogJfXr9ghD6hv9rz6hD,bwwogaBkcPXDAsQ8jiK5L32NqLtwLEfAKjnKf1LKTL2,36.201742,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,117.29260577,7i5KKsX2weiTkry7jA4ZwSuXGhs5eJBEjY8vVxR4pfRx,2
|
||||||
|
12
data/testing__swaps_intermediate_meteora.csv
Normal file
12
data/testing__swaps_intermediate_meteora.csv
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
tx_id,swapper,from_amt,from_mint,to_amt,to_mint,swap_index
|
||||||
|
3DjUBQE4GwTMSFLGMi69TGMiBoNE8FfnryR8BCEmovGVmMz9Jfh9dG3ikLAPuQPWpv12ypS4nYx1Esc4TYUw3s44,BQ72nSv9f3PRyRKCBnHLVrerrv37CYTHm5h3s9VSGQDV,12095.46106,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,0.016580859,DK6PWMyuZ4NMjsm9AWNCTMKrajQYrtfMjMJ3QauX2UH5,1
|
||||||
|
3DjUBQE4GwTMSFLGMi69TGMiBoNE8FfnryR8BCEmovGVmMz9Jfh9dG3ikLAPuQPWpv12ypS4nYx1Esc4TYUw3s44,BQ72nSv9f3PRyRKCBnHLVrerrv37CYTHm5h3s9VSGQDV,0.016580859,DK6PWMyuZ4NMjsm9AWNCTMKrajQYrtfMjMJ3QauX2UH5,1744.06551,WENWENvqqNya429ubCdR81ZmD69brwQaaBYY6p3LCpk,2
|
||||||
|
3DjUBQE4GwTMSFLGMi69TGMiBoNE8FfnryR8BCEmovGVmMz9Jfh9dG3ikLAPuQPWpv12ypS4nYx1Esc4TYUw3s44,BQ72nSv9f3PRyRKCBnHLVrerrv37CYTHm5h3s9VSGQDV,1744.06551,WENWENvqqNya429ubCdR81ZmD69brwQaaBYY6p3LCpk,0.001507191,So11111111111111111111111111111111111111112,3
|
||||||
|
3RCs1zgEKNemq1syYM3ZZKHkckZgBbkgtKVq41W7j2yh5Ce4pVgHLU6QSiZX3nrijZ4S2yhYDb3K61seLR4c9FYu,E8HBNczbRicd9dhtqFAXScVh2WD8N6uLJFAf82KEtm4L,1,So11111111111111111111111111111111111111112,0.918152768,J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn,1
|
||||||
|
iBuwG5mU4LKMrN6iNVzGZSC7vXqvAfRQ98YJeKXPoDbM2oi7dvV8ZMnwgv55Db6JT4iokQ6JbVpN7jHnKkFtJqC,5nM1CTQwKXFZo5yJYC8J1pgj32JW6Fx8DpQAtPZ8aiLw,6,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.052992004,So11111111111111111111111111111111111111112,1
|
||||||
|
NfvsjHzJx5s5JWDK7pJaWUv7hXJGdWUYwqaoRVLxQ2d5q3Jyrs2uft9FUyeNFVyxVSVZFPdsTv45dpgdog9RyzQ,9nnLbotNTcUhvbrsA6Mdkx45Sm82G35zo28AqUvjExn8,0.01658499,rndrizKT3MK1iimdxRdWabcF7Zg7AR5T4nud4EkHBof,0.099306,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1
|
||||||
|
2eV5PUm4WL7X9T1X4nSbBmAGDLTx9pUiygK34ngMSyR9QwQUS8ZpnzGKTCbuJHeVGYNHjHBGtPh4fLYxkBLGVJeB,BQ72nSv9f3PRyRKCBnHLVrerrv37CYTHm5h3s9VSGQDV,40,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,40.176596896,9TVjnzpF3X8DHsfVqYWoCGphJxtGYh1PDCFN5QmsHW5t,1
|
||||||
|
2eV5PUm4WL7X9T1X4nSbBmAGDLTx9pUiygK34ngMSyR9QwQUS8ZpnzGKTCbuJHeVGYNHjHBGtPh4fLYxkBLGVJeB,BQ72nSv9f3PRyRKCBnHLVrerrv37CYTHm5h3s9VSGQDV,40.176596896,9TVjnzpF3X8DHsfVqYWoCGphJxtGYh1PDCFN5QmsHW5t,0.838353755,So11111111111111111111111111111111111111112,2
|
||||||
|
2eV5PUm4WL7X9T1X4nSbBmAGDLTx9pUiygK34ngMSyR9QwQUS8ZpnzGKTCbuJHeVGYNHjHBGtPh4fLYxkBLGVJeB,BQ72nSv9f3PRyRKCBnHLVrerrv37CYTHm5h3s9VSGQDV,10,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,0.00026839,3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh,3
|
||||||
|
35QkSCVWRNFaqFM8DZrDWKWsBdDTrHVMmskd3H9D3pcQstdYsWqZiXVhMpkaCFrBQTi8XZaWgNZaWnQZzwPpZ1dv,6U91aKa8pmMxkJwBCfPTmUEfZi6dHe7DcFq2ALvB2tbB,5.226666,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,2993956.3575,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,1
|
||||||
|
35QkSCVWRNFaqFM8DZrDWKWsBdDTrHVMmskd3H9D3pcQstdYsWqZiXVhMpkaCFrBQTi8XZaWgNZaWnQZzwPpZ1dv,6U91aKa8pmMxkJwBCfPTmUEfZi6dHe7DcFq2ALvB2tbB,0.027582317,So11111111111111111111111111111111111111112,747886.05184,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,2
|
||||||
|
10
data/testing__swaps_intermediate_phoenix.csv
Normal file
10
data/testing__swaps_intermediate_phoenix.csv
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
tx_id,swapper,from_amt,from_mint,to_amt,to_mint,swap_index
|
||||||
|
3fp9QzP6EMn9cUDgCRmHACSxmDhh3zrMebYKSm8Auq3xyBck7X6nRSrrVDThDhM1wRBaVidwh4BCDLn86Bve3thL,BPiunxZKqnVjfyGwxEGDJ8fo2Anc9KZW2w81gpbPRJV3,0.715816712,So11111111111111111111111111111111111111112,5954000,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,1
|
||||||
|
671GWKC1AGyvrAThDzM9tq9UqVW8W2WdULAikkLaaTSZVYEmzLEhXutdDjZTenLp5oAtc4G7f4bztZ978rN1Zz1d,bobCPc5nqVoX7r8gKzCMPLrKjFidjnSCrAdcYGCH2Ye,399.966167,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,3.421,So11111111111111111111111111111111111111112,1
|
||||||
|
3FgxCNCndXDSx95mrsBwcfsHSM9fDzWSq2bJqN74ym5MTgF2VrLJRn4w5UfdKpeKNA3mzCmm7KJfy7wuDAo4y7Ko,FreyaXYaCwVy86BdNECd7BXnqEvFUbt3p6d2B5eS5zDv,1.494221215,So11111111111111111111111111111111111111112,13137000,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,2
|
||||||
|
3FgxCNCndXDSx95mrsBwcfsHSM9fDzWSq2bJqN74ym5MTgF2VrLJRn4w5UfdKpeKNA3mzCmm7KJfy7wuDAo4y7Ko,FreyaXYaCwVy86BdNECd7BXnqEvFUbt3p6d2B5eS5zDv,169.118343,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1.494,So11111111111111111111111111111111111111112,1
|
||||||
|
21qdi1d8vYyMp3AcJmPdKBi1VsEoaBn4qhB1WJhzRR9N3qvtXRkENh5caaBGDaeUVD68CUw72bD2neCQA7dmgUuS,ao31QJtoqLEynyqrZbwkUTGC8mh8fU55RtiUk2pzK8R,142.767,So11111111111111111111111111111111111111112,2775.994087,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,1
|
||||||
|
21qdi1d8vYyMp3AcJmPdKBi1VsEoaBn4qhB1WJhzRR9N3qvtXRkENh5caaBGDaeUVD68CUw72bD2neCQA7dmgUuS,ao31QJtoqLEynyqrZbwkUTGC8mh8fU55RtiUk2pzK8R,135.1432,J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn,142.766958204,So11111111111111111111111111111111111111112,2
|
||||||
|
21qdi1d8vYyMp3AcJmPdKBi1VsEoaBn4qhB1WJhzRR9N3qvtXRkENh5caaBGDaeUVD68CUw72bD2neCQA7dmgUuS,ao31QJtoqLEynyqrZbwkUTGC8mh8fU55RtiUk2pzK8R,142.727107646,So11111111111111111111111111111111111111112,135.1432,J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn,3
|
||||||
|
3EweEGRQkdQ4e5sRRcU5V9Jz2E9sMHzDrbmSD13C2wLQJkANJEZkk9EHJqpUSKUSWCAnY5nFnLgXUqJF5ham6ARk,2SLowUE6xmrddRd4VeJ2i39ybekDg22BRcwsBR3vpwAG,10.188376343,So11111111111111111111111111111111111111112,271971000,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,1
|
||||||
|
3EweEGRQkdQ4e5sRRcU5V9Jz2E9sMHzDrbmSD13C2wLQJkANJEZkk9EHJqpUSKUSWCAnY5nFnLgXUqJF5ham6ARk,2SLowUE6xmrddRd4VeJ2i39ybekDg22BRcwsBR3vpwAG,1.271997083,So11111111111111111111111111111111111111112,33955000,DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263,2
|
||||||
|
@ -106,3 +106,96 @@ FROM
|
|||||||
LEFT OUTER JOIN {{ ref('core__dim_labels') }}
|
LEFT OUTER JOIN {{ ref('core__dim_labels') }}
|
||||||
l
|
l
|
||||||
ON s.program_id = l.address
|
ON s.program_id = l.address
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
block_timestamp,
|
||||||
|
block_id,
|
||||||
|
tx_id,
|
||||||
|
succeeded,
|
||||||
|
swapper,
|
||||||
|
from_amt AS swap_from_amount,
|
||||||
|
from_mint AS swap_from_mint,
|
||||||
|
to_amt AS swap_to_amount,
|
||||||
|
to_mint AS swap_to_mint,
|
||||||
|
program_id,
|
||||||
|
l.address_name AS swap_program,
|
||||||
|
concat_ws('-',tx_id,swap_index) as _log_id,
|
||||||
|
swaps_intermediate_bonkswap_id as fact_swaps_id,
|
||||||
|
s.inserted_timestamp,
|
||||||
|
s.modified_timestamp
|
||||||
|
FROM
|
||||||
|
{{ ref('silver__swaps_intermediate_bonkswap') }}
|
||||||
|
s
|
||||||
|
LEFT OUTER JOIN {{ ref('core__dim_labels') }}
|
||||||
|
l
|
||||||
|
ON s.program_id = l.address
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
block_timestamp,
|
||||||
|
block_id,
|
||||||
|
tx_id,
|
||||||
|
succeeded,
|
||||||
|
swapper,
|
||||||
|
from_amt AS swap_from_amount,
|
||||||
|
from_mint AS swap_from_mint,
|
||||||
|
to_amt AS swap_to_amount,
|
||||||
|
to_mint AS swap_to_mint,
|
||||||
|
program_id,
|
||||||
|
l.address_name AS swap_program,
|
||||||
|
concat_ws('-',tx_id,swap_index) as _log_id,
|
||||||
|
swaps_intermediate_meteora_id as fact_swaps_id,
|
||||||
|
s.inserted_timestamp,
|
||||||
|
s.modified_timestamp
|
||||||
|
FROM
|
||||||
|
{{ ref('silver__swaps_intermediate_meteora') }}
|
||||||
|
s
|
||||||
|
LEFT OUTER JOIN {{ ref('core__dim_labels') }}
|
||||||
|
l
|
||||||
|
ON s.program_id = l.address
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
block_timestamp,
|
||||||
|
block_id,
|
||||||
|
tx_id,
|
||||||
|
succeeded,
|
||||||
|
swapper,
|
||||||
|
from_amt AS swap_from_amount,
|
||||||
|
from_mint AS swap_from_mint,
|
||||||
|
to_amt AS swap_to_amount,
|
||||||
|
to_mint AS swap_to_mint,
|
||||||
|
program_id,
|
||||||
|
l.address_name AS swap_program,
|
||||||
|
concat_ws('-',tx_id,swap_index) as _log_id,
|
||||||
|
swaps_intermediate_dooar_id as fact_swaps_id,
|
||||||
|
s.inserted_timestamp,
|
||||||
|
s.modified_timestamp
|
||||||
|
FROM
|
||||||
|
{{ ref('silver__swaps_intermediate_dooar') }}
|
||||||
|
s
|
||||||
|
LEFT OUTER JOIN {{ ref('core__dim_labels') }}
|
||||||
|
l
|
||||||
|
ON s.program_id = l.address
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
block_timestamp,
|
||||||
|
block_id,
|
||||||
|
tx_id,
|
||||||
|
succeeded,
|
||||||
|
swapper,
|
||||||
|
from_amt AS swap_from_amount,
|
||||||
|
from_mint AS swap_from_mint,
|
||||||
|
to_amt AS swap_to_amount,
|
||||||
|
to_mint AS swap_to_mint,
|
||||||
|
program_id,
|
||||||
|
l.address_name AS swap_program,
|
||||||
|
concat_ws('-',tx_id,swap_index) as _log_id,
|
||||||
|
swaps_intermediate_phoenix_id as fact_swaps_id,
|
||||||
|
s.inserted_timestamp,
|
||||||
|
s.modified_timestamp
|
||||||
|
FROM
|
||||||
|
{{ ref('silver__swaps_intermediate_phoenix') }}
|
||||||
|
s
|
||||||
|
LEFT OUTER JOIN {{ ref('core__dim_labels') }}
|
||||||
|
l
|
||||||
|
ON s.program_id = l.address
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
version: 2
|
version: 2
|
||||||
models:
|
models:
|
||||||
- name: defi__fact_swaps
|
- name: defi__fact_swaps
|
||||||
description: This table contains swaps performed on Jupiter, Orca, Raydium, and Saber dexes. Intermediate swaps are aggregated over the DEX programs, so the values showcase the final mint/amount swap values. Ie. a swap on Jupiter that swaps SOL->USDC->mSOL->ETH would show the initial amount in and the final amount out of SOL->ETH.
|
description: This table contains swaps performed on Jupiter, Orca, Raydium, Saber, Bonkswap, Dooar, Phoenix and Meteora swap programs. Intermediate swaps are aggregated over the DEX programs, so the values showcase the final mint/amount swap values. Ie. a swap on Jupiter that swaps SOL->USDC->mSOL->ETH would show the initial amount in and the final amount out of SOL->ETH.
|
||||||
columns:
|
columns:
|
||||||
- name: BLOCK_TIMESTAMP
|
- name: BLOCK_TIMESTAMP
|
||||||
description: "{{ doc('block_timestamp') }}"
|
description: "{{ doc('block_timestamp') }}"
|
||||||
|
|||||||
185
models/silver/swaps/silver__swaps_intermediate_bonkswap.sql
Normal file
185
models/silver/swaps/silver__swaps_intermediate_bonkswap.sql
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
{{ config(
|
||||||
|
materialized = 'incremental',
|
||||||
|
unique_key = ['swaps_intermediate_bonkswap_id'],
|
||||||
|
incremental_predicates = ['DBT_INTERNAL_DEST.block_timestamp::date >= LEAST(current_date-7,(select min(block_timestamp)::date from ' ~ generate_tmp_view_name(this) ~ '))'],
|
||||||
|
merge_exclude_columns = ["inserted_timestamp"],
|
||||||
|
cluster_by = ['block_timestamp::DATE','_inserted_timestamp::DATE'],
|
||||||
|
tags = ['scheduled_non_core'],
|
||||||
|
) }}
|
||||||
|
|
||||||
|
WITH base AS (
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM
|
||||||
|
{{ ref('silver__decoded_instructions_combined') }}
|
||||||
|
WHERE
|
||||||
|
program_id = 'BSwp6bEBihVLdqJRKGgzjcGLHkcTuzmSo1TQkHepzH8p'
|
||||||
|
AND event_type = 'swap'
|
||||||
|
|
||||||
|
{% if is_incremental() %}
|
||||||
|
AND _inserted_timestamp >= (
|
||||||
|
SELECT
|
||||||
|
MAX(_inserted_timestamp) - INTERVAL '1 hour'
|
||||||
|
FROM
|
||||||
|
{{ this }}
|
||||||
|
)
|
||||||
|
{% else %}
|
||||||
|
AND block_timestamp :: DATE >= '2023-04-12'
|
||||||
|
{% endif %}
|
||||||
|
),
|
||||||
|
decoded AS (
|
||||||
|
SELECT
|
||||||
|
block_timestamp,
|
||||||
|
block_id,
|
||||||
|
tx_id,
|
||||||
|
INDEX,
|
||||||
|
inner_index,
|
||||||
|
decoded_instruction :args :xToY :: BOOLEAN AS xToY,
|
||||||
|
COALESCE(LEAD(inner_index) over (PARTITION BY tx_id, INDEX
|
||||||
|
ORDER BY
|
||||||
|
inner_index) -1, 999999) AS inner_index_end,
|
||||||
|
program_id,
|
||||||
|
silver.udf_get_account_pubkey_by_name(
|
||||||
|
'swapper',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
) AS swapper,
|
||||||
|
CASE
|
||||||
|
WHEN xToY THEN silver.udf_get_account_pubkey_by_name(
|
||||||
|
'swapperXAccount',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
ELSE silver.udf_get_account_pubkey_by_name(
|
||||||
|
'swapperYAccount',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
END AS source_token_account,
|
||||||
|
silver.udf_get_account_pubkey_by_name(
|
||||||
|
'tokenX',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
) AS source_mint,
|
||||||
|
silver.udf_get_account_pubkey_by_name(
|
||||||
|
'tokenY',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
) AS destination_mint,
|
||||||
|
CASE
|
||||||
|
WHEN xToY THEN silver.udf_get_account_pubkey_by_name(
|
||||||
|
'swapperYAccount',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
ELSE silver.udf_get_account_pubkey_by_name(
|
||||||
|
'swapperXAccount',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
END AS destination_token_account,
|
||||||
|
CASE
|
||||||
|
WHEN xToY THEN silver.udf_get_account_pubkey_by_name(
|
||||||
|
'poolYAccount',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
ELSE silver.udf_get_account_pubkey_by_name(
|
||||||
|
'poolXAccount',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
END AS program_destination_token_account,
|
||||||
|
CASE
|
||||||
|
WHEN xToY THEN silver.udf_get_account_pubkey_by_name(
|
||||||
|
'poolXAccount',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
ELSE silver.udf_get_account_pubkey_by_name(
|
||||||
|
'poolYAccount',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
END AS program_source_token_account,
|
||||||
|
_inserted_timestamp
|
||||||
|
FROM
|
||||||
|
base
|
||||||
|
),
|
||||||
|
transfers AS (
|
||||||
|
SELECT
|
||||||
|
A.*,
|
||||||
|
COALESCE(SPLIT_PART(INDEX :: text, '.', 1) :: INT, INDEX :: INT) AS index_1,
|
||||||
|
NULLIF(SPLIT_PART(INDEX :: text, '.', 2), '') :: INT AS inner_index_1
|
||||||
|
FROM
|
||||||
|
{{ ref('silver__transfers') }} A
|
||||||
|
INNER JOIN (
|
||||||
|
SELECT
|
||||||
|
DISTINCT tx_id
|
||||||
|
FROM
|
||||||
|
decoded
|
||||||
|
) d
|
||||||
|
ON d.tx_id = A.tx_id
|
||||||
|
WHERE
|
||||||
|
A.succeeded
|
||||||
|
|
||||||
|
{% if is_incremental() %}
|
||||||
|
AND A._inserted_timestamp >= (
|
||||||
|
SELECT
|
||||||
|
MAX(_inserted_timestamp) - INTERVAL '1 day'
|
||||||
|
FROM
|
||||||
|
{{ this }}
|
||||||
|
)
|
||||||
|
{% else %}
|
||||||
|
AND A.block_timestamp :: DATE >= '2023-04-12'
|
||||||
|
{% endif %}
|
||||||
|
),
|
||||||
|
pre_final AS (
|
||||||
|
SELECT
|
||||||
|
A.block_id,
|
||||||
|
A.block_timestamp,
|
||||||
|
A.program_id,
|
||||||
|
A.tx_id,
|
||||||
|
A.index,
|
||||||
|
A.inner_index,
|
||||||
|
A.inner_index_end,
|
||||||
|
C.succeeded,
|
||||||
|
A.swapper,
|
||||||
|
b.amount AS from_amt,
|
||||||
|
b.mint AS from_mint,
|
||||||
|
C.amount AS to_amt,
|
||||||
|
C.mint AS to_mint,
|
||||||
|
A._inserted_timestamp
|
||||||
|
FROM
|
||||||
|
decoded A
|
||||||
|
INNER JOIN transfers b
|
||||||
|
ON A.tx_id = b.tx_id
|
||||||
|
AND A.source_token_account = b.source_token_account
|
||||||
|
AND A.program_source_token_account = b.dest_token_account
|
||||||
|
AND A.index = b.index_1
|
||||||
|
AND ((b.inner_index_1 BETWEEN A.inner_index AND A.inner_index_end) or a.inner_index is null)
|
||||||
|
INNER JOIN transfers C
|
||||||
|
ON A.tx_id = C.tx_id
|
||||||
|
AND A.destination_token_account = C.dest_token_account
|
||||||
|
AND A.program_destination_token_account = C.source_token_account
|
||||||
|
AND A.index = C.index_1
|
||||||
|
AND ((C.inner_index_1 BETWEEN A.inner_index AND A.inner_index_end) or a.inner_index is null)
|
||||||
|
AND C.amount <> 0
|
||||||
|
qualify(ROW_NUMBER() over (PARTITION BY A.tx_id, A.index, A.inner_INDEX
|
||||||
|
ORDER BY
|
||||||
|
inner_index)) = 1
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
block_id,
|
||||||
|
block_timestamp,
|
||||||
|
program_id,
|
||||||
|
tx_id,
|
||||||
|
ROW_NUMBER() over (
|
||||||
|
PARTITION BY tx_id
|
||||||
|
ORDER BY
|
||||||
|
INDEX,
|
||||||
|
inner_index
|
||||||
|
) AS swap_index,
|
||||||
|
succeeded,
|
||||||
|
swapper,
|
||||||
|
from_amt,
|
||||||
|
from_mint,
|
||||||
|
to_amt,
|
||||||
|
to_mint,
|
||||||
|
_inserted_timestamp,
|
||||||
|
{{ dbt_utils.generate_surrogate_key(['tx_id','swap_index','program_id']) }} AS swaps_intermediate_bonkswap_id,
|
||||||
|
SYSDATE() AS inserted_timestamp,
|
||||||
|
SYSDATE() AS modified_timestamp,
|
||||||
|
'{{ invocation_id }}' AS invocation_id
|
||||||
|
FROM
|
||||||
|
pre_final
|
||||||
83
models/silver/swaps/silver__swaps_intermediate_bonkswap.yml
Normal file
83
models/silver/swaps/silver__swaps_intermediate_bonkswap.yml
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
version: 2
|
||||||
|
models:
|
||||||
|
- name: silver__swaps_intermediate_bonkswap
|
||||||
|
tests:
|
||||||
|
- dbt_utils.unique_combination_of_columns:
|
||||||
|
combination_of_columns:
|
||||||
|
- TX_ID
|
||||||
|
- SWAP_INDEX
|
||||||
|
- PROGRAM_ID
|
||||||
|
where: block_timestamp::date > current_date - 30
|
||||||
|
- compare_model_subset:
|
||||||
|
name: silver__swaps_intermediate_bonkswap_business_logic_test
|
||||||
|
compare_model: ref('testing__swaps_intermediate_bonkswap')
|
||||||
|
compare_columns:
|
||||||
|
- tx_id
|
||||||
|
- swapper
|
||||||
|
- round(from_amt,8)
|
||||||
|
- from_mint
|
||||||
|
- round(to_amt,8)
|
||||||
|
- to_mint
|
||||||
|
- swap_index
|
||||||
|
model_condition: "where tx_id in ('6nfq85sETizzDw4uuZ7X1S36uNcWUKdvvmtSGJFf7rvM5r8d9XLqFyyE7LLS6uyCkg2ksmgsHcS3umHYMymyeXB',
|
||||||
|
'mQxJQ3oPFRsmncvRWwU4ecR4TpsLBF4jdk6HwkHP69kwsPCvFxQxGUiMinGs4iEC5rz7p5ShTnqJ7SeFD6h9v8Z',
|
||||||
|
'4n9zk2i8qsQVjzgYGPuqJbrUjX92JToVEcTiAnhfExp5VDGs7Lz56ZGySgaxTDMVNQMhXYtMj9E7YcbzJjqBcdyv',
|
||||||
|
'3ATCz7Vf2sMNKsqnMDs7hsQdTPzJA2ediwP3RTdcLCGPV1tgGNsaHn2MrEtHvo57zuQhsA1XFz1NBjU8iyPW8C2Z',
|
||||||
|
'5KzijZM4SmdFBjRx5qQSusr8f17M9mDwyDm1vdhdoa6VF2TmFGNJfLCHCzJRp3aHkheJaDojNF28qx2qWTg1FAKR',
|
||||||
|
'2HemzKoadNauTGqGmjsxnTN1mYm7vfRTjyeM38DYGM7qdGvmMfkFL5VQkHnTJ8giuUD1EV9w9NPQRvRSjSAFZ12A',
|
||||||
|
'5ghJVhQyZuQoXLTjznjhmJ3EiGSDtdy1PT6xk7iw5GhukX7F4CmsYtPmh6C5Si8cY31Wuwo1dkX7iCzWgXuvNVgc',
|
||||||
|
'6HuXhDg9cc5nkbWmTQYjj7hpAxrJwMW3ZQT21jNgTouabAm3CxBtAdAf9Q21Ffov9kQnADjEmxYLaSZrDFjcbDx',
|
||||||
|
'fgmeRM6JRo9jZk53h4ECQpe5pt2joQK9PpBetFt9pSHpGNBrNjqDhW7Hihivb4n4d6VX2Gkpy3Dzk6wkCTvRjt1')"
|
||||||
|
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') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: SWAPPER
|
||||||
|
description: "{{ doc('swaps_swapper') }}"
|
||||||
|
tests:
|
||||||
|
- not_null:
|
||||||
|
where: succeeded = TRUE
|
||||||
|
- name: FROM_AMT
|
||||||
|
description: "{{ doc('swaps_from_amt') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: FROM_MINT
|
||||||
|
description: "{{ doc('swaps_from_mint') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: TO_AMT
|
||||||
|
description: "{{ doc('swaps_to_amt') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: TO_MINT
|
||||||
|
description: "{{ doc('swaps_to_mint') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: SWAP_INDEX
|
||||||
|
description: "{{ doc('swaps_swap_index') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: _INSERTED_TIMESTAMP
|
||||||
|
description: "{{ doc('_inserted_timestamp') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
139
models/silver/swaps/silver__swaps_intermediate_dooar.sql
Normal file
139
models/silver/swaps/silver__swaps_intermediate_dooar.sql
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
{{ config(
|
||||||
|
materialized = 'incremental',
|
||||||
|
unique_key = ['swaps_intermediate_dooar_id'],
|
||||||
|
incremental_predicates = ['DBT_INTERNAL_DEST.block_timestamp::date >= LEAST(current_date-7,(select min(block_timestamp)::date from ' ~ generate_tmp_view_name(this) ~ '))'],
|
||||||
|
merge_exclude_columns = ["inserted_timestamp"],
|
||||||
|
cluster_by = ['block_timestamp::DATE','_inserted_timestamp::DATE'],
|
||||||
|
tags = ['scheduled_non_core'],
|
||||||
|
) }}
|
||||||
|
|
||||||
|
WITH base AS (
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM
|
||||||
|
{{ ref('silver__decoded_instructions_combined') }}
|
||||||
|
WHERE
|
||||||
|
program_id = 'Dooar9JkhdZ7J3LHN3A7YCuoGRUggXhQaG4kijfLGU2j'
|
||||||
|
AND
|
||||||
|
event_type = 'swap'
|
||||||
|
{% if is_incremental() %}
|
||||||
|
AND _inserted_timestamp >= (
|
||||||
|
SELECT
|
||||||
|
MAX(_inserted_timestamp) - INTERVAL '1 hour'
|
||||||
|
FROM
|
||||||
|
{{ this }}
|
||||||
|
)
|
||||||
|
{% else %}
|
||||||
|
AND block_timestamp :: DATE >= '2022-06-09'
|
||||||
|
{% endif %}
|
||||||
|
),
|
||||||
|
decoded AS (
|
||||||
|
SELECT
|
||||||
|
block_timestamp,
|
||||||
|
block_id,
|
||||||
|
tx_id,
|
||||||
|
index,
|
||||||
|
inner_index,
|
||||||
|
COALESCE(LEAD(inner_index) over (PARTITION BY tx_id, INDEX
|
||||||
|
ORDER BY
|
||||||
|
inner_index) -1, 999999) AS inner_index_end,
|
||||||
|
program_id,
|
||||||
|
signers[0]::string as swapper,
|
||||||
|
silver.udf_get_account_pubkey_by_name('userSource', decoded_instruction:accounts) as source_token_account,
|
||||||
|
null as source_mint,
|
||||||
|
null as destination_mint,
|
||||||
|
silver.udf_get_account_pubkey_by_name('userDestination', decoded_instruction:accounts) as destination_token_account,
|
||||||
|
silver.udf_get_account_pubkey_by_name('poolDestination', decoded_instruction:accounts) as program_destination_token_account,
|
||||||
|
silver.udf_get_account_pubkey_by_name('poolSource', decoded_instruction:accounts) as program_source_token_account,
|
||||||
|
_inserted_timestamp
|
||||||
|
FROM
|
||||||
|
base
|
||||||
|
),
|
||||||
|
transfers AS (
|
||||||
|
SELECT
|
||||||
|
A.*,
|
||||||
|
COALESCE(SPLIT_PART(INDEX :: text, '.', 1) :: INT, INDEX :: INT) AS index_1,
|
||||||
|
NULLIF(SPLIT_PART(INDEX :: text, '.', 2), '') :: INT AS inner_index_1
|
||||||
|
FROM
|
||||||
|
{{ ref('silver__transfers') }} A
|
||||||
|
INNER JOIN (
|
||||||
|
SELECT
|
||||||
|
DISTINCT tx_id
|
||||||
|
FROM
|
||||||
|
decoded
|
||||||
|
) d
|
||||||
|
ON d.tx_id = A.tx_id
|
||||||
|
WHERE
|
||||||
|
A.succeeded
|
||||||
|
|
||||||
|
{% if is_incremental() %}
|
||||||
|
AND A._inserted_timestamp >= (
|
||||||
|
SELECT
|
||||||
|
MAX(_inserted_timestamp) - INTERVAL '1 day'
|
||||||
|
FROM
|
||||||
|
{{ this }}
|
||||||
|
)
|
||||||
|
{% else %}
|
||||||
|
AND A.block_timestamp :: DATE >= '2022-06-09'
|
||||||
|
{% endif %}
|
||||||
|
),
|
||||||
|
|
||||||
|
pre_final as (
|
||||||
|
SELECT
|
||||||
|
A.block_id,
|
||||||
|
A.block_timestamp,
|
||||||
|
A.program_id,
|
||||||
|
A.tx_id,
|
||||||
|
A.index,
|
||||||
|
A.inner_index,
|
||||||
|
A.inner_index_end,
|
||||||
|
C.succeeded,
|
||||||
|
A.swapper,
|
||||||
|
b.amount AS from_amt,
|
||||||
|
b.mint AS from_mint,
|
||||||
|
C.amount AS to_amt,
|
||||||
|
C.mint AS to_mint,
|
||||||
|
A._inserted_timestamp
|
||||||
|
FROM
|
||||||
|
decoded A
|
||||||
|
INNER JOIN transfers b
|
||||||
|
ON A.tx_id = b.tx_id
|
||||||
|
AND A.source_token_account = b.source_token_account
|
||||||
|
AND A.program_source_token_account = b.dest_token_account
|
||||||
|
AND A.index = b.index_1
|
||||||
|
AND ((b.inner_index_1 BETWEEN A.inner_index AND A.inner_index_end) or a.inner_index is null)
|
||||||
|
INNER JOIN transfers C
|
||||||
|
ON A.tx_id = C.tx_id
|
||||||
|
AND A.destination_token_account = C.dest_token_account
|
||||||
|
AND A.program_destination_token_account = C.source_token_account
|
||||||
|
AND A.index = C.index_1
|
||||||
|
AND ((c.inner_index_1 BETWEEN A.inner_index AND A.inner_index_end) or a.inner_index is null)
|
||||||
|
qualify(ROW_NUMBER() over (PARTITION BY A.tx_id, A.index, A.inner_INDEX ORDER BY inner_index)) = 1
|
||||||
|
)
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
block_id,
|
||||||
|
block_timestamp,
|
||||||
|
program_id,
|
||||||
|
tx_id,
|
||||||
|
ROW_NUMBER() over (
|
||||||
|
PARTITION BY tx_id
|
||||||
|
ORDER BY
|
||||||
|
INDEX,
|
||||||
|
inner_index
|
||||||
|
) AS swap_index,
|
||||||
|
succeeded,
|
||||||
|
swapper,
|
||||||
|
from_amt,
|
||||||
|
from_mint,
|
||||||
|
to_amt,
|
||||||
|
to_mint,
|
||||||
|
_inserted_timestamp,
|
||||||
|
{{ dbt_utils.generate_surrogate_key(['tx_id','swap_index','program_id']) }} AS swaps_intermediate_dooar_id,
|
||||||
|
SYSDATE() AS inserted_timestamp,
|
||||||
|
SYSDATE() AS modified_timestamp,
|
||||||
|
'{{ invocation_id }}' AS invocation_id
|
||||||
|
FROM
|
||||||
|
pre_final
|
||||||
|
|
||||||
78
models/silver/swaps/silver__swaps_intermediate_dooar.yml
Normal file
78
models/silver/swaps/silver__swaps_intermediate_dooar.yml
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
version: 2
|
||||||
|
models:
|
||||||
|
- name: silver__swaps_intermediate_dooar
|
||||||
|
tests:
|
||||||
|
- dbt_utils.unique_combination_of_columns:
|
||||||
|
combination_of_columns:
|
||||||
|
- TX_ID
|
||||||
|
- SWAP_INDEX
|
||||||
|
- PROGRAM_ID
|
||||||
|
where: block_timestamp::date > current_date - 30
|
||||||
|
- compare_model_subset:
|
||||||
|
name: silver__swaps_intermediate_dooar_business_logic_test
|
||||||
|
compare_model: ref('testing__swaps_intermediate_dooar')
|
||||||
|
compare_columns:
|
||||||
|
- tx_id
|
||||||
|
- swapper
|
||||||
|
- round(from_amt,8)
|
||||||
|
- from_mint
|
||||||
|
- round(to_amt,8)
|
||||||
|
- to_mint
|
||||||
|
- swap_index
|
||||||
|
model_condition: "where tx_id in ('31at6mYffEH2eFEFQxFt5vqsJpNpZx8Uofn1R53ABLaLyqAsgrUDQDqxiWSJ5k7JEZk8NF9V4kzT87PTctBHy28G',
|
||||||
|
'4n6VDefX6cPhJ3pdTpUSqo7FxSDeqeymz7abto5V7KJppBZfhH7KDvZ4m8FCEdkeckkajbjW1KbMq6zqpzYptQk5',
|
||||||
|
'4KvNEeQpzCx9QmsoGt8QNjtBDomYBnGMSNn1GeyWn6qQn2tsavPGEH26jbfoHHHUcesVbogJfXr9ghD6hv9rz6hD',
|
||||||
|
'3dKk8sbjZ2yocabr8qUaLHsa7bkd4qxnW8gjsqwhTprVfMrPGeCFqmwu2vYFytaE1NViqtiY4ALZjR2we3xnsmP')"
|
||||||
|
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') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: SWAPPER
|
||||||
|
description: "{{ doc('swaps_swapper') }}"
|
||||||
|
tests:
|
||||||
|
- not_null:
|
||||||
|
where: succeeded = TRUE
|
||||||
|
- name: FROM_AMT
|
||||||
|
description: "{{ doc('swaps_from_amt') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: FROM_MINT
|
||||||
|
description: "{{ doc('swaps_from_mint') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: TO_AMT
|
||||||
|
description: "{{ doc('swaps_to_amt') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: TO_MINT
|
||||||
|
description: "{{ doc('swaps_to_mint') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: SWAP_INDEX
|
||||||
|
description: "{{ doc('swaps_swap_index') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: _INSERTED_TIMESTAMP
|
||||||
|
description: "{{ doc('_inserted_timestamp') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
174
models/silver/swaps/silver__swaps_intermediate_meteora.sql
Normal file
174
models/silver/swaps/silver__swaps_intermediate_meteora.sql
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
{{ config(
|
||||||
|
materialized = 'incremental',
|
||||||
|
unique_key = ['swaps_intermediate_meteora_id'],
|
||||||
|
incremental_predicates = ['DBT_INTERNAL_DEST.block_timestamp::date >= LEAST(current_date-7,(select min(block_timestamp)::date from ' ~ generate_tmp_view_name(this) ~ '))'],
|
||||||
|
merge_exclude_columns = ["inserted_timestamp"],
|
||||||
|
cluster_by = ['block_timestamp::DATE','_inserted_timestamp::DATE'],
|
||||||
|
tags = ['scheduled_non_core'],
|
||||||
|
) }}
|
||||||
|
|
||||||
|
WITH base AS (
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM
|
||||||
|
{{ ref('silver__decoded_instructions_combined') }}
|
||||||
|
WHERE
|
||||||
|
program_id in ('LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo', -- DLMM program
|
||||||
|
'Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB' -- AMM program
|
||||||
|
)
|
||||||
|
AND
|
||||||
|
event_type = 'swap'
|
||||||
|
{% if is_incremental() %}
|
||||||
|
AND _inserted_timestamp >= (
|
||||||
|
SELECT
|
||||||
|
MAX(_inserted_timestamp) - INTERVAL '1 hour'
|
||||||
|
FROM
|
||||||
|
{{ this }}
|
||||||
|
)
|
||||||
|
{% else %}
|
||||||
|
AND block_timestamp :: DATE >= '2022-07-14'
|
||||||
|
{% endif %}
|
||||||
|
),
|
||||||
|
decoded AS (
|
||||||
|
SELECT
|
||||||
|
block_timestamp,
|
||||||
|
block_id,
|
||||||
|
tx_id,
|
||||||
|
index,
|
||||||
|
inner_index,
|
||||||
|
COALESCE(LEAD(inner_index) over (PARTITION BY tx_id, INDEX
|
||||||
|
ORDER BY
|
||||||
|
inner_index) -1, 999999) AS inner_index_end,
|
||||||
|
program_id,
|
||||||
|
silver.udf_get_account_pubkey_by_name('user', decoded_instruction:accounts) as swapper,
|
||||||
|
silver.udf_get_account_pubkey_by_name('userTokenIn', decoded_instruction:accounts) as source_token_account,
|
||||||
|
silver.udf_get_account_pubkey_by_name('tokenXMint', decoded_instruction:accounts) as source_mint,
|
||||||
|
silver.udf_get_account_pubkey_by_name('tokenYMint', decoded_instruction:accounts) as destination_mint,
|
||||||
|
silver.udf_get_account_pubkey_by_name('userTokenOut', decoded_instruction:accounts) as destination_token_account,
|
||||||
|
silver.udf_get_account_pubkey_by_name('reserveY', decoded_instruction:accounts) as program_destination_token_account,
|
||||||
|
silver.udf_get_account_pubkey_by_name('reserveX', decoded_instruction:accounts) as program_source_token_account,
|
||||||
|
_inserted_timestamp
|
||||||
|
FROM
|
||||||
|
base
|
||||||
|
where program_id = 'LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo'
|
||||||
|
union all
|
||||||
|
SELECT
|
||||||
|
block_timestamp,
|
||||||
|
block_id,
|
||||||
|
tx_id,
|
||||||
|
index,
|
||||||
|
inner_index,
|
||||||
|
COALESCE(LEAD(inner_index) over (PARTITION BY tx_id, INDEX
|
||||||
|
ORDER BY
|
||||||
|
inner_index) -1, 999999) AS inner_index_end,
|
||||||
|
program_id,
|
||||||
|
silver.udf_get_account_pubkey_by_name('user', decoded_instruction:accounts) as swapper,
|
||||||
|
silver.udf_get_account_pubkey_by_name('userSourceToken', decoded_instruction:accounts) as source_token_account,
|
||||||
|
null as source_mint,
|
||||||
|
null as destination_mint,
|
||||||
|
silver.udf_get_account_pubkey_by_name('userDestinationToken', decoded_instruction:accounts) as destination_token_account,
|
||||||
|
silver.udf_get_account_pubkey_by_name('aTokenVault', decoded_instruction:accounts) as program_destination_token_account,
|
||||||
|
silver.udf_get_account_pubkey_by_name('bTokenVault', decoded_instruction:accounts) as program_source_token_account,
|
||||||
|
_inserted_timestamp
|
||||||
|
FROM
|
||||||
|
base
|
||||||
|
where program_id = 'Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB'
|
||||||
|
and (decoded_instruction:args:amountIn::int <> 0 or decoded_instruction:args:inAmount::int <> 0)
|
||||||
|
),
|
||||||
|
transfers AS (
|
||||||
|
SELECT
|
||||||
|
A.*,
|
||||||
|
COALESCE(SPLIT_PART(INDEX :: text, '.', 1) :: INT, INDEX :: INT) AS index_1,
|
||||||
|
NULLIF(SPLIT_PART(INDEX :: text, '.', 2), '') :: INT AS inner_index_1
|
||||||
|
FROM
|
||||||
|
{{ ref('silver__transfers') }} A
|
||||||
|
INNER JOIN (
|
||||||
|
SELECT
|
||||||
|
DISTINCT tx_id
|
||||||
|
FROM
|
||||||
|
decoded
|
||||||
|
) d
|
||||||
|
ON d.tx_id = A.tx_id
|
||||||
|
WHERE
|
||||||
|
A.succeeded
|
||||||
|
|
||||||
|
{% if is_incremental() %}
|
||||||
|
AND A._inserted_timestamp >= (
|
||||||
|
SELECT
|
||||||
|
MAX(_inserted_timestamp) - INTERVAL '1 day'
|
||||||
|
FROM
|
||||||
|
{{ this }}
|
||||||
|
)
|
||||||
|
{% else %}
|
||||||
|
AND A.block_timestamp :: DATE >= '2022-07-14'
|
||||||
|
{% endif %}
|
||||||
|
),
|
||||||
|
pre_final as (
|
||||||
|
SELECT
|
||||||
|
A.block_id,
|
||||||
|
A.block_timestamp,
|
||||||
|
A.program_id,
|
||||||
|
A.tx_id,
|
||||||
|
A.index,
|
||||||
|
A.inner_index,
|
||||||
|
A.inner_index_end,
|
||||||
|
coalesce (b.succeeded,d.succeeded) AS succeeded,
|
||||||
|
A.swapper,
|
||||||
|
coalesce (b.amount,d.amount) AS from_amt,
|
||||||
|
coalesce(b.mint,d.mint) AS from_mint,
|
||||||
|
coalesce(C.amount,e.amount) AS to_amt,
|
||||||
|
coalesce(c.mint,e.mint) AS to_mint,
|
||||||
|
A._inserted_timestamp
|
||||||
|
FROM
|
||||||
|
decoded A
|
||||||
|
left JOIN transfers b
|
||||||
|
ON A.tx_id = b.tx_id
|
||||||
|
AND A.source_token_account = b.source_token_account
|
||||||
|
AND A.program_source_token_account = b.dest_token_account
|
||||||
|
AND A.index = b.index_1
|
||||||
|
AND ((b.inner_index_1 BETWEEN A.inner_index AND A.inner_index_end) or a.inner_index is null)
|
||||||
|
left JOIN transfers C
|
||||||
|
ON A.tx_id = C.tx_id
|
||||||
|
AND A.destination_token_account = C.dest_token_account
|
||||||
|
AND A.program_destination_token_account = C.source_token_account
|
||||||
|
AND A.index = C.index_1
|
||||||
|
AND ((C.inner_index_1 BETWEEN A.inner_index AND A.inner_index_end) or a.inner_index is null)
|
||||||
|
left JOIN transfers d
|
||||||
|
ON A.tx_id = d.tx_id
|
||||||
|
AND A.source_token_account = d.source_token_account
|
||||||
|
AND A.program_destination_token_account = d.dest_token_account
|
||||||
|
AND A.index = d.index_1
|
||||||
|
AND ((d.inner_index_1 BETWEEN A.inner_index AND A.inner_index_end) or a.inner_index is null)
|
||||||
|
left JOIN transfers e
|
||||||
|
ON A.tx_id = e.tx_id
|
||||||
|
AND A.destination_token_account = e.dest_token_account
|
||||||
|
AND A.program_source_token_account = e.source_token_account
|
||||||
|
AND A.index = e.index_1
|
||||||
|
AND ((e.inner_index_1 BETWEEN A.inner_index AND A.inner_index_end) or a.inner_index is null)
|
||||||
|
qualify(ROW_NUMBER() over (PARTITION BY A.tx_id, A.index, A.inner_INDEX ORDER BY inner_index)) = 1)
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
block_id,
|
||||||
|
block_timestamp,
|
||||||
|
program_id,
|
||||||
|
tx_id,
|
||||||
|
ROW_NUMBER() over (
|
||||||
|
PARTITION BY tx_id
|
||||||
|
ORDER BY
|
||||||
|
INDEX,
|
||||||
|
inner_index
|
||||||
|
) AS swap_index,
|
||||||
|
succeeded,
|
||||||
|
swapper,
|
||||||
|
from_amt,
|
||||||
|
from_mint,
|
||||||
|
to_amt,
|
||||||
|
to_mint,
|
||||||
|
_inserted_timestamp,
|
||||||
|
{{ dbt_utils.generate_surrogate_key(['tx_id','swap_index','program_id']) }} AS swaps_intermediate_meteora_id,
|
||||||
|
SYSDATE() AS inserted_timestamp,
|
||||||
|
SYSDATE() AS modified_timestamp,
|
||||||
|
'{{ invocation_id }}' AS invocation_id
|
||||||
|
FROM
|
||||||
|
pre_final
|
||||||
76
models/silver/swaps/silver__swaps_intermediate_meteora.yml
Normal file
76
models/silver/swaps/silver__swaps_intermediate_meteora.yml
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
version: 2
|
||||||
|
models:
|
||||||
|
- name: silver__swaps_intermediate_meteora
|
||||||
|
tests:
|
||||||
|
- dbt_utils.unique_combination_of_columns:
|
||||||
|
combination_of_columns:
|
||||||
|
- TX_ID
|
||||||
|
- SWAP_INDEX
|
||||||
|
- PROGRAM_ID
|
||||||
|
where: block_timestamp::date > current_date - 30
|
||||||
|
- compare_model_subset:
|
||||||
|
name: silver__swaps_intermediate_meteora_business_logic_test
|
||||||
|
compare_model: ref('testing__swaps_intermediate_meteora')
|
||||||
|
compare_columns:
|
||||||
|
- tx_id
|
||||||
|
- swapper
|
||||||
|
- round(from_amt,8)
|
||||||
|
- from_mint
|
||||||
|
- round(to_amt,8)
|
||||||
|
- to_mint
|
||||||
|
- swap_index
|
||||||
|
model_condition: "where tx_id in ('3DjUBQE4GwTMSFLGMi69TGMiBoNE8FfnryR8BCEmovGVmMz9Jfh9dG3ikLAPuQPWpv12ypS4nYx1Esc4TYUw3s44',
|
||||||
|
'3RCs1zgEKNemq1syYM3ZZKHkckZgBbkgtKVq41W7j2yh5Ce4pVgHLU6QSiZX3nrijZ4S2yhYDb3K61seLR4c9FYu',
|
||||||
|
'iBuwG5mU4LKMrN6iNVzGZSC7vXqvAfRQ98YJeKXPoDbM2oi7dvV8ZMnwgv55Db6JT4iokQ6JbVpN7jHnKkFtJqC',
|
||||||
|
'NfvsjHzJx5s5JWDK7pJaWUv7hXJGdWUYwqaoRVLxQ2d5q3Jyrs2uft9FUyeNFVyxVSVZFPdsTv45dpgdog9RyzQ',
|
||||||
|
'2eV5PUm4WL7X9T1X4nSbBmAGDLTx9pUiygK34ngMSyR9QwQUS8ZpnzGKTCbuJHeVGYNHjHBGtPh4fLYxkBLGVJeB',
|
||||||
|
'35QkSCVWRNFaqFM8DZrDWKWsBdDTrHVMmskd3H9D3pcQstdYsWqZiXVhMpkaCFrBQTi8XZaWgNZaWnQZzwPpZ1dv')"
|
||||||
|
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') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: SWAPPER
|
||||||
|
description: "{{ doc('swaps_swapper') }}"
|
||||||
|
tests:
|
||||||
|
- not_null:
|
||||||
|
where: succeeded = TRUE
|
||||||
|
- name: FROM_AMT
|
||||||
|
description: "{{ doc('swaps_from_amt') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: FROM_MINT
|
||||||
|
description: "{{ doc('swaps_from_mint') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: TO_AMT
|
||||||
|
description: "{{ doc('swaps_to_amt') }}"
|
||||||
|
- name: TO_MINT
|
||||||
|
description: "{{ doc('swaps_to_mint') }}"
|
||||||
|
- name: SWAP_INDEX
|
||||||
|
description: "{{ doc('swaps_swap_index') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: _INSERTED_TIMESTAMP
|
||||||
|
description: "{{ doc('_inserted_timestamp') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
181
models/silver/swaps/silver__swaps_intermediate_phoenix.sql
Normal file
181
models/silver/swaps/silver__swaps_intermediate_phoenix.sql
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
{{ config(
|
||||||
|
materialized = 'incremental',
|
||||||
|
unique_key = ['swaps_intermediate_phoenix_id'],
|
||||||
|
incremental_predicates = ['DBT_INTERNAL_DEST.block_timestamp::date >= LEAST(current_date-7,(select min(block_timestamp)::date from ' ~ generate_tmp_view_name(this) ~ '))'],
|
||||||
|
merge_exclude_columns = ["inserted_timestamp"],
|
||||||
|
cluster_by = ['block_timestamp::DATE','_inserted_timestamp::DATE'],
|
||||||
|
tags = ['scheduled_non_core'],
|
||||||
|
) }}
|
||||||
|
|
||||||
|
WITH base AS (
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM
|
||||||
|
{{ ref('silver__decoded_instructions_combined') }}
|
||||||
|
WHERE
|
||||||
|
program_id = 'PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY'
|
||||||
|
AND event_type = 'Swap'
|
||||||
|
|
||||||
|
{% if is_incremental() %}
|
||||||
|
AND _inserted_timestamp >= (
|
||||||
|
SELECT
|
||||||
|
MAX(_inserted_timestamp) - INTERVAL '1 hour'
|
||||||
|
FROM
|
||||||
|
{{ this }}
|
||||||
|
)
|
||||||
|
{% else %}
|
||||||
|
AND block_timestamp :: DATE >= '2023-02-15'
|
||||||
|
{% endif %}
|
||||||
|
),
|
||||||
|
decoded AS (
|
||||||
|
SELECT
|
||||||
|
block_timestamp,
|
||||||
|
block_id,
|
||||||
|
tx_id,
|
||||||
|
INDEX,
|
||||||
|
inner_index,
|
||||||
|
COALESCE(LEAD(inner_index) over (PARTITION BY tx_id, INDEX
|
||||||
|
ORDER BY
|
||||||
|
inner_index) -1, 999999) AS inner_index_end,
|
||||||
|
program_id,
|
||||||
|
CASE
|
||||||
|
WHEN decoded_instruction :args :orderPacket :immediateOrCancel :side :bid IS NOT NULL THEN 'bid'
|
||||||
|
ELSE 'ask'
|
||||||
|
END AS side,
|
||||||
|
silver.udf_get_account_pubkey_by_name(
|
||||||
|
'trader',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
) AS swapper,
|
||||||
|
CASE
|
||||||
|
WHEN side = 'ask' THEN silver.udf_get_account_pubkey_by_name(
|
||||||
|
'quoteVault',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
ELSE silver.udf_get_account_pubkey_by_name(
|
||||||
|
'baseVault',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
END AS source_token_account,
|
||||||
|
NULL AS source_mint,
|
||||||
|
NULL AS destination_mint,
|
||||||
|
CASE
|
||||||
|
WHEN side = 'ask' THEN silver.udf_get_account_pubkey_by_name(
|
||||||
|
'baseVault',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
ELSE silver.udf_get_account_pubkey_by_name(
|
||||||
|
'quoteVault',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
END AS destination_token_account,
|
||||||
|
CASE
|
||||||
|
WHEN side = 'ask' THEN silver.udf_get_account_pubkey_by_name(
|
||||||
|
'baseAccount',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
ELSE silver.udf_get_account_pubkey_by_name(
|
||||||
|
'quoteAccount',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
END AS program_destination_token_account,
|
||||||
|
CASE
|
||||||
|
WHEN side = 'ask' THEN silver.udf_get_account_pubkey_by_name(
|
||||||
|
'quoteAccount',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
ELSE silver.udf_get_account_pubkey_by_name(
|
||||||
|
'baseAccount',
|
||||||
|
decoded_instruction :accounts
|
||||||
|
)
|
||||||
|
END AS program_source_token_account,
|
||||||
|
_inserted_timestamp
|
||||||
|
FROM
|
||||||
|
base
|
||||||
|
),
|
||||||
|
transfers AS (
|
||||||
|
SELECT
|
||||||
|
A.*,
|
||||||
|
COALESCE(SPLIT_PART(INDEX :: text, '.', 1) :: INT, INDEX :: INT) AS index_1,
|
||||||
|
NULLIF(SPLIT_PART(INDEX :: text, '.', 2), '') :: INT AS inner_index_1
|
||||||
|
FROM
|
||||||
|
{{ ref('silver__transfers') }} A
|
||||||
|
INNER JOIN (
|
||||||
|
SELECT
|
||||||
|
DISTINCT tx_id
|
||||||
|
FROM
|
||||||
|
decoded
|
||||||
|
) d
|
||||||
|
ON d.tx_id = A.tx_id
|
||||||
|
WHERE
|
||||||
|
A.succeeded
|
||||||
|
|
||||||
|
{% if is_incremental() %}
|
||||||
|
AND A._inserted_timestamp >= (
|
||||||
|
SELECT
|
||||||
|
MAX(_inserted_timestamp) - INTERVAL '1 day'
|
||||||
|
FROM
|
||||||
|
{{ this }}
|
||||||
|
)
|
||||||
|
{% else %}
|
||||||
|
AND A.block_timestamp :: DATE >= '2023-02-15'
|
||||||
|
{% endif %}
|
||||||
|
),
|
||||||
|
pre_final AS (
|
||||||
|
SELECT
|
||||||
|
A.block_id,
|
||||||
|
A.block_timestamp,
|
||||||
|
A.program_id,
|
||||||
|
A.tx_id,
|
||||||
|
A.index,
|
||||||
|
A.inner_index,
|
||||||
|
A.inner_index_end,
|
||||||
|
C.succeeded,
|
||||||
|
A.swapper,
|
||||||
|
b.amount AS from_amt,
|
||||||
|
b.mint AS from_mint,
|
||||||
|
C.amount AS to_amt,
|
||||||
|
C.mint AS to_mint,
|
||||||
|
A._inserted_timestamp
|
||||||
|
FROM
|
||||||
|
decoded A
|
||||||
|
INNER JOIN transfers b
|
||||||
|
ON A.tx_id = b.tx_id
|
||||||
|
AND A.source_token_account = b.source_token_account
|
||||||
|
AND A.program_source_token_account = b.dest_token_account
|
||||||
|
AND A.index = b.index_1
|
||||||
|
AND b.inner_index_1 BETWEEN A.inner_index AND A.inner_index_end
|
||||||
|
INNER JOIN transfers C
|
||||||
|
ON A.tx_id = C.tx_id
|
||||||
|
AND A.destination_token_account = C.dest_token_account
|
||||||
|
AND A.program_destination_token_account = C.source_token_account
|
||||||
|
AND A.index = C.index_1
|
||||||
|
AND C.inner_index_1 BETWEEN A.inner_index AND A.inner_index_end
|
||||||
|
qualify(ROW_NUMBER() over (PARTITION BY A.tx_id, A.index, A.inner_INDEX
|
||||||
|
ORDER BY
|
||||||
|
inner_index)) = 1
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
block_id,
|
||||||
|
block_timestamp,
|
||||||
|
program_id,
|
||||||
|
tx_id,
|
||||||
|
ROW_NUMBER() over (
|
||||||
|
PARTITION BY tx_id
|
||||||
|
ORDER BY
|
||||||
|
INDEX,
|
||||||
|
inner_index
|
||||||
|
) AS swap_index,
|
||||||
|
succeeded,
|
||||||
|
swapper,
|
||||||
|
from_amt,
|
||||||
|
from_mint,
|
||||||
|
to_amt,
|
||||||
|
to_mint,
|
||||||
|
_inserted_timestamp,
|
||||||
|
{{ dbt_utils.generate_surrogate_key(['tx_id','swap_index','program_id']) }} AS swaps_intermediate_phoenix_id,
|
||||||
|
SYSDATE() AS inserted_timestamp,
|
||||||
|
SYSDATE() AS modified_timestamp,
|
||||||
|
'{{ invocation_id }}' AS invocation_id
|
||||||
|
FROM
|
||||||
|
pre_final
|
||||||
85
models/silver/swaps/silver__swaps_intermediate_phoenix.yml
Normal file
85
models/silver/swaps/silver__swaps_intermediate_phoenix.yml
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
version: 2
|
||||||
|
models:
|
||||||
|
- name: silver__swaps_intermediate_phoenix
|
||||||
|
tests:
|
||||||
|
- dbt_utils.unique_combination_of_columns:
|
||||||
|
combination_of_columns:
|
||||||
|
- TX_ID
|
||||||
|
- SWAP_INDEX
|
||||||
|
- PROGRAM_ID
|
||||||
|
where: block_timestamp::date > current_date - 30
|
||||||
|
- compare_model_subset:
|
||||||
|
name: silver__swaps_intermediate_phoenix_business_logic_test
|
||||||
|
compare_model: ref('testing__swaps_intermediate_phoenix')
|
||||||
|
compare_columns:
|
||||||
|
- tx_id
|
||||||
|
- swapper
|
||||||
|
- round(from_amt,8)
|
||||||
|
- from_mint
|
||||||
|
- round(to_amt,8)
|
||||||
|
- to_mint
|
||||||
|
- swap_index
|
||||||
|
model_condition: "where tx_id in ('3fp9QzP6EMn9cUDgCRmHACSxmDhh3zrMebYKSm8Auq3xyBck7X6nRSrrVDThDhM1wRBaVidwh4BCDLn86Bve3thL',
|
||||||
|
'671GWKC1AGyvrAThDzM9tq9UqVW8W2WdULAikkLaaTSZVYEmzLEhXutdDjZTenLp5oAtc4G7f4bztZ978rN1Zz1d',
|
||||||
|
'3FgxCNCndXDSx95mrsBwcfsHSM9fDzWSq2bJqN74ym5MTgF2VrLJRn4w5UfdKpeKNA3mzCmm7KJfy7wuDAo4y7Ko',
|
||||||
|
'21qdi1d8vYyMp3AcJmPdKBi1VsEoaBn4qhB1WJhzRR9N3qvtXRkENh5caaBGDaeUVD68CUw72bD2neCQA7dmgUuS',
|
||||||
|
'3EweEGRQkdQ4e5sRRcU5V9Jz2E9sMHzDrbmSD13C2wLQJkANJEZkk9EHJqpUSKUSWCAnY5nFnLgXUqJF5ham6ARk')"
|
||||||
|
- tx_excluded:
|
||||||
|
name: silver__swaps_intermediate_phoenix_tx_excluded_test
|
||||||
|
excluded_tx_ids:
|
||||||
|
- 44b7tkzuKHqQsn7Eoh3RnTy12sLijudPFz3ZX2ewJ7vxKqs5LveeNKxBVLUstggr5Jk3LFzoNs9SSZxcMSSgVE7j
|
||||||
|
- 1M48Smd6EQ4phktTsGfdk3HjXf2sEW6J8TpUpPjEaGjLy5viWPC9D4rS9SoutVWTJkLkjbVLQpEG9eboscoybQ6
|
||||||
|
- fLwJbyNV8kF3qZcmUrPrQB7B1keipAB5XNiEsJ8oFtvMroZ4SttabxgP2nhUsTT1jKvN4NfrSf8DMYVoadY57Da
|
||||||
|
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') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: SWAPPER
|
||||||
|
description: "{{ doc('swaps_swapper') }}"
|
||||||
|
tests:
|
||||||
|
- not_null:
|
||||||
|
where: succeeded = TRUE
|
||||||
|
- name: FROM_AMT
|
||||||
|
description: "{{ doc('swaps_from_amt') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: FROM_MINT
|
||||||
|
description: "{{ doc('swaps_from_mint') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: TO_AMT
|
||||||
|
description: "{{ doc('swaps_to_amt') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: TO_MINT
|
||||||
|
description: "{{ doc('swaps_to_mint') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: SWAP_INDEX
|
||||||
|
description: "{{ doc('swaps_swap_index') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
|
- name: _INSERTED_TIMESTAMP
|
||||||
|
description: "{{ doc('_inserted_timestamp') }}"
|
||||||
|
tests:
|
||||||
|
- not_null
|
||||||
Loading…
Reference in New Issue
Block a user