forked from duneanalytics/spellbook
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'duneanalytics:main' into main
- Loading branch information
Showing
10 changed files
with
426 additions
and
9 deletions.
There are no files selected for viewing
83 changes: 83 additions & 0 deletions
83
dbt_subprojects/hourly_spellbook/models/_project/safe/blast/safe_blast_eth_transfers.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
{{ | ||
config( | ||
materialized='incremental', | ||
schema = 'safe_blast', | ||
alias= 'eth_transfers', | ||
partition_by = ['block_month'], | ||
unique_key = ['block_date', 'address', 'tx_hash', 'trace_address'], | ||
on_schema_change='fail', | ||
file_format ='delta', | ||
incremental_strategy='merge', | ||
post_hook = '{{ expose_spells( | ||
blockchains = \'["blast"]\', | ||
spell_type = "project", | ||
spell_name = "safe", | ||
contributors = \'["danielpartida"]\') }}' | ||
) | ||
}} | ||
|
||
{% set project_start_date = '2024-02-24' %} | ||
|
||
select | ||
t.*, | ||
p.price * t.amount_raw / 1e18 AS amount_usd | ||
|
||
from ( | ||
|
||
select | ||
'blast' as blockchain, | ||
'ETH' as symbol, | ||
s.address, | ||
try_cast(date_trunc('day', et.block_time) as date) as block_date, | ||
CAST(date_trunc('month', et.block_time) as DATE) as block_month, | ||
et.block_time, | ||
-CAST(et.value AS INT256) as amount_raw, | ||
et.tx_hash, | ||
array_join(et.trace_address, ',') as trace_address | ||
from {{ source('blast', 'traces') }} et | ||
join {{ ref('safe_blast_safes') }} s on et."from" = s.address | ||
and et."from" != et.to -- exclude calls to self to guarantee unique key property | ||
and et.success = true | ||
and (lower(et.call_type) not in ('delegatecall', 'callcode', 'staticcall') or et.call_type is null) | ||
and et.value > UINT256 '0' -- et.value is uint256 type | ||
{% if not is_incremental() %} | ||
where et.block_time > timestamp '{{project_start_date}}' -- for initial query optimisation | ||
{% else %} | ||
-- to prevent potential counterfactual safe deployment issues we take a bigger interval | ||
where et.block_time > date_trunc('day', now() - interval '10' day) | ||
{% endif %} | ||
|
||
union all | ||
|
||
select | ||
'blast' as blockchain, | ||
'ETH' as symbol, | ||
s.address, | ||
try_cast(date_trunc('day', et.block_time) as date) as block_date, | ||
CAST(date_trunc('month', et.block_time) as DATE) as block_month, | ||
et.block_time, | ||
CAST(et.value AS INT256) as amount_raw, | ||
et.tx_hash, | ||
array_join(et.trace_address, ',') as trace_address | ||
from {{ source('blast', 'traces') }} et | ||
join {{ ref('safe_blast_safes') }} s on et.to = s.address | ||
and et."from" != et.to -- exclude calls to self to guarantee unique key property | ||
and et.success = true | ||
and (lower(et.call_type) not in ('delegatecall', 'callcode', 'staticcall') or et.call_type is null) | ||
and et.value > UINT256 '0' -- et.value is uint256 type | ||
{% if not is_incremental() %} | ||
where et.block_time > timestamp '{{project_start_date}}' -- for initial query optimisation | ||
{% endif %} | ||
{% if is_incremental() %} | ||
-- to prevent potential counterfactual safe deployment issues we take a bigger interval | ||
where et.block_time > date_trunc('day', now() - interval '10' day) | ||
{% endif %} | ||
) t | ||
|
||
left join {{ source('prices', 'usd') }} p on p.blockchain is null | ||
and p.symbol = t.symbol | ||
and p.minute = date_trunc('minute', t.block_time) | ||
{% if is_incremental() %} | ||
-- to prevent potential counterfactual safe deployment issues we take a bigger interval | ||
and p.minute > date_trunc('day', now() - interval '10' day) | ||
{% endif %} |
48 changes: 48 additions & 0 deletions
48
dbt_subprojects/hourly_spellbook/models/_project/safe/blast/safe_blast_safes.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
{{ | ||
config( | ||
materialized='incremental', | ||
schema = 'safe_blast', | ||
alias= 'safes', | ||
partition_by = ['block_month'], | ||
unique_key = ['block_date', 'address'], | ||
on_schema_change='fail', | ||
file_format ='delta', | ||
incremental_strategy='merge', | ||
post_hook = '{{ expose_spells( | ||
blockchains = \'["blast"]\', | ||
spell_type = "project", | ||
spell_name = "safe", | ||
contributors = \'["danielpartida"]\') }}' | ||
) | ||
}} | ||
|
||
{% set project_start_date = '2024-02-24' %} | ||
|
||
select | ||
'blast' as blockchain, | ||
et."from" as address, | ||
case | ||
when et.to = 0xd9db270c1b5e3bd161e8c8503c55ceabee709552 then '1.3.0' | ||
when et.to = 0x3e5c63644e683549055b9be8653de26e0b4cd36e then '1.3.0L2' | ||
when et.to = 0x41675C099F32341bf84BFc5382aF534df5C7461a then '1.4.1' | ||
when et.to = 0x29fcB43b46531BcA003ddC8FCB67FFE91900C762 then '1.4.1L2' | ||
else 'unknown' | ||
end as creation_version, | ||
try_cast(date_trunc('day', et.block_time) as date) as block_date, | ||
CAST(date_trunc('month', et.block_time) as DATE) as block_month, | ||
et.block_time as creation_time, | ||
et.tx_hash | ||
from {{ source('blast', 'traces') }} et | ||
join {{ ref('safe_blast_singletons') }} s | ||
on et.to = s.address | ||
where et.success = true | ||
and et.call_type = 'delegatecall' -- delegatecall to singleton is Safe (proxy) address | ||
and bytearray_substring(et.input, 1, 4) in ( | ||
0xb63e800d -- setup method v1.3.0, v1.3.0L2, v1.4.1, v.1.4.1L2 | ||
) | ||
and et.gas_used > 10000 -- to ensure the setup call was successful. excludes e.g. setup calls with missing params that fallback | ||
{% if not is_incremental() %} | ||
and et.block_time > TIMESTAMP '{{project_start_date}}' -- for initial query optimisation | ||
{% else %} | ||
and {{ incremental_predicate('et.block_time') }} | ||
{% endif %} |
149 changes: 149 additions & 0 deletions
149
dbt_subprojects/hourly_spellbook/models/_project/safe/blast/safe_blast_schema.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
version: 2 | ||
|
||
models: | ||
- name: safe_blast_safes | ||
meta: | ||
blockchain: blast | ||
project: safe | ||
contributors: danielpartida | ||
config: | ||
tags: ['safe', 'blast'] | ||
description: "Safe addresses" | ||
tests: | ||
- dbt_utils.unique_combination_of_columns: | ||
combination_of_columns: | ||
- block_date | ||
- address | ||
columns: | ||
- &blockchain | ||
name: blockchain | ||
description: "The blockchain on which the Safe is deployed" | ||
- &address | ||
name: address | ||
description: "Safe contract address" | ||
- &creation_version | ||
name: creation_version | ||
description: "Version of initially created safe" | ||
- &block_date | ||
name: block_date | ||
- &block_month | ||
name: block_month | ||
- &creation_time | ||
name: creation_time | ||
description: "Date/time of safe creation" | ||
- &tx_hash | ||
name: tx_hash | ||
|
||
- name: safe_blast_eth_transfers | ||
meta: | ||
blockchain: blast | ||
project: safe | ||
contributors: danielpartida | ||
config: | ||
tags: ['safe', 'transfers', 'blast'] | ||
description: "Eth transfers for safes" | ||
tests: | ||
- dbt_utils.unique_combination_of_columns: | ||
combination_of_columns: | ||
- block_date | ||
- address | ||
- tx_hash | ||
- trace_address | ||
columns: | ||
- *blockchain | ||
- &symbol | ||
name: symbol | ||
description: "Symbol of native gas token: ETH" | ||
- *address | ||
- *block_date | ||
- *block_month | ||
- &block_time | ||
name: block_time | ||
description: "Date of Eth transfer" | ||
- &amount_raw | ||
name: amount_raw | ||
description: "Raw amount of transferred ETH" | ||
- *tx_hash | ||
- &trace_address | ||
name: trace_address | ||
- &amount_usd | ||
name: amount_usd | ||
description: "USD amount of transferred ETH" | ||
|
||
- name: safe_blast_singletons | ||
meta: | ||
blockchain: blast | ||
project: safe | ||
contributors: danielpartida | ||
config: | ||
tags: ['safe', 'singletons', 'blast'] | ||
description: "Singletons addresses used with Safes" | ||
columns: | ||
- name: address | ||
description: "Safe contract address" | ||
tests: | ||
- unique | ||
- not_null | ||
|
||
- name: safe_blast_transactions | ||
meta: | ||
blockchain: blast | ||
project: safe | ||
contributors: danielpartida | ||
config: | ||
tags: ['safe', 'blast'] | ||
description: "Safe transactions" | ||
tests: | ||
- dbt_utils.unique_combination_of_columns: | ||
combination_of_columns: | ||
- block_date | ||
- tx_hash | ||
- trace_address | ||
columns: | ||
- *blockchain | ||
- *block_date | ||
- *block_month | ||
- *block_time | ||
- &block_number | ||
name: block_number | ||
description: "Number of block" | ||
- *tx_hash | ||
- name: address | ||
description: "Safe contract address" | ||
- &to | ||
name: to | ||
description: "Destination address" | ||
- &value | ||
name: value | ||
description: "Value of transaction" | ||
- &gas | ||
name: gas | ||
description: "Gas limit set for transaction" | ||
- &execution_gas_used | ||
name: execution_gas_used | ||
description: "Execution gas used during transaction, for more details see https://dune.com/docs/data-tables/raw/evm/traces/?h=traces#gas-used-in-traces" | ||
- &total_gas_used | ||
name: total_gas_used | ||
description: "Total gas used during transaction" | ||
- &tx_index | ||
name: tx_index | ||
description: "Transaction index" | ||
- &sub_traces | ||
name: sub_traces | ||
description: "Number of sub traces" | ||
- *trace_address | ||
- &success | ||
name: success | ||
description: "Success state of transaction" | ||
- &error | ||
name: error | ||
description: "Error of transaction if any" | ||
- &code | ||
name: code | ||
description: "Code" | ||
- &input | ||
name: input | ||
description: "Input data" | ||
- &output | ||
name: output | ||
description: "Output data" |
22 changes: 22 additions & 0 deletions
22
dbt_subprojects/hourly_spellbook/models/_project/safe/blast/safe_blast_singletons.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
{{ | ||
config( | ||
materialized='table', | ||
schema = 'safe_blast', | ||
alias= 'singletons', | ||
post_hook = '{{ expose_spells( | ||
blockchains = \'["blast"]\', | ||
spell_type = "project", | ||
spell_name = "safe", | ||
contributors = \'["danielpartida"]\') }}' | ||
) | ||
}} | ||
|
||
|
||
-- Fetch all known singleton/mastercopy addresses used via factories. | ||
select distinct singleton as address | ||
from {{ source('gnosis_safe_blast', 'GnosisSafeProxyFactory_v1_3_0_evt_ProxyCreation') }} | ||
|
||
union | ||
|
||
select distinct singleton as address | ||
from {{ source('gnosis_safe_blast', 'SafeProxyFactory_v1_4_1_evt_ProxyCreation') }} |
68 changes: 68 additions & 0 deletions
68
dbt_subprojects/hourly_spellbook/models/_project/safe/blast/safe_blast_transactions.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
{{ | ||
config( | ||
materialized='incremental', | ||
schema = 'safe_blast', | ||
alias= 'transactions', | ||
partition_by = ['block_month'], | ||
unique_key = ['block_date', 'tx_hash', 'trace_address'], | ||
file_format ='delta', | ||
incremental_strategy='merge', | ||
post_hook = '{{ expose_spells( | ||
blockchains = \'["blast"]\', | ||
spell_type = "project", | ||
spell_name = "safe", | ||
contributors = \'["danielpartida"]\') }}' | ||
) | ||
}} | ||
|
||
{% set project_start_date = '2024-02-24' %} | ||
|
||
select | ||
'blast' as blockchain, | ||
try_cast(date_trunc('day', tr.block_time) as date) as block_date, | ||
CAST(date_trunc('month', tr.block_time) as DATE) as block_month, | ||
tr.block_time, | ||
tr.block_number, | ||
tr.tx_hash, | ||
s.address, | ||
tr.to, | ||
tr.value, | ||
tr.gas, | ||
tr.gas_used as execution_gas_used, | ||
et.gas_used as total_gas_used, | ||
tr.tx_index, | ||
tr.sub_traces, | ||
tr.trace_address, | ||
tr.success, | ||
tr.error, | ||
tr.code, | ||
tr.input, | ||
tr.output, | ||
case | ||
when bytearray_substring(tr.input, 1, 4) = 0x6a761202 then 'execTransaction' | ||
when bytearray_substring(tr.input, 1, 4) = 0x468721a7 then 'execTransactionFromModule' | ||
when bytearray_substring(tr.input, 1, 4) = 0x5229073f then 'execTransactionFromModuleReturnData' | ||
else 'unknown' | ||
end as method | ||
from {{ source('blast', 'traces') }} tr | ||
join {{ ref('safe_blast_safes') }} s | ||
on s.address = tr."from" | ||
join {{ ref('safe_blast_singletons') }} ss | ||
on tr.to = ss.address | ||
join {{ source('blast', 'transactions') }} et | ||
on tr.tx_hash = et.hash | ||
{% if is_incremental() %} | ||
and {{ incremental_predicate('et.block_time') }} | ||
{% endif %} | ||
and tr.block_number = et.block_number | ||
where bytearray_substring(tr.input, 1, 4) in ( | ||
0x6a761202, -- execTransaction | ||
0x468721a7, -- execTransactionFromModule | ||
0x5229073f -- execTransactionFromModuleReturnData | ||
) | ||
and tr.call_type = 'delegatecall' | ||
{% if not is_incremental() %} | ||
and tr.block_time > TIMESTAMP '{{project_start_date}}' -- for initial query optimisation | ||
{% else %} | ||
and {{ incremental_predicate('tr.block_time') }} | ||
{% endif %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.