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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 二、任务列表
- 开启 fallback 接收 Ether。
- Ether 将和空的 msg.data 一起发送到本合约。把会被调用的函数名存储在 answers[0]。
- 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
2
3
4
5
6
7
8
9
10