从支付交易的传输数据和验证流程我们可以看到,比特币的支付过程中主要是使用到了支付方即A的交易数据信息以及A的公钥和私钥,被支付方即B只是做验证操作的有效性而已,被支付方B自己的公钥、私钥以及交易信息都没参入支付过程,因此我们可以认为私钥和公钥主要是用于把比特币用花出去的场景。
如果想要交易最终被确认成功,接下来被支付方B就要将该笔交易广播到全网去了,如是流程进入到了交易广播的阶段。
三、交易广播本人认为从交易广播开始,就进入了时下很火爆的区块链技术范畴了,因为广播出来的交易最终都会被网络里的矿工(矿工即是区块链分布式系统下的各个子节点)接收,作为矿工创建区域链区块的输入。这个过程比较简单,只是数据的传输,但是对于技术实现而言就是技术的难点之一,因为此块技术包含了编程领域里比较复杂的网络通讯技术和高并发技术。不过如果把交易广播作为区块链的输入来理解,那么这里还牵涉跟输入相关的一个重要技术那就是时间戳服务器,时间戳服务器的作用是给同一时间下的交易加上一个时间维度的标识,有了时间戳,我们就可以确定在某个时间点该交易一定发生过。
时间戳服务器在中本聪的论文里是这么定义:
时间戳服务器通过对以区块(block)形式存在的一组数据实施随机散列而加上时间戳,并将该随机散列进行广播,就像在新闻或世界性新闻组网络(Usenet)的发帖一样。
由此定义我们可以知道时间戳是对新产生的交易记录按时间维度分组,这样就保证每条实际发生的交易都能正确的被保存下来。
时间戳服务器的作用对于比特币的货币价值至关重要,这里我举一个例子:在传统的交易里往往是没有时间维度的概念,没有时间维度的交易往往会影响到交易的信用评价,例如:甲方和乙方账户里各有100块钱,一天甲方向乙方账户打入了10块钱,第二天乙方账户又向甲方账户打入10块,最终甲乙双方的账户任然是100块,如果交易过程没有被记录,那么我们就很难追溯其中的交易行为,假如甲乙双方进行了违法的交易,最终在检查前让账户平衡,那么危险的行为就会被藏匿。因此时间戳服务器给比特币的交易提供了一种正向的不可逆的交易流程,这就让比特币的区域链技术达到了行为可追溯的功能,能解决沟通中信息不对称的问题,这就是区块链技术能被应用到其他领域一个重要原因。
交易广播后就是交易写入区块的过程了。
四、交易写入区块交易最终被确认就是要将交易写入到区块链里,而区块链是由一个个区块串联起来的,区块才是记录交易的实体,因此要写入区块链,首先要将信息写到区块里。那么区块是如何产生的呢?
区块的产生是有网络中一个个矿机来完成。但是矿机要产生一个新区块并没有那么容易。这里我们首先讲下区块的数据结构,区块分为区块头和区块体,区块体里存储的就是一条条的交易记录,这些交易记录都是被支付方例如B广播到网络中去的交易记录。
在比特币系统里一个块的大小本指定为1个mb,一笔交易大概500个字节,因此一个区块大概可以存储2000笔左右的交易。区块的里最关键因素在区块头里,区块头里有该区块的很多特征值,比较关键的有
区块生成时间
区块体的Hash值
上一个区块的Hash值
以上值都是外部获取的,除此之外区块头还包含一个难度系数difficulty和Nonce的随机数,矿机系统里还有一个固定的常量值。这里有个公式:
target = 固定的常量值/difficulty
由此可见难度系数越大,target的值就会越小。矿机会对区块头的数据进行hash计算,hash的结果是一串二进制数字,如果最终的hash结果要小于target那么该区块才会被认为有效区块,这个有效区块才能被同步到区块链里,但是计算出一个有效的区块可没有那么容易,需要反复的计算才能得到最终结果。可是由于一个区块特征属性一般都是固定的,为了让每次区块头的每次计算出来的hash值都不同,每次无效的hash结果计算后,矿机程序就会动态调整Nonce的值,让最终hash的值发生变化。Nonce是一个32位的二进制数字,因此它的取值范围就是0到21.47亿。那么命中target就是一个穷举的数学过程了,一个矿机可能幸运很快算出来,也有可能算满了21.47亿次都不能命中,这时候框架就得重新同步区块链数据,重新计算。这就是区块链技术里的工作量证明,可见一个区块产生是相当的麻烦和困难的。