持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
准备工作
首先需要打开我们的solidity开发平台 -- Remix
https://remix.ethereum.org/#optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.1+commit.df193b15.js
然后需要创建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);
}
}
编译部署
我们需要把这两个文件全都进行编译和部署
编译
部署
合约操作
首先设置代币地址
其他合约想要操作某个代币,就需要代币合约先进行授权操作
开始转账
操作时,账户需要有一定量的eth,黄色的方法都会消耗eth,蓝色的不消耗eth
转出我的代币
这就是代币转账的所有操作了,有兴趣的可以自己操作试试