作者: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設回一個更保守的區塊。
歐易支持以太坊合并計劃,提醒用戶注意市場波動風險:據官方公告顯示,歐易將支持以太坊合并計劃,在合并前及合并過程中不會暫停 ETH 任何交易。
另外,歐易Web3錢包將支持更全面的多鏈生態,積極關注并已做好支持分叉鏈的準備,后續將根據社區接受度和用戶需求評估Web3錢包支持分叉鏈上線的時間。
歐易官方表示,如以太坊合并升級過程中,產生分叉鏈和新的分叉代幣,將評估并支持分叉代幣的空投發放與提現。
需要注意的是,分叉代幣需通過歐易的正常上幣審核流程,只有通過審核才會開放交易,詳情請關注官方最新公告。同時,歐易官方提醒用戶,以太坊合并臨近,市場可能會有較大價格波動,請提前做好倉位管理和風險控制。[2022/8/11 12:19:32]
而這些都只需要算出區塊投票率即可,也就是第一篇提到的步驟
查詢新的區塊并記錄區塊,包含分叉鏈的區塊也要能查詢得到獲取區塊里的Attestation并記錄Attestation針對每個區塊,搜尋所有Attestation.beaconBlockRoot==Block.blockRoot的Attestation,去掉重復的Validator得出該區塊得票數算出每一個slot的總Validator數量,除上得票數,算出得票率注:計算epoch投票率會在第三步和區塊投票率不太一樣,在后面會再補充解釋。
其中第二步、第三步及第四步在實踐上有一些需要注意的地方:
第二步:獲取區塊里的Attestation
Glassnode:以太坊期權未平倉合約歷史首次超過比特幣期權未平倉合約:金色財經報道,據區塊鏈分析公司Glassnode最新分析顯示,衍生品交易商正在關注以太坊“合并”,當前以太坊期權未平倉合約為66億美元,比比特幣的48億美元期權未平倉合約還要高,屬于歷史上頭一次。雖然還沒有達到歷史最高點,但ETH期權的未平倉合約已經接近創造新的歷史,而比特幣的未平倉合約仍然遠遠低于峰值,僅為歷史最高值的35%。市場上已經堆積了巨量的看漲期權,讓看跌期權相形見絀,交易者們似乎看好以太坊價格上漲至2200美元,大量未平倉合約甚至達到5000美元。[2022/8/10 12:16:20]
同一個slot且同一個committee的Validator所產生的Attestation不會總是被完美合并成一個,所以會常常出現同一個slot同一個committee的Validator的Attestation在不同區塊被收錄。如果你透過beaconcha.in來查詢一個區塊的話,你會看到投給它的Attestation分散在不同區塊,以區塊4835000為例,你可以看到雖然大多數的committee的Attestation都在下一個slot4835001被收錄,但仍有些投票是在后面的slot才被收錄:
?Committee10其中一個Validator的Attestation在slot4835010才被收錄
所以在資料庫里要唯一識別「同一個slot且同一個committee的Validator所產生的Attestation」會有點麻煩,要不(1)遇到同樣的Attestation但在不同區塊收錄時,將Validator合并起來,但如此就沒辦法呈現像上圖那樣的資訊,也分辨不出合并過哪些Attestation;要不(2)用Attestation被收錄的區塊號碼及Attestation被收錄的排序來識別Attestation,如此就能分得出同樣的Attestation在不同區塊被收錄的情況。
以太坊箭形冰川升級將于12月8日進行,節點需在12月5日前完成升級:11月11日消息,以太坊箭形冰川(ArrowGlacier)網絡升級將于區塊高度13773000(約12月8日)處進行,以太坊節點需在12月5日之前升級節點,以考慮可能變化的出塊時間。此前報道,以太坊核心開發者TimBeiko表示箭形冰川升級將于12月8日進行,難度炸彈計劃推遲至明年6月。[2021/11/11 6:45:20]
區塊4835000收錄的65個Attestation中的第一個Attestation
第三步:AggregationBits
每個Attestation會有一項叫做AggregationBits,這是一個bit陣列,用來記錄這個Attestation是由committee中的哪幾個Validator的Attestation所合并而來。
以slot4823390的區塊里所含的第一個Attestation為例,其CommitteeIndex為42,代表這個Attestation是由committee42的Validator的Attestation所合并而成。另外其AggregationBits為214個bits,其中只有4個bit是1,代表這個Attestation是由committee42一共214個Validator中第28、第58、第84及第147位Validator的Attestation所合并而成。
動態 | SparkPool、Ethermine、F2Pool位居以太坊礦池算力前三:金色財經報道,數據顯示,當前以太坊礦池算力占比分別為:SparkPool(34.97%)、Ethermine(24.41%)、F2Pool(11.57%)、NanoPool(9.04%)、SpiderPool(3.89%)、MiningPoolHub(3.29%)、0x84a...(1.98%)、2Miners(1.45%)、Others(16.12%)。[2020/2/24]
這四位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))
分析 | 伊斯坦布爾升級之后 以太坊理論上最多可處理2048TPS的事務:以太坊基金會合作初創公司Iden3指出,在經過伊斯坦布爾升級之后,采用ZKRollup,理論上最大可以處理2048 TPS,這個數字比ETH開發者Eric Conner聲稱的3000TPS,但仍高于VISA的2000 TPS。在升級之前,以太坊每秒只能處理30個事務。ZK-Rollup使每個以太坊區塊中驗證2048 TPS只是理論上的最大值。2048TPS的吞吐量將需要將15個批次裝配到一個塊中,并且批次創建時間僅為一秒鐘(假設15秒的塊時間)。iden3團隊還談到了每個zkRollup批次如何需要簡短的密碼證明(zk-SNARK),以證明該批次中交易的完整性。此外,生成此證明在計算上非常昂貴,這也是達到理論吞吐量限制的主要瓶頸。(ambcrypto)[2019/12/16]
第四步:算出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。
計算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:TTEIONALISTATTE幣Ultimate Championsalice幣百倍幣Filecoin Standard Hashrate Token
本文來自?The?Block,原文作者:AdamJamesOdaily星球日報譯者?|念銀思唐聲明中表示.
1900/1/1 0:00:00數字貨幣將通過與加密服務提供商SmartPay的合作來尋求擴大其在南美國家的業務。Tether是世界上最大的市值穩定幣USDT的發行人,巴西的24000多臺ATM機將支持其代幣.
1900/1/1 0:00:00昨天美聯儲的加息75點,符合預期,然而鮑威爾的講話卻非常強硬。好的指標:月線的Macd出現反轉信號,在此之前月線的兩次macd背離都是結束了熊市.
1900/1/1 0:00:00親愛的BitMart用戶:BitMart將于2022年11月8日上線代幣QChain(QDT)。屆時將開通QDT/USDT交易對.
1900/1/1 0:00:00尊敬的BIKA用戶: BIKA合約已于2022年11月3日15:45-16:00對26個永續合約交易對進行最高杠桿倍數調整,已經開倉的不受影響.
1900/1/1 0:00:00Web3世界中,繼新加坡流量減退后,香港重回亞洲加密世界的注意力中心。在不久前舉行的“香港金融科技周”上,香港特區政府正式發表《有關虛擬資產在港發展的政策宣言》,闡明政府為在香港發展具活力的虛擬.
1900/1/1 0:00:00