Skip to content

Fix EIP-3860 initcode size exceeded in FeeQuoter 2.0 deployment#1872

Open
finleydecker wants to merge 3 commits intomainfrom
fix-fq2.0-init-size
Open

Fix EIP-3860 initcode size exceeded in FeeQuoter 2.0 deployment#1872
finleydecker wants to merge 3 commits intomainfrom
fix-fq2.0-init-size

Conversation

@finleydecker
Copy link

@finleydecker finleydecker commented Mar 19, 2026

Problem
upgrade_to_feequoter_2_0 failed on Ethereum Sepolia with code size 79440 limit 49152. ABI-encoded constructor args (~51KB) alone exceeded EIP-3860's 49,152 byte initcode limit.

Failed durable pipeline run

Fix
For new FQ 2.0.0 deployments, move PriceUpdaters, DestChainConfigArgs, and TokenTransferFeeConfigArgs out of the constructor and into post-deploy setter calls.

SequenceFeeQuoterUpdate already invokes ApplyAuthorizedCallerUpdates, ApplyDestChainConfigUpdates, and ApplyTokenTransferFeeConfigUpdates after deploy. This change routes the data through those existing paths instead.

@finleydecker finleydecker marked this pull request as ready for review March 19, 2026 08:14
@finleydecker finleydecker requested a review from a team as a code owner March 19, 2026 08:14
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR addresses EIP-3860 initcode size limits preventing FeeQuoter v2.0.0 deployments (e.g., Sepolia) by ensuring large configuration blobs are no longer ABI-encoded into the constructor initcode, and are instead applied via existing post-deploy setter operations in the update sequence.

Changes:

  • Update FeeQuoter v2.0.0 input creation to populate constructor args with only StaticConfig, routing PriceUpdaters/DestChainConfigs/TokenTransferFee configs through post-deploy update fields.
  • Fix mergeDestChainConfigs to correctly merge when the “base” slice is empty.
  • Update the sequence input creation test expectations to reflect the new constructor-vs-post-deploy split.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
ccv/chains/evm/deployment/v2_0_0/sequences/sequence_fee_quoter_input_creation_test.go Updates expected FeeQuoterUpdate outputs to expect only StaticConfig in constructor args and the rest in post-deploy update fields.
ccv/chains/evm/deployment/v2_0_0/sequences/fee_quoter.go Moves large config payloads out of constructor args into update fields for new deployments and corrects dest-chain config merging when the base is empty.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

kylesmartin
kylesmartin previously approved these changes Mar 19, 2026
@github-actions
Copy link

Metric fix-fq2.0-init-size main
Coverage 70.1% 69.8%

@finleydecker finleydecker requested review from a team and kylesmartin March 19, 2026 20:33
@finleydecker finleydecker enabled auto-merge March 19, 2026 20:43
Comment on lines +275 to +281
output.AuthorizedCallerUpdates = fqops.AuthorizedCallerArgs{
AddedCallers: fqOutput.PriceUpdaters,
}
output.TokenTransferFeeConfigUpdates = fqops.ApplyTokenTransferFeeConfigUpdatesArgs{
TokenTransferFeeConfigArgs: tokenTransferFeeConfigArgs,
}
output.DestChainConfigs = allDestChainConfigs
Copy link
Contributor

Choose a reason for hiding this comment

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

why is this needed? it's already handled in else part

Copy link
Contributor

@AnieeG AnieeG left a comment

Choose a reason for hiding this comment

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

We don't need this change if you mention input.RemoteChainSelectors for selective remote chains, this will work. otherwise the destchain config related call can revert due to huge data as well

@finleydecker finleydecker disabled auto-merge March 19, 2026 21:31
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.

5 participants