Solidity API
InternalStatesOrchestrator
Contract that orchestrates internal state management
_This contract is responsible for:
- Reading current vault states and market data;
- Processing deposit requests from LPs;
- 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 => euint128) encryptedInitialBatchPortfolio;
mapping(address => uint256) vaultsTotalAssets;
mapping(address => euint128) encryptedVaultsTotalAssets;
mapping(address => uint256) finalBatchPortfolio;
mapping(address => euint128) encryptedFinalBatchPortfolio;
mapping(address => uint256) vaultsTotalAssetsForFulfillRedeem;
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
encryptedMinibatchSize
uint8 encryptedMinibatchSize
Encrypted minibatch size
currentPhase
enum IInternalStateOrchestrator.InternalUpkeepPhase currentPhase
Upkeep phase
currentMinibatchIndex
uint8 currentMinibatchIndex
Current minibatch index
_ezero
euint128 _ezero
FHE zero
transparentVaultsEpoch
address[] transparentVaultsEpoch
Transparent vaults associated to the current epoch
encryptedVaultsEpoch
address[] encryptedVaultsEpoch
Encrypted vaults associated to the current epoch
validEncryptedVaultsCount
uint16 validEncryptedVaultsCount
Number of valid encrypted vaults processed in current epoch
bufferAmount
uint256 bufferAmount
Buffer amount [assets]
_decryptedValues
uint256[] _decryptedValues
Decrypted values from the FHEVM callback
onlyAutomationRegistry
modifier onlyAutomationRegistry()
Restricts function to only Chainlink 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 |
updateMinibatchSizes
function updateMinibatchSizes(uint8 _transparentMinibatchSize, uint8 _encryptedMinibatchSize) external
Updates the minibatch sizes
Parameters
Name | Type | Description |
---|---|---|
_transparentMinibatchSize | uint8 | The new transparent minibatch size |
_encryptedMinibatchSize | uint8 | The new encrypted 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 |
_computeNextUpdateTime
function _computeNextUpdateTime(uint256 currentTime) internal view returns (uint256)
Computes the next update time based on current timestamp
Parameters
Name | Type | Description |
---|---|---|
currentTime | uint256 | Current block timestamp |
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | Next update time |
_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 |
_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 |
_preprocessEncryptedMinibatch
function _preprocessEncryptedMinibatch(uint8 minibatchIndex) internal
Preprocesses minibatch of encrypted vaults
Parameters
Name | Type | Description |
---|---|---|
minibatchIndex | uint8 | The index of the minibatch to process |
callbackPreProcessDecrypt
function callbackPreProcessDecrypt(uint256 requestID, bytes cleartexts, bytes decryptionProof) external
Callback function to decrypt the encrypted values
Parameters
Name | Type | Description |
---|---|---|
requestID | uint256 | The request ID |
cleartexts | bytes | The cleartexts |
decryptionProof | bytes | The decryption proof |
_processDecryptedValues
function _processDecryptedValues() internal
Processes decrypted values from encrypted vaults to complete preprocessing
This function completes the fee calculations and state updates for encrypted vaults using the decrypted values from the FHEVM callback
_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 |
_postprocessEncryptedMinibatch
function _postprocessEncryptedMinibatch(uint8 minibatchIndex) internal
Postprocesses minibatch of encrypted 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 |
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 |