首页
Search
1
yamux: how to work?
79 阅读
2
The Art of Memory Allocation: Malloc, Slab, C++ STL, and GoLang Memory Allocation
70 阅读
3
How to receive a network packet in Linux
63 阅读
4
Maps and Memory Leaks in Go
54 阅读
5
C++ redis connection pool
52 阅读
测试
Wireguard
K8s
Redis
C++
Golang
Libcurl
Tailscale
Nginx
Linux
web3
Uniswap V2
Uniswap V3
EVM
security
solidity
openzeppelin
登录
Search
标签搜索
web3
solidity
web3 security
c++
uniswapV3
redis
evm
uniswap
性能测试
k8s
wireguard
CNI
http
tailscale
nginx
linux
设计模式
Jericho
累计撰写
51
篇文章
累计收到
13
条评论
首页
栏目
测试
Wireguard
K8s
Redis
C++
Golang
Libcurl
Tailscale
Nginx
Linux
web3
Uniswap V2
Uniswap V3
EVM
security
solidity
openzeppelin
页面
搜索到
31
篇与
的结果
2025-05-14
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. 安全性对比维度PoWPoS攻击成本需控制51%算力(硬件+电力成本)需控制2/3质押代币(经济成本更高)防御手段算力竞争使攻击代价高昂Slashing罚没机制(作恶者质押代币被销毁)分叉风险临时分叉常见(需等待多个确认)几乎无分叉(快速最终性)2.3. 经济模型维度PoWPoS参与者矿工(投入硬件和电力)质押者(锁定代币)收益来源区块奖励+交易费质押奖励+交易费中心化风险矿池集中化(少数矿池控制多数算力)富者愈富(大质押者收益更高)2.4. 去中心化程度维度PoWPoS参与门槛高(需专业矿机)较低(普通用户可质押)硬件依赖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(即时编译)技术优化执行。不同点:特性EVMeBPF应用场景执行智能合约(去中心化)内核数据处理(网络/安全)运行环境区块链节点(全球分布式)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 Contracts1. 智能合约的本质智能合约是存储在以太坊区块链上的程序,由代码(函数)和数据(状态)组成,具有以下核心特性:链上账户:拥有独立的地址(如 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 21.rollupRollup 是什么?Rollup 是一种区块链扩容技术,旨在解决以太坊等区块链网络的高 Gas 费和低吞吐量问题。它的核心思想是:将大量交易“打包”到链下计算,仅将少量关键数据提交到主链(Layer 1)。利用主链的安全性,同时大幅提升交易处理速度并降低成本。1.1 Rollup 的核心原理(1)交易执行移到链下传统区块链(如以太坊主网):每个节点需要执行并验证所有交易,导致速度慢、成本高。Rollup:交易在链下(Layer 2)批量执行。仅将交易数据的压缩摘要(Merkle 根)和状态变化证明提交到主链。(2)依赖主链保障安全性Rollup 的最终结算和争议处理仍依赖 Layer 1(如以太坊)。即使链下运营商作恶,用户仍可通过主链挑战并恢复资金。1.2. Rollup 的两种主要类型Rollup 分为两类,区别在于如何证明交易的有效性:类型Optimistic RollupZK-Rollup(零知识证明 Rollup)验证方式默认信任,欺诈时挑战(Fraud Proof)每笔交易用零知识证明(ZK-SNARKs)验证最终性7 天挑战期(延迟高)即时确认(延迟低)计算开销低(无需复杂证明)高(生成 ZK 证明需要大量计算)隐私性透明(交易数据公开)可选隐私(ZK 可隐藏细节)代表项目Arbitrum, OptimismzkSync, 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, zkSyncPlasma中依赖退出机制低(仅支付)OMG Network侧链(Sidechain)高独立安全性中(需跨链桥)Polygon PoS状态通道极高依赖参与者在线低(特定场景)Raiden Network1.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降低了计算复杂度,生成证明速度更快抗量子攻击:使用抗冲突的哈希函数提供抵御量子攻击
2025年05月14日
6 阅读
0 评论
2 点赞
1
...
6
7