Bank.sol- 基础银行合约IBank.sol- 银行接口BigBank.sol- 继承自Bank的高级银行合约Admin.sol- 管理员合约
定义了银行合约的标准接口,包含:
withdraw()- 提取资金getBalance()- 查询余额getUserBalance(address)- 查询用户余额getTopUsers()- 查询前3名用户
继承自Bank合约并实现IBank接口,额外功能:
- 存款金额必须大于0.001 ether
- 支持管理员权限转移
- 提供
transferOwnership(address newOwner)函数
管理员合约,功能包括:
- 有自己的Owner
adminWithdraw(IBank bank)- 从指定的银行合约提取资金getBalance()- 查询Admin合约余额withdrawAdmin()- Admin提取自己的资金
-
部署合约
// 部署BigBank合约 BigBank bigBank = new BigBank(); // 部署Admin合约 Admin admin = new Admin();
-
转移管理员权限
// 将BigBank的管理员转移给Admin合约 bigBank.transferOwnership(address(admin));
-
用户存款
// 直接向BigBank发送ETH (必须>0.001 ether) // 或者调用deposit函数 bigBank.deposit{value: 0.002 ether}();
-
Admin提取资金
// Admin合约的Owner调用adminWithdraw admin.adminWithdraw(IBank(address(bigBank)));
-
查询状态
// 查询BigBank余额 uint256 bankBalance = bigBank.getBalance(); // 查询Admin余额 uint256 adminBalance = admin.getBalance(); // 查询前3名用户 address[3] memory topUsers = bigBank.getTopUsers();
- 存款金额必须大于0.001 ether,否则交易会失败
- 只有Admin合约的Owner可以调用adminWithdraw函数
- 转移管理员权限后,原owner将失去对BigBank的控制权
- Admin合约可以接收ETH,并提供提现功能