从零搞懂区块链(6):比特币是如何交易的?

比特币网络每天会产生数以千万计的交易,这些交易是如何进行的呢?如何保证交易的正确性和安全性?矿工又是如何获益的呢?

文 | 王映

图 | 闫燕

比特币网络每天会产生数以千万计的交易,而参与记账的只有那些正确破解比特币系统所设谜题的节点,这些节点被称为“矿工”。如果每产生一笔交易,矿工就记一次,这么多交易交由矿工来完成,工作量太大了!所以一般是矿工每隔一段时间批量打包这些实际交易者广播到全网中的交易信息。所以一次记账(也就是一个新区块的生成)可能对应着一千次交易,或者更多。广播的交易信息的正确性,由网络节点集体负责。矿工只负责信息录入。

从零搞懂区块链(6):比特币是如何交易的?_第1张图片

下面以Alice(A)和Bob(B)的交易为例,说明比特币的交易过程:

提交交易:A想给B发送2个比特币,从B那里买一个杯子。A把自己的交易信息(资金来源、目标地址、支付金额、手续费金额)提交到比特币网络上,产生一个交易ID。

等待打包:A提交到网络上的交易ID,被某些矿工接收到,这些矿工会对交易进行验证。例如A的帐户情况、资金来源、地址是否合法等。验证通过,且矿工愿意把这笔交易打包到新区块中(矿工是可以自主选择接受或拒绝某些交易的打包请求的),则这笔交易ID连同其它交易(一般一共是2000个左右的交易)一起,被放入矿工的等待打包内存数据中,并基于这些交易数据来计算新区块的随机数Nonce。在计算随机数的时候,这些交易就不会再变更了,因为任何变更都必须再重新计算Nonce值,以前的计算就全部做了无用功了。

挖矿:当某个矿工Tom找到合适的Nonce值,即找到一个合适的随机数,使打包后的区块哈希值满足系统的难度要求时,该矿工就成功挖到了一个新的区块。

同步:矿工Tom把挖到的区块信息公布到网络中。其他矿工对Tom挖到的区块数据进行确认,也就是把这些打包交易、时间戳、找到的随机数等信息,再进行一次哈希计算,对计算的结果验证是否小于系统指定的目标哈希值。验证通过后,其他矿工就把Tom找到的区块添加到自己本地的区块链数据库中,并以此数据库为基础,进行下一个区块的计算。

Tom所找到的区块,其后每增加一个新的区块,就称为一次确认。当增加了6个区块以后,Tom的这个区块就被固化,交易信息不可再改动。Tom会得到挖矿奖励。

完成6次确认后,A发出的交易信息就被永久写入区块链网络中,无法再变更。

B对A提交的交易ID进行验证,核实该笔交易已经经过了6次验证,即交易信息得到大部分节点认可,则认为交易不可再变更,A发给B的2个比特币真实到帐。B就可以安排发货了。

从零搞懂区块链(6):比特币是如何交易的?_第2张图片

从上述过程可以看到,每个区块能够打包的交易数量是有限的,且可以由矿工自主选择,当交易太多,可能一个区块打包不下,矿机会按照这样的原则进行优先级排序:

交易时间即这笔交易是何时产生的,先转账的优先处理。

手续费:每笔交易都需要支付手续费,手续费越高的越先处理。矿工可以自主选择对哪些交易进行优先处理。所以支付更多的手续费可以使交易尽快被确认。

从零搞懂区块链(6):比特币是如何交易的?_第3张图片

以下是某三个区块的交易量及手续费数据,其中蓝色部分是挖矿收入,绿色部分是本区块中所有交易的手续费收入总合。

从零搞懂区块链(6):比特币是如何交易的?_第4张图片

但比特币系统中只给优先级高的交易50k的内存空间,所以即使你没有给交易费,也有机会进入待打包交易池,并可能在24小时内被打包进区块。因为每个区块总的大小是1M,除区块头的80字节和高优先级交易的50k内存池以外,大部分存储空间还是留给了普通交易。

从零搞懂区块链(6):比特币是如何交易的?_第5张图片

矿工对交易进行打包时,是从自己都内存中获取自己暂存的交易信息,一旦这些内存被释放,那么这些交易信息就会被清空。

为了解决这个问题,比特币钱包需要不断对自己发起的交易进行检查,如果发现没有被打包进最新的区块,就要对网络广播,这样这个交易就会在网络里不断被提起,矿工又可以把这笔交易写进自己的内存里暂时放着,等下次打包区块时,选择是否把它打包进去。

从零搞懂区块链(6):比特币是如何交易的?_第6张图片

一个区块产生之后,它不是立即可信的,网络上的节点总是相信最长的区块链,当一条交易记录被打包进一个区块之后,就有了一个确认,而这个区块所在的链后面被再加入一个区块,就是第二个确认,如此下去,一个交易有了6个确认,我们就认为这个交易已经确定了,会被永远记录在区块链中。

为什么是6个确认呢?因为每一个确认就是一个挖矿过程,都需要提供非常严格的计算,因此,这6个区块被同一个矿工创建的可能性微乎其微(可以说是不可能),因此矿工伪造交易也基本不可能。再者,经过6次确认之后,就可以保证这个交易进入了主链,而不是进入了某个孤块,孤块最终是要被系统遗弃的无效信息。

从零搞懂区块链(6):比特币是如何交易的?_第7张图片

由于比特币的区块平均产生时间是10分钟,所以一个交易要1小时左右才能保证成功。在6次交易确认之前,可以随时中止交易,而修改交易信息。6次交易确认之后,交易被写入区块链中,这个信息就不能修改了。

本次我们探讨了比特币的交易过程,下一次我们将从技术概要的层面对比特币所使用的底层区块链技术加以分析,欢迎大家持续关注,谢谢!

你可能感兴趣的:(从零搞懂区块链(6):比特币是如何交易的?)