比特币

比特币

2010年5月一位程序员用1万个比特币买了这样的2份披萨

在2017年12月16日,也就是大约7年半后,1万个比特币大约值1.8亿美元,也就是大约12亿人民币比特币在7年半时间变得这么值钱,比特币究竟是什么

通过一个虚构的例子,一步一步由浅入深地介绍比特币是什么

小青,小红和小白,小皂4个人合租一套房子,她们之间经常有金钱上的往来,为了省事,她们使用客厅的一块白板进行记账,到月底一起结清

比如有一天,小青和小红一起去吃饭,一共花了100元,她们打算AA制,各付50元,但是小红买的单

小红说,记到账吧,月底你再一起付给我,所以,小青在客厅的白板上记下小青需要付50元给小红:

类似的白板又记下了小青需要付50元给小皂,小红需要付50元给小白,记账的白板放在客厅,谁都可以往上面添加一条记录

有一天,小白的朋友恶作剧,擅自添加了一条记录,小红需要付给50元给小白

幸好后来发现了这条虚假的记录,否则月底小红要无缘无故多付50元给小白。为了防止类似的事情发生,记账的时候,每一条记录中付钱的一方需要在记录后面签名。

后来记录太多,白板上写不下

她们决定改成在计算机上记账,在计算机上就不能使用手写签名,一个原因是在计算机上不方便手写进行签名,更主要的是手写的签名在计算机上可以轻易地被复制,例如,小白的朋友恶作剧,在这里复制一条记录,把签名也复制一下。如果没人发现的话,月底小红要无缘无故的多花50元。所以,在计算机上的签名应该是专门针对计算机的数字签名。

数字签名和手写签名一样,要满足"对应性"这个要求,也就是说,别的地方的数字签名无法用于作为这些记录的数字签名,而且每个签名只能用于与其对应的记录,无法用于其他记录

例如第一条记录,小青需要付50元给小红,这条记录的数字签名就不能用于作为第2条记录的数字签名。虽然这两条记录的付款人都是小青,但是付款内容不一样。数字签名必须与记录的内容严格对应。如果记录的内容变了,则原来的数字签名应该失效。例如,把第一条记录中的数字50改成51,则原来的数字签名失效

制作数字签名一般采用哈希算法

哈希有很多,因为有些哈希算法有缺陷,她们选择了称作SHA-256的哈希算法,到目前为止还没有任何公开的资料显示SHA-256有缺陷。SHA-256的全称为SHA:Secure Hash Algorithm(安全哈希算法)。256表示无论输入什么值,这个算法的计算结果是1个包含256位数的二进制数,二进制数是由0和1组成的数。

我们把第1条记录"小青需要付50元给小红"输入SHA-256函数,得到这样1个包含256位数的二进制数

网上有现成的SHA-256函数在线计算工具,把第二条记录"小青需要付50元给小皂"输入SHA-256函数,两条记录只差一个字,SHA-256的计算结果完全不同。不仅仅是相差一个字计算结果完全不同,即使是多一个点,计算结果完全不同

只要这条记录出现任何变动即使是微小的变动,SHA-256的计算结果会发生很大的变化,并且这些变化毫无规律可循。另外需要注意的是,只要这条记录的内容不变,SHA-256的计算结果总是相同的。所以使用SHA-256的计算结果作为数字签名,可以保证签名与记录的内容完全对应

但这还不够,因为数字签名和手写签名一样,不仅需要满足对应性的这个要求,还需要满足"可鉴别"这个要求

可鉴别是指比比如对于最后一条记录的签名,必须能从这个签名判断出是小红的签名而不是别人的签名,但SHA-256函数是一个公开的函数,网上有在线计算工具,无论谁输入"小红需要付50元给小白",都会得到相同的结果。如何让这个签名体现出是小红的签名而不是别人的签名?她们想出了一个办法,就是采用非对称加密法对SHA-256函数的计算结果进行加密,把加密的结果作为签名

 

使用非对称加密法是如何让签名达到"可鉴别",小红将"小红需要付50元个小白"输入SHA-256函数,我们将小红输入的文字称作"原始记录",将一串文字输入SHA-256函数获得的值,我们简称哈希值,小红用自己的私钥对这个哈希值进行加密,获得加密后的哈希值,私钥可以是1个包含256位数的二进制数,在计算机中,对这个哈希值进行加密可以理解为将私钥和这个哈希值输入某个函数进行很复杂的计算,获得一个数值。这个数值就是加密后的哈希值。加密后的哈希值就是小红对这条记录的签名。小红将这条记录、自己的签名和自己的公钥公布出来,这样任何人都能通过小红的公钥对小红的签名进行验证。例如,小白利用小红的公钥对小红的签名进行解密,获得解密后的哈希值,称作哈希值1。小白将接收到的记录"小红需要付50元给小白"输入SHA-256函数获得的哈希值称作哈希值2。如果哈希值1=哈希值2,

则说明这个签名是针对这条记录的。如果小红发出的签名不是针对这条记录的,则对签名进行解密获得的哈希值1不会等于将这条记录输入SHA-256函数获得的哈希值2。

这个签名是小红的签名,如果这个签名不是小红的签名,则无法利用小红的公钥对签名进行解密获得哈希值1

接收到的记录与原始记录相同,未被篡改

类似的付款方将各自的记录输入SHA-256函数获得哈希值,然后用自己的私钥对哈希值进行加密已获得对应的数字签名。其他人根据记录的内容,付款方的公钥就可以判断出这个签名是否对应于记录内容,是否是付款方的签名,从而记系统开始正常运行起来。但这个记账系统太原始,还有很多漏洞,只适合小范围使用

2008年11月,网络上出现了一篇作者署名为中本聪(Satoshi Nakamoto)的文章。其标题可以翻译为《比特币:一种对等式电子现金系统》

这篇文章详细描述了如何利用对等网络(peer-to-peer network)来构建一种记账式电子交易系统。2009年1月,比特币上线,出现了称作比特币钱包的客户端软件。人们开始可以利用比特币钱包转账和接受比特币。将小青、小红、小皂、小白所使用的记账系统进行若干改进就可以得到中本聪所设计的比特币系统,我们下面一步一步进行这些个改进。从了解比特币的基本工作原理。

第一个改进的地方将付款信息的"元"改成比特币BTC,比特币系统中的交易单位为"比特币",用BTC(bitcoin)表示

第二个改进的地方是把付款信息中的"需要付"改成"支付",也就是说,把原来的"小青需要付50BTC给小红"改成"小青支付50BTC给小红",只要小青发出这个支付消息,自己的数字签名和自己的公钥,则小青的账户上要减少50比特币,小红的账户上要增加50比特币。这样改进的目的是为了避免月底找不到人多带来的麻烦

第三个需要改进的地方是需要有一种方法是否有足够的比特币进行支付。付款方有猪足够的比特币进行支付,才能认可这次转账交易。银行等金融机构可以通过账户余额非常方便地进行确认。但是中本从发明比特币额其中一个目的就是消除对银行等金融机构的依赖,一方面可以是因为银行等金融机构对转账收取比较高的手续费。另一方面可能是因为担心遇到金融危机,一些银行可能会倒闭,撒手不管了。如果设立专门的机构记录各个账户的余额,相当于建立了一个中央管理机构,这不符合中本聪去中心话的目标。请大家注意中本聪文章的标题peer-to-peer这个词。这个词的含义是比特币网络中的所有节点的地位都是平等的。可以履行相同的职责,不存在谁管理谁,也就是没有管理机构。那如何确付款方是否足量的比特币呢?依靠付款方自己给自己记录的余额?自己给自己记录的余额,除了自己还有多少人相信?比特币网络的解决方案是每笔交易都必须把以前的交易作为基础,而不是以余额为基础。

例如,小红支付50BTC给小白,这笔交易成功的前提是,在这笔交易之前必须有人向小红支付了X个比特币,X必须大于等于50,且这X个比特币没有被使用过,而之前小青支付50BTC给小红,所以符合要求

支付消息就改成这样

支付消息的含义是将小青支付给小红的比特币作为小红支付给小白的比特币。这条支付消息中第二个小红是多余的。因为小青支付给小红的50比特币,则只能由小红转而支付给小白。

所以支付消息改成这样

支付时,小红将这条支付消息,即"小青支付50BTC给小红->支付50BTC元给小白"

以及小红针对这条支付消息的数字签名,小红的公钥一起发给小白。小白收到支付消息后,发现支付消息中前一个数额为50比特币,后一个数额为50比特币。前一个数额称作这个交易记录的输入值,后一个数额称作这个交易记录的输出值,输入值大于等于输出值,就可以确认小红确实有足够量的比特币进行支付。

接着小白将接收到的支付消息,也就是"小青支付50BTC给小红->支付50BTC给小白"输入哈希算法,获得哈希值1,接着小白使用小红公钥对小红的签名进行解密,获得哈希值2,哈希值1=哈希值2,则小白可以确认小红的签名有效,支付成功。这里有两个细节问题需要注意,第一个细节问题是如果小红需要支付60BTC给小白,而小青只支付了50BTC给小红,也就说输入值小于输出值,则小红需要再添加一个之前的转账给小红的消息。例如,假设以前小皂支付10BTC给小红,则交易数据改成,"小青支付50BTC给小红+小皂支付10BTC小红->支付60BTC给小白"

第二个细节问题是如果之前小皂支付20BTC而不是10BTC给小红,5-+20=70>60,也就是输入值之和大于输出值,这如何处理?比特币网络的处理方式是付款方将支付后剩余的金额作为找零支付给自己,也就是说,支付数据变成"小青支付50BTC给小红+小皂支付20BTC给小红->支付60BTC给小白+支付10BTC给小红"

也就是说,先前的交易记录,用于转账时,则是把先前的交易记录中的金额一次性全部用完,因为"小皂支付20BTC给小红"这个交易记录作为一个整体代表20BTC,无法进行拆分,类似于一张100元纸币,作为一个整体,无法拆分,不能撕下一部分付给别人,只能找零。

第四个改进的地方,将交易双方的名字改成账号。支付消息里不能再是"小红""小白"的了,世界上重名的人太多,支付消息中的名字要改成全球唯一的账号,小青的账号是将小青的公钥输入某个函数计算得到,账号一般是一个包含34个字符的字符串

第五个改进的地方是转账记录的存储和维护

这些记录不能仅仅存放在一台电脑上,要同时存放在多台电脑上,因为每条记录都代表着钱。这些记录是系统运行的基础,如果只存在一台电脑上,电脑出现故障,则整个系统就崩溃了。所以要存放在多台电脑上。这些存放记录的电脑由谁来维护和管理呢?交给某个值得信任的人或专业公司进行管理和维护?谁能保证这个人或这个公司在巨大的诱惑下或者巨大的威胁下部队记录进行篡改。比特币网络的解决方法是,每条比特币交易及记录都要发送到网络上,让所有运行比特币客户端的计算机存储所有的比特币转账记录。这样每一条记录都有很多计算机存储,不用担心记录缺失。但这样会出现三个一致性方面的问题,

第一个一致性方面的问题是如何进行同步

有的计算机可能有时没有运行比特币客户端,有时没有联网,有时甚至出于关机状态,它们就没有收到网络上发来的比特币交易记录。这样不同计算机上的记录不一致,到底以谁为准。如何让它们相互进行同步,从而存储相同的记录?

第二个一致性问题是如何防止记录被篡改。例如,某个黑客可能会篡改了一些计算机上的某一条或多条比特币交易记录,导致比特币交易记录不一致,甚至出现相互矛盾的地方,导致整个比特币网络无法运行。那么如何防止黑客篡改记录呢?

第三个一致性方面的问题:如何防止同一笔比特币收入被重复使用

例如,假设小红一共只收到过一笔转账,是小青支付给她的50比特币。小红全部付给小白后,马上又支付了一次给小皂。也就是说,小红几乎同时发送了3个支付消息。消息1表示,小红将从小青那里收到的50比特币支付给小白。消息2表示,小红将从小青那里收到的50比特币支付给小皂,这两个消息几乎是同时发出的。因为在网络上,消息传播道时经过的路径可能不同,就导致有的计算机先收到消息1,有的计算机先收到消息2。先收到消息1的计算机认为:消息2中的"小青的账号"支付50BTC给"小红的账号"是无效的,因为在消息1中已经使用过,因此消息2对应的比特币交易作废。先收到第2个消息的计算机认为:消息1中的"小青的账号"支付50BTC给"小红的账号"是无效的,因为在消息2中已经使用过,所以消息1对应的比特币交易作废。这样,不同计算机对同一个交易记录的有效性产生分歧。

如果通过银行进行交易,就可以很容易解决这个问题。例如,如果通过银行进行交易,则一切以银行的裁决为准,银行说得算。银行则可以规定:以银行先收到的支付消息为准。但是,中本聪发明比特币的其中一个目的就是消除对银行等金融机构的依赖,不通过银行进行仲裁,那如何解决这3个一致性问题呢?比特币利用区块链解决这3个一致性方面的问题,区块链是由一个个区块串联而成,区块中存储的是经过检查的交易记录,比特币网络仅仅认可和维护同一条区块链,通俗的说,就是比特币网络上的每个节点存储着完全相同的一条区块链。当新生成的交易记录被放入新生成的区块,而且这个新生成的区块被添加到区块链上后,这个新的交易记录才算得到比特币网络的确认

新区块由比特币网络上的称作矿工的节点生成,矿工接受发送到网络上的各个比特币交易记录,逐个检查这些交易记录是否符合要求

例如检查每条记录是否有正确的数字签名,每条记录的输入值是否使用过,每条记录的输入值之和是否大于等于输出值,等等。然后将符合要求的比特币交易记录添加到自己正在制作的新区块中,当矿工成功地制作好这个新区块

就立即把这个新区块发送到网络上的各个节点

网络上的节点接收到这个新区块,检查这个新区块是否符合要求,如果符合要求,则将这个新区块添加到自己所存储的区块链的末尾

那么问题来了,比特币网络上有许许多多矿工,每个矿工都可以生成新区块,网络上可能会生成许许多多新区块,

比如同时生成100个新区块,虽然这100个新区块所包括的记录大致相同,都是检查好的近期交易记录。但是,每个区块具体包含哪些交易记录可能略有区别

也就是说这100个新区块各不相同,而比特币网络仅仅认可和维护同一条区块链,比特币网络上的每个节点都必须选择同一个新区块添加到现有的区块链的末尾。但是很难制定一个统一的选择标准

 

 

至少是不能按照到达的时间先后顺序进行选择,因为节点分布于世界各地每个节点接收到的新区块一般不相同,

比特币网络的解决方案是,采用一个巧妙的方法限制单位时间内同时生成的新区块的数量,如果每个10分钟左右的时间,整个比特币网络中只有一个矿工能将自己做好的一个新区块发布到网络上,就不需要进行选择,所有的节点将这个唯一的新区块添加到区块链上,这样可以保证所有节点保存的区块链始终相同,这个巧妙的方法就是,当矿工把检查好的交易记录填入到新区块后,还要求矿工做一个额外的工作,矿工成功的完成这个额外的工作后,才能把生产的区块发布到网络上。这个额外的工作,整个比特币网络一般只有一个矿工能在10分钟左右时间成功完成一次,这样每个10分钟左右的时间,只有一个矿工能将自己做好的一个新区块发布到网络上,

这个额外的工作分为两步,第一步就是将新制作的区块所包含的内容,也就是前一个区块的SHA-256函数值+这个新区块基本信息+这个新区块所包含的所有交易记录记录组合成一个字符串,这里需要注意的是前一个区块的SHA-256函数值是指,前一个区块的所有内容输入SHA-256函数后所得到的结果值,每一个区块和它自己的SHA-256函数值一一对应,区块的SHA-256值就代表这个区块,如果B个区块包含第X个区块的SHA-256函数值,则表示第B个区块的前一个区块是第X个区块

区块链中第一个区块包含第0个区块的所有内容的SHA-256函数值,第2个区块包含第1个区块的所有内容的SHA-256函数值,以此类推,最后一个区块包含倒数第二个区块的所有内容的SHA-256函数值。区块链就是依靠各个区块的SHA-256函数值将这些区块有序地串联起来,

我们回到我们刚才说的这个额外工作的第1步,在完成第一步后,也就是组成这个字符串后。进行第2步,第二步是找一个随机数,在第一步得到的字符串的末尾添加上这个随机数,组成新字符串。将这个新随机数输入到SHA-256函数得到一个256位的二进制数,如果找到这个随机数使得这个256位的二进制数的前72位都为0,才算成功的完成了这个额外的工作。

这个额外工作的难度非常高,高到整个比特币网络一般只有一个矿工能在10分钟左右时间成功地找到这个随机数。原因在于SHA-256函数的特点是:虽然每个输入值对应一个输出值,而且每个输出值都是一个256位的二进制数,但是每次运算的输出值具体是什么完全是随机的,而且无法预测。找到符合要求的随机数的唯一方法就是以最快的速度输入不同的随机数,不停地试。SHA-256的输出结果使这样的256位二进制数

前1位数为0的概率为1/2

前2位数为0的概率为1/2*1/2

前72位数都为0的概率为(1/2)^72

也就是说平均要试大约2的72次方个不同的随机数,才能找到一个符合要求的随机数。

也就是说平均要进行2^72次SHA-256函数计算,才可鞥找到一个符合要去的随机数

整个比特币网络上所有的矿工节点的所有计算设备一起做运算平均每10分钟才能做2的72次方SHA-256函数计算。也就是说,整个比特币网络上所有的矿工节点上的所有计算设备一起找这个随机数,平均每10分钟才会找到一个满足要求的随机数,因为找到这个随机数完全靠运气。有时运气好一些,可能3分钟、4分钟就可能找到这个随机数。有时运气差一些,可能要十多分钟才能找到这个随机数,但平均是10分钟才能找一个符合要求的随机数。因为完全靠运气,所以到底哪个矿工的计算设备找到这个数也是随机的,有点类似于买彩票,中奖号码是随机的,中奖者也是随机的,当某个矿工找到符合要求的随机数后,马上把这个随机数添加到新区块中,马上把这个新区块发布到网络上

网络上的节点收到这个新区块后,将区块中的所有内容,也就是前一个区块的SHA-256函数值+这个新区块的基本信息+这个新区块所包含的所有交易记录+找到随机数,组合成字符串,并将这个字符串输入SHA-256函数,如果计算结果使符合要求的二进制,即前72个数字都为0,则说明制作这个区块的矿工确实成功完成了这个额外的工作,然后节点检查区块块的其他方面是否符合要求,以及区块中的记录是否符合要求,一切都没有问题的话,就将这个新区块添加到自己的区块链末尾,网络上接受到这个新区块的所有节点都做相同的操作:检查区块,符合要求就添加到自己区块链的末尾。

因为只有1个新区块,从而避免了从很多个新区块中选择一个,找到这个随机数完全靠运气。但矿工的运算能力越强,则运气会越好。这个寻找符合符合要求的随机数的过程称作挖矿。挖矿拼的是运算速度,拼运算速度就是拼挖矿设备的运算速度,为了提高速度,矿工们不断升级自己的挖矿设备。最初使用的是普通个人计算机,每秒能进行大约60万次SHA-256函数运算,后来使用安装有多个专业显卡的个人计算机,每秒能进行大约几亿次SHA-256函数运算。显卡进行SHA-256函数运算的速度比CPU快很多,现在一般使用专业的特制的挖矿机,比较高档的挖矿机每秒能进行大约10万亿次SHA-256函数运算,挖矿机内是一块块特制的挖矿芯片。为什么矿工会乐意不断升级自己的设备,而且购买这么多挖矿机呢?

天下熙熙,皆为利来。也就是找到符合要求的随机数,自己制作的新区块被网络上的节点添加到区块链上,则矿工将会获得来自比特币网络的12.5个比特币作为奖励,除此以外,这个新区块内的所有比特币转账交易的交易费也归这个矿工所有。2017年,每个区块内包含的交易费大约为1到4个比特币不等,目测平均2个比特币。所以当矿工成功的生成一个新区块,这个矿工平均可以获得14.5个比特币。巨大的经济利益大大的刺激了挖矿设备的发展,但挖矿设备升级,导致整个网络的计算能力提高,原来整个网络大约需要10分钟才能找到一个符合要求的随机数,现在可能大约需要5分钟,比特币网络为了维持10分钟生成一个区块的速度,每两个星期调整一次工作难度。例如,原来要求前72位全是0,可能会调整为前73位全是0,从而增加难度,因为找到这个随机数完全靠运气,有没有可能,两个矿工在差不多相同时间各自找到1个符号要求的随机数,并各自制作了1个新区块,有这个可能,也经常发生

那比特币网络如何处理呢?当网络节点几乎同时接收到2个都符合要求的新区块,我们用紫色区块和绿色区块分别表示这2个新区块,网络节点不知道比特币网络最终会采纳哪一个区块,就暂时把这2个新区块都保留下来,并把这2个新区块都添加到最后一个区块的后面,从区块链出现了额分叉,形成2个支链,矿工也会同时保留这2个新区块,但是制作下一个新区块时,每个矿工都是在自己先接受到的那个区块的基础上,创建新区块,有的矿工先接受到紫色区块,有的矿工先接受到绿色区块,所以有的矿工在紫色区块的基础上创建新区块,有的矿工在绿色区块的基础上创建新区块,一般情况下在下一个10分钟,不会那么凑巧几乎同时产生2个新区块,一般只产生一个新区块,如果只产生一个新区块,如果这个新区块是在紫色区块的基础上创建的,则接收到这个区块的节点将它添加在紫色区块的后面,同时放弃绿色的区块。

如果这个新区块是在绿色区块的基础上创建的,则接收到这个区块的节点将它添加在绿色区块的后面,同时放弃紫色的区块

也就是说,如果区块链分叉,出现支链的话,网络上的所有节点只认可最长的那个支链。这样保证了区块链的唯一性。如果非常非常偶然的不是只产生1个新区块,而是又同时产生2个新区块,如果这两个区块都是在紫色基础上创建的,则所有节点都把这2个新区块添加到紫色区块后面,同时放弃绿色区块,因为紫色区块这条支链最长

这样就等下一个区块,因为正常情况下,不会再次同时生成2个新区块,这2个支链中最终只有一个支链称为最长的支链,从而变成主链,另一个较短的支链将被放弃。如果一个新区块是在紫色区块的基础上创建的,另一个新区块是在绿色基础上创建的,则这两个区块分别添加在紫色区块的后面和绿色区块的后面

同样,也等下一个新区块。正常情况下不会再次同时生成2个新区块,这两个支链最终也只有一个支链称为最长的支链,从而变成主链。另一个较短的支链将会放弃。被放弃的支链上的区块中的记录,如果没有别添加到主链上,则会被重新认定为未确认交易,等待被加入到新的区块中,这里大家要注意的是,这里这些比特币转账交易的时候,交易记录虽然被放入区块中,但是这个区块可能是主链上的区块,如果这个支链不能成为主链的话,交易很可能重新变成未被确认的交易,重新等待确认,所以保险起见,当交易记录所在的区块后面又添加了若干新区块后,才可以稳妥的认为自己的交易记录真正地得到比特币网络的确认,若干个到底是几个?对于小额交易,一般是1-2个,对于大额交易,为了更稳妥,一般是3-6个。现在我们来看看区块链如何解决这3个一致性方面的问题。

第一个问题如何进行同步

因为比特网络仅仅维护唯一一个区块链,也就是长度最长的称为主链的区块链,所以大家都以这个区块链为准进行同步。

不管是第一安装比特币软件,还是中途有很长时间未联网,比特币软件连接到网络后会自动向周围的网络节点请求自己没有的区块,检查无误后逐一添加到自己存储的区块链上,注意是检测无误后,才逐一添加到自己存储的区块脸上,包括检查区块中的每一笔交易记录是否符合要求,检查区块是否符合要求,而不是接收区块后直接添加。

第二个问题是如何防止篡改

当交易记录被输入到区块中,而且区块被加入到区块链中,则区块中的任何记录都不能进行修改,即使是微小的改变也是不允许的,对区块的任何修改都会改变这个区块的SHA-256函数值,导致后面一个区块所包含的SHA-256函数值与这个区块修改后的SHA-256函数值不相同,导致这个链断裂,这条区块链也就不是比特币网络上最长的区块链,而比特币网络只认可和维护最长的一条区块链。

那篡改者有没有可能自己不断制作新区块,并添加在这个断裂的区块链的后面,让断链的区块链生成长尾最长的区块链,因为制作新区块必须要完成难度很高的额外工作,只有篡改者所拥有的计算能力超过这个网络中其他所有节点的计算能力的总和时,篡改者所制作的区块链的生长速度才有可能超过现有的完整的区块链的生长速度。篡改者制作的才有可能成长为最长的区块链。但是比特币经过8年的发展,尤其是近期比特币价格高涨,导致加入挖矿的矿工越来越多,计算能力越来越强,这样可能性为几乎为0

第三个问题如何防止同一笔比特币收入被重复使用

矿工制作新区块时会检查新区块的每个交易记录中的输入值,是否在前面的区块所包含的交易记录中使用过,如果被使用过,则认为这个交易记录无效,不会被放入新区块。如果在制作新区块中,发现有两个交易记录的输入值出现相同的先前交易,则矿工只认可其中一个交易记录有效,并只将其加入到新区块中,而只有被放入区块的交易记录才是比特币网络认可的交易记录,才是被确认为成功的交易记录,从防止同一笔比特币收入被重复转账给别人

 

比特币是怎么发行的

新比特币作为矿工的奖励进入比特币网络进行流通。也就是说当矿工得到12.5比特币的奖励时,比特币网络中便增加了12.5比特币。但是奖励金额不是一成不变的,每生成21个区块,奖励金额减半。也就是说,从第0个区块开始的21万个区块,每生成一个区块矿工获得50比特币作为奖励。

 

 

 

 

 

 

posted on 2018-12-20 00:39  kexinxin  阅读(1114)  评论(0编辑  收藏  举报

导航