A project can store splits for an arbitrary number of groups, such as for payout distributions or for reserved token distributions.
A split can specify an address, a Juicebox project, a contract that adheres to the IJBSplitHook interface, or the address that calls the transaction to distribute payouts or reserved tokens as its recipient.
By default, splits can be changed at any time for any ruleset configuration. A project's owner can also independently lock a split to a ruleset configuration for a customizable duration.
When a split targets a project (projectId is non-zero), the split's beneficiary receives any project tokens minted from the payment. If beneficiary is address(0), the terminal defaults to the msg.sender of the sendPayoutsOf call as the token recipient. Always set an explicit beneficiary to ensure tokens are routed to the intended address.