close

比特幣現金又要升級了,又要升些啥東西?

tan90d 2019-01-11 09:58發布在 其它文章 競爭幣

第0章 引言
 
半年一次的BCH升級計劃,正在被執行下一次5月15日的硬分叉升級。我想搞明白開發者在搞些啥玩意。看了他們的視頻會議。來來,支持者們來學習下,反對者們來諷刺一下,都湊個熱鬧,反正熱鬧過後,大家該幹嗎就幹嗎去。

undefined

第1章 拯救BCH上的隔離見證幣
 

BCH下一次升級準備拯救用戶錯誤將BCH發到BTC的隔離見證地址上的BCH幣。

因為BCH和BTC的地址是通用的,BCH的地址在BTC上是合法的,BTC的地址在BCH上也是合法的。這兩個幣的地址是可以接收對方的幣的。地址對應的私鑰都可以控制收到的幣,無論收到的是BTC還是BCH。

上面這段話真繞口。打個比方說,如果你家門口樓下有收信的那個小信櫃,很多小區都會有。本來這種信櫃是用來收信的。但這種信櫃有些小區會被用來收快遞包裹收牛奶這些。信櫃就像是BTC和BCH的地址,都是一樣的。信就類似於BTC,包裹類似於BCH。而信櫃的鑰匙就像是私鑰。信櫃即可以收BTC,也可以收BCH。你想花收到的BTC或BCH,只要你用鑰匙去控制就好了。

但BTC在2017年部署了隔離見證,隔離見證的地址和其他的BTC/BCH的地址是有區別的。如果是BCH發到了隔離見證地址上,你就不能用這個隔離見證地址裏的私鑰去花費了。

這個隔離見證地址就像是一個“沒有鎖的信櫃”,任何人都可以將信櫃裏的信和包裹拿走。但BTC網絡還定義了一個新規則,以防止在隔離見證裏的幣被“任何人都可以拿走”。這個不好理解,我再打個比方。就類似於在“沒有鎖的信櫃”旁邊裝一個“監控攝像頭”,如果你拿走了不屬於你的信櫃裏的幣,那整個網絡就不承認你拿走了,整個網絡還認為那封信在信櫃裏,直到被相應的私鑰花走。

現在在BCH網絡上是沒有這個“監控攝像頭”的,如果你將BCH發到了這種“沒有鎖的信櫃”裏,那別人是可以將你的幣偷走的。但這個偷,也不是隨便就能偷。因為你要偷走這種幣,在BCH網絡上屬於是“非標準交易”,所有的節點是不會幫你廣播這種非標交易,而且礦池一般也不會接受這種非標交易。

但如果礦池想偷這種隔離見證地址上的BCH,那就可以實現了。現在如果將BCH錯誤發到了BTC的隔離見證地址上,需要找礦池去幫你找回。

在BCH上,在2018年4月26日,高度為527464的BCH區塊,裏面就包含了大量的從隔離見證地址上花費出來的BCH。你可以去查這個區塊,看裏面有好多輸入為3開頭的地址,而輸出只有一個1開頭地址,沒有找零地址。這就是從隔離見證地址裏花出去的BCH。這是一個匿名礦池偷了別人的隔離見證地址上的BCH幣。

Bitcoin abc計劃在下一個硬分叉版本上部署一個叫BIP62的改進協議,就可以讓用戶用私鑰花掉自己錯誤發送到隔離見證上的幣。至於什麽原理,我也不知道。

我個人覺得,既然BCH本來就沒設計隔離見證,用戶錯誤發到隔離見證地址上的BCH幣也可以主動找礦池幫忙花出去。用戶和礦池之間討論手續費就好了。開發者沒有必要專門為這種自由市場可以解決的問題專門去設計一個補丁。自由市場能幹的事,就優先讓自由市場幹吧。萬一設計出來的補丁有啥問題呢?

我發現,開發者怎麽這麽愛管閑事呢?你操心啥呢,除了共識層,能少整些有的沒的嗎?

 
第2章 BCH有望優先部署Schnorr簽名

 

如果你是一個挖礦的小礦工,比如你一天收0.01BTC,然後你收了30天,一共收到0.3BTC。你想充值到交易所賣掉,你可能要付0.1BTC的礦工費。

現在有很多交易所都限制比特幣的充值金額下限,比如不接受0.001BTC的充值。否則交易所收到一大堆0.001BTC的幣,然後想發1BTC出去,你會發現,可能要交0.5BTC的礦工費。

現在我們發幣,BTC和BCH都一樣,一個輸入就有簽一個名。一個簽名約80字節,占交易數據的大頭。礦工費是按數據大小來計算的,如果一筆交易裏有10個輸入,那就要花掉800字節的簽名數據。所以多個輸入的交易,簽名數據會占據一大筆費用。這就是為什麽小礦工要背上沈重的礦工費的原因。

Schnorr簽名就是讓一筆交易,無論有多少個輸入,都變成只有一個簽名的辦法。這樣就可以大大減少多輸入交易的尺寸。如果使用這種技術,那小礦工就不需要承擔很多的礦工費。

undefined

Schnorr簽名這種技術,有用。但看起來風險挺大,在BTC上收益還是可以的。但在BCH和BSV上,礦工費也不用節省啊,收益不大。

目前我不清楚Schnorr簽名會造成啥後果。如果我是BCH的總設計師,我會選擇讓Schnorr簽名設計好,並且合並到主代碼倉庫,但不在主網上激活。讓市場去抄,在別的幣上先測試著,比如讓BTC也測試。

 
第3章 BCH計劃放寬零確認鏈式交易25個數量限制
如果你收到一筆幣,還沒有確認,你是可以立刻發給另外一個地址的,下一地址收到幣後,還是零確認,也還可以再往下發,這樣可以一共發25次。再多,現在主流錢包和節點就拒絕了。這種零確認交易,再往下發的交易,就是一種零確認鏈式交易。

這個25個鏈式的零確認交易並不是一個共識層的約束。只要礦池願意接受,其實你可以構造250個鏈式交易。

這個25個數量的限制主要是考慮到安全性。如果這個不做限制的話,是可以構造出一種對全網內存池進行幾乎零成本的攻擊。攻擊原理如下。

我用一筆1BCH的UTXO發一次(1億聰-300聰)的交易,沒有找零地址,300聰就是為了湊夠1聰/字節的礦工費。我按這一筆交易記為tx1。我也不廣播,肯定是零確認下。我繼續將(1億聰-300聰)的這個輸出作為輸入再轉一次(1億聰-300聰-300聰)的交易。然後再繼續轉一次(1億聰-300聰-300聰-300聰)的交易……,一直這樣,直到將1億聰的UTXO消耗到只剩下600聰為止。

接下來,我構造一最後一筆交易,我記為txn。

同時對tx1使用交易可延展性進行構造一筆完全合法的tx1'交易。也一並廣播tx1'。

只要有礦池打包了tx1',那上面所有的tx1到txn全變成非法的交易。

如果tx1'被打包了,那攻擊者就成功攻擊了全網所有節點的內存池,並且只使用了一筆交易的手續費,那攻擊成本是幾乎為零的。

這種攻擊是可以被礦池用來攻擊其他礦池的。讓全網其他礦池浪費時間去驗證tx1到txn,他自己偷偷打包tx1’。爽歪歪。

但25個數量的限制,這玩意不在共識層,礦池想要不被攻擊,自己限制就好了。所以我覺得這種25個零確認交易鏈數量的限制是完全沒有必要的。

底層協議應該盡可能把這些可以由自由市場處理的限制給刪了,我說開發者就愛瞎操心,對自由市場不夠放心,完全沒必要啊,擔心啥啊。

 
第4章 結束語
BCH老改,不知道要改到哪一年。

作者:黃世亮

歡迎關註微信公眾號:閃電HSL

歡迎打賞BTM:bm1qefc720au672awrgazgw5c3kx7etr5kejju02p7

arrow
arrow
    全站熱搜

    YH雲禾財經 發表在 痞客邦 留言(0) 人氣()