2. 区块链数据基础:区块、交易、地址、Gas费的核心概念

好,咱们正式开始啃区块链数据的第一口硬骨头。

很多人一上来就盯着K线图、资金流向,结果连区块里存的是啥都说不清。我个人习惯是,先搞懂这四个最基础的概念:区块、交易、地址、Gas费。它们就像盖房子的砖、水泥、图纸和电费,缺一不可。

2.1 区块:数据的“集装箱”

区块链,说白了就是一条由区块组成的链条。每个区块就像一个集装箱,里面装着这段时间内发生的所有交易记录。

核心要点:区块是链上数据的最小存储单元,不可篡改。

我记得刚开始做数据解析时,总以为区块里存的是“最新状态”。其实不是。区块只存“发生了什么事”,而不是“现在是什么样”。

一个区块的结构,大致长这样:

{
  "block_number": 19000000,
  "hash": "0xabc...123",
  "parent_hash": "0xdef...456",
  "timestamp": 1699000000,
  "transactions": [ ... ],  // 交易列表
  "gas_used": 15000000,
  "gas_limit": 30000000
}

这里面有几个字段,你以后做仪表盘时天天都会碰到:

  • block_number:区块高度,从0开始递增。我习惯用它做时间轴。
  • parent_hash:父区块的哈希。这就是“链”的物理连接点。
  • timestamp:出块时间。注意,它不是交易发生的时间,是矿工打包的时间。
  • gas_used / gas_limit:区块的Gas使用情况,后面会细说。

避坑指南:我曾经以为timestamp就是交易的真实时间,结果发现有些交易在mempool里躺了半小时才被打包。做时间序列分析时,一定要用交易本身的timestamp,而不是区块的。

2.2 交易:链上的“动作”

交易是区块链的灵魂。没有交易,区块就是个空箱子。

你想想看,用户转账、合约调用、NFT铸造……所有这些“动作”,最终都会变成一笔交易。

一笔典型的交易长这样:

{
  "tx_hash": "0x123...456",
  "from": "0xabc...def",
  "to": "0x789...012",
  "value": "1000000000000000000",  // 1 ETH,单位是wei
  "gas_price": "50000000000",      // 50 Gwei
  "gas_limit": 21000,
  "nonce": 5,
  "input_data": "0x..."           // 合约调用的数据
}

这里有几个关键点:

  • from / to:发起方和接收方。注意,合约创建交易的to字段是空的。
  • value:转账金额。单位是wei(1 ETH = 10^18 wei)。做可视化时记得换算,不然数字大得吓人。
  • gas_price:你愿意为每单位Gas付多少钱。这直接决定了交易被打包的速度。
  • nonce:交易序号。同一个地址的nonce必须连续,否则交易会被拒绝。

注意:input_data字段是合约调用的“灵魂”。很多链上数据分析,比如DEX交易、借贷清算,都是靠解析input_data来还原具体操作的。我建议你早点学会怎么解码它。

2.3 地址:链上的“身份”

地址就是你在区块链上的账号。它是一串由0x开头的42位十六进制字符串。

但地址分两种:

类型 特点 示例
外部账户(EOA) 由私钥控制,可以发起交易 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
合约账户 由代码控制,不能主动发起交易 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

我个人习惯在做数据清洗时,先区分这两种地址。因为它们的分析逻辑完全不同:

  • EOA地址:关注它的交易频率、余额变化、交互对象。
  • 合约地址:关注它的调用次数、Gas消耗、事件日志。

一个小技巧:你可以通过查询地址的nonce值来判断它是EOA还是合约。EOA的nonce会随着交易递增,合约的nonce永远是0(除非它被自毁)。

2.4 Gas费:链上的“油钱”

Gas费是很多人最头疼的概念。其实说白了,就是你为了让交易被矿工处理,而支付的“手续费”。

它的计算公式很简单:

交易手续费 = gas_used × gas_price

举个例子:

  • 一笔简单的ETH转账:gas_used = 21000,gas_price = 50 Gwei
  • 手续费 = 21000 × 50 = 1,050,000 Gwei = 0.00105 ETH

嗯,这里要注意:gas_used是实际消耗的Gas,不是gas_limit。gas_limit是你愿意支付的上限,多退少补。

我在项目中遇到过最坑的情况是:用户设置了一个很低的gas_price,结果交易在mempool里卡了整整两天。最后不得不取消重发,白白浪费了nonce。

避坑指南:做Gas费可视化时,我建议你同时展示三个指标:

  • 当前Gas价格:实时数据,用于判断拥堵程度。
  • 历史Gas价格分布:比如过去24小时的P25、P50、P75值。
  • Gas消耗大户:哪些合约或地址消耗了最多的Gas。

这三个指标组合起来,基本能看清链上的“交通状况”。

2.5 知识体系总览

为了让你更直观地理解这四个概念的关系,我画了一张图:

区块链数据核心概念关系图 区块 存储单元 包含交易列表 交易 链上动作 from → to 地址 链上身份 EOA / 合约 Gas费 交易手续费 gas_used × gas_price 包含 关联 消耗 支付

这张图想表达的核心逻辑是:

  • 区块是容器,交易是内容物。
  • 地址是交易的参与方,也是Gas费的支付方。
  • Gas费是交易被处理的代价,它由地址支付,最终进入矿工口袋。

搞懂这四个概念,你就掌握了链上数据的“语法”。接下来,我们才能谈怎么“造句”——也就是怎么把这些数据组合成有意义的仪表盘。

一句话总结:区块是历史的切片,交易是历史的笔迹,地址是历史的角色,Gas费是历史的成本。四者缺一不可。


蓝海数据掘金营,专注资料整理