Skip to content

feat: bond curve multiplier#810

Merged
vgorkavenko merged 17 commits into
phase-2from
feat/additional-bond-multiplier
Jun 18, 2026
Merged

feat: bond curve multiplier#810
vgorkavenko merged 17 commits into
phase-2from
feat/additional-bond-multiplier

Conversation

@vgorkavenko

@vgorkavenko vgorkavenko commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Description

  • New AdditionalBondRegistry: operators call selectTier(tierId) to apply a curve multiplier (scales bond requirement) + weight multiplier (scales MetaRegistry effective weight); stored as increments above MAX_BP.
  • Curve scaled on-the-fly in BondCurvesLib (effective curve = stored trends × multiplier).
  • Upgrade: applies both multipliers, requires bond ≥ new requirement.
  • Downgrade: weight drops immediately, curve multiplier retained until releaseCurveMultiplier (after CURVE_MULTIPLIER_COOLDOWN); decided vs current effective multiplier → no intermediate-tier escape.

Checklist

  • Appropriate PR labels applied
  • Test coverage maintained (just coverage)
    • Tests are added/updated
  • Documentation maintained
    • No need to update

Comment thread src/interfaces/IBondCurve.sol
Comment thread src/interfaces/IMetaRegistry.sol Outdated
Comment thread src/interfaces/ITiersRegistry.sol Outdated
Comment thread src/lib/BondCurvesLib.sol Outdated
Comment thread src/lib/BondCurvesLib.sol
Comment thread src/lib/Constants.sol
@vgorkavenko vgorkavenko marked this pull request as ready for review June 9, 2026 10:43
@vgorkavenko vgorkavenko requested a review from a team as a code owner June 9, 2026 10:43
@vgorkavenko vgorkavenko requested review from dgusakov and madlabman June 9, 2026 10:43
Comment thread src/abstract/BondCurve.sol Outdated
Comment thread src/interfaces/IBondCurve.sol Outdated
Comment thread src/interfaces/IBondCurve.sol Outdated
Comment thread src/lib/BondCurvesLib.sol Outdated
Comment thread src/lib/BondCurvesLib.sol
Comment thread src/AdditionalBondRegistry.sol Outdated
}

/// @inheritdoc IAdditionalBondRegistry
function getOperatorTierState(uint256 nodeOperatorId) external view returns (OperatorTierState memory state) {

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.

Here we likely need to show both current and pending tier or somehow reflect the fact that the tier change is in progress. Not sure. But let's think about it

@vgorkavenko vgorkavenko Jun 16, 2026

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.

Nice point 🤔 I think non-zero curveMultiplierCooldownUntil from output can be used as signal of pending state

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.

It can be a signal. But how can one get the currently active tier?

}

/// @inheritdoc IAdditionalBondRegistry
function getTierInfo(uint256 tierId) public view returns (TierInfo memory) {

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.

In the func above we show MAX_BP + inc, but here only inc. Can we think about consistency?

Comment thread src/AdditionalBondRegistry.sol
Comment thread src/MetaRegistry.sol
@vgorkavenko vgorkavenko merged commit 70a720e into phase-2 Jun 18, 2026
6 checks passed
@vgorkavenko vgorkavenko deleted the feat/additional-bond-multiplier branch June 18, 2026 15:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants