北大区块链公开课
课程信息
- 基本的数据结构和算法,掌握编程的基本技能:
- 数组、链表、二叉树、哈希函数
- 参考资料
- BitCoin and Crytocurrency Technologies A Comprehensive Introduction
- 以太坊白皮书、黄皮书、源代码
- Solidity 文档
课程大纲
- 比特币
- 密码学基础
- 比特币的数据结构
- 共识协议和系统实现
- 挖矿算法和难度调整
- 比特币脚本
- 软分叉和硬分叉
- 匿名和隐私保护
- 以太坊
- 概述:基于账户的分布式账本
- 数据结构:状态树、交易树、收据树
- GHOST 协议
- 挖矿:memory-hard mining puzzle
- 挖矿难度调整
- 权益证明
- -Casper the Friendly Finality Gadget(FFG)
- 智能合约
北大 肖臻:http://zhenxiao.com/
密码学基础
哈希特性
- 哈希碰撞
- 不可逆(电子盲盒:保证输入随机(nonce))
- 不可预测
签名
- public key、 private key
- 随机源(生成公私钥匙、签名的时候)
日常账户管理:中心化;
比特币账户管理:去中心化;
比特币开户:本地创建一个公私钥对。
对称加密:加密和解密共用一个秘钥。弱点——确保秘钥分发安全。
非对称加密:发送发用接收方公钥加密,接收方用自己私钥解密。同一人的公钥(银行账户)和私钥(密码)。
比特币:用私钥签名,用公钥验证签名,仍然是同一个人的。
比特币中先对一个 message 取一个哈希,然后对哈希进行签名。
比特币的数据结构
哈希指针
普通的指针存储的是某个结构体在内存中的地址。哈希指针除了保存地址之外,还要存储结构体的哈希值。
- 存储结构体位置
- 检测结构体是否被篡改
区块链 Block chain
比特币中一个最基本的数据结构:区块链——区块组成的链表。

区块链 & 普通链表
- 哈希指针 & 普通指针
- 验证区块是否篡改
Merkle tree
binary tree
只要记住 root hash,能检测树中任意位置的修改。

Merlkle proof 
哈希指针不适用环形链表。
比特币的共识协议
去中心化货币
- 数字货币的发行。什么时候发,发多少?
- 交易的有效性。防止 double spending attack
比特币系统中,每个交易都包含了输入和输出。输入部分要说明币的来源,输出部分要给出收款人的公钥的 hash。

Block header
- version 版本协议
- hash of previous block header(对块头取 hash)
- merkle root hash
- target 挖矿的难度目标阈值
- nonce 随机值
Block body
- transaction list 交易列表
full node 全节点 (fully ralidating node)
light node 轻节点(无法独立验证交易的合法性)
账本的内容要取得分布式共识。
分布式共识协议:Paxos
比特币中的共识协议
最长合法链 longest valid chain
分叉攻击 forking attack
争夺记账权 mining
数字黄金 digital gold
争夺记账权的节点 (矿工)miner
transaction-based ledger(BTC)
account-based ledger (ETH)
Solidity Developer
Blockchain protocol engineer 区块链协议工程师
core developer
Security Auditor 安全审计者
Rust developer
Full stack developer 全栈开发者
dappuniversity.com/bootcamp
Solidity
Rust
0x3ed8930aafcd415f5b03ff0344a9ce93d8e8fdab8de3baba8fcf9bd38bd42f39
0xcb84084e7ae8ba270fbfb21e8bdc9ce66f45b9bd91f72988bdf719a419978e37