[转]浅析比特币的找零机制

本文转自:https://www.8btc.com/article/9945

前言:守币比守寡难其实是有多层含意的:一方面在牛市冲天洛阳币贵时难免“菊花虽可贵,高价亦可抛”,另一方面在熊市低迷无论是割软妹币还是割比特币对小白而言都难免心头长痛不已,此外,在门头沟黑幕被逐渐揭露以及国内交易币久久没有提供准备金证明的情况下,又让不少人改名换姓变身买买提。不过即使提到自己的钱包里,还是需要小心比特币“坑爹”的找零机制,否则又将是晚节不保,丢币却又无处可寻。本文将对比特币的打零机制加以解释。

前不久推出的比特币 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 这样摊上大事的时候他们的地址会被成千上万双群众的眼睛紧紧地盯着,毕竟不少人身家财产都放在上面。而像你我这样的泯泯众生,虽然以实际行动向苍老师捐赠比特币以表敬意是件君子袒蛋蛋的举动,不过这个时候换用个鲜为人知的地址更显出我辈置功名于身后的豁达。

小隐隐于野,中隐隐于市,大隐隐于朝。明白了这一点,放能体会到本聪大叔当初敲代码时的良苦用心。当然,新版中将找零地址的设定权交给用户自然是一件好事,只是,我们不应该忘记其设计初衷。

在这暮春雨纷的时节里,谨以此文,向依旧埋名隐姓笑看红尘的本聪大叔致敬。

 

posted on 2018-12-21 17:34  freeliver54  阅读(422)  评论(0编辑  收藏  举报

导航