Skip to content

[codex] Add ERC20 lock boost provider#822

Draft
skhomuti wants to merge 6 commits into
phase-2from
feat/erc20-lock-boost-provider
Draft

[codex] Add ERC20 lock boost provider#822
skhomuti wants to merge 6 commits into
phase-2from
feat/erc20-lock-boost-provider

Conversation

@skhomuti

@skhomuti skhomuti commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add an ERC20 lock boost provider with per-operator vaults, step-based group boost caching, and Lido Aragon voting proxy support.
  • Extend MetaRegistry with weight boost provider registration and an explicit group-aware flag for composition-change hooks.
  • Add interfaces and unit coverage for ERC20 locks, vault voting proxy behavior, MetaRegistry provider add/remove flows, and group-aware refresh routing.

Comment thread src/interfaces/IERC20LockBoostProvider.sol Outdated
Comment thread src/interfaces/IERC20LockBoostProvider.sol Outdated
Comment thread src/ERC20LockBoostProvider.sol
Comment thread src/ERC20LockBoostProvider.sol Outdated
}

/// @inheritdoc IERC20LockBoostProvider
function setLockBoostSteps(LockBoostStep[] calldata steps) external onlyRole(DEFAULT_ADMIN_ROLE) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we recalculate boosts after this change?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can be expensive, i'd suggest async refresh here. addressed in the natspec

Comment thread src/ERC20LockBoostProvider.sol Outdated
Comment thread src/ERC20LockBoostProvider.sol
Comment thread src/ERC20LockVault.sol
/// @inheritdoc IERC20LockVault
function transferTokens(address receiver, uint256 amount) external {
_checkRegistry();
if (receiver == address(0)) revert ZeroAddress();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check if there are additional limitations on where LDO can be transferred

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it'll revert on the ldo side anyway

Comment thread src/ERC20LockVault.sol
Comment thread src/ERC20LockVault.sol Outdated
@skhomuti skhomuti force-pushed the feat/erc20-lock-boost-provider branch 2 times, most recently from 712c919 to 0407b20 Compare June 19, 2026 08:28
@skhomuti skhomuti changed the base branch from develop to phase-2 June 22, 2026 10:09
@skhomuti skhomuti force-pushed the feat/erc20-lock-boost-provider branch from 0407b20 to a8f0f49 Compare June 22, 2026 14:05

/// @inheritdoc IWeightBoostProvider
function getWeightBoostBP(uint256 nodeOperatorId) external view returns (uint256 boostBP) {
boostBP = _getBoostBP(_storage().locks[nodeOperatorId].amount);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MAX_BP + amount I guess

@skhomuti skhomuti force-pushed the feat/erc20-lock-boost-provider branch from f8c45db to bd8b09d Compare June 25, 2026 06:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants