酸饼博客
关注区块链技术应用与数字货币

区块链入门100问(23):如何理解比特币的找零机制?

我们用银行、微信或者支付宝进行转账的时候,钱转出去,账号上减掉转出去的金额,剩下的是余额。

但比特币系统没有账号、余额这些概念,只有很多的密钥对。通过私钥生成公钥,公钥生成比特币地址,比特币交易往比特币地址转账,生成新的UTXO(未花费输出)。

一个人所拥有的比特币金额,就是他所掌握的密钥对所生成的一个或多个比特币地址,所接收到的UTXO的值之和。

在使用这些UTXO的时候,需要发起比特币交易,并且用私钥对交易进行签名。由于比特币没有账户系统,无法像我们现实生活中的银行一样在账户上剪掉转账的金额,直接计算出余额。在比特币系统中,使用的是一种“找零”机制。

比特币的“找零”机制,有点像古代用银子进行支付的过程。假设你有几块不同重量的银子,随便举个例子,分别是1两、2两、5两,10两(瞎编的)。如果你向商家支付1两银子,那可以直接给他1两的那块银子;如果要支付4两,那你得把5两用剪刀来剪出4两银子给对方,剩下1两的零钱;如果要付17.5两,你得把所有银子堆到一起,然后拿一块翦出0.5两作为留给自己的零钱,其他的给对方。

比特币的找零机制跟上面的例子很类似。当一个用户要支付比特币时,通过选择可用的UTXO来构建交易,把这些UTXO汇集起来,一部分作为交易输出发给接收方,剩下的作为另一个交易输出转账给自己的比特币地址。

通过UTXO构建交易进行转账的算法有很多种,常见的一种算法是“贪心算法”。下面用简单的伪代码阐述比特币转账、找零的实现过程:

1)需要转出的金额定义为amout
2)找出值大于amount的UTXO集合里面最小的那个:min_value。假设找到这样的一个UTXO,则用这个UTXO作为交易输入,交易输出则是分为两个,一个是给对方转账amout数量的UTXO,另一个是将剩下的作为另一个交易输出,其收款地址是自己的比特币地址。
3)如果没有大于amount的UTXO,则把UTXO按从小到大的顺序,加入到一个UTXO集合里,直到这些UTXO之和(total_utxo)大于amount。如果total_utxo小于amount,则可支付金额不足,交易失败;反之,则是把集合里的UTXO汇集起来,就像一堆零碎银子汇集起来,重新锻造,然后生成amount数量的utxo作为交易输出,转给收款方,剩下的扣掉交易手续费之和,剩下的是零钱,转账给自己。

以上的表述并不完整,若有错误之处,欢迎指正。

未经允许不得转载:酸饼 » 区块链入门100问(23):如何理解比特币的找零机制?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

留言联系关于酸饼