Entity–relationship model with roles

Contracts
The community multisig controlsDEFAULT_ADMIN_ROLE and _TIMELOCK_ROLE (via the OpenZeppelin TimelockController contract). Other roles will be
controlled by an ops multisig, EOAs for OpenZeppelin Defender keepers, and
external strategists.
BasketManager
Roles
Functions
Notes
- The
_TIMELOCK_ROLEis critical for setting parameters that affect the protocol’s operation, such as fees and adapters. _BASKET_TOKEN_ROLEis dynamically assigned to basket tokens during their creation, allowing them to call specific functions likeproRataRedeem.
BasketToken
Roles
Functions
Notes
- The
_BASKET_MANAGERrole is only given to the BasketManager contract at the BasketToken creation, ensuring only the BasketManager contract can call critical functions during the rebalance cycle. - The contract uses a fallback mechanism for failed redemptions, which is triggered by the BasketManager.
FeeCollector
Roles
Functions
Notes
- The
_BASKET_TOKEN_ROLEis dynamically assigned by the BasketManager to basket tokens, allowing them to notify fees. - Only the protocol treasury or admin can claim treasury fees.
AssetRegistry
Roles
Functions
Notes
- The
_MANAGER_ROLEis critical for adding and managing assets in the registry. - The contract uses a bit flag system to represent enabled assets, which is updated dynamically based on asset status.
StrategyRegistry
Roles
Functions
Notes
- The
_WEIGHT_STRATEGY_ROLEis used to validate weight strategies before calling theirsupportsBitFlagfunction.
ManagedWeightStrategy
Roles
Functions
Notes
- The
_MANAGER_ROLEis critical for setting target weights, which directly affect the strategy’s behavior. - The contract uses a mapping to store target weights for each bit flag.