前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Solidity:存钱罐合约

Solidity:存钱罐合约

作者头像
孟斯特
发布2024-06-11 18:53:36
510
发布2024-06-11 18:53:36
举报
文章被收录于专栏:code人生code人生
代码语言:javascript
复制
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

contract CoinBank {
    // 声明一个变量来存储合约的所有者
    address immutable owner;

    // 在合约创建时,设置合约的所有者为创建者
    constructor() {
        owner = msg.sender;
    }

    // 装饰器函数,用于判断调用者是否是合约所有者
    modifier OnlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }

    // 创建一个名为deposit的函数,允许任何人向合约发送以太币
    function deposit() public payable {
        // 函数体为空,因为我们不需要做任何事情
        // 任何发送到这个函数的以太币都会自动添加到合约的余额中
    }

    // 创建一个名为withdraw的函数,只允许合约的所有者提取以太币
    function withdraw() external OnlyOwner {
        // require(msg.sender == owner, "caller is not owner");

        // 使用transfer函数将合约的所有余额发送给所有者
        (bool sent, bytes memory data) = address(msg.sender).call{
            value: address(this).balance
        }("");
        require(sent, "Failed to send Ether");
    }

    // 获取当前地址的余额
    function getBalance() external view returns (uint256) {
        return address(this).balance;
    }
}

上面的合约可以说是一个存钱罐合约,它允许任何人存入以太币,但只有合约的所有者才能取出:

1.owner:这是一个状态变量,用于存储合约的所有者地址。immutable关键字表示这个变量的值在合约创建时被设置,然后就不能再改变。2.constructor:这是一个构造函数,它在合约创建时运行。在这个函数中,我们将owner变量设置为合约的创建者。3.OnlyOwner:这是一个修饰符,它可以添加到函数上,以在函数运行之前执行一些代码。在这个修饰符中,我们使用require函数来确保只有合约的所有者才能运行函数。4.deposit:这是一个公开的函数,任何人都可以调用它来向合约发送以太币。发送的以太币会自动添加到合约的余额中。5.withdraw:这是一个外部函数,只有合约的所有者才能调用它。这个函数会将合约的所有余额发送给所有者。这里使用了低级别的.call函数来发送以太币,这是因为在Solidity 0.8.x版本中,.transfer.send函数已经被废弃。6.getBalance:这是一个外部的只读函数,它返回合约的当前余额。

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)[1]进行许可,使用时请注明出处。 Author: mengbin[2] blog: mengbin[3] Github: mengbin92[4] cnblogs: 恋水无意[5] 腾讯云开发者社区:孟斯特[6]


References

[1] 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh [2] mengbin: mengbin1992@outlook.com [3] mengbin: https://mengbin.top [4] mengbin92: https://mengbin92.github.io/ [5] 恋水无意: https://www.cnblogs.com/lianshuiwuyi/ [6] 孟斯特: https://cloud.tencent.com/developer/user/6649301

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 孟斯特 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • References
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档