contract Coin is ERC20{
constructor() ERC20("TestCoin", "TEC") {
//初始发行1000个币去到作者的户口内,并且是6个小数点
_mint(msg.sender, 1000 * 10 ** decimals());
function decimals()public pure override returns(uint8){
return 6;
2. 发行代币了之后就需要把代币的地址copy下来,然后部署以下的代币合约。
参考文档:
https://learnblockchain.cn/docs/eips/eip-20.html#api-%E8%A7%84%E8%8C%83
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract CoinContract{
IERC20 MyToken;
constructor(address TokenAddress){
MyToken = IERC20(TokenAddress);
function transferCoinToContract(uint amount)public{
//必须调用token当中的approve先,授权给本合约总共允许挪动多少资金,否则直接调用transferFrom的话肯定会报错的。
//委任第三方转账的话,必须使用transferFrom
//以下是把自己的户口当中资金打入合约内
MyToken.transferFrom(msg.sender,address(this),amount);
function checkBalance(address _addr)public view returns(uint){
//查看本合约内有多少的代币
return MyToken.balanceOf(_addr);
function checkRemainingApproveBalance() public view returns(uint){
//查看本身的户口,允许第三方挪动的自己还剩下多少
return MyToken.allowance(msg.sender,address(this));
注意:让合约帮你转账去到本合约内,还是帮你转账给其他地址都必须授权给本合约先,否则合约无权帮你调动资金。换言之也就是你必须调用approve然后才能调用transferFrom
【approve】
– 调用代币中的approve就是,授权某合约能够帮你挪动多少资金。
这function无法在代币合约中调用,因为安全需要,所以必须调用回代币当中的approve function。
approve( 合约地址,挪动的资金额 )