如何重写OpenZeppelin中的_setupDecimals()函数



如何重写Opezeppelin默认的小数点18。文档说_setupDecimals()应该从构造函数中调用;我做错了什么?

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
uint8 _decimals;
constructor() ERC20("MyToken", "MTK") {
_decimals = 3;
function _setupDecimals(uint8 decimals_) internal {
_decimals = decimals_;
}
_mint(msg.sender, 5000 * 10 ** decimals());
}
}

_setupDecimals()在OpenZeppelin版本3 (docs, GitHub)中可用。

您的import语句导入最新版本的OpenZeppelin库,目前是v4。这个实现了decimals()函数(docs, GitHub),你可以覆盖。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor() ERC20("MyToken", "MTK") {
_mint(msg.sender, 5000 * 10 ** decimals());
}
function decimals() override public view returns (uint8) {
return 8;
}
}

最新更新