没有合适的资源?快使用搜索试试~ 我知道了~
《肖臻公开课笔记.pdf》是关于比特币的内容总结。文件首先介绍了比特币的密码学原理,包括使用随机数进行哈希运算来确保挖矿的难度和交易的合法性,并强调了随机源的重要性。接下来介绍了比特币中的数据结构,包括哈希指针和区块链的结构,以及如何利用默克尔树来验证交易的完整性。文件还提到了默克尔证明和排序默克尔树的方法。 此外,文件还讨论了比特币的共识协议,包括如何防止双花攻击和使用区块头来确保交易列表的完整性。文件还涉及分布式共识、女巫攻击和最长合法链等概念。此外,还介绍了比特币的区块奖励和铸币交易的概念。最后,文件提到了比特币系统的实现方式,包括基于交易的账本和基于账户的账本,并介绍了UTXO和交易费的概念。 本文详细介绍了比特币的密码学原理、数据结构、共识协议和实现方式,对于想要了解比特币的工作原理和技术细节的人来说,是一份很有价值的文章。
资源推荐
资源详情
资源评论
比特币篇
密码学原理
nonce:一个随机数,和区块的块头里的其他信息作为输入,做哈希,这个哈希值要小于等于一个
指定值。
挖矿很难,验证很容易。
比特币中用的是SHA256哈希算法。
比特币的账户就是一个公私钥对(public key,private key)在交易的时候,用私钥来签名,区块
链的其他节点用公钥进行验证,保证交易的合法性。
保证不存在相同的公私钥对以及私钥不会泄露的前提是:a good source of randomness,在进行
生成公私钥对和数字签名的时候都要一个好的随机源,否则有可能泄露私钥。
数据结构
哈希指针(hash pointers):保存一个结构体的地址并且保存结构体的hash值,一般用H()来表示
一个哈希指针。
一个简单的区块链的结构,最前面是创始区块,最后面是最新的区块,每一个区块都有一个哈希指
针来指向上一个区块
tamper-evident log 篡改证明记录,因为每个区块的头部都有一个哈希指针,那么任何人篡改了其
中的一个区块后,都会造成后面的区块的哈希指针中存的hash值不一致,就可以找到被篡改的区块。
Merkle tree
这就是一个默克尔树(Merkle tree),其中数据块其实代表了每一个交易,对每一个交易做哈
希,然后形成一个二叉树,这样只要某一个交易被篡改就可以在根哈希值(root hash)反应出来。其
实是和区块链的效果差不多,但是因为做成了二叉树,效率会增加很多。
在block header中存放着这个root hash,在block body中存放着交易的列表。
Merkle proof:
上面是一个Merkle proof的示意图,在轻节点中,只保存了Merkle tree的Merkle Root,而它想要
确定某一个交易是否发生,那么它就会向一个全节点发出请求,请求的内容就是图中红色的哈希值,轻
节点自己计算这个交易的哈希值,将计算出来的哈希值与全节点提供的哈希值再做哈希,然后从下到上
一层一层计算,知道计算到最后的Merkle Root,再与轻节点自己保存的Merkle Root做对比,来验证这
个交易是否发生,而这一个过程就叫做Merkle proof。
sorted Merkle tree:
对每个交易的哈希值进行排序,那么就可以证明一个交易不存在:我们算出这个交易的哈希值,然
后取它哈希值大小相邻的两个交易的哈希,算出这两个相邻交易的Merkle proof,如果最后的根哈希和
block header中的根哈希相同,就说明这两个交易确实是相邻的,也就是这两个交易中间不存在一个交
易,也就证明这个交易不存在。
哈希指针不能用在循环链表中,因为会存在循环依赖的问题:
这里存在的问题就是头的哈希要用尾的哈希确定,而尾的哈希也要根据前面的哈希确定,也间接用
到头的哈希,这就会出现问题。
比特币共识协议
双花攻击(double spending attack):数字货币使用两次
比特币中应对双花攻击的方法:
在每一个每一个交易中,要写明给出币的来源,这样可以在最后B再给F转5个币的时候,他要写明
币的来源,这样就会发现这个币已经被转出了,所以就可以防止双花攻击。
并且,在这个过程中,还解决了一个问题:比如当A用伪造的公钥并且用这个伪造的公钥签名,如
果没有办法证明A的公钥的合法性的话,其他人就会认为这是一个合法交易,也就是说不能让A自己说自
己的公钥是什么,那么A的公钥实际上,是铸币交易中,会对来源的公钥进行哈希传递给下一个区块,
所以这个指向币的来源的哈希指针是非常重要的,可以解决这个伪造公钥的问题。(PS:这个指向币的
来源的哈希指针,存放的就是来源的公钥的哈希值,在比特币中账户就是用户的公钥)
区块头(block header)结构:
version:比特币协议版本
hash of previous block header:上一个区块头的哈希指针,不需要对区块体进行哈希是因
为Merkle root hash已经保证了交易列表不会被篡改
Merkle root hash:默克尔树的根哈希值
target:难度目标阈值的编码,整个块头的哈希值要小于等于这个目标阈值
nonce:随机数
区块体(block body)结构:
transaction list:交易列表
full node:(全节点)有区块头和区块体的节点
light node(轻节点):只有区块头的节点
distribution consensus(分布式共识):分布式共识实际上就是解决每个节点的账本一致性的问
题
sybil attack(女巫攻击):一台机器不停创建账户来达到获得超过51%的节点的投票权,控制整个
链。比特币中避免sybil attack的方法就是因为比特币的投票权是算力决定的,控制51%的节点带来的收
益和你直接挖矿的收益是一样的,所以也就不存在sybil attack,也许这种攻击在其他不通过算力决定投
票权的协议中会存在。
longest valid chain(最长合法链):
只接受最长的链作为合法的链,防止交易回滚,造成问题。这种攻击也叫作forking attack(分叉
攻击)
还有一种情况:
这个时候,等长的分叉两条分支都是合法的,那么就会存在一段时间的分叉,直到其中一个分叉又
算出了下一个区块,这样就会确定新的最长合法链。
block reward(区块奖励):比特币中规定拿到记账权的节点能得到比特币的奖励。这个奖励最开
始是50BTC,但是每存在21万个区块后,这个reward就减半。这也就决定了比特币的总量是固定的
2100万个。
coinbase transaction(铸币交易):是比特币中唯一可以产生比特币的途径。也就是竞争到记账
权的节点可以进行的交易。
比特币系统实现
transaction-based ledger(基于交易的账本)ledger:是比特币使用的模式,这种模式下账本不
会记录每个账户的余额,只能根据所有的交易信息来算出账户的余额
account-based ledger(基于账户的账本):是以太坊使用的模式,这种模式下,账本会显式地记
录每个账户的余额。
UTXO:Unspent Transaction Output(还没有花出去的交易输出),全节点在内存中维护这样一个
结构,保存所有的unspent transaction output,用来在交易时验证是否有效。
transaction fee(交易费):竞争到记账权的节点,在打包交易信息的时候,可以从每笔交易获得
交易费,从而避免自私节点只打包自己的铸币交易。
实际区块的例子:
剩余56页未读,继续阅读
资源评论
sca1p31
- 粉丝: 655
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功