【发布时间】:2021-11-11 17:46:33
【问题描述】:
如何使用 openZeppelin 向用户添加合约上的转账功能?
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract TokenSample is ERC20 {
constructor() ERC20("TokenSample", "SMPL") {
_mint(msg.sender, 21000000 * 10 ** decimals());
}
}
当我部署上述合约时,我得到一个带有 2 个参数(收件人、金额)的转账表格。没关系。
但由于一个原因,我需要在合约内部实现自己的传输函数。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract TokenSample is ERC20 {
constructor() ERC20("TokenSample", "SMPL") {
_mint(msg.sender, 21000000 * 10 ** decimals());
}
function getToken(uint256 _amount) external returns(bool) {
// my internal logic here
transfer(msg.sender, _amount);
return true;
}
}
从代码中我得到错误:ERC20:转账金额超过余额
我不太确定,但我来宾是因为令牌属于所有者而不属于合同。实现该 getToken 方法的正确方法是什么?
【问题讨论】: