Blockchain Fundamentals Summary
一、区块链
1.定义
对区块链最好的描述是将其描述为一个公共数据库,它由网络中的许多计算机更新和共享。
"区块"指的是数据和状态是按顺序批量或"区块"存储的。
"链"指的是每个区块加密引用其父块。 换句话说,区块被链接在一起。 在不改变所有后续区块的情况下,区块内数据是无法改变,但改变后续区块需要整个网络的共识。
网络中的每台计算机都必须就每个新区块和链达成一致。 这些计算机被称为“节点”。 节点保证所有与区块链交互的人都有相同的数据。 要完成此分布式协议,区块链需要一个共识机制。
以太坊采用pos共识机制。 任何想在链上添加新区块的人都必须质押以太币(以太坊原生货币)做为抵押品并运行验证者软件。 接着,可以随机选择这些“验证者”来提出区块,再由其他验证者检查并添加到区块链中。 存在一种奖励和惩罚体系,有力地激励参与者尽可能地诚实和保持在线。
2.以太的pos和pow联系
2.1. 基本机制
| 维度 | PoW(比特币、早期以太坊) | PoS(以太坊2.0、Cardano) |
|---|---|---|
| 验证方式 | 矿工通过算力竞争解决数学难题(哈希碰撞) | 验证者通过质押代币获得出块权(随机选择) |
| 资源消耗 | 依赖高能耗硬件(ASIC/GPU),电力成本极高 | 仅需普通服务器,能耗极低(约为PoW的0.1%) |
| 出块速度 | 比特币:10分钟/区块;以太坊PoW:15秒/区块 | 以太坊PoS:12秒/区块(更稳定) |
2.2. 安全性对比
| 维度 | PoW | PoS |
|---|---|---|
| 攻击成本 | 需控制51%算力(硬件+电力成本) | 需控制2/3质押代币(经济成本更高) |
| 防御手段 | 算力竞争使攻击代价高昂 | Slashing罚没机制(作恶者质押代币被销毁) |
| 分叉风险 | 临时分叉常见(需等待多个确认) | 几乎无分叉(快速最终性) |
2.3. 经济模型
| 维度 | PoW | PoS |
|---|---|---|
| 参与者 | 矿工(投入硬件和电力) | 质押者(锁定代币) |
| 收益来源 | 区块奖励+交易费 | 质押奖励+交易费 |
| 中心化风险 | 矿池集中化(少数矿池控制多数算力) | 富者愈富(大质押者收益更高) |
2.4. 去中心化程度
| 维度 | PoW | PoS |
|---|---|---|
| 参与门槛 | 高(需专业矿机) | 较低(普通用户可质押) |
| 硬件依赖 | ASIC/GPU垄断,普通用户难参与 | 无需特殊硬件,节点易部署 |
| 治理权力 | 算力决定话语权 | 质押代币量决定话语权 |
2.5. 典型应用
- PoW:比特币(BTC)、莱特币(LTC)、早期以太坊(ETH 1.0)。
- PoS:以太坊2.0(ETH)、Cardano(ADA)、Solana(SOL)。
2.6.为什么以太坊从PoW转向PoS?
- 能源效率:PoS能耗仅为PoW的0.1%,更环保。
- 安全性:PoS的Slashing机制使攻击成本远高于PoW。
- 可扩展性:PoS为分片链(Sharding)等扩容方案铺路。
3.以太坊(ETH)还为网络提供加密经济安全,主要通过以下三种方式实现:
- 奖励机制:用于激励验证者——既奖励正常提议区块的验证者,也奖励揭发其他验证者不诚实行为的验证者;
- 质押抵押:验证者需要质押ETH作为担保,一旦发现恶意行为,其质押的ETH将被销毁;
- 共识权重:在新区块的"投票"过程中,ETH持有量决定投票权重,直接影响共识机制中分叉选择算法的决策。
4.EVM(Ethereum Virtual Machine)
EVM是一个去中心化的虚拟执行环境,其核心特征包括:
| 全局一致性 | 1.所有以太坊节点以完全相同的逻辑执行代码 2.确保全网状态的一致性 |
|---|---|
| 智能合约执行层 | 1.作为智能合约的专用运行时环境 2.节点通过运行EVM处理合约调用请求 |
| Gas计量体系 | 1.采用"gas"作为计算资源计量单位 2.精确量化每项操作的计算成本 3.实现双重保障: ✓ 网络资源高效分配 ✓ 基础层安全防护 |
4.1.EVM的本质
- EVM(Ethereum Virtual Machine) 是以太坊的运行时环境,专门用于执行智能合约的字节码(EVM Code)。
类比eBPF:
- 相似点:两者都是基于字节码的虚拟机,使用JIT(即时编译)技术优化执行。
不同点:
特性 EVM eBPF 应用场景 执行智能合约(去中心化) 内核数据处理(网络/安全) 运行环境 区块链节点(全球分布式) Linux内核(单机) 权限控制 无特权限制(Gas费约束) 受内核严格沙盒限制 JIT优化 有(如Ethereum JIT) 有(如LLVM JIT)
EVM Code(字节码)
智能合约的编译结果:开发者用Solidity/Vyper编写合约,编译为EVM字节码。
// Solidity源码 contract Example { function add(uint a, uint b) public pure returns (uint) { return a + b; } }→ 编译为EVM字节码(十六进制):
0x6080604052348015600f57600080fd5b506004361060285760003560e01c806...执行过程:
- EVM解析字节码,按指令逐条执行。
- 使用栈(Stack)和内存(Memory)临时存储数据(见下文)。
4.2. EVM的栈(Stack)与内存(Memory)
(1)EVM栈
- 作用:用于临时存储计算中间值(类似CPU寄存器)。
特点:
- 深度固定:最多1024个槽位(每个槽位32字节)。
- 操作受限:只能通过
PUSH/POP/SWAP等指令访问栈顶。
示例:
// Solidity中的加法操作 → EVM字节码 add(a, b) → PUSH1 a, PUSH1 b, ADD栈状态变化:
| Stack | | |-------|-------| | | | ← 初始空栈 | a | | ← PUSH1 a | b | a | ← PUSH1 b | a+b | | ← ADD(弹出a和b,压入结果)
(2)EVM内存
- 作用:临时存储复杂数据(如数组、字符串)。
特点:
- 动态扩容:按需扩展,但需支付Gas费。
- 易失性:仅在当前合约调用期间存在,调用结束后清空。
示例:
function storeData() public { bytes memory data = new bytes(100); // 分配100字节内存 }→ EVM会分配内存并记录偏移量供后续使用。
4.3. 智能合约与EVM的关系
(1)智能合约的生命周期
- 编写:用Solidity/Vyper等语言编写逻辑。
- 编译:生成EVM字节码和ABI(应用二进制接口)。
- 部署:将字节码作为交易发送到链上,存储在合约地址中。
- 调用:用户通过交易触发合约函数,EVM执行对应字节码。
(2)合约与EVM的交互
- 每个合约调用:创建一个独立的EVM实例,隔离执行环境。
- Gas机制:限制计算和存储资源,防止无限循环或滥用。
4.4. 质押节点与EVM的关系
(1)质押节点的组成
以太坊PoS节点分为两部分:
执行层(Execution Layer):
- 运行EVM,处理交易和智能合约(如Geth、Nethermind客户端)。
共识层(Consensus Layer):
- 负责PoS共识(如Prysm、Lighthouse客户端),验证区块和投票。
(2)质押者的角色
- 成为验证者:需质押32 ETH并运行执行层+共识层客户端。
职责:
- 区块提议者:打包交易并生成新区块(需执行EVM)。
- 投票验证者:对其他区块进行签名确认(不直接涉及EVM)。
(3)EVM的分布性
- 每个节点都有EVM:所有完整节点(包括质押节点)本地运行EVM,独立验证交易和合约。
- 全局一致性:所有节点的EVM必须对同一交易输出相同结果(确定性执行)。
二、Smart Contracts
1. 智能合约的本质
智能合约是存储在以太坊区块链上的程序,由代码(函数)和数据(状态)组成,具有以下核心特性:
- 链上账户:拥有独立的地址(如
0x742...d35),可以持有ETH余额并接收交易。 - 不可篡改:一旦部署,代码和状态无法被修改(除非合约自带自毁逻辑)。
- 自动执行:通过交易触发,严格按代码逻辑运行,无需第三方干预。
2. 智能合约 vs. 普通账户
| 特性 | 智能合约账户 | 普通用户账户(EOA) |
|---|---|---|
| 控制者 | 代码逻辑 | 私钥持有者 |
| 创建方式 | 通过交易部署合约代码 | 私钥生成地址 |
| 触发行为 | 需外部交易调用函数 | 可主动发起交易 |
| 代码存储 | 有(EVM字节码) | 无 |
3. 智能合约的核心组成部分
(1)代码(Functions)
可调用函数:定义合约的行为逻辑(如转账、铸造NFT、投票等)。
function mintNFT(address to, uint256 tokenId) public { _mint(to, tokenId); // 内部实现NFT铸造 }
(2)数据(State)
状态变量:存储在链上的持久化数据(如余额、所有权记录)。
mapping(uint256 => address) private _owners; // 记录NFT所有者 uint256 public totalSupply; // NFT总供应量
(3)事件(Events)
日志记录:用于前端监听合约状态变化(如NFT转账)。
event Transfer(address indexed from, address indexed to, uint256 tokenId);
4. 智能合约的生命周期
- 编写:用Solidity/Vyper等语言定义逻辑。
- 编译:生成EVM字节码和ABI(应用二进制接口)。
- 部署:通过交易将字节码发送到区块链,生成合约地址。
- 交互:用户或合约调用其函数(如
mintNFT)。
5. 智能合约的不可逆性
- 代码不可变:默认无法升级或删除(除非代码中包含
selfdestruct)。 - 交易不可逆:一旦执行(如NFT铸造),状态变更永久记录在链上。
三、密码学基础
1.数字签名
- Alice想证明某个消息是自己发送的
- Alice用自己的私钥签名 其他人可以用Alice的公钥验证签名的有效性
- 在没有私钥的情况下无法伪造签名
- ECDSA基于椭圆曲线的数字签名
2.钱包地址
- 每个地址对应了一对公私钥
- 私钥=>公钥=>钱包地址
3.靠哈希算法出块pow
- 暴力枚举计算哈希小于某个值或者哈希值前面有多少个0
- 没有除了暴力枚举计算满足要求的哈希 通过算力的分散性保证去中心化出块
4.靠哈希算法维护最长链,防止攻击
- 每一个块的头部都包含上一个区块的哈希值
- 想要修改之前区块的某个内容 需要从那个区块开始后面的所有区块都需要修改
- 枚举哈希很难 很难对抗全网算力算出新链
5.默克尔树
- 一种机遇哈希的树状结构
- 依靠哈希快速确认某个值是否在一个集合中的数据结构
- 常用于区块存储交易 发行白名单确认等场景
- 某个节点的哈希值生成父节点的哈希值直至根节点的哈希值 只要改了一个节点的数据就会导致根节点的哈希值变化
四、layer 2
1.rollup
Rollup 是什么?
Rollup 是一种区块链扩容技术,旨在解决以太坊等区块链网络的高 Gas 费和低吞吐量问题。它的核心思想是:
- 将大量交易“打包”到链下计算,仅将少量关键数据提交到主链(Layer 1)。
- 利用主链的安全性,同时大幅提升交易处理速度并降低成本。
1.1 Rollup 的核心原理
(1)交易执行移到链下
- 传统区块链(如以太坊主网):每个节点需要执行并验证所有交易,导致速度慢、成本高。
Rollup:
- 交易在链下(Layer 2)批量执行。
- 仅将交易数据的压缩摘要(Merkle 根)和状态变化证明提交到主链。
(2)依赖主链保障安全性
- Rollup 的最终结算和争议处理仍依赖 Layer 1(如以太坊)。
- 即使链下运营商作恶,用户仍可通过主链挑战并恢复资金。
1.2. Rollup 的两种主要类型
Rollup 分为两类,区别在于如何证明交易的有效性:
| 类型 | Optimistic Rollup | ZK-Rollup(零知识证明 Rollup) |
|---|---|---|
| 验证方式 | 默认信任,欺诈时挑战(Fraud Proof) | 每笔交易用零知识证明(ZK-SNARKs)验证 |
| 最终性 | 7 天挑战期(延迟高) | 即时确认(延迟低) |
| 计算开销 | 低(无需复杂证明) | 高(生成 ZK 证明需要大量计算) |
| 隐私性 | 透明(交易数据公开) | 可选隐私(ZK 可隐藏细节) |
| 代表项目 | Arbitrum, Optimism | zkSync, StarkNet, Scroll |
(1)Optimistic Rollup(乐观 Rollup)
- 核心假设:假设所有交易都是诚实的,除非有人提出挑战。
工作流程:
- 运营商批量处理交易,提交状态根到主链。
- 如果有欺诈,挑战者可在 7 天内提交欺诈证明(Fraud Proof)。
- 主链验证后回滚错误交易。
- 优点:兼容 EVM(适合通用智能合约),Gas 费低。
- 缺点:提款需要等待挑战期(约 7 天)。
(2)ZK-Rollup(零知识证明 Rollup)
- 核心机制:每批交易生成一个零知识证明(ZK-SNARK/STARK),证明交易有效。
工作流程:
- 交易在链下执行并生成 ZK 证明。
- 证明和状态变化提交到主链。
- 主链验证证明后立即确认交易。
优点:
- 即时最终性(无需等待挑战期)。
- 更高吞吐量(证明可压缩大量交易)。
缺点:
- 生成 ZK 证明计算复杂,对通用智能合约支持较晚(如 zkEVM)。
1.3. Rollup 的关键技术
(1)数据压缩
- Rollup 将交易数据压缩后存储在链上(如仅保存交易哈希、签名聚合)。
例如:
- 普通转账:原始数据 100B → 压缩后 10B。
- 智能合约调用:通过状态差异记录而非完整输入。
(2)状态根(State Root)
- 表示 Rollup 链的当前状态(账户余额、合约存储等)。
- 主链只需存储最新状态根,而非完整历史。
(3)欺诈证明 vs 有效性证明
| Optimistic Rollup(欺诈证明) | ZK-Rollup(有效性证明) | |
|---|---|---|
| 证明类型 | 仅在争议时生成 | 每批交易必须生成 |
| 安全性 | 依赖诚实多数假设 | 数学证明(密码学保证) |
| 延迟 | 高(需挑战期) | 低(即时验证) |
1.4. Rollup 的典型应用
(1)DeFi(去中心化金融)
- Uniswap 在 Arbitrum(Optimistic Rollup)上部署,降低交易费。
- dYdX 使用 StarkEx(ZK-Rollup)实现高性能衍生品交易。
(2)NFT 和游戏
- Immutable X(基于 StarkWare)提供零 Gas 费的 NFT 交易。
- Sorare(足球 NFT 游戏)使用 ZK-Rollup 处理海量交易。
(3)支付网络
- Loopring(ZK-Rollup)实现低成本、高速的代币转账。
1.5. Rollup vs 其他扩容方案
| 方案 | 吞吐量 | 安全性 | 兼容性 | 代表项目 |
|---|---|---|---|---|
| Rollup | 高 | 依赖主链 | 高(EVM 兼容) | Arbitrum, zkSync |
| Plasma | 中 | 依赖退出机制 | 低(仅支付) | OMG Network |
| 侧链(Sidechain) | 高 | 独立安全性 | 中(需跨链桥) | Polygon PoS |
| 状态通道 | 极高 | 依赖参与者在线 | 低(特定场景) | Raiden Network |
1.6. 未来发展方向
- ZK-EVM:让 ZK-Rollup 完全兼容以太坊智能合约(如 zkSync 2.0、Scroll)。
- 混合 Rollup:结合 Optimistic 和 ZK 的优势(如 Optimism 未来可能集成 ZK)。
- 去中心化排序器:防止 Rollup 运营商垄断交易排序(当前多为中心化控制)。
总结
Rollup 通过链下执行 + 链上验证,在保持安全性的同时大幅提升性能,是以太坊扩容(如 Danksharding)的核心组件。选择 Optimistic 还是 ZK 取决于需求:
- 追求低成本和 EVM 兼容性 → Optimistic Rollup(Arbitrum/Optimism)。
- 需要即时最终性和高吞吐 → ZK-Rollup(zkSync/StarkNet)。
2.零知识证明
2.1. 零知识证明是指一方(证明者)向另外一方(验证者)证明一个陈述是正确的 而无需透露除该陈述是正确外的其他信息
- 证明者:负责计算交易并且把这些交易聚合成零知识证明
- 验证者:验证证明者提交的零知识证明的有效性
- 验证者发送一个随机数,证明者使用私钥生成签名发送给验证者,验证者根据公钥验证签名的合法性
2.2 zk-SNARK
- 非交互性:证明者向验证者一次性发送一个消息,两者无需进行交互。
- 简洁性:验证速度快,存储空间小。
核心逻辑:
预先的“魔法仪式”(可信设置):
- 一群人共同生成一组公共参数(类似“魔法黑板”),包含加密的秘密数字。
- 完成后,原始秘密会被销毁,确保无人作弊。
证明者生成“密码纸条”:
- 你用公共参数和你的秘密(如方程的解),计算出一个简短的证明(类似“纸条”)。
这个证明利用了数学魔法(椭圆曲线、多项式),使得:
- 验证者能快速检查。
- 但无法从证明反推你的秘密。
应用:
zcash:
- 一种隐私优先的加密货币,允许用户选择性地隐藏交易信息(发送方、接收方、金额),同时保证交易合法性。
核心功能:
- 屏蔽交易(Shielded Transactions):使用 zk-SNARK 证明交易有效,但不透露任何细节。
- 透明交易(Transparent Transactions):类似比特币,公开所有信息(可选)。
工作流程:
隐私交易生成:
- 发送方生成 zk-SNARK 证明(证明自己有权花费资金,且金额平衡)。
- 交易中仅包含加密的金额和地址,以及 zk-SNARK 证明(约 200 字节)。
矿工验证:
- 矿工验证 zk-SNARK 证明的合法性,无需知道具体交易内容。
- 如果证明有效,交易被打包到区块。
举例:
- Alice 向 Bob 转 1 ZEC,但链上只看到“有人转了一笔钱”,不知道是谁、多少钱。
- 只有 Alice 和 Bob 能通过“查看密钥”解密交易详情。
filecoin:
- 是一个去中心化存储市场,用户支付代币(FIL)存储文件,矿工提供存储空间并获得奖励。
- 核心问题:如何证明矿工真的存储了用户的数据,且未作弊?
解决方案:
- 复制证明(PoRep):矿工必须证明自己存储了数据的唯一副本(防止重复存储同一份数据骗奖励)。
- 时空证明(PoSt):矿工需持续证明自己仍在存储数据(防止中途删除数据)。
zk-SNARK 的作用:
压缩证明:
- 矿工生成 zk-SNARK 证明,证明自己完成了存储任务。
- 证明体积极小(几百字节),节省区块链空间。
高效验证:
- 网络节点只需验证 zk-SNARK,无需下载全部存储数据。
举例:
- 用户上传 1TB 电影到 Filecoin 网络。
- 矿工 A 声称存储了该文件,并提交 zk-SNARK 证明。
- 其他节点只需验证证明,无需下载 1TB 文件即可确认矿工诚实。
2.3 zk Rollup项目
zksync
- 基于zk-SNARK实现
- 安全依赖初始化信任设置,要求至少有一个参与者是诚信的
- evm兼容,可以把智能合约转换操作码来实现solidity兼容
- 同时支持链上和链下存储
starkware
- 基于zk-stark技术实现
相比zk-snark具备的优势
- 透明性:zk- stark无需信任设置
- 扩展性:zk-stark降低了计算复杂度,生成证明速度更快
- 抗量子攻击:使用抗冲突的哈希函数提供抵御量子攻击