开发环境
IDE
- 在线 IDE Remix: https://remix.ethereum.org
- 本地 IDE Remix-IDE
- Truffle 开发测试框架
运行环境
- 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;
}
}
评论