Skip to main content

JBOwnableOverrides

Git Source

Inherits: Context, JBPermissioned, IJBOwnable

An abstract base for JBOwnable, which restricts functions so they can only be called by a Juicebox project's owner or a specific owner address. The owner can give access permission to other addresses with JBPermissions.

State Variables

PROJECTS

Mints ERC-721s that represent project ownership and transfers.

IJBProjects public immutable override PROJECTS;

jbOwner

This contract's owner information.

JBOwner public override jbOwner;

Functions

constructor

To restrict access to a Juicebox project's owner, pass that project's ID as the initialProjectIdOwner and the zero address as the initialOwner. To restrict access to a specific address, pass that address as the initialOwner and 0 as the initialProjectIdOwner.

The owner can give owner access to other addresses through the permissions contract.

constructor(
IJBPermissions permissions,
IJBProjects projects,
address initialOwner,
uint88 initialProjectIdOwner
)
JBPermissioned(permissions);

Parameters

NameTypeDescription
permissionsIJBPermissionsA contract storing permissions.
projectsIJBProjectsMints ERC-721s that represent project ownership and transfers.
initialOwneraddressThe owner if the intialProjectIdOwner is 0 (until ownership is transferred).
initialProjectIdOwneruint88The ID of the Juicebox project whose owner is this contract's owner (until ownership is transferred).

owner

Returns the owner's address based on this contract's JBOwner.

function owner() public view virtual returns (address);

_checkOwner

Reverts if the sender is not the owner.

function _checkOwner() internal view virtual;

renounceOwnership

Gives up ownership of this contract, making it impossible to call onlyOwner and _checkOwner functions.

This can only be called by the current owner.

function renounceOwnership() public virtual override;

setPermissionId

Sets the permission ID the owner can use to give other addresses owner access.

This can only be called by the current owner.

function setPermissionId(uint8 permissionId) public virtual override;

Parameters

NameTypeDescription
permissionIduint8The permission ID to use for onlyOwner.

transferOwnership

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

This can only be called by the current owner.

function transferOwnership(address newOwner) public virtual override;

Parameters

NameTypeDescription
newOwneraddressThe address to transfer ownership to.

transferOwnershipToProject

Transfer ownership of this contract to a new Juicebox project.

This can only be called by the current owner.

The projectId must fit within a uint88.

function transferOwnershipToProject(uint256 projectId) public virtual override;

Parameters

NameTypeDescription
projectIduint256The ID of the project to transfer ownership to.

_emitTransferEvent

Either newOwner or newProjectId is non-zero or both are zero. But they can never both be non-zero.

This function exists because some contracts will try to deploy contracts for a project before

function _emitTransferEvent(address previousOwner, address newOwner, uint88 newProjectId) internal virtual;

_setPermissionId

Sets the permission ID the owner can use to give other addresses owner access.

Internal function without access restriction.

function _setPermissionId(uint8 permissionId) internal virtual;

Parameters

NameTypeDescription
permissionIduint8The permission ID to use for onlyOwner.

_transferOwnership

Helper to allow for drop-in replacement of OpenZeppelin Ownable.

function _transferOwnership(address newOwner) internal virtual;

Parameters

NameTypeDescription
newOwneraddressThe address that should receive ownership of this contract.

_transferOwnership

Transfers this contract's ownership to an address (newOwner) OR a Juicebox project (projectId).

Updates this contract's JBOwner owner information and resets the JBOwner.permissionId.

If both newOwner and projectId are set, this will revert.

Internal function without access restriction.

function _transferOwnership(address newOwner, uint88 projectId) internal virtual;

Parameters

NameTypeDescription
newOwneraddressThe address that should become this contract's owner.
projectIduint88The ID of the project whose owner should become this contract's owner.

Errors

JBOwnableOverrides_InvalidNewOwner

error JBOwnableOverrides_InvalidNewOwner();