举个简单的例子A 拥有 5 个比特币,那么意味着之前有一个交易把这 5 个比特币转入到了 A 的地址,而这 5 个比特币即是未消费的交易输出。 现在 A 要发起转账交易,将这 5 个比特币转给 B。那么 A 需要把上一个交易输出的比特币作为新交易的输入,简单而言(其具体流程涉及解锁脚本、哈希算法等不作细说) A 用私钥从输出为 A 的地址的交易中取出 5 个比特币,并用 A 的私钥 B 的公钥从 A 的地址转到 B 的地址的新交易进行签名,交易完成 B 的钱包地址便有了 5 个比特币为新的未消费的交易输出,而这 5 个比特币只有 B 的私钥才能打开。 从以上流程我们可以看出, 每一笔比特币都源自上一个交易,可以一直向上进行追溯,追溯到源头的比特币都有一种特殊的交易,即比特币矿工通过挖矿而获得奖励的创币交易。比如一个矿工挖到了 10 个比特币,那么这个特殊交易的输入是 0,UTXO 便是 10。 看完了 UTXO 的交易流程,我们再来看看最为常见的账户余额体系交易流程。 再举一个例子A 的账户拥有 10 元钱,B 的账户拥有 2 元钱。A 要给 B 转账 5 元。那么操作流程即为,后台系统在 A 账户余额里面减去 5 元,在 B 的账户余额里面增加 5 元。最终,A 的账户余额为 5 元,B 的账户余额为 7 元。 表中的账户余额模型仅限于传统账户体系,不适用于以太坊 基于账户余额模型的体系非常容易理解,我们日常生活中所见的银行账户、支付账户普遍是采用这样的形式。另外,在 Token 范式里同样也有账户余额模型,有智能合约功能的以太坊便是采用这种形式。 而比特币所采用的 UTXO 模型实际上没有余额的概念,参与交易的只能是「整个」比特币,不能是「半个」比特币,且输入金额必须大于等于输出金额。不同时期的比特币价格不一样,如果比特币面额与交易金额不一致,那么多余的金额需要通过「找零」的方式还给付款人(不考虑手续费的话)。 比如 A 的某个地址有 3 个比特币,要转给 B 2.5 个,那么这次交易需要将 A 该地址上的 3 个比特币全部签名交易出去,其中 2.5 个转给 B,剩下的 0.5 个转到 A 另一个地址上,这个「找零」的操作实际上是 UTXO 模型自己进行处理的。这里面的 2.5 便是 B 该地址的 UTXO,0.5 是 A 另一个地址的 UTXO。那么把 A 所有地址上的 UTXO 都找出来,实际上也就是比特币钱包的「余额」了。 中本聪发明比特币的目标是创建一个点对点的电子现金,UTXO 的设计其实可以看成是借鉴了现金的思路:比如我们可能在这个口袋里装点现金,在那个抽屉里放点现金,这种情况下便不存在一个账户,你放在各处的现金加起来就是你所有的钱。 (责任编辑:admin) |