solidity中的地址类型与接口

16 阅读1分钟

// 定义一个简单的银行接口 interface IBank { function deposit() external payable; function withdraw(uint256 amount) external; function getBalance() external view returns (uint256); }

// 实现银行接口的合约 contract Bank is IBank { mapping(address => uint256) public balances;

function deposit() external payable override {
    require(msg.value > 0, "存款金额必须大于0");
    balances[msg.sender] += msg.value;
}

function withdraw(uint256 amount) external override {
    require(balances[msg.sender] >= amount, "余额不足");
    balances[msg.sender] -= amount;
    payable(msg.sender).transfer(amount);
}

function getBalance() external view override returns (uint256) {
    return balances[msg.sender];
}

}

// 使用银行接口的合约 contract BankUser { function depositToBank(address bankAddress) external payable { IBank bank = IBank(bankAddress); bank.deposit{value: msg.value}(); }

function withdrawFromBank(address bankAddress, uint256 amount) external {
    IBank bank = IBank(bankAddress);
    bank.withdraw(amount);
}

function getBankBalance(address bankAddress) external view returns (uint256) {
    IBank bank = IBank(bankAddress);
    return bank.getBalance();
}

}