
如何使用 Dune 构建 Solana 数据仪表板
Solana 区块链兼具强大的速度和可扩展性,每秒可处理数千笔交易。
这为分析师和开发者带来了海量的 Solana 历史数据,但要充分利用这些数据,需要合适的工具。Dune 是领先的链上数据平台,可将原始区块链数据转化为可执行的洞察和开发者 API。
本指南将介绍如何在 Dune 上构建全面的 Solana 仪表板,并利用实时指标、历史趋势和已解码的程序数据。
了解 Solana 的数据规模
Solana 的吞吐量通常超过每秒 3,000 笔交易,因此会产生海量数据。这些数据涵盖区块生成、交易日志,以及代币兑换或 NFT 铸造等特定程序交互。
Dune 能以极低延迟捕获 Solana 的实时活动。区块头和交易签名等原始数据流可在一分钟内完成更新。例如,查询 solana.transactions 可以监控网络活动,包括代币发行期间用户参与度的激增。
在 Dune 平台上可轻松将这些数据可视化。Dune 为 Solana 从 2020 年创世区块到最新 slot 的全部历史数据建立了索引。你可以借此分析长期趋势,例如总交易量的增长(目前已超过 3000 亿笔),或 DeFi 活动的季节性波动。例如,此查询可追踪网络启动以来的累计交易量,另一项查询则可找出最早和最新记录的区块。
与 Ethereum、BSC 或 Polygon 相比,Solana 凭借高吞吐量,在数据规模上尤为突出。横向对比显示,Solana 的每日交易量占据主导地位,但 Ethereum 在费用和 DeFi 流动性方面仍然领先。
基础概念:Solana 的数据结构
接下来,我们将探索 Solana 的账户模型、交易结构,以及如何使用 Dune 分析 Solana 交易。
Solana 账户模型
Solana 的核心是其独特的账户模型。所有链上数据都存储在账户中,包括程序逻辑、代币余额和可执行代码。Solana 账户具有以下特点:
账户地址
一种 32 字节标识符,可由公钥派生;对于程序派生地址(PDA),则由种子派生。例如,Raydium 流动性池地址就是根据代币铸币地址和其他参数生成的 PDA。
数据存储
账户最多可为可执行字节码程序存储 10MB 数据,或为 PDA 中的状态信息存储 10KB 数据。
所有权和租金
账户必须持有 lamport(SOL 的最小单位),以支付与数据大小成比例的存储成本(租金)。owner 字段用于指定控制该账户的程序或钱包。只有所有者可以修改其数据或扣除 lamport。可执行标志则用于表明账户是否包含可执行代码。
以实际场景为例,SPL 代币账户会在 data 字段中存储关联钱包的余额,其所有者则是 Token Program。
Solana 交易的结构
交易是与 Solana 程序交互的载体。每笔交易都包括:
- 一个签名(唯一标识符)以及以 lamport 支付的费用
- 一条或多条指令(ixs),用于指定:
- 要执行的程序(例如 Raydium 的兑换函数)。
- 要读取和写入的账户(例如代币金库、用户钱包)。
- 指令专用参数(例如兑换金额、费用)。
交易的主要特点包括:
- 原子执行:交易要么全部成功,要么失败,不会出现部分完成的状态。
- 跨程序调用(CPI):程序可以调用其他程序,从而创建嵌套指令。
- 日志和错误:失败的交易会包含错误消息,日志则会捕获运行时事件(例如兑换详情)。
在 Dune 上分析交易
Dune 的 solana.transactions 表可提供细粒度洞察:
- block_slot:处理交易时的 slot 编号。
- fee:以 lamport 计价的交易成本。
- error:失败原因(如适用)。
- accounts:所有相关账户的地址。
- log_messages:发出的事件日志(例如代币铸造)。
如需更深入地检查,请使用 solana.instruction_calls:
- outer_instruction_index:指令在交易中的位置。
- inner_instruction_index:追踪 CPI 层级。它表示 inner_instruction 在对应指令中的位置,与 stack_height 不同。Dune 目前正在添加 stack_height。
- executing_account:执行指令的程序。
- data:原始指令字节(十六进制编码)。
浏览 Dune 上的 Solana 数据
Dune 支持超过 150 个已解码的 Solana 程序,其中包括 Raydium 和 Magic Eden 等主要协议。社区已构建超过 2,000 个仪表板,涵盖从验证者性能到模因币趋势的各种指标。新程序也在持续加入。用户可以通过 Dune 网站提交解码请求。
Dune 将 Solana 数据分为三层:
1. 原始数据
solana.blocks 和 solana.instruction_calls 等表提供未经筛选的链上活动数据。
2. 清洗后的数据
代币价格或美元等值金额等预处理抽象数据可简化分析。
3. 已解码数据
协议专用数据集(例如用于 DEX 兑换的 dex.trades,或用于 NFT 销售的 nft.trades)提供开箱即用的指标。
如需追踪资产,可以使用 staking.actions 等表查看验证者活动,或使用 prices.usd 查看代币价格。交易分析师可以利用 dex.trades,对比 Orca 和 Raydium 等平台的交易量。
幕后原理:Dune 如何处理数据
Dune 通过 Geyser 插件摄取 Solana 数据,并将链上更新流式传输至索引系统。随后,系统使用程序 IDL 解码原始数据,并将其整理到便于查询的表中。如需深入了解 Solana 的数据基础设施,请参阅 Helius 的 Solana 数据工具指南。
分步指南:构建你的 Solana 仪表板
第 1 步:明确目标
首先确定重点领域。你要分析 NFT 销售、DeFi 收益,还是网络性能?在此示例中,我们将构建一个追踪每日 DEX 交易量的仪表板。
第 2 步:查询数据
打开 Dune 的查询编辑器,从 dex.trades 中提取交易数据:
SELECT DATE(block_time) AS date, SUM(amount_usd) AS volume
FROM solana.dex.trades
WHERE project = 'orca'
GROUP BY 1
ORDER BY date DESC; 这会获取 Orca 的每日交易量。保存查询,并将其可视化为柱状图。
第 3 步:组装和自定义
创建一个新仪表板并添加图表。你还可以加入其他小组件,例如显示总交易笔数的计数器,或按交易量对热门代币进行排名的表格。使用文本框标注趋势,例如新代币发行推动的交易量激增。
观看这个短视频系列,完整了解如何在 Dune 上构建 Solana 仪表板。
高级分析实用技巧
技巧 1:结合原始数据和已解码数据
如果某个程序尚未完全解码(例如新的 NFT 市场),可以使用 solana.instruction_calls 手动解析日志。然后与已解码的代币表交叉比对,以确定资产详情。
技巧 2:优化查询速度
Solana 的数据规模可能会降低查询速度。
尽早按 block_slot 或 block_time 进行筛选,并为频繁访问的指标使用物化视图。
技巧 3:利用价格数据源
将交易与 prices.usd 关联,把代币金额转换为美元。这有助于理解交易量的背景,对波动性较大的资产尤其重要。
总结
Dune 将 Solana 源源不断的数据转化为结构化且易于访问的资源。掌握其数据集和工具后,你就能发掘可用于决策的洞察,无论是优化协议还是追踪市场趋势。
如需进一步了解,请探索 Solana 的 Geyser 插件架构,并观看这个 Solana 数据 YouTube 播放列表中的视频教程。
相关文章
订阅 Helius
及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新


