主页 > imtoken钱包下载安卓教程 > 《区块链技术与应用》——共识协议

《区块链技术与应用》——共识协议

imtoken钱包下载安卓教程 2023-01-26 06:37:33

一、数字货币在实际使用中面临的问题

央行如何发行法定货币支持的纸币?

造币厂印有中央银行设计的各种防伪标志的货币。 当你买东西的时候,你把钞票给商家,换取商店。 如果你把纸币给别人,你就会失去它。

中央银行也可以发行数字货币

那么数字货币可以使用防伪标识吗? 例如,央行发行的数字货币由央行私钥签名,公钥公开,采用密码学的非对称加密体系。 当你买东西的时候,你把数字货币给别人,别人用央行的公钥来验证它确实是央行发行的。 所以有什么问题?

说白了,数字货币就是一个文件。 公私钥加密体系可以保证数字货币不可篡改。 比如100元不能改成200元,但是可以复制。 已验证以便交易可以继续。 这暴露了数字货币实际使用中的第一个问题,双花攻击(double spending attack)

如何解决?

1.1. 中心化解决方案——双重攻击

谁发币:第三方机构——央行发行数字货币

如何防止双花攻击:现在让我们改进它。 中央银行发行数字货币,每一种货币都有一个编号。 中央银行维护数据库,这是一个大表,记录每个数字货币的所有者。 每笔交易都必须向中央银行报告。 本方案为集中式方案。 每一笔交易都必须经过央行的确认,证明其合法性。这个方案在实际应用中也可以使用,也可以防止双重攻击,但是太麻烦了。 每笔交易都需要经过中央银行的验证。 这是集中解决方案

缺点:虽然集中式方案在实际应用中是可行的,但缺点是过于麻烦。 每笔交易都需要去央行验证货币的合法性和交易的合法性,这显然是不现实的。

那么能否将央行的职能下放给公众,去中心化呢?

1.2. 去中心化解决方案——双花攻击

去中心化方案不需要第三方中央银行维护交易信息,也不需要去中央银行发行货币和验证交易的合法性。 所有用户维护和维护交易信息。 这是一个去中心化的解决方案。

比特币系统是为了解决数字货币的去中心化,同时也需要解决两个问题

谁发行货币,在比特币系统中,发行货币的权利是通过挖矿获得的,后面会解释。

下面说说如何防止双花攻击双花攻击?

示例:下图显示了一个小型区块链

比如有一个用户A,他有发行货币的权利比特币区块体中包含什么,这个叫做铸币权CreateCoin,挖矿叫做铸币交易

区块链和比特币的关系_比特币的区块是什么意思_比特币区块体中包含什么

这个地方使用了两种哈希指针。 第一个是通过跳转两个链表来显示交易的方向,另一个是显示货币的来源以防止双花攻击。 如果验证币种来源的哈希指针未被确认,则交易是非法的,不会被接收到区块链中。 比如在B->F的交易中,只验证B的签名是合法的,但是验证币的来源是非法的,因为B的2个币已经交易给了C,从而解决了Double Spending attack。

比特币区块体中包含什么_比特币的区块是什么意思_区块链和比特币的关系

1.3. 在交易中,你需要了解对方的哪些信息

例如,在A向B转账的交易中,A需要了解B的哪些信息?

那么 B 需要知道关于 A 的哪些信息呢?

比特币系统中的验证过程是通过验证脚本实现的。 每笔交易的输入都是一个脚本,包括给定的公钥也在输入脚本中指定。 每笔交易 tx 的输出也是一个脚本。

验证交易是否合法,需要结合本次交易的输入脚本和之前验证币源的输出脚本,然后看能否顺利执行,能不能合法就是合法的执行(稍后解释)。

上图中的每个区块都包含一个交易。 在真实的交易系统中,一个区块会包含很多交易,这些交易被组织成一个merkletree

1.4. 比特币区块信息

每个区块由blockheader和blockbody两部分组成

比特币区块体中包含什么_比特币的区块是什么意思_区块链和比特币的关系

只有标头由散列指针连接。

比特币区块体中包含什么_比特币的区块是什么意思_区块链和比特币的关系

区块体包含所有交易列表(transaction list)

思考:是不是每个节点都需要验证所有的交易? 在实践中,系统中的节点分为全节点和轻节点

2. 分布式共识协议

每个节点和每个账户都可以发布交易。 有些交易是合法的,有些交易是非法的,那么谁来决定哪些交易写入区块链,顺序如何决定呢?

每个节点独立决定好不好?

显然不是,因为区块链是一个节点,所有节点都在本地维护同一个账本。 如果账本内容不一致,谁来听? 此时,所有节点都必须遵守一定的约定,以保证账本内容的一致性。

2.1. 分布式共识

每个节点无法独立完成区块链的构建,每个节点都必须独立打包交易形成区块链,这不可避免地避免了区块链内容的不一致。 从分布式系统的角度来看,账本的内容需要获得分布式共识,以保证区块链内容在不同节点上的一致性。

分布式共识的一个相对简单的例子是分布式哈希表

分布式系统理论研究

2.2. 比特币的共识

比特币系统的共识协议首先要解决的问题是部分节点是恶意的,但大多数节点是好的。 在这种情况下如何设计共识协议。

第一种选择是数字投票:一个节点将交易打包成一个区块发送给其他节点,其他节点检查候选区块比特币区块体中包含什么,如果投票正确,如果票数超过一半则加入区块链。

Q1:恶意节点不断打包非法区块,导致无法达成共识。

Q2:没有强制投票方式,部分节点不投票。

Q3:网络延迟提前未知,投票时间未知。

Q4:任何人都可以加入比特币系统,创建账户非常简单。 它只需要在本地生成一对公私密钥。 只有在转账(交易)时,比特币系统才能知道账户的存在。 这样,黑客就可以利用计算机专门生成大量的公私钥对,当他们生成的大量公私钥对超过系统数量的一半时,就可以获得支配权(Sybil attack )

第二种算力投票:在比特币系统中,投票是基于算力的。

在比特币系统中,每个节点都可以自己组装一个候选区块,然后尝试各种nonce值,这就是挖矿。 当节点找到满足要求的nonce,即Hash(block header)