【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评论