Git Source

Author: @mpetersoCode55, @ShaneDuncan602, @TJ-Everett, @VoR0220

This library is a critical component of the Rules Engine, enabling dynamic and modular functionality through the diamond proxy pattern.

This library implements the core functionality for managing facets in the diamond proxy pattern. It provides functions for adding, replacing, and removing facets, as well as initializing diamond cuts. The library also enforces rules for facet management and ensures that only valid operations are performed.

State Variables

DIAMOND_CUT_STORAGE

bytes32 constant DIAMOND_CUT_STORAGE = bytes32(uint256(keccak256("diamond-cut.storage")) - 1);

Functions

s

Function for position of rules. Every rule has its own storage.

function s() internal pure returns (RulesEngineDiamondStorage storage ds);

Returns

NameTypeDescription
dsRulesEngineDiamondStorageData storage for Rule Processor Storage

diamondCut

Internal function version of _diamondCut

function diamondCut(FacetCut[] memory _diamondCut, address init, bytes memory data) internal;

Parameters

NameTypeDescription
_diamondCutFacetCut[]Facets Array
initaddressAddress of the contract or facet to execute “data”
databytesA function call, including function selector and arguments calldata is executed with delegatecall on “init”

addFunctions

Add Function to Diamond

function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal;

Parameters

NameTypeDescription
_facetAddressaddressAddress of Facet
_functionSelectorsbytes4[]Signature array of function selectors

replaceFunctions

Replace Function from Diamond

function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal;

Parameters

NameTypeDescription
_facetAddressaddressAddress of Facet
_functionSelectorsbytes4[]Signature array of function selectors

removeFunctions

can’t replace immutable functions — functions defined directly in the diamond in this case replace old facet address

Remove Function from Diamond

function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal;

Parameters

NameTypeDescription
_facetAddressaddressAddress of Facet
_functionSelectorsbytes4[]Signature array of function selectors

initializeDiamondCut

can’t remove immutable functions — functions defined directly in the diamond replace selector with last selector delete last selector

Initialize Diamond Cut of new Facet

function initializeDiamondCut(address init, bytes memory data) internal;

Parameters

NameTypeDescription
initaddressThe address of the contract or facet to execute “data”
databytesA function call, including function selector and arguments calldata is executed with delegatecall on “init”

enforceHasContractCode

Internal function to enforce contract has code

function enforceHasContractCode(address _contract, string memory _errorMessage) internal view;

Parameters

NameTypeDescription
_contractaddressThe address of the contract be checked or enforced
_errorMessagestringError for contract with non matching co

Events

DiamondCut

event DiamondCut(FacetCut[] _diamondCut, address init, bytes data);