Delegate
1. 题目要求
1.1 这一关的目标是申明你对你创建实例的所有权.
这可能有帮助
- 仔细看solidity文档关于
delegatecall
的低级函数, 他怎么运行的, 他如何将操作委托给链上库, 以及他对执行的影响. - Fallback 方法
- 方法 ID
- 仔细看solidity文档关于
1.2 题目代码:
1 | // SPDX-License-Identifier: MIT |
2. 分析
2.1
elegation.sol
这是我们可以直接访问的合约。让我们来看看。它有两个状态变量:
address public owner
存储合约所有者的公共变量Delegate delegate``Delegate
对我们刚刚看到的合同的引用
合约
constructor
的 将其address _delegateAddress
作为唯一的输入参数,delegate
用它初始化状态变量并用 初始化所有者msg.sender
2.2 通过修改燃料限制的方法,出错了。。。
开始网上寻找解决方法,解决方法:修改编辑燃料费选项为 “高级”
3. 解题
3.1 获取关卡实例地址:0x6eE471bd0AE8A991C76972ADB0365D7cfC4e3fE9
3.2 通过实例地址调用合约
3.3 调用Dlegate合约中的 pwn()函数,将燃料限制从29328修改为39328
3.3 发现做错了
wwww….. 弄了好久,原来是需要修改编辑燃料费选项, 将其设置为“高级”
3.4 再次调用pwn() 函数,地址修改成功
3.5 到EtherScan 查看交易记录,发现成功调用pwn函数
3.6 提交实例并查看结果
3.7 成功!!!!