宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > 非小号 > 正文

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

作者:

时间: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设回一个更保守的区块。

马斯克:从来没有完全理解以太坊智能合约:12月29日,马斯克在接受播客主 Lex Fridman 采访时表示,其个人对一般参与交易的事物均有清楚的了解,但从来没有完全理解以太坊智能合约的事情。

此外,Elon Musk 还表示虽然自己不知道中本聪是谁,但其认为 Bit Gold 和数字智能合约发明者尼克·萨博对比特币想法演变“负有更大的责任”,尽管尼克·萨博自己声称不是中本聪。(福布斯)[2021/12/29 8:11:01]

而这些都只需要算出区块投票率即可,也就是第一篇提到的步骤

查询新的区块并记录区块,包含分叉链的区块也要能查询得到获取区块里的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才被收录:

以太坊推送服务EPNS主网将于1月11日启动:金色财经报道,以太坊推送服务EPNS宣布其主网将于2022年1月11日启动,这将使推送通知和链上通信正式成为Web3网络中的基础环节,Web3中的企业、服务提供商和dApp将能够创建与他们自己的社区进行交流的渠道。[2021/12/22 7:54:58]

?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所合并而来。

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

以太坊上的大多数USDT活动转向欧美办公时间:金色财经报道,一份新报告显示,USDT在以太坊区块链上的活动已从亚洲办公时间转向欧洲和美国的办公时间,这可能是因为中国打击加密货币交易以及USDT用户迁移到其他区块链。报告称,去年,以太坊上的大多数USDT活动发生在UTC时间2:00至14:00之间(北京时间10:00至22:00),其中UTC时间6:00至8:00期间(北京时间14:00至16:00)最为繁忙。但是,今年在UTC时间2:00至6:00(北京时间10:00至14:00)的使用量较少,UTC时间15:00至20:00(北京时间23:00至04:00)之间的使用量更多。[2021/8/4 1:32:51]

这四位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))

动态 | 以太坊ENS收到 BinanceX 拨款 将支持多链:以太坊域名系统(ENS)已收到来自 BinanceX 的拨款,决定添加多币种支持,ENS将不仅支持ETH或者以太坊平台的代币,还将支持比特币、莱特币或者Zcash等。而且将不仅针对ENS的「.ENS」域名,还包括其他整合了ENS的DNS域名,目前已支持的包括.XYZ和.LUXE,以及未来还会考虑加入.COM和.ORG等1200个顶级域名。另外,ENS与D’Cen钱包合作,将成为第一个整合该功能的钱包。ENS之前已经支持了映射 IPFS 的哈希值或者Tor的.onion域名。[2019/9/6]

第四步:算出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。

动态 | 以太坊基金会计划在生态系统开发上投入3000万美元:据coindesk报道,以太坊基金会计划在未来12个月内在生态系统开发上投入3000万美元。在过去的一年里,该基金会在同一项目上花费了大约2700万美元。[2019/5/12]

计算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对本文所提及的第三方服务和产品不做任何保证和承诺,亦不承担任何责任。数字资产投资有风险,请谨慎评估该等投资风险,咨询相关专业人士后自行作出决定。

标签:TTEIONALISTAKittens PuppiesBullionixGALI价格Town Star

非小号热门资讯
华尔街分析师:Coinbase第三季度的疲软可能不是底部

金色财经报道,华尔街分析师对Coinbase的盈利路线提出质疑。其中摩根大通分析师KennethWorthington认为,该公司第三季度的疲软可能不是底部,他说:“随着交易量的下降,似乎需要更长的时间才能达到EBITDA正数,因为C.

1900/1/1 0:00:00
Cosmos 2.0升级关键时刻:影响深远的三大提案悬而未决

很多人可能不知道的是,现在的Cosmos,正处在一个非常关键的时刻。你可能会疑惑?嗯?什么关键啊,不是前段时间刚刚发布了Cosmos2.0的线图么,Token价格也随之一路走高,貌似一切都在朝着良好的方向发展着?整体确实是这么回事儿,

1900/1/1 0:00:00
WEEX唯客开启“最强称号争霸赛”,Tesla大奖等你拿

WEEX唯客于11月1日开启了为期两周的“最强称号争霸赛”,寻找王牌交易员。全球的精英交易员集结,各自施展交易技能,通过实力赢取丰厚的回报.

1900/1/1 0:00:00
Multicoin Capital:一文探讨MEV中的价值流

原文标题:《ValueFlowsintheMEVEcosystem》原文来源:MulticoinCapital原文作者:ShayonSengupta?原文编译:Kxp,BlockBeats在阅读本文之前,请确保你对MEV有一定的了解.

1900/1/1 0:00:00
Filecoin目前的链上状态,可能不会很快看到FIL的上涨

在10月31日发布的一份官方声明中,Filecoin宣布向去中心化存储目标又迈进了一步。据网络存储团队称,Filecoin最终与ProtocolLabs、AMD和希捷达成了合作关系,以开发一个分散的网络联盟,使web2到web3之间的.

1900/1/1 0:00:00
LTC 技术分析:莱特币能否维持牛市周期?

在移动人行道戏弄50天EMA之后,LTC价格走势保持上升趋势,表明日线图中的看涨模式。那么LTC会捍卫看跌突破吗?在撰写本文时,莱特币(LTC)的交易价格为66.11美元,在过去一周中,该代币上涨了11.26美元,增长了20.33%.

1900/1/1 0:00:00