
Pectra 硬分叉全景解析基于 EIP-7600 Meta EIP 的 Prague/Electra 升级完整指南【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs导读EIP-7600Hardfork Meta - Pectra是继 EIP-7569Hardfork Meta - Dencun 之后为 Prague执行层/ Electra共识层网络升级编写的元提案Meta EIP它列出了本次升级包含的全部 EIP 清单、执行层与共识层的规格划分方式以及各测试网与主网的激活时间和激活纪元。本文以 EIP-7600 为骨架逐一展开 10 个核心 EIP 与 2 个配套 EIP 的技术细节、参数定义与底层机制帮助你系统掌握 Pectra 升级的完整技术版图包括 EOA 账户代码设置EIP-7702、通用执行层请求总线EIP-7685、Blob 吞吐量提升EIP-7691等关键变更。一、EIP-7600 在 EIP 体系中的定位Meta 类型的 EIP 不引入具体的协议变更而是充当升级目录把一次网络升级涉及的所有提案聚合到一处提供全局视图与完整规格的导航入口。EIP-7600 正是 Prague/Electra 升级的目录文档其核心内容包含三部分Included EIPs10 个核心 EIPCore 2 个配套 EIP分别属于 Informational 与 Networking 类型Full Specifications明确哪些变更由ethereum/consensus-specs仓库的specs/electra与specs/_features目录完整规定哪些由 EIP 自身完整规定Activation各网络激活纪元Epoch与激活时间戳Timestamp对照表。注意EIP 文档中引用本仓库其他 EIP 时使用的./eip-xxxx.md相对链接在本文中统一转换为以仓库根目录为起点的路径如 EIPS/eip-7702.md便于在仓库内直接跳转阅读。二、Prague / Electra一次升级两层规格与 Dencun 一样Pectra 同时触及以太坊的执行层与共识层因而规格被拆分为两部分管理规格归属涉及 EIP规格存放位置共识层Consensus LayerEIP-6110、EIP-7002、EIP-7251、EIP-7549、EIP-7685、EIP-7691ethereum/consensus-specs仓库的specs/electra与specs/_features目录执行层Execution LayerEIP-2537、EIP-2935、EIP-6110、EIP-7002、EIP-7623、EIP-7685、EIP-7702、EIP-7840由各 EIP 文档自身完整规定其中 EIP-6110、EIP-7002、EIP-7685 同时横跨两层它们定义了从执行层产生请求request、经区块头提交、再被共识层消费的完整链路。理解这条链路是读懂 Pectra 共识相关变更的前提。三、通用基础设施EIP-7685 执行层请求总线EIP-7685General purpose execution layer requests 是 Pectra 中多个共识相关 EIP 的底层依赖它定义了一个通用的请求总线在区块头中新增一个 32 字节的承诺字段requests_hash每个请求对象由 1 字节的request_type前缀加上不透明的字节数组request_data组成即requests request_type request_data计算承诺时先对所有非空requests元素按request_type升序排序再对每个元素做 sha256最后对中间哈希列表做 sha256def compute_requests_hash(block_requests: Sequence[bytes]): m sha256() for r in block_requests: if len(r) 1: m.update(sha256(r).digest()) return m.digest() block.header.requests_hash compute_requests_hash(requests)EIP-7685 刻意将request_data设计为不透明字节而非 RLP 数组从而允许未来使用 SSZ、LEB128、定宽等不同编码同时它不强制规定请求来源与校验时机只给出推荐做法——请求应来自交易执行中对指定系统合约的调用EL 完成力所能及的校验后交给 CL 做进一步验证。在 Pectra 中存款请求EIP-6110type0x00、退出/部分提款请求EIP-7002type0x01、合并请求EIP-7251type0x02都通过这条总线传递。四、执行层核心变更详解4.1 EIP-7702为 EOA 设置账户代码EIP-7702Set Code for EOAs 是 Pectra 最具标志性的执行层变更它引入一种新的 EIP-2718 交易类型允许外部账户EOA通过授权元组列表为其账户设置代码实现批量操作Batching、赞助交易Sponsorship与权限降级Privilege de-escalation三大 UX 目标。关键参数ParameterValueSET_CODE_TX_TYPE0x04MAGIC0x05PER_AUTH_BASE_COST12500PER_EMPTY_ACCOUNT_COST25000交易结构外层交易与 EIP-4844 的字段语义一致因此目标地址不可为空并新增authorization_listrlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, value, data, access_list, authorization_list, signature_y_parity, signature_r, signature_s]) authorization_list [[chain_id, address, nonce, y_parity, r, s], ...]核心机制——委托指示器Delegation Indicator对每个授权元组协议会写入0xef0100 || address作为委托指示器。该前缀使用 EIP-3541 禁用的操作码0xef标识强制所有代码执行操作CALL、CALLCODE、DELEGATECALL、STATICCALL以及目标地址带委托的交易跟随地址指针加载并执行目标代码。需要注意CODESIZE/CODECOPY直接操作正在执行的代码本身而EXTCODESIZE/EXTCODECOPY返回委托指示器的大小23 字节两者结果不同委托到预编译地址时取到的代码视为空相关调用会以空代码成功执行若委托指向另一个委托形成链或环客户端只取第一层代码即停止跟随地址为0x0时不清空委托而是清除账户代码重置为空的 code hash以恢复 EOA 的纯净状态。授权处理流程在发送方 nonce 递增后、交易执行前处理验证链 ID0 或当前链、验证 nonce 2**64-1、通过keccak(MAGIC || rlp([chain_id, address, nonce]))做ecrecover恢复 authority 并遵循 EIP-2 的s值限制、将 authority 加入accessed_addresses、校验其代码为空或已委托、校验其 nonce 相等、按 EIP-2929 规则计费并递增 nonce。处理失败的元组会被跳过且交易执行失败时已写入的委托不会回滚。gas 成本固有成本继承 EIP-2930 的访问列表公式另加PER_EMPTY_ACCOUNT_COST * authorization_list 长度发送方需为全部元组付费无论有效性委托代码解析时访问冷账户需额外支付COLD_ACCOUNT_READ_COST2600 gas否则为WARM_STORAGE_READ_COST100 gas。授权成本PER_AUTH_BASE_COST 12500由影响评估得出101 字节 calldata1616 地址恢复3000 读取 nonce/代码2600 热账户写入200 部署代码 23 字节4600≈ 12016向上取整为 12500。交易起源限制EIP-3607 的限制被放宽——代码恰好为合法委托指示器0xef0100 || address的 EOA 可以发起交易其他代码值仍不允许。设计取舍要点委托是持久化的而非交易结束后清除以推动用户走向完整智能合约钱包方案不引入 initcode避免新执行模式采用模板创建授权时只签地址而非字节码最小代理约 50 字节对比 20 字节地址保持与未来账户抽象如 ERC-4337的向前兼容允许tx.origin设置代码以支持自我赞助但会破坏msg.sender tx.origin仅在顶层执行帧成立的旧有不变式。4.2 EIP-7623提高 calldata 成本EIP-7623Increase calldata cost 针对以数据发布为主的交易提高 calldata 成本以压缩 EL 载荷的最大尺寸与方差。目前 calldata 成本自 EIP-2028 以来未变在 rollup 大量向 L1 发布数据、且 EIP-4844 引入 blob 作为更优 DA 通道的背景下该提案引入 calldata 成本下限。新参数ParameterValueSTANDARD_TOKEN_COST4TOTAL_COST_FLOOR_PER_TOKEN10其中tokens_in_calldata zero_bytes_in_calldata nonzero_bytes_in_calldata * 4。gas 计算从原公式改为对执行成本与calldata 地板成本取最大值tx.gasUsed ( 21000 max( STANDARD_TOKEN_COST * tokens_in_calldata execution_gas_used isContractCreation * (32000 INITCODE_WORD_COST * words(calldata)), TOTAL_COST_FLOOR_PER_TOKEN * tokens_in_calldata ) )任何 gas limit 低于21000 TOTAL_COST_FLOOR_PER_TOKEN * tokens_in_calldata或低于固有成本取两者最大值的交易视为无效。效果上数据密集型交易的 calldata 成本从 4/16 提升到 10/40 gas/字节可能的最大 EL 载荷从约 1.79 MB30M/16压缩后约 2.54 MB降至约 0.72 MB30M/40而对普通用户ETH/Token 转账、DeFi、社交等几乎无影响。注意这属于向后不兼容的 gas 重定价钱包与节点必须更新eth_estimateGas相关逻辑。4.3 EIP-7691Blob 吞吐量提升EIP-7691Blob throughput increase 在 Dencun 的 3/6目标/上限基础上将 blob 目标与上限提升到6/9ConstantValueMAX_BLOBS_PER_BLOCK_ELECTRA9TARGET_BLOBS_PER_BLOCK_ELECTRA6MAX_BLOB_GAS_PER_BLOCK1179648TARGET_BLOB_GAS_PER_BLOCK786432BLOB_BASE_FEE_UPDATE_FRACTION_PRAGUE5007716共识层客户端从PECTRA_FORK_EPOCH起使用新的 max/target 值执行层客户端在激活纪元替换 EIP-4844 中的旧值使get_base_fee_per_blob_gas与calc_excess_blob_gas自分叉首块起按新参数运行。由于目标与上限比从 1:2 变为 2:3blob basefee 对空区块的响应6 个 blob 低于目标比满载3 个 blob 超出目标更敏感这是有意设计——两个满载区块才能抵消一个空区块。该 EIP 旨在以最小实现成本换取短期扩容为 peerDAS 等长期方案争取时间。4.4 EIP-2537BLS12-381 曲线运算预编译EIP-2537Precompile for BLS12-381 curve operations 新增 7 个预编译地址为 BLS 签名验证等场景提供 120 比特安全强度的曲线运算对比现有 BN254 预编译仅 80 比特预编译地址固定 gas 成本BLS12_G1ADD0x0b375BLS12_G1MSM0x0c公式计算BLS12_G2ADD0x0d600BLS12_G2MSM0x0e公式计算BLS12_PAIRING_CHECK0x0f公式计算BLS12_MAP_FP_TO_G10x105500BLS12_MAP_FP2_TO_G20x1123800其中 MSM多标量乘法用于 BLS 验签时高效聚合公钥或签名。域到曲线映射函数的完整规格见 assets/eip-2537/field_to_curve.md。该 EIP 提供了曲线基域模数、主子群阶、Fp2/Fp6/Fp12 扩张塔、扭曲参数与生成元等完整曲线参数详见 EIPS/eip-2537.md并允许签名方案在 EVM 内高效实现。4.5 EIP-2935在状态中保存历史区块哈希EIP-2935Serve historical block hashes from state 将最近HISTORY_SERVE_WINDOW个区块哈希存入系统合约的环形缓冲存储中以支持无状态客户端stateless clients通过 witness 获得历史哈希同时不改变BLOCKHASH操作码的语义、范围与成本。ParameterValueBLOCKHASH_SERVE_WINDOW256HISTORY_SERVE_WINDOW8191SYSTEM_ADDRESS0xfffffffffffffffffffffffffffffffffffffffeHISTORY_STORAGE_ADDRESS0x0000F90827F1C53a10cb7A02335B175320002935区块处理规则在处理任何区块的开头执行交易之前以SYSTEM_ADDRESS身份向HISTORY_STORAGE_ADDRESS发起一次 gas limit 为 30,000,000、值为 0、输入为block.parent.hash的系统调用触发历史合约的set()例程若该地址无代码则静默失败。合约提供get供 EVM 查询calldata 必须为 32 字节、请求范围必须在[block.number-8191, block.number-1]内否则回滚与set将block.number-1 % HISTORY_SERVE_WINDOW槽位写入calldata[0:32]两个操作。完整 EVM 汇编字节码与部署交易合成地址由rlp([sender, 0])推出见 EIPS/eip-2935.md。分叉后需约 8191 个区块约一天才能填满环形缓冲。五、共识层变更详解5.1 EIP-6110链上提供验证者存款EIP-6110Supply validator deposits on chain 将验证者存款追加到 EL 区块结构存款列表通过解析区块内每笔存款交易发出的DepositEvent日志获得从而以协议内机制取代原有的eth1data提议者投票机制。配置参数必须编入客户端二进制发行物NameValueDEPOSIT_REQUEST_TYPEb0EIP-7685 请求类型字节DEPOSIT_CONTRACT_ADDRESS0x00000000219ab540356cbb839cbe05303d7705fa主网DEPOSIT_EVENT_SIGNATURE_HASH0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5存款请求结构为pubkey: Bytes48、withdrawal_credentials: Bytes32、amount: uint64、signature: Bytes96、index: uint64。区块有效性要求自FORK_BLOCK起区块内累积的每个存款必须按日志出现顺序出现在 EIP-7685 请求列表中。解析逻辑通过校验事件数据长度576 字节及各字段偏移160/256/320/384/512与尺寸48/32/8/96/8来过滤非法日志详见 EIPS/eip-6110.md 中的is_valid_deposit_event_data/event_data_to_deposit_request伪代码。共识层变化要点ExecutionRequests新增deposit_requests字段BeaconState追加deposit_requests_start_index用于新旧机制切换新增process_deposit_request处理函数。主要收益包括即使超过 2/3 质押为恶意诚实在线节点也无法被说服处理虚假存款存款从提交到共识层处理的时间从约 12 小时缩短到约 13 分钟可移除 EIP-4881 存款合约快照机制与 JSON-RPC 轮询依赖。相关分析文档见 assets/eip-6110/pubkey_to_index_cache_analysis.md验证者索引随分叉变化的分析与 assets/eip-6110/ws_period_analysis.md弱主观性周期分析配套计算脚本为 assets/eip-6110/eth2_ws_calc.py。安全考量每区块存款上限从MAX_DEPOSITS * SLOTS_PER_EPOCH 512放宽到约 32,768受 30M gas 限制但 1 ETH 最低存款使数据字节成本高达约 5,208,333 Gwei远高于 calldata 成本不构成 EL 的 DoS 面CL 侧最重的签名验证在 30M gas 区块下约 1,271 次攻击者需花费约 1,000 ETH 才能让区块处理慢 1 秒。5.2 EIP-7002执行层可触发退出与部分提款EIP-7002Execution layer triggerable withdrawals 允许持有 0x01 提款凭证的验证者从执行层直接触发退出与部分提款从而让资金真正所有者提款凭证持有者无需依赖热的活跃 BLS 密钥即可控制质押 ETH 的走向。配置参数NameValueWITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS0x00000961Ef480Eb55e80D19ad83579A64c007002WITHDRAWAL_REQUEST_TYPE0x01SYSTEM_ADDRESS0xfffffffffffffffffffffffffffffffffffffffeMAX_WITHDRAWAL_REQUESTS_PER_BLOCK16TARGET_WITHDRAWAL_REQUESTS_PER_BLOCK2MIN_WITHDRAWAL_REQUEST_FEE1WITHDRAWAL_REQUEST_FEE_UPDATE_FRACTION17提款请求为 EIP-7685 类型0x01字段为source_address: Bytes20、validator_pubkey: Bytes48、amount: uint64amount以小端序编码。系统合约有三条代码路径添加请求输入恰为 56 字节 验证者公钥 大端 uint64 金额要求msg.value fee并入队、费用读取零长度输入返回当前费用、系统处理由SYSTEM_ADDRESS调用时出队当前区块请求。费用采用 EIP-1559 式的动态调节机制fee MIN_WITHDRAWAL_REQUEST_FEE * e**(excess / 17)其中excess为相对目标每区块 2 个累积的超额请求数通过fake_exponential实现使高使用率下费用指数上升以抵御廉价 griefing 攻击。合约在状态内维护请求消息队列队列头/尾/偏移存储槽每区块最多出队 16 个请求。完整的合约伪代码、EVM 汇编字节码与合成部署交易见 EIPS/eip-7002.md费用机制详细分析见 assets/eip-7002/fee_analysis.md。系统调用规则区块处理完所有交易后、执行提款验证前以SYSTEM_ADDRESS调用预部署合约gas limit 30,000,000 且不计入区块总 gas、不遵循 EIP-1559 燃烧语义若地址无代码或调用失败区块必须被标记为无效。实务提醒多付的费用不会退还合约调用方应通过staticcall()预读当前费用并设置费用上限使用 EOA 直接调用总会多付费用建议先做交易模拟估算合理费用。5.3 EIP-7251提高 MAX_EFFECTIVE_BALANCEEIP-7251Increase the MAX_EFFECTIVE_BALANCE 将验证者的最大有效余额从 32 ETH 提升到2048 ETH同时保持 32 ETH 的最低质押下限。这允许大型节点运营商将多个验证者合并为更少的验证者也让单独质押者获得复利收益并支持更灵活的质押增量如直接质押 40 ETH。共识层新常量NameValueCOMPOUNDING_WITHDRAWAL_PREFIXBytes1(0x02)MIN_ACTIVATION_BALANCEGwei(2**5 * 10**9)32 ETHMAX_EFFECTIVE_BALANCE_ELECTRAGwei(2**11 * 10**9)2048 ETH合并请求EIP-7685 类型0x02字段为source_address: Bytes20、source_pubkey: Bytes48、target_pubkey: Bytes48对应参数包括CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS 0x0000BBdDc7CE488642fb579F8B00f3a590007251、MAX_CONSOLIDATION_REQUESTS_PER_BLOCK 2、TARGET_CONSOLIDATION_REQUESTS_PER_BLOCK 1、MIN_CONSOLIDATION_REQUEST_FEE 1、CONSOLIDATION_REQUEST_FEE_UPDATE_FRACTION 17。添加合并请求需要恰好 96 字节输入源与目标验证者公钥同样有费用门槛、入队与系统调用出队机制且系统调用失败同样使区块无效。MAX_EFFECTIVE_BALANCE提高还减少了验证者集合规模从而降低 P2P 消息量、每纪元需聚合的 BLS 签名数与BeaconState内存占用。5.4 EIP-7549将委员会索引移出 AttestationEIP-7549Move committee index outside Attestation 把被签名的Attestation消息中的委员会index字段移到外部容器使相同投票的聚合产生相同签名根显著提升 Casper FFG 验证效率。具体变更将AttestationData中的index固定为 0保留字段置零避免复杂化AttesterSlashing的处理委员会索引数据移至外层Attestation容器的committee_bitsaggregation_bits容量扩展到一整个 slot 的全部委员会。该 EIP 只影响共识层无需执行层变更。效果上验证 2/3 阈值所需的最少验证配对次数从ceil(32*64 * 2/3) 1366降到ceil(32 * 2/3) 22约 62 倍区块内可打包最多 8 个 slot 的投票此前为 2使仅 1/8 在线提议者的链仍可能包含全部链上投票。MAX_ATTESTATIONS降为 8在 120 万活跃索引网络下投票容量提升 4 倍且区块空间不变详见 assets/eip-7549/complexity_analysis.md。六、配套 EIP配置与网络层6.1 EIP-7840EL 配置文件中的 Blob 调度表InformationalEIP-7840Add blob schedule to EL config files 在客户端配置文件中新增blobSchedule对象按分叉列出目标/上限 blob 数与 basefee 更新分数避免通过 engine API 逐块传递这类协议本身并不强需的值例如eth_feeHistoryRPC 的blobGasUsedRatio就需要 max 值blobSchedule: { cancun: { target: 3, max: 6, baseFeeUpdateFraction: 3338477 }, prague: { target: 6, max: 9, baseFeeUpdateFraction: 5007716 } }配置缺失或不完整时行为未定义由客户端自行处理。6.2 EIP-7642eth/69——移除 merge 前字段NetworkingEIP-7642eth/69 - history expiry and simpler receipts 修改ethP2P 协议在Status (0x00)消息中通告节点服务的历史区块范围并简化握手移除不再使用的 total difficulty 信息同时从协议传输的收据中移除Bloom字段客户端本就即时重算而不存储仅同步过程就需重生成约 530GB 过滤器。Status 消息从 eth/68 的[version, networkid, td, blockhash, genesis, forkid]变为 eth/69 的[version, networkid, genesis, forkid, earliestBlock, latestBlock, latestBlockHash]。该 EIP 非 Pectra 激活所必需但客户端可以在升级激活时支持且必须在下一个网络升级前支持。七、激活时间表EIP-7600 给出了 Pectra 在各网络的激活参数共识层按激活纪元、执行层按激活时间戳Network NameActivation EpochActivation TimestampHolešky1159681740434112Sepolia2224641741159776Hoodi20481742999832Mainnet3640321746612311八、安全考量与总结EIP-7600 自身作为 Meta EIP 没有独立的安全考量安全分析分散在各组成 EIP 中值得重点关注的有EIP-7702委托合约实现不当可让恶意方几乎完全控制签名者的 EOA必须对重放保护nonce、value、gas、target/calldata做签名约束钱包不应提供让用户直接签署任意授权的界面没有安全的方式实现该界面账户迁移委托时需避免存储布局冲突可参考 EIP-7201 的命名空间存储节点建议对带非零委托指示器的 EOA 只接受一个待处理交易以限制单笔交易可使失效的交易数量。EIP-7002系统调用失败会使区块无效区块生产者应洗牌交易集以降低连续出空块风险激活前必须确认预部署合约代码已就位。EIP-6110乐观同步节点依赖诚实多数假设与现有 EL 世界状态有效性模型一致不超出既有安全边界。Pectra 通过 EIP-7685 请求总线将存款、提款、合并三类执行层触发行为引入共识层通过 EIP-7702 为 EOA 解锁智能合约钱包级能力通过 EIP-7691 与 EIP-7623 在 blob 扩容与区块尺寸控制之间取得平衡并通过 EIP-7251 优化验证者经济模型——整套升级完整规格可进一步查阅本文引用的各 EIPS 目录下的原始文档全部以 CC0 放弃版权见 LICENSE.md共识层侧则以ethereum/consensus-specs的specs/electra目录为准。【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考