区块链入门的几个基本问题

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

前言

当我们在提到区块链的时候,很多人都知道这是个跟金融,就是跟money有关的东西,与其说区块链,我们常用的词应该是区块链技术,这种说法其实就揭露了其本质——技术。那与区块链相关联的另一个名词又是什么呢?那当然就是大名鼎鼎的比特币(BitCoin)。

比特币

比特币,你可以把它当作是一种电子货币,它的出现绝对不是偶然,然是历史发展的必然。在中本聪的论文(见附件)中对比特币出现的前因后果大致是这么描述的(翻译可能有误)

在物理世界中,货币是由各国的央行发行,这是一个中心化的发行机制,说白了,就是容易受到某个中心化机构的控制
货币的流转
电子货币:可信的第三方(银行、支付宝等)承担着货币的流转
物理货币:人直接把cash交给另一个人
当然,人与人直接交易,流转货币,这种方式方式当然是安全的(除非遇到假钞,这里不讨论这种情况哈)
那么,可信的第三方作为货币流转的中介,这种方式有什么问题吗?我看平时支付宝用的好好的啊。中本聪的论文里是这么讲的:

中心化的第三方,没法完全保证可信
中心化的第三方,所有的交易,用户的余额都存在一个中心化的数据库中,不能完全保证交易的不可更改(因为只有一个人知道,你改了,我找谁说去?)
在人与人交易的过程中,第三方作为中间人,也是需要承担风险的,万一两个交易的人扯皮子,你说我作为担保人是不是得吃闷亏,这样就无形中增加了这种交易的成本,甚至有可能让很多人放弃这种方式的交易
中心化的第三方不是福利机构啊,人家凭什么要给你管账本,要陪你扯皮子呢?还不是由服务费吗?
那么,中本聪就设想,在电子交易的过程中,能不能通过某种方式,把这个第三方给去了,像物理世界中的先进交易那样,用户A直接就把货币打到用户B的钱包里?

于是乎,比特币就这么登上历史的舞台。。。

区块链

看完上面,相信你们对比特币是干嘛用的已经有了一个大致的了解了,中本聪的论文里称比特币是一种点对点的电子现金系统,那么作为与物理世界里的钞票对应的电子现金,需要解决什么问题呢?

货币的发行,首先得像央行发行软妹币一样,有一定的机制去保障这些个货币能被正常的发行出来啊。但是,又不能像央行发行软妹币那样一家说了算,我想发多少就发多少,这样迟早完蛋啊,很多血淋淋的例子我就不多列举了
货币的转移,比特币这种电子现金系统肯定也要有一种机制去保证货币能在用户之间流转吧,并且这种流转也不能再有第三方介入了啊
交易、余额等,我得有一套机制去存人与人之间的产生的交易信息吧,我还要去记录一个人还剩多少钱吧,并且,这个过程也不能让某一个中心化的机构来做
上面说到的这样,可以看成是实现比特币这套电子现金系统中,必须解决的关键性问题,那么怎么解决这些个问题呢?那就是今天的主角——区块链技术发挥作用的地方了。大概的意思就是:区块链是什么比特币这种电子货币,保障比特币发挥作用的底层技术!

区块链大揭秘

抛砖引玉

下面,我们来说一个故事,借此来引出区块链技术的关键问题。

故事一

那是一个晴空万里的早上,始金向往常一样高高兴兴的上班去了,一到公司,成晓就告诉他,老板觉得你很不错,刚刚说要给你升职加薪,始金一听,心想肯定骗我的,就没当回事,不料,过一会盛哥又来了,说了跟成晓一样的话,始金心里开始打鼓了,难道这是真的?没过一会,黎晨也对他说了同样的话,子墨,罕喻也是,这下不得了了,始金开始信了,这不得不信啊,毕竟这么多人都说了,那肯定就是真的啊!

故事二

那是一个晴空万里的早上,始金向往常一样高高兴兴的上班去了,一到公司,马老师就对始金说,公司决定要给你升职加薪,始金立马就信了。

通过上面的两个故事,大家可以看到,要让用户相信一件事,其实可以通过两种方式,一种是故事一中的很多人说这是真的,另一种就是有一个权威的第三方来说这是真的。而区块链技术正式借助故事一的思想来实现对交易的有效性的保障。

总结

这就是区块链技术的最重要的思想——去中心化

当然,这个去中心化,包括两层意思,第一层是货币的发行去中心化;另一层是货币的转移(流转)去中心化。意思就是货币的发行不再由像央行这样的中心化的机构来控制,而是由整个系统来决定,至于决定货币发行的因素,我们后面再谈;与此同时,货币在用户之间的流转也要去中心化,用户直接将货币转给另一个用户,而不需要第三方来记账担保,而是所有参与的用户都来共同担保,大家一起来见证这笔交易,保证交易的有效性。

引人入胜

下面我们就以比特币的在用户之间的转移(交易)为例,来引出区块链的各种神奇的机制。

广播交易信息
区块链入门的几个基本问题

吃瓜群众在收到交易信息后,拿出自己的小本本记下A和B的交易,一旦记录成功,就不可撤销,不可更改

区块链入门的几个基本问题

划重点!!!

吃瓜群众为什么要替别人记账本?由此引出矿工挖矿,这也是比特币的发行机制。也就是说记账的用户,系统会给予它相应的奖励。
这么多吃瓜群众,每个人都拿着小本本来记账,那么到底最后的账本应该采取谁的呢?因此,必须要有一种机制让所有人都能认同最终都记账结果的有效性,这就是比特币采取的共识机制——基于工作量证明的共识机制
各位看官,你们的小本本记好了吗?

继续,在共识机制的保障下,获得最终记账权的群众会向全网广播本次交易的交易信息,其他群众会核对确认这本交易,交易达到6个确认以上就会被记录在案。(什么?为什么是6个?)

吃瓜群众在记录交易信息的时候,会盖上时间戳(Hash值),形成完整的时间链,这个时间戳其实是一种存在证明,表明这笔交易确实真实的发生过
每次经过确认的交易记录都会形成一个区块(Block)
区块与区块之间会通过某个神奇的算法链接起来
区块链入门的几个基本问题

侃侃而谈

好了,通过上面一番操作之后,相信各位看官对比特币啊,区块链啊这些基本的概念,还有一般的流程什么的都有了一个感性上的认识(嗯。我好像知道区块链是什么了!)下面我们来深入的总结一下区块链的关键思想和技术吧!

去中心化

比特币的网络中,没有一个中心化的服务器,整个网络由各种节点组成,共同组成了一个去中心化的网络
货币发行的去中心化,在比特币网络中,货币发行是由"矿工挖矿"这种机制来保障的,而这种机制是一个完全的去中心化的机制
货币的交易流转去中心化,比特币的每一笔交易都是由网络中的所有节点来共同保证其有效性和不可篡改的

开放性

所有比特币用户的交易信息都被记录在一个分布式账本中,这个账本信息对所有用户公开,任何人都可以下载这个账本信息
比特币网络是开放的,任何服务器都可以接入到网络中,也可以下载到全量的账本信息

不可篡改性

每一笔交易信息都被存放在区块之中,每一个新产生的区块都是按照时间(Hash 值)的顺序链接在一起的,时间的不可逆导致任何试图修改区块信息的操作都是可以被追溯的
每一个新产生的区块都应用量哈希算法来进行加密,参与哈希的因子不仅包括本次交易的信息,而且还包括上一个区块的哈希值,这种方式下,如果对某一区块的信息进行修改,需要更改所有区块的信息,造假几乎是不可能的

相关技术

下图是一个真正区块的展示,区块中本次我们重点介绍的几个字段有:

Bits
Nonce
Hash
Previous Block
Merkle Root
区块链入门的几个基本问题

共识机制

http://c.biancheng.net/view/1897.html

区块链技术解决了在一个去中心化网络中进行价值表示和价值传输的问题,而这种分布式的去中心化网络中如何对数据达成一致是一个非常关键的问题。在我们的日常生活中,几乎所有的事情都是达成共识的过程。而这也恰恰是比特币最核心的突破之一,即:如何在去中心化的情况下,对某个交易事件达成一致。

共识机制的两大核心

经济激励:通过每个区块产生一定数量的新的比特币来奖励参与者
引入外部资源确保安全:即通过大量的外部计算来确保共识的安全性,也就是工作量证明(Proof of Work)

达成共识的主要过程(产生新区块的过程)

监听:节点监听全网的交易信息,通过验证的交易会进入节点的内存池
构建:构建一个空的区块,称为候选区块
交易:从内存池中打包交易至候选区块
造头:构造区块头,填写区块头的下述字段
版本号version字段:表示本区块遵守的验证规则
父区块哈希值Previous Block
用merkle树汇总全部的交易,将merkle root的哈希值填写至merkle root字段
时间戳timestamp字段
填写目标值Bits字段
运算:不断调整随机数Nonce,进行Hash计算,使得计算出的Hash值满足一定的要求,即:小于目标Hash。(OR:计算出来的Hash值的二进制表示具有一定数量的前导0)
因为比较二进制数,其实比较的就是前面的0,谁的0多,谁就越小呗
打包:打包区块信息,并对外广播(gossip协议)新区块
验证:其他节点验证通过后,将其链接(Previous Block)至主链(难道还有侧链?嗯。。。)
等待:等待主链后再链接5个新区块(也就是5+1个区块)后,那么区块正式生效,不可篡改。
这种达成共识的过程,我们叫做基于工作量证明的共识机制。这里有几点可以解释一下:

工作量如何理解?

不断调整随机数进行SHA-256运算比拼的是计算机算力,这种依托算力进行的计算是一种工作量
计算Hash值小于目标Hash为什么就可以体现出工作量?
掷骰子掷出的点数<=6,平均需要掷一次,工作量可以量化为1;那么要求掷出的点数<=3呢?平均需要掷2次,工作量翻倍。当目标值很小的时候,想要让计算出的Hash值小于目标值,难道非常大
随着计算机算力的提升,如何控制计算的难度?
256位二进制数构成的目标Hash值,任意改变一个bit,难道难度就翻倍,因此,可以通过调整目标Hash值来调整难度

Hash计算

一般采用的是一次SHA-256运算,计算输出的Hash值是一个256位的二进制数构成,为了表示方便,采用16进制表示,那么就是256/4=64位16进制数
输入的一点点改变,都会引起输出的巨大变化,毫无规律可言

Bits和目标Hash值

Bits与难度是相对应的,它是用一个32位的整数来压缩存储当前256位的目标Hash值。

目标Hash值:0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Bits:0x1D00FFFF
怎么压缩的呢?规则为:

目标Hash值的有效位数 = (64-8)+ 2 = 58 (也就是29个字节),那么Bits字段的最高字节 = 29,16进制表示就是 0x1D
+2是因为目标Hash值的最高位0xFF(1111 1111)> 0x80(1000 0000)
Bits剩下的3个字节,取Hash值的最高3个字节来存储

Merkle Root

在比特币中使用梅克尔树,是为了将交易信息存储在每个区块中。

区块链入门的几个基本问题

用Merkle树来汇总所有的交易信息,并且将汇总得到的Merkle Root放在区块头,这样做的好处是显然的:

所有的交易参与Hash计算,直至汇总到Merkle Root。如果有人篡改了梅克尔树底部的一些数据区块,会导致上一层的哈希指针不匹配,那么他不得不一直篡改上一层的哈希指针,直到数的顶端,而此刻,篡改即将终止,因为我们存储了树根节点的哈希指针,这样就可以防止交易信息被篡改
简化支付验证:将Merkle Root保存在区块头,而不是所有的完整的交易信息,可以实现一个light client,用户只需下载非常小的区块头数据就可以验证一笔交易的真实性
按最长链原则,拉取所有的区块头到本地
计算待验证交易的tx_hash值
找到存有tx_hash的区块头
找到这个区块中的Merkle Tree的一些关键节点,并按构造规则构建一颗Merkle-Tree-Copy
比较Merkle-Tree-Copy的Root和区块中的Root是不是一样
只要我们记住最前面的树根节点的哈希指针,我们就可以根据哈希指针回溯到表中的任意位置
3.1.6 为什么通过验证后还需要等待6个区块
交易被打包进入区块,并且通过验证之后,需要再等待6个区块才会正式生效,主要是为了解决"双花"问题。那么什么是"双花"问题呢?这里,我们整理一下与此相关的几个概念:

51%算力攻击
双花问题
3.1.6.1 51%算力攻击
在基于工作量证明的共识机制当中,网络中的节点比拼计算机算力进行复杂的Hash运算,最先算出结果的那个节点所生成的区块将被全网接受,链接到区块链上,称为新的区块。那么,当某个人或组织掌握了全网51%的算力时,就可以按"随心所欲"的伪造交易。

双花问题

假设小黑有666BTC,他把这些币支付的大白同时,也把这些币发到自己的另一钱包地址上。

最终,发给大白那笔交易先被得到了确认,并打包在区块高度为N的区块内。

这时,控制了超过50%算力的小黑,发起51%算力攻击,他通过重新组装第N个区块,将发给自己那笔交易打包进区块里,并持续在这条链上延展区块,由于算力的优势,这条量将称为合法的最长链。(用户只承认他看到的最长链——最长链原则)

这时,转账给大白的那边交易就被篡改。

如何避免

为了避免双花造成的损失,一般认为,等 6 个区块确认后的比特币交易基本上就不可篡改了。
区块链入门的几个基本问题

一般来说,确认的区块数越多,越安全,交易被篡改的可能性就越低。

想要实现双花,其实就是恶意节点和安全节点相互比拼算力挖矿的过程,当恶意节点形成的恶意链比安全节点形成的可信链长的时候,恶意节点就可以实现双花。这里,做了一个假设,即:假设恶意节点占全网的算力为p,那么安全节点就为q=1-p,在经过第n个区块后,恶意链追上可信链的概率为:

(pq)n ( p q ) n
那么,当可信节点产生了n个区块后,恶意节点产生了多少个区块呢?

在这里,中本聪假设恶意节点产生的区块的个数服从一个泊松分布:

P(X=k)=(λkk!)e−λ P ( X = k ) = ( λ k k ! ) e − λ
这个公式表示:恶意节点产生k个区块的概率为:P(X=k)

因此,我们可以求出,在可信节点产生n个区块后,恶意节点产生区块的期望值。

∑∞k=0(λkk!)e−λ(pq)n−k ∑ k = 0 ∞ ( λ k k ! ) e − λ ( p q ) n − k
对这个数列求和,当N=6,p=10%时sum=0.0002。

表示:当可信节点产生6个区块后,恶意节点产生区块个数的期望值为0.0002

也就是说,在上述假设的条件下,经过6个区块的确认后,恶意节点造假的可能性几乎为0。文章来源地址https://www.toymoban.com/news/detail-406074.html

到了这里,关于区块链入门的几个基本问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 概率论发展史上的几个经典问题

    巴拿赫 Stefan Banach 是 20 世纪初最重要的数学家之一——如果你对流行数学感兴趣,你就会听说过 Banach-Tarski 悖论;如果你做过任何严肃的线性代数,你就会知道巴拿赫空间;如果你读过《破解数学》,你就会从苏格兰咖啡馆的章节中认出他的名字。 很明显,从以他命名的事

    2024年02月06日
    浏览(79)
  • 大学生互联网+商业运营常碰到的几个概念问题

    大学生毕竟不是商场老油条,没有经历过多少社会。很多时候大学生的”互联网+“商业模式中一会这个公司一会那个商品,被不少商业人士不屑。但是我们实事求是地讲,有了总比没有强吧。用比较正式的话来说,互联网+”大赛的意义在于建立了促进学生全面发展的重要平

    2024年02月07日
    浏览(27)
  • 连接贝尔金无线路由器时需要注意的几个常见问题

        一、随着使用无线设备连接无线网的情况越来越多,同时涌现出越来越多的无线网络问题,针对个人设备的网络访问控制、为移动访问建立限制和政策、外界干扰对无线网络的影响、无线网络安全以及移动设备数据监督等。 二、不过好在还可以支持客户部署新的无线网络

    2024年02月05日
    浏览(56)
  • (六)关于Linux中服务器磁盘爆满问题的几个解决思路

    在监控服务器性能的时候,发现服务器的磁盘占用很大,几乎快要爆满,具体的表现可能如下: 1、应用服务访问卡顿甚至失败; 2、数据库访问失败; 3、文件上传失败 等等 通过命令 df -h 查看磁盘占用情况,发现如下: 这里的占用是清除过的,所以并不算特别高。 这种现

    2024年02月04日
    浏览(46)
  • (六)关于Linux中服务器磁盘爆满问题的几个解决方案

    在监控服务器性能的时候,发现服务器的磁盘占用很大,几乎快要爆满,具体的表现可能如下: 1、应用服务访问卡顿甚至失败; 2、数据库访问失败; 3、文件上传失败 等等 通过命令 df -h 查看磁盘占用情况,发现如下: 这里的占用是清除过的,所以并不算特别高。 这种现

    2024年02月10日
    浏览(49)
  • 关于AMC8模拟考试延长到1月19日14点,以及常见的几个新问题

    相信过去的周末两天,很多参加今年AMC8美国数学思维竞赛活动的孩子们都参加了AMC8模拟考试。昨天有家长问六分成长,周末两天因故没能参加要不要紧?如果还想参加怎么办? 不用担心!官方已经把AMC8模拟考试的时间延长到1月19日(星期五)14点了,也就是正式比赛当天下

    2024年01月19日
    浏览(76)
  • 人工智能任务4-读懂YOLOv5模型的几个灵魂拷问问题,深度理解 YOLOv5模型架构

    大家好,我是微学AI,今天给大家介绍一下人工智能任务4-读懂YOLOv5模型的几个灵魂拷问问题,深度理解 YOLOv5模型架构。YOLOv5是一种高效且精确的目标检测模型,由ultralytics团队开发。它采用了轻量级的网络结构,能够在保持高性能的同时降低计算复杂度。模型由三个主要部分

    2024年01月16日
    浏览(44)
  • 对于晶振电路,我们需要从几个方面考虑设计:

    对于晶振电路,我们需要从几个方面考虑设计:  降低寄生电容的不确定性  降低温度的不确定性  减少对其他电路的干扰 设计注意点: 1. 晶振尽量靠近芯片,保证线路尽量短,防止线路过长导致串扰以及寄生电容。 2. 晶振周围打地孔做包地处理。 3. 晶振底部不要走信号线

    2023年04月22日
    浏览(43)
  • IO的几个模型

    说到I/O模型,都会牵扯到同步、异步、阻塞、非阻塞这几个词,以下讲解这几个词的概念。 阻塞和非阻塞 阻塞和非阻塞指的是一直等还是可以去做其他事。 阻塞(一直等水烧开)(blocking): 调用结果返回之前,调用者被挂起(当前线程进入非可执行状态,在这个状态,CPU不

    2024年02月12日
    浏览(42)
  • 赋的几个发展阶段

    赋,起源于战国,形成于汉代,是由楚辞衍化出来的 ,也继承了《诗经》讽刺的传统。关于诗和赋的区别,晋代文学家陆机在《文赋》里曾说: 诗缘情而绮靡,赋体物而浏亮。 也就是说,诗是用来抒发主观感情的,要写得华丽而细腻;赋是用来描绘客观事物的,要写得爽朗而

    2024年02月07日
    浏览(62)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包