本章节是对前面的几个合约进行整合。
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函数,销毁合约账户
}
}