上一章对比特币白皮书的简化支付认证进行了只字不差地研读,点此回顾简化支付认证。
Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in transfer.
虽然可以处理每一个单个的电子现金的交易,但是每个单独的电子现金都发起一次独立的交易显然是很笨拙的做法。
这就好比手里有10张1元的纸币,去买一个10块钱的东西。最好的办法就是一次性直接将10张纸币给到卖家,而不是分10次交易,每次交易给1块钱。
To allow value to be split and combined, transactions contain multiple inputs and outputs.
为了让每一个比特币的价值可以得到分割与合并,一笔交易就需要包含若干输入和输出。
Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender.
一般来讲,一笔交易的输入可能来自一个大数额或者若干小数额汇总一起的入账,而交易的输出大多数情况下就分为两种:一个是直接支付给收款人,第二个是找零给付款人(如果有支付完剩余的话)。
就好像用100元纸币去买10块钱的东西,10块支付给卖家,90元找零给自己。
It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here.
值得注意的是,一笔交易是由之前的多笔交易决定的,这些交易是又再之前的多笔交易决定的,也就是所谓的“扇出”,在这里不是问题。
扇出:电子工程术语。表示一个输出由多个输入来决定。
There is never the need to extract a complete standalone copy of a transaction’s history.
没有必要把一个币的历史交易记录都找出来算旧账。
不管你现在所拥有的比特币之前的交易记录如何,如何从矿工挖出(区块奖励)一步一步到你的手里,都不会影响你正常使用。就好像现在我们从银行ATM里取出了纸币,不管这张纸币从造币厂到从ATM取出经历了怎样的辗转,我们都可以正常使用。
这一章主要讲了比特币的面额(价值)是可以合并和分解的,可以让交易更方便,但是这一章更重要的目的是介绍比特币系统独特的记账体系,以及一个非常重要的概念——UTXO(Unspent transaction output)。
比特币作为一个去中心化的公开账本,和我们传统采用的“余额式记账”方法有很大的不同。余额记账更符合我们的直觉,而比特币的“记币记账”有一点反直觉。
先来看日常用的最多的余额记账方法。比如消费者A现在有1000元,出去打车花费50元,买衣服花费300元,吃饭花费100元,看电影花费100元,那么A的余额还剩450元(1000-50-300-100-100);同理,商家B有1000元并且经营一家餐厅,一天有50个顾客消费,平均每个顾客消费100元,那么B的余额就是6000元(1000+50*100)。这个就是日常使用的余额记账法,简单明了。
比特币系统的账本公开透明,矿工都有记账的权利,矿工的记账只是记录每一个地址的交易信息,而并不计算地址的余额(也就是一个地址还有多少btc),平时打开比特币钱包看到的余额也是钱包软件(而不是矿工)根据账户的UTXO而计算出来的。作为和用户直接接触的钱包界面,易用性肯定是必须考虑的问题,而我们也必须知道,比特币采取的并不是“余额记账”,而是“记币记账”。
A最先计算出区块的随机数并生成区块,获得12.5个btc的区块奖励,那么A的地址现在就有12.5个btc。
如图所示,A得到12.5个btc的挖矿奖励之后,经过买车买房到卖车卖房和打工这些过程,现在A还有多少btc呢?这个时候只需要计算属于A的UTXO(未花费出去的btc,即标红部分)就可以了。现在A一共有24btc,从钱包中看到的余额,也是自动计算出来的。这个就好像清点钱包的过程,A现在钱包中一共有1张20btc钞票,1张1.5btc钞票,1张1btc钞票,3张0.5btc钞票,合计24btc。我们很容易想成最后会汇总成1张24btc的钞票,实际上却并不是。这个过程就是比特币价值或者面额的分割(splitting value)。
现在A可以利用这些零散的UTXO(相当于零钱)而不是一张24btc的整钱继续消费。比如A现在想买一个价值1.5btc的汽车,可能会有以下三种方案:
- 直接将那个1.5btc的UTXO支付出去
- 将三个0.5btc的UTXO支付出去
- 将1个1btc和1个0.5btc的UTXO支付出去
按照我们通常的想法,把零钱花出去,最有可能采取第二种方案了。而钱包也会采取他认为最合适的方案(可能是上述任何一种),而不会将20个btc的UTXO支付出去,还要再找零。这个过程就是比特币价值或者面额的合并(combining value)。
我们可以把UTXO想象成零钱,只不过它是可以任意数值。它静静躺在钱包里,不会自动合并,也不会自动拆分。在需要交易的时候,钱包会选择最合适的方案,尽可能不用找零或者将更多的零钱花出去。
这就是比特币价值的合并与分割,合并和分割之后成为UTXO,在不断合并和分割的过程中,UTXO数量也实现了动态平衡。
相关文章:
只字不差地阅读比特币原版白皮书(一)——摘要
只字不差地阅读比特币原版白皮书(二)——介绍篇
只字不差地阅读比特币原版白皮书(三)——交易篇(Transactions)
只字不差地阅读比特币原版白皮书(四)——时间戳(Timestamp Server)
只字不差地阅读比特币原版白皮书(五)——工作量证明(Proof-of-Work)
只字不差地阅读比特币原版白皮书(六)——网络(Network)
只字不差地阅读比特币原版白皮书(七)——激励篇(Incentive)
只字不差地阅读比特币原版白皮书(八)——回收磁盘空间(Reclaiming Disk Space)
只字不差地阅读比特币原版白皮书(九)——简化支付验证(Simplified Payment Verification)
加密货币和区块链是什么?
什么是哈希(Hash)?
什么是数字签名(digital signatures)?
石油和比特币能被挖完吗?