主页 > imtoken钱包下载安卓最新版本 > 比特币那年发行 03-BTC-共识协议

比特币那年发行 03-BTC-共识协议

免责声明:本文为重点笔记,简介及系列笔记收录在专题:区块链技术与应用

双花攻击

数字货币与纸币的区别在于数字货币可以被复制,这就是所谓的双花攻击。

去中心化货币需要解决两个问题:

如何发行数字货币来验证交易的有效性,防止双重支出攻击。

它的解决方案是:

比特币的发行是由挖矿决定的,依托于区块链的数据结构。

简述比特币发行机制_比特币那年发行_sitebitebiren.com 比特币发行

比特币交易方式

如上图所示,比特币的发行者A拥有铸币权(createcoin)。 如果发行10个比特币,A(10)分别给B和C五个→B(5)C(5),交易需要A的签名,证明是A同意的(由A签名)。 同时,还需要说明所花费的10个比特币从何而来。 我们可以看到A在第二个盒子里的钱来自第一个盒子里的铸币交易。

比特币系统中的每笔交易都包括输入和输出两部分。 输入部分应注明币种来源,输出部分应给出收款人公钥的哈希值。

简述比特币发行机制_sitebitebiren.com 比特币发行_比特币那年发行

有些交易比较复杂。 比如C的币种来源是第二个和第三个方框的交易,应该明确标明。

上图构成了一个小区块链。 这里有两种哈希指针。 每个区块之间连接着一种哈希指针,它们串在一起形成一个链表。 这是我们之前了解到的。 希腊指针。 在这个图中,还有第二种哈希指针,它是一个指向之前交易的指针,用于指示币的来源。

为什么要说明货币的来源? : 证明币不是凭空捏造的,记录下来,也是为了防止双花攻击。

现在看第二个盒子里A给B的转账,需要A的签名和B的地址。 比特币系统中的接收地址是通过公钥计算出来的。 例如,B 的地址是通过对 B 的公钥进行哈希处理,然后进行一些转换得到的。

A怎么知道B的地址? 比特币系统中没有查询对方地址的功能,必须通过其他渠道。 例如,如果一个电子商务网站接受比特币支付,它的地址或公钥就可以公开。

A需要知道B的地址,B需要知道A的哪些信息? 其实B也需要知道A的公钥,它代表了A的身份。 不仅是 B,所有节点都需要知道 A 的公钥。 签名是用私钥签名,用公钥验证(注意不要和前面的知识混淆,加密是用接收者的公钥加密,用私钥解密),所以区块链上的每个节点都必须是独立验证。

那怎么才能知道A的公钥呢? 实际上,它包含在交易中。 输入时不仅要输入币种来源,还要输入公钥。 那么就有安全漏洞了,万一B的同伙伪造了交易怎么办? 事实上,第一个盒子的铸币交易输出有A的公钥哈希,所以第二个盒子交易中A的公钥必须与之前的哈希匹配。

比特币脚本 (BitCoinScript)

在比特币系统中,之前的验证过程都是通过执行脚本来实现的。 每笔交易的输入都是一个脚本,包括给公钥的过程,也是在输入脚本中指定的。 每笔交易的输出也是一个脚本。 要验证其合法性,需要将当前交易的输入脚本与上一笔交易(提供币源的交易)的输出脚本结合起来,看能否顺利执行。 执行指令合法。

上图是交易系统的简化。 实际上,每个区块(对应图中的每个方框)都可以有很多笔交易,这些交易形成了一颗默克尔树。 每个区块分为区块头和区块体。

sitebitebiren.com 比特币发行_比特币那年发行_简述比特币发行机制

堵塞

笨重

区块头包含了区块的宏观信息。 例如,包含的字段有:

这里的target就是前面说的,整个block header的hash要小于这个pre-value,即H(block header)≤target。 区块头中存储的是这个目标预置值的编码(nBits)。 这里需要注意的是,前一个区块的哈希只算作前一个区块的区块头,所以从一个区块画一个箭头到另一个区块的中间是不正确的,所以有些书上的箭头是指向块的顶部。 散列时,块头的所有部分都被散列。

块体

区块体中有一个交易列表。

前面提到的另一个内容被简化了:每个节点都需要验证所有交易。 实际上,系统中的节点分为全节点(full nodes)和轻节点(light nodes)。

比如一笔交易是否是双花攻击,轻节点并没有保存之前所有的交易信息,所以无法验证。 系统中的大多数节点都是轻节点。 我们现在主要讲全节点,因为轻节点不参与区块链的建设和维护,只是利用区块链的一些信息做一些查询。

区块链中的内容如何写入区块链? :每个节点和每个账户都可以发布交易,交易广播给所有节点。 有些交易是合法的,有些是非法的。

谁来决定哪些交易应该包含在下一个区块中? 我应该按什么顺序写它们? 每个节点自己决定好不好? :如果每个人都在本地维护一条区块链,则无法保证区块链的统一性,账本内容需要实现分布式共识。

sitebitebiren.com 比特币发行_比特币那年发行_简述比特币发行机制

分布式共识理论(理解)

分布式共识的一个简单示例是分布式哈希表。 比如系统中有很多机器共同维护一个全局哈希表。

这里需要达成什么共识? 哈希表中包含哪些键值对(key valve pairs)。 如果有人在他的电脑上插入一个键值对,比如键'xiao'对应的是12345,即'xiao'→12345。 然后其他人在另一台计算机上阅读时应该能够阅读它。 这称为全局哈希表。

关于分布式系统有很多不可能的结果,其中最著名的就是FLP理论。 这三个字母是三位专家的简称。 他们的结论是:在异步系统中(网络传输延迟没有上限,称为异步系统)比特币那年发行,即使只有一个成员出现故障,也不可能达成共识。

还有一个著名的理论:CAP定理。 CAP 指的是分布式系统的三个理想属性:

该理论的内容是:任何分布式系统,比如分布式哈希表,最多只能满足这三个性质中的两个。

两个属性,那么第三个属性就得不到了。

比特币分布式共识的一个著名协议是Paxos,它可以保证一致性,这是第一个特性。 如果协议达成共识,那么共识必须是一致的,即每个成员认为的共识是相同的。 然而,在某些情况下,协议可能永远无法达成共识。 这种可能性比较小,但客观。

比特币共识协议(比特币中的共识)

比特币共识解决的一个问题是某些节点可能是恶意的。 我们假设系统中的大部分节点都是好的,那么如何达成共识呢?

比特币那年发行_sitebitebiren.com 比特币发行_简述比特币发行机制

第一个解决方案是投票。 首先,应该确定哪些区块有投票权。 有些会员有严格的要求。 在这种情况下,基于投票的解决方案是可行的。 但是在比特币系统中创建账户非常容易。 当一个人生成一对公私钥时,其他人无法知道。 只有转了钱,别人才会知道。 所以有些人可以一直开账号,当超过账号总数的一半时,他们就有了控制权。 这被称为女巫攻击(sybil attack)。 所以投票方式不可取。

比特币账户巧妙地解决了这个问题,不再按照账户数量投票,而是按照算力投票。 每个节点可以在本地组装一个候选区块,将自己认为合法的交易放入其中,然后开始尝试各种nonce值(占4字节),看哪个能满足不等式H(block header)≤target要求. 如果节点找到满足要求的随机数,则获得记账权。

所谓记账权,就是将下一个区块写入比特币账本的权利。 只有找到这个nonce,获得记账权的节点才有资格发布下一个区块。 其他节点收到区块后,需要验证区块的有效性。

H(block header)≤target,如果括号中的block header内容不正确,block header中有一个字段叫做nBits field,实际上是target预置值的一个编码,检查value是否设置nBits 字段中的正确满足比特币协议中指定的难度要求

找出这个不等式是否成立。 假设都满足要求,再查看块体中的交易列表,验证每笔交易是否合法:1.必须有合法的签名,2.之前没有花费过。 如果其中一项不符合要求,则该块不能被接受。 如果满足所有条件,则可能不会被接受。

简述比特币发行机制_比特币那年发行_sitebitebiren.com 比特币发行

比特币共识

看上图,如果生成了一个新的区块,你怎么知道新区块插入到哪里呢? 根据生成区块的前一个区块指针(hashPre)。 可能会有问题,看上图,这两笔交易:A转钱给B,A转钱给自己(A')。 这种情况不是双花攻击(double spending attack)。 判断一笔交易是否是双花攻击(double spending attack),就是看区块所在分支上的币有没有被花掉。 如图所示,直到第三个区块比特币那年发行,币还没有花完,所以这两笔交易都是合法的。 虽然交易都是合法的,但是转给自己的交易并不在最长有效链上。 这通常称为分叉攻击。 所以接收到的块应该延伸最长的合法链。

区块链在正常情况下也可能出现分叉:两个节点同时获得记账权。 每个节点在本地组装一个它认为合适的区块,然后尝试各种随机数。 如果两个节点几乎同时找到满足要求的随机数,则它们都可以发布该块。 这时,a 两根等长的叉子。 这两个都是最长的法律链,那么应该接受哪一个呢? 在比特币协议中,默认情况下(默认的意思),每个节点接受它最早收到的那个。 因此,根据不同节点在网络中的位置,有些节点先收到一个新生成的区块,然后再接受这个区块; 一些节点先接收另一个块,然后再接受另一个块。

如何判断一个区块已经收到?比特币协议中使用了隐式委托,如果你沿着这个区块继续

sitebitebiren.com 比特币发行_比特币那年发行_简述比特币发行机制

扩展,即使已发布的块已获批准。 例如,在一个新生成的块之后扩展一个块表示新块被批准。

等长的临时分叉将维持一段时间,直到一个分叉获胜。 即哪条链先产生新区块,哪条链是最长的合法链。 另一个过时的称为孤立块。 这两个新块可以一起绘制。 两个区块链的胜负取决于谁的算力最强,有时也取决于谁的运气好。

竞争记账权的好处:最先获得记账权的节点具有一定的权力,可以决定将哪些交易写入下一个区块。 但这些不应该被设定为争夺记账权的动力,所以比特币巧妙地建立了一个机制:区块奖励。

比特币协议规定,获得记账权的节点可以在发布的区块中进行一项特殊的交易:铸币交易。 本次交易可以获得一定数量的比特币。

这里我们又要回到之前的问题1——谁来决定货币的发行? Coinbase交易是比特币系统发行新比特币的唯一途径,其他交易都是比特币的转移。 本次交易无需注明币种来源。

那么可以铸造多少硬币呢? 当初,比特币刚推出时,每个发布的区块可以产生50BTC(BTC是比特币的符号)。 协议规定,21万个区块后,初始区块奖励减半,变为25BTC。 再过210,000个区块,又会减半。

因此,当一个区块获胜时,另一个无效区块获得的比特币是没有用的,其他诚实区块将不会承认。

比特币系统要达成什么样的共识? 实现去中心化账本共识。

谁来决定账本的内容? 只有获得记账权的节点才能写东西。 如何正确记账? 它是计算能力(采矿)。 根据计算能力,计算能力可以用每秒可以测试多少个nonce值来表示。

那么如何防止女巫攻击呢? 以算力计票,无论创建多少账户,算力都无法增加。

比特币争夺记账权的过程称为挖矿,比特币称为数字黄金,节点争夺记账权称为矿工。