LockHolderV1
Overview
LockHolderV1 is an upgradeable contract integrated with DelegationManager, EscrowManager, EscrowVoteManager, IncentiveRewardsAggregatorV1. For each delegator-delegate pair, a different LockHolder contract is deployed, with delegated locks in the balance. Through the LockHolder contract the proxied call of functions of EscrowManager, EscrowVoteManager counters, as well as collection and distribution of incentive rewards takes place.
Key Roles and Features:
Access Control: Restricts setAssuranceLockParameters and setMinLockVeEywa calls to the owner of contract(
owner()
).Upgradeable via UUPS: Uses UUPSUpgradeable and OwnableUpgradeable patterns, restricting contract upgrades to the owner.
Inherited Contracts and Interfaces
UUPSUpgradeable (OpenZeppelin): Provides upgrade functionality under the UUPS proxy pattern, restricted to the contract owner.
OwnableUpgradeable (OpenZeppelin): Manages ownership, allowing only the owner to modify critical parameters and authorize upgrades.
ILockHolderV1: Defines core methods (e.g.,
boost
,deboost
,extend
) and events for this contract.
Additional External References:
SafeERC20, IERC20 (OpenZeppelin): Handles secure ERC20 operations for distributing and approving token transfers.
IIncentiveRewardsAggregatorV1: Aggregates lists of reward tokens.
IEscrowVoteManagerV1: Receives gauge emission amounts and coordinates gauge reward distribution.
IEscrowManager: Holds locked token data and checks voting power and freeze logic.
Constants
PRECISION: The divisior for percentage math.
State Variables
s_delegationManager (address)
address of the delegation manager contract.s_escrowVoteManager (IEscrowVoteManagerV1)
IEscrowVoteManagerV1 interface for the escrow vote manager contract.s_incentiveRewardsAggregator (IIncentiveRewardsAggregatorV1)
IIncentiveRewardsAggregatorV1 Interface for the incentive rewards aggregator contract.
Constructor
Description: Disables contract initializers to prevent re-initialization in a UUPS proxy context.
External Functions (Defined by ILockHolderV1)
initialize(...)
initialize(...)
Description: Configures ownership, references, and initial state:
References the EYWA NFT, escrow manager, escrow vote manager and delegation manager.
Parameters:
owner_
: The address of the contract owner.delegationManager_
: The address of the delegation manager contract.escrowManager_
: The address of the escrow manager contract.escrowVoteManager_
: The address of the escrow vote manager contract.incentiveRewardsAggregator_
: The address of the incentive rewards aggregator contract.
claimIncentives(address delegator_, address delegatee_, uint256 percentIncentive_)
claimIncentives(address delegator_, address delegatee_, uint256 percentIncentive_)
Description:
Function for claim and distributing incentives. The function queries arrays with the addresses of the reward tokens and the size of the reward for each of them on the IncentiveRewardsAggregatorV1 contract Then for each IncentiveRewardsDistributor it claim incentives, calculates on the basis of percentIncentive_
what parts of it should be received by delegator_
and delegatee_
and distributes incentives between them.
Parameters:
delegator_
: The delegator's address.delegatee_
: The delegate's address.percentIncentive_
: The percentage of the incentive reward received by the delegate.
Checks:
The function must be called by the DelegationManager contract. Otherwise,
UnauthorizedCaller()
is thrown.
Errors
UnauthorizedCaller()
Thrown when the caller is not authorized to perform the action.
Summary
LockHolderV1 contract is an important and necessary part of the lock delegation and self-delegation architecture. It allows for diverse and flexible interaction and integration with all contracts in the system.
Last updated