set
Contract: JBSplitsStore
Interface: IJBSplitsStore
- Step by step
 - Code
 - Bug bounty
 
Sets a project's splits.
Only the owner or operator of a project, or the current controller contract of the project, can set its splits.
The new splits must include any currently set splits that are locked.
Definition
function set(
  uint256 _projectId,
  uint256 _domain,
  JBGroupedSplits[] calldata _groupedSplits
)
  external
  override
  requirePermissionAllowingOverride(
      projects.ownerOf(_projectId),
      _projectId,
      JBOperations.SET_SPLITS,
      address(directory.controllerOf(_projectId)) == msg.sender
  ) { ... }
- Arguments:
_projectIdis the ID of the project for which splits are being added._domainis an identifier within which the splits should be considered active._groupedSplitsAn array of splits to set for any number of groups.
 - Through the 
requirePermissionAllowingOverridemodifier, the function is only accessible by the project's owner, from an operator that has been given theJBOperations.SET_SPLITSpermission by the project owner for the provided_projectId, or from the current controller of the_projectIdof the specified. - The function overrides a function definition from the 
IJBSplitsStoreinterface. - The function doesn't return anything.
 
Body
- 
Loop through each grouped split and set it.
// Push array length in stack
uint256 _groupedSplitsLength = _groupedSplits.length;
// Set each grouped splits.
for (uint256 _i = 0; _i < _groupedSplitsLength; ) {
// Get a reference to the grouped split being iterated on.
JBGroupedSplits memory _groupedSplit = _groupedSplits[_i];
// Set the splits for the group.
_set(_projectId, _domain, _groupedSplit.group, _groupedSplit.splits);
unchecked {
++_i;
}
}Internal references:
 
/**
  @notice
  Sets a project's splits.
  @dev
  Only the owner or operator of a project, or the current controller contract of the project, can set its splits.
  @dev
  The new splits must include any currently set splits that are locked.
  @param _projectId The ID of the project for which splits are being added.
  @param _domain An identifier within which the splits should be considered active.
  @param _groupedSplits An array of splits to set for any number of groups.
*/
function set(
  uint256 _projectId,
  uint256 _domain,
  JBGroupedSplits[] calldata _groupedSplits
)
  external
  override
  requirePermissionAllowingOverride(
    projects.ownerOf(_projectId),
    _projectId,
    JBOperations.SET_SPLITS,
    address(directory.controllerOf(_projectId)) == msg.sender
  )
{
  // Push array length in stack
  uint256 _groupedSplitsLength = _groupedSplits.length;
  // Set each grouped splits.
  for (uint256 _i = 0; _i < _groupedSplitsLength; ) {
    // Get a reference to the grouped split being iterated on.
    JBGroupedSplits memory _groupedSplit = _groupedSplits[_i];
    // Set the splits for the group.
    _set(_projectId, _domain, _groupedSplit.group, _groupedSplit.splits);
    unchecked {
      ++_i;
    }
  }
}
| Category | Description | Reward | 
|---|---|---|
| Optimization | Help make this operation more efficient. | 0.5ETH | 
| Low severity | Identify a vulnerability in this operation that could lead to an inconvenience for a user of the protocol or for a protocol developer. | 1ETH | 
| High severity | Identify a vulnerability in this operation that could lead to data corruption or loss of funds. | 5+ETH |