最近阿原對區塊生成的速度感到興趣,你會問說不是每個區塊生成的時間都差不多嗎?確實,以太坊協議當初的設計就是希望能適時的調整區塊的難度讓每個區塊生成出來的時間都保持一致。所以礦工的挖礦能力和以太坊區塊難度的增減就造成生成區塊的時間跟預期結果不一樣的狀況,不過很少有人會去理會這種狀況,因為平均之下區塊的生成時間還是和以太坊原本設計的一樣。
經過4月13日以太坊
上海升級,從以太坊升級以太坊2.0,區塊鏈記帳規則將從「工作量證明」(Proof-of-Work, PoW),過渡到「權益證明」(Proof-of-Stake, PoS)之後,還真的無法預期區塊實際上生成的時間跟原本所預期的有多大的差異。
以太坊官網的說明出塊的時間會維持在穩定的12秒,但真的是這樣嗎?
在YCHARTS這個網站可以找到平均出塊時間,上面顯示最近的區塊時間維持在平均12秒左右。不過實際上區塊有可能延後生成,但我們不知道這種 事件發生的機率會是怎麼樣?
為了求出解答,這次阿原收集區塊編號17040029-17050028、17080029-17090028、17106029-17116028,共計30000個區塊的生成時間,來看看實際上區塊到底多久會生出來一個區塊。
在每10000個區塊之間有9999個時間間隔,在這三個編號區段中分別有319、211、96個時間間隔超過12秒,而且都是呈12的倍數,呼應
以太坊官網說明validators如果離現時驗證沒有成功的話則在等待下一輪時隙(slots)再進行驗證,本文稱這種事件為延遲生成事件,接下來我們來看三段中,發生延遲生成事件占整體的比率:
指數分配常用來描述獨立事件發生的時間間隔,例如燈泡的壽命、申請遺失證件的時間間隔、接獲火災通報的時間間隔。
對我們來說時間間隔是隨機變數X 服從母數為 λ的指數分布。指數分布的機率密度函數被表達成以下的形式:
那λ是甚麼呢?λ 可以當作單位時間內事件發生的次數,它必定大於零。
值得一提的是隨機變數X的期望值:
以及X的變異數:
最後要提的是λ 的最大概似(maximum likelihood)估計值,這邊就不推導了:
所以現在能夠很簡單的使用手上的資料估計出指數函數要用的參數。
首先我們來統計一下延遲生成事件發生的間隔次數:
原諒我文字輸入時只能寫\hat{λ}(希望哪天vocus也有LaTex)。在最大概似估計之下,得到λ的無偏估值,本文取其計算出來的近似值。
這邊其實可以發現如果將平均當作母體的估值,則標準差並沒有像指數分配預期的來的那麼大,現在來試著繪製次數分配圖:
上圖為使用17040029-17050028、17080029-17090028、17106029-17116028三個區塊區間的延遲生成事件資料整理出來的次數分配圖,並以散布圖表示。X軸代表生成的時間間隔、Y軸則是該時間間隔發生的延遲生成事件數除以該區塊區間所有的延遲生成事件數。因為發生次數的變異很大,我使用了平滑化方法將發生次數平化化之後在進行比例換算,這樣的平滑化結果對應顯示於原本的數據圖表底下。而藍色的曲線是指數分配的機率密度函數,該機率密度函數的 λ係由\hat{λ}給定。
我們會發現在區塊編號的推移之下\hat{λ}會減少,這對應於時間間隔的增加。另外在區塊編號的推移之下,延遲生成事件發生的次數也減少了。這是否為一種趨勢以及之間是否具有顯著差異還需要更多的數據佐證,在我分析的當下以太坊才剛改成PoS幾天而已。
最後我想知道用指數分配配適之下,解釋延遲生成事件發生的次數的能力好不好,在此使用累積分布函數:
來計算三區間在多少時間間隔之下會有50%及99%的事件發生,給定次數之後再回推比率:
本次研究當然還是會有一些估計的偏差,大家可以自己選擇是否接受,而我自己是還可以接受這個估計偏差,不過可以看到最後的區塊區間估計出來的結果最差,應該是跟該區塊時間間隔變異大的原因有關。
結論而言,指數分配有起到估計去塊生成延遲生成事件發生的時間間隔的效果,本篇假設延遲生成事件的發生是獨立事件,實際上延遲生成事件發生的能由某種機制導致,瞭解該機制有助於研究人員更有效的估計該問題。
後記
在本文資料探勘的過程中,原本假定延遲生成事件的發生屬於常態分配,經過Shapiro-Wilk測試皆拒絕該假設,只好另尋更合適的分配。
___________________________________________________________________________
作者阿原目前從事區塊鏈資料分析工作,對區塊鏈的經濟架構、事件發展有很大的興趣,並希望能將相關的區塊鏈知識分析並且統整給大家。如果喜歡我的文章,或是想獲得更多區塊鏈大小事,歡迎關注
我的vocus帳號!
另外,我已經加入由
趨勢科技防詐達人所成立的方格子專題-《區塊鏈生存守則》,在那裡我會跟其他優質的創作者一起帶大家深入瞭解區塊鏈,並隨時向大家更新區塊鏈資安事件。