Overview
The Juicebox protocol is a payment processor and capital formation engine for tokenized fundraises, revenues, incentives, and financial operations. Below are some of the protocol's most notable features.
Features
Deploy a project
Juicebox projects are represented by NFTs. Owning this NFT grants the holder full administrative privileges to adapt the project's rulesets over time.
Example: Deploying a New Project
To deploy a new Juicebox project, you will:
- Define the project metadata (e.g., its name, description, and token details).
- Choose an initial sequence of rulesets that dictate how funds are distributed and tokens are issued.
- Choose which tokens you want to accept into the project.
- Deploy the project, generating an NFT representing its ownership.
Schedule rulesets for a project
Rulesets define the operational constraints for a project, including how funds are managed, tokens are issued, and payouts are distributed. Each project operates under one active ruleset at a time, with the ability to queue any number of future rulesets at any time.
Main configurable ruleset properties:
Property | Description |
---|---|
Start Timestamp | When the ruleset becomes active. |
Duration | How long the ruleset lasts. Changes can only take effect after the current ruleset ends. |
Payout Limit | The maximum funds that can be distributed during a ruleset. |
Surplus Allowance | Funds the owner can distribute on-demand. |
Weight | Determines how many of the project's tokens are issued per payment. |
Base Currency | The currency used as the reference for token issuance weight. |
Weight Cut Percent | Automatically decreases token issuance weight for subsequent cycles. |
Reserved Percent | Percentage of newly issued project tokens withheld for specific distributions. |
Cash Out Tax Rate | Determines the percentage of the project's funds that token holders can reclaim by cashing out. |
Approval Hook | Custom criteria for approving ruleset changes made by the project owner. |
Example: Configuring Rulesets
A project owner wants to create a ruleset with the following:
- Start Timestamp: January 1, 2025, 00:00 UTC
- Duration: 30 days
- Payout Limit: 100 ETH
- Surplus Allowance: 50 ETH
- Weight/Base Currency: 1,000 tokens/ETH
- Weight Cut Percent: 10%
- Reserved Percent: 20%
- Approval Hook: Requires ruleset changes to be submitted at least 7 days in advance.
This configuration ensures:
- Fund distribution is capped at 100 ETH during the 30-day period.
- Any surplus above the payout limit is available for token holders to cash out from, used by the project owner (up to 50 ETH), or held as runway for future rulesets.
- Token issuance follows a fixed rate of 1,000 tokens per ETH contributed. 20% of newly issued tokens are withheld for the project owner.
- If the project owner wants to change the next ruleset, they must submit a changes at least 7 days in advance of the current ruleset ending. Otherwise, the current ruleset will cycle over to another 30 day ruleset with identical properties except a weight of 900 tokens/ETH (10% fewer).
Issue tokens
Projects issue its tokens when treasury payments are received. By default:
- Tokens are accounted for within the Juicebox protocol as credits (not ERC-20).
- The project owner can optionally deploy its ERC-20 token at any time after the project is deployed, which credit holders can then claim.
- Once a project has deployed its ERC-20 token, it no longer issues credits.
Example: Issuing Tokens
- A contributor sends 2 ETH to the project’s treasury.
- The current ruleset has a weight of 500 tokens/ETH, and a reserved percent of 20%.
- The contributor receives 800 project tokens as credits.
If the project later issues an ERC-20 token:
- The contributor can claim 800 ERC-20 tokens in exchange for their credits.
- These ERC-20 tokens can be freely traded or used in other DeFi protocols.
Later on:
- A contributor sends 1 ETH to the project’s treasury.
- The contributor receives 400 project tokens as ERC-20s.
Payout splits and reserved token splits
Projects can pre-program how funds and tokens are distributed within a ruleset's payout limit and reserved token allocation:
- Payout Splits: Define how the project's funds can be paid out to external addresses, other Juicebox projects, or split hook contracts.
- Reserved Token Splits: Specify how newly issued reserved project tokens are allocated to contributors, other projects, or split hook contracts.
Example: Using Splits
A project owner defines the following splits:
-
Payout Splits:
- 50% of funds go to a development team wallet.
- 30% of funds are directed to another Juicebox project.
- 20% of funds are distributed to a community fund.
-
Reserved Token Splits:
- 40% of reserved tokens are allocated to a marketing wallet.
- 60% are distributed proportionally among key contributors.
With a weight of 1000 tokens/ETH, a payout limit of 10 ETH, and a reserved percent of 20%:
When 1 ETH is paid to the project, 200 reserved tokens are allocated.
The 1 ETH can immediately be distributed:
- 0.5 ETH goes to the development team.
- 0.3 ETH goes to the linked Juicebox project.
- 0.2 ETH goes to the community fund.
The 200 reserved tokens can also be distributed:
- 80 reserved tokens go to the marketing wallet.
- 120 reserved tokens go to the key contributors.
When another 10 ETH is paid to the project, 2000 reserved tokens are allocated.
9 ETH can immediately be distributed, totaling the payout limit of 10 ETH.
- 4.5 ETH goes to the development team.
- 2.7 ETH goes to the linked Juicebox project.
- 1.8 ETH goes to the community fund.
The 2000 reserved tokens can also be distributed:
- 800 reserved tokens go to the marketing wallet.
- 1200 reserved tokens go to the key contributors.
The remaining 1 ETH is held as surplus, and can be distributed to the project owner if a surplus allowance is set, cashed out by token holders if the ruleset allows, or held as runway for future rulesets. Any other incoming ETH adds to the surplus.
Omnichain operations
Juicebox supports projects operating across multiple EVM-compatible chains. Projects can:
- Issue their unified project token and receive funds on any supported chain.
- Move tokens and treasury funds proportionally between chains.
Example: Omnichain Use Case
An project collects funds on Ethereum and Base:
- A contributor pays the project's first funds on Ethereum and receives 1,000 tokens.
- The contributor bridges 500 tokens to Base.
- 50% of the project’s Ethereum treasury funds are moved to Base automatically.
- Pro Tip: Projects must synchronize rulesets across chains to ensure consistent operations or intentionally design unique rulesets for each chain.
Customizations with hooks
Projects can use custom hooks to extend or override default treasury behavior:
IJBRulesetDataHook
: Define custom logic for fund receipts or token cash-outs.IJBPayHook
: Define custom logic for what happens when a payment is received.IJBCashOutHook
: Define custom logic for what happens when a token holder cashes out their tokens.IJBSplitHook
: Define custom logic for what happens when a payout split or reserved token split is triggered.IJBRulesetApprovalHook
: Enforce criteria like governance approvals before ruleset changes.
Example: Custom Hook Implementation
A project uses a data hook and pay hook to:
- Mint an NFT as a reward for every payment received.
- Forward incoming funds to buyback project tokens from the open market instead of issuing new tokens if it offers a better rate.
This ensures contributors are rewarded with NFTs and recieve the most project tokens possible from their contributions.
Learn more about ruleset data hooks Learn more about pay hooks Learn more about cash out hooks Learn more about split hooks Learn more about ruleset approval hooks