InfraredBERA
Inherits: ERC20Upgradeable, Upgradeable, IInfraredBERA
Infrared BERA is a liquid staking token for Berachain
This is the main "Front-End" contract for the whole BERA staking system.
State Variables
withdrawalsEnabled
Withdrawals are not enabled by default, not supported by https://github.com/berachain/beacon-kit yet.
bool public withdrawalsEnabled;
_initialized
Whether the contract has been initialized
bool private _initialized;
feeDivisorShareholders
The fee divisor for protocol + operator + voter fees. 1/N, where N is the divisor. example 100 = 1/100 = 1%
uint16 public feeDivisorShareholders;
infrared
The Infrared.sol
smart contract.
address public infrared;
depositor
The InfraredBERADepositor.sol
smart contract.
address public depositor;
withdrawor
The InfraredBERAWithdrawor.sol
smart contract.
address public withdrawor;
receivor
The InfraredBERAFeeReceivor.sol
smart contract.
address public receivor;
deposits
The total amount of BERA
deposited by the system.
uint256 public deposits;
_stakes
Mapping of validator pubkeyHash to their stake in BERA
.
mapping(bytes32 pubkeyHash => uint256 stake) internal _stakes;
_staked
Mapping of validator pubkeyHash to whether they have recieved stake from this contract.
mapping(bytes32 pubkeyHash => bool isStaked) internal _staked;
_exited
Mapping of validator pubkeyHash to whether they have exited from this contract. (voluntarily or force).
mapping(bytes32 pubkeyHash => bool hasExited) internal _exited;
_signatures
Mapping of validator pubkeyHash to their deposit signature. All validators MUST have their signiture amounts set to INITIAL_DEPOSIT
to be valid.
mapping(bytes32 pubkeyHash => bytes) internal _signatures;
__gap
Reserve storage slots for future upgrades for safety
uint256[40] private __gap;
Functions
initialize
Initiializer for InfraredBERA
.
function initialize(
address _gov,
address _keeper,
address _infrared,
address _depositor,
address _withdrawor,
address _receivor
) external payable initializer;
Parameters
Name | Type | Description |
---|---|---|
_gov | address | The address of the governance contract. |
_keeper | address | The address of the keeper contract. |
_infrared | address | The address of the Infrared.sol contract. |
_depositor | address | The address of the InfraredBERADepositor.sol contract. |
_withdrawor | address | The address of the InfraredBERAWithdrawor.sol contract. |
_receivor | address | The address of the InfraredBERAFeeReceivor.sol contract. |
governor
Checks if account has the governance role.
function governor(address account) public view returns (bool);
Parameters
Name | Type | Description |
---|---|---|
account | address | The address to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | True if the account has the governance role. |
keeper
Checks if account has the keeper role.
function keeper(address account) public view returns (bool);
Parameters
Name | Type | Description |
---|---|---|
account | address | The address to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | True if the account has the keeper role. |
validator
Checks if a given pubkey is a validator in the Infrared
contract.
function validator(bytes calldata pubkey) external view returns (bool);
Parameters
Name | Type | Description |
---|---|---|
pubkey | bytes | The pubkey to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | True if the pubkey is a validator. |
setWithdrawalsEnabled
Allows withdrawals to be enabled or disabled.
Only callable by the governor.
function setWithdrawalsEnabled(bool flag) external onlyGovernor;
Parameters
Name | Type | Description |
---|---|---|
flag | bool | The flag to set for withdrawals. |
setFeeDivisorShareholders
Sets the fee shareholders taken on yield from EL coinbase priority fees + MEV
function setFeeDivisorShareholders(uint16 to) external onlyGovernor;
Parameters
Name | Type | Description |
---|---|---|
to | uint16 | The new fee shareholders represented as an integer denominator (1/x)% |
setDepositSignature
Sets the deposit signature for a given pubkey. Ensure that the pubkey has signed the correct deposit amount of INITIAL_DEPOSIT
.
Only callable by the governor.
function setDepositSignature(bytes calldata pubkey, bytes calldata signature)
external
onlyGovernor;
Parameters
Name | Type | Description |
---|---|---|
pubkey | bytes | The pubkey to set the deposit signature for. |
signature | bytes | The signature to set for the pubkey. |
mint
Mints ibera
to the receiver
in exchange for bera
.
takes in msg.value as amount to mint ibera
with.
function mint(address receiver) public payable returns (uint256 shares);
Parameters
Name | Type | Description |
---|---|---|
receiver | address | The address to mint ibera to. |
Returns
Name | Type | Description |
---|---|---|
shares | uint256 | The amount of ibera minted. |
burn
Burns ibera
from the msg.sender
and sets a receiver to get the BERA
in exchange for iBERA
.
function burn(address receiver, uint256 shares)
external
payable
returns (uint256 nonce, uint256 amount);
Parameters
Name | Type | Description |
---|---|---|
receiver | address | The address to send the BERA to. |
shares | uint256 | The amount of ibera to burn. |
Returns
Name | Type | Description |
---|---|---|
nonce | uint256 | The nonce of the withdrawal. Queue based system for withdrawals. |
amount | uint256 | The amount of BERA withdrawn for the exchange of iBERA . |
_deposit
Internal function to update top level accounting and minimum deposit.
function _deposit(uint256 amount) internal;
Parameters
Name | Type | Description |
---|---|---|
amount | uint256 | The amount of BERA to deposit. |
_withdraw
Internal function to update top level accounting.
function _withdraw(address receiver, uint256 amount, uint256 fee)
private
returns (uint256 nonce);
Parameters
Name | Type | Description |
---|---|---|
receiver | address | The address to withdraw BERA to. |
amount | uint256 | The amount of BERA to withdraw. |
fee | uint256 | The fee to pay for the withdrawal. |
previewMint
Previews the amount of InfraredBERA shares that would be minted for a given BERA amount
function previewMint(uint256 beraAmount) public view returns (uint256 shares);
Parameters
Name | Type | Description |
---|---|---|
beraAmount | uint256 | The amount of BERA to simulate depositing |
Returns
Name | Type | Description |
---|---|---|
shares | uint256 | The amount of InfraredBERA shares that would be minted, returns 0 if the operation would fail |
previewBurn
Previews the amount of BERA that would be received for burning InfraredBERA shares
function previewBurn(uint256 shareAmount)
public
view
returns (uint256 beraAmount, uint256 fee);
Parameters
Name | Type | Description |
---|---|---|
shareAmount | uint256 | The amount of InfraredBERA shares to simulate burning |
Returns
Name | Type | Description |
---|---|---|
beraAmount | uint256 | The amount of BERA that would be received, returns 0 if the operation would fail |
fee | uint256 | The fee that would be charged for the burn operation |
stakes
Returns the amount of BERA staked in validator with given pubkey
function stakes(bytes calldata pubkey) external view returns (uint256);
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The amount of BERA staked in validator |
staked
Returns whether initial deposit has been staked to validator with given pubkey
function staked(bytes calldata pubkey) external view returns (bool);
Returns
Name | Type | Description |
---|---|---|
<none> | bool | Whethere initial deposit has been staked to validator |
pending
Pending deposits yet to be forwarded to CL
function pending() public view returns (uint256);
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The amount of BERA yet to be deposited to CL |
confirmed
Confirmed deposits sent to CL, total - future deposits
function confirmed() external view returns (uint256);
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The amount of BERA confirmed to be deposited to CL |
compound
Internal function to update top level accounting and compound rewards
function compound() public;
sweep
Compounds accumulated EL yield in fee receivor into deposits
Called internally at bof whenever InfraredBERA minted or burned
Only sweeps if amount transferred from fee receivor would exceed min deposit thresholds
function sweep() external payable;
collect
Collects yield from fee receivor and mints ibera shares to Infrared
Called in RewardsLib::harvestOperatorRewards()
in Infrared.sol
Only Infrared can call this function
function collect() external returns (uint256 sharesMinted);
Returns
Name | Type | Description |
---|---|---|
sharesMinted | uint256 | The amount of ibera shares |
register
Updates the accounted for stake of a validator pubkey.
This does NOT mean its the balance on the CL, edge case is if another user has staked to the pubkey.
function register(bytes calldata pubkey, int256 delta) external;
Parameters
Name | Type | Description |
---|---|---|
pubkey | bytes | The pubkey of the validator. |
delta | int256 | The change in stake. |
hasExited
Returns whether a validator pubkey has exited.
function hasExited(bytes calldata pubkey) external view returns (bool);
signatures
Returns the deposit signature to use for given pubkey
function signatures(bytes calldata pubkey)
external
view
returns (bytes memory);
Returns
Name | Type | Description |
---|---|---|
<none> | bytes | The deposit signature for pubkey |