前不久推出的比特币 0.9 版里面加入了一个小白们期待已久的新功能:能够自行选择支付后的找零地址。对于这个功能的加入,本聪大叔不知道会不会啼笑皆非地说道:“It’s not a bug; it’s a feature!”网络
要想理解比特币的找零机制,还得先从比特币的交易原理提及。设计
地狱天使的借记卡
试着把比特币地址想象成一张你平时到便利店购物时用的借记卡。你提着选好的东西来到收银台,看着秀色可餐的收银台美眉计算出所要付的总额,而后像以往那样将卡一刷,正要输入密码确认时,你忽然发现你卡上的钱将会被清空!对象
“我去,大家这竟然是一家黑店?!”图片
“先生您多虑了,这是咱们公司针对您这样的高端用户所提供的一项特殊服务。您能够选择如下几种收款方式:(1)将零钱发回你如今的账户上;(2)新建立一个账户并将零钱发送过去;(3)什么都不说直接将零钱发送至支付终端的公司……”资源
是否是越听越糊涂了?不过,这就是比特币交易的基本工做方式。试图用网银或者借记卡的经验来理解比特币容易形成一些误解。幸运的是,古老的现金交易方式可让咱们更好的来解释比特币的原理。get
比特币是电子版的现金
比特币与现金的关系源远流长。实际上,本聪大叔在创世论文中开门见山地将比特币描述为一种彻底经过点对点技术实现的电子现金系统。理解比特币与现金的关系,对于理解找零地址相当重要。it
每一张纸币有着固定的面额,相同面额的可能也会有多张。在这人心不古的年代,纸币东放一张西扔一张明显不是个好习惯,这时候你应该找个钱包把纸币装起来。而在比特币的世界里,将各个比特币保存起来的东东就是比特币地址,其关系以下(本聪大叔比较低调,因此钱包也是实用主义为主,一个信封就搞定了XD):
每个地址能够装至少零枚比特币,多则无上限。(哦不对,多则为 2100 万的比特币总上限,不过全放一块的话估计这玩意也没其它人用了……)与纸币面额稍有不一样的是,比特币中这被称为“未花费输出”,比特币地址会计算全部的未花费输出,并在相应的地方显示出当前地址的总额。io
而比特币网络的目的,就是确保未花费输出经过交易转移到其它的地址上去。比特币
比特币交易如何工做的
假设 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