
大家好,今天來講講區塊大小和出塊時間這個問題,順便聊一下在Soteria DAG的設計裡,我們是怎麼處理這個問題的。
擴容是問題的關鍵
區塊大小和出塊時間是一對設計變量,直接決定了區塊鏈系統的容量。拿比特幣系統來舉例:
比特幣系統大致每10分鐘挖出一個1MB的區塊。而每筆交易平均佔250字節。所以一個區塊可以容納4000筆交易。 10分鐘裡有4000筆交易,於是就有了每秒7筆交易這個系統容量的著名數字。如果要擴容一千倍,我們可以把這兩個參數調整一下嗎?比如區塊大小變成100MB,出塊時間變成每秒一個,於是就有了新的系統容量數字:400000/60 ~ 每秒7000筆交易,秒殺paypal和visa。答案顯然是NO。而且問題不在存儲,而是在於網絡傳輸。
網絡傳輸與安全基礎
POW的安全的基礎,是建立在個人算力不超過全網算力的50%這一基礎上的。而潛在的必要條件是任何節點要和網絡其他節點公平競爭。這就跟賽跑一樣,大家得一起起跑才行。而區塊鏈系統是個異步系統,POW的安全性只有系統狀態就近同步的情況下才能保證。 POW挖礦獎勵其實有一個重要原則就是獎勵礦工們盡快的把自己挖出來的區塊廣播出去,被網絡接收;同時在使勁的接收從網絡傳回來的其他區塊,而不是把算力浪費在成不了氣候的鏈上(最長鏈原則)。這進進出出(TX/RX)其實本質是利用礦工在系統框架下的自然行為保證了網絡的同步。
這裡邊有兩個變量:第一個是傳卷子的時間,第二個是做題目的時間。卷子可以是一張紙,也可以厚厚一沓。假設我們傳卷子必須要一張一張的傳,因為老師印卷子的時候是每一頁都印了全班的量。所以,傳卷子可以半分鐘就傳完了,也可以傳10分鐘都沒有全發完。同樣,題目也難可易,聰明的童鞋用計算器可以十分鐘就做完了,嚴謹的童鞋完全口算,也許要兩個小時才做完。
這裡邊有兩個變量:第一個是傳卷子的時間,第二個是做題目的時間。卷子可以是一張紙,也可以厚厚一沓。假設我們傳卷子必須要一張一張的傳,因為老師印卷子的時候是每一頁都印了全班的量。所以,傳卷子可以半分鐘就傳完了,也可以傳10分鐘都沒有全發完。同樣,題目也難可易,聰明的童鞋用計算器可以十分鐘就做完了,嚴謹的童鞋完全口算,也許要兩個小時才做完。
這裡邊有兩個變量:第一個是傳卷子的時間,第二個是做題目的時間。卷子可以是一張紙,也可以厚厚一沓。假設我們傳卷子必須要一張一張的傳,因為老師印卷子的時候是每一頁都印了全班的量。所以,傳卷子可以半分鐘就傳完了,也可以傳10分鐘都沒有全發完。同樣,題目也難可易,聰明的童鞋用計算器可以十分鐘就做完了,嚴謹的童鞋完全口算,也許要兩個小時才做完。
你現在估計明白我為什麼說髮捲考試了。傳卷子就對應我們的區塊大小,題目的難度就對應我們的出塊時間。小小的區別在於:在區塊系統裡,沒有老師給大家喊“現在開始記時”;而是,童鞋們拿到考卷就開始做。具體是這樣一個節奏:每一個新產生的區塊,網絡傳播的時間是半分鐘(網絡廣播半徑)。每個礦工都是收到這個新塊驗證無誤了之後才開始在上邊挖礦。新區塊就像一份新的試卷,網絡傳播就是髮捲。而這個卷子發給所有同學需要至少半分鐘,然鵝,每輪挖礦總有人比別的人早半分鐘拿到試卷。但是礦工覺得這其實也無所謂,首先,題挺難的,考試時間是十分鐘,晚拿到試卷半分鐘影響不太大;其次,和在教室裡考試不一樣,大家的座次是隨機的而且經常在換,先拿到考卷的人每次都不一樣,所以也沒問題。有些倒霉的礦工在TA挖出一個新塊的時候半分鐘在網絡另外一邊已經產生出來的新塊還沒有傳播到他這裡。於是他的新塊就被無情的drop了,也就是變成了孤塊。 TA的工作就也被無情的浪費了。不過這個沒辦法,設計就是贏者通吃,但是TA在客觀上其實對整個網絡的安全也做了貢獻(此處省去500字有關博弈論的解析)
擴容之殤
我們想要擴容,能做的是要么把區塊的尺寸變大,要么縮短出塊時間,要么兩個都變。我們先試試出塊速度從10分鐘改成半分鐘。這下亂了,考卷還沒有發完有些童鞋就做完開始拿下一套考卷做了。於是教室裡的混亂場面一度無法控制:滿地的做了一半的考卷,大家都在忙著收新來的考卷。這個參數的調整導致出現大量的孤塊和分叉,不僅大量的網絡算力被浪費了,而且更關鍵的是我們前邊說的同步帶來的安全模型也蕩然無存了:每一套新的試卷,都沒發給全班呢,就有一小簇童鞋做出來了。於是重新發下一套試卷。也就是說平均每個童鞋就只做了15秒的題,就得要么完成要么白做了。這個直接帶來的結果就是只有一半的算力在做有用工作,另外一半在做錯誤的考卷。從網絡攻擊者的角度上看,如下圖所示,TA其實只是在和一半的算力在拼,也就是說只要他的算力佔全網絡的33%,TA就有可能贏, 而不是我們平時所說的50%
包容之美
包容之美
我們做BlockDAG,其中一個重要的目標其實就是擴容。我們前邊討論已經顯見:擴容被一對互斥的參數制約。他們之所以在blockchain系統裡表現的這麼複雜,說到底還是網絡同步和贏者通吃這兩條原則導致的。試想,如果後排的童鞋收到卷子的時候,即使前排童鞋都做完了,已經要下一套試捲了,他們仍然堅持做完並且得到心儀的分數,這樣沒有喇嘛多的孤塊兒和分叉,這將多麼美好啊。 BlockDAG就是解決了這個問題,礦工們可以並行的挖礦,不用擔心別人挖出來新的區塊之後,自己這個新塊就沒用了;而是全心全意的繼續挖礦,並及時的把挖出來的區塊廣播出去。下一篇連載我們會詳細討論在DAG的前提下,這兩個參數是如何互動的。