区块链应用开发指南:业务场景剖析与实战
上QQ阅读APP看书,第一时间看更新

1.15.3 比特币中的交易

我们每个人的银行账户都有一个账户余额的概念,可以直接知道账户中有多少钱。发生转账的时候,转出则导致账户余额变少,转入则导致账户余额变多。比特币网络和传统的银行记账不太一样,比特币的每一笔交易记录的是转账数量,具体来说,是从一个或多个账户转账到一个或多个账户。比特币的区块链数据库中存储的就是这样的一笔一笔的转账记录。如果需要知道一个账户的余额,那么就把所有转入这个账户的比特币数量减去所有转出的比特币数量即可。

在比特币转账的时候,有一个传统的银行账户余额系统没有出现过的问题。由于一个账户里没有余额,所以一个账户发起转账的时候,区块链数据中只记录有这个账户的转入记录。我们没办法像传统银行一样,直接基于一个余额扣掉转出数量即可。这时候我们只能说要把这个账户中的某几条转入记录一起转出去。这就遇到一个问题,几个转入记录的数量不会正好等于转出数量,通常都是多于转出数量。比特币解决这个问题的办法非常巧妙,由于比特币支持一笔转账中转给多个账户,所以可以在转出账户中加上自己的这个地址,把多余的部分再转回来。等于自己给自己发起了一笔转账。

举个例子,A账户历史上一共收到过三笔转账,分别是2枚、2枚、3枚比特币。这时候账户A需要转账给B账户6枚比特币。处理方法就是以这三笔转账记录为依据,生成一个新的转账记录,这个转账记录中有两条信息,一条是给B账户6枚比特币,一条是给A账户也就是是自己1枚比特币。

由于转账记录不是简单的一对一,所以比特币的转账记录使用了一个类似Foth编程语言的脚本语言,可以写简单的逻辑。Foth语言是查尔斯·H.摩尔(Charles H. Moore)在1970年发明的,比特币在这里借用了这种语言的语法。