区块链技术核心概念与原理讲解-Tiny熊
转载自简书ceido:https://www.jianshu.com/u/fcdf49ef65bb
(1)区块链前世今生
密码朋克(Cypherpunk):是一个邮件组,里面有许多大牛。
区块链不是单一的技术,而是一系列技术的集合。
简单的提一下为什么叫区块链:因为比特币系统里的数据是用一个个区块存储的,然后通过hash的方式将一个一个区块连接,形成一个区块的链条,所以叫做区块链。
(2)区块链前景:
1. 应用场景:
- 资产:数字资产发行、支付(跨境支付)、交易、结算
- 记账:股权交易、供应链金融、商业积分
- 不可篡改:溯源、众筹、医疗证明、存在性证明
- 点对点:共享经济、物联网
- 隐私:匿名交易
2. 人才缺口巨大
(3)比特币是什么
比特币是数字货币。
货币的定义:凯恩斯《货币论》中讲到:货币是可以承载价值的一般等价物。
历史上的货币:贵金属、银票、法币等
贵金属作为货币因为本身带有价值。银票与法币就实物而言,它们本身是一张纸,没有太大的价值。因为有国家背书,它的价值来源于法律效力与人们约定而成的信任。
同样的,进一步想想,一串数字可以作为货币吗?当人们给予其一定的信任,使其产生了价值,就像当做一颗宝石一样认可它。那么一串数字也可以作为货币,我们称这样的货币为数字货币,也叫虚拟货币。
比特币就是这样一种数字货币。那么问题来了,比特币的信任是从何而来的呢,它为什么值钱?
1.财产只受自己控制:
在现实生活中,财产除了受自己控制外,还受银行的控制,比如银行认为你的财产来路不明,可以冻结你的财产。但是在比特币系统里,你的比特币只受你的私钥控制。
2.无通胀
不会因为银行发行更多的钞票而贬值。举个例子:比如你现在有100元,而全世界的总资产为1000元。那你是相当有钱了。但是如果央行再发行个1000元,那你的100元相当于贬值了一半(物以稀为贵嘛)。
而比特币的总量是固定的:2100万。比特币不依靠特定货币机构发行,它依据特定算法,通过大量的计算产生。去中心化特性与算法本身可以确保无法通过大量制造比特币来人为操控币值。
3.没有假钞
任何作弊的支付,都无法得到比特币网络中其他矿工的确认。这样就无法完成支付。
4.流通性
比特币是点到点的直接到账,免去了许多中间环节。
(4)去中心化
刚才说到比特币是一种数字货币,同时也是一个去中心化记账系统。要想了解去中心化,首先先看看中心化是怎样的:
在中心化的系统里,通常有个中央的服务器,来存储所有的数据,可以理解为就是一个数据库。
而去中心化的系统,数据不再是存储在一个服务器,而是存储于比特币网络的每一个节点里。
如果把每一个节点比作一个电脑的话,记账的数据会存储在每一个人的电脑里面。
那么会引发一些问题,如果两天电脑的记账数据不一致,那么将以谁的为准呢?这就涉及到比特币的原理,原理部分包含4个小节:
(5)比特币原理
1.账本如何验证?
比如现在有这么一个账本,张三想搞点小手段,偷偷的把自己余额改为了300:
那么网络中就会出现一些假数据,如何确认张三修改了数据是假的数据呢?这就是比特币账本如何验证的问题。
这也是一个方法,但是如果每次验证都与千百万量的账本数据核对,这个效率是非常低下,实际上是不可行的。
那么比特币的做法是怎样的呢?首先我们要先了解一下Hash函数:
大家做开发的时候,对MD5都很熟悉了,MD5就是一个Hash函数。MD5可以用于校验下载文件是否出错:如果文件的数据有错误,那么文件的hash值就会和网站提供的正确的hash值不一样。这样就可以确定我们下载的文件是否出错。
同样的道理可以用在比特币账本校验中,对一个账本hash之后,就可以得到一个hash值,用这个hash值代替账本原始数据来对比,这样效率会高很多。
这样的hash值与其他数据保存下来,就形成了一个区块(也叫打包、记账、挖矿):
而且我们将序号、时间戳、Hash值称为区块的头部。
假如这时候来了第二个账本:
注意:在对第二个账本进行Hash时,会传入第一个账本的Hash值,和第二个账本的原始数据一起进行Hash(就是通过这种方式将块与块相连接!)。如果hash值结果是正确的,就说明传入的hash值也是正确的。这样再将第二个账本的hash传入第三个账本,这样一直传递下去,产生第四个块,第五个块,第N个块...:
通过这样的方式将区块连接起来,就形成了区块链。每个节点核对信息的时候,只需要核对最后一个区块的信息是否正确,如果最后一个区块的hash是正确的话,那么说明整个区块链的账本都是正确的,由此完成高效的验证。
2.账户所有权问题?
怎么确定一个比特币是属于谁的?首先还是看看现实中操作:平时我们在刷卡的时候,会需要两样东西:银行卡和银行卡密码。如果银行卡与密码与系统存储的结果对上了,就可以消费了。如果你的银行卡和密码都给盗了,盗贼使用你的卡进行消费。我们还可以通过银行和警察叔叔的协助,确定是盗贼使用了你的卡。
但是在比特币系统中:交易是点对点的,没有银行等第三方。
在比特币系统中,比特币账户是一个地址,谁能用这个地址进行交易,谁就拥有这个账户的所有权。
注意:地址和私钥是非对称的关系,私钥经过一系列Hash运算后得到地址。
由上可知,私钥和账户有着绝对确定的直接对应关系,而不能像银行卡那样再修改密码了。谁拥有了私钥,就相当于谁就拥有了这个账户,谁就可以用这个地址进行交易。所以私钥超重要,如果私钥泄露了,比特币就可能丢失。
所以所有权的问题就变成了在不泄露私钥的情况下,证明自己拥有某个地址的私钥。(也就是验证私钥的正确性就行了)。
(这里我是这样理解的:要想证明自己拥有私钥,就要得到别人的验证,一种方法就是:你直接把密码告诉别人,就好像你把银行密码直接告诉别人,然后说:“你看吧,这个是正确的密码,不信你输入看看,可以取款的,没骗你吧。”
当然,这是傻子才会做的事。有没有不告诉别人密码,然后又可以验证的方法呢?)
这里就用到了非对称加密技术(交易签名)。
- 交易进行hash得到交易摘要
- 用私钥对摘要进行签名
签名过程:
首先是对原始交易信息进行hash,生成交易摘要,然后再用交易摘要和私钥进行一个签名运算。
在签名运算之后,该节点会在整个网络进行广播:广播内容为原始的交易信息(包含付款方地址)和签名信息。
而接收到的节点又会以同样的方法进行广播,以致传递到所有节点(就像洪泛法??)
验证过程:
用签名和付款方的地址进行一个验证的运算,如果结果是原始交易信息的摘要(hash值),那么说明这笔交易就是私钥所有者发出的,验证通过。这时候就会把交易的信息写入到账本。然后再次进行广播
可以看出,签名和验证是个相反的运算,签名是个加密的过程,验证是个解密的过程。我发现,原来这个付款方地址就是公钥嘛!!(视频后面也说了)这样就不用把私钥告诉别人,而是用公钥就可以验证私钥的正确性了。
签名运算
交易摘要 + 私钥 ===> 签名
验证运算
签名 + 付款方地址 ===> 交易摘要
视频后面补充了:关于隐私和安全,不打出来了。
3.为什么记账(挖矿)?
记账:Hash打包过程。在比特币的设计中,完成记账是可以获得一定比特币奖励的,所以大家将记账形象的叫做——挖矿,这个奖励其实就是比特币发行的过程。
规则:
- 一段时间内只有一人可以记账成功(10分钟)
- 通过解决密码学难题(即工作量证明)来竞争获得唯一的记账权
- 其他节点只能复制记账结果了
之前说到,记账过程就是如下:
如果只是这样的运算,那么每个人都可以轻松完成,而要保证一段时间内只能有一个人记账成功,就必须要故意大大提高计算的难度。
比特币规定这个计算结果要满足以若干个0开头的要求。
这时在计算hash时,就要引入一个随机数变量,不断的去改变随机数,每个都可以得到一个新的hash值,直到找一个符合以若干个0开头的hash值。我们现在的电脑要找出4个0开头的hash,一般需要1、2分钟的时间。
比特币因为现在很多人参与挖矿,算力很强大,所以将挖矿的难度设为以18个0开头。第一找到这个hash的,就可以获得交易记录集,这个交易记录集就可以这样用:
- 收集广播中还没有被记录账本的交易
- 交易的有效性验证
- 添加一笔给自己转账的交易(挖矿奖励)
这个交易记录集可以理解为通关奖励的宝箱,当然我们要的就是后面那个啦。
18个0的计算量是非常巨大的,要非常强大的设备与消耗巨大的电力(之前听说一些矿工跑到贵州等电费较低的地区挖矿,原来是这个原因,感觉这种故意要消耗巨大算力的设定很浪费啊,最终只有一人能挖到矿。机器没日没夜的跑,其他没能挖到的所有的投入都白费了,陪跑一样)。
所以现在已经没有独立的矿工进行挖矿了,因为几十年也可能挖不出一个。
而且随着越来越多的人投入挖矿,那么计算难度必然又将加大。成本也将越来越高。最终这样作用下去,成本甚至是接近收益的。
4.共识机制(这里听得不太清楚,有时间再补充了)
如果两个节点同时完成工作量证明,使用谁的区块?无仲裁机构裁决,而且都说用我的区块。
为什么要遵守协议:节点工作量只有在其他的节点认同其是有效的。