浅析比特币的找零机制

前不久推出的比特币 0.9 版里面加入了一个小白们期待已久的新功能:可以自行选择支付后的找零地址。对于这个功能的加入,本聪大叔不知道会不会哭笑不得地说道:“It’s not a bug; it’s a feature!”

要想理解比特币的找零机制,还得先从比特币的交易原理说起。

地狱天使的借记卡
试着把比特币地址想象成一张你平时到便利店购物时用的借记卡。你提着选好的东西来到收银台,看着秀色可餐的收银台美眉计算出所要付的总额,然后像以往那样将卡一刷,正要输入密码确认时,你突然发现你卡上的钱将会被清空!

“我去,你们这居然是一家黑店?!”

“先生您多虑了,这是我们公司针对您这样的高端用户所提供的一项特殊服务。您可以选择以下几种收款方式:(1)将零钱发回你现在的帐户上;(2)新创建一个帐户并将零钱发送过去;(3)什么都不说直接将零钱发送至支付终端的公司……”

是不是越听越糊涂了?不过,这就是比特币交易的基本工作方式。试图用网银或者借记卡的经验来理解比特币容易造成一些误解。幸运的是,古老的现金交易方式可以让我们更好的来解释比特币的原理。

比特币是电子版的现金
比特币与现金的关系源远流长。实际上,本聪大叔在创世论文中开门见山地将比特币描述为一种完全通过点对点技术实现的电子现金系统。理解比特币与现金的关系,对于理解找零地址至关重要。

每一张纸币有着固定的面额,相同面额的可能也会有多张。在这人心不古的年代,纸币东放一张西扔一张明显不是个好习惯,这时候你应该找个钱包把纸币装起来。而在比特币的世界里,将各个比特币保存起来的东东就是比特币地址,其关系如下(本聪大叔比较低调,所以钱包也是实用主义为主,一个信封就搞定了XD):
这里写图片描述
每一个地址可以装至少零枚比特币,多则无上限。(哦不对,多则为 2100 万的比特币总上限,不过全放一块的话估计这玩意也没其它人用了……)与纸币面额稍有不同的是,比特币中这被称为“未花费输出”,比特币地址会计算所有的未花费输出,并在相应的地方显示出当前地址的总额。

而比特币网络的目的,就是确保未花费输出通过交易转移到其它的地址上去。

比特币交易如何工作的
假设 A 拥有一个比特币地址,里面包含着还没有花费过的 10 个比特币。B 也有一个比特币地址,里面一分钱也没有。当 A 想付给 B 10 个比特币时,A 地址里的未花费输出变为零,而 B 的会变为 10 BTC。
这里写图片描述
(这在现实世界里面是非常正常的事情,不过在大家习惯了 Ctrl+C 和 Ctrl+V 的数码世界里,要实现一份不可复制的信息转移系统其实是件不容易的事情。更多关于比特币防止重复消费的原理,请参考这里。)
(如果你还不理解复制粘贴有多容易,也许你看到这条文字就能明白了……总之,插个广告,欢迎打赏 1MzziGBa7tNNzMwVJMPEjAfM1wRcvSGZu5 ^_^)
如果 A 想支付的金额与所拥有的相同,自然不会存在需要找零钱的问题。不过当手头的金额比要支付的大时,找零自然也是天经地义的事情。假设 A 的地址上有 35 个比特币,当 A 想支付给 8 个比特币给 B 时,只需要使用包含着 10 个比特币的那一笔未消费支出,设置好要支持的金额,打零剩下的 2 个比特币则返回给 A,以便 A 在将来可以继续使用。当然,如果你是比特土豪可以随意将手头上的币一把甩出去然后说句“Keep the change”就直接闪人:P
这里写图片描述
实际上,比特币在交易时会把消费时所用的地址(消费地址)的余额置零。当需付的金额小于可用余额时,交易信息中必须告诉比特币网络零钱将被发送至的地址,即“找零地址”。找零地址可能是也可能不是原先消费时所用的地址。除此之外消费地址所留下的剩余款项将由网络作为交易费的支出支付给矿工。
这里写图片描述
在上面的例子里,A 可以选择将找回的零钱发送到一个新创建的找零地址上,或者将原先发送的地址设置为找零地址。将零钱返回原先的地址虽然对 A 而言方便了管理,不过这可能会造成 A 的隐私性降低,一定程度上还可能会影响到 B 的匿名性。

找零地址和隐私保护
根据设计,每一笔比特币交易将在一个称为“Blockchain”的全球性的公共总账上永久可见,这就意味着任何人都可以随时在上面进行跟踪查询。通过将某个比特币地址与其使用者关联起来,好事者都可以开始绘制关于这个人与他人之间的资金转移的关系图。而通过将找回的零钱发送至一个新创建的地址,可以让这种追踪变得更加困难。

要理解这一点,可以参考下图。假设从地址 A 发送比特币到地址 B,如果零钱返回地址 A,则 Blockchain 会揭示控制着地址 A 的付费者向控制着地址 B 的人支付了一笔钱。同样的道理,如果有两个或两个以上地址参与其中,任何涉及到这个接收零钱的找零地址都会揭示 A 作为支付方的交易。假如某个控制着的任何接收地址或付款地址的人的身份成为众所周知的对象时,其他有过交易往来的各方的身份也有可能被推断出来。
这里写图片描述
现在想象一下,地址 A 发起付款到地址 B,但此时将找零地址更改为新生成的地址 C。如果没有进一步的信息,其它人所能知道的是,有一个交易拆分了地址 A 的余额至地址 B 和 C。而地址 B 或 C 的主人可能是也可能不是 A。由于新地址 C 的加入,让整个交易的真相变得更加扑朔离迷:哪一个地址代表着被支付方,哪一个地址代表着找回的零钱呢?
这里写图片描述
当所有各方都将零钱发送至新创建的地址时,要想将个人身份与地址相联就必须收集更多的信息,并耗费更多的资源。像 SilkRoad 或者 MtGox 这样摊上大事的时候他们的地址会被成千上万双群众的眼睛紧紧地盯着,毕竟不少人身家财产都放在上面。
小隐隐于野,中隐隐于市,大隐隐于朝。明白了这一点,放能体会到本聪大叔当初敲代码时的良苦用心。当然,新版中将找零地址的设定权交给用户自然是一件好事,只是,我们不应该忘记其设计初衷。

原文地址:http://www.8btc.com/bitcoin-change-addresses-explanation

二师兄-公众号-程序新视界 CSDN认证博客专家 Spring 架构 Java
个人公众号【程序新视界】,一个硬技术,软实力同步提升的平台。《Spring Boo技术内幕:架构设计与实现原理》作者,《深入以太坊智能合约开发》联合作者之一。主要从事于三方支付行业。
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值