From aadef7affb3cf86f057bddd6474d4e24c2b1447c Mon Sep 17 00:00:00 2001 From: Eric Laurello Date: Tue, 23 May 2023 10:45:43 -0400 Subject: [PATCH] add is_unpool and convert actions --- .../core__fact_locked_liquidity_actions.sql | 22 +++++++ models/core/core__fact_superfluid_staking.sql | 32 +++++++--- models/core/core__fact_superfluid_staking.yml | 4 ++ ...lver__locked_liquidity_actions_convert.sql | 62 ++++++++++++------- ...lver__locked_liquidity_actions_convert.yml | 42 +++---------- 5 files changed, 100 insertions(+), 62 deletions(-) diff --git a/models/core/core__fact_locked_liquidity_actions.sql b/models/core/core__fact_locked_liquidity_actions.sql index d86092f..158119d 100644 --- a/models/core/core__fact_locked_liquidity_actions.sql +++ b/models/core/core__fact_locked_liquidity_actions.sql @@ -23,3 +23,25 @@ SELECT A.unpool_new_lock_ids FROM {{ ref('silver__locked_liquidity_actions') }} A +UNION ALL +SELECT + A.block_id, + A.block_timestamp, + A.tx_id, + A.tx_succeeded, + A.msg_group, + A.msg_type, + A.msg_action, + A.msg_action_description, + A.locker_address, + A.lock_id, + NULL AS amount, + NULL AS currency, + NULL AS DECIMAL, + NULL AS pool_id, + NULL AS lock_duration, + NULL AS unlock_time, + A.is_superfluid, + NULL AS unpool_new_lock_ids +FROM + {{ ref('silver__locked_liquidity_actions_convert') }} A diff --git a/models/core/core__fact_superfluid_staking.sql b/models/core/core__fact_superfluid_staking.sql index 655d8b0..2965370 100644 --- a/models/core/core__fact_superfluid_staking.sql +++ b/models/core/core__fact_superfluid_staking.sql @@ -1,12 +1,6 @@ {{ config( materialized = 'view', - meta={ - 'database_tags':{ - 'table': { - 'PURPOSE': 'STAKING' - } - } - } + meta ={ 'database_tags':{ 'table':{ 'PURPOSE': 'STAKING' }} } ) }} SELECT @@ -20,6 +14,28 @@ SELECT currency, DECIMAL, validator_address, - lock_id + lock_id, + IFF( + action = 'undelegate' + AND currency IS NOT NULL, + TRUE, + FALSE + ) AS is_unpool FROM {{ ref('silver__superfluid_staking') }} +UNION ALL +SELECT + A.block_id, + A.block_timestamp, + A.tx_id, + A.tx_succeeded, + A.msg_action AS action, + A.locker_address AS delegator_address, + NULL AS amount, + NULL AS currency, + NULL AS DECIMAL, + A.validator_address, + A.lock_id, + FALSE AS is_unpool +FROM + {{ ref('silver__locked_liquidity_actions_convert') }} A diff --git a/models/core/core__fact_superfluid_staking.yml b/models/core/core__fact_superfluid_staking.yml index 4a8abde..47096e1 100644 --- a/models/core/core__fact_superfluid_staking.yml +++ b/models/core/core__fact_superfluid_staking.yml @@ -45,5 +45,9 @@ models: - dbt_expectations.expect_column_to_exist - name: LOCK_ID description: An ID corresponding to the locking step of the transaction. + tests: + - dbt_expectations.expect_column_to_exist + - name: IS_UNPOOL + description: Boolean value indicating whether the transaction is an unpool action. tests: - dbt_expectations.expect_column_to_exist \ No newline at end of file diff --git a/models/silver/silver__locked_liquidity_actions_convert.sql b/models/silver/silver__locked_liquidity_actions_convert.sql index 7897e85..e74aebe 100644 --- a/models/silver/silver__locked_liquidity_actions_convert.sql +++ b/models/silver/silver__locked_liquidity_actions_convert.sql @@ -49,10 +49,16 @@ base_msg_atts AS ( ON A.tx_id = b.tx_id AND A.msg_group = b.msg_group {# AND b.tx_grp_rn > 1 #} WHERE - A.msg_type IN ( - 'superfluid_delegate', - 'lock_tokens', - 'add_tokens_to_lock' + ( + A.msg_type IN ( + 'superfluid_delegate', + 'lock_tokens', + 'add_tokens_to_lock' + ) + OR ( + A.msg_type = 'tx' + AND A.attribute_key = 'acc_seq' + ) ) {% if is_incremental() %} @@ -112,6 +118,23 @@ tx_msg_flat AS ( A.msg_type, A._inserted_timestamp ), +lper AS ( + SELECT + tx_id, + SPLIT_PART( + attribute_value, + '/', + 0 + ) AS locker_address + FROM + base_msg_atts + WHERE + msg_type = 'tx' qualify ROW_NUMBER() over ( + PARTITION BY tx_id + ORDER BY + msg_index DESC + ) = 1 +), FINAL AS ( SELECT A.block_id, @@ -122,33 +145,26 @@ FINAL AS ( A.msg_type, j :lock_id :: INT AS lock_id, j :validator :: STRING AS validator, - {# COALESCE( - j :"add_tokens_to_lock--owner", - j :"lock_tokens--owner", - j :"begin_unlock--owner", - j :"unlock--owner", - j :"burn--burner", - j :"unpool_pool_id--sender" -) :: STRING AS locker, -#} -j, -A._INSERTED_TIMESTAMP -FROM - tx_msg_flat A + A._INSERTED_TIMESTAMP + FROM + tx_msg_flat A ) SELECT block_id, block_timestamp, - tx_id, + A.tx_id, tx_succeeded, msg_group, msg_type, + 'convert' AS msg_action, + 'convert' AS msg_action_description, + b.locker_address, lock_id, - validator, - j, + validator AS validator_address, + TRUE AS is_superfluid, concat_ws( '-', - tx_id, + A.tx_id, msg_group, COALESCE( lock_id, @@ -157,4 +173,6 @@ SELECT ) AS _unique_key, _INSERTED_TIMESTAMP FROM - FINAL + FINAL A + JOIN lper b + ON A.tx_id = b.tx_id diff --git a/models/silver/silver__locked_liquidity_actions_convert.yml b/models/silver/silver__locked_liquidity_actions_convert.yml index 2e8c193..acf2b0e 100644 --- a/models/silver/silver__locked_liquidity_actions_convert.yml +++ b/models/silver/silver__locked_liquidity_actions_convert.yml @@ -1,14 +1,14 @@ version: 2 models: - name: silver__locked_liquidity_actions_convert - description: Records of all LP token locking transactions that have occurred on Osmosis, dating back to the genesis block. These actions include lock, unlock, unpool, and all superfluid actions. + description: Records of all conversion of lp tokens to locked lp tokens transactions that have occurred on Osmosis, dating back to the genesis block tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: - TX_ID - MSG_GROUP - LOCK_ID - - LOCKER + - LOCKER_ADDRESS columns: - name: BLOCK_ID description: "{{ doc('block_id') }}" @@ -58,7 +58,7 @@ models: column_type_list: - STRING - VARCHAR - - name: LOCKER + - name: LOCKER_ADDRESS description: "{{ doc('locker_address') }}" tests: - not_null @@ -75,41 +75,19 @@ models: column_type_list: - NUMBER - FLOAT - - name: AMOUNT - description: "{{ doc('amount') }}" - tests: - - dbt_expectations.expect_column_values_to_be_in_type_list: - column_type_list: - - NUMBER - - FLOAT - - name: CURRENCY - description: "{{ doc('currency') }}" + - name: VALIDATOR_ADDRESS + description: "{{ doc('validator_address') }}" tests: - dbt_expectations.expect_column_values_to_be_in_type_list: column_type_list: - STRING - VARCHAR - - name: POOL_ID - description: "{{ doc('pool_id') }}" + - dbt_expectations.expect_column_values_to_match_regex: + regex: osmovaloper1[0-9a-z]{38,38} + - name: IS_SUPERFLUID + description: "{{ doc('is_superfluid') }}" tests: - - dbt_expectations.expect_column_values_to_be_in_type_list: - column_type_list: - - NUMBER - - FLOAT - - name: LOCK_DURATION - description: "{{ doc('lock_duration') }}" - tests: - - dbt_expectations.expect_column_values_to_be_in_type_list: - column_type_list: - - STRING - - VARCHAR - - name: UNLOCK_TIME - description: "{{ doc('unlock_time') }}" - tests: - - dbt_expectations.expect_column_values_to_be_in_type_list: - column_type_list: - - STRING - - VARCHAR + - not_null - name: _INSERTED_TIMESTAMP description: "{{ doc('inserted_timestamp') }}" tests: