@bananapus/ownable v0.0.6
Bananapus Ownable
A Bananapus variation on OpenZeppelin Ownable
to enable owner-based access control incorporating Juicebox project ownership and JBPermissions
, forked from jbx-protocol/juice-ownable
.
This implementation adds:
- The ability to transfer contract ownership to a Juicebox Project instead of a specific address.
- The ability to grant other addresses
OnlyOwner
access usingJBPermissions
. - Includes the
JBPermissioned
modifiers with support for OpenZeppelinContext
. This enables optional meta-transaction support.
All features are backwards compatible with OpenZeppelin Ownable
. This should be a drop-in replacement.
This repo contains 2 contracts:
- If your contract does not already use
Ownable
or access controls, useJBOwnable
. - If your contract extends a contract you cannot easily modify (e.g. a core dependency), and that contract inherits from OpenZeppelin
Ownable
, useJBOwnableOverride
.
NOTICE: Only use JBOwnableOverride
if you are overriding OpenZeppelin Ownable
v4.7.0 or higher. Otherwise, JBPermissions
functionality for onlyOwner
will not work.
If you're having trouble understanding this contract, take a look at the core protocol contracts and the documentation first. If you have questions, reach out on Discord.
Install
For projects that use npm:
npm install @bananapus/ownable
For projects that use forge:
forge install Bananapus/nana-ownable
And add @bananapus/ownable=lib/nana-ownable/
to remappings.txt
. You'll also need to install nana-ownable
's dependencies and add similar remappings for them.
Develop
nana-ownable
uses npm for package management and the Foundry development toolchain for builds, tests, and deployments. To get set up, install Node.js and install Foundry:
curl -L https://foundry.paradigm.xyz | sh
You can download and install dependencies with:
npm install && forge install
If you run into trouble with forge install
, try using git submodule update --init --recursive
to ensure that nested submodules have been properly initialized.
Some useful commands:
Command | Description |
---|---|
forge build | Compile the contracts and write artifacts to out . |
forge fmt | Lint. |
forge test | Run the tests. |
forge build --sizes | Get contract sizes. |
forge coverage | Generate a test coverage report. |
foundryup | Update foundry. Run this periodically. |
forge clean | Remove the build artifacts and cache directories. |
To learn more, visit the Foundry Book docs.
Scripts
For convenience, several utility commands are available in package.json
.
Command | Description |
---|---|
npm test | Run local tests. |
npm run test:fork | Run fork tests (for use in CI). |
npm run coverage:lcov | Generate an LCOV test coverage report. |