本文详细介绍了以太坊中ePBS(Enshrined Proposer Builder Separation)的设计规范和实施细节。文章讨论了ePBS的主要改进,如信任最小化和增强的审查抵抗力,并深入分析了执行负载的时间线、治理结构及安全性。同时,作者还提出了一些开放性问题,探讨了ePBS在未来以太坊生态中的重要性。
目录
注意: 如果你对ePBS(确立的提议者构建者分离)或以太坊的PBS(提议者构建者分离)不太了解,或者希望刷新你的理解,我之前关于ePBS的文章是一个很好的起点^15。
当前的确立的提议者构建者分离(ePBS)或本地提议者构建者分离规范^12 处理了以太坊当前实现PBS的一个关键问题^1。传统上,提议者和构建者必须依赖中介通过MEV-Boost^3,这引入了信任和审查的问题,如上所述。ePBS框架通过将中介的必要性(“必须”)转换为一种选择(“可以”),改变了这一动态,允许以太坊生态系统内更无信任的交互^5^7。它结合了EIP-7251和EIP-7002,这两者是其实施的重要组成部分。
EIP-7251旨在将以太坊验证者的最大有效余额(Max EB)提高到2048 ETH,同时保持最低质押32 ETH,减少总验证者数量而不妨碍安全性。EIP-7002引入了一种机制,允许验证者使用其执行层(0x01)提取凭据从信标链中触发退出,以增强质押操作的灵活性和安全性。
ePBS规范的主要改进:
信任最小化:它通过允许提议者和构建者更独立地操作,减少对中介的信任需求,从而降低操控与信任依赖的风险。
兼容性所需的最小变化:该设计实施了保持与当前共识和执行客户端操作兼容所需的最少数量的变化。遵循现有的12秒槽时间,确保网络操作的连续性与稳定性。
防审查性:它通过根据EIP-7547引入前向强制包含列表来增强防审查性,确保某些交易必须被包含,从而帮助维护网络完整性。
层增强:变化主要发生在共识层(CL),对执行层(EL)的调整最小,主要与处理包含列表相关。
安全保证:
验证者的自我构建能力:验证者保留自我构建他们的负载的能力,这对于维护独立性和灵活性至关重要。
可组合性:该规范旨在与其他机制,如时间槽拍卖或执行票证拍卖,可组合,增强灵活性并促进未来创新的潜力。
实施细节:
ePBS规范引入了特定的角色和职责:
在每个槽期间,提议者收集出价,并在选择出价后提交带有构建者签名承诺的区块。然后,验证者根据这些承诺调整构建者和提议者之间的财务信用。构建者随后揭示他们的执行负载,履行其义务。根据区块的生成和揭示,槽的结果可以变化——错过、空或者满,PTC在确定槽的结论性质方面起着关键作用。
sequenceDiagram
participant Proposer
participant EL as Execution Layer
participant Builders
participant Validators
participant Aggregators
participant PTC as Payload Timeliness Committee
participant Network as P2P Network
Note over Proposer: 槽开始前的准备
rect rgb(191, 223, 255)
Proposer->>EL: 请求完整包含列表
EL-->>Proposer: 提供交易和地址
Proposer->>Proposer: 填写并签署包含列表摘要
Proposer->>Network: 广播包含列表
end
Note over Proposer: 槽开始,时间t=0秒
rect rgb(191, 223, 255)
Note over Builders: 构建者准备出价
Builders->>Proposer: 通过p2p网络或直接发送出价
Proposer->>Proposer: 选择构建者的出价
Proposer->>+Validators: 准备并广播含构建者出价的SignedBeaconBlock
Note over Validators: 在t=0到t=3秒之间
Validators->>Validators: 独立运行状态<br>转换函数在信标块上
Validators->>-EL: 验证提议者签名和验证包含列表
end
Note over Validators: t=3秒
rect rgb(191, 223, 255)
Validators->>+Validators: 对信标块和包含列表的存在进行证明
Validators->>-Network: 广播证明
end
Note over Builders: t=6秒
rect rgb(191, 223, 255)
Aggregators->>+Aggregators: 聚合并提交<br>证明聚合
Aggregators->>-Network: 提交聚合
Builders->>+Builders: 监测子网,决定<br>负载保留情况
Builders->>-Network: 广播执行负载
end
Note over PTC: t=9秒
rect rgb(191, 223, 255)
PTC->>PTC: 评估执行负载的及时性和状态
alt 负载状态
Note over PTC: PAYLOAD_PRESENT ==> 如果负载信封及时被看到<br>且payload_withheld = False
PTC-->>Network: 投票PAYLOAD_PRESENT
Note over PTC: PAYLOAD_WITHHELD ==> 如果负载信封及时被看到<br>且payload_withheld = True
PTC-->>Network: 投票PAYLOAD_WITHHELD
Note over PTC: PAYLOAD_ABSENT ==> 如果信标块未见或<br>负载未见
PTC-->>Network: 投票PAYLOAD_ABSENT
end
end
Network-->>Validators: 导入和验证所有数据:IL、信标块、<br>证明、负载证明、完整执行负载
rect rgb(191, 223, 255)
alt 状态选项
Note over Validators: 完整区块 ==> 信标块和<br>执行负载均已成功导入
Note over Validators: 空区块 ==> 信标块已导入,<br>负载未及时透露
Note over Validators: 跳过槽 ==> 本槽期间未导入任何共识区块
end
end
rect rgb(191, 223, 255)
Validators->>Validators: 根据上述结果评估区块链的新头<br>
end
Note over Validators: 槽结束
图 – 基于ePBS规范的新槽结构流程。
基于ePBS规范的新槽结构流程解释:
槽前的准备:
ePBS新内容:IL是提议者在执行层中保证网络的防审查性的一个新组成部分。它基于前向包含,提议者和验证者交互,以确保交易有效且高效地向前推进。
包含列表容器:
从EL请求IL:
get_execution_inclusion_list
从执行层获取待包括的交易,确保它们根据当前状态有效。返回的是一个容器GetInclusionListResponse
,其中包含transactions
(所需的交易对象列表)和summary
(transactions
的摘要,包括诸如“from”地址的关键信息)。
构建IL:build_inclusion_list
将接收的交易组织成结构化格式,为签署准备摘要,并确保符合网络标准。返回的容器为InclusionList
,包含SignedInclusionListSummary
(签名交易摘要),以验证真实完整性以及transactions
(待包括的已验证交易列表)。
广播IL:槽开始,时间t=0秒:
ePBS新内容: inclusion_list_summary
属性被包含在ExecutionPayload
中。该字段与区块内某些交易的包含摘要相关,提供对区块内所包含内容的控制。
构建者:准备和发送出价
ExecutionPayloadHeader
容器准备出价,该容器包含必要的细节,如父区块哈希、费用接收者和提议的交易费用等。SignedExecutionPayloadHeader
,生成签名的ExecutionPayloadHeader
并广播。execution_payload_header
主题发布。提议者:选择出价并广播已签名的信标区块
BeaconBlockBody
,其中包含signed_execution_payload_header
及其他标准元素。process_block_header
处理区块头,确保所有元素符合共识规则,并在当前链上下文中区块有效。SignedBeaconBlock
。beacon_block
主题,供所有网络参与者访问。BeaconBlockBody
内,ExecutionPayloadHeader
包含的parent_block_hash
链接到执行层中的父区块,确保链的连续性,并且block_hash
将最终链接到构建者生成的ExecutionPayload
的哈希,对于验证者验证链的完整性和连续性至关重要。在t=0到t=3秒之间:
验证者:验证信标块和包含列表
SignedBeaconBlock
后,验证者调用process_block
函数,全面处理块处理的不同方面,包括头验证、RANDAO、提议者惩罚、证明等。process_execution_payload_header
,验证块内的执行负载头。ExecutionPayloadHeader
引用的IL。如果区块和IL成功通过验证,状态转换函数state_transition
更新信标状态以反映新区块。这包括更新验证者状态,调整基于证明和惩罚的余额,轮换委员会。在t=3秒左右:
验证者:对信标块进行证明
process_attestation
验证和处理针对信标块的每个证明。这包括验证信标块的槽、证明委员会,并根据共识规则确保证明数据的正确性。在t=6秒左右:
ExecutionPayloadEnvelope
。这种封装确保负载为纳入信标链做好准备。他们将payload_withheld
字段设置为false。payload_withheld
为true来保留负载。process_execution_payload
,在当前状态下处理执行负载以确保其有效性。这涉及验证交易、确保状态转换的正确性,并检查负载是否符合共识规则。ExecutionPayloadEnvelope
,以生成SignedExecutionPayloadEnvelope
,再通过p2p网络向execution_payload
主题广播。在t=9秒左右 - 负载及时性委员会(PTC):
ePBS新内容:PTC是ePBS规范中引入的新组成部分。
full
或empty
),验证者因此获得完整的证明信用(目标、来源和头部及时)。不准确的证明将导致类似漏证明的惩罚。N+1
的提议者负责将槽N
的PTC证明包含在该块中。对于进入不当证明没有直接的激励,因此通常只有一个PTC证明每块是必要的。PayloadAttestation
)被包含在前一槽的区块中,而未聚合的证明(PayloadAttestationMessage
)实时广播并处理。PTC验证者评估并投票执行负载的及时性
ExecutionPayload
。PTC验证者根据负载的存在和接收时间投票负载的及时性。广播负载及时性证明
PayloadAttestation
记录验证者关于负载的及时性和存在的证明。get_payload_attesting_indices
函数确定哪些PTC验证者在证明负载的存在和及时时投票,通过检查他们在PayloadAttestation
中的汇聚标志。payload_attestation_message
主题进行广播。聚合并将负载证明包含在信标块中
PayloadAttestation
消息,进行聚合,并确保它们包含在即将到来的信标块中,以记录和最终确认验证者对负载及时性的共识。这些证明被聚合到一个IndexedPayloadAttestation
容器中,其中包括证明的验证者索引、负载证明数据及一个集体签名。根据证明更新信标链状态
process_payload_attestation
函数由信标链调用,用于处理和验证传入的负载证明。它确保证明数据是正确的,并且签名有效,将这些信息整合到信标状态中。信标链状态根据负载证明更新。奖励计算与分配:对于每个正确证明负载状态的验证者,将设置参与标志并根据预定义权重计算奖励(PARTICIPATION_FLAG_WEIGHTS
)。奖励被汇总,证明的提议者按比例获得奖励,计算考虑到协议规范中的各种权重和分母(WEIGHT_DENOMINATOR
、PROPOSER_WEIGHT
)。
提议者奖励:最终计算提议者的奖励并通过调用increase_balance
方法更新提议者的余额。
槽结束:
get_head
根据最新的块提议、负载证明及其他相关信息,如证明和余额的权重,确认链的头部。Gossip层检查:
MAX_TRANSACTIONS_PER_INCLUSION_LIST
设定的最大值。风险与缓解措施:
on_inclusion_list处理程序:
信标状态跟踪:
EL验证:
inclusion_list.transactions
的交易是否有效且可包括,以当前状态进行。inclusion_list.signed_summary.message.summary
准确列出所包含交易的“from”地址。MAX_GAS_PER_INCLUSION_LIST
。(base_fee_per_gas + base_fee_per_gas / BASE_FEE_MAX_CHANGE_DENOMINATOR) * gas_limit
。在ePBS系统中,执行负载的处理包括分布在gossip、共识和执行层的几个关键步骤:
Gossip 执行负载通过execution_payload
发布主题共享,需进行关键验证:
共识状态转换 在gossip后,负载通过on_execution_payload
选择分叉处理程序进行共识验证:
latest_block_hash
和latest_full_slot
。执行层状态转换 执行层扩展其角色以验证InclusionListSummary
的满足情况:
InclusionListSummary
中的地址在负载中活跃,考虑当前和以前负载的交易和余额变动。Gossip 负载证明由PTC成员通过PAYLOAD_ATTESTATION_MESSAGE
对象广播,传播前需经过严格检查:
选择分叉处理程序 在通过gossip验证后,负载证明通过on_payload_attestation_message
处理程序在选择分叉中进行处理,包含:
Gossip
SignedBeaconBlock
通过gossip或RPC进入,关键验证主要集中于父信标块的合法性。on_block处理程序
block.parent_root
)和通过signed_execution_payload_header
项在BeaconBlockBody
推导的执行层。BeaconBlockBody
中的修改包括移除执行负载与块KZG承诺、添加signed_execution_payload_header
以及新的payload_attestations
。状态转换
process_block
现在根据ePBS的变更进行调整,包括对应提取处理的修改,以及与父负载的同步。负载证明 负载证明PayloadAttestation
代表信标块处理中的一个重要组成部分,为执行负载增加了PTC的验证层。
PTC委员会组成
get_ptc
函数设计用于通过从现有信标委员会选择验证者来组建PTC,特别定位在每个委员会列表的结尾选择验证者,以形成PTC。选择过程确保PTC得到充分填补,同时对标准信标委员会的结构和功能影响最小。处理负载证明
PAYLOAD_PRESENT
在槽确实满时)将导致提议者和证明验证者均能获得奖励。这确保了其激励与负载状态准确和诚实报告相一致。PARTICIPATION_FLAG_WEIGHTS
,并根据证明者的基本奖励计算proposer_reward
,确保验证者积极并正确参与PTC。PAYLOAD_ABSENT
时证明负载的存在),将施加惩罚。提议者和证明者均会受到惩罚,以防止包含不准确或误导的证明。提议者的惩罚proposer_penalty
则显著加倍,以防止提议者与证明者之间的潜在共谋,即他们可能通过同时包含一致和不一致的证明而获益。实现与理由
由于引入诸如选择分叉考虑、执行负载验证和包含列表时间等新机制,验证者的角色和行为得以进一步明确,特别是提议者和PTC成员。
提议者职责
执行负载与包含列表准备:
SignedExecutionPayloadHeader
并请求或构建包含列表。广播时机:
构建者交互:
战略考虑:
提议者确定头部
N
开始时,提议者必须有效确定链的头部,从而有效提议新的区块。这涉及评估多种情境,例如跳过槽、缺失负载和延迟负载,基于最新有效区块数据作出决策。PTC成员职责
负载及时性证明:
payload_attestation
证明:PAYLOAD_PRESENT
:如果观察到有效的当前槽共识块和相应的执行负载。PAYLOAD_WITHHELD
:如果观察到有效的当前槽共识块与构建者发出payload_withheld = true
的消息。PAYLOAD_ABSENT
:如果观察到有效共识块而没有相应的执行负载。证明条件:
构建负载证明
验证者考量
准备多个负载
出价提交策略
直接出价请求
SignedBidRequest
机制直接请求出价,将允许验证者向构建者直接请求执行头。这一对构建者API的小修改可以利用现有客户端代码,提高验证者和构建者之间的直接交互能力。class BidRequest(container):
slot: Slot
proposer_index: Validator_index
parent_hash: Hash32
parent_block_root: Root
class SignedBidRequest(container):
message: BidRequest
signature: BLSSignature
Gossip作为备用
构建者揭示安全性
构建者保留安全
提议者安全性
总体安全考虑
ePBS分叉的介绍,带来了对选择分叉规则的复杂变更,特别针对构建者和提议者的安全。这些变更旨在适应网络延迟和诸如负载保留这些战略性行为。
ePBS forkchoice的关键概念:
(区块,时隙)投票:
有效负载状态处理:
包含列表可用性:
有效负载提升的安全性分析:
实际示例:
在以太坊协议中,Mike 在确立 PBS(ePBS)时提出了一些有趣且具有挑战性的未解问题^5。
绕过性突出了过渡到 ePBS 的一个关键挑战:验证者和构建者可能会继续依赖外部中继或解决方案,而非确立的协议。这里的担忧有两个方面:首先,如果网络中大部分参与者选择不参与,这对 ePBS 的有效性提出了质疑;其次,它探讨了设计一个无法被绕过的系统的可行性,而不会对验证者的自主性或以太坊的去中心化精神施加不合理的限制。
确立 PBS 的目标是为以太坊协议引入一个中立、无信任的中继,以标准化和保护提议者与构建者之间的关系。该倡议旨在缓解诸如 MEV-Boot 等协议外解决方案所固有的中心化风险,增强审查抵抗,并可能作为更系统性地解决与 MEV 相关问题的基础步骤。确立 PBS 尽管面临绕过问题,但仍然可以提供一个可靠的后备机制,鼓励更多的验证者直接参与该协议,并与长期目标(如 MEV 重新分配机制,例如 MEV-burn)保持一致。
选择不确立 PBS 实质上将区块构建和 MEV 分配的重大控制权交给外部系统,可能加剧中心化和安全脆弱性。这一让步可能需要优先为中立中继提供资金和支持,作为维护公平竞争环境和保护 MEV 市场抵御垄断行为的关键基础设施。
ePBS 在以太坊生态系统中的实际需求来自多个因素,这些因素旨在解决当前限制并为网络的可扩展性、安全性和去中心化做好准备。这些需求源于以太坊区块生产的不断演变及 MEV 机会日益复杂的局面。量化 ePBS 的实际需求是一项重大挑战,但这是以太坊社区针对当前挑战并预判未来需求的更广泛需求的一个反映。
社会层面,以太坊社区的规范和价值观,扮演着引导行为的关键角色,而这些行为仅凭协议机制是无法强制执行的。尽管利他主义或长期自利可能驱动一些大型 ETH 持有者支持确立的解决方案,但单纯依赖这些动机并不可靠。以太坊的完整性和去中心化理应由稳健的、可执行的机制支撑,而不是对理想的自愿遵守。
随着以太坊路线图的发展,L2 解决方案的活动逐渐增加以及 OFA 的开发,L1 MEV 的直接影响可能会减弱。然而,由 ePBS 提出的原则和基础设施仍可能在构建安全和去中心化的 MEV 管理机制方面发挥至关重要的作用,从而保持 ePBS 在多层生态系统中的相关性。
考虑到复杂的格局和以太坊 MEV 动态可能发生的重大变化,ePBS 相对于其他升级(例如,审查抵抗增强,单时隙确定性)的优先级需要一种战略方法。社区可能会考虑集中精力关注具有更清晰即时收益和较低实施风险的升级,同时继续研究和开发 ePBS 框架,以便在需求更加迫切时能迅速部署。
- 原文链接: github.com/thogiti/thogi...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!