[英]How to modify a transfer function of an ERC20 token so that it takes a fee equal to 0.0004 ether for every token transfer
据我了解,我应该将转账 function 设为应付账款,但它表示“覆盖 function 将 state 的可变性从“应付账款”更改为“非应付账款”。
Solidity 目前(v0.8)不允许将非支付方法(例如 OpenZeppelin transfer()函数)覆盖到payable
。 所以这种方法行不通:
pragma solidity ^0.8;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor() ERC20("MyToken", "MyT") {
}
// cannot override non-payable function to payable
function transfer(address to, uint256 amount) override public payable returns (bool) {
}
}
ERC-20标准没有说明transfer()
function 是可支付的——它没有明确允许也没有禁止它。
在您的情况下,有两种方法可以定义payable
transfer()
function :
创建 OpenZeppelin ERC20.sol
合约及其依赖项的本地分支,并将其transfer()
function 的声明更改为payable
。 然后您可以在子合同中覆盖它并实施自定义费用。
在不使用 OpenZeppelin 的情况下,在您的合约中从头开始实施 ERC20 标准。 然后,您将能够使用payable
修饰符定义自定义transfer()
function。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.