DestinationStewardReceiver
DestinationStewardReceiver
Section titled “DestinationStewardReceiver”Destination‑chain contract that receives bridged updates from RiskStewardReceiver via LayerZero,
enforces a fixed remote delay, and then executes the updates on the configured IRiskSteward contracts.
This page follows DestinationStewardReceiver.sol at v2.15.0. The stable tag contains destination receiver artifacts on Sepolia-family testnets, but not on the seven destination mainnets. Treat this as the stable staged-rollout API, not evidence that every production network already has this component.
The receiver uses LayerZero V2 OApp endpoint IDs (uint32) and peers, not the LayerZero V1 uint16 trusted-remote model used by Omnichain Governance.
Solidity API
Section titled “Solidity API”REMOTE_UPDATE_EXPIRATION_TIME
Section titled “REMOTE_UPDATE_EXPIRATION_TIME”Time before a bridged update is considered stale on the destination chain
uint256 REMOTE_UPDATE_EXPIRATION_TIMELAYER_ZERO_EID
Section titled “LAYER_ZERO_EID”Destination chain LayerZero endpoint ID
uint32 LAYER_ZERO_EIDremoteDelay
Section titled “remoteDelay”Delay before a bridged update can be executed on the destination chain
uint256 remoteDelayriskParameterConfigs
Section titled “riskParameterConfigs”Mapping of supported risk configurations per update type (hashed updateType string)
mapping(bytes32 => struct IDestinationStewardReceiver.RiskParamConfig) riskParameterConfigsupdates
Section titled “updates”Master storage of all bridged updates by update ID
mapping(uint256 => struct IDestinationStewardReceiver.DestinationUpdate) updateslastRegisteredUpdateId
Section titled “lastRegisteredUpdateId”Mapping from (updateType, market) to currently registered remote update ID
mapping(bytes32 => mapping(address => uint256)) lastRegisteredUpdateIdlastExecutedAt
Section titled “lastExecutedAt”Track last executed update timestamp per (updateType, market)
mapping(bytes32 => mapping(address => uint256)) lastExecutedAtwhitelistedExecutors
Section titled “whitelistedExecutors”Mapping from executor address to whitelist status
mapping(address => bool) whitelistedExecutorsconstructor
Section titled “constructor”Disables initializers and sets immutable values.
constructor(address endpoint_, uint32 layerZeroEid_) publicParameters
Section titled “Parameters”| Name | Type | Description |
|---|---|---|
| endpoint_ | address | Local LayerZero endpoint on this chain |
| layerZeroEid_ | uint32 | LayerZero endpoint ID for this destination chain |
initialize
Section titled “initialize”Initializes the contract with the Access Control Manager and owner.
function initialize(address accessControlManager_, address delegate_) externalParameters
Section titled “Parameters”| Name | Type | Description |
|---|---|---|
| accessControlManager_ | address | The address of the access control manager |
| delegate_ | address | The owner (and LayerZero delegate) of this contract |
setRiskParameterConfig
Section titled “setRiskParameterConfig”Sets the risk parameter config for a given update type on the destination chain.
function setRiskParameterConfig(string updateType, address riskSteward, uint256 debounce) externalParameters
Section titled “Parameters”| Name | Type | Description |
|---|---|---|
| updateType | string | The type of update to configure (e.g., “supplyCap”, “borrowCap”) |
| riskSteward | address | The address for the risk steward contract responsible for processing the update |
| debounce | uint256 | The debounce period for updates of this type on the destination (anti‑DoS) |
📅 Events
Section titled “📅 Events”- Emits RiskParameterConfigUpdated
⛔️ Access Requirements
Section titled “⛔️ Access Requirements”- Controlled by AccessControlManager
❌ Errors
Section titled “❌ Errors”- InvalidUpdateType if the update type string is empty
- InvalidDebounce if the debounce is 0
setConfigActive
Section titled “setConfigActive”Sets the active status of a risk parameter config
function setConfigActive(string updateType, bool active) externalParameters
Section titled “Parameters”| Name | Type | Description |
|---|---|---|
| updateType | string | The type of update to configure |
| active | bool | The active status to set |
📅 Events
Section titled “📅 Events”- Emits ConfigActiveUpdated with the update type hash, update type, previous active status, and the active status
⛔️ Access Requirements
Section titled “⛔️ Access Requirements”- Controlled by AccessControlManager
❌ Errors
Section titled “❌ Errors”- Throws UnsupportedUpdateType if the update type is not supported
- Throws ConfigStatusUnchanged if the active status is already set to the desired value
setRemoteDelay
Section titled “setRemoteDelay”Sets the remote delay before bridged updates can be executed on the destination chain.
function setRemoteDelay(uint256 newRemoteDelay) externalParameters
Section titled “Parameters”| Name | Type | Description |
|---|---|---|
| newRemoteDelay | uint256 | The new remote delay in seconds |
📅 Events
Section titled “📅 Events”- Emits RemoteDelaySet with the new remote delay value
⛔️ Access Requirements
Section titled “⛔️ Access Requirements”- Controlled by AccessControlManager
❌ Errors
Section titled “❌ Errors”- InvalidRemoteDelay if the delay is 0 or greater than or equal to the remote update expiration time
- RemoteDelayUnchanged if the new delay is equal to the current delay
setWhitelistedExecutor
Section titled “setWhitelistedExecutor”Sets the whitelist status of an executor on the destination chain.
function setWhitelistedExecutor(address executor, bool approved) externalParameters
Section titled “Parameters”| Name | Type | Description |
|---|---|---|
| executor | address | The address of the executor |
| approved | bool | The whitelist status to set (true to whitelist, false to remove) |
📅 Events
Section titled “📅 Events”- Emits ExecutorStatusUpdated with the executor address, previous approval status, and new approval status
⛔️ Access Requirements
Section titled “⛔️ Access Requirements”- Controlled by AccessControlManager
❌ Errors
Section titled “❌ Errors”- Throws ZeroAddressNotAllowed if the executor address is zero
- Throws ExecutorStatusUnchanged if the executor whitelist status is already set to the desired value
executeUpdate
Section titled “executeUpdate”Executes a bridged update after its remote delay has passed.
function executeUpdate(uint256 updateId) externalParameters
Section titled “Parameters”| Name | Type | Description |
|---|---|---|
| updateId | uint256 | The bridged update ID to execute |
📅 Events
Section titled “📅 Events”- Emits RemoteUpdateExecuted with the executed update ID
⛔️ Access Requirements
Section titled “⛔️ Access Requirements”- Only whitelisted executors can execute updates
❌ Errors
Section titled “❌ Errors”- NotAnExecutor if the caller is not a whitelisted executor
- ConfigNotActive if the configuration for the update type is not active
- UpdateNotFound if the update is not pending for the given (updateType, market)
- UpdateNotUnlocked if the remote delay has not elapsed
- UpdateIsExpired if the bridged update has expired on the destination
- UpdateTooFrequent if the debounce period has not passed since the last execution
rejectUpdate
Section titled “rejectUpdate”Rejects a registered remote update on the destination chain.
function rejectUpdate(uint256 updateId) externalParameters
Section titled “Parameters”| Name | Type | Description |
|---|---|---|
| updateId | uint256 | The oracle update ID of the update to reject |
📅 Events
Section titled “📅 Events”- Emits UpdateRejected with the rejected update ID
⛔️ Access Requirements
Section titled “⛔️ Access Requirements”- Only whitelisted executors can reject updates
❌ Errors
Section titled “❌ Errors”- NotAnExecutor if the caller is not a whitelisted executor
- UpdateNotFound if there is no pending update with the given ID
getExecutableUpdates
Section titled “getExecutableUpdates”Returns executable updates for a given update type and comptroller.
function getExecutableUpdates(string updateType, address comptroller) external view returns (uint256[] executableUpdates)Parameters
Section titled “Parameters”| Name | Type | Description |
|---|---|---|
| updateType | string | The human‑readable identifier of the update type to filter by |
| comptroller | address | The address of the Isolated Pools Comptroller that manages the markets |
Return Values
Section titled “Return Values”| Name | Type | Description |
|---|---|---|
| executableUpdates | uint256[] | Array of update IDs that are ready to be executed |
getRiskParameterConfig
Section titled “getRiskParameterConfig”Returns the risk parameter configuration for a given update type
function getRiskParameterConfig(string updateType) external view returns (struct IDestinationStewardReceiver.RiskParamConfig)Parameters
Section titled “Parameters”| Name | Type | Description |
|---|---|---|
| updateType | string | The human-readable identifier of the update type |
Return Values
Section titled “Return Values”| Name | Type | Description |
|---|---|---|
| [0] | struct IDestinationStewardReceiver.RiskParamConfig | The risk parameter configuration |
getRegisteredUpdate
Section titled “getRegisteredUpdate”Returns the registered update for a given update type and market
function getRegisteredUpdate(string updateType, address market) external view returns (struct IDestinationStewardReceiver.DestinationUpdate)Parameters
Section titled “Parameters”| Name | Type | Description |
|---|---|---|
| updateType | string | The human-readable identifier of the update type |
| market | address | The address of the market |
Return Values
Section titled “Return Values”| Name | Type | Description |
|---|---|---|
| [0] | struct IDestinationStewardReceiver.DestinationUpdate | The registered update |
getLastExecutedAt
Section titled “getLastExecutedAt”Returns the last executed timestamp for a given update type and market
function getLastExecutedAt(string updateType, address market) external view returns (uint256)Parameters
Section titled “Parameters”| Name | Type | Description |
|---|---|---|
| updateType | string | The human-readable identifier of the update type |
| market | address | The address of the market |
Return Values
Section titled “Return Values”| Name | Type | Description |
|---|---|---|
| [0] | uint256 | The last executed timestamp |
transferOwnership
Section titled “transferOwnership”Starts the two-step ownership transfer used jointly by AccessControlledV8 and the LayerZero OApp base. The pending owner must call acceptOwnership.
function transferOwnership(address newOwner) publicrenounceOwnership
Section titled “renounceOwnership”Disables renounceOwnership function
function renounceOwnership() public pure❌ Errors
Section titled “❌ Errors”- Throws RenounceOwnershipNotAllowed