本文主要来自Dune的官方文档翻译和摘取
本文主要来自Dune的官方文档翻译和摘取
文档:https://dune.com/docs/ 注册:https://dune.com/auth/register
参考 https://dune.com/docs/quickstart/
--Query to get Ethereum's unique daily active users and passive users in 2023
SELECT
--truncate time to day
date_trunc('day', block_time) AS time,
--count distinct addresses that sent a transactions
COUNT(distinct "from") AS users,
--count distinct addresses that received a transaction
COUNT(distinct "to") AS receiving_addresses
FROM ethereum.transactions WHERE block_time > DATE '2023-01-01'
GROUP BY 1
创建一个visulazation,选择可视化的类型,x,y坐标的数据源,做一些设置,这些都可以在网页上完成。
展示图标。
每次有人查看这个dashboard时,它都会自动更新成最新数据。 关于如何写查询语句的指导:https://dune.com/docs/query/ 可以把生成的visulation插入到twitter等地方。
有时候查询出来的数据,或者构建query的东西是合约里的,需要对合约的数据进行解码。也就是提交合约的abi。
提交合约。 在settings->Contracts里可以提交合约ABI 需要提交:
合约解码被approve后,会收到邮件通知。一般需要6小时才能把数据加载更新完。
然后就可以使用了。在Dune's Explorer里可以看到,可以在查询里使用它们。https://dune.com/docs/app/decoding-contracts/#step-3-finding-your-decoded-contract
其他
Non-EVM Chains
EVM Chains
在触发查询的运行时,可能会消耗credits. 例如下面查询的触发部分。
https://dune.com/docs/query/ 所有数据均来源于查询,因此查询是最重要的部分。 DuneSQL 是我们的区块链数据查询引擎。它是 TrinoSQL 的一个分支,TrinoSQL 是一个开源的分布式 SQL 查询引擎
查询就是用户保存的查询语句,是所有图表数据的来源。 查询分为public和private,public的可以由任何用户触发,private的可以由owner触发。 查询可以通过query editor,dashboard editor,或API触发。另外对热门的query,也会定期自动触发刷新。 Query engine决定了你的查询可以用多少资源。更大的query engine可以查询的更快,也不太会超时。 几种查询触发方式:
而在dashboard里刷新时,就一定需要集群,就得付credit
Dune 具有三种查询引擎大小:community、medium和large。查询引擎的大小决定了分配给查询的资源量。查询引擎越大,分配给查询的资源就越多。这意味着在较大的查询引擎上执行的查询将运行得更快并且不太可能超时。 community引擎是免费的,但大家都用的话,就会很慢。中型需要10个credit,大型需要20个credit。
https://dune.com/docs/query/DuneSQL-reference/ 为了方便对区块链上的数据进行检索和操作,添加了很多自定义的运算符,函数等。 任何修改数据的操作,如create, update,delete,drop,都被禁用,只能查询。因为对图表来说,数据源是只读的。 可以用创建查询的方式,来取代创建view。
https://dune.com/docs/api/ 使用API可以做到:
使用API需要先获取api key。也是需要付费的,从两个维度收费:
datapoints指获取查询结果,可以认为:rows columns,且每个结果有平均100 bytes的大小限制。 Credits = Datapoints/1000 = max(rowscolumns, ceil(totalbytes/100))/1000
Dune的节点提供商是QuickNode. 从节点获得链上原始数据后,会被保存到raw tables,然后通过合约ABI解码后,添加到decoded tables,方便使用。然后创建abstracted tables来标准化和聚合数据,最终提供给用户好用的spell tables. 在使用中,应该优先使用 spellbook 和decoded tables,实在不行才用raw tables.
是一些优化过,抽象出来的表,用它可以很方便。每个知道怎么添加spell book的社区成员都可以自己把自己的数据添加进来。最流行的一些表格:
dex.trades,EVM链上DEX交易的聚合,可以通过这里查看表的columns.
nft.trades,EVM和solana上,NFT交易的抽象和聚合
labels,给地址打标签,是个key-value对。例如针对某地址0xD551234Ae421e3BCBA99A0Da6d736074f22192FF,进行标记:type:cex, name:binance
Tokens:
Metadata:包含token的一些基本信息
tokens.erc20.
Transfer Table:
erc20_ethereum.evt_Transfer
:所有的erc20的transfer event。nft.transfers
:所有erc721,1155的transfer event.
https://dune.com/docs/data-tables/decoded/evm
为ABI中定义的每个事件和函数创建表。随后对该合约进行的每个事件、消息调用或交易都会被解码并作为一行插入到这些表中。 命名:
events: [projectname_blockchain].contractName_evt_eventName
function calls: [projectname_blockchain].contractName_call_eventName
例如:Ethereum上Uniswap-v2的Pair合约的swap事件,会在表: uniswap_v2_ethereum.Pair_evt_Swap 如果一个合约有多个实例,则这些实例会被插入到同一张表里,可以通过contract_address
来区分它们。可以通过labels.contracts来获得唯一的contract names/addresses。 合约必须上传ABI后才可以被解码。在这里可以查看已经支持的合约,在这里可以上传合约。可以通过CSV批量上传。一般上传后需要24h来初始化解码。可以通过这里查看当前表数据跟链上数据的delay。一般几分钟的delay。 例如分析PICKLE 这个代币的一笔转账,可以: Select * from ethereum.logs where tx_hash = '0x2bb7c8283b782355875fa37d05e4bd962519ea294678a3dcf2fdffbbd0761bc5' 得到
block_time | block_number | block_hash | contract_address | topic1 | topic2 | topic3 | topic4 | data | tx_hash | index | tx_index |
这是些原始数据。 但我们还可以这样子: SELECT * FROM pickle_finance_ethereum.PickleToken_evt_Transfer WHERE evt_tx_hash = '0x2bb7c8283b782355875fa37d05e4bd962519ea294678a3dcf2fdffbbd0761bc5' 可以得到:
contract_address | evt_tx_hash | evt_index | evt_block_time | evt_block_number | from | to | value |
这就有用多了。这是因为event被解码了。
原始的,未经处理的数据。 Blocks: 表名:ethereum.blocks,polygon.blocks,optimism.blocks,bnb.blocks。。。 Columns:
time | number | gas_limit | gas_used | difficulty | total_difficulty | size | base_fee_per_gas | hash | parent_hash | miner | nonce |
Events: 表名:ethereum.logs, polygon.logs。。。 Columns:
block_time | block_number | block_hash | contract_address | topic1 | topic2 | topic3 | topic4 | data | tx_hash | index | tx_index |
Traces: 表名:ethereum.traces,polygon.traces... Columns:
block_time | block_number | value | gas | gas_used | block_hash | success | tx_index | sub_traces | error | tx_success | tx_hash | from | to | trace_address | type | address | code | call_type | input | output | refund_address |
Transactions: 表名:ethereum.transactions,polygon.transactions,... Columns:
block_time | block_number | value | gas_limit | gas_price | gas_used | max_fee_per_gas | max_priority_fee_per_gas | priority_fee_per_gas | nonce | index | success | from | to | block_hash | data | hash | type | access_list |
Withdraws: validator提款操作,对我们用处不大,不关心了。
可以是各种各样的数据
可以通过UI或API上传,通过csv完成。 https://dune.com/docs/api/api-reference/upload-data/
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!