GatewayStaking.sol
The GatewayStaking
contract facilitates staking of FUNC tokens for gateways, enabling operations like staking, unstaking, usage tracking, and balance management. It integrates with other ecosystem components for secure and efficient functionality.
Key Features
FUNC Token Staking:
Users can stake FUNC tokens for specific gateways.
Supports secure and efficient staking with role-based access controls.
Gateway Lifecycle Management:
Includes operations to wind down gateways, restart them, and track their states.
Overdraw Handling:
Tracks overdrawn stakes for gateways and adjusts balances accordingly.
Burn Functionality:
Implements optional burning of FUNC tokens during gateway operations.
Integration with Ecosystem:
Interacts with Router, GatewayRegistry, and GatewayCheckpoint contracts.
Contract Roles
Access Control
The contract uses AccessControlledPausable
for role-based access and pause functionality.
DEFAULT_ADMIN_ROLE
:Grants access to administrative functions like toggling burn functionality.
onlyCheckpoint
Modifier:Restricts certain functions to the GatewayCheckpoint contract.
Data Structures
Gateway State
gatewayShutdownEpochs
: Tracks shutdown epochs for gateways.gatewayMostRecentStakeEpochs
: Tracks the most recent staked epoch for gateways.gatewayStakeOverdrawn
: Tracks overdrawn FUNC amounts for gateways.gatewayStakes
: Tracks staked FUNC balances for gateways.
Key Functions
Constructor
constructor(IERC20 _token, IRouter _router)
constructor(IERC20 _token, IRouter _router)
Initializes the GatewayStaking
contract.
Parameters:
_token
: Address of the FUNC ERC20 token contract._router
: Address of the Router contract.
Staking Operations
stakeForGateway(bytes calldata _id, uint256 amount)
stakeForGateway(bytes calldata _id, uint256 amount)
Stakes FUNC tokens for a gateway.
Parameters:
_id
: ID of the gateway.amount
: Amount of FUNC tokens to stake.
Requirements:
Gateway must be registered and whitelisted.
Caller must be the gateway owner or the registry.
Emits:
GatewayStaked
.
unstakeForGateway(bytes calldata _id)
unstakeForGateway(bytes calldata _id)
Unstakes FUNC tokens for a gateway.
Parameters:
_id
: ID of the gateway.
Requirements:
Gateway must meet conditions like being shut down and not overdrawn.
Minimum epochs locked must be satisfied.
Emits:
GatewayUnstaked
.
windDownGateways(bytes[] calldata _gatewayIdsToWindDown)
windDownGateways(bytes[] calldata _gatewayIdsToWindDown)
Winds down specified gateways.
Parameters:
_gatewayIdsToWindDown
: List of gateway IDs to wind down.
Emits:
GatewayWoundDown
.
Burn and Usage Tracking
checkpointUpdateGatewayUsage(bytes[] calldata _gatewayIds, uint256[] calldata _computeUnits)
checkpointUpdateGatewayUsage(bytes[] calldata _gatewayIds, uint256[] calldata _computeUnits)
Updates gateway usage and burns FUNC tokens if enabled.
Parameters:
_gatewayIds
: List of gateway IDs._computeUnits
: Compute units consumed by the gateways.
toggleBurn()
toggleBurn()
Toggles the burn functionality.
Emits:
BurnToggled
.
Gateway State Management
restartGateway(bytes calldata _id)
restartGateway(bytes calldata _id)
Restarts a gateway by resetting its shutdown state.
Parameters:
_id
: ID of the gateway.
Emits:
GatewayRestarted
.
Query Functions
getAvailableComputeUnitsForGateways(bytes[] calldata _ids)
getAvailableComputeUnitsForGateways(bytes[] calldata _ids)
Returns available compute units for specified gateways.
Parameters:
_ids
: List of gateway IDs.
Returns:
Array of available compute units for each gateway.
getGatewayShutdownEpoch(bytes calldata _id)
getGatewayShutdownEpoch(bytes calldata _id)
Returns the shutdown epoch for a gateway.
Parameters:
_id
: ID of the gateway.
Returns:
Shutdown epoch or
0
if not shut down.
getGatewayMostRecentStakedEpoch(bytes calldata _id)
getGatewayMostRecentStakedEpoch(bytes calldata _id)
Returns the most recent staked epoch for a gateway.
Parameters:
_id
: ID of the gateway.
Returns:
Most recent staked epoch.
getGatewayStakeOverdrawnAmount(bytes calldata _id)
getGatewayStakeOverdrawnAmount(bytes calldata _id)
Returns the overdrawn FUNC amount for a gateway.
Parameters:
_id
: ID of the gateway.
Returns:
Overdrawn FUNC amount.
getGatewayStakedAmount(bytes calldata _id)
getGatewayStakedAmount(bytes calldata _id)
Returns the staked FUNC amount for a gateway.
Parameters:
_id
: ID of the gateway.
Returns:
Staked FUNC amount.
getGatewayTotalBalance()
getGatewayTotalBalance()
Returns the total FUNC balance staked across all gateways.
Returns:
Total staked FUNC balance.
Events
GatewayStaked(bytes id, uint256 epoch, uint256 amount)
Emitted when FUNC is staked for a gateway.GatewayUnstaked(bytes id, uint256 epoch, uint256 amount)
Emitted when FUNC is unstaked for a gateway.GatewayWoundDown(bytes id, uint256 epoch)
Emitted when a gateway is wound down.GatewayRestarted(bytes id, uint256 epoch)
Emitted when a gateway is restarted.GatewayBurn(bytes id, uint256 epoch, uint256 amount)
Emitted when FUNC is burned during a gateway operation.GatewayOverdrawn(bytes id, uint256 epoch, uint256 amount)
Emitted when a gateway becomes overdrawn.BurnToggled()
Emitted when burn functionality is toggled.
Last updated