Solidity 练习:存钱罐
睡不醒的鲤鱼 2022-12-29 Web3 Solidity
# 一、题目说明
实现一个存钱罐合约。
任何人都可以发送 Ether 到该合约。但只有 owner 可以提现,提现后合约会被删除。
# 二、任务列表
- 当合约部署时,设置 owner 为 msg.sender。
- 为该合约开启接收 Ether,在接收到 Ether 时发送 Deposit 事件。
- 编写 external 的 withdraw 函数:
- 用当前合约中的余额发出 Withdraw 事件。
- 发送所有的 Ether 给 owner。
- 从链上删除合约。
- 只有 owner 可以调用该函数。
# 三、解答代码
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract PiggyBank {
event Deposit(uint amount);
event Withdraw(uint amount);
address public owner;
constructor() {
owner = msg.sender;
}
receive() external payable {
emit Deposit(msg.value);
}
function withdraw() external {
require(msg.sender == owner, "not owner");
emit Withdraw(address(this).balance);
selfdestruct(payable(msg.sender));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22