一、区块链与 Web3 基础
# 一、区块链与 Web3 基础
# 区块链基本概念
# 分布式账本
中心化数据库由单一实体控制,如银行的交易记录存储在其服务器中;而分布式账本是一个存储在多个节点上的共享数据库。它通过去中心化的方式记录数据,确保数据信息的透明性和不可篡改性。
1. 去中心化
不依赖单一的中心化机构,通过多个节点共同维护和验证数据。每个节点都持有账本的完整副本。
抗单点故障:即使某些节点出现故障,整个系统仍能正常运行。
抗审查:没有中心化实体能够控制或干预账本的数据更新。
2. 透明性
分布式账本中的所有数据对参与者公开可见,任何人都可以验证账本内容的真实性。
信任:用户无需依赖第三方中介即可验证数据的完整性。
公平性:所有参与者对数据的访问权限平等。
3. 不可篡改性
分布式账本中所有节点都会存储相同的记录,任何人篡改数据都会被网络中的其他节点检测到。
数据安全:没有中心化实体能够控制或干预账本的数据更新。
可追溯:数据修改历史公开且可验证。
# 区块
区块是区块链的基本组成单位,是记录交易和数据的容器。一个区块就是区块链中的一个数据包,包含一组经过验证的交易以及其他与区块链状态相关的信息。区块存储数据并连接到链上的前一个区块,形成连续、不可篡改的链条,保障数据完整性。
1. 区块结构
区块头(Block Header):提供区块的元信息并链接其他区块,确保区块链的顺序性及数据完整性,包含前一区块哈希值、时间戳、哈希值树 Merkle 根等。
区块体(Block Body):储存区块的核心内容,及经过验证的交易数据或其他记录。
2. 生成过程
交易收集:网络节点接收用户广播的交易,将其存入内存池(mempool)。
打包验证:矿工或验证节点按照共识算法,将合法交易打包成区块。
共识验证:其他节点验证区块的合法性,并将其加入区块链。
3. 区块作用
记录交易:每个区块存储一组经过验证的交易,为网络的完整运行提供基础。
连接节点:区块之间的哈希链接确保了整个网络的连续性和安全性。
防篡改证明:区块头中的哈希值和时间戳使数据的篡改难度极高。
# 共识算法
共识算法是分布式系统中用来确保所有节点对数据状态达成一致的机制,它确保网络中没有中心化权威的情况下,仍能安全地记录和更新数据。常见的算法包括工作量证明(PoW)和权益证明(PoS)。
1. 工作量证明(PoW, Proof of Work)
节点(矿工)通过解决复杂数学问题(称为哈希计算)来竞争区块打包权,最先完成的节点获得记账权和区块奖励。
优点:高安全性,抵抗恶意节点攻击的能力强(比特币网络 BTC)。
缺点:能源消耗巨大,交易速度慢。
2. 权益证明(PoS, Proof of Stake)
节点通过锁定一定数量的代币(称为 “权益”,Stake)获得参与验证的资格,选取验证者的概率与其质押的代币数量成正比。
优点:能耗低,验证速度快。
缺点:大额代币持有者更有可能获得验证资格和区块打包权,可能具有中心化倾向。
# 哈希算法
哈希函数是一种加密算法,可以将任意长度的输入数据映射为固定长度的输出值,用于数据完整性校验和唯一性验证。
1. 单向性
哈希算法是不可逆的,即无法从哈希值反向推算出原始数据。
2. 高敏感性
输入数据的微小变化会导致哈希值完全不同。
3. 抗碰撞性
不同的输入生成相同哈希值的可能性极低。
# 链上交互基础
# Web3 账户
Web3 的账户体系是用户与区块链交互的基础。与 Web2 的账户模型相比,Web3 的 账户具有去中心化、无中介和自主控制等特点,用户通过加密技术直接管理资产和数据。
1. 组件
私钥:控制 Web3 账户的核心工具,由用户存储,用于签名授权交易。丢失私钥等于丢失账户的控制权。
地址:从私钥生成的公开标识符,用于接收和识别资产,例如 0x 开头的以太坊地址。
交互:同一个 Web3 账户可以跨多个去中心化应用登录签名使用,作为通用身份和资产管理工具。
2. 账户类型
外部拥有账户(Externally Owned Account, EOA):由私钥直接控制的账户,通常由用户通过钱包(如 MetaMask)管理。能主动发起交易(如转账或调用智能合约)。只能存储代币和支付 Gas 费用,不能存储代码或运行逻辑。
智能合约账户(Contract Account):由区块链上的代码控制,行为由预定义逻辑决定。无法主动发起交易,只能在收到 EOA 或其他合约调用时响应。
# 账户模型
区块链的账户模型用于存储和管理用户的资产和交易记录。常见的有 UTXO 模型(未使用交易输出)和账户余额模型。
1. UTXO 模型
UTXO 模型将资产视为不可分割的 “硬币”。账户中的余额是未消费交易输出(UTXO)的集合,每次交易会 “花费” 已有 UTXO,并创建新的 UTXO。代表链:比特币。
Alice 持有两个 UTXO,一个为 3 BTC,另一个为 2 BTC。当她支付 Bob 4 BTC 时,系统会 “消费” 这两个 UTXO,并生成一个新的 1 BTC 找零 UTXO。
2. 账户余额模型
类似银行账户,直接存储用户账户地址的余额和状态。代表链:以太坊及其兼容链。
Alice 的以太坊账户有 10 ETH。当她转账 2 ETH 给 Bob 后,其余额变为 8 ETH,而 Bob 的余额增加至 2 ETH。
# 智能合约
智能合约是部署在区块链上的自执行程序,能够根据预设条件自动执行操作,无需人为干预。通过对区块链读取与写入,智能合约能保证代码的执行结果透明且不可篡改。
1. 特点
自动化:智能合约可以基于预设条件自动完成复杂的交易或流程,如借贷、清算等,无需人工干预。
不可篡改:一旦部署到区块链,其代码和规则无法更改。
透明性:所有智能合约的代码和操作过程都对公众可见,任何人可以验证其逻辑是否被正确执行。
2. 工作机制
合约部署:合约一经部署会生成固定合约地址,所有代码规则都被写入区块链,无法更改或删除。
合约调用:用户通过钱包或 dApp 调用智能合约的函数,提交交易或触发逻辑。
写入区块:区块链节点验证交易,并根据合约逻辑更新区块链状态。
3. 编程语言
Solidity:以太坊上开发智能合约的主要语言,是目前最流行的智能合约语言。它是一种面向对象的高级语言,语法类似于 JavaScript 和 C++。
Rust:高性能、内存安全适合高吞吐量的区块链应用,应用于 Solana、Polkadot 和 NEAR 等。
Move:关注于资产管理和安全,目前应用于 Sui 和 Aptos 链等。
# 链上交易
链上交易是区块链状态改变的主要方式,每笔交易的基本生命周期包括创建、广播、打包、确认。
1. 交易创建:用户通过钱包或合约交互生成交易,指定发送方、接收方和金额。
2. 交易广播:交易被发送到区块链网络,所有节点收到交易并验证合法性(如余额是否充足)。
3. 交易确认:矿工或验证节点将交易打包到区块中,添加到区块链上。
# Web3 生态系统
# 钱包
钱包是一种管理加密货币和私钥的工具,帮助用户安全存储私钥,生成公钥地址,用于接收资产、发起交易以及与 dApps 交互。
1. 钱包操作
私钥和地址:钱包通过私钥生成公钥地址,用于接收资产。
交易签名:钱包使用私钥对交易进行加密签名,确保交易的合法性和不可否认性。
交互:用户通过钱包连接 dApps,授权访问资金或执行智能合约。
2. 钱包类型
托管钱包:私钥由托管方存储和管理,用户通过账户名和密码访问钱包,常用于中心化交易所。
非托管钱包:私钥由用户自行保存,完全掌控资产,丢失私钥意味着资产无法找回。
热钱包:非托管热钱包通过互联网连接,适合日常交易和 dApp 交互,如 MetaMask。
冷钱包:非托管冷钱包将私钥离线存储以提高安全性,如 Ledger。
# 去中心化应用(DApp)
DApp 是基于区块链构建的应用程序。在 Web2 中,传统应用(如 Facebook)依赖于中心化服务器存储数据,平台控制用户数据。
在 DApp 中,用户数据存储在区块链上,由用户自行管理,应用开发者无法擅自修改数据或限制访问权限。
# 去中心化自治组织(DAO)
DAO (Decentralized Autonomous Organization) 是一种去中心化的组织形式,基于区块链智能合约实现规则和治理,允许社区成员共同决策,无需传统的管理层。
社区成员通过持有代币或 NFT 而享有投票权,可以对协议或社区事务(如资金分配、项目方向)进行公开的链上投票表决。
# 去中心化金融(DeFi)
DeFi (Decentralized Finance) 是建立在区块链上的金融系统,无需银行等中介机构,提供借贷、交易、收益聚合等服务,用户直接通过智能合约操作。
1. 特点
无中介:资金直接由用户控制。
时效性:交易和清算由智能合约自动完成,时间是区块确认时间。
抗审查:任何人都可以参与,无需传统金融的准入条件审查和地域限制(开户、资产要求等)。
2. 常见产品
去中心化交易所(DEX):允许用户基于自动代币对做市商等自行买卖交易加密货币。代表有 Uniswap、Sushiswap 等。
借贷:允许用户在没有传统银行的情况下进行借款或放贷。用户可以将数字资产存入平台赚取利息,也可以借入数字资产支付利息。代表有 AAVE、Compound。
稳定币:通常与法定货币(如美元)价格挂钩的加密货币,用于降低加密市场的波动性和便利支付。代表有 USDT,USDC 等。
质押和流动性挖矿:用户将一定数量的加密货币锁定在某个区块链网络或协议中,通过提供流动性到协议,赚取相应的代币奖励或利息。代表有 Lido、EigenLayer、Yearn、Balancer 等。
# NFT
在 Web2 中,数字艺术或游戏资产可被复制,难以证明唯一性。NFT 被称为非同质化代币,其所有权和真实性由区块链验证,它具有唯一性、不可替代性和可证明的所有权,广泛用于艺术品、游戏资产和数字身份等领域。
1. 特点
不可复制:NFT 的唯一性由链上数据保证,其唯一 ID 可以在链上被验证。
可交易:一些 NFT 在二级市场中交易,且交易历史和价格均在链上可查,公开透明。
2. 应用
数字藏品:数字画作或 NFT 形式的游戏武器,资产稀有性、属性、和所有权记录在链上,不会被篡改或删除。
身份验证:为用户提供一个唯一且不可变更的标识符(如以 .eth 等后缀的域名)作为数字身份验证,可用于访问某些专属内容或服务。
数字证书:NFT 可用于认证某些数字证书,以证明学习成就、获奖及参与证明等。
# 学习资料
# 二、Web3 数据分析基础与工具使用
# 链上数据结构
# 链上数据基本类型
交易数据:包含交易信息的数据,如转账资金、收发地址、手续费等;
区块数据:区块自身信息数据,如时间戳、验证者、包含的交易及交易排序等;
合约数据:区块链上部署的非用户交互产生的代码数据,即预先定义好的智能合约代码。
# 交易数据
# 区块数据
# 合约数据
# 常见链上数据指标
# 总锁仓量 (TVL)
总锁仓量 (Total Value Locked, TVL) 表示存入 DeFi 协议中的总资产价值,包括流动性池、抵押贷款和收益聚合中的总资产价值。
1. 应用
TVL是衡量 DeFi 协议市场占有率和吸引力的重要指标,TVL 的增加通常表示协议的增长和吸引力。
2. 计算
TVL = 所有存入协议中的资产价值的总额(包含币种价值,常用 USD 或 ETH 计价)
在某个质押协议上,Alice 存入 10 ETH,Bob 存入 20 ETH,则该协议的 TVL 为 30 ETH。
# 活跃地址数
活跃地址数是指在一定时间段内至少执行过一次交易的钱包地址数量。与 Web2 中的活跃用户 (Active User) 类似,链上的 “活跃地址” 表示的是有实际行为发生的用户地址。
1. 应用
在区块链网络中,活跃地址的数量能够反映区块链及应用的用户基础及增长趋势。
对于 DeFi 协议,活跃地址可能是参与质押、交易、借贷等活动的用户地址。
2. 计算
活跃地址数 = 在指定时间段内进行过交易的唯一地址数量
在某个去中心化交易所的活动中,Alice、Bob 和 Charlie 各自进行了交易,因此该时间段内有三个活跃地址。
# 交易数及交易量
交易数 (Transaction Count) 是在一定时间段内链上发生的所有交易的数量,交易量 (Trading Volume) 是这些交易涉及资产价值的总额。
1. 应用
交易量通常衡量区块链网络的活跃度,它反映了有多少资产被转移或交换。对于 DeFi 协议,交易量可能包括通过协议进行的代币交换或质押操作。
交易量是评估区块链网络健康、交易活动以及市场情绪的重要指标。高交易量通常意味着网络的需求增加。
2. 计算
交易数 = 特定时间段内所有交易哈希数量
交易量 = 特定时间段内所有交易的代币数量价值总和(常用 USD 或 ETH 计价)
假设 Alice 和 Bob 在某个区块链上进行了三笔交易,分别转账 2 ETH、3 ETH 和 1 ETH,那么该时间段的交易量就是 6 ETH(无论收发地址是谁)。
# 交易费用 / Gas 费用
交易费用 (Transaction Fee) 是用户在区块链网络中进行交易时支付给矿工或验证者用打包上链的费用,是用户交易的成本,通常又叫 Gas 费用。
1. 应用
交易费反映了区块链网络的拥堵程度和交易成本。在动态交易费用的背景下,高交易费通常表示网络较为拥堵,用户交易成本高。
2. 计算
交易费 = 交易使用的 Gas 数量 × Gas 价格
# 链上数据分析流程及工具
# 数据 ETL
和 Web2 数据分析类似,一个完整的链上数据分析流程需要经过以下几个步骤:
数据抽取 (Extract) → 清洗转换 (Transform) → 加载 (Load) 到数据仓库 → 依据不同业务线及观测指标分析数据 → 输出量化结果
1. 数据抽取 (Extract)
数据抽取从区块链 RPC 节点或区块链浏览器 (如 Etherscan (opens new window))中获取原始数据。
区块链数据通常以非结构化的日志形式存储,且包含大量的交易数据、状态信息和事件日志 (Event, Log, Traces)。
2. 清洗转换 (Transform)
智能合约被调用执行时的交易输入输出和日志数据通常以十六进制 HEX 格式存储,无法直接分析。
合约解析需要通过智能合约 ABI(应用二进制接口)将这些 HEX 格式的输入数据解码,恢复成原始函数参数等信息,使其能够以结构化的数据形式呈现(如数字、地址、字符串等)。
3. 数据加载及分析 (Load)
根据分析目标进行计算和查询。在区块链数据分析中,加载的数据通常是合约相关的交易记录和事件日志,并依据特定的指标进行筛选和聚合分析。
例如,针对某一特定合约的 TVL,首先需要确定合约地址,再对该合约触发的 deposit 事件交易记录进行筛选和汇总计算。
# 链上数据产品生态
基于链上数据分析的 ETL 流程,区块链数据产品可以分为数据源、数据开发工具(Data Dev)和数据应用(Data App)三类。
1. 数据源
数据源提供对原始区块链数据的索引,它们通过节点或 API 访问不同的区块链网络,提取链上的交易、事件日志、合约信息等原始数据。
典型应用:The Graph (opens new window), Alchemy (opens new window)。
2. 数据开发工具
面向数据分析开发人员,可以完成 ETL 的工作,将交易、状态和事件日志数据解析成可以用 SQL 或 GraphQL 等传统语言查询的格式并存储在数据库中,供后续查询。自由定制程度高,不直接提供数据分析结果。
典型应用:Dune (opens new window), Flipside (opens new window)。
3. 数据应用
面向普通用户,提供可直接访问的数据内容,供投资者参考决策。一般会以数据可视化看板等提供结果,易读性强。自由定制程度低,用户只能阅读预先分析好的数据结果,较难按需求自行定制输出。
典型应用:Nansen (opens new window), Debank (opens new window), DefiLlma (opens new window)。
目前链上数据分析赛道生态位已经有诸多玩家,根据面向的不同用户类型、不同赛道都有对应的数据产品布局。
# 常用链上数据分析工具
Etherscan (opens new window)、Dune (opens new window)、Nansen (opens new window)
# 学习资料
# 三、链上数据分析平台精讲: Dune Analytics
# 四、链上数据分析平台精讲: Zan 简介与应用
# Web3 Dapp 开发者的五大痛点
# ZAN 节点服务
# ZAN 产品能力
# ZAN 节点服务开发者工具
# 一触即发,快速开始
# 保障安全,第一要素
# 实时监控
# 多重机制保障节点服务稳定、快速
# 个性化服务
# Contract Indexer 的架构与流程
# 链上数据模型
# Datacenter 的架构与数据链路
# Contract Indexer 的架构流程
目标:索引合约事件,辅助用户对指定合约进行分析。
# 学习资料
# 五、以太坊数据分析
# 以太坊概述
# 区块链概述
当我们说区块链的时候,指的是一种去中心化的分布式账本技术:
区块链:按时间顺序打包为 Block,并通过密码学哈希前后链接,形成不可篡改的链式数据结构。
区块链网络:在 P2P 网络中,节点之间通过共识算法(如 PoW、PoS)达成一致,共同维护该区块链数据。
以太坊扩展了区块链的基础功能,是支持智能合约的区块链平台:
智能合约:通过 Solidity 等语言编写,部署在区块链上的代码,用于实现如 DeFi、NFT 等区块链应用。
以太坊虚拟机(EVM):保证智能合约执行结果一致的沙盒环境,基于堆栈的虚拟机。
原生代币:以太币(ETH)用于支付交易手续费(Gas 费)和网络维护。
# 如何参与其中
如何参与区块链网络?
参与到 P2P 网络中 -> 参与到共识过程中
运行一个客户端:共识层客户端 + 执行层客户端
质押 ETH 成为 Validator
如何参与区块链?
参与区块链数据的维护中
改变区块链数据的唯一途径是交易(Transacion)
发送一笔交易 -> 在区块链网络中传播,汇入节点的交易池(Mempool)中 -> 节点从交易池中选取部分交易构造区块 -> 通过共识协议,达成共识的区块被传播到所有节点 -> 节点执行区块中所包含的交易
# 状态树 State Trie
State Trie:以太坊将全局状态(所有账户余额、nonce、存储等)存储在一棵 Merkle Patricia Trie 中。每当一区块的全部交易执行完毕,就会更新出新的状态树根哈希 (stateRoot),记录于区块头,用于标识该区块对应的全网状态。stateRoot 作为状态快照 ID,使各节点能够达成对状态的一致共识。
Transacion Trie 和 Receipt Trie:每个区块还分别建立交易 Merkle Trie 和收据 Merkle Trie,其根哈希保存在区块头的 transactionsRoot和receiptsRoot 字段中。这些 Trie 的存在使得节点无需下载整个交易列表或收据列表,也能通过 Merkle 证明验证某笔交易或事件收据属于某区块。轻节点正是利用这些根哈希与 Merkle 证明,只下载必要信息进行验证。
日志布隆过滤器:区块头中包含的 logsBloom 为 256 字节的 Bloom 过滤器。它由该区块所有交易产生的事件日志 topics 生成,可用于快速判断某合约事件是否可能出现在本区块中。
# 账户系统
参与区块链,你需要一个账户
外部拥有账户 (EOA):由私钥控制的账户,无合约代码,只能由持有私钥的人触发交易(转账或调用合约)。创建 EOA 无需消耗 Gas,EOA 间交易只能转移 ETH 或代币,没有代码执行。
合约账户 (Contract Account):部署在链上的智能合约账户,包含合约代码和存储。合约账户有余额和代码,但不能自主发起交易;只有收到其他账户的交易时,其代码才会自动执行(例如有人调用它的函数)。部署合约需要支付 Gas 存储代码。
账户状态:每个以太坊账户在状态树中存储四项信息:随机数 Nonce、账户余额、合约代码 Hash(EOA 该字段为空)、合约存储 Root(EOA 无存储)。这构成世界状态的一部分,用于确定账户行为和防止双重花费等。
# EVM 运行机制
# EVM 结构
# EVM Opcode
智能合约的 Solidity 源码会被编译为 EVM 字节码(十六进制序列),由一系列操作码 (Opcode) (opens new window) 及其参数组成。每条操作码是 1 字节,因此理论上 EVM 最多支持 256 种指令,目前定义了约 140 条独特操作码用于链上执行。
调用数据 (Calldata):是随交易或消息调用传入合约的只读数据段,包含函数选择器和参数等。Calldata 只能读取不能修改,因而读取成本极低。Solidity 中函数参数默认为 calldata 类型(不可变),这使得如果只需要读取参数而不改变,其 Gas 花费比拷贝到内存更少。在 EVM 中,CALLDATALOAD (opens new window) 等指令可用于从 calldata 读取指定位置的 32 字节数据供后续运算使用。
# 学习资料
API 服务提供商
















