与传统银行和支付系统不同,比特币系统是以去中心化信任为基础的。由于比特币系统中没有中央权威信任机构,信任成了比特币节点之间的一种突出的特性。
概述
如上图所示,我们可以看到比特币系统由用户(用户通过密钥控制钱包)、交易(每一笔交易都会被广播到整个比特币网络)和矿工(通过竞争计算生成在每个节点达成共识的区块链,区块链是一个分布式的公共权威账簿,包含了比特币网络发生的所有的交易)组成。
交易
比特币的交易就像是复式记账中的行,每笔交易包含一个或多个输入,产生一个或多个输出。一个或多个输入的总金额和一个或多个输出总金额的差值就是矿工的手续费。
当一笔比特币交易产生时,节点会将这笔交易广播给所有比特币节点,让所有比特币节点同时记录这笔交易,并通过共识算法,选出一个节点将交易记录在区块链上,让所有节点都认同这笔交易的有效性,信任这笔交易确实发生了。
交易也包含了每一笔被转移的比特币(输入)的所有权证明,它以所有者的数字签名形式存在,并可以被任何人独立验证。在比特币属于中,“消费”指的是签署一笔交易,转移一笔以前交易的比特币给另一个比特币地址所标识的新所有者。
上图第一笔交易是Joe转给Alice0.1个比特币,并支付了0.0005个比特币作为给矿工的手续费,此时这0.1个比特币的所有者变成了Alice。Alice将这0.1个比特币转了0.015给Bob,并支付了0.0005个比特币作为给矿工的手续费,得到剩余的0.0845个比特币的所有权,即找零钱的过程,以此类推(这里图中Bob给Gopesh的转账好像有问题,应该是原著中的图弄错了,Bob的交易输入总金额比输出总金额小,交易应该不会成功)。
常见交易形式
一般的交易通常包含一个支付地址和一个接收地址,这种交易也常常包含找零的过程。
另一种是集合交易,这种情况可能是一笔较大额的支付,需要多个不同金额的比特币才能支付。类似现实生活中一个橡皮擦居然卖100,我只能摸摸包,一张50的,两张20的,一张10块的,还好能凑足100,我就买了个价值100块的,为了举例说明的高端商务橡皮擦。
还有一种是一个输入多个输出,一笔钱转给多个人的情况。比如思聪哥高兴,拿出100w,给10个人分了。
创建交易输出
交易输出会被创建成为一个包含这笔数额的脚本的形式,只能在提供给脚本一个解答后才能兑换里面的比特币。以之前Alice转给Bob0.015个比特币为例,Alice转给Bob一笔比特币的交易输出会包含一个脚本,这个脚本说“谁能拿出一个签名和Bob的公开地址匹配上,谁就能使用这个交易输出”。因为只有经过Bob的私钥签名的信息才能匹配这个地址(非对称加密的特点之一,数字签名),所以只有保存着Bob的地址的钱包才能使用这个交易输出。这个交易还包含另一个交易输出,即给Alice的找零。所以这笔交易包含两个支付,一个支付给Bob,一个支付给Alice自己。另外,为了让这笔交易尽快被网络处理,Alice的钱包程序会多付一小笔费用。这不是明显的包含在交易中的,而是通过输入和输出的差值(除找零外)所隐含的。
挖矿
上述的Alice转给Bob比特币的交易通过P2P网络在比特币网络中传播开来。但只有通过被称为“挖矿”的过程验证,并且加入到一个区块中之后,这笔交易才会成为比特币公共账簿(区块链)中的一部分。
比特币的信任是建立在计算的基础之上。交易被验证并放入到区块中需要极大的计算量才能完成,但只需要少量计算就能验证他们已经被证明加入到区块链中。挖矿在比特币系统中有两个作用:
- 挖矿过程会构建出新区块,这时会创造出新的比特币。这和中央银行印发新的货币一样。每个区块创造的比特币数量是稳定的,但会随着时间推移而减少。
- 挖矿创建信任。挖矿确保只有在经过大量计算后才能验证交易并将其放入区块中。想要推翻这些验证过的交易,需要推翻所有的交易记录,也就意味着需要重新进行挖矿过程,进行更大量的计算才能完成,这个难度大到不可能完成。所以区块越多,以为着更多的信任。
挖矿的过程可以简单描述为所有节点共同参与一个很难的数学计算,只有算出答案的人才有权力将验证过的交易放入区块中,并获得产生区块而创造出的新比特币。这个数据计算题的难度是动态调整的,以达到大约10分钟就可以被解决。比特币中的这个数学计算题是基于哈希加密算法的,这使得这个数学计算题难以求解,但很容易验证解答正确与否。
区块中的挖矿交易记录
网络中产生的比特币交易必须被加入到整个比特币公开账簿(区块链)中后,才会被认为是有效的。平均每10分钟,矿工会将自上一个区块产生后所发生的所有交易打包进一个新区块中。新交易会不断通过各种比特币钱包程序流入到比特币网络中,当比特币网络中的节点(矿工)看到这些交易后,会先将它们放到各自独立维护的临时的未验证交易池中。当矿工构建新区块时,会将未验证交易池中的交易拿出来验证,并打包到新区块中,然后通过成为第一个计算出一道很难的数学难题(也叫工作量证明)后,得到将区块加入到区块链中的权力,并把这个区块加入到区块链中,得到相应的新创造出的比特币作为奖励。
这些交易被加入到新区块时,会以手续费高的优先及其它策略进行排序,优先打包手续费高的,或其它策略选出来的交易。当一个矿工收到新区块时,这就意味着有人计算出了当前数学难题的答案,它会立即开始下一个新区块的创建。它会将之前的交易和这个新区块的数字指纹放在一起构建新的区块。