smalaichami asked on GitHub (https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2092):
It looks like that ERC20Mintable.sol contract is moved or removed.
Could you please suggest what is the new parth for ERC20Mintable.sol ?
smalaichami asked on GitHub (https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2092):
It looks like that ERC20Mintable.sol contract is moved or removed.
Could you please suggest what is the new parth for ERC20Mintable.sol ?
OpenZeppelin Contracts v3.0 has a beta release
The final v3.0 release is not yet finished
Roles contracts (such as
MinterRole
andPauserRole
) were removed: weāre redesigning our Access Control solution and will have a better version of these in the v3.0 release.
ERC20Mintable.sol is part of OpenZeppelin Contracts v2.5 which uses Solidity 0.5.
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v2.5.0/contracts/token/ERC20/ERC20Mintable.sol
The master
branch of the repo currently contains the work for the upcoming 3.0 release. For this release, we are removing the current role contracts, which includes MinterRole
. Since we are removing this role, we are also removing the ERC20Mintable
contract which used it.
There will be an alternative to ERC20Mintable
and roles in 3.0, but we havenāt built it yet.
In the meantime, please continue using ERC20Mintable
from the 2.5 release of Contracts, which can be found in the repository in the link that @abcoathup provided above.
6 posts were split to a new topic: Crowdsale contracts in OpenZeppelin Contracts 3.0?
Hey @frangio, v3 is out, but I canāt see the alternative for ERC20Mintable
. I only found a ERC20Capped
contract. Is this planned for a future version?
Heya, Iāve had some similar issues fishing around, but if helpful, check out some of the OZ chunks I am using here which are blend of old/new (iām still catching up lol)
Hi @PaulRBerg,
ERC20Capped.sol was rewritten and it doesn't have a dependency on access control.
OpenZeppelin Contracts v3.x introduced ERC20PresetMinterPauser which includes minting and pausing functionality using access control:
The account that deploys the contract will be granted the minter and pauser roles, as well as the default admin role, which will let it grant both minter and pauser roles to aother accounts
The Preset contracts are opinionated, especially when it comes to access control.
Do you think there is still a need for an ERC20Mintable
?
What access control should it have?
Hi @Ro5s,
I suggest having a look at ERC20PresetMinterPauser in OpenZeppelin Contracts v3.0 depending where you are in the development cycle so you could update to Solidity 0.6 and OpenZeppelin Contracts 3.x.
I noticed that LexTokenFactory.sol
has been flattened (I assume you used a flattener). I would recommend not flattening and only importing the OpenZeppelin Contracts for security and readability.
Note: Solidity 0.6.8 introduces SPDX license identifiers and the compiler will error if you have multiple license identifiers which you would get from flattening.
Nah, ERC20PresetMinterPauser fits the bill well. Thanks, Andrew!
V3 doesnāt include ERC20Mintable
because the core contracts were made less opinionated: you get the internal _mint
function in ERC20
and you can expose it as an external function however you want. This grew out of a feeling that basic contracts like v2ās ERC20Mintable
can be inadequate when a project grows, and itās also related to the fact that we introduced the more feature-complete AccessControl
but we didnāt want to force everyone to use it. To balance this out, we introduced the āpresetā contracts that piece together the different components in an opinionated way to provide ready to use contracts. So Iām glad to hear that worked for you.
Maybe we need to do a better job explaining this idea in the documentation. May I ask @PaulRBerg and @Ro5s in what places you tried to find this so that we can make sure this information is discoverable for others that may search in similar places?
@abcoathup Helpful links. I really like how OZ is showing more examples of āput togetherā solidity for certain use cases ~~ lots of folks, like myself, are in team ācopy pastaā
For LexTokenFactory
I have the entire file there for my own silly purposes (I am actually a straight up āRemixā programmer, noob tendencies), but also, I remove some of the constructors for Roles that otherwise defaulted permissions to msg.sender (I like being able to set owner remotely from factory as option).
Hi @Ro5s,
We can import OpenZeppelin Contracts via GitHub in Remix (see example: Deploy a simple ERC20 token in Remix). I find flattened contracts difficult to read and it isnāt clear when changes have been made (such as when you are modifying Roles).
I recommend checking out OpenZeppelin Contracts v3.0 Access Control
I think it'd be nice to have a reference to the new AccessControl
contract and the "preset" model in the README of the ERC20 folder:
My last update on Solidity 0.8.0 If you have any advise or comment letās me know.
pragma solidity ^0.8.0;
import '@openzeppelin/contracts/token/ERC20/ERC20.sol';
contract TokenBase is ERC20 {
address public admin;
constructor(string memory name, string memory symbol) ERC20(name, symbol) {
admin = msg.sender;
}
function updateAdmin(address newAdmin) external {
require(msg.sender == admin, 'only admin');
admin = newAdmin;
}
function mint(address to, uint amount) external {
require(msg.sender == admin, 'only admin');
_mint(to, amount);
}
function burn(address owner, uint amount) external {
require(msg.sender == admin, 'only admin');
_burn(owner, amount);
}
}