Solidity 练习:Fallback

2022-12-29 Web3 Solidity

# 一、题目说明

当要调用的函数不存在时,会调用 fallback 函数。

接收 Ether

声明为 external payable 的 fallback 函数通常用于使合约能够接收 Ether。

被称为 receive 的 fallback 有一些变化,如果 msg.data 为空,则调用 receive() external payable。

哪一个被调用,fallback 还是 receive?

下面一个图表,总结了调用哪个函数:

/*
Which function is called, fallback() or receive()?

    Ether is sent to contract
               |
        is msg.data empty?
              / \\
            yes  no
            /     \\
receive() exists?  fallback()
         /   \\
        yes   no
        /      \\
    receive()   fallback()
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 二、任务列表

  1. 开启 fallback 接收 Ether。
  2. Ether 将和空的 msg.data 一起发送到本合约。把会被调用的函数名存储在 answers[0]。
  3. Ether 将和非空的 msg.data 一起发送到本合约。把会被调用的函数名存储在 answers[1]。

# 三、解答代码

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

contract Fallback {
    string[] public answers = ["receive", "fallback"];

    fallback() external payable {}

    receive() external payable {}
}
1
2
3
4
5
6
7
8
9
10

# 四、参考资料

Last Updated: 2023-01-28 4:31:25