北京大学肖臻老师《区块链技术与应用》公开课

三个特性:
1.collision resistance
2.hiding
3.puzzle friendly
生成公私钥要有个好的随机源。
重点:哈希和签名
密码学到此结束
第三课 比特币数据结构
哈希指针 hash pointers
比特币中最基本的数据结构是区块链
相比于一般的链表,使用了哈希指针代替一般指针;
区块链中,每个区块链中有指向前一个的哈希指针,哈希指针的值是前一个区块链完全取哈希得出的值。所以无论链中哪一个区块发生变化,都会影响最终的哈希值(和普通链表不一样);因为这个特性可以保存最近的区块链而不用完全保存。
比特币另外一个特性:merkle tree
区别于一般 binary tree,用哈希指针代替一般指针。

检测root hash值,就能检测任何节点的修改。block header中包含root hash ,block body中包含交易信息。
比特币中的节点有两类,全节点和轻节点
全节点,包含 block header 和block body
轻节点,包含 block header
为了让轻节点查到交易信息,使用merkle proof;
轻节点只有根哈希值,为了知道黄色交易是不是包含在merkle tree, 向全节点请求merkle proof,全节点接收到请求后发送红色哈希值给轻节点,轻节点接收到之后在本地算出绿色哈希值,算出root hash 之后和轻节点中block header中的值比对,看是否一致。

以上证明 也叫 proof of membership 复杂度log(n)
如何证明 proof of non-membership(证明没 交易)
高效证明方法基于假设,否则只能传整个树 复杂度n
对叶节点的顺序做一些要求,譬如按照交易的hash值排序,对叶节点的包含的交易内容取一次hash值,按hash值从小到大排序,我查的交易取hash值,看是否在区间中。复杂度 logn 比特币中没有排序。
数据结构只要是无环,都可以用hash pointer代替 一般指针。
第四课 设计加密货币
数字货币主要处理双花攻击(double spending attack)
中心化方案统一由央行发行,记录交易
去中心化方案由广大群众一起承担
去中心化货币要解决两个问题
1.数字货币的发行
在比特中由挖矿决定
2.验证交易的有效性
在比特币中也是需要数据结构,由用户一起承担,就是区块链。

连接区块链的是 hash pointer
说明交易的来源是另外一个指针,解决双花攻击
A需要知道B的地址,B需要知道A的公钥,验证A身份;
非对称加密:A发送给B信息,需要B提供的公钥加密,B接收完用B的私钥解密。
bitcoin script脚本用来验证交易。
block header中包含
1、bitcoin的版本协议 version
2、指向前一个区块指针 hash of previous block header
3、整块merkle tree的hash值
4、挖矿的难度目标阈值 target
5、随机数 nonce
H(block header)<= target

系统中大多数是轻节点,但是轻节点利用区块链的特性而不参与区块链的构建,主要讲解全节点。
分布式共识:distributed consensus
distributed hash table解决一致性;
FLP impossibilty result:在一个异步的系统里,即网路传输延迟没有上限的系统,即使只有一个成员是有问题的 (faulty),也没法达成共识。
CAP Theorem: Censistency 、Availability、 Partition tolerance 只能同时满足满足两个,不能三个同时满足。
分布式共识的一个著名协议:paxos,能保证一致性,即如果协议达成共识,这个共识一定是一致的;
bitcoin中的共识协议,consensus in Bitcoin,
假设系统中只有少数节点有恶意,关于投票,比特币按计算力来投票,每个节点可以在本地组装候选区块,试验nonce满足H(block header)<= target ,如果某一个节点找到了nonce,获得记账权,有记账权才能发布下个节点。

分叉攻击:

如果出现两个矿工差不懂同时同时出现两个节点,等长的区块链会持续一段时间,看哪一个先找到后一个节点,称为longest valid chain,另外一个抛弃。

为了解决合法都接纳,采用 block reward机制。
唯一产生新的币的途径:coinbase transaction
比特币挣夺计账权的过程称为挖矿。