△ Photo by Nick Fewings on Unsplash
本文作者:Nic Lin
imToken Labs 资深区块链工程师
“
作者的话
上一篇介绍了 Safe Head 机制,这一篇将介绍 imToken 尝试实践的 Safe Head 版本以及除了 Safe Head 之外能做的事,最后会介绍 Casper FFG 以及该怎么使用 Checkpoint 和 Safe Head。
上一篇最后有提到 Safe Head 算法还没落地,虽然目前 PoS 运作都正常,但我们在 imToken 仍尝试设计出自己的 Safe Head 版本,希望在过渡期能获得比 Block Confirmation Rule 更可靠的区块参考,让使用者的体验比较不会受到网络波动所影响。
过渡期及 Safe Head 之外能做的事
-
查询新的区块并记录区块,包含分叉链的区块也要能查询得到 -
获取区块里的 Attestation 并记录 Attestation -
针对每个区块,搜寻所有 Attestation.beaconBlockRoot == Block.blockRoot 的 Attestation,去掉重复的 Validator 得出该区块得票数 -
算出每一个 slot 的总 Validator 数量,除上得票数,算出得票率
△ Committee 10 其中一个 Validator(编号 248996)的 Attestation 在 slot 4835010 才被收录
△ 区块 4835000 收录的 65 个 Attestation 中的第一个 Attestation
△ 这四位 Validator 的编号分别是 218385、32675、220759 及 323143
import { BitArray, BitListType } from “@chainsafe/ssz”
const committeeSize = 214
// Raw aggregation bits are hex string
const rawAggregationBits = “0x000000080000000200000800000000000000040000000000000040”
// Remove 0x prefix
rawAggregationBits = rawAggregationBits.substring(2)
// Convert raw aggregation bits to byte array
const byteArraySize = committeeSize / 8 + 1
const byteArray = new Uint8Array(byteArraySize)
for (let c = 0; c < rawAggregationBits.length; c += 2) {
const byte = parseInt(rawAggregationBits.substring(c, c + 2), 16)
byteArray[c / 2] = byte
}
// Deserialize byte array to bit list with SSZ library
const CommitteeBits = new BitListType(byteArraySize * 8)
const aggregationBitList =
CommitteeBits.deserialize(byteArray)
.toBoolArray()
.map((v) => (v ? 1 : 0))
计算 epoch 投票率
△ Epoch 10 第一个区块是空区块,则投给 epoch 10 的票要填入 epoch 9 最后一个区块
Casper FFG
要怎么使用 Checkpoints 及 Safe Head?
Reference
-
Balancing Attack: LMD Edition – Consensus – Ethereum Research
-
Analysis of bouncing attack on FFG – Proof-of-Stake – Ethereum Research
-
Upgrading Ethereum | One Page Annotated Spec
-
Eth Beacon Node API v2.3.0 – Eth2Spec v1.1.0 OAS3
-
https://beaconcha.in
-
@chainsafe/ssz – npm
特别感谢 Chih-Cheng Liang,Chang-Wu Chen,Steven Wu 和 doublespending 校对本文并提供改进建议。
风险提示:本文内容均不构成任何形式的投资意见或建议。imToken 对本文所提及的第三方服务和产品不做任何保证和承诺,亦不承担任何责任。数字资产投资有风险,请谨慎评估该等投资风险,咨询相关专业人士后自行作出决定。
了解更多区块链技术、工具和数字资产信息
请关注我们
点击在看分享我们
原文始发于微信公众号(布噜说):以太坊:Safe Head 机制介绍(二)