1. 主页
  2. 文档
  3. Ethernaut 题库闯关
  4. #7 Force

#7 Force

第七关挑战:Force

有些合约不是简单的取走你的钱,本关的目标是使合约的余额大于零。

以下是合约的源代码:

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

contract Force {/*

                   MEOW ?
         /\_/\   /
    ____/ o o \
  /~____  =ø= /
 (______)__m_m)

*/}

在查看解题思路之前,可以先自己想一想,自己会怎么做?

本关闯关涉及到知识点:

  1. Fallback 方法
  2. 有时攻击一个合约的最好方法是用另一个合约。

研究合约

好吧,本次的合约没有代码,是一个空合约。

为了解决这个难题,我们需要了解所有合约可以接收ETH的可能方式。
目前有四种不同的方式可以向合约发送以太币。

  1. 合约至少实现一个 payable 函数,我们在调用函数的同时发送一些以太币。
  2. 合约实现了一个 receive函数。请参阅 Solidity 文档: 接收以太函数 以了解关于这个特殊函数的更多信息。
  3. 合约实现了一个 “payable “的 fallback函数。请参阅 Solidity 文档: Fallback 函数 以了解关于此特殊功能的更多信息。
  4. 最后一种更 “奇怪 “的方式是通过 “selfdestruct()”,并且这个方式已经造成了各种安全问题。
  5. 额外方法:没有receive以太函数的合约也可以作为coinbase交易(又称miner区块奖励)的接收方接收以太。

通过查看合约,很明显,我们唯一能解决这个难题的方法就是使用selfdestruct()方法。在查看解决方案之前,让我们回顾一下这个函数是做什么的。

selfdestruct的EVM操作码是做什么的?从Solidity 文档关于[停用和自毁](https://docs.soliditylang.org/en/v0.8.15/introduction-to-

这篇文章对您有用吗?

我们要如何帮助您?