erc20需要实现以下方法
function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
以及两个事件
event Transfer(address indexed _from, address indexed _to, uint256 _value)
event Approval(address indexed _owner, address indexed _spender, uint256 _value)
以下是代码部分
pragma solidity >=0.4.16 <0.9.0;
import "openzeppelin-solidity/contracts/math/SafeMath.sol";
contract NilahToken{
using SafeMath for uint256;
string public name = "NilahToken";
string public symbol = "NLT";
uint256 public decimals = 18;
uint256 public totalSupply;
mapping (address => uint256) public balanceOf;
mapping (address => mapping (address => uint256)) public allowance;
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
constructor() {
totalSupply = 1000000 * (10 ** decimals);
balanceOf[msg.sender] = totalSupply;
}
function transfer(address _to, uint256 _value) public returns (bool success){
require(_to != address(0));
_transfer(msg.sender, _to, _value); //调用_transfer函数
return true;
}
function _transfer(address _from, address _to, uint256 _value) internal{ //私有函数 用于调用
require(balanceOf[_from] >= _value);
balanceOf[_from] = balanceOf[_from].sub(_value);
balanceOf[_to] = balanceOf[_to].add(_value);
emit Transfer(_from,_to,_value);
}
function approve(address _spender, uint256 _value) public returns (bool success){ //授权给交易所金额
//msg.sender当前账户
//_spender交易所地址
//_value金额
require(_spender != address(0));
allowance[msg.sender][_spender] = _value; //msg.sender授权给_spender交易所_value金额
emit Approval(msg.sender, _spender, _value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success){
//msg.sender提供授权的账户
//_from交易所账户
//_value金额
require(balanceOf[_from] >= _value);
require(allowance[_from][msg.sender] >= _value); //授权金额大于转账金额
allowance[_from][msg.sender] = allowance[_from][msg.sender].sub(_value); //授权金额减去转账金额
_transfer(_from, _to, _value); //调用方法进行转账
return true;
}
}
1.规定版本
2.导入SafeMath库,方便后续使用sub、add方法
3.再后面就是实现erc20方法,代码块里有注解
4.此代码复制粘贴即可使用,但是需要自行下载SafeMath库
5.代码名称以及代号在变量name和symbol处更改
6.Token位数可以在decimals处更改
7.存量是1000000,也可以在构造函数的totalSupply处更改