I'm experiencing an extrange behaviour because this is something I do in other contracts, but... I'm making OwnableUpgradeable a contract and I need to override transferOwnership so it uses a custom modifier and not onlyOwner. So I'm calling _transferOwnership function (internal function of OwnableUpgradeable) inside the override...but I'm getting "TypeError: Member "_transferOwnership" not found or not visible".
I'm using hardhat v2.5.0 and solidity version: '0.8.2'...
My reduced code:
// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.2;
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC721/utils/ERC721HolderUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol";
contract Contract is Initializable, OwnableUpgradeable, PausableUpgradeable, ERC721HolderUpgradeable {
modifier ownerOrMaster() {
require(msg.sender == owner() || _isMaster(msg.sender), "Contract: ownerOrMaster");
_;
}
function transferOwnership(address newOwner) ownerOrMaster() public override {
_transferOwnership(newOwner); //TypeError: Member "_transferOwnership" not found or not visible
}
function initialize(address controller_, address owner_, address master_) initializer public {
__Ownable_init();
_transferOwnership(owner_); //TypeError: Member "_transferOwnership" not found or not visible
}
}
EDIT: it seems that you are changing OwnableUpgradeable contract if I check https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/v4.3.2/contracts/access/OwnableUpgradeable.sol it makes sense now.
Thanks