Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gains Network Perpetual for Base #7437

Merged
merged 20 commits into from
Jan 29, 2025
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please rename this file to match schema+alias:
gains_network_perpetual_trades.sql

Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{{ config(
schema = 'gains_network_perpetual_trades',
alias = 'perpetual_trades',
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please fix the schema:

Suggested change
schema = 'gains_network_perpetual_trades',
alias = 'perpetual_trades',
schema = 'gains_network',
alias = 'perpetual_trades',

post_hook='{{ expose_spells(\'["base"]\',
Hosuke marked this conversation as resolved.
Show resolved Hide resolved
spell_type = "project",
spell_name = "gains_network",
contributors = \'["princi"]\') }}'
)
}}

{% set gains_network_base_perpetual_trade_models = [
ref('gains_network_v1_base_perpetual_trades')
] %}

SELECT *
FROM
(
{% for gains_network_perpetual_trades in gains_network_base_perpetual_trade_models %}
SELECT
blockchain
,block_date
,block_month
,block_time
,virtual_asset
PatelPrinci marked this conversation as resolved.
Show resolved Hide resolved
,underlying_asset
,market
,market_address
,volume_usd
,fee_usd
,margin_usd
,trade
,project
,version
,frontend
,trader
,volume_raw
,tx_hash
,tx_from
,tx_to
,evt_index
FROM {{ gains_network_perpetual_trades }}
{% if not loop.last %}
UNION ALL
{% endif %}
{% endfor %}
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
version: 2

models:
- name: gains_network_v1_base_perpetual_trades
Hosuke marked this conversation as resolved.
Show resolved Hide resolved
meta:
blockchain: base
sector: perpetual
contributors: princi
config:
tags: ['base', 'perpetuals', 'perps', 'gains_network','cross-chain']
description: >
Perpetual swaps/trades table on gains_network protocol across blockchains
columns:
PatelPrinci marked this conversation as resolved.
Show resolved Hide resolved
- &blockchain
name: blockchain
description: "Blockchain where the perpetuals market is deployed"
- &block_date
name: block_date
description: "Date of the transaction"
- &block_time
name: block_time
description: "Time of the transaction"
- &virtual_asset
name: virtual_asset
description: "How the protocol represents the underlying asset"
- &underlying_asset
name: underlying_asset
description: "The real underlying asset that is represented in the swap"
- &market
name: market
description: "The futures market involved in the transaction"
- &market_address
name: market_address
description: "Contract address of the market"
- &volume_usd
name: volume_usd
description: "The size of the position taken for the swap in USD; already in absolute value and decimal normalized"
- &fee_usd
name: fee_usd
description: "The fees charged to the user for the swap in USD"
- &margin_usd
name: margin_usd
description: "The amount of collateral/margin used in a trade in USD"
- &trade
name: trade
description: "Indicates the trade's direction whether a short, long, of if a position is being closed"
- &project
name: project
description: "The underlying protocol/project where the swap took place"
- &version
name: version
description: "The version of the protocol/project"
- &frontend
name: frontend
description: "The frontend protocol/project where the specific swap was executed; built on top of the 'project' and defaults to the 'project' if no other frontend is specified"
- &trader
name: trader
description: "The address which made the swap in the protocol"
- &volume_raw
name: volume_raw
description: "The size of the position in raw form"
- &tx_hash
name: tx_hash
description: "The hash of the transaction"
- &tx_from
name: tx_from
description: "The address that originated the transaction; based on the base.transactions table"
- &tx_to
name: tx_to
description: "The address receiving the transaction; based on the base.transactions table"
- &evt_index
name: evt_index
description: "Event index number"
- &block_month
name: block_month
description: "Month of the transaction"
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
{{ config(
schema = 'gains_network_base',
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
schema = 'gains_network_base',
schema = 'gains_network_v1_base',

alias = 'perpetual_trades',
partition_by = ['block_month'],
materialized = 'incremental',
file_format = 'delta',
incremental_strategy = 'merge',
Hosuke marked this conversation as resolved.
Show resolved Hide resolved
unique_key = ['block_date', 'blockchain', 'project', 'version', 'tx_hash', 'evt_index'],
post_hook='{{ expose_spells(\'["base"]\',
spell_type = "project",
spell_name = "gains_network",
contributors = \'["princi"]\') }}'
)
}}

-- {% set project_start_date = '2024-01-01' %}

WITH position_changes AS (
-- Position Size Decreases
SELECT
evt_block_time,
evt_block_number,
evt_tx_hash,
evt_tx_from,
evt_tx_to,
evt_index,
contract_address,
trader,
pairIndex,
long,
collateralDelta,
collateralPriceUsd,
oraclePrice,
leverageDelta,
"values" as value_data,
'decrease' as action
FROM {{source('gains_network_base','GNSMultiCollatDiamond_evt_PositionSizeDecreaseExecuted')}}
Hosuke marked this conversation as resolved.
Show resolved Hide resolved

UNION ALL

-- Position Size Increases
SELECT
evt_block_time,
evt_block_number,
evt_tx_hash,
evt_tx_from,
evt_tx_to,
evt_index,
contract_address,
trader,
pairIndex,
long,
collateralDelta,
collateralPriceUsd,
oraclePrice,
leverageDelta,
"values" as value_data,
'increase' as action
FROM {{ source('gains_network_base','GNSMultiCollatDiamond_evt_PositionSizeIncreaseExecuted')}}
Hosuke marked this conversation as resolved.
Show resolved Hide resolved
),

perps AS (
SELECT
evt_block_time AS block_time,
evt_block_number AS block_number,
CASE pairIndex
WHEN 0 THEN 'BTC-USD'
WHEN 1 THEN 'ETH-USD'
WHEN 2 THEN 'LINK-USD'
WHEN 3 THEN 'DOGE-USD'
WHEN 4 THEN 'MATIC-USD'
WHEN 5 THEN 'ADA-USD'
WHEN 6 THEN 'SUSHI-USD'
WHEN 7 THEN 'AAVE-USD'
WHEN 8 THEN 'ALGO-USD'
WHEN 9 THEN 'BAT-USD'
WHEN 10 THEN 'COMP-USD'
WHEN 11 THEN 'DOT-USD'
WHEN 12 THEN 'EOS-USD'
WHEN 13 THEN 'LTC-USD'
WHEN 14 THEN 'MANA-USD'
WHEN 15 THEN 'OMG-USD'
WHEN 16 THEN 'SNX-USD'
WHEN 17 THEN 'UNI-USD'
WHEN 18 THEN 'XLM-USD'
WHEN 19 THEN 'XRP-USD'
WHEN 20 THEN 'ZEC-USD'
WHEN 31 THEN 'LUNA-USD'
WHEN 32 THEN 'YFI-USD'
WHEN 33 THEN 'SOL-USD'
ELSE CONCAT('pair_index_', CAST(pairIndex as VARCHAR))
END AS virtual_asset,

CASE pairIndex
WHEN 0 THEN 'BTC-USD'
WHEN 1 THEN 'ETH-USD'
WHEN 2 THEN 'LINK-USD'
WHEN 3 THEN 'DOGE-USD'
WHEN 4 THEN 'MATIC-USD'
WHEN 5 THEN 'ADA-USD'
WHEN 6 THEN 'SUSHI-USD'
WHEN 7 THEN 'AAVE-USD'
WHEN 8 THEN 'ALGO-USD'
WHEN 9 THEN 'BAT-USD'
WHEN 10 THEN 'COMP-USD'
WHEN 11 THEN 'DOT-USD'
WHEN 12 THEN 'EOS-USD'
WHEN 13 THEN 'LTC-USD'
WHEN 14 THEN 'MANA-USD'
WHEN 15 THEN 'OMG-USD'
WHEN 16 THEN 'SNX-USD'
WHEN 17 THEN 'UNI-USD'
WHEN 18 THEN 'XLM-USD'
WHEN 19 THEN 'XRP-USD'
WHEN 20 THEN 'ZEC-USD'
WHEN 31 THEN 'LUNA-USD'
WHEN 32 THEN 'YFI-USD'
WHEN 33 THEN 'SOL-USD'
ELSE CONCAT('pair_index_', CAST(pairIndex as VARCHAR))
END AS underlying_asset,

CASE pairIndex
WHEN 0 THEN 'BTC-USD'
WHEN 1 THEN 'ETH-USD'
WHEN 2 THEN 'LINK-USD'
WHEN 3 THEN 'DOGE-USD'
WHEN 4 THEN 'MATIC-USD'
WHEN 5 THEN 'ADA-USD'
WHEN 6 THEN 'SUSHI-USD'
WHEN 7 THEN 'AAVE-USD'
WHEN 8 THEN 'ALGO-USD'
WHEN 9 THEN 'BAT-USD'
WHEN 10 THEN 'COMP-USD'
WHEN 11 THEN 'DOT-USD'
WHEN 12 THEN 'EOS-USD'
WHEN 13 THEN 'LTC-USD'
WHEN 14 THEN 'MANA-USD'
WHEN 15 THEN 'OMG-USD'
WHEN 16 THEN 'SNX-USD'
WHEN 17 THEN 'UNI-USD'
WHEN 18 THEN 'XLM-USD'
WHEN 19 THEN 'XRP-USD'
WHEN 20 THEN 'ZEC-USD'
WHEN 31 THEN 'LUNA-USD'
WHEN 32 THEN 'YFI-USD'
WHEN 33 THEN 'SOL-USD'
ELSE CONCAT('pair_index_', CAST(pairIndex as VARCHAR))
END AS market,

contract_address AS market_address,
(collateralDelta * collateralPriceUsd * leverageDelta) / 1e36 AS volume_usd,
CAST(JSON_EXTRACT(value_data, '$.vaultFeeCollateral') AS double) / 1e18 AS fee_usd, -- Changed to JSON_EXTRACT
collateralDelta / 1e18 AS margin_usd,

CASE
WHEN action = 'increase' AND long = true THEN 'long'
WHEN action = 'increase' AND long = false THEN 'short'
WHEN action = 'decrease' AND long = true THEN 'close_long'
WHEN action = 'decrease' AND long = false THEN 'close_short'
END AS trade,

'gains_network' AS project,
'1' AS version,
'gains_network' AS frontend,
trader,
collateralDelta * leverageDelta AS volume_raw,
evt_tx_hash AS tx_hash,
evt_index
FROM position_changes
)

SELECT
'base' AS blockchain,
CAST(date_trunc('DAY', perps.block_time) AS date) AS block_date,
CAST(date_trunc('MONTH', perps.block_time) AS date) AS block_month,
perps.block_time,
perps.virtual_asset,
perps.underlying_asset,
perps.market,
perps.market_address,
perps.volume_usd,
perps.fee_usd,
perps.margin_usd,
perps.trade,
perps.project,
perps.version,
perps.frontend,
perps.trader,
CAST(perps.volume_raw as UINT256) as volume_raw,
perps.tx_hash,
tx."from" AS tx_from,
tx."to" AS tx_to,
perps.evt_index
FROM perps
INNER JOIN {{ source('base', 'transactions') }} AS tx
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can make a transactions_filtered CTE with incremental filter first for fast loading.

ON perps.tx_hash = tx.hash
AND perps.block_number = tx.block_number
AND tx.block_time >= DATE '2024-01-01'
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,6 @@ base,2023-09-21,WETH,ETH/USD,0xad378c374f7996235e927e693edea32605c0a61f,Close Lo
base,2024-01-03,snxUSD,Ethereum,0x0a2af931effd34b81ebcc57e3d3c9b1e1de1c9ce,close,Synthetix,3,0xb1dcb41bd0d90f418bcea2e7338df2290e50f1cd2185b2b75ec01fb7163fd240
base,2024-02-15,snxUSD,Ethereum,0x0a2af931effd34b81ebcc57e3d3c9b1e1de1c9ce,long,Synthetix,3,0xf0cae8268019a3e6bff055d496a5f52ed805f60f7582791d93944c026fd61b98
arbitrum,2023-02-17,,,0xda1a7ea276fbdb16ebabb5b38257b1d56b302e4a,open-long,vela_exchange,1,0x6a783688a2e013bfe84a6e7ae65dfd2f2c01e452b360a07a4bdf4d502ee8d187
arbitrum,2023-02-17,,,0xda1a7ea276fbdb16ebabb5b38257b1d56b302e4a,open-long,vela_exchange,1,0x94cacbb99ca4d6b11fb660dc71e6da77f98f6038752f71b158903c492578e34c
arbitrum,2023-02-17,,,0xda1a7ea276fbdb16ebabb5b38257b1d56b302e4a,open-long,vela_exchange,1,0x94cacbb99ca4d6b11fb660dc71e6da77f98f6038752f71b158903c492578e34c
base,2024-10-22,BTC-USD,BTC-USD,0x6cd5ac19a07518a8092eeffda4f1174c72704eeb,long,gains_network,1,0x34397f0d62a19bfe6a325c2a906560af6cf0f699b0893a333996c0b361c6a4d8
base,2024-10-06,COMP-USD,COMP-USD,0x6cd5ac19a07518a8092eeffda4f1174c72704eeb,long,gains_network,1,0x8836d5e2955cdbaee1292a5016ea51301c459897bf7ad319553e0c51c4fcbce9
10 changes: 10 additions & 0 deletions sources/gains_network/gains_network_base_sources.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version: 2

sources:
- name: gains_network_base
description: base decoded tables related to Gains Network
tables:
- name: GNSMultiCollatDiamond_evt_PositionSizeIncreaseExecuted
description: "Details the new positions opened"
- name: GNSMultiCollatDiamond_evt_PositionSizeDecreaseExecuted
description: "Details the swaps to close existing positions"
Loading