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函数,销毁合约账户}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
