干货|区块链技术入门——比特币运行及交易原理剖析(分享实录)

image

我一直从事服务端的开发工做,对各类计算机技术都有比较浓厚的兴趣,从去年五六月份开始接触区块链技术,感受和互联网以及传统软件开发相比,区块链有一些新的东西,甚至是一些颠覆性的创新,虽然技术方面仍是基于现有的技术,但其应用和设计思想简直是脑洞大开。node

1

特  性

区块链技术从比特币开始到如今已经存在了九年多将近十年,为何这两年开始特别火,几乎全部人都知道了,由于春节的时候被一些大V和VC着重炒了一把,怎么创新、怎么投资等等,将区块链推向了风口,你们开始疯狂地关注。算法

区块链到底有什么颠覆性的特色呢?编程

image

去中心化安全

它理论上是彻底去中心化的,意思是说不像传统行业那样有一个本身的服务器和数据中心,数据、权限、帐户、余额也都集中在一个中心手里。比特币是彻底去中心化的。服务器

无需信任微信

你不须要对上面的任何节点,好比谁支付给你了,你支付给谁了,你不须要对他们有任何的信任,不须要彻底信任他们,也不须要认识他们,也没有人给你作担保,全部的交易过程都是经过密码学的技术去担保的,只须要信任这个技术。网络

匿名框架

好比去银行开户,确定须要身份证、实名制等,一查就能知道你的信用记录和资产状况。可是比特币帐号是你本身申请的,只有你有,别人根本查不到你,除非你去交易所进行交易和银行帐户关联了,那就另说了。区块链

2

比特币发展简史

在前几年提及区块链就约等因而比特币,如今由于应用多了,推的也比较多了,各类各样的智能合约和新的链出来,咱们要想链接,就要了解区块链这个技术自己是怎么运行的,怎么去保障里面每一个块之间的内容是可信的。由于比特币是第一个成功的,也是运行时间最长、影响力最大的区块链应用,因此咱们经过研究比特币来理解区块链。编码

大概简单介绍一下比特币的发展简史。

image

  • 2008年12月,一个叫中本聪的人发表了一篇论文《比特币——一种点对点的现金系统》。

  • 2009年1月,中本聪挖出了第一个区块,就是创世区块,这个区块产生了50个比特币。

  • 2010年5月22日,产生了第一笔交易,一个技术狂热者花了一万比特币去买了一个披萨,真正地将比特币和实物关联起来,比特币在这一天真正地有了价值。

  • 后来比特币经历了不少次分叉、升级和bug修复。

3

区块链·比特币

image

区块链是一个全球化的网络,全球任何一个节点均可以加入进来,并且是无中心的,这正是P2P网络的一个特性。P2P网络虽然可能没有作过相关的开发,但你们应该都用过其中的技术,好比迅雷下载,这就是P2P网络,好比我发一个种子,广播出去以后你们可以根据一个相似哈希值搜到我广播的东西,而后你们就能传播出去,而后就有五我的从我这儿下载,再发出去以后又有其余人从咱们六我的这儿下载,就是这样一点点传播出去的。

区块链就是创建在这样一种P2P网络的基础上,经过一些共识机制来保证无中心的区块链能产生一些共同的你们都认定的标准,好比谁去写这个块、谁去作交易、交易怎么进行等等,而后有人作完一件事以后,你们用相同的标准去验收,若是是合格的,就继续进行,若是是不合格的或者是错的,就把它扔掉。

P2P网络+共识机制,基本上就已经构成区块链的框架了,可光有框子仍是没有任何价值的,它须要承载一些东西。比特币其实就是在里面存了一个数,而后数转来转去,至关于就是一种货币,再加上帐号余额系统和交易策略,才组成比特币系统。

4

比特币区块

image

如图所示是比特币的一个区块,后一个区块在前一个区块的基础上,把固定的几个值经过哈希算出来,存在如今这个区块里,做为区块头的一部分,后面的区块也会这样作。

哈希你们应该都有了解,一个完美的哈希算法应该有三个特性:

  • 无论是在任何各个地方、任何计算机只要用同一个算法,相同的内容,确定获得一样的结果。

  • 不相同的内容,尽可能别获得一样的结果,也就是哈希碰撞越低越好。

  • 不能经过获得的结果反推出原来的值。

上图中只列出了四个东西,实际上是比这四个东西多一些,咱们只须要关注这四部分就能够:哈希值、时间戳、随机数和默克尔树。

前一个块的这四个值的哈希值加一个时间戳(就是当前你挖这个块的时间,固然它容许必定的晃动范围),还有一个随机的数,由于其余几个值,好比前一块的哈希值、时间戳变化的范围比较小,我若是作一些工做量的任务,须要去向别人证实个人工做量的话,要经过不停地改这个随机数去算这个哈希。

比特币每一个块里都有交易,它会把每一个块里的全部交易组成一个默克尔树。默克尔树是怎样的呢?它如今也是用的哈希值,就是把交易按照必定顺序排列出来,第一个节点和第二个节点算一个哈希,而后往上,这两个节点往上的算一个父节点,如上图右边,就是两个交易的哈希再哈希。这样一层层一直往上算,就是一个平衡二叉树。

全部的区块,第一个区块确定是创世块,创世块在全部矿机节点或钱包节点里是原生自带的,不会在网络上传播,后面的全部块都是经过创世块的哈希值一块块连起来的。每一个块里除了这四个值以外,还有块的高度,以及工做量证实的难度等。

5

共识机制

image

什么是共识机制?之前咱们作的任何系统历来没有说过有什么共识机制,由于都是中心化的系统,什么时间谁来写入已经提早定好了,不会说为了公平去选什么节点之类的。共识机制其实就是整个网络约定好了,咱们按什么样的东西去证实,谁有能力去出下一个块,以及如何验收这个块是正确的,不是谁有权限就能够随便更改块的大小,还有包括奖励等等,还有难度系数等你们普遍承认的标准的。

在区块链里,共识机制首先就是得选出谁有权利去记这个帐。比特币里用的是比较粗暴的方式,就是块头里有一个难度,你经过不断修改随机数去算这几个数字的哈希值,求得的值比要求的难度数要小,就证实你能够有权利记帐。

并且就算你拿到了记帐的权利,也不能随意改变块的大小,每一个块的大小和奖励都是有标准的。这个块的大小在如今的共识机制里是1M,在最初的时候中本聪没有限制块的大小,后来有不少人频繁地在网络中作一些额度特别小的交易,至关于把块搞得很大,网络都撑不住了,后来中本聪就调整了一下块的大小为1M。到如今为止,整个比特币若是把全部节点都down下来的话,有100多G,在当时估计整个网络能承受的数据也基本就是这个量级了。

算哈希值的过程就是一个暴力的破解数学难题的过程,至关于扔色子,随机扔,假若有一个一万面的色子,每一个机器十分钟能扔一次,只要谁扔到那个点小于等于10,就有权利记帐。那是否是扔的人越多,出来这个块就越容易呢?若是不限制难度,永远是10的话,真的有10万个机器,就一分钟出一个块,网络就可能会产生不少冲突,甚至会瘫痪。这种状况就须要调整个难度,让色子的值小于等于一便可。

因此为了整个网络的稳定,好比如今规定是十分钟出一个块,每两周,也就是每2016个块以后会调整难度。其实就是拿前2016块的时间平均起来和10分钟相比,若是这个平均时间大于10分钟的话就调小难度,若是时间小于10分钟就调高难度。这个难度也会做为别人验证所挖出区块是否合法的一个条件,也就是说若是一个块广播到网络中,可是别人认为难度没有达到共识机制中的那个难度,就会直接把这个块扔掉,不会在这个块的后面进行记帐工做。

为了鼓励你们积极挖矿,也为了创造比特币,挖出块以后会有必定的奖励,初始奖励是50个比特币,就是每挖一个块产生50个比特币,它用程序和算法来限制,每21万个块,奖励会在原来的比特币基础上减半,这是一个求极限的问题,很容易算出来极限就是2100万个比特币,大概在2040年左右剩下最小单位不能除以2了,这时就不会再去奖励了。

6

挖  矿

image

比特币里把挖块的行为叫挖矿,挖矿的机器就矿机,挖矿的节点叫矿工。为何那么多人喜欢挖矿?前面提到了,其实就是为了获得CoinBase,就是出块奖励,以及打包块的交易产生的手续费。

挖矿是怎么开始的呢?矿机会收集网上的交易,验证交易是否合法,而后把交易放到内存里,有一个未成交交易集,这时候你收到一个新的块,其实你此时正在上一个块的基础上挖,收到新块说明你在此轮的竞猜中已经输了,最优的策略是马上在这个新块的基础上挖下一个块,因而就从内存交易集里选择手续费最高的一部分按照大小要求打包成一个1M的块,而后进行计算,经过不断修改随机数,力求算出一个小于当前给出的难度数的值,暴力破解这个数学难题,若是成功了,就能够拿到打包交易的权利,成功挖出一个块,而后经过P2P网络广播出去,让其它节点验收。

挖矿以前用的是CPU,可是由于这些CPU一直在占用率近乎100%地运算sha256,须要耗费不少电费,成本愈来愈高,因而你们开始使用GPU,后来发现GPU速度不够,就换成FGPA,就是一种可编程的通用芯片,到最后使用ASIC,其实就是一种专用芯片,只会算sha256算法,这种状况就至关于把sha256算法的代码用各类语言写成算法,作成硬件,这是最省电的,并且为了利益最大化,矿机会集中部署在电费成本比较低的地区,由管理公司统一管理,造成所谓的矿池。

矿机其实就是一个主机,有一个操做系统,里面是一个完整的节点,每台矿机经过USB或者其余接口连着不少矿机,这样最省电,前段时间各类媒体说几乎百分之七八十的算力都在中国,形成了大量的能源浪费等,其实这其中各有利弊。好比中国对外售出矿机,能带动中国经济的发展,但这种算力浪费会致使能源浪费和环境破坏是其弊端。

就其对于比特币自己而言,这种挖矿硬件是有好处的,比特币一开始发明的时候想用通用的硬件让你们去挖,后来你们发现用专用的硬件去挖对比特币的稳定性更有好处。若是通用硬件的话,忽然有一天来了一个经济收益更好的币你们可能就都去挖那个了,而专用硬件是只能挖比特币的。

7

分  叉

image

比特币是在一个全球化的P2P网络上,节点之间确定会有延迟,这么多节点可能就会出现两个节点同时挖一个块的现象,就会产生冲突,比特币的共识机制里并无写清楚冲突要怎么解决,一旦发生这样的状况只能是你们以为那个是好的就去跟随他,在他后面继续挖矿,正常的矿机都会选择在最长的链后面继续,这是一个博弈的过程。好比我支付给谁一个比特币,可能被一个矿机马上就打包到区块里了,但我不能马上把这个东西给他,由于若是出现一个增加更快的分叉链,可能会把这个链干掉,这个交易就会被废弃而失败。广泛认为是在六个区块以后,这个交易就算基本稳定了,正常状况下六七个区块打包完成后被推翻的几率就很小了。

分叉分为软分叉和硬分叉。

硬分叉就是我把共识机制改了,重新的节点开始我认你以前的那些节点,可是以前的那些矿机并不认我这个新的共识机制,由于你们都互不相认,这种状况就至关于在某个节点以后,全部节点基于新的共识机制和旧的共识机制,分道扬镳,产生了一个分叉。

软分叉是共识机制没有变,通常用途是在硬分叉以前,改一个微小的东西不影响共识的操做,让矿机投票,要不要去硬分叉,用哪一种方式去分叉等,矿机以为哪一个好,挖矿时就把操做符改为对应的那个值就好了,而后到某个块的高度以后,再根据你们投票的结果,看到底要不要硬分叉,这是经过软分叉的操做位来实现的。

恶意分叉最多的可能就是双花攻击。新币种就是刚才说的那种,用一个新的共识机制,在比特币上拉一个新的币种。这些对比特币都是有损害的。

8

钱  包

下面开始讲比特币交易,交易的话就要有钱包和帐号了,一个帐号怎么来的,比特币里其实并无帐号的概念,钱包多是一个彻底节点,也多是一个轻量级钱包。

image

首先用钱包生成一个私钥,这个私钥其实就是一个很大的随机数,比特币也不会去验证你的私钥别人用没用,它的理论是认为这个碰撞是没有的,这也是比特币安全的一个基础。

这个私钥经过非对称加密算法,算出公钥,在公钥的基础上通过两次不同的哈希算法,算出一个公钥哈希值,再经过一个Base58Check编码,就是一个你们好比容易读的字符串,这才是一个比特币地址

因为私钥不存在于区块链上,并且花钱时须要用它签名,若是你把它丢了,相对应地址里的钱就永远花不掉了。

9

UTXO

比特币是怎么在这个区块里产生的?由于这是交易的基础。它的产生只有一个途径,就是挖矿对矿工的奖励。

image

块的交易里有一个特殊的交易叫CoinBase交易,就是只有输出没有输入,输出的地址就是矿机的地址。可是并无一个帐号去存比特币的余额,帐号的余额存在什么地方呢?就存在以前全部的把这个地址做为输出的那些交易里,其中没有花费的交易的金额合计就是这个地址的余额。

可能有人会问这个值算起来容易吗?其实从0开始算的话确定是难的,可是由于全部的矿机都是从第一个区块开始一点点算出来的,因此每一个块会把每一个块的交易,还有用户的交易,以及花费的未花费的交易都放在节点内存或硬盘里,一直累计到如今这个块的时候,就能知道这个帐号有哪些交易未花费,并很快就能查出来余额是多少。比特币这种余额系统有个专有名词叫“未花费交易输出”,英文简称:UTXO

在比特币交易中,一个交易能够有多个输入,也能够有多个输出。全部交易的输入都指向以前把这个地址做为输出的交易,并且它限制了每一个交易只能被花费一次。好比我以前有一个未花费的交易输出,额度比较大,此次要把它作一个小额的支付怎么办?在这种状况下要作一个找零。就是说若是前一个未花费的交易有五个比特币,此次要花一个比特币的话,其实把其余四个比特币放在你的地址上,做为一个输出就能够了。

其实比特币并无限制找零的话必定要找给本身,也没有限制必须找零。好比说我能够有两个钱包地址A和B,能够在A地址找零给B地址,除了找零以外,交易输出必须比那个输入还得小一点,由于这个差值是给矿工的,不然就不会在网络中传播出去。在网络拥堵的时候,最好把这个找零设大一点,矿工才会优先把你的交易打包,若是很是小的话,可能永远都打包不了,交易就没办法完成。

典型交易

下面看一个完整的交易流程

image

Rob要付0.3比特币给他的朋友,他先扫一下他朋友钱包的二维码,其实就是那个Base58Check编码的地址,而后把要支付的钱和费用输入进去,点击发送,这个环节要花费以前未花费的那些交易,他钱包的那个节点会自动用私钥签名,而后变成一个交易,就是一段包含以前UTXO解锁脚本和输出锁定脚本的信息,把这些交易信息传播到比特币网络上,被临近的节点验收并传播,矿工收到后把交易打包好放到区块中,即表示挖矿成功,他把挖到的块广播到网络上,其余的节点来验收这个结果,而且再次传播这个交易,通过六个块之后,交易就被认为是可信而稳定的,对方就能够认为收到了这笔交易。

10

交易签名

image

所谓的未花费交易就是别人给你的钱,他会在交易里有一个支付的解锁脚本,这个解锁脚本必须得用你的签名和你的公钥才能解锁,这里用的其实就是非对称加密ECDSA就是用椭圆曲线来解一个数学难题。ECDSA非对称加密比常见的RSA安全性和效率都更高。

非对称加密其实很简单,就是用私钥作签名,用公钥来验证这我的确实是我。还有一个用处是你用个人公钥加密一个东西,而后经过网络传给我,只有用个人私钥才能解开。比特币里其实只用了第一个用途,就是数字签名

11

花费UTXO

image

比特币交易内置一个非图灵完备的脚本语言其实就是作一些交易相关的加解密,以及一些算法,好比这个交易是怎么验证的,标记这个交易是支付给哪一个地址的等等。要去花费这个交易的时候,**未花费交易中包含锁定脚本,签名和公钥是解锁脚本,两部分拼起来,构成一份完整的脚本到执行环境里去执行,**若是符合要求的话,说明你是这笔未花费交易的主人,能够花费这笔交易,能够转给支付对象的地址。若是有未花费交易支出的话,它的签名是放在花它的那个交易中的。至关于作了一个证据链,能够一直往上进行验证。

比特币咱们只说了一个最简单的交易,就是地址的交易,叫P2PKH。还有些信用条件的交易,以及根据一个脚本地址作的交易,这里不展开介绍。

这个脚本语言支持多重签名,好比五我的里有四我的签名了,这笔钱就能够转了,这个能够用来作一些众筹或资金托管方面的事情。

12

默克尔树

image

**就是当前这个块里收到的全部交易,按照一个顺序去排列,而后相邻的节点往上一个个去算哈希,一层层最后算出一个根节点来。**若是正好不能被2整除怎么办?它会在后面补一个相同,至关于把一个值复制一份凑成一个偶数。

默克尔树一是验证了这个默克尔树的根放在我这个块里,至关于全部的交易都已经固定了,若是某个节点修改交易,一验证就能验证出来,最终没法获得正确的根哈希。至关于这个块全部的交易的一个指纹,不能在里面作任何修改。

为何不是把全部的交易直接算一个哈希就完了呢?这里有一个巧妙的用处,它是为了支持Spv交易验证,就是轻量的客户端的支付验证标准,或者协议。好比轻量级钱包,只有当前节点,也就是当前区块里的四个值,没有全部的交易,这样的区块头只占整个区块的千分之几,至关于这个钱包比一个彻底节点的钱包会轻不少。

这个轻量级钱包里面没有完整的交易信息,交易是否成功怎么去验证?好比说别人给我支付币了,交易是多少,怎么验证这个交易已经被放在块里了,我能够去网上广播问,问相邻的完整节点,他们会告诉我这个交易已经被打包在某个块里了,可是由于比特币网络是无需信任的,我谁都不能相信,你说打包进去了,怎么证实呢?好比你给我一个区块的高度,我只知道这个区块的默克尔树的根,这个完整节点怎么让你相信他呢?

好比左图他会把HL和这个HMNOP、HLJ、HABCDEFGH这个几个节点的哈希给你,而且把它们对应的路径告诉你,这时你就能根据sha256往上去算,算出几个虚的节点的哈希值,以及最后的根哈希,而后发现根哈希和你拿到的那个区块的高度相同,就能验证交易真的被打包进了这个块,也就是说那个完整节点告诉你的是真的。

13

智能合约

区块链,若是往里放的是一个数字,并且还有交易协议和系统的话就是一个加密货币。若是放一个别的东西,就成为另外一个别的平台了,好比放一个智能合约。

image

智能合约是不可篡改的,并且是自动达成的,若是新增某个条件,好比时间、人数或钱数,达到这个条件后,会把代币等有价值的东西自动转移。

智能合约在区块链以前就已经存在了,这是个概念性的东西,区块链技术出来后,发现这是一个作智能合约的完美的载体,因此将二者结合起来。

14

分  类

image

区块链根据应用范围和公开程度可分为三种。

  • 公开链。比特币和以太坊都是公开链,任何人均可以做为节点加入到网络中来,均可以去挖矿。

  • 联盟链。加入联盟链是须要认证的,银行之间可能造成好比结算系统之类的联盟链。还有清帐系统、物流系统、或者溯源等,各个系统之间互相不太信任,就能够用联盟链来作,没有任何一个中心节点,而且经过加密技术保障你们是平等互信的。

  • 私有链,一个公司本身搭建一个链,各个部门加入其中,这个比联盟链更小,不过基于企业内部的私有链其存在并无太大意义。

15

区块链技术的应用

image

区块链技术应用的话,在数字版权方面是很完美的,好比电子书,我只是把书的内容加密后放在链上,支付了才有权限解密打开。而且经过一些硬件或其余的技术限制你拿不到这个东西,至关于原版仍是在我手中,别人只能看不能拿走。还有音乐版权和数据交易,如今有不少数据交易所,至关因而你把数据卖给交易所了,它再卖一次仍是十次你是不知道的,这就是有中心的,并不可信。

颠覆性的应用应该是在金融方面,好比电子货币,跨国转帐比原来方便不少,还有众筹,智能合约很适合用来众筹,固然还有一个I-C-O,若是监管得当的话彻底能代替全球全部的证券市场和交易所,由于区块链是一个全球的东西。

而后是共享经济,好比闲置了什么东西,都能经过网络共享出来。这个共享除了咱们熟知的那些之外,还能够是网络、存储、算力,我能够做为一个节点,经过区块链技术,根据本身完成任务去证实工做量,得到必定的报酬,另外一方面也实现了资产最大化利用。

还有物流跟踪等方面,好比产品跟踪、产品数据安全等,就再也不展开赘述。

以上就是本次分享的所有内容,但愿对你们有所帮助。

image

HiBlock区块链社区邀请您一块儿搞事情~

一、一块儿读代码 社区网址:http://hiblock.net/topics/node21 一块儿读代码,好比从以太坊源代码开始

二、一块儿写笔记 社区网址:http://hiblock.net/topics/node22 不积跬步无以致千里,每日写500字左右关于我对区块链的理解,或者针对某一个问题发表本身的观点,由HiBlock公众号统一筛选整理对外发布

三、一块儿译文档 社区网址:http://hiblock.net/topics/node23 英文文档、资讯有太多太多颇有价值的,咱们一块儿来作知识的搬运工吧

当前一块儿译团队的工做:Solidity官方文档,参考Github仓库,智能合约-Solidity官方文档(1)

四、一块儿磨课程 社区网址:http://hiblock.net/topics/node24 将专业技术知识分享给更多的人。能够是一堂课的分享,也能够是打磨一个系列课程。

若是您要报名以上哪一个活动,请添加微信小助手(baobaotalk_com),而后直接回复姓名+数字【可多选,如Bob 1/2/3】

image

内容来源:HiBlock区块链课堂002期 崔超老师的线上分享《区块链技术入门——比特币运行及交易原理剖析

本文编辑:Cynthia

点击“阅读原文”便可回听本课程

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息