約在兩天前比特幣區塊501726產生了一件以往未曾發生過的事件,挖出這個塊的礦工並未收取礦工獎勵、礦工地址無法解析、這一個區塊除了該筆獎勵之外並無其他交易訊息。
讓我們仔細看看這個區塊的交易訊息。
得知的訊息有:區塊獎勵為12.5BTC、轉移手續費為-12.5BTC、應該得到礦工獎勵的地址顯示Unable to decode output address 。
區塊獎勵為初始四年為每塊50BTC,每隔約四年陸續減半,這是比特幣的設計初衷,目前的獎勵依然在每塊12.5BTC。
那轉移手續費這個欄位應該是怎麼計算而產生的呢?以往的礦工獲得獎勵時由於是系統配發,該筆獎勵的配發是不收手續費的,而區塊之內紀錄的各種交易的手續費則會連同挖礦獎勵的12.5BTC一同發放給礦工,我們可以從其他區塊紀錄上得證。
圖例為區塊501725。
礦工獎勵為12.5BTC加轉移手續費5.87734184BTC等於18.37734184BTC。
所以筆者推斷-12.5BTC的轉移手續費計算方式來自於礦工地址獲得的比特幣數量扣除區塊獎勵12.5BTC所以造成手續費為-12.5BTC。比特幣的設計是讓提供給礦工更多手續費的人優先交易,而當下其他等待交易的帳戶因手續費都不足以讓整個區塊的交易轉移費用大於12.5BTC,所以並沒有其他交易被紀錄在此區塊上。
而時常看見的Unable to decode output address筆者引用網友
luv2drnkbr的說法。連結:https://bitcointalk.org/index.php?topic=1453347.0
那我們要怎麼製造出一個符合比特幣格式的收款地址卻又讓該地址實際上不存在呢?我們必須先了解比特幣地址的產生原理。以下引用巴比特論壇之圖示,連結:http://8btc.com/article-1929-1.html
正常的流程下我們必須先計算出一組可以使用私鑰,然後才透過私鑰計算出該私鑰管轄之下的地址。
那我們能有什麼做法跳過產生私鑰而創造出一個地址呢?筆者則找到網友EcuaMobi提供的一個做法,他甚至可以客製化部分的地址名稱。連結:https://bitcointalk.org/index.php?topic=973998.0
遵照以上做法就可以產生一堆自定義部分名稱的地址,但筆者強烈建議不要使用,因為筆者也無法確認該程式源是否乾淨。
但以上做法嚴格來說也只是找出了一些地址,使用這些地址收取礦工獎勵也只是讓BTC投入一個沒有人有私鑰的地址,大家都無權動用這些比特幣,並不會讓幣在總數上燒毀,或變得完全不存在,有沒有可以讓幣完全消失的方式呢?
讓我們重新回到區塊501726上。
以下使用https://www.blocktrail.com 尋找501726區塊的INPUT SCRIPTS。
他的INPUT SCRIPTS跳過了簽名公鑰。
正確的INPUT SCRIPTS應該如區塊501725那樣,下圖。
目前筆者推測區塊501726的礦工很可能是寫了一個系統無法判讀的腳本或誤植了部分缺失的腳本,導致沒有人可以收到該筆礦工獎勵,但也不排除該礦工是想以其他方式隱藏挖到塊的事實。
如何設置好完整的簽名請參考:
https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script
更多比特幣腳本設定請參考:
https://en.bitcoin.it/wiki/Script
*特別澄清筆者非工程師,只是對此事件有強烈興趣,若有疏誤還請不吝賜教。
歡迎加入動區動趨粉絲團
追蹤最即時的區塊鏈消息~