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 知识体系总览
为了让你更直观地理解这四个概念的关系,我画了一张图:
这张图想表达的核心逻辑是:
- 区块是容器,交易是内容物。
- 地址是交易的参与方,也是Gas费的支付方。
- Gas费是交易被处理的代价,它由地址支付,最终进入矿工口袋。
搞懂这四个概念,你就掌握了链上数据的“语法”。接下来,我们才能谈怎么“造句”——也就是怎么把这些数据组合成有意义的仪表盘。
一句话总结:区块是历史的切片,交易是历史的笔迹,地址是历史的角色,Gas费是历史的成本。四者缺一不可。