本文目录
01. 比特币记账方法
02. 交易链
03. 比特币系统中的找零
04. UTXO
在精读「Mastering Bitcoin」1中, 提到比特币不仅是一个电子现金(系统),也是一个公开的账本,这账本上记录了每笔交易的信息。用比特币交易,其实就跟我们用人民币或者美元交易买卖东西一样。作者给比特币交易行为的定义是:
In simple terms, a transaction tells the network that the owner of some bitcoin value has authorized the transfer of that value to another owner. The new owner can now spend the bitcoin by creating another transaction that authorizes transfer to another owner, and so on , in a chain of ownership. (简单来说,一笔转账告诉网络,这些比特币的所有者授权将这些比特币转给另外一个所有者。新的所有者可以通过创建一笔新的交易,授权转账给其他所有者,来花费这比特币,以此类推。)
那么,在比特币系统里,是以什么样的形式将这些交易记录下来的呢?
01. 比特币的记账方法
1.1 复式记账
跟传统记账一样,在比特币系统中也对交易采用复式记账的方法 (double-entry bookkeeping ledger),直白点翻译就是双入口记账。复式记账,简单理解就是以下两点[1]:
- 每一笔交易都要在至少两个账户上进行记录。
- 每一笔debit必须有一笔credit与之相匹配。(每单笔交易转账及所有交易转账总和都需要遵守基本会计等式 资产(Assets) = 负债 (Liabiliteis) + 所有者权益 (Equity))
每一笔交易都要至少在两个账户上进行记录,在会计记账中有三个基本账户也就是资产账户、负债账户以及所有者权益账户,跟会计等式资产(Assets) = 负债 (Liabiliteis) + 所有者权益 (Equity)是一一对应的。那么单独每个账户又是以怎么样的方式呈现出来的呢?方法是每个账户都需要记录这个账户的debits和credits(见上图):
- debits,借出给其他账户,记在账户左边。
- credits,从其他账户借入,记在账户右边。
1.2 比特币的复式记账
说完复式记账,再回到《Mastering Bitcoin》(精通比特币) ,在书中,作者给出的记账例子如下面那张截图;一笔交易中可以包含多个Input和output。这里的Input和output如何理解呢?
Each transaction contains one or more "inputs", which are like debits against a bitcoin account. On the other side of the transaction, there are one or more "outputs", which are like credits added to a bitcoin account. (每笔交易都包含一个或多个“输入”,就像存入比特币在比特币账户里。同样的,每笔交易也都包含一个或多个“输出”,就像在一个比特币账户增加一笔贷款。)
总结一下:
In summary, transactions move value from transaction inputs to transaction outputs. 交易是将价值从Input移到output。
通过作者这句话,可以看到比特币系统其实执行的是价值交易。更进一步地,可以理解为价值的输入和输出。
02.交易链(Transaction Chains)
上笔交易和下笔交易之间会形成一个“无形的链”:
The transactions form a chain, where the inputs from the latest transaction correspond to outputs from previous transctions. (这些交易会形成一个“链”,这个“链”上的input来自上一笔交易里相应的output,而这output又来自更早的一笔交易)。
作者用一张图形象的说明了什么是“交易链”。
- 在第一个笔交易中,Joe转给Alice 0.1005BTC, 在output这一边,有Alice地址里的0.1BTC以及0.005BTC的转账费用,加起来等于左边input的0.1005BTC。
-
在第二笔交易中,Alice转给Bob 0.0150BTC,output这一边里Bob钱包里的0.015BTC,加上Alice钱包里的0.0845BTC,再加上转账费用0.0005BTC等于左边input Alice钱包里的总额0.1BTC。
对于同一个地址而言,上一笔交易中的output将会作为下一笔交易的输入,这样就形成了一个交易链。
03. 找零[2]
在上面的交易截图中,我们可以看到这几笔交易里有spent、unspent和change。change为找零地址,为什么会有找零地址呢?
This is beacuse transaction inputs, like currency notes, cannot be divided. (这是因为交易输入就和纸币一样,不可以被分割)
比特币系统中的找零概念和平时用现金交易的找零概念是一样的,如果你要买一个1块钱的包子,但是你身上只有一张20块钱的纸币,这个时候就需要包子铺老板找给你19元零钱。
Inputs | Outputs |
---|---|
20元 | 1 元 (给包子铺老板) |
10 元 (unspent) | |
5元 (unspent) | |
1元 (unspent) | |
1元 (unspent) | |
1元 (unspent) | |
1元 (unspent) |
在比特币系统中,每一个input就相当于一定面值的纸币。如果一笔交易中只包含一个Input,为20个BTC,当这个地址向其他地址支付1个BTC时候,就需要对方找还19个BTC。不同的是,比特币不像纸币那样只有几种面值固定的纸币,比特币系统可以随时创建“新面值”。
Inputs | Outputs |
---|---|
20BTC-被销毁 | 1BTC (spent) |
19BTC (新创建的面值,找还给你) |
出于保护隐私的考虑,找零地址没必要跟原先的付款地址一样,通常钱包会生成一个新的找零地址。
在真实应用中,并不会在找零地址旁边标注change的字样,如下图显示(截图来自blockchain.info上的某笔交易),
04. 比特币也有面值: UTXO
比特币系统可以随时创建“新面值”来用于找零,而且这“零钱”可以用于下次交易。在每个输出(output)记录里,可消费的比特币数量会被标记成unspent,这样的输出有一个专门的名字叫做Unspent Transaction Outputs(UTXO)。可以把unspent的输出理解为面值不同的、可用于下次消费的纸币,就好像10元面值纸币、100元面值纸币那样。
参考文献
[1] Mastering Bitcoin 第二版 https://github.com/bitcoinbook/bitcoinbook
[2] http://learnmeabitcoin.com
ChangeLog
- 20180316 标题更改为“小白学比特币”, 增加参考文献
- 20180315 修改标题