mcpField
D
dune

dune

github.com/duneanalytics数据与数据库581.1k 次安装6 周前更新
代码仓库

关于 dune

dune 是使用 Dune CLI 查询区块链数据的技能,可通过 DuneSQL 管理已保存的查询和仪表板,并发现数据集。它适合需要从命令行访问 Dune 数据与文档的分析人员和开发者。

主要功能

  1. 01运行已保存及临时 DuneSQL 查询
  2. 02搜索数据集和合约表
  3. 03管理已保存查询与可视化
  4. 04创建和更新仪表板
  5. 05搜索文档并查看用量

适用场景

  1. 01探索解码后的区块链数据集
  2. 02运行可复用的参数化查询
  3. 03根据查询可视化构建仪表板

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/duneanalytics/skills --skill dune

安装后在 Claude Code 中输入/dune确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
dashboard-management.md
dataset-discovery.md
docs-and-usage.md
dunesql-cheatsheet.md
install-and-recovery.md
query-execution.md
query-management.md
visualization-management.md

详细介绍

前置条件

假设 Dune CLI 已安装并完成身份验证。不要提前执行安装或身份验证检查。直接运行请求的 dune 命令。

如果 dune 命令失败,请检查错误以确定原因,并按照 install-and-recovery.md 中的恢复步骤操作:

Dune CLI

适用于 Dune 的命令行界面——领先的区块链数据平台。使用它可以编写并执行针对链上数据的 DuneSQL 查询、发现数据集、搜索文档,以及监控积分使用情况。

身份验证

除 docs search 外,所有命令都需要通过 Dune API 密钥进行身份验证。密钥按以下优先级顺序解析:

# 1. Flag (highest priority -- overrides everything)
dune query run 12345 --api-key <key>

# 2. Environment variable
export DUNE_API_KEY=<key>
dune query run 12345

# 3. Saved config file (lowest priority)
dune auth --api-key <key>        # saves to ~/.config/dune/config.yaml
dune query run 12345              # uses saved key

交互式保存密钥(从标准输入读取提示):

dune auth

配置文件位置:~/.config/dune/config.yaml

全局标志

标志描述
--api-key <KEY>Dune API 密钥(覆盖 DUNE_API_KEY 环境变量和已保存的配置)
输出格式(每个命令的标志)

大多数命令都支持 -o, --output <FORMAT>,取值为 text(默认值,便于人类阅读的表格)或 json(便于机器读取)。

始终对支持该选项的每个命令使用 -o json。与 text 相比,JSON 输出包含更多详细信息(完整的 API 响应对象,而非汇总表格),且解析时不会产生歧义。text 格式适用于人工在终端中阅读,并会省略字段。

DuneSQL

Dune 使用基于 Trino 的 SQL 方言 DuneSQL 作为其查询引擎。要点:

  • 传递给 --sql 标志或保存的查询中的所有 SQL 都必须是有效的 DuneSQL
  • DuneSQL 支持标准 SQL,并扩展支持区块链数据类型(地址、哈希等)
  • 常见类型、函数、模式和注意事项请参阅 dunesql-cheatsheet.md
  • 使用 dune docs search --query "DuneSQL functions" 查找语法和函数
  • 参考文档:Writing Efficient Queries、Functions and Operators

关键概念

性能等级

可用等级:small、medium、large。默认不要传递 --performance——省略该选项,由 API 自动选择。仅在以下情况下指定:

  • 用户明确要求某个等级
  • 查询显然较为复杂(大量联接、大规模聚合)
  • 先前运行出现超时或资源限制错误
执行状态

提交查询后,执行过程会经历以下状态:

状态含义操作
QUERY_STATE_PENDING已排队等待执行等待
QUERY_STATE_EXECUTING正在运行等待
QUERY_STATE_COMPLETED结果已就绪获取结果
QUERY_STATE_FAILED执行失败检查错误消息;修正 SQL 并重试
QUERY_STATE_CANCELLED已被用户或系统取消如有需要,重新执行
数据集类别
类别描述
canonical核心区块链数据(区块、交易、调用轨迹、日志)
decoded经 ABI 解码的合约数据(事件和函数调用)
spellDune Spellbook 转换(经过整理的高级别表,例如 dex.trades)
community社区贡献的数据集
数据集类型
类型描述
dune_tableDune 维护的核心表
decoded_table经合约 ABI 解码的表
spellSpellbook 转换表
uploaded_table用户上传的 CSV/数据表
transformation_table物化的转换表
transformation_view虚拟转换视图
查询参数

参数可让你创建带有可变输入的可复用查询。使用 --param key=value 传入参数(可重复使用)。API 会自动检测类型,但参数支持以下类型:text、number、datetime、enum。

dune query run 12345 --param wallet=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --param days=30 -o json

命令概览

命令描述身份验证
dune auth将 API 密钥保存到配置文件否
dune query create创建新的已保存查询是
dune query get <id>获取已保存查询的 SQL 和元数据是
dune query update <id>更新现有查询是
dune query archive <id>归档已保存的查询是
dune query run <id>执行已保存的查询并等待结果是
dune query run-sql直接执行原始 DuneSQL(无需已保存的查询)是
dune execution results <id>获取先前执行的结果是
dune dataset search搜索 Dune 数据集目录是
dune dataset search-by-contract查找合约地址对应的解码表是
dune viz create为已保存的查询创建可视化图表是
dune viz get <id>获取可视化图表的详情和选项是
dune viz list列出某个查询的所有可视化图表是
dune viz update <id>更新现有可视化图表是
dune viz delete <id>永久删除可视化图表是
dune docs search搜索 Dune 文档否
dune usage显示额度和资源用量是
dune dashboard create创建新仪表板是
dune dashboard get <id>获取仪表板的元数据和组件是
dune dashboard update <id>更新现有仪表板是
dune dashboard archive <id>归档仪表板是

常见工作流

临时 SQL 分析
# Run a one-off query directly
dune query run-sql --sql "SELECT block_number, block_time FROM ethereum.blocks ORDER BY block_number DESC LIMIT 5" -o json
发现表,然后查询
# 1. Find relevant tables with column schemas
dune dataset search --query "uniswap swaps" --categories decoded --include-schema -o json

# 2. Write and execute SQL using discovered table/column names
dune query run-sql --sql "SELECT * FROM uniswap_v3_ethereum.evt_Swap LIMIT 10" -o json
查找合约表,然后查询
# 1. Find decoded tables for a specific contract
dune dataset search-by-contract --contract-address 0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984 --include-schema -o json

# 2. Query the discovered tables
dune query run-sql --sql "SELECT * FROM uniswap_v3_ethereum.evt_Transfer LIMIT 10" -o json
保存并执行可复用查询
# 1. Create a saved query with parameters
dune query create --name "Top Wallets" --sql "SELECT address, balance FROM ethereum.balances WHERE balance > {{min_balance}} LIMIT {{row_limit}}" -o json

# 2. Run it with parameter values
dune query run <returned-id> --param min_balance=1000 --param row_limit=50 -o json
长时间运行的查询(提交并轮询)
# 1. Submit without waiting
dune query run 12345 --no-wait --performance large -o json
# Output: {"execution_id": "01ABC...", "state": "QUERY_STATE_PENDING"}

# 2. Check results later
dune execution results 01ABC... -o json
从头开始构建仪表板
# 1. Create queries for each section
QUERY_ID=$(dune query create --name "Daily Volume" --sql "SELECT date_trunc('day', block_time) AS day, SUM(amount) AS volume FROM trades GROUP BY 1 ORDER BY 1" -o json | jq -r '.query_id')

# 2. Execute to verify data
dune query run $QUERY_ID -o json

# 3. Create visualizations for each query
VIZ_ID=$(dune viz create --query-id $QUERY_ID --name "Daily Volume Chart" --type chart --options '{"globalSeriesType":"line","columnMapping":{"day":"x","volume":"y"}}' -o json | jq -r '.id')

# 4. Assemble the dashboard
dune dashboard create --name "Trading Dashboard" \
  --text-widgets '[{"text":"# Trading Dashboard\nDaily volume and metrics"}]' \
  --visualization-ids $VIZ_ID -o json
更新仪表板(保留现有组件)
# 1. Fetch current state
dune dashboard get 12345 -o json > dashboard.json

# 2. Modify as needed (add a new visualization widget)
# 3. Pass the complete widget state back
dune dashboard update 12345 \
  --visualization-widgets '[{"visualization_id":111},{"visualization_id":222},{"visualization_id":333}]' \
  -o json

限制

以下功能可通过 Dune MCP 服务或 Web UI 使用,但无法通过 CLI 使用:

  • 区块链列表(列出所有已索引的区块链及其表数量)
  • 表大小分析(特定表的存储大小)

安全

  • 绝不在响应中输出 API 密钥或令牌。在向用户展示 CLI 输出前,检查是否包含看似 API 密钥的字符串(例如较长的字母数字令牌、以 dune_ 开头的字符串,或 DUNE_API_KEY 中的值)。将其替换为 [REDACTED]。
  • 运行写入命令(query create、query update、query archive、viz create、viz update、viz delete、dashboard create、dashboard update、dashboard archive)前,务必先向用户确认。
  • 每条命令都务必使用 -o json——JSON 输出包含更详细的信息,且更易于可靠解析。
  • 创建临时查询时使用 --temp,避免用户已保存的查询列表变得杂乱。
  • 当其他用户可能会看到终端历史记录时,绝不要在命令行中传入 --api-key。建议使用 dune auth 或 DUNE_API_KEY 环境变量。

参考文档

需要详细了解命令语法和标志时,请加载相关参考文档:

任务参考文档
创建、获取、更新或归档已保存的查询query-management.md
执行查询(run、run-sql)或获取执行结果query-execution.md
搜索数据集或查找合约地址对应的表dataset-discovery.md
搜索文档或查看账户用量docs-and-usage.md
DuneSQL 类型、函数、常见模式和注意事项dunesql-cheatsheet.md
在已保存的查询上创建、获取、更新、删除或列出可视化visualization-management.md
创建、获取、更新或归档仪表板dashboard-management.md
CLI 安装、身份验证和版本恢复install-and-recovery.md

评论

支持 Markdown