区块链课程复习笔记
区块链课程学习笔记0. 课程主线总览这门课可以被理解成一条完整的技术链路为什么需要区块链 → 区块链如何记录交易 → 如何保证交易可信 → 如何让分布式节点达成一致 → 如何验证区块内部交易完整性 → 区块链会被怎样攻击 → 智能合约如何扩展区块链能力 → 公有链/私有链如何取舍 → 法律伦理和隐私问题如何出现。最核心的知识结构如下Blockchain ├── 基础概念 │ ├── distributed ledger │ ├── blocks and transactions │ ├── decentralisation │ └── P2P network │ ├── 密码学基础 │ ├── hashing │ ├── digital signatures │ ├── asymmetric encryption │ └── ECDSA │ ├── 区块结构与验证 │ ├── block header │ ├── previous block hash │ ├── Merkle root │ ├── timestamp │ ├── difficulty │ └── nonce │ ├── 共识机制 │ ├── Proof-of-Work │ ├── Proof-of-Stake │ ├── DPoS │ ├── BFT-style consensus │ ├── DAG │ └── Proof of Authority │ ├── 安全与漏洞 │ ├── Eclipse attack │ ├── Sybil attack │ ├── Selfish mining │ ├── 51% attack │ ├── Finney attack │ ├── Race attack │ └── Timejack attack │ ├── 智能合约 │ ├── smart contract definition │ ├── Ethereum / EVM / Solidity │ ├── gas │ ├── immutability │ ├── vulnerabilities │ └── upgradeability │ ├── 公有链与私有链 │ ├── permissionless │ ├── permissioned │ ├── trustless │ ├── privacy │ └── scalability │ └── 法律伦理 ├── black markets ├── recentralisation ├── equal access ├── trusting developers ├── environmental sustainability ├── GDPR / right to be forgotten └── regulation1. 区块链是什么1.1 基本定义区块链是一种分布式账本技术它允许交易被收集进区块并且这些区块按照时间顺序通过密码学方式连接起来。一个简化定义是Blockchain is a chain of blocks. Each block contains transactions, and each new block is cryptographically linked to the previous block.中文理解区块链就是一串按时间排列的区块每个区块保存一批交易并通过前一个区块的哈希值连接起来从而形成难以篡改的账本。1.2 区块链解决的问题区块链主要解决的是没有中心机构时如何保存可信记录。没有银行或平台时如何防止双花。多个互不信任的节点如何维护同一份账本。如何让历史记录一旦写入就难以被偷偷修改。传统系统中银行、平台、数据库管理员负责维护账本。区块链试图把这种信任转移到cryptography consensus distributed verification也就是用密码学保证数据难以篡改用共识机制让节点达成一致用分布式验证减少对中心机构的依赖。2. 区块、交易和钱包2.1 Transactions区块链中的基本记录通常是交易。一个区块可以包含多笔交易。整个区块链保存了历史上发生过的所有交易因此一个钱包的余额并不是“存储在钱包里”而是通过交易历史推导出来的。例如Alice received 10 coins Alice sent Bob 3 coins Alice balance 7 coins所以Wallets do not store coins directly. Wallets store keys that allow users to control assets recorded on the blockchain.中文理解钱包不是装币的盒子而是钥匙串。真正的资产状态记录在区块链账本上。2.2 Blocks一个简单区块通常分为Block ├── Header └── BodyBlock Header通常包含version / block indexprevious block hashMerkle roottimestampdifficulty / nBitsnonceBlock Body通常包含transactions2.3 Previous Block Hash每个区块保存前一个区块的哈希值Block 1 hash H1 Block 2 contains previous hash H1 Block 2 hash H2 Block 3 contains previous hash H2如果有人修改旧区块内容该区块 hash 会变后续区块保存的 previous hash 就会不匹配从而暴露篡改。3. 密码学基础区块链的密码学基础主要包括hashingasymmetric encryptiondigital signaturesECDSA3.1 HashingHash function 可以把任意长度输入映射为固定长度输出。例如hash(hello) → fixed-length digest hash(Hello) → completely different digestHash 在区块链中像“数字指纹”输入稍微变化输出就会明显变化。3.2 Hashing 的作用Hashing 主要用于检测数据是否被改动。连接区块。构建 Merkle Tree。支撑 Proof-of-Work。3.3 Hash 的重要性质Deterministic同样输入永远得到同样输出。hash(x) y hash(x) yPre-image resistance给定 hash output很难反推出原始 input。Given y hash(x), hard to find xSecond-preimage resistance给定一个 input很难找到另一个不同 input 产生相同 hash。Given x, hard to find x such that hash(x) hash(x)Collision resistance很难找到两个不同输入产生相同 hash。3.4 Hashing 不是 EncryptionHashing 和 encryption 容易混淆。概念是否可逆用途Hashing不可逆检测篡改生成数据指纹Encryption可用密钥解密保护机密性Hashing 不能“解密”。4. Digital Signatures 和 Asymmetric Cryptography4.1 Asymmetric Key Pair非对称密码学使用一对密钥Private Key Public Key在区块链中Key作用Private key用来签名必须保密Public key用来验证签名可以公开4.2 Digital Signature 的作用数字签名提供Authenticity证明交易由对应私钥授权。Integrity交易内容未被修改。Non-repudiation发送者不能轻易否认自己签署过交易。4.3 签名流程1. Alice creates a transaction. 2. Alice signs the transaction using her private key. 3. The transaction and signature are broadcast. 4. Other nodes verify the signature using Alices public key.如果交易内容被修改签名验证会失败。4.4 ECDSAECDSA 是 Bitcoin 等区块链常用的数字签名算法。核心作用用 private key 对交易签名用 public key 验证签名从而证明交易确实由钱包所有者授权。5. Merkle Tree 和 Merkle Root5.1 为什么需要 Merkle Root一个区块里通常有很多交易。如果节点要确认这些交易完整且未被修改逐条比较会很低效。Merkle Tree 把很多交易 hash 汇总成一个最终 hashMerkle Root可以理解为Merkle Root 是一个区块内所有交易的总指纹。5.2 Merkle Tree 的构建假设有四笔交易T1, T2, T3, T4先分别 hashH1 hash(T1) H2 hash(T2) H3 hash(T3) H4 hash(T4)然后两两拼接再 hashH12 hash(H1 || H2) H34 hash(H3 || H4)最后得到Merkle Root hash(H12 || H34)5.3 奇数交易怎么办如果某一层 hash 数量是奇数最后一个 hash 会复制自己再组合H3 → hash(H3 || H3)5.4 Merkle Root 的作用Merkle Root 可以验证交易是否完整。交易是否被修改。不同节点看到的区块交易集合是否一致。如果任何一笔交易发生变化Transaction changes ↓ Transaction hash changes ↓ Merkle Root changes ↓ Block header changes ↓ Block hash changes5.5 Merkle Root 与 Previous Hash 的区别概念作用Merkle Root总结当前区块内所有交易Previous Block Hash把当前区块连接到前一个区块Block Hash当前区块 header 的 hash6. Consensus Protocols 共识机制6.1 共识的意义区块链没有中心服务器因此节点必须共同决定哪个区块可以加入链 哪条链是当前有效链 哪些交易有效共识机制的作用是让分布式节点在没有中心权威的情况下对账本状态达成一致。6.2 Proof-of-WorkProof-of-Work, PoW要求矿工找到一个满足 difficulty target 的 block hash。流程1. Collect transactions 2. Validate transactions 3. Build candidate block 4. Construct block header 5. Change nonce repeatedly 6. Hash block header repeatedly 7. Find hash satisfying difficulty 8. Broadcast block 9. Other nodes verify 10. Block appended to chain6.3 NonceNonce 是矿工不断改变的数值。因为同样输入总是产生同样 hash所以矿工通过改变 nonce 产生不同 hash output。hash(block header nonce 1) → invalid hash(block header nonce 2) → invalid hash(block header nonce 3) → valid6.4 DifficultyDifficulty 定义有效 hash 的要求。常见解释是hash must start with a certain number of zeros更多 leading zeros 意味着更难找到有效 hash。6.5 PoW 的安全基础PoW 让攻击者篡改历史变得昂贵。如果攻击者修改旧区块Old block changes ↓ Its hash changes ↓ All following previous hashes become invalid ↓ Attacker must redo PoW for modified block and all following blocks ↓ Attacker must outpace honest network6.6 PoW 的缺点能耗高。需要大量算力。交易确认慢。容易出现矿池中心化。小算力链容易被 51% attack。6.7 Proof-of-StakeProof-of-Stake, PoS不靠算力竞争而是根据 stake 选择 validator。PoWPoSminervalidatorhash powerstakeenergy costeconomic penaltymining puzzlevalidator selectionhigh energy uselower energy usePoS 的安全来自stake slashing economic incentives如果 validator 作恶可能损失质押资产。6.8 其他共识机制DPoSToken holders 投票选出 delegates由 delegates 负责出块。优点快。缺点代表数量少中心化风险高。BFT-style consensus通过委员会和多轮消息投票达成共识。优点finality 快通常是 deterministic finality。缺点小委员会容易被攻击通信复杂度高。DAG不是单条 block chain而是交易之间形成有向无环图。优点并行度高。缺点安全模型依赖网络活跃度和 tip selection。Proof of Authority由已知身份的 validator 负责验证。优点快、责任清晰。缺点中心化trustless security 较弱。7. Forks 分叉7.1 Fork 是什么Fork 指区块链规则或链状态发生分歧。可能是软件协议升级。社区意见分歧。网络中出现不同链。攻击或竞争导致临时链分裂。7.2 Soft ForkSoft fork 是向后兼容的协议变化。特点Old nodes can still accept new blocks.旧节点通常仍可继续参与网络。7.3 Hard ForkHard fork 是不向后兼容的协议变化。特点Old nodes reject new blocks unless they upgrade.可能导致两条链并存也可能产生新资产。7.4 Soft Fork vs Hard Fork对比Soft ForkHard Fork中文软分叉硬分叉兼容性向后兼容不向后兼容旧节点通常仍可接受新区块不升级会拒绝新区块社区分裂风险较低较高是否可能产生新链通常不会可能会8. Byzantine Fault Tolerance8.1 Byzantine FaultByzantine Fault 是一种复杂故障节点可能失效、撒谎或者向不同观察者发送不同信息。普通故障Node is offline.Byzantine faultNode tells A: Attack Node tells B: Retreat8.2 Two Generals Problem两个将军必须一起攻击或一起撤退但只能通过可能丢失的信使通信。问题是无论确认多少轮总有最后一条确认消息可能丢失因此双方无法百分百确认彼此都已 committed。它说明不可靠通信环境下达成确定性共识非常困难。8.3 Byzantine Generals Problem多个将军要对 attack / retreat 达成一致但其中一些可能是 traitors。叛徒可能向不同人发送不同信息从而破坏共识。目标是All loyal generals agree on a single fact.8.4 Byzantine Fault ToleranceBFT 是系统在存在故障或恶意节点时仍能正确运行并达成一致的能力。考试式定义Byzantine Fault Tolerance is the ability of a distributed system to reach agreement and continue operating correctly even when some nodes are faulty or malicious.8.5 区块链为什么需要 BFT区块链没有中心权威。节点可能掉线。作恶。传播假区块。尝试 double spending。看到不同网络状态。因此需要 PoW、PoS 或 BFT-style consensus 来决定有效账本状态。9. Blockchain Vulnerabilities9.1 安全分层区块链攻击可以按层次理解P2P network layer Consensus / mining layer Smart contract layer Wallet / user layer Governance / legal layer9.2 Eclipse Attack攻击者控制目标节点的 peer pool使目标节点只连接到恶意节点从而被隔离于真实网络。核心Eclipse isolate one node影响目标节点看到假的 ledger view。目标节点可能拒绝真实区块。可以配合 double spending。9.3 Sybil Attack攻击者创建大量假身份节点伪装成许多独立参与者。核心Sybil create many fake nodes影响增加攻击者网络影响力。影响 peer selection。制造 fork。配合 double spending。9.4 Eclipse vs Sybil攻击目标方法本质Eclipse单个节点控制 peer pool信息隔离Sybil网络整体大量假节点身份伪造9.5 Selfish Mining自私挖矿指矿工挖到区块后不立即广播而是隐藏区块私下构建更长链之后再发布。目的让诚实矿工白挖。获得更多奖励。可能配合 double spending。流程Mine block privately ↓ Keep building private fork ↓ Release when private chain is longer ↓ Network accepts longer / heavier chain9.6 51% Attack当攻击者控制超过半数 hash power 时可以影响共识。能做审查某些交易。reverse 自己的交易。double spend。不能做偷别人的 private key。随意伪造别人的交易签名。任意把别人的币转走。9.7 Finney Attack攻击者先挖出一个包含冲突交易的 block并隐藏该 block然后用同一笔钱向商家付款。如果商家接受 unconfirmed transaction攻击者再发布隐藏 block使商家交易失效。核心Finney pre-mined secret block unconfirmed payment9.8 Race Attack攻击者几乎同时发送两笔冲突交易一笔给商家。一笔给网络中其他节点。商家如果接受未确认交易就可能被骗。核心Race conflicting transactions broadcast nearly simultaneously9.9 Timejack Attack攻击者通过恶意 peers 操纵目标节点的时间感知使目标节点拒绝真实区块或接受错误状态。常和 Eclipse attack 结合。9.10 Double SpendingDouble spending 是许多攻击的共同目标同一笔资产被攻击者尝试花两次。相关攻击Finney attack Race attack 51% attack Selfish mining Eclipse-assisted attacks10. Smart Contracts 智能合约10.1 定义Smart contract 是部署在区块链上的自执行代码。它根据预设条件自动执行操作。考试式定义A smart contract is a self-executing contract written in code and deployed on a blockchain. It automatically performs actions when predefined conditions are met.10.2 智能合约例子CrowdfundingSupporters pledge funds ↓ Smart contract holds funds ↓ If funding goal reached: release funds Else: refund supporters10.3 智能合约和普通代码的区别普通代码智能合约在服务器或本地运行在区块链节点上执行可以较容易修改部署后通常难以修改不一定公开通常公开可见不一定按执行收费Ethereum 中执行需要 gas由中心化系统控制由分布式节点验证10.4 Ethereum / EVM / Solidity关系Solidity code ↓ compile EVM bytecode ↓ executed by Ethereum Virtual Machine ↓ recorded on Ethereum blockchainSolidity 是 Ethereum 智能合约的主流语言。EVM 是执行智能合约 bytecode 的虚拟机。10.5 GasGas 是执行 Ethereum 交易和智能合约所需的计算费用。作用防止无限循环。防止资源滥用。为验证者提供激励。让计算复杂度有成本。11. Smart Contract Risks11.1 Immutability 的双刃剑优点规则不能被随意改变增强信任。缺点如果代码有 bug部署后难以修复。一句话Immutability gives trust, but makes bugs dangerous.11.2 法律和伦理问题智能合约不能自动判断现实世界中的身份真实性。欺诈。胁迫。合约能力。法律有效性。链上签名有效不一定代表法律上自愿有效。11.3 DAO IncidentDAO 事件体现了code is law vs human judgment一方认为代码执行结果应该被保留另一方认为遇到漏洞和不公平结果时社区可以通过 fork 介入。核心冲突区块链不可变性 vs 人类法律和伦理判断。12. Smart Contract Vulnerabilities12.1 Re-entrancy合约在更新内部状态前先进行外部调用攻击合约可以通过 fallback function 重复调用 vulnerable contract。错误模式send Ether then update balance安全模式check conditions update state interact externally即 checks-effects-interactions pattern。12.2 Arithmetic Overflow / Underflow固定大小整数超过最大值或低于最小值时可能 wrap around。例如uint8 max 255 255 1 → 0 0 - 1 → 255可能导致余额检查被绕过。12.3 Unexpected Ether攻击者可以通过特殊方式强行向合约发送 Ether破坏合约关于 balance 的假设。原则合约不能假设自己的余额只会通过指定 payable function 改变。12.4 DELEGATECALLDELEGATECALL 会在调用者合约的上下文中执行外部代码。风险外部代码可能修改调用合约的 storage、owner 或关键状态。12.5 Default Visibility函数如果没有明确设置 visibility可能被外部调用。原则Always explicitly specify visibility.12.6 Front-running攻击者观察 pending transaction然后提交更高 gas 的交易抢先执行。常见防御commit-reveal scheme avoid exposing sensitive information before execution12.7 tx.origin Authentication不要用 tx.origin 做身份认证。区别变量含义tx.origin最初发起整条调用链的外部账户msg.sender当前直接调用合约的地址风险恶意合约可以诱导用户调用它再由恶意合约调用目标合约。此时 tx.origin 仍是用户可能绕过认证。13. Solidity 学习要点13.1 Solidity 的特点Solidity 是面向对象。合约导向。静态类型。运行于 EVM。需要考虑 gas 成本。需要特别重视安全。13.2 Solidity 与普通语言区别普通语言如 Python、JavaScript、C 通常运行在本地或服务器。Solidity 运行在区块链环境中因此有gas cost。immutability。public execution。deterministic execution。security-by-design requirement。13.3 VisibilityVisibility含义public任何账户或合约可调用private仅当前合约内部可调用internal当前合约及子合约可调用external只能从外部调用13.4 安全开发原则Access control。onlyOwner modifier。checks-effects-interactions。明确 visibility。测试 edge cases。使用事件记录关键状态变化。代码模块化。部署前审计。设计可升级性但避免权限滥用。优化 storage 和 gas。13.5 Solidity vs VyperSolidityVyper功能丰富功能更少灵活更严格更适合复杂开发更强调安全和可读性需要更强安全意识通过限制减少漏洞可能14. Public vs Private Blockchains14.1 Public BlockchainPublic blockchain 是 permissionless。特点任何人可以加入。任何人可以读取和提交交易。更去中心化。没有单一控制者。数据公开透明。例子Bitcoin、Ethereum。关键词permissionless open transparent decentralised trustless publicly verifiable14.2 Private BlockchainPrivate blockchain 是 permissioned。特点只有授权参与者可以加入。有访问控制。通常由一个或多个组织控制。更高隐私。更高吞吐量。例子Hyperledger Fabric。关键词permissioned access control authorised participants more centralised higher privacy higher throughput14.3 相同点Public 和 private blockchains 都可以作为 append-only ledger。记录难以修改。使用分布式节点。验证交易有效性。使用某种共识机制。14.4 核心区别维度Public BlockchainPrivate Blockchain权限permissionlesspermissioned参与者anyone can joinauthorised participants only控制权no single controllerone or more controlling entities去中心化strongerweaker数据可见性publicrestricted信任模型trustlesstrust in authorised parties吞吐量lowerhigher隐私weakerstronger能耗often higheroften lower共识机制PoW, PoS, DPoSRaft, Istanbul BFT, PBFT, PoET例子Bitcoin, EthereumHyperledger Fabric14.5 选择原则Public blockchain 适合cryptocurrency。open DeFi。censorship-resistant payment。public audit。decentralised applications。Private blockchain 适合enterprise systems。banking consortium。supply chain。healthcare records。regulated environments。sensitive business data。结论哪种 blockchain 更好取决于 use case。15. Legal, Ethical, Security and Privacy Issues15.1 Black Markets由于区块链钱包地址具有 pseudonymity非法市场可能使用 cryptocurrency 进行匿名交易。问题身份追踪困难。非法商品和服务可能被交易。执法和监管难度增加。15.2 White Collar Employment智能合约可能替代部分合同执行、转账处理和行政流程。影响合同律师需要理解智能合约。行政和金融中介岗位可能被自动化影响。新职业会出现如 smart contract auditor。15.3 Variance in Blockchains不同 blockchain 价值观不同有的更去中心化。有的是 permissioned。有的更强调隐私。有的更强调吞吐量。用户需要知道自己使用的区块链到底信任模型是什么。15.4 Risk of Recentralisation虽然区块链理想上去中心化但现实中可能重新中心化交易所托管用户资产。大矿池集中算力。少数开发者影响协议。少数 validator 控制治理。Mining pools 过大可能带来 51% attack 风险。15.5 Equal Access使用区块链需要稳定网络。存储资源。计算资源。技术知识。资源不足地区可能被排除造成 unequal access。15.6 Trusting Developers区块链强调 trustless但用户仍需信任core developers。smart contract authors。wallet software。audit quality。protocol governance。如果用户看不懂代码就仍然需要信任专家或开发者。15.7 Environmental SustainabilityPoW 链可能消耗大量能源引发可持续性争议。相关权衡security via computation vs environmental cost15.8 Privacy and Public DataPublic blockchain 数据公开透明但这带来隐私风险。问题交易记录可追踪。敏感数据不适合直接上链。地址是假名不等于真正匿名。数据一旦上链难以删除。15.9 Immutability and Right to be Forgotten区块链不可变性与 GDPR / right to be forgotten 可能冲突。核心矛盾Blockchain wants permanent records. Data protection law may require deletion.15.10 Key Loss如果用户丢失 private key资产可能永久无法访问。如果平台帮用户保存 key又会重新引入中心化托管风险。16. 关键对比速查表16.1 Hashing vs Digital Signature概念解决问题Hashing数据是否被篡改Digital Signature谁授权了交易Private Key签名证明控制权Public Key验证签名16.2 Merkle Root vs Previous Hash概念作用Merkle Root验证当前区块内交易完整性Previous Hash连接前一个区块保证链结构16.3 PoW vs PoS维度PoWPoS出块者minervalidator依据hash powerstake成本电力和硬件质押资产攻击惩罚计算成本损失slashing能耗高低风险51%, mining pool centralisationstake centralisation, governance capture16.4 Eclipse vs Sybil攻击核心Eclipse隔离一个节点控制它的网络视野Sybil制造大量假身份节点扩大网络影响力16.5 Finney vs Race攻击是否需要预挖 block核心Finney需要hidden pre-mined blockRace不需要conflicting transactions16.6 Soft Fork vs Hard ForkFork兼容性结果Soft Fork向后兼容旧节点通常仍可接受新区块Hard Fork不向后兼容旧节点不升级会拒绝新区块可能分裂成两条链16.7 Public vs Private BlockchainPublicPrivatepermissionlesspermissionedanyone can joinauthorised onlydecentralisedmore centralisedtransparentprivatetrustlesstrust in authorised nodeslower throughputhigher throughputBitcoin / EthereumHyperledger Fabric17. 一句话总复习Blockchain用密码学连接区块的分布式账本。Hashing检测数据是否被篡改。Digital Signature证明交易由 private key owner 授权。Merkle Root一个区块内所有交易的总 hash。Consensus让分布式节点对账本状态达成一致。PoW通过算力竞争出块。PoS通过质押资产选择 validator。BFT在部分节点恶意或故障时仍能达成一致。Eclipse Attack隔离一个节点。Sybil Attack制造大量假节点。51% Attack控制多数算力后可审查交易或 double spend。Smart Contract部署在区块链上的自动执行代码。Gas执行 Ethereum 交易和合约的计算费用。Re-entrancy外部调用前未更新状态导致重复提款。Public Blockchain开放、透明、去中心化。Private Blockchain授权、隐私、高吞吐。Immutability增强信任但让错误难以修复。Legal/Ethical Issues区块链不仅是技术也是社会、法律和治理问题。