Contract modules for simple authorization and access control mechanisms.

For more complex needs see Access.



Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions.

This module is used through inheritance. It will make available the modifier onlyOwner, which can be applied to your functions to restrict their use to the owner.


onlyOwner() modifier

Throws if called by any account other than the owner.

constructor() internal

Initializes the contract setting the deployer as the initial owner.

owner() → address public

Returns the address of the current owner.

isOwner() → bool public

Returns true if the caller is the current owner.

renounceOwnership() public

Leaves the contract without owner. It will not be possible to call onlyOwner functions anymore. Can only be called by the current owner.

Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.

transferOwnership(address newOwner) public

Transfers ownership of the contract to a new account (newOwner). Can only be called by the current owner.

_transferOwnership(address newOwner) internal

Transfers ownership of the contract to a new account (newOwner).

OwnershipTransferred(address previousOwner, address newOwner) event


A Secondary contract can only be used by its primary account (the one that created it).


onlyPrimary() modifier

Reverts if called from any account other than the primary.

constructor() internal

Sets the primary account to the one that is creating the Secondary contract.

primary() → address public

transferPrimary(address recipient) public

Transfers contract to a new primary.

PrimaryTransferred(address recipient) event

Emitted when the primary contract changes.