You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ethernaut第24关Puzzle Wallet:浏览器控制台wallet对象指向哪个合约?

解答:Ethernaut Puzzle Wallet 代理合约调用疑惑

首先明确核心事实:你在控制台操作的合约地址是PuzzleProxy的地址,不是PuzzleWallet逻辑合约的地址——Ethernaut关卡展示的目标地址始终是代理合约。

接下来拆解你的疑问:

  1. 为什么ABI全是PuzzleWallet的?
    这是Ethernaut的默认行为:为了让你方便调用逻辑合约的函数,它自动加载了PuzzleWallet的ABI。但ABI只是用来把函数调用转换成EVM可识别字节码的工具,和你实际调用的合约地址无关——你调用的始终是代理合约的地址。

  2. 为什么能调用PuzzleProxy的proposeNewAdmin()?
    因为proposeNewAdmin()是PuzzleProxy合约自己实现的函数,不属于逻辑合约。当你用这个函数签名调用代理地址时,EVM会直接匹配代理合约内的该函数并执行,不会走delegatecall转发给PuzzleWallet。代理合约的核心逻辑是:仅当调用的函数是自身未实现的,才会通过delegatecall转发给逻辑合约;如果是自身已有的函数,就直接执行自身代码。

  3. 调用逻辑总结

    • 调用PuzzleWallet的函数(如deposit()、multicall()):代理合约无这些函数,触发fallback函数,通过delegatecall转发给逻辑合约执行代码。
    • 调用proposeNewAdmin():该函数在代理合约内存在,EVM直接执行代理合约内的对应逻辑,与逻辑合约无关。

简言之,ABI只是编码工具,实际执行的合约是你调用的代理地址,代理合约会根据函数是否为自身实现,决定直接执行还是转发给逻辑合约。

内容的提问来源于stack exchange,提问作者WestC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 10:18:38