← 全部课程
COMP5565

Decentralized Apps Fundamentals and Development

期末 70% · 期中 15% · Project 15%。期末由 AR 安排;期中只考以太坊段。

逐讲

期末复习怎么用

课程分两大块:以太坊与 Solidity 在前,Hyperledger Fabric 在后,期中只考前一块,范围窄且确定。计算题集中在账户余额、UTXO 结构和 gas 三处,这三类练熟就能吃下大部分可算的分。

  1. 1 按讲把页尾「必背」过一遍,账户四字段、gas 三个量这种清单型条目要能一口气报全。
  2. 2 每讲的「完整例题」跟着算一遍,然后合上页面做「变式题」,余额题记得用总量守恒验算一次。
  3. 3 最后扫「课件里的坑」:这门课的课件数值前后矛盾的地方多,标了 [课件有误] 的按笔记记,标了 [口径差异] 的按课件写。

要能动笔算的题型

这几类没有思考余量,练到不看提示就能做。

账户模型余额
给出块奖励与手续费,写出各方余额变化
UTXO 交易结构
同一场景下写出输入、输出与找零,含 coinbase
gas 与手续费
给 baseFee 与小费和用量,算实付、销毁与各自占比
Merkle 证明
给一棵树,写出证明某条数据需要哪几个哈希
合约代码阅读
给一段 Solidity,说明它做什么、有什么漏洞

复习的产物:自己填的表

填表本身就是复习,抄一份现成的没有用。

  • 账户模型 vs UTXO:状态怎么存、找零怎么处理、并发与隐私的差别
  • 公链 vs 许可链:准入、共识、分叉、最终性、激励、执行模型、吞吐
  • 以太坊机制速查:账户四字段、gas 三个量、实付单价、状态树

累计考点表

各讲页尾「必背」的汇总,随讲次增长。复习时按讲回看,点讲次跳到那一页。

L01 · L01 Introduction:一本谁都能抄、谁都改不动的公共账本
  1. 双花是数字货币的根本难题;解法是放弃币的实体性改成记账——公开账本加数字签名,信任从机构转到技术
  2. Prev Hash 只提供「可检测」:改一块后面全对不上;让篡改「不可行」的是 PoW 加累计工作量最大的链规则,两者别混
  3. append-only 四性质 Persistence / Consensus / Liveness / Open(?),前三条通用,Open 打问号,许可链没有
  4. 交易记录六步里第 3 步(出块者打包时)和第 5 步(验证者收块时)都要执行一遍交易,这是公链慢的根本原因
  5. 账户模型:Miner's Reward = Block Subsidy + Transaction Fee,手续费由付款人在转账金额之外额外承担,防重放靠 nonce
  6. UTXO 模型:输入必须整额消耗、剩余显式找零,每个输出只能被引用一次,手续费 = Σ inputs − Σ outputs,天然免疫重放
  7. 智能合约 = 在 EVM 中确定性执行的程序;自动执行不自动决定法律效力;DApp = 智能合约 + 大多为静态的前端内容
  8. 许可链拿掉的正是那个打问号的 Open:节点需审批加入,传统 BFT 共识就够,因此不分叉、有最终性、无奖励无手续费
C01 · C01 Crypto Foundation:一本给数据按指纹的册子
  1. 三条性质:单向(给 h 找不出 x)、弱抗碰撞即第二原像(给定 x 找不出另一个 y)、强抗碰撞(任意一对 x,y);区分判据是攻击者控制几个输入;强抗碰撞蕴含弱抗碰撞,反之不成立
  2. 输出 n bit 时暴力找原像要 2ⁿ 次,找碰撞只要约 2^(n/2) 次(生日攻击),这是 SHA-1 被压到 2⁶⁹ 的来源
  3. Bitcoin = SHA2-256 + RIPEMD-160,Ethereum = Keccak(Keccak 与标准 SHA3 填充规则不同,同一输入结果不同);Hash160 = RIPEMD160(SHA256(x)),输出 160 bit
  4. 加盐的作用是摧毁预计算、把批量攻击打回逐用户攻击;盐公开存储、每用户唯一、随机,它不让单个密码更难破
  5. 哈希既不提供机密性(低熵输入枚举即可还原)也不提供来源真实性(任何人都能算,数据和哈希可被一起替换)
  6. 哈希链每块装前一块的哈希,改中间任何一块必须重算它之后的所有块
  7. Merkle 证明给的是路径上每层的兄弟节点哈希,共 log₂(n) 个,8 叶子树是 3 个;拼接顺序不可交换
  8. 私钥签、公钥验;σ = Sign(sk; m),Verify(pk; m, σ) → True/False,三个输入缺一不可;实践中先哈希再签
L02 · L02 Ethereum:一台全村共用的计费电脑
  1. EOA 地址生成四步:ECDSA 生成私钥 sk → 推出公钥 pk → keccak256(pk) → 取这 64 个十六进制字符里的最后 40 个(160 bit)
  2. CREATE 由部署者和 nonce 决定地址;CREATE2 由部署者、salt、init_code 哈希决定地址;两者均可预计算,后者不依赖部署者 nonce
  3. 账户状态四字段 Nonce / Balance / storageRoot / codeHash,后两个存的是哈希不是数据;本讲无代码委托的普通 EOA,其 codeHash 是空字符串的 keccak256,不是全零
  4. 本讲普通交易模型中 EOA 发起交易;to 留空表示创建合约;标准 ABI 调用的 Data 是函数选择器加编码参数,函数签名不等于数字签名
  5. 总费用 = gas used ×(base fee + 实付 priority fee);普通 ETH 转账消耗 21,000 gas;base fee 销毁,小费归验证者;max fee per gas 是封顶,课件区块目标 15M、上限 30M 是示例参数
  6. 先区分无效交易、执行耗尽 gas 与 REVERT;低于 intrinsic gas 的交易不执行入块,执行失败仍按规则付 gas,REVERT 不必耗尽剩余 gas
  7. 1 slot = 12 秒,1 epoch = 32 slots = 6.4 分钟;最终性 = 2 epochs ≈ 13 分钟;成为验证者要押 32 ETH
  8. 三种可罚没行为:Double proposal(同一 slot 出两个块)、Double vote(同一 target epoch 作出两个不同的证明)、Surround vote(一次证明的 [source, target] 区间严格包含另一次)
L03 · L03 Smart Contract and Wallet:一台不能退货的自动售货机
  1. 智能合约把规则写成链上程序;代码不可直接改写不等于系统行为永远不变,代理升级或管理员权限须另查;自动执行不自动赋予法律效力
  2. 源码用 Solidity 写、在链下编译成 EVM bytecode 再部署;节点不编译只执行,每个全节点处理每一笔交易、存全部状态
  3. 朴素猜拳合约的致命问题是出拳明文进交易和合约存储,后手看完再出必胜;判胜公式 (p0 + 3 − p1) % 3,结果 1 则 P0 赢、2 则 P1 赢、0 则平分
  4. commit-reveal 两阶段:先提交 H(nonce, choice),截止后再揭示;依赖哈希的 hiding 与 binding,nonce 防三选一被枚举,截止时间加押金防后揭示者耍赖
  5. ERC-20 = 同质化代币标准,6 个必须函数(totalSupply / balanceOf / transfer / transferFrom / approve / allowance)+ 3 个可选(name / symbol / decimals)+ 2 个事件(Transfer / Approval)
  6. ERC-721 = 非同质化代币标准,每个 token 有唯一 tokenId、不可分割、有 ownerOf;一个 ERC-721 合约代表一类资产,一个 ERC-20 合约代表一种资产
  7. 三代钱包:Type-0 / JBOK 随机密钥集合 → 确定性钱包(一个种子推出全部密钥)→ HD 钱包(树状,BIP32);推导链是 Seed → HMAC-SHA512 → 主密钥 → CKD(父, 索引)
  8. BIP39:128–256 位熵 → SHA256 取前 ENT/32 位作校验和接在末尾 → 切成 11 位一段 → 查 2048 词表;助记词经 PBKDF2-HMAC-SHA512、salt "mnemonic" + passphrase(默认空串)、2048 轮得到 512 位种子