FeeOracle
FeeOracle.sol is a supplementary contract responsible for the execution of the Performance Oracle report once consensus is reached in the HashConsensus.sol contract, namely, transforming non-distributed rewards into non-claimed rewards stored on the FeeDistributor.sol and reporting the latest root of the rewards distribution Merkle tree to the FeeDistributor.sol. Alongside rewards distribution, the contract manages strikes data delivery to ValidatorStrikes.sol. The contract inherits from BaseOracle.sol from Lido on Ethereum (LoE) core.
Upgradability​
The contract uses OssifiableProxy for upgradability.
State Variables​
INITIALIZED_VERSION​
uint256 internal constant INITIALIZED_VERSION = 3
SUBMIT_DATA_ROLE​
An ACL role granting the permission to submit the data for a committee report.
bytes32 public constant SUBMIT_DATA_ROLE = keccak256("SUBMIT_DATA_ROLE")
FEE_DISTRIBUTOR​
IFeeDistributor public immutable FEE_DISTRIBUTOR
STRIKES​
IValidatorStrikes public immutable STRIKES
__freeSlot1​
bytes32 internal __freeSlot1
__freeSlot2​
bytes32 internal __freeSlot2
Functions​
constructor​
constructor(address feeDistributor, address strikes, uint256 secondsPerSlot, uint256 genesisTime)
BaseOracle(secondsPerSlot, genesisTime);
initialize​
Initialize contract from scratch. In case of a method call frontrun, the contract instance should be discarded. It is recommended to call this method in the same transaction as the deployment transaction and perform extensive deployment verification before using the contract instance.
function initialize(address admin, address consensusContract, uint256 consensusVersion) external;
finalizeUpgradeV3​
This method is expected to be called only when the contract is upgraded from version 2 to version 3 for the existing version 2 deployment.
If the version 3 contract is deployed from scratch, the initialize method should be used instead.
To prevent possible frontrun this method should strictly be called in the same TX as the upgrade transaction and should not be called separately.
function finalizeUpgradeV3(uint256 consensusVersion) external;
submitReportData​
Submit the data for a committee report
function submitReportData(ReportData calldata data, uint256 contractVersion) external whenResumed;
Parameters
| Name | Type | Description |
|---|---|---|
data | ReportData | Data for a committee report |
contractVersion | uint256 | Expected storage contract version of the FeeOracle implementation |
_handleConsensusReport​
Called in submitConsensusReport after a consensus is reached.
function _handleConsensusReport(
ConsensusReport memory,
/* report */
uint256,
/* prevSubmittedRefSlot */
uint256 /* prevProcessingRefSlot */
)
internal
override;
_handleConsensusReportData​
function _handleConsensusReportData(ReportData calldata data) internal;
_checkMsgSenderIsAllowedToSubmitData​
function _checkMsgSenderIsAllowedToSubmitData() internal view;
_onlyRecoverer​
function _onlyRecoverer() internal view override;
__checkRole​
function __checkRole(bytes32 role) internal view override;