宇宙链 宇宙链
Ctrl+D收藏宇宙链

以太坊:Safe Head 机制介绍(一)

作者:

时间:1900/1/1 0:00:00

作者:NicLin,imTokenLabs资深区块链工程师

本文受众:区块链开发者

如果想复习以太坊TheMerge的其他改动,可以参考这篇:

https://medium.com/taipei-ethereum-meetup/eth-2-0-cl-el-separation-and-impact-of-the-merge-dbeb6828c907

读者会需要对以太坊PoS的术语和机制有基本的了解。

SafeHead做什么用?

在PoW中,如果没有指定你要哪个区块的状态,节点预设就会回传给你latest区块的状态,也就是最新的状态。但是进到PoS后,PoS的区块比PoW区块更不可靠,因为PoS产生区块不需要任何「work」,而是只要是被指派的proposer都可以产生一个合法区块。这表示在PoS里取latest区块的状态会更容易发生区块、状态被回滚,也因此才会出现SafeHead这个BlockTag:一个比latest区块还旧一些些但是可靠许多的区块,让DApp呈现数据给使用者看的时候,不会因为区块不可靠、经常因为reorg而被revert导致使用体验变很差。

正常情况下对新区块而言,在出块后约四秒,即会被标为safe,成为safe区块,使该区块更可靠不过当网络出现问题或有攻击发生时,safe区块还是有可能revert回旧的区块ProofofStake

a16z Crypto推出以太坊轻客户端Helios:11月8日消息,据官网消息,a16z Crypto推出以太坊轻客户端Helios,基于Rust语言进行编写,在两秒钟内同步,不使用存储,并提供对以太坊的无需信任的访问,且其功能与全节点相同。Helios将数据从不受信任的集中式RPC提供程序转换为可验证安全的本地RPC。Helios与集中式RPC一起工作,可以在不运行完整节点的情况下验证其真实性。[2022/11/8 12:30:56]

在介绍SafeHead之前,先快速复习一下以太坊的PoS共识机制。

在PoS中,时间被划分为每12秒为一个slot,每32个slot为一个epoch。PoS的Validator当前约有接近43.8万个,在每个epoch全部的Validator会被分配到不同的slot,并负责在该slot产生Attestation,产生Attestation可以视为投票的动作。此外,每个slot的Validator还会细分为64个不同的committee,这是为了支援Eth2计划中会有64个ShardChain的设计:每个committee分别投给不同ShardChain的区块,但在Sharding推出前这些committee可以先视为同一个committee。

每一个Validator在其Attestation中主要要填入两个投票的对象:他支持的区块及epoch。一个slot有13700个Validator,所以一个区块最多会有13700张选票投给它;一个epoch有43.8万个Validator,所以一个epoch最多会有43.8万张选票投给它。

Junsik Sim:韩国CBDC将在基于以太坊的Klaytn账本上运行:韩国区块链公司Onther的首席执行官Junsik Sim针对韩国测试其CBDC一事接受采访时表示,Kakao银行、KakaoPay和GroundX:核心团队由来自Kakao旗下的这三家公司的员工组成,将为其已部署的用户应用程序/支付提供开发和集成。S-Core将致力于CBDC的发行。三星Galaxy/Konai将致力于使离线支付成为可能。DreamSecurity将专注于数字钱包。三星SDS和毕马威会计师事务所提供商业咨询。另外,Consensys和ZK加密将提供扩展技术。它将在基于以太坊的Klaytn账本上运行。Klaytn是由Kakao的区块链部门GroundX构建的公共区块链。CBDC试点将使用一条与Klaytn公链使用相同技术的链,但会有所不同,并且仅由开发CBDC的团队在内部使用。(福布斯)[2021/8/4 1:32:43]

针对区块及epoch的投票其实分别就是以太坊PoS中ForkChoiceRule及CasperFFG两层共识机制的核心,下面一层是持续不断在增长的区块,共识是靠ForkChoiceRule决定,以区块为单位,看的是每个区块的得票数及其子孙区块的得票数;搭建在上面的是运作比较缓慢的CasperFFG,以epoch为单位,看的是每个epoch的得票数。

不断增长的区块,使用的共识是ForkChoiceRule

以太坊市值已超越除摩根大通外的所有银行:金色财经报道,Companiesmarketcap数据显示,以太坊市值(目前约为3679.9亿美元)现在已超过世界上除摩根大通银行以外的所有银行。摩根大通银行排名第一,市值达4662.9亿美元。美国银行排名第三,市值达3478.2亿美元。[2021/5/4 21:21:20]

CasperFFG是以epoch为单位的共识

两层共识是并行运作的

这篇分析五月PoSreorg的文章也有简短但是更细节的共识机制介绍。

ForkChoiceRule

你可能会好奇已经有ForkChoiceRule帮忙从多条分叉链中算出目前哪条才是最长链,为什么还会需要再算一个SafeHead?或是反过来,为什么不干脆用SafeHead算法取代ForkChoiceRule?

其实ForkChoiceRule和SafeHead可以视为两个不一样的机制。节点需要ForkChoiceRule来决定目前最长链是哪一条,proposer才能将区块建立在最长链之上,即便最新的区块获得的得票数不高,但节点算出的最长链就是这条,所以还是得接在这个最新区块后面。而SafeHead是给DApp、给使用者看的,是节点替他们找出的一个比较旧但是可靠许多的区块。

针对ForkChoiceRule其实有不少攻击,例如BalancingAttack会让节点不断在两条分叉链之间切换。其他攻击可以参考最下方SafeHead投影片里的第3页到第7页。这些攻击都有可能造成reorg,而SafeHead其实不是要算出一个区块是可以在攻击发生时还能不被影响,因为reorg是没办法避免的。

USDC Incinerator在以太坊上销毁约1748.5万枚USDC:Whale Alert数据显示,北京时间2月8日06:14,USDC Incinerator在以太坊网络上销毁17,485,298枚USDC。哈希值为:0x5a430f14445f50f159fe9ee4d3696edd5418353c4acc19bc0bce34c872200176。[2021/2/8 19:10:34]

CasperFFG

因为接下来会提到CasperFFG的相关名词,所以在这里先做一个重点提要,在文章末段会有更深入的CasperFFG介绍。

CasperFFG有两个产物:JustifiedCheckpoint及FinalizedCheckpoint当Checkpoint获得超过2/3Validator投票会变成JustifiedCheckpoint,是很安全的区块当区块连续两个epoch都获得超过2/3Validator投票则会变成FinalizedCheckpoint,具有Finality性质,是非常非常安全的区块接下来将会进入今天的正题:SafeHead

SafeHead

在网络正常且没有攻击的情况下,在新区块出块后约四秒,即会被标为safe,成为safe区块,使该区块更可靠。这是因为SafeHead是基于每个区块的得票率去做计算,当网络出现问题或攻击正在进行时,一个正常节点所观察到的区块得票率会开始下降,因为那些消失的票数可能投给另一条分叉链上的区块。在这种情况出现时,SafeHead会停住或甚至revert回旧的区块。

比特币期权及以太坊期权未平仓合约创历史新高:金色财经报道,截至11月22日,比特币期权未平仓合约总额达到45.3亿美元,自11月15日以来增加了11.3亿美元。此外,以太坊期权的未平仓合约总额达7.8005亿美元。 据The Block Research数据,以太坊期权未平仓合约一周内增加了2.2109亿美元,涨幅为39.5%。[2020/11/24 21:50:44]

PoS节点可以由观察到的得票率变化来做应对,相反的在PoW里攻击者暗中建造的链一但成为最长链,正常节点手上的区块就会直接被reorg掉,节点没有办法提前观察出异状。

使用范例

读取Vitalik最新的余额:awaitprovider.getBalance("vitalik.eth")读取Vitalik的余额:awaitprovider.getBalance("vitalik.eth","safe")要找出SafeHead主要分成两步骤:先算出区块得票率,再算出一个区块包含其所有子孙区块的得票率平均。

先算出区块得票率

要能算出SafeHead,首先第一步是算出每个区块的得票率。一开始有提到目前每个slot最多可以获得13700张选票,所以得票数除上13700就可以算出得票率。

注:如果某个slot被指派的proposer没有propose区块,则被分配到该slot的Validator就会投给前一个区块。所以其实一个区块的得票数是有可能会高于该slot所被分配到的Validator数量的。

每个Attestation里要填入的值会包含slot、index及beaconBlockRoot这三个。slot就是该Validator被分配到的slot,index是他被分到的committee编号,beaconBlockRoot是它投的区块的blockroot。有了这些资料我们就可以为每个区块算出得票数及得票率:针对每个区块找出所有beaconBlockRoot和它的blockroot一样的Attestation,接着要去掉重复的Validator,这是因为Validator签完Attestation后会广播到p2p网络中,然后这些Attestation会被合并起来,而因为负责合并的人可能有多个,所以同一个Attestation可能会出现在不同合并者合并后的Attestation中。去掉这些重复后的Attestation数量就是得票数。

接着算出一个区块包含其所有子孙区块的得票率平均

这里比较难解释,因此直接搭配图示解释比较清楚:

从JustifiedCheckpoint往后的区块开始计算一个区块本身得票率加上所有子孙区块的得票率平均就是一个区块的SafeHead分数当一个区块的SafeHead分数超过50则可视为SafeHead场景一

Block2的分数为其本身得票率加上每个子孙区块的得票率的平均:(95959590)/400=94%。以此类推,Block6是最新区块,没有得票率,所以Block5分数即为本身得票率。

场景二:Block4平均得票率为45%,没办法被视为SafeHead

即便子孙区块出现分叉也算,因为投给这些子孙区块都隐含投给这个区块本身没出块的slot的得票率只能打五折场景三:如果出现分叉,得票率可以相加,因为都隐含投给Block4及其祖先区块

场景四:Slot4没出块,在算它自身得票率时需打五折:55/2=27.5

场景五

以上是SafeHead的算法,看起来还算能理解,但每个新的区块的得票率都会影响所有祖先区块,且每个区块都要考虑所有的子孙区块的得票率,所以实践上其实不是这么简单。

还没实践的SafeHead算法

但目前这个SafeHead算法还没被实践,DApp如果现在使用safe这个BlockTag去查询链的状态,都会得到JustifiedCheckpoint那个时间点的状态,也就是目前的SafeHead等于JustifiedCheckpoint。

JustifiedCheckpoint太久了,如果使用JustifiedCheckpoint则DApp前端显示的是至少6.4分钟以前的信息,或者是使用者送出交易要6.4分钟才会显示出来,这都是非常糟糕的使用体验。所以现在还不适合用safe这个BlockTag,但只能用latest区块吗?其实到目前为止网络一直都正常且PoS运作也都非常顺利,每个区块得票率几乎都是九成以上,所以在过渡期内先用latest区块或BlockConfirmationRule也不需要担心会常常碰到reorg。

注:只单纯看区块数而不看区块「得票数」的方式都不可靠,例如PoS里用BlockConfirmationRule就不可靠。不过如同上述,PoS到现在都运作得非常好,所以不需太担心。

下一篇将介绍imToken尝试实践的SafeHead版本、除了SafeHead之外能做的事、CasperFFG以及该怎么使用Checkpoint和SafeHead。

参考资料

SafeBlockConfirmationRule-HackMDEthereumPoSAttackandDefense—jmcook.eth介绍SafeHead算法的投影片:

Highconfidenceblockconfirmations

特别感谢Chih-ChengLiang,Chang-WuChen,StevenWu和doublespending校对本文并提供改进建议。

风险提示:本文内容均不构成任何形式的投资意见或建议。imToken对本文所提及的第三方服务和产品不做任何保证和承诺,亦不承担任何责任。数字资产投资有风险,请谨慎评估该等投资风险,咨询相关专业人士后自行作出决定。

标签:SAFEHEADEHEALISAFECATVILLSHEADZ币WhiteheartNeverend Ecentralization Could Exange

比特币最新价格热门资讯
为什么HDWY比狗狗币DOGE和柴犬SHIB更适合投资?

公众号:财圈小风 所有平台均为,由于平台限制,图片未能展现出来,大家可以到公众平台阅读此文?过去一周,狗狗币(DOGE)和柴犬(SHIB)经历了一系列上涨,这得益于ElonMusk收购Twitter将大大提升meme币的效用的猜测.

1900/1/1 0:00:00
未来股市新低? 随着美联储发出信号

美联储主席杰罗姆·鲍威尔发出了明确的信号,利率将走高,并比此前预期的停留时间更长。投资者想知道这是否意味着遭受重创的股市即将创下新低.

1900/1/1 0:00:00
Trade to share 85,000 INR! Huobi Global to launch INR Trading Contest on Nov 7

DearHuobiGlobalUsers,HuobiGlobalwillbelaunchingtheINRTradingContest.TradeINRinoureventtowinawesomerewards!JoinINRTrad.

1900/1/1 0:00:00
USDC发行人计划在看跌市场中向Circle储备基金注入投资

?USDC发行人已开始将资金投入其CRF,以确保持有者可以在需要时赎回他们的代币。由于市场崩盘,许多加密货币公司在2022年面临问题。一些缩小规模,而另一些则申请破产.

1900/1/1 0:00:00
Solana宣布推出GeoNFT以及Solana dApp商城

11月6日消息,Solana团队在里斯本Breakpoint活动期间,还披露了在迈阿密落地的Solana商店运行情况,并展示了人们在商店结账的走动视频.

1900/1/1 0:00:00
BTC和ETH流通量出现大幅降低 但购买情绪依然保持旺盛

?公众号:币圈一级市场阿生截止到今天中午13点的BTC持仓价格分布,从今天零点到现在历时13个小时的BTC链上地址变化.

1900/1/1 0:00:00