首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >押金合同:梅克尔树的意义是什么?

押金合同:梅克尔树的意义是什么?
EN

Ethereum用户
提问于 2022-09-25 18:11:03
回答 1查看 179关注 0票数 2

存款合同将所有存款插入到梅克尔树中。根据信标链规范,当在信标链上处理沉积时,必须验证该沉积确实是默克尔树中的有效叶。这是在流程_押金()中指定的:

代码语言:javascript
复制
def process_deposit(state: BeaconState, deposit: Deposit) -> None:
    # Verify the Merkle branch
    assert is_valid_merkle_branch(
        leaf=hash_tree_root(deposit.data),
        branch=deposit.proof,
        depth=DEPOSIT_CONTRACT_TREE_DEPTH + 1,  # Add 1 for the List length mix-in
        index=state.eth1_deposit_index,
        root=state.eth1_data.deposit_root,
    )

    # Deposits must be processed in order
    state.eth1_deposit_index += 1

    ...

我不明白这有什么意义。如果Eth1数据是可信的,那么验证数据似乎是不必要的。另一方面,如果Eth1数据是不可信的,那么上述检查似乎没有帮助,因为我们也不能信任state.eth1_data.deposit_root,也就是说,梅克尔根可能与实际存款契约的状态完全无关。检查某些不受信任的数据在某个不受信任的Merkle树中似乎没有以任何方式增加安全性。

我觉得我有点误会了。

EN

回答 1

Ethereum用户

发布于 2022-09-25 20:30:59

is_valid_merkle_branch()检查以确保不可能在process_deposit()函数中伪造存款。定金合同中的eth1data.deposit_root已由信标链同意,并包括所有待决存款,对信标链可见。存款本身包含一个梅克尔证明,它包括在该根。state.eth1_deposit_index计数器确保按顺序处理存款。简而言之,提议者提供leafbranch,但既不提供index,也不提供root

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/136346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档