淺析比特幣的找零機制

前不久推出的比特幣 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

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息