I am trying to switch my contract to use the 'import "@openzeppelin/contracts/access/Ownable.sol”’, but I am getting the following error
contracts/InvoiceTracker.sol:93:9: DeclarationError: Undeclared identifier.
ownerOnly()
for this code:
function addClient(address _clientID, string memory _name)
public
ownerOnly()
noDupClient(_clientID, _name)
{}
I have installed:
"@openzeppelin/cli": "^2.8.2",
"@openzeppelin/contracts": "^3.1.0",
"@openzeppelin/test-helpers": "^0.5.6”
Can you give me a clue as to why this is happening?
1 Like
Hi @denismp,
Welcome to the community
You could get this error if your contract isn’t inheriting from Ownable.
As well as importing, we need to inherit Ownable.
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyContract is Ownable {}
See the example in the documentation for more details:
https://docs.openzeppelin.com/contracts/3.x/access-control#ownership-and-ownable
As an aside, you may want to look at using Access Control for more finely grained control: https://docs.openzeppelin.com/contracts/3.x/access-control#role-based-access-control
Hi @denismp,
Checking that you were able to compile after inheriting Ownable?