科普 | 定義 Eth2.0 中的驗證者質量
我們 Attestant 是非託管型的 ETH 2.0 質押服務,既能為客戶資金提供更高的安全性,又能利用先進的驗證策略來獲取比傳統驗證基礎設施更高的收益。衡量收益的方法之一是,追蹤 ETH 2.0 區塊鏈上見證訊息的生成和上鍊情況。這是一大關鍵指標,因為見證訊息越早上鍊,收益就越高。本文將介紹 Attestant 是如何單獨或綜合計算見證有效性的。
見證訊息
見證訊息(attestation)是驗證者對 ETH 2.0 區塊鏈當前狀態的投票。每個啟用狀態的驗證者都會在每個 epoch (時段)(約長 6.5 分鐘)建立見證訊息。見證訊息包含以下部分:
- 圖 1 :見證訊息的結構 -
其中比較有趣的部分是鏈首投票(chain head vote),即,驗證者在建立這條見證訊息時認為哪個區塊是鏈上最新的有效區塊。鏈首投票的結構如下所示:
- 圖 2 :鏈首投票結構 -
圖中的 slot (時隙)定義了驗證者認為當前區塊鏈的鏈首所在位置(所在高度) ,Hash(雜湊)定義了驗證者認為的鏈首區塊。二者共同定義了區塊鏈上的一個點。有了足夠多的投票,網路就可以就區塊鏈的狀態達成共識。
雖然一條見證訊息的資料量比較小,但是驗證者有數萬名 , 資料量很快就會積少成多。由於這些資料將永遠儲存在區塊鏈上,減少資料量非常重要。這是透過一個被稱為 “聚合(aggregation)” 的過程實現的。
聚合就是將多條 committee(委員會)、chain head vote(鏈首投票)、finality vote(終局性投票)都相同的見證訊息(譯者注:即同一委員會中作了相同的鏈首投票和終局性投票的見證訊息) 合併成一個 聚合見證訊息 ( aggregate attestation ):
- 圖 3 :聚合見證訊息的結構 -
聚合見證訊息與單個見證訊息存在兩點差異。首先,前者有多個驗證者。其次,聚合簽名是由單個見證訊息的簽名合併生成的。聚合見證訊息的儲存效率很高,但是會增加通訊和計算方面的負擔(詳見下文)。
如果我們強制要求每個驗證者將所有見證訊息聚合起來,那麼將每個見證訊息傳給每個驗證者所需的通訊量很快就會導致網路過載。同樣地,如果聚合只是可選項,那麼驗證者就不會浪費自己的資源這麼做。因此,網路會選擇一組驗證者來負責進行聚合 1 。出於利益考慮,驗證者會認真履行職責,因為包含較多驗證者的聚合見證訊息更有可能被新增到區塊鏈上,驗證者就更有可能獲得獎勵。
執行這一聚合過程的驗證者就是 聚合者(aggregator) 。
見證獎勵的變化情況
ETH 2.0 在為驗證者計算見證獎勵時採用了 打包距離( inclusion distance ) 這一指標。打包距離指的是見證訊息生成時所處的 slot 與該見證訊息被打包到區塊時所處的 slot 之差。例如,在 slot s 生成的見證訊息在 slot s+1 被打包到區塊中,這時打包距離就是 1 。如果見證訊息在 slot s+5 被打包到區塊中,這時打包距離就是 5 。
在 ETH 2.0 網路中,見證訊息的價值取決於打包距離,打包距離越小越好。這是因為越早上鍊的資訊越有用。
為體現見證訊息的相對價值,驗證者所獲得的見證獎勵會隨打包距離的增大而減少。具體來說,見證獎勵會乘以 1/d (d 為打包距離)。
- 圖 4 :見證訊息與打包距離之間存在函式關係 -
見證訊息的打包過程
見證訊息是如何打包到 ETH 2.0 區塊鏈上的?其過程如下 2 :
每個參與見證的驗證者都會使用其所擁有的鏈狀態的相關資料生成見證訊息;
見證訊息會透過 ETH 2.0 網路廣播給相關聚合者;
每個聚合者在收到見證訊息後都會將它與其它具有相同宣告的見證訊息聚合起來;
聚合見證訊息會透過 ETH 2.0 網路廣播至所有節點;
只要是沒有在鏈上看見該聚合見證訊息的區塊提議者都可以將其打包到區塊中。
一旦你發現打包距離大於 1 ,就要了解其背後原因。可能有以下幾個原因:
見證訊息生成延遲
驗證者可能會遇到一些問題,從而導致見證訊息生成延遲。例如,驗證者所擁有的鏈狀態相關資料過時,或者驗證者在生成和簽署見證訊息上花費時間過久。無論出於哪種原因,見證訊息生成步驟的遲滯都會對整個流程的剩餘步驟產生連鎖反應。
見證訊息廣播延遲
驗證者生成見證訊息後需要透過網路將見證訊息廣播至聚合者處。這一流程的本質意味著,廣播宜早不宜遲,因為這樣可以確保驗證者及時收到該見證訊息,並將其合併到聚合見證訊息中。驗證者應該連線到足夠多的對等節點,從而確保自己能儘快將見證訊息廣播給聚合者。
聚合見證訊息生成延遲
聚合者可能會推遲見證訊息的聚合流程。最常見的原因是,聚合者節點已經因為生成見證訊息而過載,但是如果需要聚合大量驗證者,聚合演算法的速度也會造成巨大延遲。
聚合見證訊息廣播延遲
與見證訊息廣播延遲類似,聚合見證訊息也需要在網路中廣播,因此存在相同的延遲風險。
區塊生成失敗
要想讓見證訊息上鍊,首先要將它打包到區塊中。但是,區塊生成並不一定總能成功。有兩種情況會導致區塊生成失敗:1. 驗證者離線;2. 驗證者與網路中的其他驗證者失去同步,導致其生成的區塊因包含無效資料而被拒絕。如果區塊生成失敗,就無法確保見證訊息在同一個 slot 內上鍊,導致打包距離大於最佳距離。
區塊生成失敗還會產生其它影響,即,增加了可打包進下一個區塊的見證訊息總量。如果可打包的見證訊息總量超過了區塊容量,區塊生產者很可能優先打包那些可以帶來較高收益的見證訊息,也就是那些打包距離最小的見證訊息。這就有可能導致那些錯過最佳打包距離的見證訊息一再被推後,因為它們能帶來的收益越來越低。
由於驗證者無法控制區塊生成 3 ,我們定義了 “最早打包 slot(earliest inclusion slot)” 這一術語。最早打包 slot 指的是見證訊息生成後的第一個生成有效區塊的 slot 。見證訊息無法打包到一個不存在的區塊中,因此,以見證訊息生成後的第一個 slot 為標準也衡量不出見證者的效率。這個標準就體現了這些考量,將 “最早打包 slot” 定義為見證訊息生成後的第 1 個產生有效區塊的 slot(譯者注:即過濾掉區塊生產者的失誤對衡量驗證者效率造成的影響)。
惡意行為
儘管如此,惡意參與者依然有可能拒絕將見證訊息聚合,或者拒絕將見證訊息打包到區塊中。前者的風險可以用讓每個驗證者團體都有多個聚合者來緩解 。為降低後者的風險,不打包見證訊息需要承擔一定的成本。但是,參與見證的驗證者無法迫使區塊生成者打包見證訊息,因此如果不打包見證訊息所產生的收益高於其成本,參與見證的驗證者就束手無策了。
計算見證訊息有效性
考慮到區塊生成和打包距離,見證訊息有效性可以理解為見證訊息對網路的用處有多大。見證訊息有效性的正式定義是:
區塊有效性是以百分比呈現的。下表列出了一些示例:
區塊距離的上限是 32 。如果未能在區塊距離達到上限之前將見證訊息打包進區塊,則該見證訊息的有效性為 0。
聚合見證訊息有效性
單個見證訊息的有效性很有趣,但本身意義不大。如果我們將不同驗證者在不同 slot 生成的見證訊息的有效性綜合起來看,就能更好地瞭解這組驗證者的整體有效性。我們只需取單個見證訊息有效性的平均值,即可計算出聚合有效性,例如,一組特定驗證者連續 7 天來的有效性均值。
總結
當 ETH 2.0 啟動時,成千上萬個節點會確定彼此的位置,然後開始提議和見證區塊。就像所有不成熟的網路一樣,你需要透過不斷的摸索來找到如何讓你的節點儘可能有效的方法。正如上文所述,見證訊息有效性是用來追蹤節點有效性的一大指標。希望實現獎勵最大化的驗證者可以透過見證訊息有效性來了解其總體表現。
Attestant 會為我們的驗證者追蹤其見證訊息有效性,並將客戶報告中的資料彙總起來,從而提供更清晰的表現指標。隨著我們繼續擴充非託管型 ETH 2.0 質押服務,我們很樂於與大家分享更多的指標。
註釋:
驗證者組合中的成員每過幾分鐘就會改變,因此所有驗證者共同負擔聚合成本。
這是經過簡化的見證流程,但是出於本文的目的而言,這個流程是準確的。
顯然,除了那些驗證者自己生成的資料。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30239065/viewspace-2713537/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 守好軟體定義汽車下的質量之門
- 如何高效定義和驗證restful請求的引數REST
- Laravel 自定義表單驗證-自定義驗證規則Laravel
- MySQL 中的 DEFINER(定義者)是什麼MySql
- [Laravel 8 使用者認證] Jetstream 之 如何自定義登入驗證Laravel
- Go工程管理 18 | 質量保證:通過測試保證質量Go
- 直播的使用者體驗體系與質量監控方案
- 【質量管理】福特全球質量改進流程,達成高品質的保證
- 如何保證前端專案的質量?前端
- 科普中國:研究發現跟愛人一起睡睡眠質量會更好
- C# 設定或驗證 PDF中的文字域格式C#
- 最高法--質量保證金應按照《工程質量保修書》的約定從質量保修期滿後開始計算利息系混淆缺陷責任期與質量保修期的概念
- 方案:軟體質量保證
- 如何保證軟體質量
- mongoose使用validate驗證, 獲取自定義驗證資訊Go
- 【關係抽取-R-BERT】定義訓練和驗證迴圈
- Layui 自定義表單驗證UI
- ACCESS 密碼驗證/文字驗證中的小坑密碼
- jQuery Validate驗證規則實質jQuery
- curl 設定https 不驗證證書HTTP
- Laravel 自定義驗證規則的問題Laravel
- oracle驗證設定的event是否生效:Oracle
- thinkphp驗證器獲取$data資料,自定義驗證,多條件唯一性驗證unique驗證PHP
- 持續整合質量保證方案
- nginx使用者驗證Nginx
- 中科聲龍榮獲《中國質量認證監督管理中心》認證證書
- C# 使用JavaScript設定或驗證 PDF中的文字域格式C#JavaScript
- Laravel 自定義表單請求驗證忽略某些欄位驗證Laravel
- 自定義react資料驗證元件React元件
- Android自定義View---驗證碼AndroidView
- 02-論證基礎:論證的定義及構成
- 6. 自定義容器型別元素驗證,類級別驗證(多欄位聯合驗證)型別
- 軟體測試——軟體安全質量的保證
- jQuery Validate新增自定義驗證規則jQuery
- 表單驗證自定義格式輸出
- gin自定義驗證器&轉化中文
- gRPC(七)進階:自定義身份驗證RPC
- 模型的列表定義中,使用函式時如何定義引數?模型函式