目录
3.全节点full node(fully validating node)
1.分布式的共识(distributed consensus)
3.比特币中的共识协议Consensus in Bitcoin
前言
本文为整理记录学习比特币的共识协议的笔记。图片清晰度可能不够高,希望这不影响您的观看体验。如果有任何错误,请随时指出,感谢您的阅读
一、铸币交易
1.铸币权
通过某种方法,用户A获得了发行货币的权利
2.铸币交易(coinbase tx)
①A把钱转给B,需要有A的签名和B的地址
在比特币系统中,收款的地址是通过公钥推算(用B的公钥取哈希,然后经过转换得到)
②交易过程中,A的公钥要让B和所有节点知道
原因:验证A的签名,A用私钥签名,B用公钥验证 交易时,A要用B的公钥加密,收到后B用自己的私钥解密
③在交易中可以避免有人故意伪造A的签名:coinbase tx(左边那个框框)的输出存有A的公钥的哈希它一定要=转账交易内的A的公钥,否则交易无法进行
以下图片是一个铸币交易
简单解释如下图
把交易写在区块链里,然后A拿到钱后给B和C各5个比特币 该交易要有A的签名,证明是经过A同意的,同时这个交易还要说明从哪而来
3.输入和输出
比特币系统中,每个交易都包含输入和输出两个部分
输入部分说明币的来源,输出部分给出收款人的公钥的哈希
比特币系统内部没有提供查询某个人的比特币地址的功能,要通过其他渠道 比如:某个电商网站它接受比特币支付,那它就会在网站上公开它的地址(公钥)
二、小型的区块链
1.见下图所示
2.哈希指针
图中有两种哈希指针
一种是连接各个区块,串起来变成一个 。一种是指向前面某个交易(图中后面的c指向前面的c)
这二种指针说明币的来源是有记录的,同时可以防范双花攻击
3.双花攻击
double spend attack 简单来讲是,一笔钱被花了两次
三、块头块身,全节点轻节点
1.块头(block head)
包含宏观信息
①比特币的版本协议(version)
②区块链中指向前一个区块的指针(hash of previous block number)
③默克尔树的根哈希值(Merkle root hash)(保证块身里面的交易列表无法被篡改)
④挖矿的难度目标域值(target)
⑤随机数(nonce)
⑥H(block header)≤target中这个目标域值的编码(nBits)
2.块身
交易列表(transaction list)
3.全节点full node(fully validating node)
数目少,保存区块链的所有信息,验证每一个交易
4.轻节点light(weight) node
数目多,不能独立验证交易的合法性,比如是否是双花攻击
四、共识协议
1.分布式的共识(distributed consensus)
简单例子:分布式的哈希表(distributed hash table)
系统里有很多机器,共同维护一个全局的哈希表。此时需要取得的共识内容是key-value pair(键值对),比如有的人在a这台机器插入value pair('a'→12345),别人在另一台机器也能读出
拓展:CAP Theorem
3个性质--C:Consistency A:Availability P:Partition tolerance
任何一个分布式系统,比如说分布式哈希表,三个性质最多只能满足两个
2.hash rate
比特币中的共识是去中心化账本里的内容(内容由有记账权的节点决定)获得记账权方法:靠算力 (puzzle friendly),每秒钟可以试多少nonce,称为hash rate
账户数量的多少不会影响hash rate,也不会受到女巫攻击的影响
比特币争夺记账权的过程:挖矿mining
争夺记账节点的人:矿工miner
女巫攻击(sybil attack):在投票中,故意弄出超过总数一半的账号,操纵投票结构
3.比特币中的共识协议Consensus in Bitcoin
存在的原因:在比特币系统中,某些节点可能是有恶意的
存在恶意节点如何设置共识协议:按照算力来决定,每个节点都可以在本地组装出一个候选区块把它认为合法的交易放进,然后开始尝试nonce值。成功的获得记账权
4.两个等长的分叉
如下图
如果两个节点同时获得记账权,会出现两个等长的分叉 。此时,该接收哪个呢?
比特币缺省情况下,每个节点接收自己最早收到的那个节点,不同节点根据在网络中位置的不同
接受/不接收区块 接收区块:沿着你的区块往下继续扩展。不接收则反之
出现两个节点同时获得记账权的情况,这种等长的临时性的分叉会维持一段时间,直到某个节点胜出 胜出的是最长合法链,输掉的是orphan block,会被丢弃掉
5.比特币铸币规则
获得记账权的节点可以决定哪些交易被写进下一个区块。但是比特币想要合法的交易都可以被写进。比特币协议中就规定获得记账权的节点在发布的区块里,可以有一个特殊的交易(铸币交易),在该交易里可以发布一定数量的比特币
铸币交易是比特币系统中发行新的比特币的东西
唯一方法:最初每次能造50比特币(初次奖励),但在21万比特币后,奖励减半