1. 程式人生 > >比特幣的找零機制是什麼?

比特幣的找零機制是什麼?

比特幣的找零機制一直讓人有些迷惑,明明只向一個地址傳送了比特幣為什麼 blockchain 上面的顯示的有時是1個地址對多個地址,有時是多個地址對1個地址,有時又顯示多個地址對多個地址?

為什麼比特幣資深使用者要提醒大家當比特幣錢包交易100次以上時再次交易後要重新備份錢包,恢復以前的錢包備份有可能會遭遇損失?

是的,這一切都是因為比特幣的找零(Change)機制。本文參考 巴位元(www.8btc.com) ,詳細為大家解釋一下比特幣的找零機制是怎樣運作的。

比特幣交易的規則:將使用者有權使用的若干比特幣匯款地址上的之前交易的輸出金額作為一次交易的輸入,若干比特幣收款地址上增加的交易金額作為本次交易的輸出。輸入金額必須大於等於輸出金額,超出部分作為本次交易的手續費。手續費沒有輸出地址,獎勵給將本次交易記賬成功的礦工。

因為有時作為輸出的金額超過了使用者想要支付的金額。在這種情況下,比特幣客戶端會建立一個新的比特幣地址,並把差額傳送回這個地址,這就是比特幣的找零機制。

比如你想從商店買一塊錢的棒棒糖,你開啟你的錢包,發現裡面只有一張20元面值的人民幣。你能支付的最小金額是多少呢?當然不是1塊錢,你不能把這張20元錢的紙幣撕下20分之1再交給營業員。你必須把這張20元面值的人民幣全部交給收銀員,然後因為你只需要支付1元錢,收銀員會找給你19元。

除了中央銀行,法律禁止任何人自己發行人民幣,所以人民幣都是固定面額的。這次交易的流程看上去就像下面這樣:

輸入:

20元 人民幣

輸出:

1元 給 收銀員

10元 給 你

5元 給 你

1元 給 你

1元 給 你

1元 給 你

1元 給 你

因為我們每天都這麼進行一手交錢一手交貨的交易,所以上面這個流程好像已經成為一種天經地義的事情。讓我們打破這種思維慣性,看看會發生什麼事。

現在讓我們想象一下這樣的場景:存在這樣的一個系統,它允許收銀員(或者其他什麼人都可以)切實地銷燬任意數量的真實貨幣(人民幣),並且允許收銀員打印出任意金額的真實貨幣作為替代。不一定是10元面額或者20元面額,如果需要的話,比如打印出 18.94537208 元面值的人民幣。

同時為了防止雙重支付和偽造,必須確保在任何時候,新建立的貨幣金額與被銷燬的貨幣金額是完全一樣的。在這種情況下,你的交易可能看起來像下面這樣:

輸入:

你的 20元 人民幣 被銷燬

輸出:

新發行的 1元 給 收銀員

新發行的 19元 給 你

這就是比特幣的運作機制。與法定貨幣不同,我們習慣把這種方式稱之為交易單元的輸入和輸出。

當你“支付”比特幣,並建立一次交易時,你必須將你支付地址上可供支付的金額(來自該地址之前交易的輸出)作為新交易的輸入。這樣的地址可能不止一個,你的比特幣錢包會暗自尋找你錢包中所有可供支付的輸出金額(可能來自於不同地址),並把它們加在一起顯示為錢包可用餘額。

所以,當你的比特幣錢包說你有130個BTC時,它只是意味著你的所有地址上可供支付的交易輸出加在一起共有130個BTC。這和你的普通錢包中放著1張100元和3張10元人民幣差不多一個意思。

讓我們檢視上圖表示這次交易:0a1c0b1ec0ac55a45b1555202daf2e08419648096f5bcc4267898d420dffef87,比特幣客戶端將 19f 地址上存在的之前某次交易的輸出:10.89 BTC全部支付出去,實際交易金額為 10 BTC支付給 1KM這個地址, 0.89 BTC作為找零返還給 1HP 這個地址。

就像一個人不能只花20元人民幣中的1元錢一樣,比特幣客戶端也不能只支付 10.89 BTC中的 10 BTC給對方。

10.89 BTC的前次交易輸出金額將全部作為新交易的輸入金額,並在這個過程中產生了兩個新的可供支付的輸出金額,10 BTC給1KM,0.89 BTC給1HP,兩個輸出金額加在一起正好等於 10.89 BTC。

19f 地址上面存在過的這個10.89 BTC可供支付的輸出金額在這次交易完成後將被徹底摧毀,整個比特幣網路將防止它被再次支付。

而那兩個新建立的可供支付的輸出金額現在可以成為下次交易的輸入了。

這次交易中,交易手續費為0。如果交易中支付手續費的話,輸入和輸出將會產生差額。(比如,輸入 10.89 BTC,輸出 10.88 BTC,交易手續費 = 0.01 BTC)

比特幣錢包檔案中包含了所有找零地址的私鑰,它們可以正常的接收或者傳送比特幣。但是,比特幣官方客戶端的介面上並不會把這些找零地址顯示在地址簿中,也許是為了匿名性的必要,也許是為了減少客戶的困惑,雖然這也造成很多人新的疑惑。

因為比特幣客戶端一開始只產生100個客戶專屬地址的私鑰(稱為私鑰池),在建立找零地址時會優先使用這100個地址中的某一個,但當這些地址都被使用之後,100個以外新的找零地址就會被建立。如果你只備份了一開始的100個地址的錢包,那麼在上面這種情況下恢復錢包將丟失新的找零地址。

總之,在詳細瞭解比特幣的找零機制後,你就可以正確回答本文一開始提出的問題了,讓我們一步步成為比特幣的專家吧。

相關推薦

深入淺出區塊鏈-第2講:的轉賬機制和學習區塊鏈需要掌握的7個基本名詞

  第2講:比特幣的轉賬機制和學習區塊鏈需要掌握的7個基本名詞 在第2講開始前,先簡單複習下第1講的核心內容: 記賬貨幣,是一種中心化記賬的模式; 比特幣是一種非中心化記賬機制,人人可記賬,並且具備傳遞資訊的同時同步傳遞價值。 這一切的背後都依賴於比特幣的底層技術區塊鏈

代碼分析11 存儲機制

set 數據庫 流數據 leveldb ron 組成 使用 我們 bytes 比特幣存儲機制  比特幣存儲系統由兩部分組成: kv 數據庫(levelDB)索引和普通數據文件。普通文件用於存儲區塊鏈數據,kv 數據庫用於存儲區塊鏈元數據。用於存儲區塊鏈數據的普通文件以 bl

區塊鏈: 技術驅動金融 - 第3章 的執行機制

    這一章將真正近距離地瞭解比特幣所使用的資料結構、實際指令碼及語言,會有大量的細節性資訊,極具挑戰性,但本章可以幫助我們真正懂得比特幣的本質。 3.1 比特幣的交易     比特幣的交易過程其實就是不停地創造區塊的過程。我們先看一個簡單模式的賬簿,儘管比特幣並

區塊鏈-第三章 的執行機制-普林斯頓大學課程

3.1比特幣的交易 把愛麗絲賬戶裡17個幣轉給鮑勃: 交易1是鑄造新幣的交易,沒有輸入,只有輸出。交易1的輸出是向愛麗絲轉移25個幣。現在,愛麗絲想把一些幣轉個鮑勃,她就創造了一條新的交易,在交易中她必須明確指出要轉出的幣的來源(引用之前某筆交易),在這次的交易中,愛麗絲

淺析機制

前不久推出的比特幣 0.9 版裡面加入了一個小白們期待已久的新功能:可以自行選擇支付後的找零地址。對於這個功能的加入,本聰大叔不知道會不會哭笑不得地說道:“It’s not a bug; it’s a feature!” 要想理解比特幣的找零機制,還得先從比特

機制是什麼?

比特幣的找零機制一直讓人有些迷惑,明明只向一個地址傳送了比特幣為什麼 blockchain 上面的顯示的有時是1個地址對多個地址,有時是多個地址對1個地址,有時又顯示多個地址對多個地址? 為什麼比特幣資深使用者要提醒大家當比特幣錢包交易100次以上時再次交易後要重新

開始學習開發(七)-P2P網路建立流程之生成地址對並連線到指定地址

本節繼續講解比特幣P2P網路建立流程,這節講解的執行緒為’ThreadOpenAddedConnections’,它的作用是生成地址對並連線到指定地址。 本文可以結合比特幣系統啟動的的第12步的講解來看,可以更加系統的瞭解比特幣系統啟動的過程。 P2P 網路的建立是在比特幣系統啟動的第

開始學習(六)--P2P網路建立的流程之查詢DNS節點

上節開始我們已經開始講解比特幣系統中P2P網路是如何建立的。還記得在比特幣系統啟動的的第12步的講解中,我們提到有幾個執行緒相關的處理非常重要嗎?以下內容正是基於此做了詳細的講解。由於篇幅過長,我們分幾篇文章依次道來。 P2P 網路的建立是在比特幣系統啟動的第 12 步,最後時刻呼叫 C

開始學習(五)--P2P網路建立的流程之套接字的讀取和傳送

寫在前面: 本篇文章接續 從零開始學習比特幣開發(四)–網路初始化,載入區塊鏈和錢包,匯入區塊啟動節點 從零開始學習區塊鏈技術(三)-接入比特幣網路的關鍵步驟解析、建立比特幣錢包,以及重要rpc指令 從零開始學習區塊鏈技術(二)–如何接入比特幣網路以及其原理分析 從零開始學習

開始學習開發(四)--網路初始化,載入區塊鏈和錢包,匯入區塊啟動節點

寫在前面: 本篇文章接續 從零開始學習區塊鏈技術(三)-接入比特幣網路的關鍵步驟解析、建立比特幣錢包,以及重要rpc指令 從零開始學習區塊鏈技術(二)–如何接入比特幣網路以及其原理分析 以及從零開始學習區塊鏈技術(一)–從原始碼編譯比特幣 如果這篇文章看不明白,請務必先閱讀之前的文章

機制1:記賬的方式,交易的語法,指令碼,P2PKH交易

原文連結:郭老師的備課資料 比特幣的共識機制生成了一個append-only的賬本,一旦交易在賬本中,再也不能更改。礦工——也即一些有較高計算力的節點,生成區塊,並且驗證交易是正確的(簽名是正確的、幣沒有重複花費)等。賬本和區塊鏈網路使得比特幣成為一種貨幣。在本文中,將介紹一些細節。

代碼分析4 節點發現機制

避免 失敗 活動 自己的 發現 通過 代碼分析 社區 結果 當程序第一啟動時,它並不知道任何活躍節點的ip地址。為了發現一些全節點的ip地址,他們會查詢硬編碼在比特幣內核或BitCoinJ中的,一個或多個DNS域名,在返回的結果中應該包含一個或多個DNS A記錄,裏面有一些

市場價格一直下跌,未來的市場價值歸的可能性大嗎?

連日來,比特幣一直跌跌不休。比特幣在11天內暴跌44%,一年內價值縮水80%。那麼比特幣在未來的價值是否歸零呢?   比特幣發展: 比特幣(BitCoin)是一種P2P形式的數字貨幣,最初由中本聰在2009年提出概念、設計思路、完成開源軟體的釋出,並建構了相應的P2P網路,其點對點的傳輸意味

區塊鏈:講故事告訴你的原理及運作機制

一個故事告訴你比特幣的原理及運作機制推薦:週末花時間看了一些比特幣原理相關的資料,雖然不敢說把每個細節都完全搞懂了,不過整體思路和關鍵部分的主要原理還是比較明白。寫一篇文章分享給大家。這篇文章的定位會比較科普,儘量用類比的方法將比特幣的基本原理講出來。這篇文章不會涉及演算法和

《詳解白皮書》- Incentive (挖礦獎勵機制)

激勵機制 By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. 按照慣例,每個區塊中

《詳解白皮書》- Proof-of-Work(PoW工作量證明機制)

工作量證明:要求使用者進行一些耗時適當的複雜運算,並且答案能被服務方快速驗算,以此耗用的時間、裝置、能源作為擔保成本,以確保服務與資源是被真正的需求所使用。 To implement a distributed timestamp server on a peer-to-peer basis,

開始學習--P2P 網路的建立之訊息處理上篇

現在終於,來到了我們非常非常關心比特幣訊息處理,通過比特幣訊息處理,我們會理解比特幣的協義,理解比特幣是如何同步區塊,如何傳送交易,從而建立起理解比特幣的至關重要一步。 本部分內容是如此的重要,也是相當的長,所以我們分上下兩部分來介紹具體的訊息處理。 上篇主要

程式碼分析11 儲存機制

比特幣儲存機制  比特幣儲存系統由兩部分組成: kv 資料庫(levelDB)索引和普通資料檔案。普通檔案用於儲存區塊鏈資料,kv 資料庫用於儲存區塊鏈元資料。用於儲存區塊鏈資料的普通檔案以 blk00000.dat , blk00001.dat 檔名格式組成。其中 index 目錄儲存用於儲存區塊元資料。普

開始學習開發(九)--P2P 網路建立之訊息處理中篇

P2P 網路的建立是在系統啟動的第 12 步,最後時刻呼叫 CConnman::Start 方法開始的。 恭喜你越來越接近比特幣的核心了,在上篇中,我們主要講解了比特幣的訊息處理執行緒,接下來,在下篇中,將以具體的比特幣訊息即比特幣協義分析為主。針對比特幣的協義