黃金很重,貌似數字黃金也不輕。比特幣不斷被人攻擊性能差,這是什么意思呢?
比特幣系統的交易量大約每秒鐘3-7次,而交易確認時間比較長,最少10分鐘,推薦時間一小時(6個區塊),常見的時間是幾個小時。在跨境交易里面,這個時間比現在的電匯快。但是即使跨境電匯,慢也不一定是技術問題,更多是監管問題,如果銀行有動力,提升速度是很容易的。
對比其他典型應用,如Visa,Paypal,這個交易容量就顯得很弱了。Visa可以到2000次每秒的量級。下圖做了一些性能比較,是ByzCoin的作者提供的。
數據庫系統就更厲害了,商業化的Oracle可以達到上千萬次每秒,開源的MySQL也有兩百萬次每秒的報道。淘寶據說實現幾十萬次每秒的交易。這些數據差距達到六七個數量級,這是為什么呢?是因為廠家在推廣的時候,有意無意的混淆,單一的進程能支撐的交易量,和很多個并行的進程支持的交易量。在存儲數據庫等需要一致性的產品中,這種故意的混淆在宣傳中很常見。有趣的是,技術交流的時候,大家又都很老實誠懇。
比特幣的交易容量是怎么來的呢?它是平均出塊時間(10分鐘),塊大小(1M),和平均交易尺寸(幾百字節)三個變量共同決定的,等于(塊大小/交易尺寸/交易時間)。而這三個變量本身,分別有他們自己的底層限制因素,出塊時間受到網絡時延帶寬和共識算法的限制,塊尺寸收到驗證時間的限制(太大的塊每個節點驗證時間太長,對應用層的DDOS攻擊更加敏感,還額外增加廣播時延),而交易尺寸是收到合約(是的,比特幣有合約)結構限制。通過調節這三個參數,交易容易可以有所提升,但效果有限。而且任何一個參數的調節,都有其對應的風險。
但是,交易容量本身卻不是太大的問題。通過切分和并行鏈,交易量總是可以提升上來的。最簡單的比方,是開設很多個比特幣網絡,比如1000個,交易量不就7x1000=7000次每秒了嗎?具體實現起來當然比這個復雜,而且分割會導致一致性風險,但原則是這樣的。
真正困難的性能提升,是交易時延,如果從10分鐘提升到1秒,那么其他不變,一致性風險不增加的情況下。性能提升600倍,交易數量(單個部署)提升到5x600=3000次以上了。
如何提升交易時延呢?請聽下回分解。
附錄 技術部分
附圖使用的是ByzCoin的圖,他們的拜占庭容錯區塊鏈,號稱能達到700次每秒的單鏈交易。