AN-2548/op-ez-dex-swaps (#76)

* created core__ez_dex_swaps view

* added synthetix swaps models and adjusted velodrome / sushi models for necessary ez_dex columns

* fixed error in velo pools backfill seed causing duplicates

* fixed issue with silver prices causing duplicate token_address

* added univ3 pools and swaps models for integration into ez_dex_swaps

* replaced null event_names with swap

* added univ3 to dex_swaps and added not null event name test

* updated gitignore for dbt-env

* curve pools silver model

* added incremental logic to curve pools table

* adjusted data type on decimal column

* updated curve_pools and added curve_swaps

* case when for null event_name

* removed dbt-env

* snowflake tagging for ez_dex_swaps

* added beethoven swaps and pools tables, and joined them to ez_dex_swaps

* beethoven pools yml

* removed column from synthetix swaps yml

* recreated velodrome pools model using the reads udf

* change event_name to reference topic

* deleted velo_pools_backfill seed and hardcoded function sigs

* changed udf_hex_to_int ref to ethereum.public

* changed synthetix swaps to reference data instead of event inputs

* changed event_input references to data in beethoven models

* rounded usd values

* modified tx_to logic in curve swaps

* modified curve swaps for proper volumes
This commit is contained in:
drethereum 2023-02-02 13:15:54 -07:00 committed by GitHub
parent 27f344bbde
commit 4528d47adf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
44 changed files with 2669 additions and 380 deletions

View File

@ -0,0 +1,12 @@
synth_symbol,synth_proxy_address
sETH,0xe405de8f52ba7559f9df3c368500b6e6ae6cee49
sLINK,0xc5db22719a06418028a40a9b5e9a7c02959d0d08
sBTC,0x298b9b95708152ff6968aafd889c6586e9169f1d
sUSD,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9
sAAVE,0x00b8d5a5e1ac97cb4341c4bc4367443c8776e8d9
sUNI,0xf5a6115aa582fd1beea22bc93b7dc7a785f60d03
sEUR,0xfbc4198702e81ae77c06d58f81b629bdf36f0a71
sAVAX,0xb2b42b231c68cbb0b4bf2ffebf57782fd97d3da4
sMATIC,0x81ddfac111913d3d5218dea999216323b7cd6356
sSOL,0x8b2f7ae8ca8ee8428b6d76de88326bb413db2766
sINR,0xa3a538ea5d5838dc32dde15946ccd74bdd5652ff
1 synth_symbol synth_proxy_address
2 sETH 0xe405de8f52ba7559f9df3c368500b6e6ae6cee49
3 sLINK 0xc5db22719a06418028a40a9b5e9a7c02959d0d08
4 sBTC 0x298b9b95708152ff6968aafd889c6586e9169f1d
5 sUSD 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9
6 sAAVE 0x00b8d5a5e1ac97cb4341c4bc4367443c8776e8d9
7 sUNI 0xf5a6115aa582fd1beea22bc93b7dc7a785f60d03
8 sEUR 0xfbc4198702e81ae77c06d58f81b629bdf36f0a71
9 sAVAX 0xb2b42b231c68cbb0b4bf2ffebf57782fd97d3da4
10 sMATIC 0x81ddfac111913d3d5218dea999216323b7cd6356
11 sSOL 0x8b2f7ae8ca8ee8428b6d76de88326bb413db2766
12 sINR 0xa3a538ea5d5838dc32dde15946ccd74bdd5652ff

View File

@ -1,83 +0,0 @@
pool_address,pool_name,pool_type,token0_symbol,token1_symbol,token0_address,token1_address,token0_decimals,token1_decimals
0x47029bc8f5cbe3b464004e87ef9c9419a48018cd,vAMM-OP/USDC,volatile,OP,USDC,0x4200000000000000000000000000000000000042,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0x3eec44e94ee86ce79f34bb26dc3cdbbee18d6d17,vAMM-WETH/AELIN,volatile,WETH,AELIN,0x4200000000000000000000000000000000000006,0x61baadcf22d2565b0f471b291c475db5555e0b76,18,18
0x4c8b195d33c6f95a8262d56ede793611ee7b5aad,vAMM-WBTC/USDC,volatile,WBTC,USDC,0x68f180fcce6836688e9084f035309e29bf0a2095,0x7f5c764cbc14f9669b88837ca1490cca17c31607,8,6
0xfc77e39de40e54f820e313039207dc850e4c9e60,vAMM-OP/L2DAO,volatile,OP,L2DAO,0x4200000000000000000000000000000000000042,0xd52f94df742a6f4b4c8b033369fe13a41782bf44,18,18
0xcdd41009e74bd1ae4f7b2eecf892e4bc718b9302,vAMM-WETH/OP,volatile,WETH,OP,0x4200000000000000000000000000000000000006,0x4200000000000000000000000000000000000042,18,18
0xe47d437252fe9cb5e74396eee63360d8647df25d,vAMM-LYRA/sUSD,volatile,LYRA,sUSD,0x50c5725949a6f0c72e6c4a641f24049a917db0cb,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9,18,18
0x85ff5b70de43fee34f3fa632addd9f76a0f6baa9,vAMM-SNX/sUSD,volatile,SNX,sUSD,0x8700daec35af8ff88c16bdf0418774cb3d7599b4,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9,18,18
0x43ce87a1ad20277b78cae52c7bcd5fc82a297551,vAMM-WETH/DOLA,volatile,WETH,DOLA,0x4200000000000000000000000000000000000006,0x8ae125e8653821e851f12a49f7765db9a9ce7384,18,18
0x986d353a3700530be4e75794830f57e657bc68cb,vAMM-FRAX/OP,volatile,FRAX,OP,0x2e3d870790dc77a83dd1d18184acc7439a53f475,0x4200000000000000000000000000000000000042,18,18
0x9056eb7ca982a5dd65a584189994e6a27318067d,vAMM-USDC/SNX,volatile,USDC,SNX,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0x8700daec35af8ff88c16bdf0418774cb3d7599b4,6,18
0x9355292f66552ea5717b274d27eefc8254011d83,vAMM-THALES/USDC,volatile,THALES,USDC,0x217d47011b23bb961eb6d93ca9945b7501a5bb11,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0x207AddB05C548F262219f6bFC6e11c02d0f7fDbe,sAMM-USDC/LUSD,stable,USDC,LUSD,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0xc40F949F8a4e094D1b49a23ea9241D289B7b2819,6,18
0x4F7ebc19844259386DBdDB7b2eB759eeFc6F8353,sAMM-USDC/DAI,stable,USDC,DAI,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0xda10009cbd5d07dd0cecc66161fc93d7c9000da1,6,18
0xffb6c35960b23989037c8c391facebc8a17de970,vAMM-WETH/SNX,volatile,WETH,SNX,0x4200000000000000000000000000000000000006,0x8700daec35af8ff88c16bdf0418774cb3d7599b4,18,18
0xf8edf2da8fcf610cf77235d3f90cc110723159aa,vAMM-DF/USX,volatile,DF,USX,0x9e5aac1ba1a2e6aed6b32689dfcf62a509ca96f3,0xbfd291da8a403daaf7e5e9dc1ec0aceacd4848b9,18,18
0x43C3f2d0aA0EbC433d654BB6ebf67F0C03f8D8d9,vAMM-OP/DAI,volatile,OP,DAI,0x4200000000000000000000000000000000000042,0xda10009cbd5d07dd0cecc66161fc93d7c9000da1,18,18
0x6C5019D345Ec05004A7E7B0623A91a0D9B8D590d,sAMM-USDC/DOLA,stable,USDC,DOLA,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0x8ae125e8653821e851f12a49f7765db9a9ce7384,6,18
0xFFD74EF185989BFF8752c818A53a47FC45388F08,vAMM-VELO/OP,volatile,VELO,OP,0x3c8b650257cfb5f272f799f5e2b4e65093a11a05,0x4200000000000000000000000000000000000042,18,18
0xdee1856d7b75abf4c1bdf986da4e1c6c7864d640,vAMM-LYRA/USDC,volatile,LYRA,USDC,0x50c5725949a6f0c72e6c4a641f24049a917db0cb,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0xd62c9d8a3d4fd98b27caaefe3571782a3af0a737 ,sAMM-USDC/MAI,stable,USDC,MAI,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0xdfa46478f9e5ea86d57387849598dbfb2e964b02,6,18
0xAdF902b11e4ad36B227B84d856B229258b0b0465,sAMM-FRAX/USDC,stable,FRAX,USDC,0x2e3d870790dc77a83dd1d18184acc7439a53f475,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0x9c8a59934fba9af82674eff5d13a24e7c7e7a1f1,vAMM-USDC/PERP,volatile,USDC,PERP,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0x9e1028f5f1d5ede59748ffcee5532509976840e0,6,18
0x588443c932b45f47e936b969eb5aa6b5fd4f3369,vAMM-HND/USDC,volatile,HND,USDC,0x10010078a54396F62c96dF8532dc2B4847d47ED3,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0x7866C6072B09539fC0FDE82963846b80203d7beb,vAMM-USDC/agEUR,volatile,USDC,agEUR,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0x9485aca5bbbe1667ad97c7fe7c4531a624c8b1ed,6,18
0xac49498b97312a6716ef312f389b7e4d183a2a7c,sAMM-FRAX/sUSD,stable,FRAX,sUSD,0x2e3d870790dc77a83dd1d18184acc7439a53f475,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9,18,18
0xe8537b6FF1039CB9eD0B71713f697DDbaDBb717d,vAMM-VELO/USDC,volatile,VELO,USDC,0x3c8b650257cfb5f272f799f5e2b4e65093a11a05,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0x0d693efd716021878d5979fab4cf8f6c1b7ce450,sAMM-sUSD/LUSD,stable,sUSD,LUSD,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9,0xc40F949F8a4e094D1b49a23ea9241D289B7b2819,18,18
0x6fd5bee1ddb4dbbb0b7368b080ab99b8ba765902,sAMM-alETH/WETH,stable,alETH,WETH,0x3E29D3A9316dAB217754d13b28646B76607c5f04,0x4200000000000000000000000000000000000006,18,18
0xd3650ab80545c31088f89fb6d16930796758f3c1,vAMM-OP/LYRA,volatile,OP,LYRA,0x4200000000000000000000000000000000000042,0x50c5725949a6f0c72e6c4a641f24049a917db0cb,18,18
0xd16232ad60188B68076a235c65d692090caba155,sAMM-USDC/sUSD,stable,USDC,sUSD,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9,6,18
0x46b8a98d72820e28465a172687af920cc167e587,vAMM-VELO/sUSD,volatile,VELO,sUSD,0x3c8b650257cfb5f272f799f5e2b4e65093a11a05,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9,18,18
0xfdad8f85c0f3895c85301f549d124ce526479bf8,sAMM-WBTC/renBTC,stable,WBTC,renBTC,0x68f180fcce6836688e9084f035309e29bf0a2095,0x85f6583762bc76d775eab9a7456db344f12409f7,8,8
0x06141423dcf1a5a4c137039063ac873cdc1e363a,vAMM-VELO/WETH,volatile,VELO,WETH,0x3c8b650257cfb5f272f799f5e2b4e65093a11a05,0x4200000000000000000000000000000000000006,18,18
0xe75a3f4bf99882ad9f8aebab2115873315425d00,sAMM-USDC/alUSD,stable,USDC,alUSD,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0xcb8fa9a76b8e203d8c3797bf438d8fb81ea3326a,6,18
0xe2ea57fdf87624f4384ef6da5f3844e8e9e5d878,vAMM-FRAX/FXS,volatile,FRAX,FXS,0x2e3d870790dc77a83dd1d18184acc7439a53f475,0x67ccea5bb16181e7b4109c9c2143c24a1c2205be,18,18
0x53bea2d15efe344b054e73209455d2b6aa1c9462,vAMM-OP/sUSD,volatile,OP,sUSD,0x4200000000000000000000000000000000000042,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9,18,18
0x051a9a47920a913914a9e6e961a230a2a464eeb2,vAMM-VELO/LYRA,volatile,VELO,LYRA,0x3c8b650257cfb5f272f799f5e2b4e65093a11a05,0x50c5725949a6f0c72e6c4a641f24049a917db0cb,18,18
0xec24eb97cec2f0f6a2d61254990b0f163bbbfe1d,sAMM-sUSD/DAI,stable,sUSD,DAI,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9,0xda10009cbd5d07dd0cecc66161fc93d7c9000da1,18,18
0x5edac6b8ea08d535c01981d75b3361481c0ee999,sAMM-USDC/USX,stable,USDC,USX,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0xbfd291da8a403daaf7e5e9dc1ec0aceacd4848b9,6,18
0xFd7FddFc0A729eCF45fB6B12fA3B71A575E1966F,sAMM-WETH/sETH,stable,WETH,sETH,0x4200000000000000000000000000000000000006,0xe405de8f52ba7559f9df3c368500b6e6ae6cee49,18,18
0x6580c6ee0bb96651be0aa8db382b48ea7acd077d,vAMM-VELO/SNX,volatile,VELO,SNX,0x3c8b650257cfb5f272f799f5e2b4e65093a11a05,0x8700daec35af8ff88c16bdf0418774cb3d7599b4,18,18
0x58f98be02c4ffb675af8857013a9c0dfa5750d04,vAMM-WETH/sUSD,volatile,WETH,sUSD,0x4200000000000000000000000000000000000006,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9,18,18
0x79c912FEF520be002c2B6e57EC4324e260f38E50,vAMM-WETH/USDC,volatile,WETH,USDC,0x4200000000000000000000000000000000000006,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0xe8633ce5d216ebfdddf6875067dfb8397dedcaf3,vAMM-OP/USDC,volatile,OP,USDC,0x4200000000000000000000000000000000000042,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0xe08d427724d8a2673fe0be3a81b7db17be835b36,sAMM-USDC/USDT,stable,USDC,USDT,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0x94b008aa00579c1307b0ef2c499ad98a8ce58e58,6,6
0x335bd4ffa921160fc86ce3843f80a9941e7456c6,sAMM-VELO/USDC,stable,VELO,USDC,0x3c8b650257cfb5f272f799f5e2b4e65093a11a05,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0x587233ce63d7c1e081ce9d94d9940544758f6d01,sAMM-FRAX/USDC,stable,FRAX,USDC,0x2e3d870790dc77a83dd1d18184acc7439a53f475,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0xc2058aa3b3f96075cc33946bcd1963bfa660315b,sAMM-sUSD/DAI,stable,sUSD,DAI,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9,0xda10009cbd5d07dd0cecc66161fc93d7c9000da1,18,18
0x557949dde71e88cc2f41d33d341ff42417a35a2d,vAMM-VELO/OP,volatile,VELO,OP,0x3c8b650257cfb5f272f799f5e2b4e65093a11a05,0x4200000000000000000000000000000000000042,18,18
0x8e6bf020d11e641511bd8b24ee0fab2034e224e5,vAMM-THALES/USDC,volatile,THALES,USDC,0x217d47011b23bb961eb6d93ca9945b7501a5bb11,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0xbe61c199d356d205b3beba3634a7992af5e28631,sAMM-USDC/LUSD,stable,USDC,LUSD,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0xc40F949F8a4e094D1b49a23ea9241D289B7b2819,6,18
0x48e18e3d1efa7f0e15f1b2bf01b232534c30a3ef,vAMM-WETH/USDC,volatile,WETH,USDC,0x4200000000000000000000000000000000000006,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0x93fc04cd6d108588ecd844c7d60f46635037b5a3,sAMM-USDC/sUSD,stable,USDC,sUSD,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9,6,18
0xE1224c055c057cb71E41DaC936BA946f6F500eD1,vAMM-OP/USDT,volatile,OP,USDT,0x4200000000000000000000000000000000000042,0x94b008aa00579c1307b0ef2c499ad98a8ce58e58,18,6
0xd04f675127d37bf7b009453116c17b7ef088cceb,vAMM-VELO/DAI,volatile,VELO,DAI,0x3c8b650257cfb5f272f799f5e2b4e65093a11a05,0xda10009cbd5d07dd0cecc66161fc93d7c9000da1,18,18
0x534f3135757db41c4f705b0eac697659f68c4014,vAMM-WETH/DAI,volatile,WETH,DAI,0x4200000000000000000000000000000000000006,0xda10009cbd5d07dd0cecc66161fc93d7c9000da1,18,18
0x278631efe7e7b4c2ec49927b255c2ca42be2c1b1,vAMM-WETH/OP,volatile,WETH,OP,0x4200000000000000000000000000000000000006,0x4200000000000000000000000000000000000042,18,18
0x3e2882ef90fafab1894bec08f57745a0dd63950a,vAMM-VELO/alUSD,volatile,VELO,alUSD,0x3c8b650257cfb5f272f799f5e2b4e65093a11a05,0xcb8fa9a76b8e203d8c3797bf438d8fb81ea3326a,18,18
0x265013a5915cebb9344c9e259d531e55855da45d,sAMM-LYRA/sUSD,stable,LYRA,sUSD,0x50c5725949a6f0c72e6c4a641f24049a917db0cb,0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9,18,18
0xd52b3eac7ef128b879db10ffbd94e29fe65a34d8,vAMM-alETH/WETH,volatile,alETH,WETH,0x3E29D3A9316dAB217754d13b28646B76607c5f04,0x4200000000000000000000000000000000000006,18,18
0xcfcf4bb472aa2ad6c82ebef2377a20829b6356ad,sAMM-VELO/WETH,stable,VELO,WETH,0x3c8b650257cfb5f272f799f5e2b4e65093a11a05,0x4200000000000000000000000000000000000006,18,18
0x34bb604e97604533ab9e42a756c3790910caac87,vAMM-WETH/LYRA,volatile,WETH,LYRA,0x4200000000000000000000000000000000000006,0x50c5725949a6f0c72e6c4a641f24049a917db0cb,18,18
0x61eba8151880ea81743795faf3e4042b38e8638c,vAMM-sUSD/sETH,volatile,sUSD,sETH,0x50c5725949a6f0c72e6c4a641f24049a917db0cb,0xe405de8f52ba7559f9df3c368500b6e6ae6cee49,18,18
0x49b5c691685aaeeaaaff57ab6ccef081a165f5bb,vAMM-alETH/OP,volatile,alETH,OP,0x3E29D3A9316dAB217754d13b28646B76607c5f04,0x4200000000000000000000000000000000000042,18,18
0xb840adae1a31b52778188b9e948fc79a4bc99d44,sAMM-SNX/sUSD,stable,SNX,sUSD,0x8700daec35af8ff88c16bdf0418774cb3d7599b4,0x50c5725949a6f0c72e6c4a641f24049a917db0cb,18,18
0x078f65c0e854ab7fa3baa2cff62a4f9cb4031382,vAMM-USDC/DAI,volatile,USDC,DAI,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0xda10009cbd5d07dd0cecc66161fc93d7c9000da1,6,18
0x78fa29412998acedd7728b4cf5623ee5e2f8f589,vAMM-OP/alUSD,volatile,OP,alUSD,0x4200000000000000000000000000000000000042,0xcb8fa9a76b8e203d8c3797bf438d8fb81ea3326a,18,18
0x3bbde95b1ed19f8d76252d0b48854d9eaaec3cef,vAMM-TAROT/USDC,volatile,TAROT,USDC,0x375488f097176507e39b9653b88fdc52cde736bf,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0xc0d2e721d3d93578f3528d3bedac9a42120aeef7,vAMM-POOL/WETH,volatile,POOL,WETH,0x395ae52bb17aef68c2888d941736a71dc6d4e125,0x4200000000000000000000000000000000000006,18,18
0xf8ae1a9ff9f853a7837c251f09befd43abebcf90,vAMM-sETHo/pETHo,volatile,sETHo,pETHo,0x09448876068907827ec15f49a8f1a58c70b04d45,0x6ca558bd3eab53da1b25ab97916dd14bf6cfee4e,18,18
0x43e8e67a6e59b372be0d8af48742991b2ae7a2a2,vAMM-SEED/OP,volatile,SEED,OP,0x1ad0abe4fd37e8f1e1b0a018425b5e4eae703304,0x4200000000000000000000000000000000000042,18,18
0xaee6477fab80a73abfdab05dab59761fddc0e826,vAMM-SEED-TEST/OP,volatile,SEED-TEST,OP,0x17bcc8f26d44ecfa5f56abebe4ac8bc0ab71069a,0x4200000000000000000000000000000000000042,18,18
0x74f66d886f85f424bdd8045c5772c98af84340ff,vAMM-TT/OP,volatile,TT,OP,0x1ce444cd37ddbff1ab6a901140d8a5ad3e810118,0x4200000000000000000000000000000000000042,18,18
0xd0223f10f3e71ba8af6861f39272f2ac21b5aba5,vAMM-OP/SS,volatile,OP,SS,0x4200000000000000000000000000000000000042,0x8ff13f65f9f0e0b70bf0b15d1d4a5d808c571511,18,18
0x651ea5496b6e36120f9bf020ec0ea5cfd31c529c,vAMM-PREMIA/WETH,volatile,PREMIA,WETH,0x374ad0f47f4ca39c78e5cc54f1c9e426ff8f231a,0x4200000000000000000000000000000000000006,18,18
0x47bc0bdc420475f713ce099647f967f636b1cf70,vAMM-OP/SSHARE-TEST,volatile,OP,SSHARE-TEST,0x4200000000000000000000000000000000000042,0x66bdc9ab6cb33d9cfbe05cc3d3eea69bbd92ae35,18,18
0x9629a694c041f3b10ce974dc37ef4dd4596c4f54,vAMM-sETHo/WETH,volatile,sETHo,WETH,0x09448876068907827ec15f49a8f1a58c70b04d45,0x4200000000000000000000000000000000000006,18,18
0xcd897440484280c5e0d574cf8e61a67c7e6981ac,vAMM-sETHo/WETH,volatile,sETHo,WETH,0x09448876068907827ec15f49a8f1a58c70b04d45,0x4200000000000000000000000000000000000006,18,18
0x657e6eebd71ac90a91173b786c099e71e37a75ff,vAMM-UNLOCK/USDC,volatile,UNLOCK,USDC,0x7ae97042a4a0eb4d1eb370c34bfec71042a056b7,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0x3bbde95b1ed19f8d76252d0b48854d9eaaec3cef,vAMM-TAROT/USDC,volatile,TAROT,USDC,0x375488f097176507e39b9653b88fdc52cde736bf,0x7f5c764cbc14f9669b88837ca1490cca17c31607,18,6
0xe957ac5fc6b93227bf7fe0b32798e58b7a044252,vAMM-OP/SSHARE,volatile,OP,SSHARE,0x4200000000000000000000000000000000000042,0x74af59598ec0c1771d0a7797eba4a2c073d8d253,18,18
0xd2d631d8d887e3d18a623e8eb9e4f9ca97b3372a,vAMM-USDT/MYERC20,volatile,USDT,MYERC20,0x94b008aa00579c1307b0ef2c499ad98a8ce58e58,0x9a45dc286b8b9e1429a312220685529e6a32702c,6,18
1 pool_address pool_name pool_type token0_symbol token1_symbol token0_address token1_address token0_decimals token1_decimals
2 0x47029bc8f5cbe3b464004e87ef9c9419a48018cd vAMM-OP/USDC volatile OP USDC 0x4200000000000000000000000000000000000042 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
3 0x3eec44e94ee86ce79f34bb26dc3cdbbee18d6d17 vAMM-WETH/AELIN volatile WETH AELIN 0x4200000000000000000000000000000000000006 0x61baadcf22d2565b0f471b291c475db5555e0b76 18 18
4 0x4c8b195d33c6f95a8262d56ede793611ee7b5aad vAMM-WBTC/USDC volatile WBTC USDC 0x68f180fcce6836688e9084f035309e29bf0a2095 0x7f5c764cbc14f9669b88837ca1490cca17c31607 8 6
5 0xfc77e39de40e54f820e313039207dc850e4c9e60 vAMM-OP/L2DAO volatile OP L2DAO 0x4200000000000000000000000000000000000042 0xd52f94df742a6f4b4c8b033369fe13a41782bf44 18 18
6 0xcdd41009e74bd1ae4f7b2eecf892e4bc718b9302 vAMM-WETH/OP volatile WETH OP 0x4200000000000000000000000000000000000006 0x4200000000000000000000000000000000000042 18 18
7 0xe47d437252fe9cb5e74396eee63360d8647df25d vAMM-LYRA/sUSD volatile LYRA sUSD 0x50c5725949a6f0c72e6c4a641f24049a917db0cb 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 18 18
8 0x85ff5b70de43fee34f3fa632addd9f76a0f6baa9 vAMM-SNX/sUSD volatile SNX sUSD 0x8700daec35af8ff88c16bdf0418774cb3d7599b4 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 18 18
9 0x43ce87a1ad20277b78cae52c7bcd5fc82a297551 vAMM-WETH/DOLA volatile WETH DOLA 0x4200000000000000000000000000000000000006 0x8ae125e8653821e851f12a49f7765db9a9ce7384 18 18
10 0x986d353a3700530be4e75794830f57e657bc68cb vAMM-FRAX/OP volatile FRAX OP 0x2e3d870790dc77a83dd1d18184acc7439a53f475 0x4200000000000000000000000000000000000042 18 18
11 0x9056eb7ca982a5dd65a584189994e6a27318067d vAMM-USDC/SNX volatile USDC SNX 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0x8700daec35af8ff88c16bdf0418774cb3d7599b4 6 18
12 0x9355292f66552ea5717b274d27eefc8254011d83 vAMM-THALES/USDC volatile THALES USDC 0x217d47011b23bb961eb6d93ca9945b7501a5bb11 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
13 0x207AddB05C548F262219f6bFC6e11c02d0f7fDbe sAMM-USDC/LUSD stable USDC LUSD 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0xc40F949F8a4e094D1b49a23ea9241D289B7b2819 6 18
14 0x4F7ebc19844259386DBdDB7b2eB759eeFc6F8353 sAMM-USDC/DAI stable USDC DAI 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0xda10009cbd5d07dd0cecc66161fc93d7c9000da1 6 18
15 0xffb6c35960b23989037c8c391facebc8a17de970 vAMM-WETH/SNX volatile WETH SNX 0x4200000000000000000000000000000000000006 0x8700daec35af8ff88c16bdf0418774cb3d7599b4 18 18
16 0xf8edf2da8fcf610cf77235d3f90cc110723159aa vAMM-DF/USX volatile DF USX 0x9e5aac1ba1a2e6aed6b32689dfcf62a509ca96f3 0xbfd291da8a403daaf7e5e9dc1ec0aceacd4848b9 18 18
17 0x43C3f2d0aA0EbC433d654BB6ebf67F0C03f8D8d9 vAMM-OP/DAI volatile OP DAI 0x4200000000000000000000000000000000000042 0xda10009cbd5d07dd0cecc66161fc93d7c9000da1 18 18
18 0x6C5019D345Ec05004A7E7B0623A91a0D9B8D590d sAMM-USDC/DOLA stable USDC DOLA 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0x8ae125e8653821e851f12a49f7765db9a9ce7384 6 18
19 0xFFD74EF185989BFF8752c818A53a47FC45388F08 vAMM-VELO/OP volatile VELO OP 0x3c8b650257cfb5f272f799f5e2b4e65093a11a05 0x4200000000000000000000000000000000000042 18 18
20 0xdee1856d7b75abf4c1bdf986da4e1c6c7864d640 vAMM-LYRA/USDC volatile LYRA USDC 0x50c5725949a6f0c72e6c4a641f24049a917db0cb 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
21 0xd62c9d8a3d4fd98b27caaefe3571782a3af0a737 sAMM-USDC/MAI stable USDC MAI 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0xdfa46478f9e5ea86d57387849598dbfb2e964b02 6 18
22 0xAdF902b11e4ad36B227B84d856B229258b0b0465 sAMM-FRAX/USDC stable FRAX USDC 0x2e3d870790dc77a83dd1d18184acc7439a53f475 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
23 0x9c8a59934fba9af82674eff5d13a24e7c7e7a1f1 vAMM-USDC/PERP volatile USDC PERP 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0x9e1028f5f1d5ede59748ffcee5532509976840e0 6 18
24 0x588443c932b45f47e936b969eb5aa6b5fd4f3369 vAMM-HND/USDC volatile HND USDC 0x10010078a54396F62c96dF8532dc2B4847d47ED3 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
25 0x7866C6072B09539fC0FDE82963846b80203d7beb vAMM-USDC/agEUR volatile USDC agEUR 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0x9485aca5bbbe1667ad97c7fe7c4531a624c8b1ed 6 18
26 0xac49498b97312a6716ef312f389b7e4d183a2a7c sAMM-FRAX/sUSD stable FRAX sUSD 0x2e3d870790dc77a83dd1d18184acc7439a53f475 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 18 18
27 0xe8537b6FF1039CB9eD0B71713f697DDbaDBb717d vAMM-VELO/USDC volatile VELO USDC 0x3c8b650257cfb5f272f799f5e2b4e65093a11a05 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
28 0x0d693efd716021878d5979fab4cf8f6c1b7ce450 sAMM-sUSD/LUSD stable sUSD LUSD 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 0xc40F949F8a4e094D1b49a23ea9241D289B7b2819 18 18
29 0x6fd5bee1ddb4dbbb0b7368b080ab99b8ba765902 sAMM-alETH/WETH stable alETH WETH 0x3E29D3A9316dAB217754d13b28646B76607c5f04 0x4200000000000000000000000000000000000006 18 18
30 0xd3650ab80545c31088f89fb6d16930796758f3c1 vAMM-OP/LYRA volatile OP LYRA 0x4200000000000000000000000000000000000042 0x50c5725949a6f0c72e6c4a641f24049a917db0cb 18 18
31 0xd16232ad60188B68076a235c65d692090caba155 sAMM-USDC/sUSD stable USDC sUSD 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 6 18
32 0x46b8a98d72820e28465a172687af920cc167e587 vAMM-VELO/sUSD volatile VELO sUSD 0x3c8b650257cfb5f272f799f5e2b4e65093a11a05 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 18 18
33 0xfdad8f85c0f3895c85301f549d124ce526479bf8 sAMM-WBTC/renBTC stable WBTC renBTC 0x68f180fcce6836688e9084f035309e29bf0a2095 0x85f6583762bc76d775eab9a7456db344f12409f7 8 8
34 0x06141423dcf1a5a4c137039063ac873cdc1e363a vAMM-VELO/WETH volatile VELO WETH 0x3c8b650257cfb5f272f799f5e2b4e65093a11a05 0x4200000000000000000000000000000000000006 18 18
35 0xe75a3f4bf99882ad9f8aebab2115873315425d00 sAMM-USDC/alUSD stable USDC alUSD 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0xcb8fa9a76b8e203d8c3797bf438d8fb81ea3326a 6 18
36 0xe2ea57fdf87624f4384ef6da5f3844e8e9e5d878 vAMM-FRAX/FXS volatile FRAX FXS 0x2e3d870790dc77a83dd1d18184acc7439a53f475 0x67ccea5bb16181e7b4109c9c2143c24a1c2205be 18 18
37 0x53bea2d15efe344b054e73209455d2b6aa1c9462 vAMM-OP/sUSD volatile OP sUSD 0x4200000000000000000000000000000000000042 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 18 18
38 0x051a9a47920a913914a9e6e961a230a2a464eeb2 vAMM-VELO/LYRA volatile VELO LYRA 0x3c8b650257cfb5f272f799f5e2b4e65093a11a05 0x50c5725949a6f0c72e6c4a641f24049a917db0cb 18 18
39 0xec24eb97cec2f0f6a2d61254990b0f163bbbfe1d sAMM-sUSD/DAI stable sUSD DAI 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 0xda10009cbd5d07dd0cecc66161fc93d7c9000da1 18 18
40 0x5edac6b8ea08d535c01981d75b3361481c0ee999 sAMM-USDC/USX stable USDC USX 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0xbfd291da8a403daaf7e5e9dc1ec0aceacd4848b9 6 18
41 0xFd7FddFc0A729eCF45fB6B12fA3B71A575E1966F sAMM-WETH/sETH stable WETH sETH 0x4200000000000000000000000000000000000006 0xe405de8f52ba7559f9df3c368500b6e6ae6cee49 18 18
42 0x6580c6ee0bb96651be0aa8db382b48ea7acd077d vAMM-VELO/SNX volatile VELO SNX 0x3c8b650257cfb5f272f799f5e2b4e65093a11a05 0x8700daec35af8ff88c16bdf0418774cb3d7599b4 18 18
43 0x58f98be02c4ffb675af8857013a9c0dfa5750d04 vAMM-WETH/sUSD volatile WETH sUSD 0x4200000000000000000000000000000000000006 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 18 18
44 0x79c912FEF520be002c2B6e57EC4324e260f38E50 vAMM-WETH/USDC volatile WETH USDC 0x4200000000000000000000000000000000000006 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
45 0xe8633ce5d216ebfdddf6875067dfb8397dedcaf3 vAMM-OP/USDC volatile OP USDC 0x4200000000000000000000000000000000000042 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
46 0xe08d427724d8a2673fe0be3a81b7db17be835b36 sAMM-USDC/USDT stable USDC USDT 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0x94b008aa00579c1307b0ef2c499ad98a8ce58e58 6 6
47 0x335bd4ffa921160fc86ce3843f80a9941e7456c6 sAMM-VELO/USDC stable VELO USDC 0x3c8b650257cfb5f272f799f5e2b4e65093a11a05 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
48 0x587233ce63d7c1e081ce9d94d9940544758f6d01 sAMM-FRAX/USDC stable FRAX USDC 0x2e3d870790dc77a83dd1d18184acc7439a53f475 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
49 0xc2058aa3b3f96075cc33946bcd1963bfa660315b sAMM-sUSD/DAI stable sUSD DAI 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 0xda10009cbd5d07dd0cecc66161fc93d7c9000da1 18 18
50 0x557949dde71e88cc2f41d33d341ff42417a35a2d vAMM-VELO/OP volatile VELO OP 0x3c8b650257cfb5f272f799f5e2b4e65093a11a05 0x4200000000000000000000000000000000000042 18 18
51 0x8e6bf020d11e641511bd8b24ee0fab2034e224e5 vAMM-THALES/USDC volatile THALES USDC 0x217d47011b23bb961eb6d93ca9945b7501a5bb11 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
52 0xbe61c199d356d205b3beba3634a7992af5e28631 sAMM-USDC/LUSD stable USDC LUSD 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0xc40F949F8a4e094D1b49a23ea9241D289B7b2819 6 18
53 0x48e18e3d1efa7f0e15f1b2bf01b232534c30a3ef vAMM-WETH/USDC volatile WETH USDC 0x4200000000000000000000000000000000000006 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
54 0x93fc04cd6d108588ecd844c7d60f46635037b5a3 sAMM-USDC/sUSD stable USDC sUSD 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 6 18
55 0xE1224c055c057cb71E41DaC936BA946f6F500eD1 vAMM-OP/USDT volatile OP USDT 0x4200000000000000000000000000000000000042 0x94b008aa00579c1307b0ef2c499ad98a8ce58e58 18 6
56 0xd04f675127d37bf7b009453116c17b7ef088cceb vAMM-VELO/DAI volatile VELO DAI 0x3c8b650257cfb5f272f799f5e2b4e65093a11a05 0xda10009cbd5d07dd0cecc66161fc93d7c9000da1 18 18
57 0x534f3135757db41c4f705b0eac697659f68c4014 vAMM-WETH/DAI volatile WETH DAI 0x4200000000000000000000000000000000000006 0xda10009cbd5d07dd0cecc66161fc93d7c9000da1 18 18
58 0x278631efe7e7b4c2ec49927b255c2ca42be2c1b1 vAMM-WETH/OP volatile WETH OP 0x4200000000000000000000000000000000000006 0x4200000000000000000000000000000000000042 18 18
59 0x3e2882ef90fafab1894bec08f57745a0dd63950a vAMM-VELO/alUSD volatile VELO alUSD 0x3c8b650257cfb5f272f799f5e2b4e65093a11a05 0xcb8fa9a76b8e203d8c3797bf438d8fb81ea3326a 18 18
60 0x265013a5915cebb9344c9e259d531e55855da45d sAMM-LYRA/sUSD stable LYRA sUSD 0x50c5725949a6f0c72e6c4a641f24049a917db0cb 0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9 18 18
61 0xd52b3eac7ef128b879db10ffbd94e29fe65a34d8 vAMM-alETH/WETH volatile alETH WETH 0x3E29D3A9316dAB217754d13b28646B76607c5f04 0x4200000000000000000000000000000000000006 18 18
62 0xcfcf4bb472aa2ad6c82ebef2377a20829b6356ad sAMM-VELO/WETH stable VELO WETH 0x3c8b650257cfb5f272f799f5e2b4e65093a11a05 0x4200000000000000000000000000000000000006 18 18
63 0x34bb604e97604533ab9e42a756c3790910caac87 vAMM-WETH/LYRA volatile WETH LYRA 0x4200000000000000000000000000000000000006 0x50c5725949a6f0c72e6c4a641f24049a917db0cb 18 18
64 0x61eba8151880ea81743795faf3e4042b38e8638c vAMM-sUSD/sETH volatile sUSD sETH 0x50c5725949a6f0c72e6c4a641f24049a917db0cb 0xe405de8f52ba7559f9df3c368500b6e6ae6cee49 18 18
65 0x49b5c691685aaeeaaaff57ab6ccef081a165f5bb vAMM-alETH/OP volatile alETH OP 0x3E29D3A9316dAB217754d13b28646B76607c5f04 0x4200000000000000000000000000000000000042 18 18
66 0xb840adae1a31b52778188b9e948fc79a4bc99d44 sAMM-SNX/sUSD stable SNX sUSD 0x8700daec35af8ff88c16bdf0418774cb3d7599b4 0x50c5725949a6f0c72e6c4a641f24049a917db0cb 18 18
67 0x078f65c0e854ab7fa3baa2cff62a4f9cb4031382 vAMM-USDC/DAI volatile USDC DAI 0x7f5c764cbc14f9669b88837ca1490cca17c31607 0xda10009cbd5d07dd0cecc66161fc93d7c9000da1 6 18
68 0x78fa29412998acedd7728b4cf5623ee5e2f8f589 vAMM-OP/alUSD volatile OP alUSD 0x4200000000000000000000000000000000000042 0xcb8fa9a76b8e203d8c3797bf438d8fb81ea3326a 18 18
69 0x3bbde95b1ed19f8d76252d0b48854d9eaaec3cef vAMM-TAROT/USDC volatile TAROT USDC 0x375488f097176507e39b9653b88fdc52cde736bf 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
70 0xc0d2e721d3d93578f3528d3bedac9a42120aeef7 vAMM-POOL/WETH volatile POOL WETH 0x395ae52bb17aef68c2888d941736a71dc6d4e125 0x4200000000000000000000000000000000000006 18 18
71 0xf8ae1a9ff9f853a7837c251f09befd43abebcf90 vAMM-sETHo/pETHo volatile sETHo pETHo 0x09448876068907827ec15f49a8f1a58c70b04d45 0x6ca558bd3eab53da1b25ab97916dd14bf6cfee4e 18 18
72 0x43e8e67a6e59b372be0d8af48742991b2ae7a2a2 vAMM-SEED/OP volatile SEED OP 0x1ad0abe4fd37e8f1e1b0a018425b5e4eae703304 0x4200000000000000000000000000000000000042 18 18
73 0xaee6477fab80a73abfdab05dab59761fddc0e826 vAMM-SEED-TEST/OP volatile SEED-TEST OP 0x17bcc8f26d44ecfa5f56abebe4ac8bc0ab71069a 0x4200000000000000000000000000000000000042 18 18
74 0x74f66d886f85f424bdd8045c5772c98af84340ff vAMM-TT/OP volatile TT OP 0x1ce444cd37ddbff1ab6a901140d8a5ad3e810118 0x4200000000000000000000000000000000000042 18 18
75 0xd0223f10f3e71ba8af6861f39272f2ac21b5aba5 vAMM-OP/SS volatile OP SS 0x4200000000000000000000000000000000000042 0x8ff13f65f9f0e0b70bf0b15d1d4a5d808c571511 18 18
76 0x651ea5496b6e36120f9bf020ec0ea5cfd31c529c vAMM-PREMIA/WETH volatile PREMIA WETH 0x374ad0f47f4ca39c78e5cc54f1c9e426ff8f231a 0x4200000000000000000000000000000000000006 18 18
77 0x47bc0bdc420475f713ce099647f967f636b1cf70 vAMM-OP/SSHARE-TEST volatile OP SSHARE-TEST 0x4200000000000000000000000000000000000042 0x66bdc9ab6cb33d9cfbe05cc3d3eea69bbd92ae35 18 18
78 0x9629a694c041f3b10ce974dc37ef4dd4596c4f54 vAMM-sETHo/WETH volatile sETHo WETH 0x09448876068907827ec15f49a8f1a58c70b04d45 0x4200000000000000000000000000000000000006 18 18
79 0xcd897440484280c5e0d574cf8e61a67c7e6981ac vAMM-sETHo/WETH volatile sETHo WETH 0x09448876068907827ec15f49a8f1a58c70b04d45 0x4200000000000000000000000000000000000006 18 18
80 0x657e6eebd71ac90a91173b786c099e71e37a75ff vAMM-UNLOCK/USDC volatile UNLOCK USDC 0x7ae97042a4a0eb4d1eb370c34bfec71042a056b7 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
81 0x3bbde95b1ed19f8d76252d0b48854d9eaaec3cef vAMM-TAROT/USDC volatile TAROT USDC 0x375488f097176507e39b9653b88fdc52cde736bf 0x7f5c764cbc14f9669b88837ca1490cca17c31607 18 6
82 0xe957ac5fc6b93227bf7fe0b32798e58b7a044252 vAMM-OP/SSHARE volatile OP SSHARE 0x4200000000000000000000000000000000000042 0x74af59598ec0c1771d0a7797eba4a2c073d8d253 18 18
83 0xd2d631d8d887e3d18a623e8eb9e4f9ca97b3372a vAMM-USDT/MYERC20 volatile USDT MYERC20 0x94b008aa00579c1307b0ef2c499ad98a8ce58e58 0x9a45dc286b8b9e1429a312220685529e6a32702c 6 18

View File

@ -29,7 +29,7 @@ tests:
on-run-start:
- "{{ create_sps() }}"
- "{{ create_udfs() }}"
# - "{{ create_udfs() }}"
on-run-end:
- '{{ apply_meta_as_tags(results) }}'

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,13 +1,8 @@
{% macro create_udfs() %}
{% if var("UPDATE_UDFS_AND_SPS") %}
{% set sql %}
CREATE schema if NOT EXISTS silver;
{{ create_js_hex_to_int() }};
{{ create_udf_hex_to_int(
schema = "public"
) }}
{% endset %}
{% do run_query(sql) %}
{% endif %}
{% endmacro %}
-- {% macro create_udfs() %}
-- {% if var("UPDATE_UDFS_AND_SPS") %}
-- {% set sql %}
-- CREATE schema if NOT EXISTS silver;
-- {% endset %}
-- {% do run_query(sql) %}
-- {% endif %}
-- {% endmacro %}

View File

@ -1,6 +0,0 @@
{% macro create_js_hex_to_int() %}
CREATE
OR REPLACE FUNCTION {{ target.schema }}.js_hex_to_int (
s STRING
) returns DOUBLE LANGUAGE javascript AS 'if (S !== null) { yourNumber = parseInt(S, 16); } return yourNumber'
{% endmacro %}

View File

@ -1,21 +0,0 @@
{% macro create_udf_hex_to_int(schema) %}
create or replace function {{ schema }}.udf_hex_to_int(hex string)
returns string
language python
runtime_version = '3.8'
handler = 'hex_to_int'
as
$$
def hex_to_int(hex) -> str:
"""
Converts hex (of any size) to int (as a string). Snowflake and java script can only handle up to 64-bit (38 digits of precision)
select hex_to_int('200000000000000000000000000000211');
>> 680564733841876926926749214863536423441
select hex_to_int('0x200000000000000000000000000000211');
>> 680564733841876926926749214863536423441
select hex_to_int(NULL);
>> NULL
"""
return str(int(hex, 16)) if hex else None
$$;
{% endmacro %}

View File

@ -0,0 +1,6 @@
{% docs eth_ez_dex_swaps_table_doc %}
This table currently contains swap events from the ```fact_event_logs``` table for Velodrome and SushiSwap along with other helpful columns including an amount USD where possible. Other dexes coming soon!
Note: A rule has been put in place to null out the amount_USD if that number is too divergent between amount_in_USD and amount_out_usd. This can happen for swaps of less liquid tokens during very high fluctuation of price.
{% enddocs %}

View File

@ -58,8 +58,6 @@ The dimension tables are sourced from a variety of on-chain and off-chain source
Convenience views (denoted ez_) are a combination of different fact and dimension tables.
A user-defined-function (UDF) is available to decode hex encoded values to integers in this database. You can call this UDF by using `optimism.public.udf_hex_to_int(FIELD)`.
## **Using dbt docs**
### Navigation

View File

@ -1,5 +1,5 @@
{% docs opt_traces_table_doc %}
This table contains flattened trace data for internal contract calls on the Optimism Blockchain. Hex encoded fields can be decoded to integers by using `ethereum.public.udf_hex_to_int()`.
This table contains flattened trace data for internal contract calls on the Optimism Blockchain. Hex encoded fields can be decoded to integers by using `ethereum.ethereum.public.udf_hex_to_int()`.
{% enddocs %}

View File

@ -0,0 +1,372 @@
{{ config(
materialized = 'view',
persist_docs ={ "relation": true,
"columns": true },
meta={
'database_tags':{
'table': {
'PROTOCOL': 'SUSHI, UNISWAP, CURVE, SYNTHETIX, VELODROME',
'PURPOSE': 'DEX, SWAPS'
}
}
}
) }}
WITH velodrome_swaps AS (
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
pool_name,
CASE
WHEN event_name IS NULL THEN 'Swap'
ELSE event_name
END AS event_name,
amount_in,
amount_in_usd,
amount_out,
amount_out_usd,
sender_address AS sender,
to_address AS tx_to,
event_index,
platform,
token_address_in AS token_in,
token_address_out AS token_out,
symbol_in,
symbol_out,
_log_id
FROM
{{ ref('velodrome__ez_swaps') }}
),
sushi_swaps AS (
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
pool_name,
CASE
WHEN event_name IS NULL THEN 'Swap'
ELSE event_name
END AS event_name,
amount_in,
amount_in_usd,
amount_out,
amount_out_usd,
origin_from_address AS sender,
tx_to,
event_index,
platform,
token_in,
token_out,
symbol_in,
symbol_out,
_log_id
FROM
{{ ref('sushi__ez_swaps') }}
),
synthetix_swaps AS (
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
pool_name,
CASE
WHEN event_name IS NULL THEN 'Swap'
ELSE event_name
END AS event_name,
amount_in,
amount_in_usd,
amount_out,
amount_out_usd,
sender,
tx_to,
event_index,
platform,
token_in,
token_out,
symbol_in,
symbol_out,
_log_id
FROM
{{ ref('silver_dex__synthetix_swaps') }}
),
univ3_swaps AS (
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
pool_address AS contract_address,
pool_name,
'Swap' AS event_name,
CASE
WHEN amount0_unadj > 0 THEN ABS(amount0_adjusted)
ELSE ABS(amount1_adjusted)
END AS amount_in,
CASE
WHEN amount0_unadj > 0 THEN ABS(amount0_usd)
ELSE ABS(amount1_usd)
END AS amount_in_usd,
CASE
WHEN amount0_unadj < 0 THEN ABS(amount0_adjusted)
ELSE ABS(amount1_adjusted)
END AS amount_out,
CASE
WHEN amount0_unadj < 0 THEN ABS(amount0_usd)
ELSE ABS(amount1_usd)
END AS amount_out_usd,
sender,
recipient AS tx_to,
event_index,
'uniswap-v3' AS platform,
CASE
WHEN amount0_unadj > 0 THEN token0_address
ELSE token1_address
END AS token_in,
CASE
WHEN amount0_unadj < 0 THEN token0_address
ELSE token1_address
END AS token_out,
CASE
WHEN amount0_unadj > 0 THEN token0_symbol
ELSE token1_symbol
END AS symbol_in,
CASE
WHEN amount0_unadj < 0 THEN token0_symbol
ELSE token1_symbol
END AS symbol_out,
_log_id
FROM
{{ ref('silver_dex__univ3_swaps') }}
),
curve_swaps AS (
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
pool_name,
CASE
WHEN event_name IS NULL THEN 'Swap'
ELSE event_name
END AS event_name,
amount_in,
amount_in_usd,
amount_out,
amount_out_usd,
sender,
tx_to,
event_index,
platform,
token_in,
token_out,
symbol_in,
symbol_out,
_log_id
FROM
{{ ref('silver_dex__curve_swaps') }}
),
beethovenx_swaps AS (
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
pool_name,
CASE
WHEN event_name IS NULL THEN 'Swap'
ELSE event_name
END AS event_name,
amount_in,
amount_in_usd,
amount_out,
amount_out_usd,
sender,
tx_to,
event_index,
platform,
token_in,
token_out,
symbol_in,
symbol_out,
_log_id
FROM
{{ ref('silver_dex__beethovenx_swaps') }}
)
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
pool_name,
event_name,
amount_in,
amount_in_usd,
amount_out,
amount_out_usd,
sender,
tx_to,
event_index,
platform,
token_in,
token_out,
symbol_in,
symbol_out,
_log_id
FROM
velodrome_swaps
UNION ALL
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
pool_name,
event_name,
amount_in,
amount_in_usd,
amount_out,
amount_out_usd,
sender,
tx_to,
event_index,
platform,
token_in,
token_out,
symbol_in,
symbol_out,
_log_id
FROM
sushi_swaps
UNION ALL
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
pool_name,
event_name,
amount_in,
amount_in_usd,
amount_out,
amount_out_usd,
sender,
tx_to,
event_index,
platform,
token_in,
token_out,
symbol_in,
symbol_out,
_log_id
FROM
synthetix_swaps
UNION ALL
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
pool_name,
event_name,
amount_in,
amount_in_usd,
amount_out,
amount_out_usd,
sender,
tx_to,
event_index,
platform,
token_in,
token_out,
symbol_in,
symbol_out,
_log_id
FROM
univ3_swaps
UNION ALL
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
pool_name,
event_name,
amount_in,
amount_in_usd,
amount_out,
amount_out_usd,
sender,
tx_to,
event_index,
platform,
token_in,
token_out,
symbol_in,
symbol_out,
_log_id
FROM
curve_swaps
UNION ALL
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
pool_name,
event_name,
amount_in,
amount_in_usd,
amount_out,
amount_out_usd,
sender,
tx_to,
event_index,
platform,
token_in,
token_out,
symbol_in,
symbol_out,
_log_id
FROM
beethovenx_swaps

View File

@ -0,0 +1,152 @@
version: 2
models:
- name: core__ez_dex_swaps
description: '{{ doc("eth_ez_dex_swaps_table_doc") }}'
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- _LOG_ID
columns:
- name: BLOCK_NUMBER
description: '{{ doc("opt_block_number") }}'
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- NUMBER
- FLOAT
- name: BLOCK_TIMESTAMP
description: '{{ doc("opt_block_timestamp") }}'
tests:
- not_null
- dbt_expectations.expect_row_values_to_have_recent_data:
datepart: day
interval: 1
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- TIMESTAMP_NTZ
- name: TX_HASH
description: '{{ doc("opt_logs_tx_hash") }}'
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- name: CONTRACT_ADDRESS
description: '{{ doc("opt_logs_contract_address") }}'
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- name: EVENT_NAME
description: '{{ doc("opt_event_name") }}'
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- not_null
- name: AMOUNT_IN
description: '{{ doc("eth_dex_swaps_amount_in") }}'
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- NUMBER
- FLOAT
- name: AMOUNT_OUT
description: '{{ doc("eth_dex_swaps_amount_out") }}'
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- NUMBER
- FLOAT
- name: AMOUNT_IN_USD
description: '{{ doc("eth_dex_swaps_amount_in_usd") }}'
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- NUMBER
- FLOAT
- name: AMOUNT_OUT_USD
description: '{{ doc("eth_dex_swaps_amount_out_usd") }}'
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- NUMBER
- FLOAT
- name: TOKEN_IN
description: '{{ doc("eth_dex_swaps_token_in") }}'
tests:
- not_null:
where: PLATFORM <> 'uniswap-v3'
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- name: TOKEN_OUT
description: '{{ doc("eth_dex_swaps_token_out") }}'
tests:
- not_null:
where: PLATFORM <> 'uniswap-v3'
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- name: SYMBOL_IN
description: '{{ doc("eth_dex_swaps_symbol_in") }}'
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: SYMBOL_OUT
description: '{{ doc("eth_dex_swaps_symbol_out") }}'
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: SENDER
description: '{{ doc("eth_dex_swaps_sender") }}'
tests:
- not_null:
where: BLOCK_TIMESTAMP > '2021-08-01'
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- name: TX_TO
description: '{{ doc("eth_dex_swaps_tx_to") }}'
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
enabled: False
- name: PLATFORM
description: '{{ doc("eth_dex_platform") }}'
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: EVENT_INDEX
description: '{{ doc("opt_event_index") }}'
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- NUMBER
- FLOAT
- name: _LOG_ID
description: '{{ doc("opt_log_id_events") }}'
tests:
- not_null
- name: ORIGIN_FUNCTION_SIGNATURE
description: '{{ doc("opt_tx_origin_sig") }}'
tests:
- not_null
- name: ORIGIN_FROM_ADDRESS
description: '{{ doc("opt_origin_from") }}'
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- name: ORIGIN_TO_ADDRESS
description: '{{ doc("opt_origin_to") }}'
tests:
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+

View File

@ -0,0 +1,154 @@
{{ config(
materialized = 'incremental',
unique_key = "pool_address",
) }}
WITH pool_creation AS (
SELECT
tx_hash,
topics [1] :: STRING AS pool_id,
SUBSTR(topics [1] :: STRING,1,42) AS pool_address,
block_number,
_inserted_timestamp
FROM
{{ ref('silver__logs') }}
WHERE
topics[0]::STRING = '0x3c13bc30b8e878c53fd2a36b679409c073afd75950be43d8858768e956fbc20e'
AND contract_address = '0xba12222222228d8ba445958a75a0704d566bf2c8'
{% if is_incremental() %}
AND pool_address NOT IN (
SELECT
DISTINCT pool_address
FROM
{{ this }}
)
{% endif %}
),
function_sigs AS (
SELECT
'0x06fdde03' AS function_sig,
'name' AS function_name
UNION ALL
SELECT
'0x95d89b41' AS function_sig,
'symbol' AS function_name
UNION ALL
SELECT
'0x313ce567' AS function_sig,
'decimals' AS function_name
),
inputs_pools AS (
SELECT
pool_address,
block_number,
function_sig,
(ROW_NUMBER() OVER (PARTITION BY pool_address
ORDER BY block_number)) - 1 AS function_input
FROM pool_creation
JOIN function_sigs ON 1=1
),
ready_reads_pools AS (
SELECT
pool_address,
block_number,
function_sig,
function_input,
CONCAT(
'[\'',
pool_address,
'\',',
block_number,
',\'',
function_sig,
'\',\'',
function_input,
'\']'
) AS read_input
FROM inputs_pools
),
batch_reads_pools AS (
SELECT
CONCAT('[', LISTAGG(read_input, ','), ']') AS batch_read
FROM
ready_reads_pools
),
pool_token_reads AS (
SELECT
ethereum.streamline.udf_json_rpc_read_calls(
node_url,
headers,
PARSE_JSON(batch_read)
) AS read_output,
SYSDATE() AS _inserted_timestamp
FROM
batch_reads_pools
JOIN streamline.crosschain.node_mapping ON 1=1
AND chain = 'optimism'
WHERE
EXISTS (
SELECT
1
FROM
ready_reads_pools
LIMIT
1
)
),
reads_adjusted AS (
SELECT
VALUE :id :: STRING AS read_id,
VALUE :result :: STRING AS read_result,
SPLIT(
read_id,
'-'
) AS read_id_object,
read_id_object [0] :: STRING AS pool_address,
read_id_object [1] :: STRING AS block_number,
read_id_object [2] :: STRING AS function_sig,
read_id_object [3] :: STRING AS function_input,
_inserted_timestamp
FROM
pool_token_reads,
LATERAL FLATTEN(
input => read_output [0] :data
)
),
pool_details AS (
SELECT
pool_address,
function_sig,
function_name,
read_result,
regexp_substr_all(SUBSTR(read_result, 3, len(read_result)), '.{64}') AS segmented_output,
_inserted_timestamp
FROM reads_adjusted
LEFT JOIN function_sigs USING(function_sig)
)
SELECT
pool_address,
MIN(CASE WHEN function_name = 'symbol' THEN TRY_HEX_DECODE_STRING(segmented_output [2] :: STRING) END) AS pool_symbol,
MIN(CASE WHEN function_name = 'name' THEN TRY_HEX_DECODE_STRING(segmented_output [2] :: STRING) END) AS pool_name,
MIN(CASE
WHEN read_result::STRING = '0x' THEN NULL
ELSE ethereum.public.udf_hex_to_int(read_result::STRING)
END)::INTEGER AS pool_decimals,
MAX(_inserted_timestamp) AS _inserted_timestamp
FROM pool_details
GROUP BY 1

View File

@ -0,0 +1,29 @@
version: 2
models:
- name: silver_dex__beethovenx_pools
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- POOL_ADDRESS
columns:
- name: POOL_ADDRESS
tests:
- not_null
- name: POOL_SYMBOL
tests:
- not_null
- name: POOL_NAME
tests:
- not_null
- name: POOL_DECIMALS
tests:
- not_null
- name: _INSERTED_TIMESTAMP
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- TIMESTAMP_NTZ

View File

@ -0,0 +1,173 @@
{{ config(
materialized = 'incremental',
unique_key = '_log_id',
cluster_by = ['block_timestamp::DATE']
) }}
WITH pool_name AS (
SELECT
CONCAT(pool_name,' (',pool_symbol,')') AS pool_name,
pool_address
FROM
{{ ref('silver_dex__beethovenx_pools') }}
),
swaps_base AS (
SELECT
tx_hash,
block_number,
block_timestamp,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
_inserted_timestamp,
event_name,
event_index,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
(CASE
WHEN segmented_data [0] = '0x' THEN NULL
ELSE ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
)
END) :: INTEGER AS amount_in_unadj,
(CASE
WHEN segmented_data [1] = '0x' THEN NULL
ELSE ethereum.public.udf_hex_to_int(
segmented_data [1] :: STRING
)
END) :: INTEGER AS amount_out_unadj,
topics [1] :: STRING AS pool_id,
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS token_in,
CONCAT('0x', SUBSTR(topics [3] :: STRING, 27, 40)) AS token_out,
SUBSTR(topics [1] :: STRING,1,42) AS pool_address,
_log_id,
ingested_at,
'beethoven-x' AS platform,
origin_from_address AS sender,
origin_from_address AS tx_to
FROM
{{ ref('silver__logs') }}
WHERE
topics[0]::STRING = '0x2170c741c41531aec20e7c107c24eecfdd15e69c9bb0a8dd37b1840b9e0b207b'
AND contract_address = '0xba12222222228d8ba445958a75a0704d566bf2c8'
{% if is_incremental() %}
AND _inserted_timestamp >= (
SELECT
MAX(_inserted_timestamp) :: DATE - 2
FROM
{{ this }}
)
{% endif %}
),
contracts AS (
SELECT
*
FROM
{{ ref('core__dim_contracts') }}
WHERE
decimals IS NOT NULL
AND
address IN (
SELECT
DISTINCT token_in AS address
FROM
swaps_base
UNION
SELECT
DISTINCT token_out AS address
FROM
swaps_base
)
),
hourly_token_price AS (
SELECT
hour,
token_address,
price
FROM
{{ ref('silver__prices') }}
WHERE
token_address IN (
SELECT
DISTINCT address
FROM
contracts
)
AND hour :: DATE IN (
SELECT
DISTINCT block_timestamp :: DATE
FROM
swaps_base
)
)
SELECT
tx_hash,
block_number,
block_timestamp,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
_inserted_timestamp,
s.event_name,
event_index,
amount_in_unadj,
c1.decimals AS decimals_in,
c1.symbol AS symbol_in,
CASE
WHEN decimals_in IS NULL THEN amount_in_unadj
ELSE (amount_in_unadj / pow(10, decimals_in))
END AS amount_in,
CASE
WHEN decimals_in IS NOT NULL THEN ROUND(
amount_in * p1.price,
2
)
END AS amount_in_usd,
amount_out_unadj,
c2.decimals AS decimals_out,
c2.symbol AS symbol_out,
CASE
WHEN decimals_out IS NULL THEN amount_out_unadj
ELSE (amount_out_unadj / pow(10, decimals_out))
END AS amount_out,
CASE
WHEN decimals_out IS NOT NULL THEN ROUND(
amount_out * p2.price,
2
)
END AS amount_out_usd,
s.pool_id,
token_in,
token_out,
s.pool_address,
s._log_id,
s.ingested_at,
s.platform,
sender,
tx_to,
pool_name
FROM
swaps_base s
LEFT JOIN contracts c1
ON token_in = c1.address
LEFT JOIN contracts c2
ON token_out = c2.address
LEFT JOIN hourly_token_price p1
ON token_in = p1.token_address
AND DATE_TRUNC(
'hour',
block_timestamp
) = p1.hour
LEFT JOIN hourly_token_price p2
ON token_out = p2.token_address
AND DATE_TRUNC(
'hour',
block_timestamp
) = p2.hour
LEFT JOIN pool_name pn
ON pn.pool_address = s.pool_address
WHERE
pool_name IS NOT NULL

View File

@ -0,0 +1,75 @@
version: 2
models:
- name: silver_dex__beethovenx_swaps
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- _log_id
columns:
- name: AMOUNT_IN
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: AMOUNT_IN_USD
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: AMOUNT_OUT
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: AMOUNT_OUT_USD
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: TOKEN_IN
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- name: TOKEN_OUT
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- name: BLOCK_TIMESTAMP
tests:
- not_null
- dbt_expectations.expect_row_values_to_have_recent_data:
datepart: day
interval: 1
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- TIMESTAMP_NTZ
- name: EVENT_INDEX
tests:
- not_null
- name: POOL_ADDRESS
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- name: POOL_NAME
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- varchar
- name: SENDER
tests:
- not_null
- name: TX_TO
tests:
- not_null
- name: TX_HASH
tests:
- not_null

View File

@ -0,0 +1,251 @@
{{ config(
materialized = 'incremental',
unique_key = "pool_id"
) }}
WITH contract_deployments AS (
SELECT
a.tx_hash AS tx_hash,
a.block_number AS block_number,
a.block_timestamp AS block_timestamp,
a.from_address AS deployer_address,
a.to_address AS contract_address,
a._inserted_timestamp AS _inserted_timestamp
FROM
{{ ref('silver__traces' )}} a
WHERE
-- curve contract deployers
a.from_address IN (
'0x2db0e83599a91b508ac268a6197b8b14f5e72840',
'0x7eeac6cddbd1d0b8af061742d41877d7f707289a',
'0x745748bcfd8f9c2de519a71d789be8a63dd7d66c')
AND TYPE ilike 'create%'
AND TX_STATUS ilike 'success'
{% if is_incremental() %}
AND a.to_address NOT IN (
SELECT
DISTINCT pool_address
FROM
{{ this }}
)
{% endif %}
QUALIFY(ROW_NUMBER() OVER(PARTITION BY a.to_address ORDER BY block_timestamp ASC)) = 1
),
function_sigs AS (
SELECT
'0xc6610657' AS function_sig,
'coins' AS function_name
UNION ALL
SELECT
'0x06fdde03' AS function_sig,
'name' AS function_name
UNION ALL
SELECT
'0x95d89b41' AS function_sig,
'symbol' AS function_name
UNION ALL
SELECT
'0x313ce567' AS function_sig,
'decimals' AS function_name
),
function_inputs AS (
SELECT
SEQ4() AS function_input
FROM
TABLE(GENERATOR(rowcount => 4))
),
inputs_coins AS (
SELECT
deployer_address,
contract_address,
block_number,
function_sig,
(ROW_NUMBER() OVER (PARTITION BY contract_address
ORDER BY block_number)) - 1 AS function_input
FROM contract_deployments
JOIN function_sigs ON 1=1
JOIN function_inputs ON 1=1
WHERE function_name = 'coins'
),
inputs_pool_details AS (
SELECT
deployer_address,
contract_address,
block_number,
function_sig,
NULL AS function_input
FROM contract_deployments
JOIN function_sigs ON 1=1
WHERE function_name IN ('name','symbol','decimals')
),
all_inputs AS (
SELECT
deployer_address,
contract_address,
block_number,
function_sig,
function_input
FROM inputs_coins
UNION ALL
SELECT
deployer_address,
contract_address,
block_number,
function_sig,
function_input
FROM inputs_pool_details
),
ready_reads_pools AS (
SELECT
deployer_address,
contract_address,
block_number,
function_sig,
function_input,
CONCAT(
'[\'',
contract_address,
'\',',
block_number,
',\'',
function_sig,
'\',\'',
(CASE WHEN function_input IS NULL THEN '' ELSE function_input::STRING END),
'\']'
) AS read_input
FROM all_inputs
),
batch_reads_pools AS (
SELECT
CONCAT('[', LISTAGG(read_input, ','), ']') AS batch_read
FROM
ready_reads_pools
),
pool_token_reads AS (
SELECT
ethereum.streamline.udf_json_rpc_read_calls(
node_url,
headers,
PARSE_JSON(batch_read)
) AS read_output,
SYSDATE() AS _inserted_timestamp
FROM
batch_reads_pools
JOIN streamline.crosschain.node_mapping ON 1=1
AND chain = 'optimism'
WHERE
EXISTS (
SELECT
1
FROM
ready_reads_pools
LIMIT
1
)
),
reads_adjusted AS (
SELECT
VALUE :id :: STRING AS read_id,
VALUE :result :: STRING AS read_result,
SPLIT(
read_id,
'-'
) AS read_id_object,
read_id_object [0] :: STRING AS contract_address,
read_id_object [1] :: STRING AS block_number,
read_id_object [2] :: STRING AS function_sig,
read_id_object [3] :: STRING AS function_input,
_inserted_timestamp
FROM
pool_token_reads,
LATERAL FLATTEN(
input => read_output [0] :data
)
),
tokens AS (
SELECT
contract_address,
function_sig,
function_name,
read_result,
regexp_substr_all(SUBSTR(read_result, 3, len(read_result)), '.{64}')[0]AS segmented_token_address,
_inserted_timestamp
FROM reads_adjusted
LEFT JOIN function_sigs USING(function_sig)
WHERE read_result IS NOT NULL
AND function_name = 'coins'
),
pool_details AS (
SELECT
contract_address,
function_sig,
function_name,
read_result,
regexp_substr_all(SUBSTR(read_result, 3, len(read_result)), '.{64}') AS segmented_output,
_inserted_timestamp
FROM reads_adjusted
LEFT JOIN function_sigs USING(function_sig)
WHERE read_result IS NOT NULL
AND function_name IN ('name','symbol','decimals')
),
FINAL AS (
SELECT
t.contract_address AS pool_address,
CONCAT('0x',SUBSTRING(t.segmented_token_address,25,40)) AS token_address,
MIN(CASE WHEN p.function_name = 'symbol' THEN TRY_HEX_DECODE_STRING(RTRIM(p.segmented_output [2] :: STRING, 0)) END) AS pool_symbol,
MIN(CASE WHEN p.function_name = 'name' THEN CONCAT(TRY_HEX_DECODE_STRING(p.segmented_output [2] :: STRING),
TRY_HEX_DECODE_STRING(segmented_output [3] :: STRING)) END) AS pool_name,
MIN(CASE
WHEN p.read_result::STRING = '0x' THEN NULL
ELSE ethereum.public.udf_hex_to_int(p.read_result::STRING)
END)::INTEGER AS pool_decimals,
CONCAT(
t.contract_address,
'-',
CONCAT('0x',SUBSTRING(t.segmented_token_address,25,40))
) AS pool_id,
MAX(t._inserted_timestamp) AS _inserted_timestamp
FROM tokens t
LEFT JOIN pool_details p ON t.contract_address = p.contract_address
WHERE token_address IS NOT NULL
AND token_address <> '0x0000000000000000000000000000000000000000'
GROUP BY 1,2
)
SELECT
pool_address,
CASE
WHEN token_address = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' THEN '0x4200000000000000000000000000000000000006'
ELSE token_address
END AS token_address,
CASE
WHEN token_address = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' THEN 'WETH'
ELSE pool_symbol
END AS pool_symbol,
pool_name,
pool_decimals,
pool_id,
_inserted_timestamp
FROM FINAL

View File

@ -0,0 +1,29 @@
version: 2
models:
- name: silver_dex__curve_pools
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- POOL_ID
columns:
- name: POOL_ADDRESS
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- varchar
- name: TOKEN_ADDRESS
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- varchar
- name: POOL_SYMBOL
- name: POOL_NAME
- name: POOL_DECIMALS
- name: _INSERTED_TIMESTAMP

View File

@ -0,0 +1,261 @@
{{ config(
materialized = 'incremental',
unique_key = "_log_id",
cluster_by = ['block_timestamp::DATE']
) }}
WITH pool_meta AS (
SELECT
DISTINCT pool_address,
CASE
WHEN pool_name IS NULL AND pool_symbol IS NULL THEN CONCAT('Curve.fi Pool: ',SUBSTRING(pool_address, 1, 5),'...',SUBSTRING(pool_address, 39, 42))
WHEN pool_name IS NULL THEN CONCAT('Curve.fi Pool: ',pool_symbol)
ELSE pool_name
END AS pool_name
FROM
{{ ref('silver_dex__curve_pools') }}
),
curve_base AS (
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
event_index,
event_name,
contract_address AS pool_address,
pool_name,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS sender,
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS recipient,
ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
) :: INTEGER AS sold_id,
ethereum.public.udf_hex_to_int(
segmented_data [1] :: STRING
) :: INTEGER AS tokens_sold,
ethereum.public.udf_hex_to_int(
segmented_data [2] :: STRING
) :: INTEGER AS bought_id,
ethereum.public.udf_hex_to_int(
segmented_data [3] :: STRING
) :: INTEGER AS tokens_bought,
_log_id,
_inserted_timestamp
FROM
{{ ref('silver__logs') }}
INNER JOIN pool_meta
ON pool_meta.pool_address = contract_address
WHERE
topics [0] :: STRING IN (
'0x8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd97140',
'0xd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b'
)
{% if is_incremental() %}
AND _inserted_timestamp >= (
SELECT
MAX(_inserted_timestamp) :: DATE - 2
FROM
{{ this }}
)
{% endif %}
),
token_transfers AS (
SELECT
tx_hash,
contract_address AS token_address,
TRY_TO_NUMBER(
CASE
WHEN DATA :: STRING = '0x' THEN NULL
ELSE ethereum.public.udf_hex_to_int(
DATA :: STRING
) END ) AS amount,
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS from_address,
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS to_address
FROM
{{ ref('silver__logs') }}
WHERE
topics [0] :: STRING = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'
AND tx_hash IN (
SELECT
DISTINCT tx_hash
FROM
curve_base
)
--AND CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) <> '0x0000000000000000000000000000000000000000'
AND CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) <> '0x0000000000000000000000000000000000000000'
{% if is_incremental() %}
AND _inserted_timestamp >= (
SELECT
MAX(_inserted_timestamp) :: DATE - 2
FROM
{{ this }}
)
{% endif %}
),
from_transfers AS (
SELECT
DISTINCT tx_hash,
token_address,
from_address,
amount
FROM
token_transfers
),
to_transfers AS (
SELECT
DISTINCT tx_hash,
token_address,
to_address,
amount
FROM
token_transfers
),
pool_info AS (
SELECT
s.block_number,
s.block_timestamp,
s.tx_hash,
s.origin_function_signature,
s.origin_from_address,
s.origin_to_address,
CASE
WHEN s.recipient IS NULL THEN s.origin_from_address
ELSE s.recipient
END AS tx_to,
event_index,
event_name,
pool_address,
pool_address AS contract_address,
pool_name,
sender,
sold_id,
tokens_sold,
sold.token_address AS token_in,
c0.symbol symbol_in,
c0.decimals AS decimals_in,
CASE
WHEN decimals_in IS NOT NULL THEN tokens_sold / pow(
10,
decimals_in
)
ELSE tokens_sold
END AS amount_in,
bought_id,
tokens_bought,
bought.token_address AS token_out,
c1.symbol AS symbol_out,
c1.decimals AS decimals_out,
CASE
WHEN decimals_out IS NOT NULL THEN tokens_bought / pow(
10,
decimals_out
)
ELSE tokens_bought
END AS amount_out,
_log_id,
_inserted_timestamp
FROM
curve_base s
LEFT JOIN from_transfers sold
ON tokens_sold = sold.amount
AND s.tx_hash = sold.tx_hash
LEFT JOIN to_transfers bought
ON tokens_bought = bought.amount
AND s.tx_hash = bought.tx_hash
LEFT JOIN {{ ref('core__dim_contracts') }}
c0
ON c0.address = sold.token_address
LEFT JOIN {{ ref('core__dim_contracts') }}
c1
ON c1.address = bought.token_address
WHERE
tokens_sold <> 0
AND symbol_out <> symbol_in qualify(ROW_NUMBER() over(PARTITION BY _log_id
ORDER BY
_inserted_timestamp DESC)) = 1
),
prices AS (
SELECT
hour,
token_address,
price
FROM
{{ ref('silver__prices') }}
WHERE
hour :: DATE IN (
SELECT
DISTINCT block_timestamp :: DATE
FROM
curve_base
)
AND LOWER(token_address) IN (
SELECT
DISTINCT token_in AS token_address
FROM
pool_info
UNION
SELECT
DISTINCT token_out AS token_address
FROM
pool_info
)
)
SELECT
block_number,
block_timestamp,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
tx_hash,
event_index,
event_name,
tx_to,
pool_address,
pool_name,
sender,
decimals_in,
symbol_in,
token_in,
amount_in,
decimals_out,
symbol_out,
token_out,
amount_out,
CASE
WHEN decimals_in IS NOT NULL THEN ROUND(
amount_in * p0.price,
2
)
END AS amount_in_usd,
CASE
WHEN decimals_out IS NOT NULL THEN ROUND(
amount_out * p1.price,
2
)
END AS amount_out_usd,
_log_id,
_inserted_timestamp,
'curve' AS platform
FROM
pool_info
LEFT JOIN prices p0
ON p0.hour = DATE_TRUNC(
'hour',
block_timestamp
)
AND p0.token_address = token_in
LEFT JOIN prices p1
ON p1.hour = DATE_TRUNC(
'hour',
block_timestamp
)
AND p1.token_address = token_out

View File

@ -0,0 +1,68 @@
version: 2
models:
- name: silver_dex__curve_swaps
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- _log_id
columns:
- name: AMOUNT_IN
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: AMOUNT_IN_USD
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: AMOUNT_OUT
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: AMOUNT_OUT_USD
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: BLOCK_TIMESTAMP
tests:
- not_null
- dbt_expectations.expect_row_values_to_have_recent_data:
datepart: day
interval: 1
- name: EVENT_INDEX
tests:
- not_null
- name: POOL_ADDRESS
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- name: POOL_NAME
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- varchar
- name: SENDER
tests:
- not_null
- name: TX_TO
tests:
- not_null
- name: TOKEN_IN
tests:
- not_null
- name: TOKEN_OUT
tests:
- not_null
- name: TX_HASH
tests:
- not_null

View File

@ -0,0 +1,142 @@
{{ config(
materialized = 'incremental',
unique_key = "_log_id",
cluster_by = ['block_timestamp::DATE']
) }}
WITH swaps_base AS (
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
NULL AS pool_name,
'Swap' AS event_name,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
(CASE
WHEN segmented_data [1] = '0x' THEN NULL
ELSE ethereum.public.udf_hex_to_int(
segmented_data [1] :: STRING
)
END) :: INTEGER / 1e18 AS amount_in,
(CASE
WHEN segmented_data [3] = '0x' THEN NULL
ELSE ethereum.public.udf_hex_to_int(
segmented_data [3] :: STRING
)
END) :: INTEGER / 1e18 AS amount_out,
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS sender,
CONCAT('0x',SUBSTR(segmented_data [4] :: STRING, 25, 40)) AS tx_to,
event_index,
'synthetix' AS platform,
REGEXP_REPLACE(HEX_DECODE_STRING(segmented_data [0] :: STRING),'[^a-zA-Z0-9]+') AS symbol_in,
REGEXP_REPLACE(HEX_DECODE_STRING(segmented_data [2] :: STRING),'[^a-zA-Z0-9]+') AS symbol_out,
CONCAT(tx_hash,'-',event_index) AS _log_id,
event_inputs,
_inserted_timestamp
FROM
{{ ref('silver__logs') }}
WHERE
contract_address IN (
'0x8700daec35af8ff88c16bdf0418774cb3d7599b4'
)
AND topics[0] = '0x65b6972c94204d84cffd3a95615743e31270f04fdf251f3dccc705cfbad44776'
{% if is_incremental() %}
AND _inserted_timestamp >= (
SELECT
MAX(_inserted_timestamp) :: DATE - 2
FROM
{{ this }}
)
{% endif %}
),
swaps_with_token_addresses AS (
SELECT
b.*,
synth_symbol_in,
LOWER(token_in) AS token_in,
synth_symbol_out,
LOWER(token_out) AS token_out
FROM
swaps_base b
LEFT JOIN (
SELECT
synth_symbol AS synth_symbol_in,
synth_proxy_address AS token_in
FROM
{{ ref('silver__synthetix_synths') }}
) synths_in
ON synths_in.synth_symbol_in = b.symbol_in
LEFT JOIN (
SELECT
synth_symbol AS synth_symbol_out,
synth_proxy_address AS token_out
FROM
{{ ref('silver__synthetix_synths') }}
) synths_out
ON synths_out.synth_symbol_out = b.symbol_out
),
hourly_prices AS (
SELECT
hour,
token_address,
price
FROM
{{ ref('silver__prices') }}
WHERE hour :: DATE IN (
SELECT
DISTINCT block_timestamp :: DATE
FROM
swaps_base
)
AND LOWER(token_address) IN (
SELECT
DISTINCT token_in AS token_address
FROM swaps_with_token_addresses
UNION
SELECT
DISTINCT token_out AS token_address
FROM swaps_with_token_addresses
)
)
SELECT
block_number,
block_timestamp,
tx_hash,
origin_function_signature,
origin_from_address,
origin_to_address,
contract_address,
pool_name,
event_name,
amount_in,
ROUND(amount_in * prices_in.price,2) AS amount_in_usd,
amount_out,
ROUND(amount_out * prices_out.price,2) AS amount_out_usd,
sender,
tx_to,
event_index,
platform,
token_in,
token_out,
symbol_in,
symbol_out,
_log_id,
_inserted_timestamp
FROM
swaps_with_token_addresses s
LEFT JOIN hourly_prices AS prices_in
ON prices_in.token_address = s.token_in
AND prices_in.hour = date_trunc('hour',s.block_timestamp)
LEFT JOIN hourly_prices AS prices_out
ON prices_out.token_address = s.token_out
AND prices_out.hour = date_trunc('hour',s.block_timestamp)

View File

@ -0,0 +1,196 @@
version: 2
models:
- name: silver_dex__synthetix_swaps
description: A record of all swaps in the Synthetix DEX on Optimism.
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- _log_id
columns:
- name: BLOCK_NUMBER
description: '{{ doc("opt_block_number") }}'
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- NUMBER
- FLOAT
- name: BLOCK_TIMESTAMP
description: '{{ doc("opt_block_timestamp") }}'
tests:
- not_null
- dbt_expectations.expect_row_values_to_have_recent_data:
datepart: day
interval: 1
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- TIMESTAMP_NTZ
- name: TX_HASH
description: '{{ doc("opt_tx_hash") }}'
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: ORIGIN_FUNCTION_SIGNATURE
description: Function signature from the transaction that originated the swap
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: ORIGIN_FROM_ADDRESS
description: Address that initiated the transaction that originated the swap
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: ORIGIN_TO_ADDRESS
description: Receiving party of the transaction that originated the swap
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: CONTRACT_ADDRESS
description: '{{ doc("opt_logs_contract_address") }}'
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: POOL_NAME
description: This table is based on the Kwenta exchange which is built on the Synthetix protocol. The liquidity traders access is entirely created by SNX stakers on Synthetix (or routed through 1inch for non-synth trades).
- name: EVENT_NAME
description: Always 'Swap'
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: AMOUNT_IN
description: Amount of tokens entering the swap (decimal adjusted)
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- number
- name: AMOUNT_IN_USD
description: Approximate Amount of USD entering the swap
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: AMOUNT_OUT
description: Amount of tokens exiting the swap (decimal adjusted)
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- number
- name: AMOUNT_OUT_USD
description: Approximate Amount of USD exiting the swap
tests:
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: SENDER
description: Same as origin_from_address
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: TX_TO
description: the "to" field in the swap event log
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: EVENT_INDEX
description: index of the event log of the swap
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- NUMBER
- FLOAT
- name: PLATFORM
description: platform in which the swap is happening. always "Synthetix"
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: TOKEN_IN
description: address of the token entering the swap
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: TOKEN_OUT
description: address of the token exiting the swap
tests:
- not_null
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: SYMBOL_IN
description: symbol (ticker) of the token entering the swap
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: SYMBOL_OUT
description: symbol (ticker) of the token exiting the swap
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR
- name: _LOG_ID
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- STRING
- VARCHAR

View File

@ -0,0 +1,168 @@
{{ config(
materialized = 'incremental',
unique_key = 'pool_address',
cluster_by = ['_inserted_timestamp::DATE']
) }}
WITH created_pools AS (
SELECT
block_number AS created_block,
block_timestamp AS created_time,
tx_hash AS created_tx_hash,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
LOWER(CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40))) AS token0_address,
LOWER(CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40))) AS token1_address,
ethereum.public.udf_hex_to_int(
's2c',
topics [3] :: STRING
) :: INTEGER AS fee,
ethereum.public.udf_hex_to_int(
's2c',
segmented_data [0] :: STRING
) :: INTEGER AS tick_spacing,
CONCAT('0x', SUBSTR(segmented_data [1] :: STRING, 25, 40)) AS pool_address,
_inserted_timestamp
FROM
{{ ref('silver__logs') }}
WHERE
topics [0] = '0x783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b7118'
AND contract_address = '0x1f98431c8ad98523631ae4a59f267346ea31f984'
{% if is_incremental() %}
AND _inserted_timestamp >= (
SELECT
MAX(
_inserted_timestamp
) :: DATE - 2
FROM
{{ this }}
)
{% endif %}
),
initial_info AS (
SELECT
contract_address,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
ethereum.public.udf_hex_to_int('s2c', CONCAT('0x', segmented_data [0] :: STRING)) :: FLOAT AS init_sqrtPriceX96,
ethereum.public.udf_hex_to_int('s2c', CONCAT('0x', segmented_data [1] :: STRING)) :: FLOAT AS init_tick,
pow(
1.0001,
init_tick
) AS init_price_1_0_unadj
FROM
{{ ref('silver__logs') }}
WHERE
topics [0] :: STRING = '0x98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95'
{% if is_incremental() %}
AND _inserted_timestamp >= (
SELECT
MAX(
_inserted_timestamp
) :: DATE - 2
FROM
{{ this }}
)
{% endif %}
),
contracts AS (
SELECT
LOWER(address) AS address,
symbol,
NAME,
decimals
FROM
{{ ref('core__dim_contracts') }}
WHERE
decimals IS NOT NULL
),
token_prices AS (
SELECT
hour,
token_address,
price
FROM
{{ ref('silver__prices') }}
WHERE
hour :: DATE IN (
SELECT
DISTINCT created_time :: DATE
FROM
created_pools
)
),
FINAL AS (
SELECT
created_block,
created_time,
created_tx_hash,
token0_address,
token1_address,
fee :: INTEGER AS fee,
(
fee / 10000
) :: FLOAT AS fee_percent,
tick_spacing,
pool_address,
COALESCE(
init_tick,
0
) AS init_tick,
c0.decimals AS token0_decimals,
c1.decimals AS token1_decimals,
COALESCE(
init_price_1_0_unadj / pow(
10,
token1_decimals - token0_decimals
),
0
) AS init_price_1_0,
c0.symbol AS token0_symbol,
c1.symbol AS token1_symbol,
c0.name AS token0_name,
c1.name AS token1_name,
p0.price AS token0_price,
p1.price AS token1_price,
div0(
token1_price,
token0_price
) AS usd_ratio,
init_price_1_0 * token1_price AS init_price_1_0_usd,
CONCAT(
token0_symbol,
'-',
token1_symbol,
' ',
fee,
' ',
tick_spacing
) AS pool_name,
_inserted_timestamp
FROM
created_pools
LEFT JOIN initial_info
ON pool_address = contract_address
LEFT JOIN contracts c0
ON c0.address = token0_address
LEFT JOIN contracts c1
ON c1.address = token1_address
LEFT JOIN token_prices p0
ON p0.token_address = token0_address
AND p0.hour = DATE_TRUNC(
'hour',
created_time
)
LEFT JOIN token_prices p1
ON p1.token_address = token1_address
AND p1.hour = DATE_TRUNC(
'hour',
created_time
)
)
SELECT
*
FROM
FINAL qualify(ROW_NUMBER() over(PARTITION BY pool_address
ORDER BY
_inserted_timestamp DESC)) = 1

View File

@ -0,0 +1,47 @@
version: 2
models:
- name: silver_dex__univ3_pools
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- POOL_ADDRESS
columns:
- name: CREATED_BLOCK
tests:
- not_null
- name: CREATED_TIME
tests:
- not_null
- dbt_expectations.expect_row_values_to_have_recent_data:
datepart: day
interval: 7
- name: FEE
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- number
- name: INIT_PRICE_1_0
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: INIT_TICK
tests:
- not_null
- name: POOL_ADDRESS
tests:
- not_null
- name: TICK_SPACING
tests:
- not_null
- name: CREATED_TX_HASH
tests:
- not_null

View File

@ -0,0 +1,173 @@
{{ config(
materialized = 'incremental',
unique_key = '_log_id',
cluster_by = ['block_timestamp::DATE']
) }}
WITH base_swaps AS (
SELECT
*,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS sender,
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS recipient,
ethereum.public.udf_hex_to_int(
's2c',
segmented_data [0] :: STRING
) :: FLOAT AS amount0_unadj,
ethereum.public.udf_hex_to_int(
's2c',
segmented_data [1] :: STRING
) :: FLOAT AS amount1_unadj,
ethereum.public.udf_hex_to_int(
's2c',
segmented_data [2] :: STRING
) :: FLOAT AS sqrtPriceX96,
ethereum.public.udf_hex_to_int(
's2c',
segmented_data [3] :: STRING
) :: FLOAT AS liquidity,
ethereum.public.udf_hex_to_int(
's2c',
segmented_data [4] :: STRING
) :: FLOAT AS tick
FROM
{{ ref('silver__logs') }}
WHERE
block_timestamp :: DATE > '2021-04-01'
AND topics [0] :: STRING = '0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67'
AND tx_status = 'SUCCESS'
AND event_removed = 'false'
{% if is_incremental() %}
AND _inserted_timestamp >= (
SELECT
MAX(
_inserted_timestamp
) :: DATE - 2
FROM
{{ this }}
)
{% endif %}
),
pool_data AS (
SELECT
token0_address,
token1_address,
fee,
fee_percent,
tick_spacing,
pool_address,
token0_symbol,
token1_symbol,
token0_decimals,
token1_decimals,
pool_name
FROM
{{ ref('silver_dex__univ3_pools') }}
),
token_prices AS (
SELECT
hour,
token_address,
price
FROM
{{ ref('silver__prices') }}
WHERE
hour :: DATE IN (
SELECT
DISTINCT block_timestamp :: DATE
FROM
base_swaps
)
),
FINAL AS (
SELECT
'optimism' AS blockchain,
block_number,
block_timestamp,
tx_hash,
contract_address AS pool_address,
pool_name,
recipient,
sender,
tick,
liquidity,
COALESCE(
liquidity / pow(
10,
(
(
token0_decimals + token1_decimals
) / 2
)
),
0
) AS liquidity_adjusted,
event_index,
amount0_unadj / pow(
10,
COALESCE(
token0_decimals,
18
)
) AS amount0_adjusted,
amount1_unadj / pow(
10,
COALESCE(
token1_decimals,
18
)
) AS amount1_adjusted,
COALESCE(div0(ABS(amount1_adjusted), ABS(amount0_adjusted)), 0) AS price_1_0,
COALESCE(div0(ABS(amount0_adjusted), ABS(amount1_adjusted)), 0) AS price_0_1,
token0_address,
token1_address,
token0_symbol,
token1_symbol,
p0.price AS token0_price,
p1.price AS token1_price,
CASE
WHEN token0_decimals IS NOT NULL THEN ROUND(
token0_price * amount0_adjusted,
2
)
END AS amount0_usd,
CASE
WHEN token1_decimals IS NOT NULL THEN ROUND(
token1_price * amount1_adjusted,
2
)
END AS amount1_usd,
_log_id,
_inserted_timestamp,
origin_function_signature,
origin_from_address,
origin_to_address,
amount0_unadj,
amount1_unadj,
token0_decimals,
token1_decimals
FROM
base_swaps
INNER JOIN pool_data
ON pool_data.pool_address = base_swaps.contract_address
LEFT JOIN token_prices p0
ON p0.token_address = token0_address
AND p0.hour = DATE_TRUNC(
'hour',
block_timestamp
)
LEFT JOIN token_prices p1
ON p1.token_address = token1_address
AND p1.hour = DATE_TRUNC(
'hour',
block_timestamp
)
)
SELECT
*
FROM
FINAL qualify(ROW_NUMBER() over(PARTITION BY _log_id
ORDER BY
_inserted_timestamp DESC)) = 1

View File

@ -0,0 +1,80 @@
version: 2
models:
- name: silver_dex__univ3_swaps
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- _LOG_ID
columns:
- name: AMOUNT0_UNADJ
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: AMOUNT1_UNADJ
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: BLOCK_NUMBER
tests:
- not_null
- name: BLOCK_TIMESTAMP
tests:
- not_null
- dbt_expectations.expect_row_values_to_have_recent_data:
datepart: day
interval: 1
- name: BLOCKCHAIN
tests:
- not_null
- name: LIQUIDITY
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: LIQUIDITY_ADJUSTED
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: EVENT_INDEX
tests:
- not_null
- name: POOL_ADDRESS
tests:
- not_null
- name: PRICE_0_1
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: PRICE_1_0
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_in_type_list:
column_type_list:
- decimal
- float
- name: RECIPIENT
tests:
- not_null
- name: SENDER
tests:
- not_null
- name: TICK
tests:
- not_null
- name: TX_HASH
tests:
- not_null

View File

@ -39,24 +39,24 @@ all_records AS (
network :: STRING AS network,
chain_id :: STRING AS blockchain,
tx_count :: INTEGER AS tx_count,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
header :difficulty :: STRING
) :: INTEGER AS difficulty,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
header :totalDifficulty :: STRING
) :: INTEGER AS total_difficulty,
header: extraData :: STRING AS extra_data,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
header :gasLimit :: STRING
) :: INTEGER AS gas_limit,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
header :gasUsed :: STRING
) :: INTEGER AS gas_used,
header: "hash" :: STRING AS HASH,
header: parentHash :: STRING AS parent_hash,
header: receiptsRoot :: STRING AS receipts_root,
header: sha3Uncles :: STRING AS sha3_uncles,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
header: "size" :: STRING
) :: INTEGER AS SIZE,
CASE

View File

@ -35,7 +35,7 @@ token_names AS (
function_signature,
read_output,
regexp_substr_all(SUBSTR(read_output, 3, len(read_output)), '.{64}') AS segmented_output,
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_output [1] :: STRING
) AS sub_len,
TRY_HEX_DECODE_STRING(
@ -69,7 +69,7 @@ token_symbols AS (
function_signature,
read_output,
regexp_substr_all(SUBSTR(read_output, 3, len(read_output)), '.{64}') AS segmented_output,
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_output [1] :: STRING
) AS sub_len,
TRY_HEX_DECODE_STRING(
@ -99,7 +99,7 @@ token_symbols AS (
token_decimals AS (
SELECT
contract_address,
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
read_output :: STRING
) AS token_decimals,
LENGTH(token_decimals) AS dec_length

View File

@ -67,7 +67,7 @@ logs AS (
tx_status,
ingested_at,
_inserted_timestamp,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
VALUE :logIndex :: STRING
) :: INTEGER AS event_index,
VALUE :address :: STRING AS contract_address,

View File

@ -242,7 +242,7 @@ adj_eth_prices AS (
all_prices AS (
SELECT
HOUR,
token_address,
LOWER(token_address) AS token_address,
symbol,
decimals,
price,
@ -253,7 +253,7 @@ all_prices AS (
UNION ALL
SELECT
HOUR,
token_address,
LOWER(token_address) AS token_address,
symbol,
decimals,
price,

View File

@ -96,10 +96,10 @@ base_table AS (
flattened_traces AS (
SELECT
DATA :from :: STRING AS from_address,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
DATA :gas :: STRING
) AS gas,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
DATA :gasUsed :: STRING
) AS gas_used,
DATA :input :: STRING AS input,
@ -108,7 +108,7 @@ flattened_traces AS (
DATA :to :: STRING AS to_address,
DATA :type :: STRING AS TYPE,
CASE
WHEN DATA :type :: STRING = 'CALL' THEN udf_hex_to_int(
WHEN DATA :type :: STRING = 'CALL' THEN ethereum.public.udf_hex_to_int(
DATA :value :: STRING
) / pow(
10,

View File

@ -10,14 +10,14 @@ WITH base_table AS (
block_timestamp,
block_id :: INTEGER AS block_number,
tx_id :: STRING AS tx_hash,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
tx :nonce :: STRING
) :: INTEGER AS nonce,
tx_block_index :: INTEGER AS POSITION,
tx :from :: STRING AS from_address,
tx :to :: STRING AS to_address,
(
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
tx :value :: STRING
) / pow(
10,
@ -26,11 +26,11 @@ WITH base_table AS (
) :: FLOAT AS eth_value,
tx :blockHash :: STRING AS block_hash,
(
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
tx :gasPrice :: STRING
)
) :: FLOAT AS gas_price,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
tx :gas :: STRING
) :: INTEGER AS gas_limit,
tx :input :: STRING AS DATA,
@ -38,13 +38,13 @@ WITH base_table AS (
WHEN tx :receipt :status :: STRING = '0x1' THEN 'SUCCESS'
ELSE 'FAIL'
END AS status,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
tx :receipt :gasUsed :: STRING
) :: INTEGER AS gas_used,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
tx :receipt :cumulativeGasUsed :: STRING
) :: INTEGER AS cumulative_Gas_Used,
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
tx :receipt :effectiveGasPrice :: STRING
) :: INTEGER AS effective_Gas_Price,
ingested_at :: TIMESTAMP AS ingested_at,
@ -54,7 +54,7 @@ WITH base_table AS (
'traces'
) AS tx_json,
COALESCE(
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
tx :receipt :l1Fee :: STRING
) :: FLOAT,
0
@ -64,13 +64,13 @@ WITH base_table AS (
0
) :: FLOAT AS l1_fee_scalar,
COALESCE(
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
tx :receipt :l1GasPrice :: STRING
) :: FLOAT,
0
) AS l1_gas_price,
COALESCE(
udf_hex_to_int(
ethereum.public.udf_hex_to_int(
tx :receipt :l1GasUsed :: STRING
) :: FLOAT,
0

View File

@ -70,7 +70,7 @@ find_missing_events AS (
contract_address :: STRING AS contract_address,
CONCAT('0x', SUBSTR(topics [1], 27, 40)) :: STRING AS from_address,
CONCAT('0x', SUBSTR(topics [2], 27, 40)) :: STRING AS to_address,
COALESCE(udf_hex_to_int(topics [3] :: STRING), udf_hex_to_int(SUBSTR(DATA, 3, 64))) :: FLOAT AS raw_amount,
COALESCE(ethereum.public.udf_hex_to_int(topics [3] :: STRING), ethereum.public.udf_hex_to_int(SUBSTR(DATA, 3, 64))) :: FLOAT AS raw_amount,
event_index,
_inserted_timestamp
FROM

View File

@ -27,10 +27,10 @@ WITH swap_events AS (
event_name,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
TRY_TO_NUMBER(
public.udf_hex_to_int(segmented_data[0]::string)::integer
ethereum.public.udf_hex_to_int(segmented_data[0]::string)::integer
) AS amountIn,
TRY_TO_NUMBER(
public.udf_hex_to_int(segmented_data[1]::string)::integer
ethereum.public.udf_hex_to_int(segmented_data[1]::string)::integer
) AS amountOut,
CONCAT('0x', SUBSTR(topics [3] :: STRING, 27, 40)) AS token_out,
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS token_in,
@ -131,19 +131,20 @@ SELECT
amount_in,
case
WHEN amount_in * pIn.price <= 5 * amount_out * pOut.price
AND amount_out * pOut.price <= 5 * amount_in * pIn.price THEN amount_in * pIn.price
when pOut.price is null then amount_in * pIn.price
AND amount_out * pOut.price <= 5 * amount_in * pIn.price THEN ROUND(amount_in * pIn.price,2)
when pOut.price is null then ROUND(amount_in * pIn.price,2)
ELSE NULL
END AS amount_in_usd,
amount_out,
CASE
WHEN amount_in * pIn.price <= 5 * amount_out * pOut.price
AND amount_out * pOut.price <= 5 * amount_in * pIn.price THEN amount_out * pOut.price
when pIn.price is null then amount_out * pOut.price
AND amount_out * pOut.price <= 5 * amount_in * pIn.price THEN ROUND(amount_out * pOut.price,2)
when pIn.price is null then ROUND(amount_out * pOut.price,2)
ELSE NULL
END AS amount_out_usd,
tx_to,
event_index,
event_name,
token_in,
token_out,
symbol_in,

View File

@ -51,6 +51,7 @@ SELECT
origin_to_address,
tx_hash,
event_index,
event_name,
platform,
contract_address,
pool_address,
@ -166,7 +167,8 @@ SELECT
CASE
WHEN fee_currency IS NULL AND lp_fee <> 0 AND pool_address <> '0xce9accfbb25eddce91845c3a7c3d1613d1d7081f' THEN token_address_in
ELSE fee_currency
END AS lp_fee_token_address
END AS lp_fee_token_address,
_log_id
FROM
{{ ref('silver__velodrome_swaps') }}
base

View File

@ -2,7 +2,11 @@ version: 2
models:
- name: velodrome__ez_swaps
description: 'This table contains details on swaps executed on Velodrome.'
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- _LOG_ID
columns:
- name: BLOCK_NUMBER
description: '{{ doc("opt_block_number") }}'
@ -124,4 +128,8 @@ models:
where: LP_FEE <> 0 and POOL_ADDRESS <> '0xce9accfbb25eddce91845c3a7c3d1613d1d7081f'
- dbt_expectations.expect_column_values_to_match_regex:
regex: 0[xX][0-9a-fA-F]+
- name: _LOG_ID
description: '{{ doc("opt_log_id_events") }}'
tests:
- not_null

View File

@ -27,7 +27,7 @@ WITH lp_actions AS (
WHEN topics [0] :: STRING IN(
'0xdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496',
'0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f'
) THEN PUBLIC.udf_hex_to_int(
) THEN ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
) :: FLOAT
END AS amount0_unadj,
@ -35,7 +35,7 @@ WITH lp_actions AS (
WHEN topics [0] :: STRING IN(
'0xdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496',
'0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f'
) THEN PUBLIC.udf_hex_to_int(
) THEN ethereum.public.udf_hex_to_int(
segmented_data [1] :: STRING
) :: FLOAT
END AS amount1_unadj,
@ -47,7 +47,7 @@ WITH lp_actions AS (
END AS to_address,
CASE
WHEN topics [0] :: STRING = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' THEN (
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
) :: FLOAT / pow(
10,

View File

@ -17,19 +17,19 @@ WITH velo_distributions AS (
contract_address,
event_index,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
) :: INTEGER AS token_id,
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [1] :: STRING
) :: FLOAT / pow(
10,
18
) :: FLOAT AS claimed_amount,
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [2] :: STRING
) :: INTEGER AS claim_epoch,
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [3] :: STRING
) :: INTEGER AS max_epoch,
'venft_distribution' AS reward_type,
@ -66,7 +66,7 @@ staking_rewards AS (
contract_address,
event_index,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
) :: INTEGER AS claimed_amount,
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS from_address,

View File

@ -19,18 +19,18 @@ WITH new_locks AS (
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS provider_address,
CASE
WHEN topics [0] :: STRING = '0xff04ccafc360e16b67d682d17bd9503c4c6b9a131f6be6325762dc9ffc7de624' THEN TO_TIMESTAMP(PUBLIC.udf_hex_to_int(topics [2] :: STRING))
WHEN topics [0] :: STRING = '0xff04ccafc360e16b67d682d17bd9503c4c6b9a131f6be6325762dc9ffc7de624' THEN TO_TIMESTAMP(ethereum.public.udf_hex_to_int(topics [2] :: STRING))
WHEN topics [0] :: STRING = '0x02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94' THEN TO_TIMESTAMP(
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [2] :: STRING
)
)
END AS unlock_date,
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
) AS token_id,
(
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [1] :: STRING
) :: FLOAT / pow(
10,
@ -38,7 +38,7 @@ WITH new_locks AS (
)
) :: FLOAT AS velo_value,
CASE
WHEN topics [0] :: STRING = '0xff04ccafc360e16b67d682d17bd9503c4c6b9a131f6be6325762dc9ffc7de624' THEN PUBLIC.udf_hex_to_int(
WHEN topics [0] :: STRING = '0xff04ccafc360e16b67d682d17bd9503c4c6b9a131f6be6325762dc9ffc7de624' THEN ethereum.public.udf_hex_to_int(
segmented_data [2] :: STRING
)
END AS deposit_type,

View File

@ -4,42 +4,11 @@
tags = ['velodrome']
) }}
WITH pool_backfill AS (
WITH pool_creation AS (
SELECT
LOWER(pool_address) AS pool_address,
pool_name,
pool_type,
token0_symbol,
token1_symbol,
LOWER(token0_address) AS token0_address,
LOWER(token1_address) AS token1_address,
token0_decimals,
token1_decimals,
'1970-01-01' :: DATE AS _inserted_timestamp
FROM
{{ ref('silver__velo_pool_backfill') }}
),
token_backfill AS (
SELECT
symbol,
op_token_address AS contract_address,
decimals
FROM
{{ ref('silver__velo_tokens_backup') }}
),
contracts AS (
SELECT
address AS contract_address,
symbol,
decimals
FROM
{{ ref('core__dim_contracts') }}
),
new_pools AS (
SELECT
block_timestamp AS created_timestamp,
block_number AS created_block,
block_number,
tx_hash AS created_hash,
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS token0_address,
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS token1_address,
@ -57,184 +26,219 @@ new_pools AS (
{{ ref('silver__logs') }}
WHERE
topics [0] :: STRING = '0xc4805696c66d7cf352fc1d6bb633ad5ee82f6cb577c453024b6e0eb8306c6fc9' -- pair created
AND contract_address = '0x25cbddb98b35ab1ff77413456b31ec81a6b6b746' -- velo depolyer
AND contract_address = '0x25cbddb98b35ab1ff77413456b31ec81a6b6b746' --velo deployer
{% if is_incremental() %}
AND _inserted_timestamp >= (
AND pool_address NOT IN (
SELECT
MAX(
_inserted_timestamp
) :: DATE - 2
DISTINCT pool_address
FROM
{{ this }}
)
{% endif %}
),
{% if is_incremental() %}
missing_pools AS (
SELECT
created_timestamp,
created_block,
created_hash,
token0_address,
token1_address,
pool_address,
pool_type,
_inserted_timestamp
FROM
{{ this }}
WHERE
pool_name IS NULL
OR token0_decimals IS NULL
OR token1_decimals IS NULL
),
{% endif %}
function_sigs AS (
heal_pools AS (
SELECT
created_timestamp,
created_block,
created_hash,
token0_address,
token1_address,
pool_address,
pool_type,
_inserted_timestamp
FROM
new_pools
{% if is_incremental() %}
UNION
SELECT
created_timestamp,
created_block,
created_hash,
token0_address,
token1_address,
pool_address,
pool_type,
_inserted_timestamp
'0x06fdde03' AS function_sig,
'name' AS function_name
UNION ALL
SELECT
'0x95d89b41' AS function_sig,
'symbol' AS function_name
UNION ALL
SELECT
'0x313ce567' AS function_sig,
'decimals' AS function_name
),
all_inputs AS (
SELECT
pool_address AS contract_address,
block_number,
function_sig,
(ROW_NUMBER() OVER (PARTITION BY pool_address
ORDER BY block_number)) - 1 AS function_input,
'pool' AS address_label
FROM pool_creation
JOIN function_sigs ON 1=1
UNION ALL
SELECT
token0_address AS contract_address,
block_number,
function_sig,
(ROW_NUMBER() OVER (PARTITION BY token0_address
ORDER BY block_number)) - 1 AS function_input,
'token0' AS address_label
FROM pool_creation
JOIN function_sigs ON 1=1
UNION ALL
SELECT
token1_address AS contract_address,
block_number,
function_sig,
(ROW_NUMBER() OVER (PARTITION BY token1_address
ORDER BY block_number)) - 1 AS function_input,
'token1' AS address_label
FROM pool_creation
JOIN function_sigs ON 1=1
),
ready_reads_all AS (
SELECT
contract_address,
block_number,
function_sig,
function_input,
CONCAT(
'[\'',
contract_address,
'\',',
block_number,
',\'',
function_sig,
'\',\'',
function_input,
'\']'
) AS read_input
FROM all_inputs
),
batch_reads_all AS (
SELECT
CONCAT('[', LISTAGG(read_input, ','), ']') AS batch_read
FROM
missing_pools
{% endif %}
ready_reads_all
),
add_meta AS (
SELECT
created_timestamp,
created_block,
created_hash,
token0_address,
COALESCE(
tb0.symbol,
c0.symbol
) AS token0_symbol,
COALESCE(
tb1.symbol,
c1.symbol
) AS token1_symbol,
COALESCE(
tb0.decimals,
c0.decimals
) AS token0_decimals,
COALESCE(
tb1.decimals,
c1.decimals
) AS token1_decimals,
token1_address,
pool_address,
pool_type,
_inserted_timestamp
FROM
heal_pools
LEFT JOIN token_backfill AS tb0
ON token0_address = tb0.contract_address
LEFT JOIN contracts AS c0
ON token0_address = c0.contract_address
LEFT JOIN token_backfill AS tb1
ON token1_address = tb1.contract_address
LEFT JOIN contracts AS c1
ON token1_address = c1.contract_address
),
name_pools AS (
SELECT
created_timestamp,
created_block,
created_hash,
token0_address,
token0_symbol,
token1_symbol,
token0_decimals,
token1_decimals,
token1_address,
pool_address,
pool_type,
_inserted_timestamp,
CONCAT(
LOWER(
LEFT(
pool_type,
1
)
),
'AMM-',
token0_symbol,
'/',
token1_symbol
) AS pool_name
FROM
add_meta
),
combine AS (
SELECT
pool_address,
pool_name,
pool_type,
token0_symbol,
token1_symbol,
token0_address,
token1_address,
token0_decimals,
token1_decimals,
created_timestamp,
created_block,
created_hash,
_inserted_timestamp
FROM
name_pools
UNION ALL
SELECT
pool_address,
pool_name,
pool_type,
token0_symbol,
token1_symbol,
token0_address,
token1_address,
token0_decimals,
token1_decimals,
NULL AS created_timestamp,
NULL AS created_block,
NULL AS created_hash,
_inserted_timestamp
FROM
pool_backfill
)
all_reads AS (
SELECT
LOWER(pool_address) AS pool_address,
ethereum.streamline.udf_json_rpc_read_calls(
node_url,
headers,
PARSE_JSON(batch_read)
) AS read_output,
SYSDATE() AS _inserted_timestamp
FROM
batch_reads_all
JOIN streamline.crosschain.node_mapping ON 1=1
AND chain = 'optimism'
WHERE
EXISTS (
SELECT
1
FROM
ready_reads_all
LIMIT
1
)
),
reads_adjusted AS (
SELECT
VALUE :id :: STRING AS read_id,
VALUE :result :: STRING AS read_result,
SPLIT(
read_id,
'-'
) AS read_id_object,
read_id_object [0] :: STRING AS contract_address,
read_id_object [1] :: STRING AS block_number,
read_id_object [2] :: STRING AS function_sig,
read_id_object [3] :: STRING AS function_input,
_inserted_timestamp
FROM
all_reads,
LATERAL FLATTEN(
input => read_output [0] :data
)
),
details AS (
SELECT
contract_address,
function_sig,
function_name,
read_result,
regexp_substr_all(SUBSTR(read_result, 3, len(read_result)), '.{64}') AS segmented_output,
_inserted_timestamp
FROM reads_adjusted
LEFT JOIN function_sigs USING(function_sig)
),
pools AS (
SELECT
d.contract_address AS pool_address,
MIN(CASE WHEN function_name = 'symbol' THEN TRY_HEX_DECODE_STRING(segmented_output [2] :: STRING) END) AS pool_symbol,
MIN(CASE WHEN function_name = 'name' THEN TRY_HEX_DECODE_STRING(segmented_output [2] :: STRING) END) AS pool_name,
MIN(CASE
WHEN read_result::STRING = '0x' THEN NULL
ELSE ethereum.public.udf_hex_to_int(read_result::STRING)
END)::INTEGER AS pool_decimals,
MAX(_inserted_timestamp) AS _inserted_timestamp
FROM details d
LEFT JOIN all_inputs i ON d.contract_address = i.contract_address
WHERE address_label = 'pool'
GROUP BY 1
),
token0 AS (
SELECT
d.contract_address AS token0_address,
MIN(CASE WHEN function_name = 'symbol' THEN TRY_HEX_DECODE_STRING(segmented_output [2] :: STRING) END) AS token0_symbol,
MIN(CASE WHEN function_name = 'name' THEN TRY_HEX_DECODE_STRING(segmented_output [2] :: STRING) END) AS token0_name,
MIN(CASE
WHEN function_name = 'decimals' AND read_result::STRING <> '0x' THEN ethereum.public.udf_hex_to_int(segmented_output [0] :: STRING)
ELSE NULL
END)::INTEGER AS token0_decimals,
MAX(_inserted_timestamp) AS _inserted_timestamp
FROM details d
LEFT JOIN all_inputs i ON d.contract_address = i.contract_address
WHERE address_label = 'token0'
GROUP BY 1
),
token1 AS (
SELECT
d.contract_address AS token1_address,
MIN(CASE WHEN function_name = 'symbol' THEN TRY_HEX_DECODE_STRING(segmented_output [2] :: STRING) END) AS token1_symbol,
MIN(CASE WHEN function_name = 'name' THEN TRY_HEX_DECODE_STRING(segmented_output [2] :: STRING) END) AS token1_name,
MIN(CASE
WHEN function_name = 'decimals' AND read_result::STRING <> '0x' THEN ethereum.public.udf_hex_to_int(segmented_output [0] :: STRING)
ELSE NULL
END)::INTEGER AS token1_decimals,
MAX(_inserted_timestamp) AS _inserted_timestamp
FROM details d
LEFT JOIN all_inputs i ON d.contract_address = i.contract_address
WHERE address_label = 'token1'
GROUP BY 1
)
SELECT
pool_address,
pool_name,
pool_type,
pool_symbol,
pool_decimals,
token0_symbol,
token1_symbol,
LOWER(token0_address) AS token0_address,
LOWER(token1_address) AS token1_address,
c.token0_address,
c.token1_address,
token0_decimals,
token1_decimals,
created_timestamp,
created_block,
block_number AS created_block,
created_hash,
_inserted_timestamp
FROM
combine qualify(ROW_NUMBER() over(PARTITION BY pool_address
ORDER BY
_inserted_timestamp DESC) = 1)
a._inserted_timestamp
FROM pools a
LEFT JOIN pool_creation c USING(pool_address)
LEFT JOIN token0 ON c.token0_address = token0.token0_address
LEFT JOIN token1 ON c.token1_address = token1.token1_address

View File

@ -21,11 +21,11 @@ WITH staking_actions AS (
WHEN topics [0] :: STRING = '0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7' THEN 'deposit'
WHEN topics [0] :: STRING = '0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567' THEN 'withdraw'
END AS staking_action_type,
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
) :: INTEGER AS token_id,
(
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [1] :: STRING
) :: FLOAT / pow(
10,
@ -66,7 +66,7 @@ token_transfer AS (
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS gauge_address,
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS lp_provider_address,
(
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
) :: FLOAT / pow(
10,

View File

@ -23,43 +23,44 @@ WITH base AS (
WHEN topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' THEN CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40))
END AS to_address,
CASE
WHEN topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' THEN PUBLIC.udf_hex_to_int(
WHEN topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' THEN ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
) :: FLOAT
END AS amount0_in_unadj,
CASE
WHEN topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' THEN PUBLIC.udf_hex_to_int(
WHEN topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' THEN ethereum.public.udf_hex_to_int(
segmented_data [1] :: STRING
) :: FLOAT
END AS amount1_in_unadj,
CASE
WHEN topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' THEN PUBLIC.udf_hex_to_int(
WHEN topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' THEN ethereum.public.udf_hex_to_int(
segmented_data [2] :: STRING
) :: FLOAT
END AS amount0_out_unadj,
CASE
WHEN topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' THEN PUBLIC.udf_hex_to_int(
WHEN topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' THEN ethereum.public.udf_hex_to_int(
segmented_data [3] :: STRING
) :: FLOAT
END AS amount1_out_unadj,
CASE
WHEN topics [0] :: STRING = '0x112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a8602' THEN PUBLIC.udf_hex_to_int(
WHEN topics [0] :: STRING = '0x112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a8602' THEN ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
) :: FLOAT
END AS fees0_adj,
CASE
WHEN topics [0] :: STRING = '0x112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a8602' THEN PUBLIC.udf_hex_to_int(
WHEN topics [0] :: STRING = '0x112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a8602' THEN ethereum.public.udf_hex_to_int(
segmented_data [1] :: STRING
) :: FLOAT
END AS fees1_adj,
CASE
WHEN topics [0] :: STRING = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' THEN PUBLIC.udf_hex_to_int(
WHEN topics [0] :: STRING = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' THEN ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
) :: FLOAT
END AS transfer_amount,
_log_id,
_inserted_timestamp,
event_index,
event_name,
'velodrome' AS platform,
topics [0] :: STRING AS function_type
FROM
@ -142,6 +143,7 @@ swaps AS (
_log_id,
_inserted_timestamp,
event_index,
event_name,
platform,
ROW_NUMBER() over (
PARTITION BY tx_hash,
@ -173,6 +175,7 @@ SELECT
_log_id,
_inserted_timestamp,
event_index,
event_name,
platform,
COALESCE(
fees_adj,

View File

@ -18,11 +18,11 @@ WITH votes_base AS (
event_index,
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS from_address,
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [0] :: STRING
) AS token_id,
(
PUBLIC.udf_hex_to_int(
ethereum.public.udf_hex_to_int(
segmented_data [1] :: STRING
) / pow(
10,