區塊鏈愛好者(QQ:53016353)
山寨幣的找零機制一直讓人有些迷惑,明明只向一個地址發送了山寨幣為什麼 blockchain 上面的顯示的有時是1個地址對多個地址,有時是多個地址對1個地址,有時又顯示多個地址對多個地址。
為什麼山寨幣資深使用者要提醒大家當山寨幣錢包交易100次以上時再次交易後要重新備份錢包,恢複以前的錢包備份有可能會遭遇損失。
是的,這一切都是因為山寨幣的找零(Change)機制,詳細為大家解釋一下山寨幣的找零機制是怎樣運作的。
山寨幣交易的規則:將使用者有權使用的若干山寨幣匯款地址上的之前交易的輸出金額作為一次交易的輸入,若干山寨幣收款地址上增加的交易金額作為本次交易的輸出。輸入金額必須大於等於輸出金額,超出部分作為本次交易的手續約。手續約沒有輸出地址,獎勵給將本次交易記賬成功的礦工。
因為有時作為輸出的金額超過了使用者想要支付的金額。在這種情況下,山寨幣用戶端會建立一個新的山寨幣地址,並把差額發送回這個地址,這就是山寨幣的找零機制。
比如你想從商店買一塊錢的棒棒糖,你開啟你的錢包,發現裡面只有一張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個地址的錢包,那麼在上面這種情況下恢複錢包將丟失新的找零地址。
總之,在詳細瞭解山寨幣的找零機制後,你就可以正確回答本文一開始提出的問題了,讓我們一步步成為山寨幣的專家吧。