Hi @EvilJordan,
OpenZeppelin Contracts Ethereum Package v3.0 announcement includes the following note:
All contracts have an
UpgradeSafe
suffix to avoid confusion with their counterparts in OpenZeppelin Contracts. For example,ERC20
becomesERC20UpgradeSafe
.
To inherit from a contract in OpenZeppelin Contracts Ethereum Package we need to add the suffix UpgradeSafe
This is shown in the example in the Extending Contracts section of the README:
(I assume you were looking at the tagged version which I updated last week. Apologies for any confusion: https://github.com/OpenZeppelin/openzeppelin-contracts-ethereum-package/blob/v3.0.0/README.md#extending-contracts)
pragma solidity ^0.6.2; import "@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol"; import "@openzeppelin/contracts-ethereum-package/contracts/presets/ERC721PresetMinterPauserAutoId.sol"; contract MyNFT is Initializable, ERC721PresetMinterPauserAutoIdUpgradeSafe { function initialize() public initializer { ERC721PresetMinterPauserAutoIdUpgradeSafe.initialize( "MyNFT", "MYN", "https://example.com/token/" ); } }
When I was updating the documentation last week I hadn't realized that OpenZeppelin Contracts Ethereum Package had an implementation of Initializable
, so I will need to update references to that.
[Update] Best practice is to explicityly import and inherit from Initializable
In fact as you pointed out, in the example in the README we don't need to import nor inherit from Initializable
as it is already imported in the preset contract.