Solidity 练习:存钱罐

2022-12-29 Web3 Solidity

# 一、题目说明

实现一个存钱罐合约。

任何人都可以发送 Ether 到该合约。但只有 owner 可以提现,提现后合约会被删除。

# 二、任务列表

  1. 当合约部署时,设置 owner 为 msg.sender。
  2. 为该合约开启接收 Ether,在接收到 Ether 时发送 Deposit 事件。
  3. 编写 external 的 withdraw 函数:
    1. 用当前合约中的余额发出 Withdraw 事件。
    2. 发送所有的 Ether 给 owner。
    3. 从链上删除合约。
    4. 只有 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

# 四、参考资料

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