快来部署一个简单的代币转账合约(solidity)玩玩吧

599 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

准备工作

首先需要打开我们的solidity开发平台 -- Remix

https://remix.ethereum.org/#optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.1+commit.df193b15.js

W%){@EUJ~(32_W1YKHZ91JM.png

然后需要创建token.sol和transToken.sol文件

token.sol

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

// import "http://47.99.87.207:8080/token/ERC20/ERC20.sol";
import "https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/master/contracts/token/ERC20/ERC20.sol";

contract myToken is ERC20
{
    constructor() ERC20("AAA", "AAA") {
       
        _mint(msg.sender, 99999 * 10**uint(decimals()));
    }
   
}

transToken.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol";

contract tokenTran{
    
   address ercaddress;
   //设置代币地址
   function setErc(address ercaddress_ ) public {
        ercaddress =ercaddress_;
   } 

   //私人账户
   
   address priAddress = 0xB041AF6e41bD9196b958287A8c917b69446EB39C;

   //管理员EOA
    address internal conAdmin;

   //记录合约管理员
    constructor ()  {
    conAdmin = msg.sender;
    }

   //只有管理员才可执行 
    modifier onlyAdmin() {

    require(msg.sender == conAdmin ,
    "only admin can do this");
        _;
    }

   //代币转入
   function tokenTransfer(uint _ercnum) public {

       require(IERC20(ercaddress).balanceOf(msg.sender) > 0 ,
       "not sufficient funds");

       uint conToken = _ercnum * 9 / 10;

       IERC20(ercaddress).transferFrom(msg.sender,address(this),conToken);

       uint priToken = _ercnum * 1 / 10;

       IERC20(ercaddress).transferFrom(msg.sender,priAddress,priToken);
   }

   //管理员代币转帐
   function TokenWithdraw(address _to , uint _ercnum) public onlyAdmin {

       IERC20(ercaddress).transfer(_to,_ercnum);

   }

   //查询合约地址余额
   function getERCBalance() public view returns (uint){

       return IERC20(ercaddress).balanceOf(address(this));

   }

   //查询当前账户地址余额
   function getAddrERCBalance() public view returns (uint){

       return IERC20(ercaddress).balanceOf(msg.sender);

   }

}


编译部署

我们需要把这两个文件全都进行编译和部署

编译

image.png

部署

image.png

合约操作

首先设置代币地址

image.png

其他合约想要操作某个代币,就需要代币合约先进行授权操作

image.png

开始转账

操作时,账户需要有一定量的eth,黄色的方法都会消耗eth,蓝色的不消耗eth image.png

转出我的代币

image.png

这就是代币转账的所有操作了,有兴趣的可以自己操作试试