03-BTC-协议

这篇具有很好参考价值的文章主要介绍了03-BTC-协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

比特币的共识协议

如何验证交易的合法性,防止双花攻击(double spending attack)

区块内容

数字货币的发行权

分布式共识(distributed consensus)


前言

学习肖臻老师的《区块链技术与应用》公开课笔记,供学习参考。

比特币的共识协议

比特币作为一种数字货币,它和纸质货币的区别就是数字货币是可以被复制的,这种行为叫做双花攻击(double spending attack)。而比特币作为一种去中心化的数字货币需要解决两个问题:

如何验证交易的合法性,防止双花攻击

数字货币的发行权

如何验证交易的合法性,防止双花攻击(double spending attack)

假设用户A获得了铸币权(Createcoin),他发行了10个比特币,即自己获得了10个比特币。然后他将这10个比特币转给B和C,每个人分5个比特币。接下来B给C 2个货币,给D 3个货币。最后C将所得的7个货币全部给E,这些交易构成一个小型的区块链,如下图。

bitcoin 如何避免double-spend attack,区块链注: 在比特币中的每个交易都包含输入和输出两部分,输入部分要说明币的来源,输出部分要给出收款人公钥的哈希值。

在图中的区块链中有两种哈希指针,一种哈希指针是连接各个区块的,将它们串成一个链表;另一种哈希指针用来说明币的来源,证明币的来源的合法性,防范双花攻击。

而图中第二个方框中A向B的转账,就需要A的签名和B的地址也就是B的公钥(比特币系统里收款的地址是通过公钥推算出来),同时所有节点也需要知道A的公钥来验证交易的签名以及交易的来源是同一个人,所以区块链上的每一个节点都需要独立验证。这些验证都通过比特币脚本(BitCoin Script)来实现。

区块内容

在上图中的是被简化过的交易系统,实际上每个区块中都可以有很多的交易,这些交易就组成了Merkle tree,而每个区块的内容如下表

块头 version 比特币的哪个版本的协议
hash of previous block header 区块链当中指向前一个区块的指针
merkle root hash 整颗merkle tree 的根哈希值
target 挖矿的难度目标预值
nonce 随机数
块身 transaction list 交易列表

数字货币的发行权

在区块链中,每个账户都可以发布交易,如果每个账户自己在本地维护一个区块链,那么为了保证区块链的一致性,账本的内容要取得分布式共识(distributed consensus)

分布式共识(distributed consensus)

分布式系统中的两个著名的不可能结论

  • FLP

在一个异步的(asynchronous)系统里,(网络传输迟延没有上限就叫异步系统),即使只有一个成员是有问题的(faulty),也不可能取得共识。

  • CAP Theorem

CAP是指分布式系统的三个我们想要的性质:

Consistency【一致性】

Availability【可用性】

Partition tolerance【分区容忍性】

而该结论是说:任何一个分布式系统,比如分布式哈希表,这三个性质中,最多只能满足两个,假如想要前两个性质,那么就不会得到第三个性质。

分布式共识中的著名协议

  • Paxos

 该协议能够保证一致性,即第一个性质。如果该协议打成了共识,那么这个共识一定是一致的,即每个成员所认为的共识都是相同的。但是,某些情况下,该协议可能永远无法达成共识,这种可能性比较小但是客观存在的。

比特币中的共识协议(consensus in BitCoin)

比特币中要解决的一个问题就是在假设系统中大部分节点是好的的情况下,如何取得共识协议?针对这个问题我们提出了两个方案:

  • 按照账户数目投票

将所有交易写入一个候选区块,然后发给所有结点,大家验证这个区块中的交易是否合法的,然后投赞成和反对票,按一定票比通过后将候选区块写入区块链中。但是这种方法是基于投票权有严格要求的情况,而区块链的账户的创建是非常容易的,这里就出现了一个安全漏洞:

如果有一个人不停的创建了很多个账户,当这个人创建的账户超过了账户总数的一半的时候,这个人就会拥有控制区块链写入的权力,这种情况被称为女巫攻击(sybil attack)。

所以区块链使用的另一种方案:

  • 按照计算力来投票

 区块链中的每个节点都可以在本地组装候选区块,将其认为合法的区块装入,尝试各种nonce值,当nonce满足H(block header)≤target时,就说该节点获得了记账权。

但是区块链的的新区块遵循最长合法链(longest valid chain)原则,就是说生成一个新的区块在区块链的中间位置,就可能出现两个交易如下图,A转账给B,以及A转账给自己。这两个交易都是合法的,但是由于生成新的区块不在最长合法链上,所以不接收该区块,这种情况被称为分叉攻击(forking attack),区块链接收的区块应该是扩展最长合法链。

bitcoin 如何避免double-spend attack,区块链

区块链也可能出现两个节点在差不多同一个时间获得记账权的情况,如果出现这种这种情况,根据比特币协议,每个节点是接受它最早收到的那个。不同节点根据在网络上的位置不同,有的节点先听到新生成的其中一个区块,那就接受这个区块;有些节点先听到另一个区块,那就接受另一个区块。就会沿着新生成的区块后面继续拓展区块,表示该区块得到了认可,获得了记账权。

等长的临时性的分岔会维持一段时间,直到一个分岔胜出。也就是哪一个链抢先一步生成了新的区块,哪一条就是最长合法链。另一个作废的就叫orphan block。这两个新区块有可能会各自拉拢,两个区块链看谁的算力强,有时候也是看谁的运气好,就会胜出。

竞争记账权的好处:首先获得记账权的节点本身有一定的权力,可以决定哪些交易写到下一个区块里。但这些不应该被设定为竞争记账权的动力,所以巧妙地建立了一个机制:区块奖励(block reward)。
比特币协议中规定获得记账权的节点在发布的区块里可以有一个特殊的交易:铸币交易。在这个交易里可以发布一定数量的比特币。

因此比特币争夺记账权 ,也就是争夺货币的发行权,这个过程我们称为挖矿(mining),比特币被称为数字黄金(digital gold),争夺记账权的节点被称为矿工(miner)。

到这里我们也就解决了比特币的两个问题。文章来源地址https://www.toymoban.com/news/detail-786650.html

到了这里,关于03-BTC-协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中如何将String类型转为double类型

    在Java编程中,经常需要在不同数据类型之间进行转换。将String类型转换为double类型是一种常见的转换需求。Java提供了几种方法来实现这种转换,下面将介绍其中的两种常用方法。 方法一:使用Double类的parseDouble方法 Double类是Java中用于表示双精度浮点数的包装类。它提供了一

    2024年02月05日
    浏览(32)
  • java中double转String如何去掉整数结尾的小数位“.0“

    可以使用Java中的DecimalFormat类,设置格式化模式来实现将double转为String,去掉整数结尾的小数位.0。 以下是示例代码:  输出结果为:1234 在格式化模式中,使用“##”表示保留小数点后2位有效数字,如果该数字位不存在,则不会在结果中显示。因此,当double值的小数部分为

    2024年02月13日
    浏览(34)
  • BTC完成史上第四次减半,各路机构对后市行情如何预判?

    北京时间 4 月 20 日,比特币迎来历史上第四次减半,区块奖励将从 6.25 BTC 降至 3.125 BTC。按照当前 65000美元的价格计算,预计减半后每年将减少 100 亿美元的抛压,进而提升 BTC 的价格。 不过,最近一周由于国际形势变化以及减半预期提前消化,BTC 价格迎来大幅回调,一度跌

    2024年04月29日
    浏览(15)
  • 03.动态协议RIP

    动态路由 :所有路由器运行相同的路由协议,彼此之间沟通,交流,最终计算出未知网段的路由信息。 根据范围(AS – 自治系统)进行分类 ​ IGP协议(内部网关协议):应用在AS内部的动态路由协议 ​ OSPF,RIP,IS-IS,EIGRP ​ EGP协议(外部网关协议):应用在AS之间的动态路由协议 ​ BGP —

    2024年02月07日
    浏览(19)
  • Matlab 机器人工具箱中SE3是什么,如何转换成double

    先看如下代码 ML1 = Link([0   0 0     pi/2      0     ],\\\'modified\\\'); ML2 = Link([0 0     1    0     0   ],\\\'modified\\\'); ML3 = Link([0 0     1     0     0     ],\\\'modified\\\'); rob = SerialLink([ML1 ML2 ML3],\\\'name\\\',\\\'modified\\\'); rob.tool=[eye(3),[1;0;0];0 0 0 1]; rob.plot([40,20,30]/180*pi,\\\'scale\\\',0.5,\\\'delay\\\',0.00001

    2024年02月09日
    浏览(43)
  • 03、SECS-I 协议介绍

    上一篇我们学习了 SECS-II 协议,对 SECS-II 协议有了初略的了解,现在我们再来一起学习 SECS-I 协议。 文章的内容基本上来自参考资料和自己看的文档,若有侵权,请联系删除,谢谢。 SECS-I属于传输协议标准,主要定义了电气规格、传输速度、交握码等物理信息。 注意,1、

    2024年02月06日
    浏览(34)
  • GPC-SCP03安全通道协议

    规范全称: GlobalPlatform Technology Secure Channel Protocol \\\'03\\\' Card Specification V2.3 - Amendment D Version 1.1.2 安全通道的建立的标志即通讯双方都形成三个安全通道共享密钥 (Derived Session Key) ,它们是Kmac, Krmac, Kenc(即标准中的 S-MAC,S-RMAC,S-ENC )。 SCP03还是分成两大部分: 第一部分,对S-MAC,

    2024年02月03日
    浏览(34)
  • Kafka如何避免消息丢失?

    为了避免出现消息丢失从而造成巨大的损失,有如下方法可以最大限度避免消息的丢失 在避免出现消息丢失情况出现之前,首先要知道kafka消息发送和接受过程,才能更加清楚的知道消息丢失的原因,从而避免 1、kafka 在producer 端产生消息,调用kafka producer client send方法发送消

    2024年02月03日
    浏览(32)
  • 如何避免钓鱼邮件攻击?

    钓鱼邮件攻击一般通过邮件系统传播恶意程序(木马、蠕虫、病毒等)或钓鱼网站(用于窃取个人信息,比如邮箱密码、银行账号、身份证号等),甚至渗透横纵向移动,感染更多设备,入侵服务器窃取大量数据。 钓鱼邮件攻击方式可通过防范措施有效的避免受害。因此我们

    2024年02月09日
    浏览(29)
  • RabbitMQ如何避免丢失消息

    消息从生产到消费,要经历三个阶段,分别是生产、队列转发与消费,每个环节都可能丢失消息。 以下以RabbitMQ为例,来说明各个阶段会产生的问题以及解决方式。在说明之前,先回顾一下RabbitMQ的一个基本架构图 1. 网络问题 外界环境问题导致:发生网络丢包、网络故障等造

    2024年02月10日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包