Ethereum区块头中recipientsRoot的作用及与transactionRoot的区别
以太坊区块头recipientsRoot作用解答
首先明确你的基础认知是正确的:普通链上交易的接收方信息,确实已经包含在transactionRoot对应的交易数据里了,recipientsRoot是以太坊切换为POS共识后新增的专属字段,和transactionRoot的覆盖场景完全不重叠。
transactionRoot是区块内所有用户主动发起的普通交易的默克尔根:所有用户转账、合约调用、NFT交易这类需要用户自己签名、支付gas的操作,所有相关信息(发送方、接收方、金额、交互数据)都会被打包进交易列表,最终算出的默克尔根就是transactionRoot,存在区块头里用于校验交易数据有没有被篡改。recipientsRoot(也叫withdrawalsRoot)是区块内所有协议自动触发的验证者提款操作的默克尔根:以太坊转POS之后,参与质押的验证者可以提取质押奖励、或者全额提取质押的ETH,这类提款是链上共识规则自动触发的,不需要验证者主动发起交易、不需要签名、也不需要支付gas,所以不会被放进普通交易列表里。这类提款的接收方地址、提款金额等信息会被单独整理成提款列表,算出的默克尔根就是recipientsRoot,存在区块头里用于校验提款数据的合法性。
非技术背景可以这么理解:普通交易是你自己主动发起的个人转账,走普通用户转账通道,流水记在普通交易账单里;验证者提款是系统自动给参与质押的用户发收益/退本金,走系统专属的批量打款通道,流水单独记在提款账单里,两个账单分别算校验值存在区块头,互不干扰。
至于为什么不直接把提款信息合并到普通交易列表里统一算transactionRoot,核心原因是逻辑分离降低安全风险:两类操作的触发逻辑、校验规则完全不同,分开存储可以避免节点校验时出现逻辑混淆,同时也能提升节点同步、校验数据的效率。
内容的提问来源于stack exchange,提问作者D-UCL
相关产品推荐
相关产品推荐

