Skip to content

feat: add mantle testnet gas fee#8386

Open
jeremy-consensys wants to merge 4 commits intomainfrom
chore/add-mantle-testnet-gas-fee
Open

feat: add mantle testnet gas fee#8386
jeremy-consensys wants to merge 4 commits intomainfrom
chore/add-mantle-testnet-gas-fee

Conversation

@jeremy-consensys
Copy link
Copy Markdown
Contributor

@jeremy-consensys jeremy-consensys commented Apr 7, 2026

Explanation

Add Mantle Sepolia testnet (chain ID 0x138b / 5003) support to MantleLayer1GasFeeFlow for accurate MNT-denominated L1 gas fee estimates on the testnet.

The Sepolia oracle lives at the same OP Stack predeploy address (0x420...000F) and exposes the same ABI (getL1Fee, tokenRatio, getOperatorFee). The testnet chain ID is added to the MANTLE_CHAIN_IDS array so the flow matches both mainnet and Sepolia.

Verified on-chain:

  • getL1Fee(bytes) works on Sepolia
  • tokenRatio() returns ~3328 on Sepolia
  • getOperatorFee(uint256) works on Sepolia (Arsia upgrade is deployed on testnet)

Changes

File Change
constants.ts Add MANTLE_SEPOLIA: '0x138b'
MantleLayer1GasFeeFlow.ts Add CHAIN_IDS.MANTLE_SEPOLIA to MANTLE_CHAIN_IDS array
MantleLayer1GasFeeFlow.test.ts 3 new tests: chain matching, oracle address resolution, full fee calculation for Sepolia
CHANGELOG.md Unreleased entry

References

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Medium Risk
Touches layer-1 fee estimation plumbing by adding a new transformation hook in OracleLayer1GasFeeFlow and wiring a new Mantle-specific flow into TransactionController, which could affect fee calculations if assumptions about oracle values or chain matching are wrong.

Overview
Adds Mantle (mainnet + Sepolia) support for OP-Stack-style L1 fee estimation by introducing MantleLayer1GasFeeFlow, which converts oracle getL1Fee results into MNT using the on-chain tokenRatio before combining with any operator fee.

Updates the core OracleLayer1GasFeeFlow to call an overridable transformOracleFee step prior to adding operator fees, registers the Mantle flow in TransactionController’s layer-1 fee flows, and extends CHAIN_IDS with MANTLE/MANTLE_SEPOLIA plus new unit tests and a changelog entry.

Reviewed by Cursor Bugbot for commit 197e1b7. Bugbot is set up for automated code reviews on this repo. Configure here.

@jeremy-consensys jeremy-consensys force-pushed the chore/add-mantle-testnet-gas-fee branch from ae1371c to ccea4fa Compare April 7, 2026 09:13
@jeremy-consensys jeremy-consensys marked this pull request as ready for review April 8, 2026 19:22
@jeremy-consensys jeremy-consensys requested review from a team as code owners April 8, 2026 19:22
@jeremy-consensys jeremy-consensys force-pushed the chore/add-mantle-testnet-gas-fee branch from de0943f to 69daaa0 Compare April 8, 2026 19:22
@jeremy-consensys jeremy-consensys changed the title Chore/add mantle testnet gas fee add mantle testnet gas fee Apr 8, 2026
Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 69daaa0. Configure here.

@jeremy-consensys jeremy-consensys changed the title add mantle testnet gas fee feat: add mantle testnet gas fee Apr 9, 2026
@jeremy-consensys jeremy-consensys force-pushed the chore/add-mantle-testnet-gas-fee branch from 69daaa0 to e977458 Compare April 9, 2026 08:43
Copy link
Copy Markdown
Member

@OGPoyraz OGPoyraz left a comment

Choose a reason for hiding this comment

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

No need for separate PRs for Mantle and test net, we can close #8376 and proceed with this

Mantle uses MNT as its native gas token, but the OP Stack oracle's
getL1Fee returns values denominated in ETH. Add MantleLayer1GasFeeFlow
that multiplies the L1 fee by tokenRatio (ETH/MNT exchange rate from
the oracle contract) before adding the operator fee.

- New MantleLayer1GasFeeFlow extending OracleLayer1GasFeeFlow
- Registered first in #getLayer1GasFeeFlows() to match before Optimism
- Added MANTLE chain ID (0x1388) to constants
- 8 unit tests covering conversion, operator fee, error handling
…ss logic

Add protected transformOracleFee hook to OracleLayer1GasFeeFlow so
subclasses can transform the oracle fee without reimplementing the
entire getLayer1Fee method. Simplify MantleLayer1GasFeeFlow to only
override transformOracleFee (tokenRatio multiplication) and
matchesTransaction.
…stnet

Add Mantle Sepolia (chain ID 0x138b) to MantleLayer1GasFeeFlow so the
tokenRatio conversion applies to testnet transactions as well.
@jeremy-consensys jeremy-consensys force-pushed the chore/add-mantle-testnet-gas-fee branch from a3e0431 to 197e1b7 Compare April 9, 2026 20:11
@jeremy-consensys
Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 9, 2026

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.0.0-preview-197e1b7
@metamask-previews/accounts-controller@37.2.0-preview-197e1b7
@metamask-previews/address-book-controller@7.1.1-preview-197e1b7
@metamask-previews/ai-controllers@0.6.3-preview-197e1b7
@metamask-previews/analytics-controller@1.0.1-preview-197e1b7
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-197e1b7
@metamask-previews/announcement-controller@8.1.0-preview-197e1b7
@metamask-previews/app-metadata-controller@2.0.1-preview-197e1b7
@metamask-previews/approval-controller@9.0.1-preview-197e1b7
@metamask-previews/assets-controller@5.0.0-preview-197e1b7
@metamask-previews/assets-controllers@103.1.1-preview-197e1b7
@metamask-previews/base-controller@9.0.1-preview-197e1b7
@metamask-previews/base-data-service@0.1.1-preview-197e1b7
@metamask-previews/bridge-controller@70.0.1-preview-197e1b7
@metamask-previews/bridge-status-controller@70.0.5-preview-197e1b7
@metamask-previews/build-utils@3.0.4-preview-197e1b7
@metamask-previews/chain-agnostic-permission@1.5.0-preview-197e1b7
@metamask-previews/claims-controller@0.5.0-preview-197e1b7
@metamask-previews/client-controller@1.0.1-preview-197e1b7
@metamask-previews/compliance-controller@2.0.0-preview-197e1b7
@metamask-previews/composable-controller@12.0.1-preview-197e1b7
@metamask-previews/config-registry-controller@0.2.0-preview-197e1b7
@metamask-previews/connectivity-controller@0.2.0-preview-197e1b7
@metamask-previews/controller-utils@11.20.0-preview-197e1b7
@metamask-previews/core-backend@6.2.1-preview-197e1b7
@metamask-previews/delegation-controller@2.1.0-preview-197e1b7
@metamask-previews/earn-controller@11.2.1-preview-197e1b7
@metamask-previews/eip-5792-middleware@3.0.3-preview-197e1b7
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-197e1b7
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-197e1b7
@metamask-previews/ens-controller@19.1.1-preview-197e1b7
@metamask-previews/eth-block-tracker@15.0.1-preview-197e1b7
@metamask-previews/eth-json-rpc-middleware@23.1.1-preview-197e1b7
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-197e1b7
@metamask-previews/foundryup@1.0.1-preview-197e1b7
@metamask-previews/gas-fee-controller@26.1.1-preview-197e1b7
@metamask-previews/gator-permissions-controller@3.0.1-preview-197e1b7
@metamask-previews/geolocation-controller@0.1.2-preview-197e1b7
@metamask-previews/json-rpc-engine@10.2.4-preview-197e1b7
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-197e1b7
@metamask-previews/keyring-controller@25.2.0-preview-197e1b7
@metamask-previews/logging-controller@8.0.1-preview-197e1b7
@metamask-previews/message-manager@14.1.1-preview-197e1b7
@metamask-previews/messenger@1.1.1-preview-197e1b7
@metamask-previews/messenger-cli@0.1.0-preview-197e1b7
@metamask-previews/money-account-controller@0.1.0-preview-197e1b7
@metamask-previews/multichain-account-service@8.0.1-preview-197e1b7
@metamask-previews/multichain-api-middleware@2.0.0-preview-197e1b7
@metamask-previews/multichain-network-controller@3.0.6-preview-197e1b7
@metamask-previews/multichain-transactions-controller@7.0.4-preview-197e1b7
@metamask-previews/name-controller@9.1.1-preview-197e1b7
@metamask-previews/network-controller@30.0.1-preview-197e1b7
@metamask-previews/network-enablement-controller@5.0.2-preview-197e1b7
@metamask-previews/notification-services-controller@23.0.1-preview-197e1b7
@metamask-previews/permission-controller@12.3.0-preview-197e1b7
@metamask-previews/permission-log-controller@5.1.0-preview-197e1b7
@metamask-previews/perps-controller@2.0.0-preview-197e1b7
@metamask-previews/phishing-controller@17.1.1-preview-197e1b7
@metamask-previews/polling-controller@16.0.4-preview-197e1b7
@metamask-previews/preferences-controller@23.1.0-preview-197e1b7
@metamask-previews/profile-metrics-controller@3.1.3-preview-197e1b7
@metamask-previews/profile-sync-controller@28.0.2-preview-197e1b7
@metamask-previews/ramps-controller@13.1.0-preview-197e1b7
@metamask-previews/rate-limit-controller@7.0.1-preview-197e1b7
@metamask-previews/react-data-query@0.2.0-preview-197e1b7
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-197e1b7
@metamask-previews/sample-controllers@4.0.4-preview-197e1b7
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-197e1b7
@metamask-previews/selected-network-controller@26.1.0-preview-197e1b7
@metamask-previews/shield-controller@5.1.1-preview-197e1b7
@metamask-previews/signature-controller@39.1.2-preview-197e1b7
@metamask-previews/social-controllers@0.1.0-preview-197e1b7
@metamask-previews/storage-service@1.0.1-preview-197e1b7
@metamask-previews/subscription-controller@6.1.2-preview-197e1b7
@metamask-previews/transaction-controller@64.0.0-preview-197e1b7
@metamask-previews/transaction-pay-controller@19.1.0-preview-197e1b7
@metamask-previews/user-operation-controller@41.2.0-preview-197e1b7

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.

2 participants