探索区块链的原理

更新日期: 2019-06-05 阅读: 2.7k 标签: 区块链

之前经常听别人说,挖矿、比特币、区块链之类的东西,听起来好高大上呀,后来在网上了解相关知识,但是网上大部分都是转载,没一个能讲明白的,后来不知不觉接触到了一些易懂的点,所以今天整合一下,让大家彻彻底底的明白到底什么是区块链、什么是挖矿、什么是比特币。

从头到尾都是小鹿三个小时的手动敲打,因为最近准备面试,写作的时间越来越少,但是我还是喜欢抽时间分享出来给各位读者们,如果你明白了今天的内容,不要忘记转发给你们的朋友哦,我相信他们会感激你能够给他带来那么清晰易懂的文章


什么叫比特币?

比特币其实是一种虚拟的电子货币,它是基于密码学的。

虚拟?电子货币?密码学?还是有点懵懂,好吧,再详细点,比特币与所有的货币不同,它不依靠特定的货币机构发行,而是基于特定的算法产生的,这一点我们接下来会讲到。

比特币的概念是在 2008 年 11 月 1 日有个自称中本聪的人提出的,到现在他的身份还是未知的。它在《白皮书》中提到,这是一种去中心化的电子记账系统。

什么是去中心化?我们现在每个人都有银行卡和支付宝,我们的钱都是由银行和支付宝保存的,因为我们对国家的信任,银行就是相当于中心,我们每个人的存入支出记录都是银行或支付宝给我们记录的。

那么这个中本聪提出的电子记账系统去中心化呢,就是说,我们每个人不需要银行和支付宝的记录,而是公开自己的消费记录,让别人给我们记录,就相当于公开了我们的账本,我们的余额、消费都会被他人所知道。

假如有 A、B、C、D 四个人,A 向 B 支付了 10 个比特币,那么 C 和 D 就会记录 A 向 B 支付了 10 个比特币。然后 B 向 C 支付了  20 个比特币,那么 A 和 D 将会记录到自己的账单,B 向  C 支付了 20 BTC。同样的 C 向 D 支付了 5 个 BTC ,A 和 B 也会记录这个交易。


什么是区块链?

然后我们将记录的账单打包成一个包,这个包叫就叫做「区块」。每个区块大约记录 4000 条数据左右(1兆左右),我们将此区块接到上一个区块上,就形成了一条链,叫做「区块链」。


那么你可能遇到几个问题,第一个问题,每个人都记账,假如 A 支付 给B 的 10 个BTC,然后 B 支付给 C 20 个BTC ,另外记账的人出现网络延迟,一个人记录的是 A 先支付的 B ,而 另外一个人先记录的 B 支付给了 C ,那我们以谁的账单为准呢?

第二个问题,为何记账?假如张三给李四付款,那小鹿凭什么给他记账呢?不但浪费我宝贵的时间,还浪费了我的电脑资源。

第三个问题,假如小鹿给他记账,我背后偷偷的伪造了一条数据,也叫伪造记录,那怎么防止这种问题发生呢?

这里时间有限,只分享前两个问题的解决方案。

我们每个人在记账系统中记账都会有手续费提成的,我帮你记账,支付的人会拿出一小部分作为手续费给记账的人,那么话说回来了,银行存钱取钱还有手续费呢,但是我们的电子记账系统的手续费是非常低的。而且谁最后打包了账本形成区块,还会有打包费用,还有这样的好事,那就可以给他打包赚钱啦。

给你的费用就是比特币,那么给你多少比特币呢?中本聪是这么设计的,每 10 分钟就会打一个包,每四年打包费就会减半。也就是说这个系统刚刚运作的时候,打包费用为 50 个比特币,每过四年,就会减少一半,也就是 25 个, 12.5 个......

那我们来算算一共产生多少比特币,每个小时有 6 个十分钟,一天 24 小时,一年 365 天,前四年是 50 个,每过四年减少一半,通过数学计算:50 x 6 x 24 x 365 x 4 x(1 + 1/2 + (1/2)² + ...)  ,我们可以算出,世界上一共有 2100 万个比特币。

问题来了,打包既有手续费也有打包费,每个人都想干这件事,那么每个人都抢着干,以谁为准呢?


什么是挖矿?

既然都想做,那么我们来设计一到数学题吧,谁先做出来谁就可以打包赚取比特币。如果你说,我数学非常好,拿过奥林匹克竞赛一等奖等等,不好意思,就算著名的数据家高斯也是无法手动解出来的。这道数学题人脑根本是无法算出来的,那么这道数学题难到什么程度呢?

所有的是哈希算法,学过数据结构的都知道,哈希算法正向算是非常容易的,反向算是及其困难的,简直无法想象的难,只能通过 CPU 的运算才能算出来。

这倒数学题正是所用的 SHA256 算法,MD5 加密听说过吧,想必 SHA256 也不陌生。将一个字符串生成 256 位 的二进制。无论大小,都会有 256 位,给你一个 20 G 的视频,也会生成一个 256 位的二进制。所谓的难题就是这个 256 位的二进制对应的字符串是什么?


我们就将解决这道数学题的过程叫做「挖矿」。

那么这个字符串是怎么生成的呢?这字符串的信息是由前区块头的信息+当前账单的信息+账单的时间等各种信息,前边这些是固定的,但是最后一个还要加一个随机数,这是设计的一个难点。

对于这个字符串,进行两次哈希(SHA256)运算,HASH = sha256(sha256(字符串)) ,求出来就是一个256 位的二进制数,我们要求前 n 位是零。加入前几位要求的是 6 个零,如果你算出来是 6 个人零,那么你就算对了。算对了就可以进行打包,将你算出来的哈希值作为新块的头部接入上一个区块中,然后你就获得了想要的奖励。


有小伙伴就要问了,怎么求出规定的前几位是 0 呢?那么我们要改变一个数,那就是字符串中的随机数,因为其他的内容是固定不变的,如果我们想通过 HASH 求出这个哈希值,只能一个一个的数去试,将 1 带入看哈希值是否满足条件,如果不满足,然后依次将 2 、3、4、5...... 直到有人试出来为止,将此区块打包,求出来的字符串作为此区块的头部,接入上一个区块。


每个人对应的随机数是不一样的,所以说要想挖到矿,一个是看你的运气,另一个是看你的 CPU 每秒计算的速度。有人运气好,虽然计算能力不够,第一个数就试出来了,有人运气不好,CPU 计算能力再强,也白搭。平均来讲,还是看 CPU 的计算能力,算出来的希望就会大一些。所以很多人都去拼命的买矿机,来进行 24 小时挖矿。


来自:一个不甘平凡的码农(微信号:Web_Coding)
作者:不甘平凡的码农  


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/3564

相关推荐

以太坊发展简史

在 以太坊在Serenity (ETH 2.0) 阶段来临之前经历的升级和硬分叉。通过本文将了解到升级或分叉发生的时间,加入那哪些特性。时至今日当我们鸟瞰区块链技术的发展,它仍旧算得上是一个新事物。

区块链开发中使用的最流行的编程语言

我们目前正处于一个新兴的区块链开发行业中。区块链技术处于初期阶段,然而这种颠覆性技术已经成功地风靡全球,并且最近经历了一场与众不同的繁荣。由于许多资金充足的项目现在急于建立区块链网络并在其上部署分散的应用程序

200行JS代码实现超级简单的区块链,带你入门区块链

本文通过JavaScript源码实现一个简单的区块链框架,带你入门区块链的相关知识。区块链的基本概念非常简单:一个分布式数据库维持不断增长的有序记录列表。

从概念到底层技术,一文看懂区块链架构设计(附知识图谱)

区块链作为一种架构设计的实现,与基础语言或平台等差别较大。区块链是加密货币背后的技术,是当下与VR虚拟现实等比肩的热门技术之一,本身不是新技术,类似Ajax,可以说它是一种技术架构,所以我们从架构设计的角度谈谈区块链的技术实现。

区块链开发的11种顶级编程语言

区块链是一种去中心化,安全且非常快速的技术,已经在商业世界引起轰动。随着大量的区块链项目正在开发和部署在互联网上,区块链开始走向世界。已经有一些公司试图在其他人的基础上发展。

区块链的六大层级结构

众所周知, 区块链 是 比特币 的底层技术,那么这个底层技术又是怎么分层级结构的呢?在前面我们介绍了区块链的四大核心技术是其独特的数据结构、分布式存储、密码学和共识机制。今天我们就来聊聊区块链结构的六个层级结构

DAG:区块链行业下一个引爆点?

DAG是Directed Acyclic Graph的缩写,是一种运用拓扑排序的直接图像数据结构。这种数据结构能够在数据压缩中找到最优解,因此在实际中被广泛地运用于数据处理等领域

用JavaScript写一个区块链

几乎每个人都听说过像比特币和以太币这样的加密货币,但是只有极少数人懂得隐藏在它们背后的技术。在这篇博客中,我将会用JavaScript来创建一个简单的区块链来演示它们的内部究竟是如何工作的

使用javascript实现小型区块链

区块链概念狭义:区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码方式保证的不可篡改和不可伪造的分布式账本。

什么是挖矿?

区块链中经常会听到挖矿这个名词,因为它和现实中的挖矿不一样,所以很多人对这个词很费解。为什么那么多人去挖矿呢?因为挖矿成功后会有奖励。为什么挖矿需要大量的矿机呢?因为有大量的哈希计算。这个计算的过程就被称为挖矿

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!