Error when creating upgradeable contracts extending OpenZeppelin Contracts Ethereum Package

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 becomes ERC20UpgradeSafe .

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.