【Solidity】发送ERC20代币到合约
这个文章将会教你如何把发行的ERC20代币转账值合约内。
- 首先必须发行一个ERC20代币
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
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( 合约地址,挪动的资金额 )

【allowance】
– 这function主要是查看你所授权的合约,还剩下多少资金能够挪动。
如果你一开始总共approve了500个代币,然后你transfer了100代币,那查看这个function应该是返回剩下400个代币能够挪动而已。
allowance(你的户口地址,合约地址)

![]()
Facebook评论