开发环境

IDE

运行环境

  • Geth 节点 + 钱包
  • MetaMask 钱包

测试币领取

Demo

Library 库的使用

  • 创建文件 CommonLang3Library.sol

  • 定义一个名为 CommonLang3 的库并提供一个比较字符串的方法

// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

library CommonLang3 {
    
    function eq(string memory _a, string memory _b) internal pure returns (bool) {
        return keccak256(abi.encode(_a)) == keccak256(abi.encode(_b));
    }

}

  • 引入使用
// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

import './CommonLang3Library.sol';

contract Demo {
    using CommonLang3 for string;

    function isEqual(string memory _a, string memory _b) external pure returns (bool) {
        return _a.eq(_b);
    }
}

银行

创建一间名为 EdisonBank 的银行,并提供 存款取款转账 功能

// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

contract Bank {
    // 银行名
    string public bankName = "EdisonBank";
    // 用户账本
    mapping(address=>uint256) balances;
    // 银行总资金
    uint256 bankTotalBalances;

    // 此方法返回特定用户的存款
    function balanceOf(address _user) external view returns (uint256) {
        return balances[_user];
    } 

    // 此方法返回银行总资金
    function balanceOf() external view returns (uint256) {
        return address(this).balance;
    }

    function despoist(uint256 _amount) external payable {
        require(_amount > 0, "存款资金必须大于 0");
        require(_amount == msg.value, "输入资金与存款资金不符");
        balances[msg.sender] += _amount;
        bankTotalBalances += _amount;
        require(address(this).balance == bankTotalBalances, "对账失败");
    }

    function withdraw(uint256 _amount) external payable {
        require(_amount > 0, "取款资金必须大于 0");
        require(_amount < balances[msg.sender], "余额不足");
        balances[msg.sender] -= _amount;
        // 从合约余额中转帐给调用者
        payable(msg.sender).transfer(_amount);
        bankTotalBalances -= _amount;
        require(address(this).balance == bankTotalBalances, "对账失败");
    }

    function transfer(address _to, uint256 _amount) external {
        require(_amount > 0, "取款资金必须大于 0");
        require(_to != msg.sender, "您不能转帐给自己");
        balances[msg.sender] -= _amount;
        balances[_to] += _amount;
    }
}