数据结构、数据指标、常用工具
数据分析|链上基础知识
链上交易全过程
无论共识算法是POW还是POS,交易过程都是一样的:
流程 | 解释 | 类比 |
---|---|---|
交易创建 | 用户用钱包发起交易 | 写信+贴邮票 |
交易广播 | 交易被广播到网络 | 投进邮筒 |
节点验证 | 节点验证交易是否合法 | 邮局检查信件 |
交易打包 | 矿工打包交易进区块 | 把信封装进快递箱 |
添加区块 | 区块加入区块链 | 快递被正式寄出 |
交易确认 | 区块被后续确认加固 | 每一站盖章确认 |
交易完成 | 交易到账且不可更改 | 收信人收到信件 |
1. 交易创建(用户写信)
🔹 用户使用钱包或与智能合约交互,发起交易。
🔹 内容包括:谁发钱(发送方地址)、谁收钱(接收方地址)、多少钱、Gas 费用等。
📮 比喻:你写了一封信,准备寄给朋友。
🔸 就像在信封上写上寄件人、收件人、信件内容,还贴好邮票(手续费)并签名。
2. 交易广播(把信送到邮局)
🔹 钱包把交易发出去,广播到整个区块链网络。
🔹 所有节点(类似邮局)都能收到这封“交易信”。
📮 比喻:你把信投进邮筒,邮递员把它传送到各地邮局。
3. 节点验证(邮局验信)
🔹 网络中的节点收到交易后会进行预验证:
- 签名是否正确(你本人授权)
- 余额是否充足
- 交易格式是否标准
- 有没有重复交易(防止双花)
🔸 不合法的交易会被丢弃,合法交易进入“交易池”(等待发送的信件箱)。
📮 比喻:邮局检查信有没有问题——邮票够不够,地址写得对不对,信是不是你自己签的。
4. 交易打包(邮局装箱)
🔹 矿工(或验证者)从交易池里选出多笔合法交易(优先选手续费高的),组成一个新区块。
🔹 这个区块就像一个装满信的快递包,准备发往区块链这条“大物流路线”。
📮 比喻:邮局把多封信装进一个快递箱,准备寄出。
5. 交易确认(物流开始+一路盖章)
🔹 区块(包括你的交易)被成功加入到区块链上,这称为第一次确认。
🔹 之后每新增一个新区块,就多一层“确认”(更多人认账,数据更难被改)。
🔸 在比特币/以太坊等链上,通常 6 次确认后被认为完全安全不可逆。
📮 比喻:快递箱被正式寄出,在路上被每一站盖章确认,越来越无法撤回。
6. 交易完成(朋友收到信)
🔹 用户可以在浏览器上看到交易“已完成”,资金转账成功、不可撤销。
🔹 如果这是一次合约调用,比如买 NFT、换币、参与 DeFi,链上的合约也会被成功触发。
📮 比喻:你的朋友打开信件,确定收到。这封信再也拿不回来了。
链上数据结构
交易数据
1. 交易哈希(Transaction Hash 或 Tx Hash)
定义:每笔交易在链上拥有自己的“身份证号”,由一串字符(如 0x…
)组成,唯一且不可更改。
作用:就像快递单号,可以用它在区块链浏览器(如 Etherscan)上查询该交易的所有细节:从谁发、到谁收、金额、手续费、状态、所在区块、高度、时间等。
2. 交易状态(Status)
常见状态:
- Pending(等待中):交易已广播但尚未打包。
- Success(成功):交易已被包含在区块中,并被至少确认一次。
- Failed(失败):交易执行过程中失败(如 Gas 不够、合约抛出错误),状态会显示失败,交易未完成,所转金额也不会改变(如钱包地址金额不会被扣),但 Gas 已消耗,要扣手续费。
- Revert:特指智能合约执行失败,调用了 revert() 语句(如通过 require() 或手动 revert()),回退所有状态变化(包括合约内部的余额改动),仍扣手续费。
作用:让用户知道交易的执行结果及进度 。只要交易开始执行,就会消耗 Gas,并扣掉相应费用,这正是为防止攻击的关键
3. 区块(Block)
定义:一个区块是容纳多笔交易的数据结构,除了交易,还包含区块头(包括前一个区块哈希、时间戳、Merkle 根等)。
作用:批量打包交易、形成链式结构,以保证顺序、安全和可追溯。
4. 时间戳(Timestamp)
定义:区块头里记录的一个时间点,表示“这些交易被哪个时间点打包进该区块”;该区块中所有交易共享相同时间戳。
作用:帮助了解交易发生的大概时间,用于时间序列分析或审计。
5. 收/发双方地址(From/To)
From:发起交易的地址。
To:接收方地址。如果是普通转账,就是收款者;如果是智能合约交互,就是合约地址 。
作用:辨别交易的方向和目的对象。
6. 转账金额(Value)
定义:交易中实际转移的 ETH 数量。
注意:若交易仅是调用合约而未发送 ETH,Value 会是 0。
7. 交易费(Transaction Fee)
定义:用户为交易支付的网络手续费(给矿工/验证者),Transaction Fee = Gas fee = Gas Used × Gas Price
。
作用:决定矿工的打包优先级,费越高,确认速度越快。
8. Gas 与 Gas 价格(Gas Price)
Gas:执行交易所需的“计算单位”(操作复杂度越高,消耗越多)。
Gas Price:你愿意为每单位 Gas 支付多少 ETH(单位是 Gwei,即 10⁻⁹ ETH)。
9. Nonce
定义:一个地址自己发出的交易计数器,每发送一笔 +1,从0开始。
作用:
- 保证交易顺序一致;
- 防止重放攻击和重复交易,
- 如果同地址先后发多笔,只能按 nonce 顺序执行。
智能合约数据
名称 | 作用 |
---|---|
函数(Function) | 用于执行逻辑,与用户交互,如转账、设置参数、查询 |
事件(Event) | 记录操作,让外部监听 |
变量(Variable) | 存储状态数据,如余额、总量。供外部快速查询 |
合约定义逻辑(函数)
什么是函数?
函数就像合约里的“操作按钮”,包裹着一段代码,用于执行某个特定任务。
- 比如
transfer(to, amount)
:调用时就把代币从一个人转给另一个人。 - 再比如
setPrice(...)
:可以设置合约里的某个参数。
作用: 用户或其他合约通过调用函数来触发逻辑,比如转账、查询余额、交互兑换等。
合约定义事件(Events)
什么是事件?
就是在函数执行时“发出的广播信号”,类似“铃声提示”。
比如 Transfer(from, to, amount)
就代表一笔转账发生了。
作用:
- 前端应用或区块链浏览器通过监听事件,可以快速获取链上状态变化。
- 事件也被存进链上日志,不占合约存储但可以被检索。
效果: 减少 Gas 占用,又让外部可以高效地查询特定操作(如转账、授权、交换等)。
合约定义变量(Variables)
什么是变量?
用于存储持久化的状态数据,例如:
uint totalSupply
(总发行量)mapping(address => uint) balanceOf
(记录每个地址的余额)bool paused
(是否暂停)
变量类型:
- 数值类型:如
uint
,bool
,address
- 映射类型:如
mapping(address => uint)
用于关联地址和余额 - 数组、结构体:也可存储复杂数据
作用:
- 存储合约的状态
- 在函数里读取或修改状态,就像从橱柜里拿东西或放东西
范围(可见性):
public
/private
/internal
决定谁能看或改这些变量.
常见链上数据指标
1. 总锁仓量 (Total Value Locked, TVL)
定义:存入 DeFi 协议的总资产价值(通常以 USD 或 ETH 计)。包含:流动性池(如 DEX 中 USDC‑WETH 池中资金)、抵押贷款(存为贷款抵押)、收益聚合(类似 ETF、私募)。
应用:
- 衡量协议规模、受欢迎程度与流动性。
- TVL 越高,说明用户越信任、存入资金越多,低则可能资金流出或信心下降,适用于宏观分析。
- 市场信号:TVL 上升,市场对这个生态的信心增强。下降,资金流出,市场情绪转冷。
计算公式:TVL = 协议中所有资产现价总和(USD 或 ETH)
示例:Alice 存 10 ETH,Bob 存 20 ETH → 协议 TVL = 30 ETH。
2. 活跃地址数 (Active Addresses)
定义:在某个时间段内至少执行过一次交易(发/收都可)的唯一地址数。类似传统的“活跃用户”,但范围是区块链地址。
应用:反映协议或链的用户活跃度/使用量 / 增长趋势。
特点:只计一次;日活/月活均可。
示例:某段时间内,Alice 和 Bob 各交易一次,还有 Charlie 两次交易 → 活跃地址计为 3。
3. 交易数 & 交易量
交易数 (Transaction Count):某时间段内发生的交易笔数(每笔交易哈希作为计数单位)。
交易量 (Trading Volume):这些交易涉及的资产总价值(通常以 USD 或 ETH 计)。
应用:
- 交易数反映链或协议(Defi)的使用频率;
- 交易量体现资金流动规模、区块链网络健康和市场情绪,高交易量通常意味着网络的需求增加。
- 对于DeFi协议,交易量包括通过协议进行的代币交换或质押操作。
示例:Alice 转 2 ETH,Bob 转 3 ETH,Charlie 转 1 ETH → 交易数 = 3,交易量 = 6 ETH。
4. 交易费用 / Gas 费
定义:用户为交易支付给矿工或验证者的费用,即交易成本。
计算:Transaction Fee = Gas Used × Gas Price
。
应用:
- 展示网络拥堵程度与交易成本;
- Gas 价格越高,说明网络越繁忙,用户为优先打包愿意支付更多。
示例:如果交易使用 21,000 Gas,Gas Price 为 50 Gwei → 交易费 = 21,000 × 50 Gwei = 1,050,000 Gwei = 0.00105 ETH。
链上数据分析流程及工具
数据分析的ETL流程
和Web2数据分析类似,一个完整的链上数据分析流程需要经过以下几个步骤:
数据抽取(Extract) → 清洗转换(Transform) → 加载(Load)到数据仓库 → 依据不同业务线及观测指标分析数据 → 输出量化结果。
数据抽取(Extract)
定义:从区块链(如通过 RPC 节点或 Etherscan API)获取原始数据,如区块、交易、事件日志。
特点:原始数据通常是非结构化的 HEX 信息,包括交易输入输出、日志、Trace 等。
例子:调用 Etherscan API 抓取某合约的所有 Deposit 事件原始日志。
清洗转换(Transform)
定义:将非结构化的原始数据(十六进制)解析成结构化格式,通过 ABI 解码参数、日志和交易内容。
例子:解析 Deposit(address user, uint amount)
事件,得到 { user: 0x123… , amount: 10 ETH }
,转换成 JSON 或表格列。
加载(Load)
定义:把清洗后的结构化数据存入数据库或数据仓库,便于后续查询和分析。
例子:将解析好的 Deposit 事件写入 SQL 表 deposits(user, amount, timestamp)
。
分析与输出
定义:根据业务需求(如 TVL、活跃地址、交易量)进行计算、聚合、筛选,并输出可视化结果。
例子:
- 计算某 DeFi 协议的 TVL:统计同一合约地址的所有 deposit 和 withdraw 事件,再用当前价格求值。
- 计算活跃地址数:在某时间窗内,对
deposits.user
做 DISTINCT 计数,得出独立地址数量。 - 交易量统计:对合约中的交易做汇总求和,得到 ETH 或 USD 总交易量。
区块链数据产品
基于链上数据分析的ETL流程,区块链数据产品可以分为数据源、数据开发工具(Data Dev)和数据应用(Data App)三类。
数据源(Raw data + 索引API)
通过节点或 API 提供原始链数据(区块、交易、日志)
如 The Graph、Alchemy
数据开发工具(Data Dev)
针对数据分析或开发人员,可完成ETL,支持 SQL/GraphQL 查询和共享
如 Dune、Flipside
数据应用(Data App)
针对普通用户展示可视化结果,定制性较低但易读
如 Nansen(巨鲸 & Smart Money 行为分析)、Debank(多链资产追踪)、DefiLlama(DeFi TVL & 收益率分析)
目前链上数据分析赛道生态位已经有诸多玩家,根据面向的不同用户类型、不同赛道都有对应的数据产品布局。
觉得文章不错就支持一下呗~

本文版权归 June 所有,采用 CC BY-NC-ND 4.0 国际许可协议 授权。
非商业转载请注明作者及原文链接,禁止改编及用于商业用途,商业合作请联系:yula.qian@gmail.com