以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads
首頁 > NEAR > Info

以太坊:Safe Head 機制介紹(二)_STA:Herbalist Token

Author:

Time:1900/1/1 0:00:00

作者:NicLin,imTokenLabs資深區塊鏈工程師

本文受眾:區塊鏈開發者

上一篇介紹了SafeHead機制,這一篇將介紹imToken嘗試實踐的SafeHead版本以及除了SafeHead之外能做的事,最后會介紹CasperFFG以及該怎么使用Checkpoint和SafeHead。

上一篇最后有提到SafeHead算法還沒落地,雖然目前PoS運作都正常,但我們在imToken仍嘗試設計出自己的SafeHead版本,希望在過渡期能獲得比BlockConfirmationRule更可靠的區塊參考,讓使用者的體驗比較不會受到網絡波動所影響。

過渡期及SafeHead之外能做的事

imToken在嘗試自己的SafeHead版本

目前的版本是由BlockConfirmationRule加上得票率的篩選,例如未來三個區塊得票率都大于90%,或是未來四個區塊得票率都大于70%。如此雖然比單純BlockConfirmationRule還可靠,但只單純看未來X個區塊存在無法反映實時投票率變化的缺點。未來還需要更多的迭代和改進。

那除了SafeHead,還有什么是現在我們能做的呢?

監控區塊及epoch投票率

PoS的優點之一是我們能透過觀察投票狀況來提前察覺網絡是否有問題、攻擊是否正在發生等等,能夠有一個監控系統來監測可以讓我們提前做出反應,不管是送出警報、拉高SafeHead門檻,或是將SafeHead設回一個更保守的區塊。

ConsenSys:以太坊從PoW轉變為PoS共識,將減少99.9%碳足跡:11月10日消息,ConsenSys在發布的博文《2021年10月Staking狀態》中指出,以太坊共識機制從PoW轉變為PoS將使得區塊產出碳足跡減少99.9%。[2021/11/10 21:41:06]

而這些都只需要算出區塊投票率即可,也就是第一篇提到的步驟

查詢新的區塊并記錄區塊,包含分叉鏈的區塊也要能查詢得到獲取區塊里的Attestation并記錄Attestation針對每個區塊,搜尋所有Attestation.beaconBlockRoot==Block.blockRoot的Attestation,去掉重復的Validator得出該區塊得票數算出每一個slot的總Validator數量,除上得票數,算出得票率注:計算epoch投票率會在第三步和區塊投票率不太一樣,在后面會再補充解釋。

其中第二步、第三步及第四步在實踐上有一些需要注意的地方:

第二步:獲取區塊里的Attestation

同一個slot且同一個committee的Validator所產生的Attestation不會總是被完美合并成一個,所以會常常出現同一個slot同一個committee的Validator的Attestation在不同區塊被收錄。如果你透過beaconcha.in來查詢一個區塊的話,你會看到投給它的Attestation分散在不同區塊,以區塊4835000為例,你可以看到雖然大多數的committee的Attestation都在下一個slot4835001被收錄,但仍有些投票是在后面的slot才被收錄:

數據:比特幣和以太坊的鏈上活動仍然相對低迷:Glassnode發推表示,隨著以美元計價的轉賬量降至2020年12月至1月的水平,比特幣和以太坊的鏈上活動仍然相對低迷。當前,比特幣的轉賬結算量約為2.36億美元/天;以太坊的轉賬結算量約為1.6億美元/天。[2021/7/7 0:33:13]

?Committee10其中一個Validator的Attestation在slot4835010才被收錄

所以在資料庫里要唯一識別「同一個slot且同一個committee的Validator所產生的Attestation」會有點麻煩,要不(1)遇到同樣的Attestation但在不同區塊收錄時,將Validator合并起來,但如此就沒辦法呈現像上圖那樣的資訊,也分辨不出合并過哪些Attestation;要不(2)用Attestation被收錄的區塊號碼及Attestation被收錄的排序來識別Attestation,如此就能分得出同樣的Attestation在不同區塊被收錄的情況。

區塊4835000收錄的65個Attestation中的第一個Attestation

第三步:AggregationBits

每個Attestation會有一項叫做AggregationBits,這是一個bit陣列,用來記錄這個Attestation是由committee中的哪幾個Validator的Attestation所合并而來。

數據:以太坊盈利地址數量續刷新高:Glassnode數據顯示,盈利的ETH地址數量每天都在刷新歷史高點。今天早些時候,最高紀錄為26,461,041.375,不過,這一紀錄很快被另一個新高26,537,344.958進一步打破。這進一步表明,虧損的ETH地址總數為17340 657.250,為4個月來的最低水平。(CoinGape)[2020/7/23]

以slot4823390的區塊里所含的第一個Attestation為例,其CommitteeIndex為42,代表這個Attestation是由committee42的Validator的Attestation所合并而成。另外其AggregationBits為214個bits,其中只有4個bit是1,代表這個Attestation是由committee42一共214個Validator中第28、第58、第84及第147位Validator的Attestation所合并而成。

這四位Validator的編號分別是218385、32675、220759及323143

另外需要注意的是你從節點要回來的Attestation,里面的AggregationBits會是經過SSZ編碼過后的值,不是你在上圖中看到的格式,所以需要自己先用SSZ解碼。以下是解碼上面這個Attestation的AggregationBits的范例:

import{BitArray,BitListType}from"//DeserializebytearraytobitlistwithSSZlibraryconstCommitteeBits=newBitListType(byteArraySize*8)constaggregationBitList=??????CommitteeBits.deserialize(byteArray)????????.toBoolArray()????????.map((v)=>(v?1:0))

分析 | 以太坊主流交易所交易量有明顯下滑 基本面方面相對穩定:據TokenGazer數據分析顯示,截止至8月2日11時,以太坊價格為$217.04,總市值為$23,255M,主流交易所交易量約為$116.68M,環比昨日下降了25.05%;以太坊對比特幣匯率稍有下滑;基本面方面,以太坊鏈上交易量有所回升,活躍地址數有所抬頭,算力繼續下行,鏈上DApp交易量保持穩定;以太坊30天開發者指數約為2.32,與BTC的關聯度保持穩定;以太坊30天ROI有所回升;ERC20代幣總市值約為以太坊總市值的66.89%,有一定回升。[2019/8/2]

第四步:算出Slot的Validator數量

實際上要獲取每一個slot確切的Validator數量會需要用eth/v1/beacon/states/{slot}/committees這個API,回傳的資料會包含該slot每一個committee所有的Validator的編號,加總所有committee的Validator數量就能得到該slot確切的Validator數量。但如果不要求精準的話其實也可以直接將當前Validator總數除以32個slot。

計算epoch投票率

前面有提到epoch投票率和區塊投票率在計算上不太一樣。計算區塊得票率時,要找的是投給該區塊的Attestation,也就是Attestation.beaconBlockRoot==Block.blockRoot,但epoch的投票目標則會是epoch第一個區塊的blockRoot。

分析 | 以太坊新交易區塊的添加速度又開始回升:上周,以太坊君士坦丁堡和圣彼得堡成功實施硬分叉。現在,新交易區塊被添加到以太坊區塊鏈上的速度又回升了。根據區塊鏈分析網站Etherscan透露,就在以太坊主網接受升級之后的24小時內,日均新增區塊數量已經超過了1500個。以太坊區塊數量激增的主要原因是因為上周四以太坊改進方案1234被激活,該方案設計的目的其實就是為了禁用“難度炸彈“軟件中的一段代碼,而且有效期長達12個月。但是現在,以太坊難度炸彈已經被推遲了,而且炸彈效果似乎也被快速逆轉。根據Etherscan在硬分叉激活后一天的分析報告顯示,以太坊區塊創建的時間已經從19秒減少到了14秒。以太坊區塊鏈分析平臺Alethio發布的報告顯示,從硬分叉激活到現在,并沒發現交易量和智能合約消息調用數量出現大幅波動。[2019/3/9]

計算epoch得票數:搜尋所有Attestation.epochTargetRoot==getEpochFirstBlock(epoch).blockRoot的Attestation,去掉重復的Validator得出該epoch得票數。

epoch總投票數則是加總該epoch每個slot的Validator數量,再除上得票數即能得到epoch得票率。

注:如果epoch第一個slot是空區塊,則往前從過去的slot中找到最近一個非空區塊。

Epoch10第一個區塊是空區塊,則投給epoch10的票要填入epoch9最后一個區塊

第一篇及以上部分算是介紹完了SafeHead的機制,最后這邊再搭配CasperFFG的介紹,讓DApp開發者或使用者能知道如何來利用這兩個工具。

CasperFFG

CasperFFG是以epoch為單位的共識機制,一個epoch要先獲得超過2/3Validator投票成為JustifiedCheckpoint,接著再獲得一次超過2/3投票才會變成FinalizedCheckpoint。

JustifiedCheckpoint

一個epoch要變成Justified最快要經過一輪的投票,也就是一個epoch,6.4分鐘。但變成Justified后還不代表是真的安全的,攻擊者還是能讓兩條分叉鏈上的epoch輪流變成Justified,導致一直沒有新的epoch能變成Finalized。雖然新的區塊還是會一直被propose出來,但從CasperFFG的角度來看,共識機制基本上停擺了,即共識機制的liveness被破壞。

不過要能攻擊成功需要攻擊者占有一定的Validator數量,以及網絡要出現問題導致Validator的投票無法實時傳遞到網絡的另一端。

更多介紹可以參考BouncingAttack。

FinalizedCheckpoint

一個epoch要變成Finalized最快要經過兩輪的投票,也就是兩個epoch,12.8分鐘。雖然比較久但是安全非常非常多,攻擊者要能成功讓兩條分叉鏈上的epoch被Finalized不只需要攻擊者占有超過1/3的Validator,以及網絡出現問題,攻擊者在事后更會被slash至少1/3的Validator,1/3Validator抵押的Ether目前約等價于72億美元。這樣的攻擊破壞的是共識機制的安全性。

要怎么使用Checkpoints及SafeHead?

用Checkpoint來當作Finality

在PoW里,每個DApp都只能自己主觀預估一個BlockConfirmationNumber來確保Finality,但在PoS里,協議本身就提供一個客觀的Finality,雖然等待的時間可能比BlockConfirmationRule還久,但安全性會遠勝于BlockConfirmationRule。

當你在查詢某個鏈上狀態時,你可以透過指定BlockTag為finalized,節點就會回傳給你FinalizedCheckpoint那當下的狀態:

awaitprovider.getBalance("vitalik.eth","finalized")

用SafeHead呈現即時資訊

DApp需要Finality的話可以使用Checkpoint,那在平時前端顯示畫面給使用者時,數據要參考什么時間點的呢?總不可能顯示久久才更新一次的Checkpoint時間點的信息吧?

在PoW中DApp都是拉latest區塊的資訊來顯示,也就是節點看到的最新區塊。但PoS中latest區塊不再那么可靠,這時就可以用safe區塊的信息來顯示,雖然會延遲四秒,但是比latest區塊可靠許多。

參考資料

BalancingAttack:LMDEdition-Consensus-EthereumResearchAnalysisofbouncingattackonFFG-Proof-of-Stake-EthereumResearchUpgradingEthereum|OnePageAnnotatedSpecEthBeaconNodeAPIv2.3.0-Eth2Specv1.1.0OAS3https://beaconcha.in@chainsafe/ssz-npm特別感謝Chih-ChengLiang,Chang-WuChen,StevenWu和doublespending校對本文并提供改進建議。

風險提示:本文內容均不構成任何形式的投資意見或建議。imToken對本文所提及的第三方服務和產品不做任何保證和承諾,亦不承擔任何責任。數字資產投資有風險,請謹慎評估該等投資風險,咨詢相關專業人士后自行作出決定。

Tags:TTEIONALISTAmatter幣未來INCEPTION價格Herbalist TokenSTAKD

NEAR
星球日報 | 新加坡希望成為金融區塊鏈的中心;幣安考慮收購銀行(11月4日)_DOGE:區塊鏈是什么多選題

頭條 新加坡金融管理局董事總經理:新加坡希望成為金融區塊鏈的中心新加坡金融管理局董事總經理RaviMenon在新加坡金融科技節上表示,新加坡希望成為數字資產的中心,而不是用于交易和投機加密貨幣.

1900/1/1 0:00:00
Hetzner阻止服務器訪問導致上千個Solana驗證器處于離線狀態_HET:FACEMETA

11月3日消息,RockawayX數據顯示,由于云服務提供商Hetzner已阻止其服務器上的所有Solana網絡活動,目前有超過1000個Solana驗證器處于離線狀態.

1900/1/1 0:00:00
WEB3 板塊起飛了_WEB3:WEB3價格

今日消息,Meta官方推特宣布,旗下Instagram將上線支持polygon上的NFT功能,由Arweave提供支持,RSS3將幫助Arweave開展相關適配工作.

1900/1/1 0:00:00
Polkadex 發布了Orderbook 去中心化交易所_DEX:polkadot波卡鏈

Polkadex主網上線僅一年多后,Polkadex訂單簿現已開放交易。革命性的基于訂單簿的去中心化交易所(DEX)將成為數字資產交易和DeFi的游戲規則改變者.

1900/1/1 0:00:00
GALA/USDT合約幣種優化升級作業_ALA:MEGALAND幣

尊敬的唯客用戶您好! 唯客WEEX合約將于時間段2022/11/0409:10下架GALA/USDT模擬合約幣對,對相關合約進行優化維護.

1900/1/1 0:00:00
Chiliz (CHZ) 價格預測:新的牛市正在進行中?_Chiliz:比特幣

簡單來說 CHZ已從下降阻力線突破。每日RSI也從下降阻力線突破。波數支持加速向上運動Chiliz(CHZ)價格從下降阻力線突破,證實了其向上運動。短期內增長速度可能會加快.

1900/1/1 0:00:00
ads