Git Source Inherits: FacetCommonImports Author: @mpetersoCode55, @ShaneDuncan602, @TJ-Everett, @VoR0220 This contract is a critical component of the Rules Engine, enabling secure and flexible policy management. This contract serves as the primary data facet for the Rules Engine rules. It is responsible for creating, updating, retrieving, and managing rules. It enforces role-based access control and ensures that only authorized users can modify or retrieve data. The contract also supports policy cementing to prevent further modifications.

Functions

createRule

Creates a rule in storage. Adds a new rule to the specified policy. Only accessible by policy admins.
function createRule(uint256 policyId, Rule calldata rule, string calldata ruleName, string calldata ruleDescription)
    external
    returns (uint256);
Parameters
NameTypeDescription
policyIduint256ID of the policy the rule will be added to.
ruleRuleThe rule to create.
ruleNamestringThe name of the rule
ruleDescriptionstringThe description of the rule
Returns
NameTypeDescription
<none>uint256ruleId The generated rule ID.

updateRule

Updates a rule in storage. Modifies an existing rule in the specified policy. Only accessible by policy admins.
function updateRule(
    uint256 policyId,
    uint256 ruleId,
    Rule calldata rule,
    string calldata ruleName,
    string calldata ruleDescription
) external returns (uint256);
Parameters
NameTypeDescription
policyIduint256ID of the policy the rule belongs to.
ruleIduint256The ID of the rule to update.
ruleRuleThe updated rule data.
ruleNamestring
ruleDescriptionstring
Returns
NameTypeDescription
<none>uint256ruleId The updated rule ID.

getAllRules

Retrieves all rules associated with a specific policy.
function getAllRules(uint256 policyId) external view returns (Rule[][] memory);
Parameters
NameTypeDescription
policyIduint256The ID of the policy.
Returns
NameTypeDescription
<none>Rule[][]rules A two-dimensional array of rules grouped by calling functions.

getRuleMetadata

Retrieves the metadata of a rule.
function getRuleMetadata(uint256 policyId, uint256 ruleId) external view returns (RuleMetadata memory);
Parameters
NameTypeDescription
policyIduint256The ID of the policy the rule belongs to.
ruleIduint256The ID of the rule to retrieve metadata for.
Returns
NameTypeDescription
<none>RuleMetadataRuleMetadata The metadata of the specified rule.

deleteRule

Deletes a rule from storage.
function deleteRule(uint256 policyId, uint256 ruleId) public;
Parameters
NameTypeDescription
policyIduint256The ID of the policy the rule belongs to.
ruleIduint256The ID of the rule to delete.

getRule

Retrieves a rule from storage.
function getRule(uint256 policyId, uint256 ruleId) public view returns (RuleStorageSet memory);
Parameters
NameTypeDescription
policyIduint256The ID of the policy the rule belongs to.
ruleIduint256The ID of the rule to retrieve.
Returns
NameTypeDescription
<none>RuleStorageSetruleStorageSets The rule data.

getMemorySize

function getMemorySize() external pure returns (uint256);

getMaxLoopSize

function getMaxLoopSize() external pure returns (uint256);

getOpsSize1

function getOpsSize1() external pure returns (uint256);

getOpsSizeUpTo2

function getOpsSizeUpTo2() external pure returns (uint256);

getOpsSizeUpTo3

function getOpsSizeUpTo3() external pure returns (uint256);

getOpsTotalSize

function getOpsTotalSize() external pure returns (uint256);

_storeRuleData

Stores rule data in storage. This function is used to store the rule and its metadata.
function _storeRuleData(
    RuleStorage storage data,
    uint256 policyId,
    uint256 ruleId,
    Rule calldata rule,
    string calldata ruleName,
    string calldata ruleDescription
) private;
Parameters
NameTypeDescription
dataRuleStorageThe rule storage structure.
policyIduint256The ID of the policy the rule belongs to.
ruleIduint256The ID of the rule to store.
ruleRuleThe rule to store.
ruleNamestringThe name of the rule.
ruleDescriptionstringThe description of the rule.

_storeRule

Stores a rule in storage. Validates the policy existence before storing the rule.
function _storeRule(RuleStorage storage _data, uint256 _policyId, uint256 _ruleId, Rule calldata _rule)
    internal
    returns (uint256);
Parameters
NameTypeDescription
_dataRuleStorageThe rule storage structure.
_policyIduint256The ID of the policy the rule belongs to.
_ruleIduint256The ID of the rule to store.
_ruleRuleThe rule to store.
Returns
NameTypeDescription
<none>uint256ruleId The stored rule ID.

_updateTrackerIdMapping

Updates the mapping of tracker IDs to rule IDs for a specific policy. This function checks if a tracker is used in the instruction set of the rule and updates the mapping accordingly.
function _updateTrackerIdMapping(RuleStorage storage _data, uint256 _policyId, uint256 _ruleId) internal;
Parameters
NameTypeDescription
_dataRuleStorageThe rule storage structure.
_policyIduint256The ID of the policy to update the mapping for.
_ruleIduint256The ID of the rule to check for tracker usage.

_removeRuleFromTrackerIdMapping

Removes a rule from the tracker ID mapping. This function checks if a tracker is used in the instruction set of the rule and removes the rule ID from the mapping.
function _removeRuleFromTrackerIdMapping(uint256 _policyId, uint256 _ruleId) internal;
Parameters
NameTypeDescription
_policyIduint256The ID of the policy to update the mapping for.
_ruleIduint256The ID of the rule to check for tracker usage.

_incrementRuleId

Increments the rule ID counter for a specific policy. This function is used to generate a new rule ID for a policy.
function _incrementRuleId(RuleStorage storage data, uint256 _policyId) private returns (uint256);
Parameters
NameTypeDescription
dataRuleStorageThe rule storage structure.
_policyIduint256The ID of the policy to increment the rule ID for.
Returns
NameTypeDescription
<none>uint256The incremented rule ID.

_storeRuleMetadata

function to store the metadata for a rule. This function is used to store the metadata for a rule, such as its name and description.
function _storeRuleMetadata(uint256 _policyId, uint256 _ruleId, string calldata _ruleName, string calldata _description)
    internal;
Parameters
NameTypeDescription
_policyIduint256The ID of the policy the rule belongs to.
_ruleIduint256The ID of the rule to store metadata for.
_ruleNamestringThe name of the rule.
_descriptionstringThe description of the rule.

_validateRule

function _validateRule(Rule calldata rule, uint256 policyId) internal view;

_validateEffects

Validates an array of effects.
function _validateEffects(Effect[] calldata effects, uint256 policyId) internal view;
Parameters
NameTypeDescription
effectsEffect[]The effects to validate.
policyIduint256The policyId

_validatePlaceholders

Validates an array of placeholders.
function _validatePlaceholders(Placeholder[] calldata placeholders) internal pure;
Parameters
NameTypeDescription
placeholdersPlaceholder[]The placeholders to validate.

_validateInstructionSet

Validates an instruction set.
function _validateInstructionSet(uint256[] calldata instructionSet, uint256 policyId) internal view;
Parameters
NameTypeDescription
instructionSetuint256[]The instructionSet to validate.
policyIduint256The policyId.

_isLessLimitedOpCode

Determines whether the given operation code’s data is considered “less limited” and can be upwards of the max loop size
function _isLessLimitedOpCode(uint256 opCode) internal pure returns (bool);
Parameters
NameTypeDescription
opCodeuint256The operation code to evaluate.
Returns
NameTypeDescription
<none>boolbool Returns true if the operation code is less limited, otherwise false.

_validateParamType

Validates a paramType.
function _validateParamType(ParamTypes paramType) internal pure;
Parameters
NameTypeDescription
paramTypeParamTypesThe paramType to validate.

_validateEffectType

Validates an effect type.
function _validateEffectType(EffectTypes effectType) internal pure;
Parameters
NameTypeDescription
effectTypeEffectTypesThe effectType to validate.

_policyAdminOnly

Checks that the caller is a policy admin
function _policyAdminOnly(uint256 _policyId, address _address) internal;
Parameters
NameTypeDescription
_policyIduint256The ID of the policy.
_addressaddressThe address to check for policy admin status.