Skip to content

Ccip-8548 deploy and update fee quoter changeset#1641

Open
AnieeG wants to merge 16 commits intodevelopfrom
CCIP-8548-deploy-fq
Open

Ccip-8548 deploy and update fee quoter changeset#1641
AnieeG wants to merge 16 commits intodevelopfrom
CCIP-8548-deploy-fq

Conversation

@AnieeG
Copy link
Contributor

@AnieeG AnieeG commented Feb 5, 2026

  • New Fee Quoter Update Changeset (deployment/deploy/feequoterupdater.go):
    • Introduces UpdateFeeQuoterChangeset that orchestrates the complete FeeQuoter deployment/update workflow.

    • Supports deploying new FeeQuoter contracts or updating existing ones

       - New `SequenceFeeQuoterUpdate` that deploys or fetches existing FeeQuoter contracts, it also -
                        - Applies destination chain configuration updates - if input provided
                        - Updates gas and token prices - if input provided
                        - Applies token transfer fee configuration updates - if input provided
                        - Manages authorized caller updates  - if input provided
      
    • Automatically updates OnRamp and OffRamp contracts to reference the new FeeQuoter address
      - Added support for updating OnRamp and OffRamp contracts with new FeeQuoter addresses
      - Handles source chain configuration updates for OffRamp

    • Handles configuration import from v1.5.0 and v1.6.0 versions ( refer to the ccv/chains/evm/deployment/v1_7_0/sequences/SequenceFeeQuoterInputCreation_Mapping.md)

Fee Quoter Update Workflow

  1. Configuration Import (optional): If PopulateConfig is enabled, imports configuration from previous FeeQuoter versions
  2. Input Creation: Creates FeeQuoterUpdateInput from existing contract metadata or imported configuration
  3. Deploy/Update: Deploys new FeeQuoter or updates existing one with:
    • Destination chain configurations
    • Price updates (gas and token prices)
    • Token transfer fee configurations
    • Authorized caller updates
  4. Ramp Updates: Updates OnRamp and OffRamp contracts to use the new FeeQuoter address

)

// CreateFeeQuoterUpdateInputFromV160 creates FeeQuoterUpdate input by importing configuration from FeeQuoter v1.6.0
CreateFeeQuoterUpdateInputFromV160 = cldf_ops.NewSequence(
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@RensR could you please review this sequence?

})

// CreateFeeQuoterUpdateInputFromV150 creates FeeQuoterUpdate input by importing configuration from PriceRegistry v1.5.0 and EVM2EVMOnRamp v1.5.0
CreateFeeQuoterUpdateInputFromV150 = cldf_ops.NewSequence(
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@RensR And this one as well for 1.5

Copy link
Collaborator

@RensR RensR left a comment

Choose a reason for hiding this comment

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

You determine to call 1.5 import or 1.6 import based on the currently active lane, right?

)

var (
EVMFamilySelector, _ = hex.DecodeString("2812d52c")
Copy link
Collaborator

Choose a reason for hiding this comment

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

Let's put this somewhere else

Copy link
Collaborator

Choose a reason for hiding this comment

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

familySelector, _ = hex.DecodeString(EVMFamilySelector)

// SequenceFeeQuoterUpdate is a sequence that deploys or fetches existing FeeQuoter contract
// and does the following if the corresponding input is provided -
// 1. applies destination chain config updates
// 2. price updates
Copy link
Collaborator

Choose a reason for hiding this comment

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

What is the purpose of doing manual price updates?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The existing connectChain changeset does manual price updates, wanted to keep this equivalent to all ops done in connectchain changeset for feequoter

MaxDataBytes: destChainConfig.MaxDataBytes,
MaxPerMsgGasLimit: destChainConfig.MaxPerMsgGasLimit,
DestGasOverhead: destChainConfig.DestGasOverhead,
DestGasPerPayloadByteBase: destChainConfig.DestGasPerPayloadByteBase,
Copy link
Collaborator

Choose a reason for hiding this comment

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

This should account for DA costs now, which makes it tricky to calculate. @matYang is our DA expert maybe he has some wisdom (aka constant multipliers)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Will keep it same as the existing value for now and come back to it when @matYang can get to this

DefaultTokenDestGasOverhead: destChainConfig.DefaultTokenDestGasOverhead,
DefaultTxGasLimit: destChainConfig.DefaultTxGasLimit,
NetworkFeeUSDCents: uint16(destChainConfig.NetworkFeeUSDCents),
LinkFeeMultiplierPercent: 90,
Copy link
Collaborator

Choose a reason for hiding this comment

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

Please move up to constant, no magic values should be hidden in these functions

fqops.Version,
"",
)
isNewDeployment := datastore_utils.IsAddressRefEmpty(feeQuoterRef)
Copy link
Collaborator

Choose a reason for hiding this comment

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

This means 1.7 is a new deployment, right? Can we make that more clear.

Can we also move this down to the other if isNewDeployment and merge them?

semver.MustParse("1.7.0"),
"Creates FeeQuoterUpdate input by importing configuration from PriceRegistry v1.5.0 and EVM2EVMOnRamp v1.5.0",
func(b cldf_ops.Bundle, chain evm.Chain, input deploy.FeeQuoterUpdateInput) (output FeeQuoterUpdate, err error) {
// get ro
Copy link
Collaborator

Choose a reason for hiding this comment

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

ro?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

:P co-pilot's doing

DestChainConfigArgs: destChainCfgs,
TokenTransferFeeConfigArgs: tokenTransferFeeConfigArgsForAll,
// TODO: what to do with price updaters for 1.5 if there is no 1.6 lanes here
PriceUpdaters: []common.Address{},
Copy link
Collaborator

Choose a reason for hiding this comment

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

Price updaters can just be all 1.5 commit stores and all 1.6 offramps on any lane, right? That always gives you everything you need

@AnieeG
Copy link
Contributor Author

AnieeG commented Feb 6, 2026

You determine to call 1.5 import or 1.6 import based on the currently active lane, right?

Yes that's a good call, updating it

MaxPerMsgGasLimit: onRampCfg.DynamicConfig.MaxPerMsgGasLimit,
DestGasOverhead: onRampCfg.DynamicConfig.DestGasOverhead,
DestGasPerPayloadByteBase: uint8(onRampCfg.DynamicConfig.DestGasPerPayloadByte),
ChainFamilySelector: [4]byte(EVMFamilySelector), // as this is evm, safe to assume chain family selector is same as chain selector
Copy link
Contributor

Choose a reason for hiding this comment

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

This is for a remote chain though, remote chain selector not guaranteed to be EVM

DefaultTokenDestGasOverhead: onRampCfg.DynamicConfig.DefaultTokenDestGasOverhead,
DefaultTxGasLimit: uint32(onRampCfg.StaticConfig.DefaultTxGasLimit),
NetworkFeeUSDCents: networkFeeUSDCents,
LinkFeeMultiplierPercent: 90,
Copy link
Contributor

Choose a reason for hiding this comment

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

+1 move to constant

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Metric CCIP-8548-deploy-fq develop
Coverage 69.8% 69.5%

@AnieeG AnieeG marked this pull request as ready for review February 9, 2026 03:10
@AnieeG AnieeG requested review from a team as code owners February 9, 2026 03:10
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.

4 participants