Learn how utilize a Custom Gas Token for OP Stack chains.
Custom Gas Token (CGT) enables OP Stack chains to use any asset as their native fee currency instead of ETH.
This opens up new possibilities for chain operators to align their economic model with their specific use case, whether that’s using a stablecoin for predictable fees, a governance token for ecosystem alignment, or creating an entirely new native asset.This iteration of CGT is a redesign that prioritizes flexibility, minimal core protocol changes, and future-proof standardization by decoupling native asset management from core bridging infrastructure.
On L1: Placed in SystemConfig, instructs OptimismPortal, L1CrossDomainMessenger, and L1StandardBridge to reject transactions containing ETH value (msg.value)
On L2: Located in L1Block, prevents ETH-related operations in L2ToL1MessagePasser, L2CrossDomainMessenger, L2StandardBridge, and FeeVaults
This enables native asset mints and burns to be decoupled from deposits and moved to the application layer.
Custom Gas Token v2 was introduced in Upgrade 18 and is available in op-contracts/v6.0.0.
Aspect
Legacy CGT
CGT v2
Token basis
Anchored to L1 ERC-20
Independent native asset at genesis
Flexibility
Restricted to specific configurations
Supports any release mechanism
Bridging
Built into core contracts
Application-layer responsibility
Supply control
System transaction minting
Minter authorization model
Adaptability
Limited post-deployment changes
Upgradeable and flexible
Migration from legacy CGT: There is currently no migration path from legacy CGT to CGT v2. A migration path is planned to be put together. Chains using the previous CGT design will need to coordinate a hard fork to adopt the new architecture.
Decoupled from core components: Since native asset management is decoupled from core components, obtaining native assets might vary chain-by-chain. That means that bridging, conversions, and features utilized would be different. It’s suggested to create some library or templates that cover basic uses cases (e.g., L2-native, bridging from L1) to standardize most implementations.
Chain Governors are encouraged to audit their implementations.
Developers would need to look at the chain’s docs to understand how to obtain native assets.
Ideally CGT Chain Operators can work together to formalize a common set of CGT patterns that don’t come out of the box.
No unified API: The flexibility of this implementation means each CGT chain may have different methods for obtaining native assets
ETH bridging: ETH bridging routes through L1-WETH as an ERC-20 wrapper
Documentation: Clear documentation becomes critical for users to understand how to acquire native assets
Flag alignment: isCustomGasToken must match between L1 and L2 to prevent protocol violations
Fee parameters: minBaseFee and operatorFee must accurately account for execution and data availability costs in the native token’s denomination
Decimal support: CGT currently supports only 18-decimal tokens.
ERC20s with different decimals require custom logic to handle rounding when converting between the token and the native asset.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Optimism Documentation","colors":{"primary":"#FF0420","light":"#FF0420","dark":"#FF0420"},"logo":{"light":"https://mintcdn.com/optimism-373f39ad/Vw5vY8zA-CRjBsUF/public/logos/Lockup_docs_dark.svg?fit=max\u0026auto=format\u0026n=Vw5vY8zA-CRjBsUF\u0026q=85\u0026s=a1ab18aecbec09fe5ad40222ce76f00c","dark":"https://mintcdn.com/optimism-373f39ad/Vw5vY8zA-CRjBsUF/public/logos/Lockup_docs_light.svg?fit=max\u0026auto=format\u0026n=Vw5vY8zA-CRjBsUF\u0026q=85\u0026s=edf965cc513f1a46b1897e2a6494b43b"},"favicon":"https://mintcdn.com/optimism-373f39ad/x8TXRvd2PF-Wx1yv/public/favicon.png?fit=max\u0026auto=format\u0026n=x8TXRvd2PF-Wx1yv\u0026q=85\u0026s=7b7a602bd267ee638c0167179f41737c","navbar":{"links":[{"href":"https://www.optimism.io/blog","label":"Blog"},{"href":"https://github.com/ethereum-optimism/optimism/tree/develop/docs/public-docs","label":"GitHub"}]},"footer":{"socials":{"twitter":"https://twitter.com/optimism","github":"https://github.com/ethereum-optimism"}},"seo":{"metatags":{"canonical":"https://docs.optimism.io/","og:title":"Optimism Documentation","og:type":"website","twitter:card":"summary_large_image"}},"integrations":{"mixpanel":{"projectToken":"807e42c62989ff12427a35baa12b6218"}},"contextual":{"options":["copy","chatgpt","claude","mcp"],"display":"header"},"thumbnails":{"preset":"classic","appearance":"dark","surface":"neutral","background":"https://mintcdn.com/optimism-373f39ad/ZyL9bbNrDzMQhMLM/public/img/thumbnail-bg.png?fit=max\u0026auto=format\u0026n=ZyL9bbNrDzMQhMLM\u0026q=85\u0026s=5baf50afc7e4f4e6288de49b3df19d52","fonts":{"family":"Riforma LL","source":"public/fonts/RiformaLL-Regular.woff","format":"woff"},"eyebrow":{"source":"none"}},"interaction":{"drilldown":false},"metadata":{"timestamp":false},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Status","icon":"signal-bars","href":"https://status.optimism.io"},{"anchor":"Faucet","icon":"gas-pump","href":"https://console.optimism.io/faucet"},{"anchor":"Bridge","icon":"bridge-water","href":"https://app.optimism.io/bridge/deposit"}]},"languages":[{"language":"en","href":""},{"language":"ko","href":"ko"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"optimism-373f39ad","hasAudioNarration":false,"actualSubdomain":"optimism-373f39ad","customDomains":["docs.optimism.io"],"gitSource":{"type":"github","owner":"ethereum-optimism","repo":"optimism","deployBranch":"develop","contentDirectory":"docs/public-docs","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"issues":false,"edits":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aed02f81d9953c3c0beb8ee","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"en","tag":"Reference","count":136},{"language":"ko","tag":"참조","count":136},{"language":"en","tag":"Node Operators","count":119},{"language":"ko","tag":"노드 운영자","count":119},{"language":"en","tag":"Protocol","count":98},{"language":"ko","tag":"프로토콜","count":98},{"language":"en","tag":"Chain Operators","count":75},{"language":"ko","tag":"체인 운영자","count":75},{"language":"en","tag":"op-reth","count":74},{"language":"ko","tag":"op-reth","count":74},{"language":"en","tag":"op-reth CLI reference","count":73},{"language":"ko","tag":"op-reth CLI reference","count":73},{"language":"en","tag":"App Developers","count":68},{"language":"ko","tag":"앱 개발자","count":68},{"language":"en","tag":"Guides","count":52},{"language":"ko","tag":"가이드","count":52},{"language":"en","tag":"Tutorials","count":42},{"language":"ko","tag":"튜토리얼","count":42},{"language":"en","tag":"How the protocol works","count":41},{"language":"ko","tag":"프로토콜 작동 방식","count":41}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles/homepage.css","content":"@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Italic.woff2') format('woff2');font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Medium.woff2') format('woff2');font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-MediumItalic.woff2') format('woff2');font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Bold.woff2') format('woff2');font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-BoldItalic.woff2') format('woff2');font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Heavy.woff2') format('woff2');font-weight:900;font-style:normal;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-HeavyItalic.woff2') format('woff2');font-weight:900;font-style:italic;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Light.woff2') format('woff2');font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-LightItalic.woff2') format('woff2');font-weight:300;font-style:italic;font-display:swap}body,.nx-prose,.nx-prose p,.nx-prose h1,.nx-prose h2,.nx-prose h3,.nx-prose h4,.nx-prose h5,.nx-prose h6{font-family:'Riforma LL', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif!important}[data-page-id=\"index\"]{max-width:1400px!important;margin-left:auto!important;margin-right:auto!important;padding-left:2rem!important;padding-right:2rem!important}[data-page-id=\"index\"] h1{font-family:'Riforma LL', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif!important;font-size:3rem!important;font-weight:700!important;line-height:1.1!important;margin-bottom:1rem!important;margin-top:0!important;padding-top:0!important;color:#111827!important;letter-spacing:-0.02em!important;max-width:100%!important}html[class*=\"dark\"] [data-page-id=\"index\"] h1{color:#f9fafb!important}[data-page-id=\"index\"]>p:first-of-type,[data-page-id=\"index\"] h1+p{font-family:'Riforma LL', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif!important;font-size:1.25rem!important;line-height:1.6!important;color:#6b7280!important;margin-bottom:2rem!important;margin-top:0!important;max-width:100%!important}html[class*=\"dark\"] [data-page-id=\"index\"]>p:first-of-type,html[class*=\"dark\"] [data-page-id=\"index\"] h1+p{color:#9ca3af!important}[data-page-id=\"index\"] .nx-prose{padding-top:0!important;padding-left:0!important;padding-right:0!important;max-width:100%!important}.nx-container{max-width:none!important;padding:0!important;background:transparent!important}[data-page-id=\"index\"] .nx-prose,[data-page-id=\"index\"]>div>div{max-width:100%!important}body{background:#ffffff!important}html[class*=\"dark\"] body{background:#0f172a!important}.nx-bg-gradient-to-r,.nx-bg-gradient-to-l,.nx-bg-gradient-to-t,.nx-bg-gradient-to-b,.nx-bg-gradient-to-br,.nx-bg-gradient-to-bl,.nx-bg-gradient-to-tr,.nx-bg-gradient-to-tl{background:transparent!important}.hero-section{display:flex;align-items:center;justify-content:space-between;min-height:auto;padding:0;margin-bottom:2.5rem;max-width:100%;margin-left:0;margin-right:0;background:transparent}.hero-content{flex:1;max-width:505px}.hero-content h1{font-family:'Riforma LL', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;font-size:2.5rem;font-weight:600;line-height:1.2;margin-bottom:0.75rem;color:#111827;letter-spacing:-0.025em}html[class*=\"dark\"] .hero-content h1{color:#f9fafb}.hero-content p{font-family:'Riforma LL', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;font-size:1.125rem;font-weight:400;line-height:1.6;margin-bottom:1rem;color:#6b7280}html[class*=\"dark\"] .hero-content p{color:#9ca3af}.hero-visual{flex:1;display:flex;justify-content:center;align-items:center}.hero-visual img{max-width:100%;height:auto}.hero-buttons{display:flex;gap:1rem}.btn-primary{font-family:'Riforma LL', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;background-color:#ef4444;color:white;padding:0.75rem 1.5rem;border:none;border-radius:6px;font-weight:500;cursor:pointer;transition:background-color 0.2s;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;text-align:center}.btn-primary:hover{background-color:#dc2626;color:white;text-decoration:none}.btn-secondary{font-family:'Riforma LL', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;background-color:transparent;color:#1f2937;padding:0.75rem 1.5rem;border:1px solid #d1d5db;border-radius:6px;font-weight:500;cursor:pointer;transition:all 0.2s;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;text-align:center}.btn-secondary:hover{background-color:#f9fafb;border-color:#9ca3af;color:#1f2937;text-decoration:none}html[class*=\"dark\"] .btn-secondary{color:#f9fafb;border-color:#4b5563}html[class*=\"dark\"] .btn-secondary:hover{background-color:#374151;border-color:#6b7280;color:#f9fafb}@media (max-width: 768px){.hero-section{flex-direction:column;text-align:center;min-height:auto;padding:2rem 0}.hero-content{padding-right:0;margin-bottom:2rem}.hero-content h1{font-size:1.75rem}.hero-buttons{justify-content:center}}.home-cards{width:100%;margin-bottom:2.5rem;margin-top:0;max-width:100%;margin-left:0;margin-right:0;padding:0}.home-card{display:flex;flex-direction:column;padding:1.75rem;background:transparent;border:1px solid #e2e8f0;border-radius:12px;transition:all 0.2s ease}html[class*=\"dark\"] .home-card{background:#1e293b;border-color:#334155}.home-card .home-card__title{font-family:'Riforma LL', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif!important;font-size:1.5rem!important;font-weight:600!important;margin:0 0 1.5rem 0;color:#0f172a;letter-spacing:-0.01em}html[class*=\"dark\"] .home-card .home-card__title{color:#f1f5f9}.home-card__footer{margin-top:auto;padding-top:1.5rem}.home-card__footer-link{color:#64748b;text-decoration:none;font-size:0.875rem;font-weight:500;transition:color 0.2s ease}.home-card__footer-link:hover{color:#475569;text-decoration:none}html[class*=\"dark\"] .home-card__footer-link{color:#94a3b8}html[class*=\"dark\"] .home-card__footer-link:hover{color:#cbd5e1}.card-list{display:flex;flex-direction:column;gap:0}.card-list-item{display:flex;align-items:flex-start;gap:1rem;padding:0.875rem 0;border-radius:6px;text-decoration:none;color:inherit;transition:all 0.2s ease;border-bottom:1px solid #f1f5f9}.card-list-item:last-child{border-bottom:none}html[class*=\"dark\"] .card-list-item{border-bottom-color:#334155}.card-list-item:hover .card-list-item__title{color:#ef4444}.card-list-item:hover .card-list-item__description{color:#475569}html[class*=\"dark\"] .card-list-item:hover .card-list-item__description{color:#cbd5e1}.card-list-item__number{width:2rem;height:2rem;border-radius:50%;background:#f1f5f9;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:0.875rem;flex-shrink:0;color:#475569}html[class*=\"dark\"] .card-list-item__number{background:#334155;color:#cbd5e1}.card-list-item__content{flex:1}.card-list-item__header{display:flex;align-items:center;gap:0.75rem;margin-bottom:0.5rem}.card-list-item__title{font-family:'Riforma LL', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;margin:0;font-size:1rem;font-weight:600;color:#0f172a;transition:color 0.2s ease;letter-spacing:-0.01em}html[class*=\"dark\"] .card-list-item__title{color:#f1f5f9}.card-list-item__description{font-family:'Riforma LL', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;margin:0;font-size:0.875rem;color:#64748b;line-height:1.5;transition:color 0.2s ease}html[class*=\"dark\"] .card-list-item__description{color:#94a3b8}.card-list-item__badge{padding:0.25rem 0.75rem;border-radius:16px;font-size:0.75rem;font-weight:600;text-transform:capitalize}.card-list-item__badge--easy{background:#dcfce7;color:#166534}.card-list-item__badge--medium{background:#fef3c7;color:#92400e}.card-list-item__badge--hard{background:#fee2e2;color:#991b1b}html[class*=\"dark\"] .card-list-item__badge--easy{background:#14532d;color:#bbf7d0}html[class*=\"dark\"] .card-list-item__badge--medium{background:#92400e;color:#fef3c7}html[class*=\"dark\"] .card-list-item__badge--hard{background:#991b1b;color:#fecaca}.card-list-item__arrow{color:#cbd5e1;font-size:1.25rem;transition:all 0.2s ease;display:flex;align-items:center;justify-content:center;margin-top:0.25rem}.card-list-item:hover .card-list-item__arrow{transform:translateX(4px);color:#ef4444}html[class*=\"dark\"] .card-list-item__arrow{color:#64748b}html[class*=\"dark\"] .card-list-item:hover .card-list-item__arrow{color:#ef4444}.nx-prose:not([data-page-id=\"index\"] .nx-prose){max-width:1400px!important;margin-left:auto!important;margin-right:auto!important;padding-left:2rem!important;padding-right:2rem!important}@media (max-width: 768px){.hero-section{padding:4rem 2rem;flex-direction:column;text-align:center;min-height:auto}.hero-content{margin-bottom:2rem;max-width:none}.home-cards{grid-template-columns:1fr!important;padding:0 2rem}.nx-prose{padding-left:2rem!important;padding-right:2rem!important}.card-list-item__header{flex-direction:column;align-items:flex-start;gap:0.5rem}}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:block}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Italic.woff2') format('woff2');font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Medium.woff2') format('woff2');font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-MediumItalic.woff2') format('woff2');font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Bold.woff2') format('woff2');font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-BoldItalic.woff2') format('woff2');font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Heavy.woff2') format('woff2');font-weight:900;font-style:normal;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-HeavyItalic.woff2') format('woff2');font-weight:900;font-style:italic;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-Light.woff2') format('woff2');font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:'Riforma LL';src:url('/fonts/RiformaLL-LightItalic.woff2') format('woff2');font-weight:300;font-style:italic;font-display:swap}img[alt*=\"logo\"],.nx-logo img,nav img,header img[src*=\"logo\"],a[href=\"/\"] img{max-height:13px!important;width:auto!important;height:13px!important}:root{--font-riforma: 'Riforma LL', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;--font-mono: 'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace}body{font-family:var(--font-riforma)!important}html,body,.nx-prose,.nx-prose p,.nx-prose h1,.nx-prose h2,.nx-prose h3,.nx-prose h4,.nx-prose h5,.nx-prose h6,.nx-prose li,.nx-prose td,.nx-prose th,.nx-prose blockquote,div:not([class*=\"language-\"]):not(pre):not(code),span:not([class*=\"language-\"]):not([class*=\"token\"]),a:not(pre a):not(code a),button{font-family:var(--font-riforma)!important}pre,code,.nx-font-mono,.nx-bg-primary-700\\/5,.language-javascript,.language-typescript,.language-python,.language-json,.language-bash,.language-shell,.language-solidity,.language-yml,.language-yaml,.language-sh,[class*=\"language-\"],.nx-code-block,div[data-language],div[data-theme*=\"dark\"],div[data-theme*=\"light\"],span[class*=\"token\"],.token,.comment,.prolog,.doctype,.cdata,.punctuation,.property,.tag,.boolean,.number,.constant,.symbol,.deleted,.function,.class-name,.regex,.important,.variable,.operator,.keyword{font-family:var(--font-mono)!important;font-feature-settings:normal!important}pre *,code *,.nx-code-block *,div[data-language] *,[class*=\"language-\"] *,pre span,code span,.nx-code-block span,div[data-language] span,[class*=\"language-\"] span{font-family:var(--font-mono)!important;font-feature-settings:normal!important}.nx-prose h1,h1{font-family:var(--font-riforma)!important;font-weight:400!important}.nx-prose h2,h2{font-family:var(--font-riforma)!important;font-weight:400!important}.nx-prose h3,h3{font-family:var(--font-riforma)!important;font-weight:400!important}[data-page-id=\"index\"]{max-width:1400px!important;margin-left:auto!important;margin-right:auto!important;padding-left:2rem!important;padding-right:2rem!important}[data-page-id=\"index\"] h1{font-family:var(--font-riforma)!important;font-size:3rem!important;font-weight:400!important;line-height:1.1!important;margin-bottom:1rem!important;margin-top:0!important;padding-top:0!important;color:#111827!important;letter-spacing:-0.02em!important;max-width:100%!important}html[class*=\"dark\"] [data-page-id=\"index\"] h1{color:#f9fafb!important}[data-page-id=\"index\"]>p:first-of-type,[data-page-id=\"index\"] h1+p{font-family:var(--font-riforma)!important;font-size:1.25rem!important;line-height:1.6!important;color:#6b7280!important;margin-bottom:2rem!important;margin-top:0!important;max-width:100%!important}html[class*=\"dark\"] [data-page-id=\"index\"]>p:first-of-type,html[class*=\"dark\"] [data-page-id=\"index\"] h1+p{color:#9ca3af!important}[data-page-id=\"index\"] .nx-prose{padding-top:0!important;padding-left:0!important;padding-right:0!important;max-width:100%!important}.nx-container{max-width:none!important;padding:0!important;background:transparent!important}[data-page-id=\"index\"] .nx-prose,[data-page-id=\"index\"]>div>div{max-width:100%!important}body{background:#ffffff!important}html[class*=\"dark\"] body{background:#0f172a!important}.nx-bg-gradient-to-r,.nx-bg-gradient-to-l,.nx-bg-gradient-to-t,.nx-bg-gradient-to-b,.nx-bg-gradient-to-br,.nx-bg-gradient-to-bl,.nx-bg-gradient-to-tr,.nx-bg-gradient-to-tl{background:transparent!important}.hero-section{display:flex;align-items:center;justify-content:space-between;min-height:auto;padding:0;margin-bottom:2.5rem;max-width:100%;margin-left:0;margin-right:0;background:transparent}.hero-content{flex:1;max-width:505px}.hero-content h1{font-family:var(--font-riforma)!important;font-size:2.5rem;font-weight:600;line-height:1.2;margin-bottom:0.75rem;color:#111827;letter-spacing:-0.025em}html[class*=\"dark\"] .hero-content h1{color:#f9fafb}.hero-content p{font-family:var(--font-riforma)!important;font-size:1.125rem;font-weight:400;line-height:1.6;margin-bottom:1rem;color:#6b7280}html[class*=\"dark\"] .hero-content p{color:#9ca3af}.hero-visual{flex:1;display:flex;justify-content:center;align-items:center}.hero-visual img{max-width:100%;height:auto}.hero-buttons{display:flex;gap:1rem}.btn-primary{font-family:var(--font-riforma)!important;background-color:#FF0420;color:white;padding:0.75rem 1.5rem;border:none;border-radius:0.75rem;font-weight:500;cursor:pointer;transition:background-color 0.2s;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;text-align:center}.btn-primary:hover{background-color:#e00320;color:white;text-decoration:none}.btn-secondary{font-family:var(--font-riforma)!important;background-color:transparent;color:#1f2937;padding:0.75rem 1.5rem;border:1px solid #d1d5db;border-radius:0.75rem;font-weight:500;cursor:pointer;transition:all 0.2s;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;text-align:center}.btn-secondary:hover{background-color:#f9fafb;border-color:#9ca3af;color:#1f2937;text-decoration:none}html[class*=\"dark\"] .btn-secondary{color:#f9fafb;border-color:#4b5563}html[class*=\"dark\"] .btn-secondary:hover{background-color:#374151;border-color:#6b7280;color:#f9fafb}@media (max-width: 768px){.hero-section{flex-direction:column;text-align:center;min-height:auto;padding:2rem 0}.hero-content{padding-right:0;margin-bottom:2rem}.hero-content h1{font-size:1.75rem}.hero-buttons{justify-content:center}}.home-cards{width:100%;margin-bottom:2.5rem;margin-top:0;max-width:100%;margin-left:0;margin-right:0;padding:0}.home-card{display:flex;flex-direction:column;padding:1.75rem;background:transparent;border:1px solid #e2e8f0;border-radius:12px;transition:all 0.2s ease}html[class*=\"dark\"] .home-card{background:#1e293b;border-color:#334155}.home-card .home-card__title{font-family:var(--font-riforma)!important;font-size:1.5rem!important;font-weight:400!important;margin:0 0 1.5rem 0;color:#0f172a;letter-spacing:-0.01em}html[class*=\"dark\"] .home-card .home-card__title{color:#f1f5f9}.home-card__footer{margin-top:auto;padding-top:1.5rem}.home-card__footer-link{color:#64748b;text-decoration:none;font-size:0.875rem;font-weight:500;transition:color 0.2s ease}.home-card__footer-link:hover{color:#475569;text-decoration:none}html[class*=\"dark\"] .home-card__footer-link{color:#94a3b8}html[class*=\"dark\"] .home-card__footer-link:hover{color:#cbd5e1}.card-list{display:flex;flex-direction:column;gap:0}.card-list-item{display:flex;align-items:flex-start;gap:1rem;padding:0.875rem 0;border-radius:6px;text-decoration:none;color:inherit;transition:all 0.2s ease;border-bottom:1px solid #f1f5f9}.card-list-item:last-child{border-bottom:none}html[class*=\"dark\"] .card-list-item{border-bottom-color:#334155}.card-list-item:hover .card-list-item__title{color:#ef4444}.card-list-item:hover .card-list-item__description{color:#475569}html[class*=\"dark\"] .card-list-item:hover .card-list-item__description{color:#cbd5e1}.card-list-item__number{width:2rem;height:2rem;border-radius:50%;background:#f1f5f9;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:0.875rem;flex-shrink:0;color:#475569}html[class*=\"dark\"] .card-list-item__number{background:#334155;color:#cbd5e1}.card-list-item__content{flex:1}.card-list-item__header{display:flex;align-items:center;gap:0.75rem;margin-bottom:0.5rem}.card-list-item__title{font-family:var(--font-riforma)!important;margin:0;font-size:1rem;font-weight:400;color:#0f172a;transition:color 0.2s ease;letter-spacing:-0.01em}html[class*=\"dark\"] .card-list-item__title{color:#f1f5f9}.card-list-item__description{font-family:var(--font-riforma)!important;margin:0;font-size:0.875rem;color:#64748b;line-height:1.5;transition:color 0.2s ease}html[class*=\"dark\"] .card-list-item__description{color:#94a3b8}.card-list-item__badge{padding:0.25rem 0.75rem;border-radius:16px;font-size:0.75rem;font-weight:600;text-transform:capitalize}.card-list-item__badge--easy{background:#dcfce7;color:#166534}.card-list-item__badge--medium{background:#fef3c7;color:#92400e}.card-list-item__badge--hard{background:#fee2e2;color:#991b1b}html[class*=\"dark\"] .card-list-item__badge--easy{background:#14532d;color:#bbf7d0}html[class*=\"dark\"] .card-list-item__badge--medium{background:#92400e;color:#fef3c7}html[class*=\"dark\"] .card-list-item__badge--hard{background:#991b1b;color:#fecaca}.card-list-item__arrow{color:#cbd5e1;font-size:1.25rem;transition:all 0.2s ease;display:flex;align-items:center;justify-content:center;margin-top:0.25rem}.card-list-item:hover .card-list-item__arrow{transform:translateX(4px);color:#ef4444}html[class*=\"dark\"] .card-list-item__arrow{color:#64748b}html[class*=\"dark\"] .card-list-item:hover .card-list-item__arrow{color:#ef4444}.nx-prose:not([data-page-id=\"index\"] .nx-prose){max-width:1400px!important;margin-left:auto!important;margin-right:auto!important;padding-left:2rem!important;padding-right:2rem!important}@media (max-width: 768px){.hero-section{padding:4rem 2rem;flex-direction:column;text-align:center;min-height:auto}.hero-content{margin-bottom:2rem;max-width:none}.home-cards{grid-template-columns:1fr!important;padding:0 2rem}.nx-prose{padding-left:2rem!important;padding-right:2rem!important}.card-list-item__header{flex-direction:column;align-items:flex-start;gap:0.5rem}}.nx-card img,[class*=\"card\"] img[src*=\"/public/img/\"]{background:transparent!important}"}],"page":{"pagePath":"op-stack/features/custom-gas-token","slug":"/op-stack/features/custom-gas-token","pageMetadata":{"title":"Custom Gas Token","description":"Learn how utilize a Custom Gas Token for OP Stack chains.","diataxis":"explanation","href":"/op-stack/features/custom-gas-token"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how utilize a Custom Gas Token for OP Stack chains.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Custom Gas Token (CGT) enables OP Stack chains to use any asset as their native fee currency instead of ETH.\nThis opens up new possibilities for chain operators to align their economic model with their specific use case, whether that’s using a stablecoin for predictable fees, a governance token for ecosystem alignment, or creating an entirely new native asset.`}),`\n`,_jsx(_components.p,{children:`This iteration of CGT is a redesign that prioritizes flexibility, minimal core protocol changes, and future-proof standardization by decoupling native asset management from core bridging infrastructure.`}),`\n`,_jsx(Heading,{level:`2`,id:`key-features`,children:`Key features`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Token flexibility`}),`: Use any token as the native gas token - existing L1 ERC-20s, L2-native tokens, or entirely new assets`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Application-layer bridging`}),`: No bridge or token is enshrined in the protocol; bridges and converters live entirely at the application layer`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Flexible supply management`}),`: Chain governors have complete control over token supply, emission schedules, and distribution mechanisms`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Future-proof design`}),`: Built to support cross-chain interoperability`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How it works`}),`\n`,_jsx(_components.p,{children:`CGT is configured at genesis and comes with two new predeploy contracts to manage native assets independently from ETH bridging:`}),`\n`,_jsxs(Heading,{level:`3`,id:`the-iscustomgastoken-flag`,children:[`The `,_jsx(_components.code,{children:`isCustomGasToken()`}),` flag`]}),`\n`,_jsx(_components.p,{children:`When enabled:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`On L1`}),`: Placed in `,_jsx(_components.code,{children:`SystemConfig`}),`, instructs `,_jsx(_components.code,{children:`OptimismPortal`}),`, `,_jsx(_components.code,{children:`L1CrossDomainMessenger`}),`, and `,_jsx(_components.code,{children:`L1StandardBridge`}),` to reject transactions containing ETH value (`,_jsx(_components.code,{children:`msg.value`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`On L2`}),`: Located in `,_jsx(_components.code,{children:`L1Block`}),`, prevents ETH-related operations in `,_jsx(_components.code,{children:`L2ToL1MessagePasser`}),`, `,_jsx(_components.code,{children:`L2CrossDomainMessenger`}),`, `,_jsx(_components.code,{children:`L2StandardBridge`}),`, and `,_jsx(_components.code,{children:`FeeVaults`})]}),`\n`]}),`\n`,_jsx(_components.p,{children:`This enables native asset mints and burns to be decoupled from deposits and moved to the application layer.`}),`\n`,_jsx(Heading,{level:`3`,id:`two-new-predeploy-contracts`,children:`Two new predeploy contracts`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`NativeAssetLiquidity`})}),`\n`,_jsx(_components.p,{children:`Holds pre-minted native assets created at genesis with two core functions:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`deposit()`}),`: Receives native assets (callable only by LiquidityController)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`withdraw()`}),`: Releases native assets to the controller`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`LiquidityController`})}),`\n`,_jsx(_components.p,{children:`Governance-controlled contract that manages asset supply through:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`authorizeMinter()`}),` / `,_jsx(_components.code,{children:`deauthorizeMinter()`}),`: Grants or revokes minting permissions`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`mint()`}),`: Unlocks assets from liquidity reserves for authorized parties`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`burn()`}),`: Accepts native assets and locks them in the liquidity contract`]}),`\n`,_jsx(_components.li,{children:`Stores token metadata for wrapped asset compatibility`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`use-cases`,children:`Use cases`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Stablecoin fees`}),`: Use USDC or other stablecoins for predictable transaction costs`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Governance alignment`}),`: Use your chain’s governance token as the gas token to align incentives`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`L2-native economies`}),`: Create entirely new native assets with custom supply mechanics`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Simplified UX`}),`: Reduce the number of tokens users need to hold for interacting with your chain`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`comparison-with-previous-design`,children:`Comparison with previous design`}),`\n`,_jsxs(_components.p,{children:[`Custom Gas Token v2 was introduced in Upgrade 18 and is available in `,_jsx(_components.code,{children:`op-contracts/v6.0.0`}),`.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Aspect`}),_jsx(_components.th,{children:`Legacy CGT`}),_jsx(_components.th,{children:`CGT v2`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Token basis`})}),_jsx(_components.td,{children:`Anchored to L1 ERC-20`}),_jsx(_components.td,{children:`Independent native asset at genesis`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Flexibility`})}),_jsx(_components.td,{children:`Restricted to specific configurations`}),_jsx(_components.td,{children:`Supports any release mechanism`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Bridging`})}),_jsx(_components.td,{children:`Built into core contracts`}),_jsx(_components.td,{children:`Application-layer responsibility`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Supply control`})}),_jsx(_components.td,{children:`System transaction minting`}),_jsx(_components.td,{children:`Minter authorization model`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Adaptability`})}),_jsx(_components.td,{children:`Limited post-deployment changes`}),_jsx(_components.td,{children:`Upgradeable and flexible`})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Migration from legacy CGT`}),`: There is currently no migration path from legacy CGT to CGT v2. A migration path is planned to be put together. Chains using the previous CGT design will need to coordinate a hard fork to adopt the new architecture.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`developer-impact`,children:`Developer impact`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Decoupled from core components`}),`: Since native asset management is decoupled from core components, obtaining native assets might vary chain-by-chain. That means that bridging, conversions, and features utilized would be different. It’s suggested to create some library or templates that cover basic uses cases (e.g., L2-native, bridging from L1) to standardize most implementations.`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Chain Governors are encouraged to audit their implementations.`}),`\n`,_jsx(_components.li,{children:`Developers would need to look at the chain’s docs to understand how to obtain native assets.`}),`\n`,_jsx(_components.li,{children:`Ideally CGT Chain Operators can work together to formalize a common set of CGT patterns that don’t come out of the box.`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No unified API`}),`: The flexibility of this implementation means each CGT chain may have different methods for obtaining native assets`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`ETH bridging`}),`: ETH bridging routes through L1-WETH as an ERC-20 wrapper`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Documentation`}),`: Clear documentation becomes critical for users to understand how to acquire native assets`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`risks-and-considerations`,children:`Risks and considerations`}),`\n`,_jsx(Heading,{level:`3`,id:`supply-management`,children:`Supply management`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Minter security`}),`: Any address granted minter permissions requires thorough security review and auditing`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Access control`}),`: Misconfigurations in bridges or controllers could lead to unintended minting or burning`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Rate limiting`}),`: Consider implementing rate limits on minting velocity to reduce risk`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`configuration-accuracy`,children:`Configuration accuracy`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Flag alignment`}),`: `,_jsx(_components.code,{children:`isCustomGasToken`}),` must match between L1 and L2 to prevent protocol violations`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Fee parameters`}),`: `,_jsx(_components.code,{children:`minBaseFee`}),` and `,_jsx(_components.code,{children:`operatorFee`}),` must accurately account for execution and data availability costs in the native token’s denomination`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Decimal support`}),`: CGT currently supports only 18-decimal tokens.\nERC20s with different decimals require custom logic to handle rounding when converting between the token and the native asset.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`For chain operators`}),`: See `,_jsx(_components.a,{href:`/chain-operators/guides/features/custom-gas-token-guide`,children:`Deploy a Custom Gas Token chain`}),` for detailed deployment instructions`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Custom Gas Token","description":"Learn how utilize a Custom Gas Token for OP Stack chains.","diataxis":"explanation","href":"/op-stack/features/custom-gas-token"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Key features","slug":"key-features","depth":2,"children":[]},{"title":"How it works","slug":"how-it-works","depth":2,"children":[{"title":"The isCustomGasToken() flag","slug":"the-iscustomgastoken-flag","depth":3,"children":[]},{"title":"Two new predeploy contracts","slug":"two-new-predeploy-contracts","depth":3,"children":[]}]},{"title":"Use cases","slug":"use-cases","depth":2,"children":[]},{"title":"Comparison with previous design","slug":"comparison-with-previous-design","depth":2,"children":[]},{"title":"Developer impact","slug":"developer-impact","depth":2,"children":[]},{"title":"Risks and considerations","slug":"risks-and-considerations","depth":2,"children":[{"title":"Supply management","slug":"supply-management","depth":3,"children":[]},{"title":"Configuration accuracy","slug":"configuration-accuracy","depth":3,"children":[]}]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/optimism-373f39ad/6b11b6c32a46a09b/public/mixpanel-custom.js"],"subdomain":"optimism-373f39ad","siteName":"Optimism Documentation","title":"Optimism Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/op-stack/features/custom-gas-token","matchLevel":0},"ko":{"href":"/ko/op-stack/features/custom-gas-token","matchLevel":1}}},"lastModified":"2026-03-17T08:17:46.641Z","originalFileLocation":"op-stack/features/custom-gas-token.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn how utilize a Custom Gas Token for OP Stack chains.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Optimism Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/optimism-373f39ad/v3BpzhmZ-un_k_ZG/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/optimism-373f39ad/v3BpzhmZ-un_k_ZG/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/optimism-373f39ad/v3BpzhmZ-un_k_ZG/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/optimism-373f39ad/v3BpzhmZ-un_k_ZG/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/optimism-373f39ad/v3BpzhmZ-un_k_ZG/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/optimism-373f39ad/v3BpzhmZ-un_k_ZG/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/optimism-373f39ad/v3BpzhmZ-un_k_ZG/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/optimism-373f39ad/v3BpzhmZ-un_k_ZG/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/optimism-373f39ad/v3BpzhmZ-un_k_ZG/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Optimism Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how utilize a Custom Gas Token for OP Stack chains.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Optimism Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.optimism.io//op-stack/features/custom-gas-token\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://optimism-373f39ad.mintlify.site/_mintlify/api/og/v2?title=Custom+Gas+Token\u0026amp;description=Learn+how+utilize+a+Custom+Gas+Token+for+OP+Stack+chains.\u0026amp;theme=f64aba71940449e3ce8f3efe\u0026amp;signature=0389b685b1e6250581da34c5d11b802e6d8ed94a9634749b241d9d7a8abfbefe\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Optimism Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how utilize a Custom Gas Token for OP Stack chains.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://optimism-373f39ad.mintlify.site/_mintlify/api/og/v2?title=Custom+Gas+Token\u0026amp;description=Learn+how+utilize+a+Custom+Gas+Token+for+OP+Stack+chains.\u0026amp;theme=f64aba71940449e3ce8f3efe\u0026amp;signature=0389b685b1e6250581da34c5d11b802e6d8ed94a9634749b241d9d7a8abfbefe\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/optimism-373f39ad/v3BpzhmZ-un_k_ZG/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Optimism Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF0420\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.optimism.io//op-stack/features/custom-gas-token\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/op-stack/features/custom-gas-token.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.optimism.io//op-stack/features/custom-gas-token\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://docs.optimism.io//ko/op-stack/features/custom-gas-token\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.optimism.io//op-stack/features/custom-gas-token\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.optimism.io/#organization\",\"name\":\"Optimism Documentation\",\"url\":\"https://docs.optimism.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/optimism-373f39ad/Vw5vY8zA-CRjBsUF/public/logos/Lockup_docs_dark.svg?fit=max\u0026auto=format\u0026n=Vw5vY8zA-CRjBsUF\u0026q=85\u0026s=a1ab18aecbec09fe5ad40222ce76f00c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.optimism.io#website\",\"name\":\"Optimism Documentation\",\"url\":\"https://docs.optimism.io\",\"publisher\":{\"@id\":\"https://docs.optimism.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.optimism.io//op-stack/features/custom-gas-token#webpage\",\"url\":\"https://docs.optimism.io//op-stack/features/custom-gas-token\",\"name\":\"Custom Gas Token\",\"description\":\"Learn how utilize a Custom Gas Token for OP Stack chains.\",\"dateModified\":\"2026-03-17T08:17:46.641Z\",\"isPartOf\":{\"@id\":\"https://docs.optimism.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.optimism.io//op-stack/features/custom-gas-token#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.optimism.io//op-stack/features/custom-gas-token#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Features\",\"item\":\"https://docs.optimism.io/op-stack/features/subblocks\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Custom Gas Token\",\"item\":\"https://docs.optimism.io//op-stack/features/custom-gas-token\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.optimism.io//op-stack/features/custom-gas-token#article\",\"headline\":\"Custom Gas Token\",\"name\":\"Custom Gas Token\",\"description\":\"Learn how utilize a Custom Gas Token for OP Stack chains.\",\"url\":\"https://docs.optimism.io//op-stack/features/custom-gas-token\",\"mainEntityOfPage\":{\"@id\":\"https://docs.optimism.io//op-stack/features/custom-gas-token#webpage\"},\"dateModified\":\"2026-03-17T08:17:46.641Z\",\"publisher\":{\"@id\":\"https://docs.optimism.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.optimism.io#website\"}}]}\u003c/script>","siteName":"Optimism Documentation","nav":{"global":{"anchors":[{"anchor":"Status","icon":"signal-bars","href":"https://status.optimism.io"},{"anchor":"Faucet","icon":"gas-pump","href":"https://console.optimism.io/faucet"},{"anchor":"Bridge","icon":"bridge-water","href":"https://app.optimism.io/bridge/deposit"}]},"languages":[{"language":"en","tabs":[{"tab":"Get Started","pages":[{"title":"Get Started","href":""}]},{"tab":"Chain Operators","pages":[{"title":"Chain Operators","href":"/chain-operators"}]},{"tab":"Node Operators","pages":[{"title":"Node Operators","href":"/node-operators/overview"}]},{"tab":"App Developers","pages":[{"title":"App Developers","href":"/app-developers"}]},{"tab":"Protocol","groups":[{"group":"Get started","pages":[{"title":"The OP Stack","href":"/op-stack/introduction/op-stack"},{"title":"OP Stack architecture","href":"/op-stack/architecture"},{"title":"Fact sheet","href":"/op-stack/introduction/fact-sheet"},{"title":"Learn the OP Stack","href":"/op-stack/learn/index"}]},{"group":"How the protocol works","pages":[{"title":"OP Stack protocol","sidebarTitle":"Overview","href":"/op-stack/protocol/index"},{"title":"Design philosophy \u0026 principles","href":"/op-stack/protocol/design-principles"},{"title":"Differences from Ethereum","href":"/op-stack/protocol/differences"},{"title":"OP Stack components","href":"/op-stack/protocol/components"},{"title":"Derivation pipeline","href":"/op-stack/protocol/derivation-pipeline"},{"title":"Smart Contract overview","href":"/op-stack/protocol/smart-contracts"},{"title":"The Blockspace and Standard Rollup Charters","href":"/op-stack/protocol/blockspace-charter"},{"title":"Sequencer outages","href":"/op-stack/protocol/outages"},{"title":"Block time research","href":"/op-stack/research/block-time-research"},{"group":"Transactions","pages":[{"title":"Transaction fees on OP Mainnet","href":"/op-stack/transactions/fees"},{"title":"Fee vaults","href":"/op-stack/transactions/fee-vaults"},{"title":"Forced Transaction","href":"/op-stack/transactions/forced-transaction"},{"title":"Transaction finality","href":"/op-stack/transactions/transaction-finality"},{"title":"Transaction flow","href":"/op-stack/transactions/transaction-flow"}]},{"group":"Bridging","pages":[{"title":"Cross-Domain Overview","href":"/op-stack/bridging/cross-domain"},{"title":"Deposit flow","href":"/op-stack/bridging/deposit-flow"},{"title":"Withdrawal flow","href":"/op-stack/bridging/withdrawal-flow"}]},{"group":"Fault Proofs","pages":[{"title":"Fault proofs","href":"/op-stack/fault-proofs/index"},{"title":"Fault proofs explainer","href":"/op-stack/fault-proofs/explainer"},{"title":"Fault proofs security","href":"/op-stack/fault-proofs/fp-security"},{"title":"FP system components","href":"/op-stack/fault-proofs/fp-components"},{"title":"Fault proof VM: Cannon","href":"/op-stack/fault-proofs/cannon"},{"title":"Fault proof VM: MIPS64.sol","href":"/op-stack/fault-proofs/mips"},{"title":"OP-Challenger explainer","href":"/op-stack/fault-proofs/challenger"},{"title":"Fault proofs reference","href":"/op-stack/fault-proofs/reference"},{"group":"Kona","pages":[{"group":"Fault Proof Program Development","pages":[{"title":"Fault Proof Program Development","href":"/op-stack/fault-proofs/kona/fpp-dev/intro"},{"title":"Environment","href":"/op-stack/fault-proofs/kona/fpp-dev/env"},{"title":"Supported Targets","href":"/op-stack/fault-proofs/kona/fpp-dev/targets"},{"title":"Prologue","href":"/op-stack/fault-proofs/kona/fpp-dev/prologue"},{"title":"Execution","href":"/op-stack/fault-proofs/kona/fpp-dev/execution"},{"title":"Epilogue","href":"/op-stack/fault-proofs/kona/fpp-dev/epilogue"}]},{"group":"Proof SDK","pages":[{"title":"Kona Proof SDK","href":"/op-stack/fault-proofs/kona/proof/intro"},{"title":"Understanding the OP Stack STF","href":"/op-stack/fault-proofs/kona/proof/stf"},{"title":"FPVM Backend","href":"/op-stack/fault-proofs/kona/proof/fpvm-backend"},{"title":"Custom Backends","href":"/op-stack/fault-proofs/kona/proof/custom-backend"},{"title":"`kona-executor` Extensions","href":"/op-stack/fault-proofs/kona/proof/exec-ext"}]}]}]},{"group":"Interoperability","pages":[{"title":"Interoperability","href":"/op-stack/interop/index"},{"title":"OP Stack interoperability explainer","href":"/op-stack/interop/explainer"},{"title":"OP Supernode","href":"/op-stack/interop/supernode"},{"title":"Interop reorg awareness","href":"/op-stack/interop/reorg"},{"title":"Superchain ETH Bridge","href":"/op-stack/interop/superchain-eth-bridge"}]}]},{"group":"Security","pages":[{"title":"OP Stack Security","sidebarTitle":"Overview","href":"/op-stack/security/index"},{"title":"Privileged Roles in OP Stack Chains","href":"/op-stack/protocol/privileged-roles"},{"title":"OP Stack security model","href":"/op-stack/security/faq-sec-model"},{"title":"Security policy and bug bounty program","href":"/op-stack/security/security-policy"},{"title":"Audit reports","href":"/op-stack/security/audit-reports"},{"title":"Pausing the bridge","href":"/op-stack/security/pause"},{"title":"Security guidance for exchanges and bridges","href":"/op-stack/security/exchanges-and-bridges"},{"title":"Crosschain security measures for safe interoperability","href":"/op-stack/security/interop-security"}]},{"group":"Features","pages":[{"title":"Subblocks","href":"/op-stack/features/subblocks"},{"title":"Sequencer Defined Metering","description":"Understand how Sequencer Defined Metering lets a sequencer rebate gas, how the rebate is committed and verified, and what changes for nodes and applications at Lagoon.","href":"/op-stack/features/sdm"},{"title":"Custom Gas Token","href":"/op-stack/features/custom-gas-token"},{"title":"Bridged USDC Standard on OP Stack","description":"Overview of the Bridged USDC Standard and how chain operators can deploy it.","href":"/op-stack/features/bridged-usdc-standard"},{"title":"Span Batches","href":"/op-stack/features/span-batches"},{"title":"SendRawTransactionConditional explainer","href":"/op-stack/features/send-raw-transaction-conditional"},{"title":"L2 Contract Manager","href":"/op-stack/features/l2-contract-manager"},{"title":"Osaka on L2","href":"/op-stack/features/osaka-on-l2"},{"title":"OP Stack preinstalls","href":"/op-stack/features/preinstalls"},{"title":"Alt-DA Mode Explainer","href":"/op-stack/features/experimental/alt-da-mode"}]},{"group":"Reference","pages":[{"group":"Stack Components","pages":[{"title":"Stack Components","sidebarTitle":"Overview","href":"/op-stack/components/index"},{"group":"Sequencing","pages":[{"title":"op-batcher","href":"/op-stack/components/op-batcher"},{"title":"op-conductor","href":"/op-stack/components/op-conductor"}]},{"group":"Derivation \u0026 Execution","pages":[{"title":"op-node","href":"/op-stack/components/op-node"},{"title":"kona-node","href":"/op-stack/components/kona-node"},{"title":"op-reth","href":"/op-stack/components/op-reth"}]},{"group":"Settlement \u0026 Proofs","pages":[{"title":"op-proposer","href":"/op-stack/components/op-proposer"},{"title":"op-challenger","href":"/op-stack/components/op-challenger"},{"title":"cannon","href":"/op-stack/components/cannon"},{"title":"kona-client","href":"/op-stack/components/kona-client"},{"title":"kona-host","href":"/op-stack/components/kona-host"},{"title":"op-contracts","href":"/op-stack/components/op-contracts"}]},{"group":"Deployment \u0026 Infrastructure","pages":[{"title":"op-deployer","href":"/op-stack/components/op-deployer"},{"title":"proxyd","href":"/op-stack/components/proxyd"}]}]},{"group":"Network upgrades","pages":[{"title":"Network upgrades","href":"/op-stack/protocol/network-upgrades"},{"title":"Lagoon","href":"/op-stack/protocol/hardforks/lagoon"},{"title":"Karst","href":"/op-stack/protocol/hardforks/karst"},{"title":"Jovian","href":"/op-stack/protocol/hardforks/jovian"},{"title":"Isthmus","href":"/op-stack/protocol/hardforks/isthmus"},{"title":"Holocene","href":"/op-stack/protocol/hardforks/holocene"},{"title":"Granite","href":"/op-stack/protocol/hardforks/granite"},{"title":"Fjord","href":"/op-stack/protocol/hardforks/fjord"},{"title":"Ecotone","href":"/op-stack/protocol/hardforks/ecotone"},{"title":"Delta","href":"/op-stack/protocol/hardforks/delta"},{"title":"Canyon","href":"/op-stack/protocol/hardforks/canyon"},{"title":"Regolith","href":"/op-stack/protocol/hardforks/regolith"}]},{"title":"The superchain-registry","href":"/op-stack/protocol/superchain-registry"},{"title":"Glossary","href":"/op-stack/reference/glossary"}]}]},{"tab":"OP Mainnet","pages":[{"title":"OP Mainnet","href":"/op-mainnet"}]},{"tab":"Governance","pages":[{"title":"Governance","href":"/governance/protocol-upgrades"}]},{"tab":"Notices","pages":[{"title":"Notices","href":"/notices"}]}]},{"language":"ko","pages":[{"title":"ko","href":"/ko/op-stack/features/custom-gas-token"}]}]},"basePath":"","title":"Optimism Documentation","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":[],"chunks":[]}