048.Solidity入门——35存钱罐合约

本章节是对前面的几个合约进行整合。

Solidity的存钱罐合约是一种模拟存钱罐功能的智能合约,允许用户向其中存入代币,并允许仅有授权的用户从中提取代币,并记录每个用户的余额。

示例代码:

// 定义一个存钱罐合约
contract Bank {
    address owner; // 合约所有者地址
    // 定义一个地址余额映射表,用于存储用户地址和余额的对应关系
    mapping(address => uint) public balances;
    
    // 定义一个事件类型,用于记录用户存款和取款的操作
    event Deposit(address indexed sender, uint amount);
    event Withdraw(address indexed sender, uint amount);
    
    // 构造函数,设置合约所有者
    constructor() public {
        owner = msg.sender;
    }
    
    // 定义一个存款函数,允许用户向合约发送代币,并更新余额
    function deposit() public payable {
        balances[msg.sender] += msg.value;// 更新用户余额
        emit Deposit(msg.sender, msg.value);
    }
    
    // 定义一个取款函数,允许用户从合约提取代币,并更新余额
    function withdraw(uint amount) public {
        require(msg.sender == owner, "Only the owner can withdraw funds."); // 仅允许所有者调用该函数
        require(balances[msg.sender] >= amount, "Insufficient balance");// 检查用户余额是否足够
        msg.sender.transfer(amount);// 向用户地址转账
        balances[msg.sender] -= amount;// 更新用户余额
        emit Withdraw(msg.sender, amount);
    }
    
    // 查询余额函数,允许用户查询其余额
    function balance() public view returns (uint) {
        return balances[msg.sender]; // 返回用户余额
    }
    
    // 定义一个自毁函数,只允许合约创建者调用,并将剩余的代币发送给指定的地址
    function destroy(address payable recipient) public {
        require(msg.sender == tx.origin, "Only contract creator can destroy");
        selfdestruct(recipient); // 调用selfdestruct函数,销毁合约账户
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值