InternalStatesOrchestrator
InternalStatesOrchestrator
Contract that orchestrates internal state management
_This contract is responsible for:
- Reading current vault states and market data;
- Processing curator fees and high water mark;
- Updating vault states;
- Computing state estimations for Liquidity Orchestrator;
- Trigger the Liquidity Orchestrator._
automationRegistry
address automationRegistry
Chainlink Automation Registry address
config
contract IOrionConfig config
Orion Config contract address
liquidityOrchestrator
contract ILiquidityOrchestrator liquidityOrchestrator
Liquidity Orchestrator contract
registry
contract IPriceAdapterRegistry registry
Price Adapter Registry contract
priceAdapterPrecision
uint256 priceAdapterPrecision
Price Adapter Precision
intentFactor
uint256 intentFactor
Intent factor for calculations
underlyingAsset
address underlyingAsset
Underlying asset address
underlyingDecimals
uint8 underlyingDecimals
Decimals of the underlying asset
vFeeCoefficient
uint16 vFeeCoefficient
Volume fee coefficient
rsFeeCoefficient
uint16 rsFeeCoefficient
Revenue share fee coefficient
pendingProtocolFees
uint256 pendingProtocolFees
Pending protocol fees [assets]
BASIS_POINTS_FACTOR
uint16 BASIS_POINTS_FACTOR
Basis points factor
EpochState
Struct to hold epoch state data
struct EpochState {
mapping(address => uint256) priceArray;
mapping(address => uint256) initialBatchPortfolio;
mapping(address => uint256) vaultsTotalAssets;
mapping(address => uint256) finalBatchPortfolio;
mapping(address => uint256) vaultsTotalAssetsForFulfillRedeem;
mapping(address => uint256) vaultsTotalAssetsForFulfillDeposit;
mapping(address => uint256) sellingOrders;
mapping(address => uint256) buyingOrders;
address[] tokens;
mapping(address => bool) tokenExists;
}
_currentEpoch
struct InternalStatesOrchestrator.EpochState _currentEpoch
Current epoch state
epochDuration
uint32 epochDuration
Epoch duration
epochCounter
uint16 epochCounter
Counter for tracking processing cycles
transparentMinibatchSize
uint8 transparentMinibatchSize
Transparent minibatch size
currentPhase
enum IInternalStateOrchestrator.InternalUpkeepPhase currentPhase
Upkeep phase
currentMinibatchIndex
uint8 currentMinibatchIndex
Current minibatch index
transparentVaultsEpoch
address[] transparentVaultsEpoch
Transparent vaults associated to the current epoch
bufferAmount
uint256 bufferAmount
Buffer amount [assets]
onlyAuthorizedTrigger
modifier onlyAuthorizedTrigger()
Restricts function to only owner or automation registry
onlyLiquidityOrchestrator
modifier onlyLiquidityOrchestrator()
Restricts function to only Liquidity Orchestrator
constructor
constructor(address initialOwner, address config_, address automationRegistry_) public
Constructor
Parameters
| Name | Type | Description |
|---|---|---|
| initialOwner | address | The address of the initial owner |
| config_ | address | The address of the OrionConfig contract |
| automationRegistry_ | address | The address of the Chainlink Automation Registry |
updateAutomationRegistry
function updateAutomationRegistry(address newAutomationRegistry) external
Updates the Chainlink Automation Registry address
Parameters
| Name | Type | Description |
|---|---|---|
| newAutomationRegistry | address | The new automation registry address |
updateEpochDuration
function updateEpochDuration(uint32 newEpochDuration) external
Updates the epoch duration
Parameters
| Name | Type | Description |
|---|---|---|
| newEpochDuration | uint32 | The new epoch duration in seconds |
updateMinibatchSize
function updateMinibatchSize(uint8 _transparentMinibatchSize) external
Updates the minibatch sizes
Parameters
| Name | Type | Description |
|---|---|---|
| _transparentMinibatchSize | uint8 | The new transparent minibatch size |
updateProtocolFees
function updateProtocolFees(uint16 _vFeeCoefficient, uint16 _rsFeeCoefficient) external
Updates the protocol fees
Parameters
| Name | Type | Description |
|---|---|---|
| _vFeeCoefficient | uint16 | The new volume fee coefficient |
| _rsFeeCoefficient | uint16 | The new revenue share fee coefficient |
checkUpkeep
function checkUpkeep(bytes) external view returns (bool upkeepNeeded, bytes performData)
Checks if upkeep is needed based on time interval
https://docs.chain.link/chainlink-automation/reference/automation-interfaces
Return Values
| Name | Type | Description |
|---|---|---|
| upkeepNeeded | bool | True if upkeep is needed, false otherwise |
| performData | bytes | Encoded data needed to perform the upkeep |
performUpkeep
function performUpkeep(bytes performData) external
Performs state reading and estimation operations
Parameters
| Name | Type | Description |
|---|---|---|
| performData | bytes | Encoded data containing the action type and minibatch index |
_shouldTriggerUpkeep
function _shouldTriggerUpkeep() internal view returns (bool)
Checks if upkeep should be triggered based on time
Return Values
| Name | Type | Description |
|---|---|---|
| [0] | bool | True if upkeep should be triggered |
_buildTransparentVaultsEpoch
function _buildTransparentVaultsEpoch() internal
Build filtered transparent vaults list for the epoch
_handleStart
function _handleStart() internal
Updates the next update time and resets the previous epoch state variables
_preprocessTransparentMinibatch
function _preprocessTransparentMinibatch(uint8 minibatchIndex) internal
Preprocesses minibatch of transparent vaults
Parameters
| Name | Type | Description |
|---|---|---|
| minibatchIndex | uint8 | The index of the minibatch to process |
_buffer
function _buffer() internal
Updates the protocol buffer to maintain solvency and capital efficiency
_In general, this function implements a stochastic optimal control framework for buffer management that balances critical objectives and acts as a clearing house for market impact.
-
Solvency Constraint: The buffer must remain non-negative at all times to ensure protocol solvency.
-
Capital Efficiency: The buffer size should be minimized relative to Total Value Locked (TVL) to reduce capital inefficiency.
Buffer Management Strategy:
- Calculates the total protocol assets across all vaults (transparent and encrypted)
- Determines the target buffer amount based on the configured target ratio
- Only increases the buffer if current buffer is below target (no buffer reduction)
- Distributes the buffer cost proportionally across all vaults_
_postprocessTransparentMinibatch
function _postprocessTransparentMinibatch(uint8 minibatchIndex) internal
Postprocesses minibatch of transparent vaults
Parameters
| Name | Type | Description |
|---|---|---|
| minibatchIndex | uint8 | The index of the minibatch to postprocess |
_addTokenIfNotExists
function _addTokenIfNotExists(address token) internal
Adds a token to the current epoch if it doesn't exist
Parameters
| Name | Type | Description |
|---|---|---|
| token | address | The token address to add |
_buildOrders
function _buildOrders() internal
Builds selling and buying orders based on portfolio differences
_Compares _finalBatchPortfolio with _initialBatchPortfolio to determine rebalancing needs Orders are stored in _currentEpoch.sellingOrders and currentEpoch.buyingOrders.
getOrders
function getOrders() external view returns (address[] sellingTokens, uint256[] sellingAmounts, address[] buyingTokens, uint256[] buyingAmounts, uint256[] sellingEstimatedUnderlyingAmounts, uint256[] buyingEstimatedUnderlyingAmounts)
Get selling and buying orders
Return Values
| Name | Type | Description |
|---|---|---|
| sellingTokens | address[] | The tokens to sell |
| sellingAmounts | uint256[] | The amounts to sell in shares |
| buyingTokens | address[] | The tokens to buy |
| buyingAmounts | uint256[] | The amounts to buy in underlying assets |
| sellingEstimatedUnderlyingAmounts | uint256[] | The estimated underlying amounts to sell |
| buyingEstimatedUnderlyingAmounts | uint256[] | The estimated underlying amounts to buy |
getEpochTokens
function getEpochTokens() external view returns (address[] tokens)
Get the list of tokens for the current epoch
This function blocks if the internal state orchestrator is not idle
Return Values
| Name | Type | Description |
|---|---|---|
| tokens | address[] | The array of token addresses used in the current epoch |
getPriceOf
function getPriceOf(address token) external view returns (uint256 price)
Get price for a specific token
Parameters
| Name | Type | Description |
|---|---|---|
| token | address | The token to get the price of |
Return Values
| Name | Type | Description |
|---|---|---|
| price | uint256 | The corresponding price [shares/assets] |
subtractPendingProtocolFees
function subtractPendingProtocolFees(uint256 amount) external
Subtracts a specified amount from the pending protocol fees
Parameters
| Name | Type | Description |
|---|---|---|
| amount | uint256 | The amount to subtract from pending protocol fees |
updateBufferAmount
function updateBufferAmount(int256 deltaAmount) external
Updates the buffer amount based on execution vs estimated amounts
Can only be called by the Liquidity Orchestrator
Parameters
| Name | Type | Description |
|---|---|---|
| deltaAmount | int256 | The amount to add/subtract from the buffer (can be negative) |
getVaultTotalAssetsForFulfillRedeem
function getVaultTotalAssetsForFulfillRedeem(address vault) external view returns (uint256 totalAssets)
Get total assets for fulfill redeem for a specific vault
Parameters
| Name | Type | Description |
|---|---|---|
| vault | address | The vault address |
Return Values
| Name | Type | Description |
|---|---|---|
| totalAssets | uint256 | The total assets for fulfill redeem |
getVaultTotalAssetsForFulfillDeposit
function getVaultTotalAssetsForFulfillDeposit(address vault) external view returns (uint256 totalAssets)
Get total assets for fulfill deposit for a specific vault
Parameters
| Name | Type | Description |
|---|---|---|
| vault | address | The vault address |
Return Values
| Name | Type | Description |
|---|---|---|
| totalAssets | uint256 | The total assets for fulfill deposit |
getTransparentVaultsEpoch
function getTransparentVaultsEpoch() external view returns (address[] vaults)
Get the transparent vaults for the current epoch
Return Values
| Name | Type | Description |
|---|---|---|
| vaults | address[] | The array of transparent vault addresses for the current epoch |