比特現金是否應該縮短區塊間隔時間?

BCH 來源/作者:閃電HSL 2018-07-24


第0章 引言


比特現金BCH社區天天吵架,多中心化的煩惱。現在又吵到了10分鐘一個區塊是否需要改變。爭吵的各方都是BCH的死忠粉,都為了BCH好。


本文討論BCH縮短區塊時間的優劣。



比特現金是否應該縮短區塊間隔時間?


第1章 比特幣區塊間隔時間的設定


比特幣一開始設計就是將區塊生產間隔時間設定為平均10分鐘,並不是嚴格的10分鐘。10分鐘這個時間是一個統計上的平均值,設定原理是這樣的:


比特幣系統會每隔2016個塊檢查全網挖出前2016個塊的區塊平均間隔時間,即2016個塊的總時間除以2016。系統有一個“難度值”的設定。如果這個平均間隔時間大於10分鐘,則系統會將“難度值”調低,以希望下一個2016個塊的生產週期的區塊間隔時間儘量逼近10分鐘。如果這個平均間隔時間小於10分鐘,則系統會將“難度值”調高。


這麼設計直接影響比特幣的產出速率,比特幣總量設計為2100萬BTC。平均10分鐘產出一個塊,一個塊的區塊獎勵是50BTC,每挖出剩下的一半時,區塊獎勵就減少一半,約四年會發生一次減半,現在已經發生了2次,目前一個區塊獎勵是12.5BTC/BCH。這樣下去,大約到2140年會全部產出2100萬BTC/BCH。


比特現金BCH現在不是使用上述2016個區塊來調整難度,而是使用了另一個算法,叫DAA逐塊調查難度值,目的是在算力波動大的前提下,讓區塊平均出塊時間更趨進10分鐘。


幣的產出速率事關行業發展的時間窗口,這個是很重要的,但為什麼是10分鐘一個塊,這個其實很難計算其合理性。不過,這次BCH討論縮短區塊時間,並不影響剩下的幣的產出速率,所有參與討論的人在這個目標是一致的。縮短區塊的支持者也是要將區塊獎勵同比例下調,以保證幣產出時間不受影響。


萊特幣的區塊間隔時間是2.5分鐘。以太坊的區塊間隔時間是平均15秒,但以太坊產生了大量的孤塊,而且孤塊在系統中還是合法的,有區塊獎勵但不打包交易,浪費。BTS更短,但使用的共識機制是DPOS,EOS最短0.5秒。


下面我們分析區塊間隔時間具體對什麼有影響。


第2章 區塊間隔時間影響用戶體驗


比特幣是通過“確認數”來保證安全性,所謂的“確認數”就是認可你這筆交易的區塊數量,區塊是礦工挖出來的。安全性和確認數是呈正比的,我們一般認為比特幣(BTC和BCH)六個確認就是100%安全,以太坊36個確認就是100%安全。也就是比特幣是1小時就可以達到100%安全,以太坊是9分鐘。而實際情況是,比特幣1個確認的安全性已經在絕大多數場景達到了100%,比如你往絕大多數交易所充值就只需要1個確認。而以太坊12個確認就滿足了大多數場景的安全性。並且如果你是小額支付,在熟人圈的支付,零確認已經100%安全了。現實生活中絕大多數支付場景也是0確認就夠了。


但人總是希望越短時間越好,太長的確認時間用戶就不耐煩。這是支持縮短BCH區塊間隔時間的最大理由了。


使用BCH的不但有人,未來還會有大量的智能合約。BCH上的智能合約的運行會依賴於BCH鏈上的區塊數據。如果10分鐘一個區塊,那合約的合理設計就是執行時間要大於10分鐘。這對很多合約來說,是不合理的。


這個不是特別好理解,我舉個例子,合約A是一個賭資判罰合約,合約B是一個打賭合約,即B是判斷誰輸誰贏的合約。兩個人各將1BCH發給一個合約A打賭,打賭結果通過合約B調用合約A,合約B將打賭結果作為參數傳遞給合約A,讓合約A來執行賭資的歸屬。合約A的成立就必須在得到BCH區塊對這兩個人的交易的確認才能成立,但如果合約B的執行時間小於10分鐘呢,打賭的結果都出來了,但賭資的判罰卻要等10分鐘。這樣的用戶體驗並不好。


反對縮短的理由主要寄期望於零確認的安全性的推廣。還有另外一種技術,就是弱區塊,weak block,應該也能幫上忙。不過,這些都還有待程序員去寫代碼。


第3章 區塊間隔時間影響挖礦多中心化


挖礦是這樣的,系統會給出一個目標值,這是一個數,比如前面有18個零。挖礦就是找出一個小於這個目標值的隨機數,比如前面有19個零。找到了,就挖到了區塊。


這個隨機數是對礦池對最新高度的區塊鏈進行哈希得來的。礦池先構造一個最新的區塊,並且將這個區塊連並之前所有的區塊進行哈希,哈希一次就對比一次目標值,如果不小於目標值,就調整他構造的最新區塊中的一個叫Nounce值的隨機數,再哈希。


顯然一臺礦機來哈希,你要試出滿足目標值的Nounce值,那真是要慢死了。但礦池可以將不同的Nounce劃分給不同的礦機來試。比如礦池一共有1000臺礦機,將0到1000,給第1臺試;10001到2000給第2臺試……


這樣的結局就是目標值前置的零越多,為了在相同的時間裡挖到區塊,需要的礦機數量就越多。而如果有一個礦池長時間挖不到塊,比如一年才挖到一個塊,那就容易倒閉。這樣的結局就是,隨著目標值前置的零越來越多,小礦池就越不容易生存,挖礦就趨向於中心化。也就是全網算力越多,挖礦將越趨向於中心化。


縮短區塊間隔時間,是有利於緩解隨著算力的增長帶來的挖礦中心化傾向。因為縮短區塊間隔時間,意味著生產一個區塊的目標值的前置零數下降,小礦池挖到一個塊的時間週期就會更短,這樣有利於小礦池的生存。


但是這只是一種推理,事實上能否帶來更多中心化是不知道的。而且無法使用實驗來驗證,這是這個推理無法得到廣泛認可的一個很重要的原因。


而且這種縮短時間只是一種權宜之計,如果縮短5倍時間,但算力漲上5倍之後,縮短區塊時間帶來的多中心化效應就消失了。


為了這一點可能的多中心化的,而改變區塊時間,應該是不合理的。


第4章 區塊間隔時間影響孤塊率


如果同一時間,有兩個礦池都挖出了一個塊,那必然會有一個孤塊。也因此,礦池之間需要建立比一般的P2P網絡更緊密的聯繫,以及時發現別的礦池是否挖到了區塊,從而更及時更新自己的挖礦高度,以避免浪費挖礦時間。


孤塊率和網絡硬件基礎設計相關,越快的網絡,就越能更快地發現同行是否挖到塊,從而降低孤塊率。而越大的區塊,傳播時間越長,就越容易造成同行發現時間更長,就會增加孤塊率。


在完全相同的硬件基礎設施下,以及相同區塊大小下,區塊間隔時間縮短了,會提高孤塊產生的概率。區塊總量多了嘛。大家發現最新高度的時間也縮短了。


而越長的區塊間隔時間,在追求相同的孤塊率下,可以支撐更大的區塊。假設礦池追求孤塊率達到0.1%,即1000個塊有一個孤塊。如果區塊間隔時間是10分鐘,全網可以傳播最大區塊可達到1G區塊,而時間下降幾倍,意味著最大區塊尺寸就得下降。


這就是奧本聰說的區塊間隔時間影響可擴展性的關鍵理由。


但10分鐘是否是最合理的設計,也就是說有沒有可能8分鐘,5分鐘……也能是相同概率的孤塊率。這個問題其實是可以測試的。


直接在全球部署1000個節點,然後相互廣播1G的區塊,設置不同的區塊生產時間,就可以直接測試出網絡延遲造成的不同的孤塊率。但目前沒有團隊去做這樣的測試,只要拿出可靠的測試結果,才更有說服力。


以太坊的區塊間隔時間是15秒,這個太快了。以致於以太坊的孤塊率非常高,以太坊稱為叔塊,這些叔塊在以太坊協議中是合法的,但卻不打包交易,卻需要支付給礦工獎勵。


孤塊應該儘可能降低,否則就不叫區塊鏈了,應該叫區塊樹。


第5章 區塊間隔時間影響51%攻擊能力


在各種條件都相同的情況下,越長的區塊時間,生產一個區塊的成本就越高。那越短的區塊時間,就顯然降低了51%攻擊的成本。


現在假設10分鐘,對陣2分鐘,所有其他條件都一樣。全網有一個持有51%算力的壞蛋礦工,準備51%雙花一筆交易。


這個壞礦工先花出去一筆交易,在得到一個確認後,開始發起51%攻擊。因為持有51%算力,那他拼命算,假設算到3個塊,就超過了其他算力成為最長鏈。那10分鐘的區塊間隔就需要40分鐘的雙花時間,而2分鐘,則只要6分鐘。這樣的攻擊成本完全是兩個維度的。


但10分鐘的安全是不是安全係數過高呢?51%攻擊的安全隱患是不是被誇張了呢?畢竟萊特幣2.5分鐘也沒啥問題,各種幣都越來越短的區塊時間,其實都挺安全的。


這又需要一大票計算,而且還無法做測試,麻煩。


第6章 區塊間隔時間影響SPV錢包的使用


比特幣是有SPV驗證的,SPV錢包一般是會裝在手機上,只保存所有的區塊頭。現在區塊頭是80字節,一天144個區塊,一年會產生144*365*80/1024=4.1M的區塊頭數據。 現在是10年了,現在SPV錢包要下載41M的區塊頭數據了。


如果縮短區塊時間,意味著區塊數量大大增加,也意味著區塊頭數據大大增加。比如縮小到2分鐘,則一年會新增區塊頭數據5倍,即一年將產生 4.1*5=20.5 M的區塊頭數據,10年就是205M。這樣會導致SPV錢包比較難用。


這是一個可量化的數據,我們的手機4G網絡包月是1G已經普及了,但還是很貴的,手機內存對付幾百M的數據,我覺得問題不大,但網絡流量吃緊。


第7章 結論


我是個保守主義者,我個人的態度是,目前不支持縮小區塊間隔時間。在沒有更充分的安全性驗證之前,不宜作更改。


不過我的認證都是在邏輯上的,並不是建立在實驗和數學上的,我們需要更多的實驗測試和數學證明。


第8章 結束語


如果你喜歡多中心化,就加入比特現金社區吧,BCH粉天天吵架。



第0章 引言


比特現金BCH社區天天吵架,多中心化的煩惱。現在又吵到了10分鐘一個區塊是否需要改變。爭吵的各方都是BCH的死忠粉,都為了BCH好。


本文討論BCH縮短區塊時間的優劣。



比特現金是否應該縮短區塊間隔時間?


第1章 比特幣區塊間隔時間的設定


比特幣一開始設計就是將區塊生產間隔時間設定為平均10分鐘,並不是嚴格的10分鐘。10分鐘這個時間是一個統計上的平均值,設定原理是這樣的:


比特幣系統會每隔2016個塊檢查全網挖出前2016個塊的區塊平均間隔時間,即2016個塊的總時間除以2016。系統有一個“難度值”的設定。如果這個平均間隔時間大於10分鐘,則系統會將“難度值”調低,以希望下一個2016個塊的生產週期的區塊間隔時間儘量逼近10分鐘。如果這個平均間隔時間小於10分鐘,則系統會將“難度值”調高。


這麼設計直接影響比特幣的產出速率,比特幣總量設計為2100萬BTC。平均10分鐘產出一個塊,一個塊的區塊獎勵是50BTC,每挖出剩下的一半時,區塊獎勵就減少一半,約四年會發生一次減半,現在已經發生了2次,目前一個區塊獎勵是12.5BTC/BCH。這樣下去,大約到2140年會全部產出2100萬BTC/BCH。


比特現金BCH現在不是使用上述2016個區塊來調整難度,而是使用了另一個算法,叫DAA逐塊調查難度值,目的是在算力波動大的前提下,讓區塊平均出塊時間更趨進10分鐘。


幣的產出速率事關行業發展的時間窗口,這個是很重要的,但為什麼是10分鐘一個塊,這個其實很難計算其合理性。不過,這次BCH討論縮短區塊時間,並不影響剩下的幣的產出速率,所有參與討論的人在這個目標是一致的。縮短區塊的支持者也是要將區塊獎勵同比例下調,以保證幣產出時間不受影響。


萊特幣的區塊間隔時間是2.5分鐘。以太坊的區塊間隔時間是平均15秒,但以太坊產生了大量的孤塊,而且孤塊在系統中還是合法的,有區塊獎勵但不打包交易,浪費。BTS更短,但使用的共識機制是DPOS,EOS最短0.5秒。


下面我們分析區塊間隔時間具體對什麼有影響。


第2章 區塊間隔時間影響用戶體驗


比特幣是通過“確認數”來保證安全性,所謂的“確認數”就是認可你這筆交易的區塊數量,區塊是礦工挖出來的。安全性和確認數是呈正比的,我們一般認為比特幣(BTC和BCH)六個確認就是100%安全,以太坊36個確認就是100%安全。也就是比特幣是1小時就可以達到100%安全,以太坊是9分鐘。而實際情況是,比特幣1個確認的安全性已經在絕大多數場景達到了100%,比如你往絕大多數交易所充值就只需要1個確認。而以太坊12個確認就滿足了大多數場景的安全性。並且如果你是小額支付,在熟人圈的支付,零確認已經100%安全了。現實生活中絕大多數支付場景也是0確認就夠了。


但人總是希望越短時間越好,太長的確認時間用戶就不耐煩。這是支持縮短BCH區塊間隔時間的最大理由了。


使用BCH的不但有人,未來還會有大量的智能合約。BCH上的智能合約的運行會依賴於BCH鏈上的區塊數據。如果10分鐘一個區塊,那合約的合理設計就是執行時間要大於10分鐘。這對很多合約來說,是不合理的。


這個不是特別好理解,我舉個例子,合約A是一個賭資判罰合約,合約B是一個打賭合約,即B是判斷誰輸誰贏的合約。兩個人各將1BCH發給一個合約A打賭,打賭結果通過合約B調用合約A,合約B將打賭結果作為參數傳遞給合約A,讓合約A來執行賭資的歸屬。合約A的成立就必須在得到BCH區塊對這兩個人的交易的確認才能成立,但如果合約B的執行時間小於10分鐘呢,打賭的結果都出來了,但賭資的判罰卻要等10分鐘。這樣的用戶體驗並不好。


反對縮短的理由主要寄期望於零確認的安全性的推廣。還有另外一種技術,就是弱區塊,weak block,應該也能幫上忙。不過,這些都還有待程序員去寫代碼。


第3章 區塊間隔時間影響挖礦多中心化


挖礦是這樣的,系統會給出一個目標值,這是一個數,比如前面有18個零。挖礦就是找出一個小於這個目標值的隨機數,比如前面有19個零。找到了,就挖到了區塊。


這個隨機數是對礦池對最新高度的區塊鏈進行哈希得來的。礦池先構造一個最新的區塊,並且將這個區塊連並之前所有的區塊進行哈希,哈希一次就對比一次目標值,如果不小於目標值,就調整他構造的最新區塊中的一個叫Nounce值的隨機數,再哈希。


顯然一臺礦機來哈希,你要試出滿足目標值的Nounce值,那真是要慢死了。但礦池可以將不同的Nounce劃分給不同的礦機來試。比如礦池一共有1000臺礦機,將0到1000,給第1臺試;10001到2000給第2臺試……


這樣的結局就是目標值前置的零越多,為了在相同的時間裡挖到區塊,需要的礦機數量就越多。而如果有一個礦池長時間挖不到塊,比如一年才挖到一個塊,那就容易倒閉。這樣的結局就是,隨著目標值前置的零越來越多,小礦池就越不容易生存,挖礦就趨向於中心化。也就是全網算力越多,挖礦將越趨向於中心化。


縮短區塊間隔時間,是有利於緩解隨著算力的增長帶來的挖礦中心化傾向。因為縮短區塊間隔時間,意味著生產一個區塊的目標值的前置零數下降,小礦池挖到一個塊的時間週期就會更短,這樣有利於小礦池的生存。


但是這只是一種推理,事實上能否帶來更多中心化是不知道的。而且無法使用實驗來驗證,這是這個推理無法得到廣泛認可的一個很重要的原因。


而且這種縮短時間只是一種權宜之計,如果縮短5倍時間,但算力漲上5倍之後,縮短區塊時間帶來的多中心化效應就消失了。


為了這一點可能的多中心化的,而改變區塊時間,應該是不合理的。


第4章 區塊間隔時間影響孤塊率


如果同一時間,有兩個礦池都挖出了一個塊,那必然會有一個孤塊。也因此,礦池之間需要建立比一般的P2P網絡更緊密的聯繫,以及時發現別的礦池是否挖到了區塊,從而更及時更新自己的挖礦高度,以避免浪費挖礦時間。


孤塊率和網絡硬件基礎設計相關,越快的網絡,就越能更快地發現同行是否挖到塊,從而降低孤塊率。而越大的區塊,傳播時間越長,就越容易造成同行發現時間更長,就會增加孤塊率。


在完全相同的硬件基礎設施下,以及相同區塊大小下,區塊間隔時間縮短了,會提高孤塊產生的概率。區塊總量多了嘛。大家發現最新高度的時間也縮短了。


而越長的區塊間隔時間,在追求相同的孤塊率下,可以支撐更大的區塊。假設礦池追求孤塊率達到0.1%,即1000個塊有一個孤塊。如果區塊間隔時間是10分鐘,全網可以傳播最大區塊可達到1G區塊,而時間下降幾倍,意味著最大區塊尺寸就得下降。


這就是奧本聰說的區塊間隔時間影響可擴展性的關鍵理由。


但10分鐘是否是最合理的設計,也就是說有沒有可能8分鐘,5分鐘……也能是相同概率的孤塊率。這個問題其實是可以測試的。


直接在全球部署1000個節點,然後相互廣播1G的區塊,設置不同的區塊生產時間,就可以直接測試出網絡延遲造成的不同的孤塊率。但目前沒有團隊去做這樣的測試,只要拿出可靠的測試結果,才更有說服力。


以太坊的區塊間隔時間是15秒,這個太快了。以致於以太坊的孤塊率非常高,以太坊稱為叔塊,這些叔塊在以太坊協議中是合法的,但卻不打包交易,卻需要支付給礦工獎勵。


孤塊應該儘可能降低,否則就不叫區塊鏈了,應該叫區塊樹。


第5章 區塊間隔時間影響51%攻擊能力


在各種條件都相同的情況下,越長的區塊時間,生產一個區塊的成本就越高。那越短的區塊時間,就顯然降低了51%攻擊的成本。


現在假設10分鐘,對陣2分鐘,所有其他條件都一樣。全網有一個持有51%算力的壞蛋礦工,準備51%雙花一筆交易。


這個壞礦工先花出去一筆交易,在得到一個確認後,開始發起51%攻擊。因為持有51%算力,那他拼命算,假設算到3個塊,就超過了其他算力成為最長鏈。那10分鐘的區塊間隔就需要40分鐘的雙花時間,而2分鐘,則只要6分鐘。這樣的攻擊成本完全是兩個維度的。


但10分鐘的安全是不是安全係數過高呢?51%攻擊的安全隱患是不是被誇張了呢?畢竟萊特幣2.5分鐘也沒啥問題,各種幣都越來越短的區塊時間,其實都挺安全的。


這又需要一大票計算,而且還無法做測試,麻煩。


第6章 區塊間隔時間影響SPV錢包的使用


比特幣是有SPV驗證的,SPV錢包一般是會裝在手機上,只保存所有的區塊頭。現在區塊頭是80字節,一天144個區塊,一年會產生144*365*80/1024=4.1M的區塊頭數據。 現在是10年了,現在SPV錢包要下載41M的區塊頭數據了。


如果縮短區塊時間,意味著區塊數量大大增加,也意味著區塊頭數據大大增加。比如縮小到2分鐘,則一年會新增區塊頭數據5倍,即一年將產生 4.1*5=20.5 M的區塊頭數據,10年就是205M。這樣會導致SPV錢包比較難用。


這是一個可量化的數據,我們的手機4G網絡包月是1G已經普及了,但還是很貴的,手機內存對付幾百M的數據,我覺得問題不大,但網絡流量吃緊。


第7章 結論


我是個保守主義者,我個人的態度是,目前不支持縮小區塊間隔時間。在沒有更充分的安全性驗證之前,不宜作更改。


不過我的認證都是在邏輯上的,並不是建立在實驗和數學上的,我們需要更多的實驗測試和數學證明。


第8章 結束語


如果你喜歡多中心化,就加入比特現金社區吧,BCH粉天天吵架。


相關推薦

推薦中...