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

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

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

1

特 性

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

区块链到底有什么颠覆性的特点呢?

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

去中心化

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

无需信任

你不需要对上面的任何节点,比如谁支付给你了,你支付给谁了,你不需要对他们有任何的信任,不需要完全信任他们,也不需要认识他们,也没有人给你做担保,所有的交易过程都是通过密码学的技术去担保的,只需要信任这个技术。

匿名

比如去银行开户,肯定需要身份证、实名制等,一查就能知道你的信用记录和资产情况。但是比特币账号是你自己申请的,只有你有,别人根本查不到你,除非你去交易所进行交易和银行账户关联了,那就另说了。

2

比特币发展简史

在前几年说起区块链就约等于是比特币,现在因为应用多了,推的也比较多了,各种各样的智能合约和新的链出来,我们要想连接,就要了解区块链这个技术本身是怎么运行的,怎么去保障里面每个块之间的内容是可信的。因为比特币是第一个成功的,也是运行时间最长、影响力最大的区块链应用,所以我们通过研究比特币来理解区块链。

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

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

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

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

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

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

3

区块链·比特币

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

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

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

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

4

比特币区块

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

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

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

  • 不管是在任何各个地方、任何计算机只要用同一个算法,相同的内容,肯定得到同样的结果。

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

  • 不能通过得到的结果反推出原来的值。

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

前一个块的这四个值的哈希值加一个时间戳(就是当前你挖这个块的时间,当然它允许一定的晃动范围),还有一个随机的数,因为其他几个值,比如前一块的哈希值、时间戳变化的范围比较小,我如果做一些工作量的任务,需要去向别人证明我的工作量的话,要通过不停地改这个随机数去算这个哈希。

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

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

5

共识机制

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

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

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

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

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

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

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

6

挖 矿

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

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

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

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

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

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

7

分 叉

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

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

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

硬分叉就是我把共识机制改了,从新的节点开始我认你之前的那些节点,但是之前的那些矿机并不认我这个新的共识机制,因为大家都互不相认,这种情况就相当于在某个节点之后,所有节点基于新的共识机制和旧的共识机制,分道扬镳,产生了一个分叉。

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

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

8

钱 包

下面开始讲比特币交易,交易的话就要有钱包和账号了,一个账号怎么来的,比特币里其实并没有账号的概念,钱包可能是一个完全节点,也可能是一个轻量级钱包。

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

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

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

由于私钥不存在于区块链上,而且花钱时需要用它签名,如果你把它丢了,相对应地址里的钱就永远花不掉了。

9

UTXO

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

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

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

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

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

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

典型交易

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

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

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

10

交易签名

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

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

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

11

花费UTXO

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

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

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

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

12

默克尔树

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

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

默克尔树一是验证了这个默克尔树的根放在我这个块里,相当于所有的交易都已经固定了,如果某个节点修改交易,一验证就能验证出来,最终无法得到正确的根哈希。相当于这个块所有的交易的一个指纹,不能在里面做任何修改。

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

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

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

13

智能合约

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

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

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

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

14

分 类

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

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

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

  • 联盟链。加入联盟链是需要认证的,银行之间可能形成比如结算系统之类的联盟链。还有清账系统、物流系统、或者溯源等,各个系统之间互相不太信任,就可以用联盟链来做,没有任何一个中心节点,并且通过加密技术保障大家是平等互信的。

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

15

区块链技术的应用

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

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

颠覆性的应用应该是在金融方面,比如电子货币,跨国转账比原来方便很多,还有众筹,智能合约很适合用来众筹,当然还有一个I-C-O,如果监管得当的话完全能代替全球所有的证券市场和交易所,因为区块链是一个全球的东西。

然后是共享经济,比如闲置了什么东西,都能通过网络共享出来。这个共享除了我们熟知的那些以外,还可以是网络、存储、算力,我可以作为一个节点,通过区块链技术,根据自己完成任务去证明工作量,获得一定的报酬,另一方面也实现了资产最大化利用。

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

以上就是本次分享的全部内容,希望对大家有所帮助。

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

本文编辑:Cynthia

以下是我们的社区介绍,欢迎各种合作、交流、学习:)

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

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