Migrating off x/precisebank: Gas Converter Precompile
Run an 18-decimal gas token alongside a 6-decimal staking denom using a converter precompile, replacing the deprecated x/precisebank module.
The code on this page is example code, not a production-ready implementation. It is not part of cosmos/evm and is not tested or maintained by the Cosmos EVM team. If you adopt this approach, the code lives in your application and you are responsible for auditing and maintaining it going forward.
Applies to: chains on cosmos/evm v0.7.x+ with a 6-decimal staking denom.
Scope: every change lives in your application, no fork of cosmos/evm is needed.Instead of scaling your 6-decimal denom (ustake) into the EVM, launch the EVM with a
separate, natively 18-decimal gas denom (astake). A precompile is the sole mint/burn
authority for astake, converting against escrowed ustake at a fixed rate:
1 ustake = 10^12 astakedeposit: escrow ustake → mint ustakeAmount × 10^12 astake to callerwithdraw: burn astake → release astakeAmount ÷ 10^12 ustake to caller
astake is always fully collateralized. Assert this in your e2e tests (x/crisis is
deprecated):
Staking, governance, inflation, and all existing balances stay on ustake untouched.
Because astake is a plain 18-decimal denom (EvmDenom == ExtendedDenom), x/vm’s
denom validation passes as-is, avoiding the scaled-denom machinery
x/precisebank existed to support.
Standard stateful precompile in your app (the distribution precompile is the
reference structure), at a free address:
package gasconverterconst ( ModuleName = "gasconverter" PrecompileAddress = "0x0000000000000000000000000000000000000900" // stock set ends at 0x807)var ScalingFactor = math.NewInt(1_000_000_000_000)// The shared precompiles/common.BankKeeper deliberately lacks mint/burn;// construct with the real bankkeeper.Keeper, which satisfies this superset.type BankKeeper interface { cmn.BankKeeper SendCoinsFromAccountToModule(ctx context.Context, sender sdk.AccAddress, module string, amt sdk.Coins) error SendCoinsFromModuleToAccount(ctx context.Context, module string, recipient sdk.AccAddress, amt sdk.Coins) error MintCoins(ctx context.Context, module string, amt sdk.Coins) error BurnCoins(ctx context.Context, module string, amt sdk.Coins) error}func NewPrecompile(bankKeeper BankKeeper) *Precompile { return &Precompile{ Precompile: cmn.Precompile{ KvGasConfig: storetypes.KVGasConfig(), TransientKVGasConfig: storetypes.TransientGasConfig(), ContractAddress: common.HexToAddress(PrecompileAddress), // Replays bank events into the stateDB. It extracts only the EVM // denom, so the ustake legs journal as zero. BalanceHandlerFactory: cmn.NewBalanceHandlerFactory(bankKeeper), }, ABI: ABI, bankKeeper: bankKeeper, }}func (p Precompile) Run(evm *vm.EVM, contract *vm.Contract, readonly bool) ([]byte, error) { // RunNativeAction journals bank writes on the stateDB so mints revert with // the EVM tx. A mint that escapes a revert is an inflation bug; never // bypass this. return p.RunNativeAction(evm, contract, func(ctx sdk.Context) ([]byte, error) { return p.Execute(ctx, evm.StateDB, contract, readonly) })}// ConvertForFees is the deposit path, shared with the ante handler below.func ConvertForFees(ctx sdk.Context, bk BankKeeper, caller sdk.AccAddress, ustakeAmt math.Int) error { ustake := sdk.NewCoin("ustake", ustakeAmt) astake := sdk.NewCoin(evmtypes.GetEVMCoinDenom(), ustakeAmt.Mul(ScalingFactor)) if err := bk.SendCoinsFromAccountToModule(ctx, caller, ModuleName, sdk.NewCoins(ustake)); err != nil { return err } if err := bk.MintCoins(ctx, ModuleName, sdk.NewCoins(astake)); err != nil { return err } return bk.SendCoinsFromModuleToAccount(ctx, ModuleName, caller, sdk.NewCoins(astake))}
withdraw reverses the sequence (collect → BurnCoins → release) after rejecting
amounts not a multiple of ScalingFactor. The mint permission is the entire “module”,
no AppModule, store key, or Msg service:
var maccPerms = map[string][]string{ // ... gasconverter.ModuleName: {authtypes.Minter, authtypes.Burner},}
A ustake-only account cannot pay for the EVM tx that would give it
astake. Front the fee in a decorator ahead of the unmodified mono decorator, whose
balance checks then see the converted funds:
func (d GasConverterDepositDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { _, ethTx, err := evmtypes.UnpackEthMsg(tx.GetMsgs()[0]) if err != nil || !isDepositTx(ethTx) { // to == PrecompileAddress && selector == deposit && value == 0 return next(ctx, tx, simulate) } // This runs before the mono decorator's signature verification, so recover // the sender here. Fronting early is safe: an invalid signature makes the // mono decorator error, discarding the whole ante state, conversion included. signer := ethtypes.LatestSignerForChainID(evmtypes.GetEthChainConfig().ChainID) from, err := ethtypes.Sender(signer, ethTx) if err != nil { return next(ctx, tx, simulate) } // Convert only the shortfall; the fee is still secured before execution // (a reverting tx still pays), so there is no free-tx vector. The unspent // remainder stays with the sender as spendable astake. sender := sdk.AccAddress(from.Bytes()) cost := math.NewIntFromBigInt(ethTx.GasFeeCap()).MulRaw(int64(ethTx.Gas())) short := cost.Sub(d.bankKeeper.SpendableCoin(ctx, sender, evmtypes.GetEVMCoinDenom()).Amount) if !short.IsPositive() { return next(ctx, tx, simulate) } ustakeNeeded := short.Add(gasconverter.ScalingFactor).SubRaw(1).Quo(gasconverter.ScalingFactor) // ceil if err := gasconverter.ConvertForFees(ctx, d.bankKeeper, sender, ustakeNeeded); err != nil { return ctx, err } return next(ctx, tx, simulate)}
In your Cosmos-tx chain, substitute a min-gas-price decorator that
quotes both denoms, and a fee checker that prices ustake fees at the fixed rate:
// min-gas-price decorator: accept either denom against feemarket MinGasPriceminGasPrices := sdk.DecCoins{ {Denom: evmtypes.GetEVMCoinDenom(), Amount: minGasPrice}, // e.g. 10^7 {Denom: gasconverter.UnderlyingDenom, Amount: minGasPrice.QuoInt(gasconverter.ScalingFactor)}, // e.g. 10^-5}// fee checker: normalize before the EIP-1559 base-fee check and priorityunderlyingFeeAmt := feeCoins.AmountOf(gasconverter.UnderlyingDenom)feeAmtDec := sdkmath.LegacyNewDecFromInt( feeCoins.AmountOf(denom).Add(underlyingFeeAmt.Mul(gasconverter.ScalingFactor)))// ...if underlyingFeeAmt.IsPositive() { // Deduct exactly what was provided; the payer may hold no astake at all. effectiveFee = feeCoins}
cosmos/evm now runs an app-side EVM mempool, and the JSON-RPC server requires it.
EVM txs enter the pool before any ante handler runs, so without this change the
first-gas deposit() dies at the RPC with insufficient funds for gas * price + value: balance 0. Your app chooses the VM keeper the pool reads state through:
// Pool admission values an account at its total convertible wealth. Only the// mempool reads through this wrapper; consensus, RPC balances, and the ante// use the real keeper. Admission becomes slightly optimistic (any ustake// holder passes the funding check); the ante enforces real payability at// execution, and the pool's recheck (which runs the ante) evicts the rest.type convertibleBalanceKeeper struct { evmmempool.VMKeeperI bankKeeper bankkeeper.Keeper}func (k convertibleBalanceKeeper) GetAccount(ctx sdk.Context, addr common.Address) *statedb.Account { acct := k.VMKeeperI.GetAccount(ctx, addr) if acct == nil || acct.Balance == nil { return acct } spendable := k.bankKeeper.SpendableCoin(ctx, sdk.AccAddress(addr.Bytes()), gasconverter.UnderlyingDenom) if !spendable.Amount.IsPositive() { return acct } aux, overflow := uint256.FromBig(spendable.Amount.Mul(gasconverter.ScalingFactor).BigInt()) if overflow { return acct } augmented := *acct augmented.Balance = new(uint256.Int) if _, overflow := augmented.Balance.AddOverflow(acct.Balance, aux); overflow { return acct } return &augmented}mempool := evmmempool.NewMempool(app.CreateQueryContext, logger, convertibleBalanceKeeper{VMKeeperI: app.EVMKeeper, bankKeeper: app.BankKeeper}, app.FeeMarketKeeper, app.txConfig, evmRechecker, cosmosRechecker, mpConfig, cosmosPoolMaxTx)
// app.go — register alongside the stock set; the precompile address never// touches the library.staticPrecompiles := precompiletypes.DefaultStaticPrecompiles(/* stock args */)gc := gasconverter.NewPrecompile(app.BankKeeper)staticPrecompiles[gc.Address()] = gcapp.EVMKeeper = app.EVMKeeper.WithStaticPrecompiles(staticPrecompiles)// genesis defaults — the default list ships WITHOUT your address, and a// missing entry makes calls no-op silently. 0x…0900 sorts after the stock// set, as params validation requires.evmGenState.Params.ActiveStaticPrecompiles = append( slices.Clone(evmtypes.AvailableStaticPrecompiles), gasconverter.PrecompileAddress)// blocklist — module accounts are blocked via maccPerms; block the precompile// address too, alongside the stock precompiles.blockedPrecompilesHex := append(vmtypes.AvailableStaticPrecompiles, gasconverter.PrecompileAddress)// power reduction — the evmd example sets AttoPowerReduction (1e18) for its// 18-decimal bond denom; with a 6-decimal bond denom every gentx fails at// genesis unless this is micro.sdk.DefaultPowerReduction = utils.MicroPowerReduction // 1e6
// genesis.json — staking/mint/gov stay on ustake; the EVM runs on astake"staking": { "params": { "bond_denom": "ustake" } },"mint": { "params": { "mint_denom": "ustake" } },"evm": { "params": { "evm_denom": "astake", "extended_denom_options": null } },"feemarket": { "params": { // quoted in astake units: ×10^12 the "no_base_fee": false, // ustake-equivalent values "base_fee": "10000000", "min_gas_price": "10000000" } },"bank": { "denom_metadata": [{ // x/vm derives decimals from the "base": "astake", "display": "gstake", // display unit's exponent — it must be 18 "denom_units": [ { "denom": "astake", "exponent": 0 }, { "denom": "gstake", "exponent": 18 } ] }] }
Balances are split across two denoms permanently: eth_getBalance shows only
astake; explorers and wallets should present ustake + astake/10¹² as one asset.
MetaMask pre-checks eth_getBalance ≥ fee + value locally and blocks zero-astake
senders regardless of chain rules. The ante + mempool changes cover raw-RPC and dApp
flows; wallet-first onboarding still needs a Cosmos-side path (fee-granted helper,
faucet, or dust airdrop at the upgrade).
Staking/distribution precompiles operate in 6-dec ustake while the rest of the EVM
is 18-dec astake; EVM stakers must withdraw() first. Rewards arrive in both
denoms (EVM fees in astake, inflation in ustake).
astake is IBC-transferable and becomes a distinct voucher from ustake on remote
chains; decide before launch whether to rate-limit or filter it.
Circulating supply is just supply(ustake); adding supply(astake)/10¹² double-counts
the escrow.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Cosmos Docs","description":"Developer documentation for the Cosmos stack. Build secure, reliable, and high-performance blockchains.","colors":{"primary":"#000000","light":"#cccccc","dark":"#0E0E0E"},"logo":{"light":"https://mintcdn.com/cosmos-docs/QQRcm34voxlHZJJD/assets/brand/cosmos-wordmark-dark.svg?fit=max\u0026auto=format\u0026n=QQRcm34voxlHZJJD\u0026q=85\u0026s=cd248dfba0e2e05e30786f2bb3f64fe9","dark":"https://mintcdn.com/cosmos-docs/QQRcm34voxlHZJJD/assets/brand/cosmos-wordmark.svg?fit=max\u0026auto=format\u0026n=QQRcm34voxlHZJJD\u0026q=85\u0026s=bec1c5143607bae16714a74214e59936"},"favicon":{"light":"https://mintcdn.com/cosmos-docs/QQRcm34voxlHZJJD/assets/brand/cosmos.svg?fit=max\u0026auto=format\u0026n=QQRcm34voxlHZJJD\u0026q=85\u0026s=894cf1378c2e13292b5729f71ffcdfa3","dark":"https://mintcdn.com/cosmos-docs/QQRcm34voxlHZJJD/assets/brand/cosmos-dark.svg?fit=max\u0026auto=format\u0026n=QQRcm34voxlHZJJD\u0026q=85\u0026s=84a9ac891f12ecddec2f5bbc50774eb1"},"appearance":{"default":"system","strict":false},"background":{"color":{"light":"#F1F1F1","dark":"#000000"}},"navbar":{"links":[{"href":"/sdk/latest/learn","label":"Cosmos SDK"},{"href":"/evm/latest/documentation/overview","label":"Cosmos EVM"},{"href":"https://ibcprotocol.dev/docs","label":"IBC"},{"href":"/cometbft/latest/docs/README","label":"CometBFT"}]},"footer":{"socials":{"twitter":"https://twitter.com/cosmos","github":"https://github.com/cosmos","discord":"https://discord.gg/interchain","website":"https://cosmos.network"},"links":[{"header":"Technology","items":[{"label":"Cosmos SDK","href":"/sdk/latest/learn"},{"label":"Cosmos EVM","href":"/evm"},{"label":"IBC","href":"https://ibcprotocol.dev/docs"},{"label":"CometBFT","href":"/cometbft"},{"label":"Cosmos Github","href":"https://github.com/cosmos"},{"label":"Cosmos HackerOne","href":"https://hackerone.com/cosmos"},{"label":"Skip Go","href":"/skip-go/general/getting-started"},{"label":"Cosmos Hub","href":"/hub/latest"}]},{"header":"Get In Touch","items":[{"label":"Developer Discord","href":"https://discord.gg/interchain"},{"label":"Community Telegram","href":"https://t.me/CosmosOG"},{"label":"Contact Us","href":"https://www.cosmoslabs.io/contact"},{"label":"Cosmos Website","href":"https://cosmos.network/"}]},{"header":"Legal","items":[{"label":"Privacy","href":"https://cosmos.network/privacy-policy"},{"label":"Trademark","href":"https://cosmos.network/trademark"},{"label":"Security Policy","href":"/sdk/latest/security/security-policy"},{"label":"Security Audits","href":"/sdk/latest/security/audits"},{"label":"Bug Bounty Program","href":"/sdk/latest/security/bug-bounty"}]}]},"search":{"prompt":"Search..."},"seo":{"metatags":{"description":"Developer documentation for the Cosmos stack. Build secure, reliable, and high-performance blockchains.","og:description":"Developer documentation for the Cosmos stack. Build secure, reliable, and high-performance blockchains.","twitter:description":"Developer documentation for the Cosmos stack. Build secure, reliable, and high-performance blockchains."}},"icons":{"library":"lucide"},"styling":{"codeblocks":{"theme":{"light":"github-light-high-contrast","dark":"github-dark-high-contrast"}},"latex":true},"integrations":{"gtm":{"tagId":"GTM-5XMZ695Z"}},"errors":{"404":{"redirect":false,"title":"Page not found","description":"The page you are looking for has either moved or doesn't exist anymore.\n\nPlease create an issue on the [Cosmos Docs GitHub repository](https://github.com/cosmos/docs/issues/new) to report the problem and it will be fixed as soon as possible."}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"interaction":{"drilldown":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"cosmos-docs","hasAudioNarration":false,"actualSubdomain":"cosmos-docs","customDomains":["docs.cosmos.network","cosmos.network"],"gitSource":{"type":"github","owner":"cosmos","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae4d7a84af72709c3cb8597","collectionId":"935d4ee8-69ed-48ea-88d5-81d6941678d2","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4d7a84af72709c3cb8597"},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae4d7a84af72709c3cb8597","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"Cosmos SDK","count":629},{"language":"default","tag":"API Reference","count":401},{"language":"default","tag":"CometBFT","count":236},{"language":"default","tag":"REST (gRPC Gateway)","count":216},{"language":"default","tag":"Documentation","count":154},{"language":"default","tag":"RPC Methods","count":120},{"language":"default","tag":"Cosmos Hub","count":106},{"language":"default","tag":"Info","count":91},{"language":"default","tag":"Architecture Reference","count":70},{"language":"default","tag":"Learn","count":69}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh0NSDulI.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh2dSDulI.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh0dSDulI.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh3tSDulI.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bhZ_Wmh2uX.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh09SDulI.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh3dSD.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh0NSDulI.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh2dSDulI.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh0dSDulI.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh3tSDulI.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bhZ_Wmh2uX.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh09SDulI.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh3dSD.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--background-light: 255 255 255}.bg-primary\\/10{background-color:#40b3ff}.dark .bg-primary\\/10{background-color:#4251fa}.bg-primary\\/10.text-primary,.bg-primary\\/10 .text-primary{color:white}.dark\\:bg-primary-light\\/10:is(.dark *){background-color:#4251fa}@font-face{font-family:'The Future';src:url('/assets/fonts/the-future-regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:'The Future';src:url('/assets/fonts/the-future-medium.woff2') format('woff2');font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:'The Future';src:url('/assets/fonts/the-future-bold.woff2') format('woff2');font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:'The Future';src:url('/assets/fonts/the-future-light.woff2') format('woff2');font-weight:300;font-style:normal;font-display:swap}body:has(#custom-index-content) header,body:has(#custom-index-content) #navbar,body:has(#custom-index-content) #header,body:has(#custom-index-content) nav[aria-label],body:has(#custom-index-content) button#search-bar-entry,body:has(#custom-index-content) button#search-bar-entry-mobile,body:has(#custom-index-content) #search-bar-entry,body:has(#custom-index-content) #search-bar-entry-mobile,body:has(#custom-index-content) .chat-assistant-floating-input,body:has(#custom-index-content) *:has(>.chat-assistant-floating-input){display:none!important;visibility:hidden!important;opacity:0!important;width:0!important;height:0!important;position:absolute!important;left:-99999px!important;pointer-events:none!important}body:has(#custom-index-content) #custom-index-content{font-family:'The Future', sans-serif}body:has(#custom-index-content) #custom-index-content h1,body:has(#custom-index-content) #custom-index-content h2,body:has(#custom-index-content) #custom-index-content h3,body:has(#custom-index-content) #custom-index-content p,body:has(#custom-index-content) #custom-index-content a{font-family:'The Future', sans-serif}@media (max-width: 768px){button[aria-label=\"More actions\"]{display:none!important}#custom-index-content{margin-top:-120px}}@media (min-width: 769px) and (max-width: 1023px){#custom-index-content{margin-top:-120px}}.prose p a,.prose li a,.prose ul a,.prose span a,.prose div[data-callout-type] a,.prose .callout a,.prose .info a,.prose .note a,.prose .warning a,.prose .tip a,.prose .steps a,.prose .step a,.prose [role=\"listitem\"] a{border-bottom-color:#0E0E0E!important;text-decoration-color:#0E0E0E!important}.dark .prose p a,.dark .prose li a,.dark .prose ul a,.dark .prose span a,.dark .prose div[data-callout-type] a,.dark .prose .callout a,.dark .prose .info a,.dark .prose .note a,.dark .prose .warning a,.dark .prose .tip a,.dark .prose .steps a,.dark .prose .step a,.dark .prose [role=\"listitem\"] a{border-bottom-color:#cccccc!important;text-decoration-color:#cccccc!important}.highlighted-card-bg{background-color:#FFB84D;position:relative;overflow:hidden;transition:box-shadow 0.3s ease-in-out}.highlighted-card-bg:hover{box-shadow:0 0 30px rgba(255, 184, 77, 0.5),\n 0 0 60px rgba(255, 184, 77, 0.3),\n 0 10px 40px rgba(255, 184, 77, 0.2)}.highlighted-card-bg::before{content:'';position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:linear-gradient(\n 45deg,\n transparent 30%,\n rgba(255, 255, 255, 0.4) 50%,\n transparent 70%\n );transform:translateX(-100%) translateY(-100%) rotate(45deg);transition:transform 0.6s ease-in-out}.highlighted-card-bg:hover::before{transform:translateX(100%) translateY(100%) rotate(45deg)}@layer utilities{body:has(#custom-index-content) #footer{display:flex!important}}pre,pre code,code{font-family:'Fira Code', 'Cascadia Code', 'JetBrains Mono', monospace!important}"}],"page":{"pagePath":"evm/next/documentation/migrations/gas-converter-migration","slug":"/evm/next/documentation/migrations/gas-converter-migration","pageMetadata":{"title":"Migrating off x/precisebank: Gas Converter Precompile","description":"Run an 18-decimal gas token alongside a 6-decimal staking denom using a converter precompile, replacing the deprecated x/precisebank module.","noindex":true,"canonical":"https://docs.cosmos.network/evm/latest/documentation/migrations/gas-converter-migration","href":"/evm/next/documentation/migrations/gas-converter-migration"},"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: \"Run an 18-decimal gas token alongside a 6-decimal staking denom using a converter precompile, replacing the deprecated x/precisebank module.\"\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={code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[`The code on this page is example code, not a production-ready implementation. It is not part of `,_jsx(_components.code,{children:`cosmos/evm`}),` and is not tested or maintained by the Cosmos EVM team. If you adopt this approach, the code lives in your application and you are responsible for auditing and maintaining it going forward.`]})}),`\n`,_jsxs(_components.p,{children:[`Applies to: chains on `,_jsx(_components.code,{children:`cosmos/evm`}),` v0.7.x+ with a 6-decimal staking denom.\nScope: every change lives in your application, no fork of `,_jsx(_components.code,{children:`cosmos/evm`}),` is needed.`]}),`\n`,_jsxs(_components.p,{children:[`Instead of scaling your 6-decimal denom (`,_jsx(_components.code,{children:`ustake`}),`) into the EVM, launch the EVM with a\nseparate, natively 18-decimal gas denom (`,_jsx(_components.code,{children:`astake`}),`). A precompile is the sole mint/burn\nauthority for `,_jsx(_components.code,{children:`astake`}),`, converting against escrowed `,_jsx(_components.code,{children:`ustake`}),` at a fixed rate:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-high-contrast github-dark-high-contrast`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#0e1116`,\"--shiki-dark\":`#f0f3f6`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`1 ustake = 10^12 astake`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`deposit: escrow ustake → mint ustakeAmount × 10^12 astake to caller`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`withdraw: burn astake → release astakeAmount ÷ 10^12 ustake to caller`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`astake`}),` is always fully collateralized. Assert this in your e2e tests (x/crisis is\ndeprecated):`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-high-contrast github-dark-high-contrast`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#0e1116`,\"--shiki-dark\":`#f0f3f6`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`supply(astake) == 10^12 × balance(gasconverter module account, \"ustake\")`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Staking, governance, inflation, and all existing balances stay on `,_jsx(_components.code,{children:`ustake`}),` untouched.\nBecause `,_jsx(_components.code,{children:`astake`}),` is a plain 18-decimal denom (`,_jsx(_components.code,{children:`EvmDenom == ExtendedDenom`}),`), `,_jsx(_components.code,{children:`x/vm`}),`’s\ndenom validation passes as-is, avoiding the scaled-denom machinery\n`,_jsx(_components.code,{children:`x/precisebank`}),` existed to support.`]}),`\n`,_jsx(Heading,{level:`2`,id:`solidity-interface`,children:`Solidity interface`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`solidity`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-high-contrast github-dark-high-contrast`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#0e1116`,\"--shiki-dark\":`#f0f3f6`},language:`solidity`,children:_jsxs(_components.code,{language:`solidity`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`interface`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` IGasConverter`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` function`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` deposit`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`uint256`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` ustakeAmount`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`external`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` returns`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` (`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`bool`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` function`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` withdraw`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`uint256`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` astakeAmount`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`external`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` returns`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` (`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`bool`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`); `}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// multiple of 1e12`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` event`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` Deposit`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`address`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` indexed`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` account`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`uint256`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` ustakeAmount`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`uint256`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` astakeAmount`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` event`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` Withdraw`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`address`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` indexed`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` account`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`uint256`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` astakeAmount`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`uint256`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` ustakeAmount`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Neither method is payable: `,_jsx(_components.code,{children:`ustake`}),` is not the EVM-native token, so it cannot travel as\n`,_jsx(_components.code,{children:`msg.value`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`precompile`,children:`Precompile`}),`\n`,_jsxs(_components.p,{children:[`Standard stateful precompile in your app (the `,_jsx(_components.code,{children:`distribution`}),` precompile is the\nreference structure), at a free address:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`56`,language:`go`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-high-contrast github-dark-high-contrast`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#0e1116`,\"--shiki-dark\":`#f0f3f6`},language:`go`,children:_jsxs(_components.code,{language:`go`,numberOfLines:`56`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`package`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` gasconverter`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`const`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` (`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` ModuleName`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` =`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` \"gasconverter\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` PrecompileAddress`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` =`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` \"0x0000000000000000000000000000000000000900\"`}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // stock set ends at 0x807`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`var`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` ScalingFactor `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` math.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewInt`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`1_000_000_000_000`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// The shared precompiles/common.BankKeeper deliberately lacks mint/burn;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// construct with the real bankkeeper.Keeper, which satisfies this superset.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`type`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` BankKeeper`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` interface`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` cmn`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`BankKeeper`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` SendCoinsFromAccountToModule`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`ctx`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`sender`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AccAddress`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`module`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` string`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`amt`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Coins`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`error`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` SendCoinsFromModuleToAccount`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`ctx`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`module`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` string`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`recipient`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AccAddress`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`amt`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Coins`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`error`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` MintCoins`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`ctx`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`module`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` string`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`amt`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Coins`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`error`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` BurnCoins`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`ctx`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`module`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` string`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`amt`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Coins`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`error`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`func`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` NewPrecompile`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`bankKeeper`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` BankKeeper`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`*`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Precompile`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` \u0026`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Precompile`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` Precompile: `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`cmn`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Precompile`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` KvGasConfig: storetypes.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`KVGasConfig`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` TransientKVGasConfig: storetypes.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`TransientGasConfig`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` ContractAddress: common.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`HexToAddress`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(PrecompileAddress),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // Replays bank events into the stateDB. It extracts only the EVM`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // denom, so the ustake legs journal as zero.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` BalanceHandlerFactory: cmn.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewBalanceHandlerFactory`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(bankKeeper),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` ABI: ABI,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` bankKeeper: bankKeeper,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`func`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` (`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`p Precompile`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) `}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Run`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`evm`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` *`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`vm`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`EVM`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`contract`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` *`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`vm`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Contract`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`readonly`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` bool`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) ([]`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`byte`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`error`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // RunNativeAction journals bank writes on the stateDB so mints revert with`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // the EVM tx. A mint that escapes a revert is an inflation bug; never`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // bypass this.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` p.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`RunNativeAction`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(evm, contract, `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`func`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`ctx`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) ([]`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`byte`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`error`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` p.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Execute`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ctx, evm.StateDB, contract, readonly)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` })`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// ConvertForFees is the deposit path, shared with the ante handler below.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`func`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` ConvertForFees`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`ctx`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`bk`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` BankKeeper`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`caller`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AccAddress`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`ustakeAmt`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` math`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Int`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`error`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` ustake `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` sdk.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewCoin`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"ustake\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, ustakeAmt)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` astake `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` sdk.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewCoin`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(evmtypes.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`GetEVMCoinDenom`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(), ustakeAmt.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Mul`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ScalingFactor))`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` if`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` err `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` bk.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`SendCoinsFromAccountToModule`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ctx, caller, ModuleName, sdk.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewCoins`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ustake)); err `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`!=`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` nil`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` err`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` if`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` err `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` bk.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`MintCoins`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ctx, ModuleName, sdk.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewCoins`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(astake)); err `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`!=`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` nil`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` err`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` bk.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`SendCoinsFromModuleToAccount`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ctx, ModuleName, caller, sdk.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewCoins`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(astake))`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`withdraw`}),` reverses the sequence (collect → `,_jsx(_components.code,{children:`BurnCoins`}),` → release) after rejecting\namounts not a multiple of `,_jsx(_components.code,{children:`ScalingFactor`}),`. The mint permission is the entire “module”,\nno AppModule, store key, or Msg service:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`go`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-high-contrast github-dark-high-contrast`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#0e1116`,\"--shiki-dark\":`#f0f3f6`},language:`go`,children:_jsxs(_components.code,{language:`go`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`var`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` maccPerms `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`=`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` map`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`[`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`string`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`][]`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`string`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` gasconverter.ModuleName: {authtypes.Minter, authtypes.Burner},`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`ante-handlers-own-the-chain`,children:`Ante handlers: own the chain`}),`\n`,_jsxs(_components.p,{children:[`Assemble your own ante router from the exported `,_jsx(_components.code,{children:`cosmos/evm`}),` decorators (copy the stock\nassembly) and make two changes.`]}),`\n`,_jsx(Heading,{level:`3`,id:`first-gas`,children:`First gas`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`ustake`}),`-only account cannot pay for the EVM tx that would give it\n`,_jsx(_components.code,{children:`astake`}),`. Front the fee in a decorator ahead of the unmodified mono decorator, whose\nbalance checks then see the converted funds:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`go`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-high-contrast github-dark-high-contrast`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#0e1116`,\"--shiki-dark\":`#f0f3f6`},language:`go`,children:_jsxs(_components.code,{language:`go`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`decorators `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` []`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AnteDecorator`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` NewGasConverterDepositDecorator`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(bankKeeper), `}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// below`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` evmante.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewEVMMonoDecorator`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(options.AccountKeeper, options.FeeMarketKeeper,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` options.EvmKeeper, options.MaxTxGasWanted, `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`\u0026`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`evmParams, `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`\u0026`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`feemarketParams),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` rootante.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewTxListenerDecorator`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(options.PendingTxListener),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`30`,language:`go`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-high-contrast github-dark-high-contrast`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#0e1116`,\"--shiki-dark\":`#f0f3f6`},language:`go`,children:_jsxs(_components.code,{language:`go`,numberOfLines:`30`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`func`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` (`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`d GasConverterDepositDecorator`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) `}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`AnteHandle`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`ctx`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`tx`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Tx`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`simulate`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` bool`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`next`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AnteHandler`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) (`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`error`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` _, ethTx, err `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` evmtypes.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`UnpackEthMsg`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(tx.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`GetMsgs`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`()[`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`0`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`])`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` if`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` err `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`!=`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` nil`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` ||`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` !`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`isDepositTx`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ethTx) { `}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// to == PrecompileAddress \u0026\u0026 selector == deposit \u0026\u0026 value == 0`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` next`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ctx, tx, simulate)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // This runs before the mono decorator's signature verification, so recover`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // the sender here. Fronting early is safe: an invalid signature makes the`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // mono decorator error, discarding the whole ante state, conversion included.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` signer `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` ethtypes.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`LatestSignerForChainID`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(evmtypes.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`GetEthChainConfig`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`().ChainID)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` from, err `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` ethtypes.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Sender`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(signer, ethTx)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` if`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` err `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`!=`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` nil`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` next`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ctx, tx, simulate)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // Convert only the shortfall; the fee is still secured before execution`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // (a reverting tx still pays), so there is no free-tx vector. The unspent`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // remainder stays with the sender as spendable astake.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` sender `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` sdk.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`AccAddress`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(from.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Bytes`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`())`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` cost `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` math.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewIntFromBigInt`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ethTx.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`GasFeeCap`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`()).`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`MulRaw`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`int64`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ethTx.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Gas`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`()))`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` short `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` cost.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Sub`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(d.bankKeeper.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`SpendableCoin`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ctx, sender, evmtypes.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`GetEVMCoinDenom`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`()).Amount)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` if`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` !`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`short.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`IsPositive`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` next`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ctx, tx, simulate)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` ustakeNeeded `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` short.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Add`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(gasconverter.ScalingFactor).`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`SubRaw`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`1`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`).`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Quo`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(gasconverter.ScalingFactor) `}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// ceil`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` if`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` err `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` gasconverter.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`ConvertForFees`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ctx, d.bankKeeper, sender, ustakeNeeded); err `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`!=`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` nil`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` ctx, err`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` next`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ctx, tx, simulate)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`cosmos-tx-fees`,children:`Cosmos tx fees`}),`\n`,_jsxs(_components.p,{children:[`In your Cosmos-tx chain, substitute a min-gas-price decorator that\nquotes both denoms, and a fee checker that prices `,_jsx(_components.code,{children:`ustake`}),` fees at the fixed rate:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`15`,language:`go`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-high-contrast github-dark-high-contrast`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#0e1116`,\"--shiki-dark\":`#f0f3f6`},language:`go`,children:_jsxs(_components.code,{language:`go`,numberOfLines:`15`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// min-gas-price decorator: accept either denom against feemarket MinGasPrice`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`minGasPrices `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`DecCoins`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {Denom: evmtypes.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`GetEVMCoinDenom`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(), Amount: minGasPrice}, `}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// e.g. 10^7`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {Denom: gasconverter.UnderlyingDenom, Amount: minGasPrice.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`QuoInt`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(gasconverter.ScalingFactor)}, `}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// e.g. 10^-5`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// fee checker: normalize before the EIP-1559 base-fee check and priority`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`underlyingFeeAmt `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` feeCoins.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`AmountOf`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(gasconverter.UnderlyingDenom)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`feeAmtDec `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` sdkmath.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`LegacyNewDecFromInt`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` feeCoins.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`AmountOf`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(denom).`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Add`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(underlyingFeeAmt.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Mul`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(gasconverter.ScalingFactor)))`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// ...`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`if`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` underlyingFeeAmt.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`IsPositive`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`() {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:` // Deduct exactly what was provided; the payer may hold no astake at all.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` effectiveFee `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` feeCoins`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Delegators and relayers then never need `,_jsx(_components.code,{children:`astake`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`mempool-wrap-the-vm-keeper-you-hand-to-it`,children:`Mempool: wrap the VM keeper you hand to it`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`cosmos/evm`}),` now runs an app-side EVM mempool, and the JSON-RPC server requires it.\nEVM txs enter the pool before any ante handler runs, so without this change the\nfirst-gas `,_jsx(_components.code,{children:`deposit()`}),` dies at the RPC with `,_jsx(_components.code,{children:`insufficient funds for gas * price + value: balance 0`}),`. Your app chooses the VM keeper the pool reads state through:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`34`,language:`go`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-high-contrast github-dark-high-contrast`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#0e1116`,\"--shiki-dark\":`#f0f3f6`},language:`go`,children:_jsxs(_components.code,{language:`go`,numberOfLines:`34`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// Pool admission values an account at its total convertible wealth. Only the`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// mempool reads through this wrapper; consensus, RPC balances, and the ante`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// use the real keeper. Admission becomes slightly optimistic (any ustake`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// holder passes the funding check); the ante enforces real payability at`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// execution, and the pool's recheck (which runs the ante) evicts the rest.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`type`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` convertibleBalanceKeeper`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` struct`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` evmmempool`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`VMKeeperI`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` bankKeeper `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`bankkeeper`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Keeper`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`func`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` (`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`k convertibleBalanceKeeper`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) `}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`GetAccount`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`ctx`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sdk`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Context`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`addr`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` common`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Address`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`) `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`*`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`statedb`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Account`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` acct `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` k.VMKeeperI.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`GetAccount`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ctx, addr)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` if`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` acct `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`==`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` nil`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` ||`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` acct.Balance `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`==`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` nil`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` acct`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` spendable `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` k.bankKeeper.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`SpendableCoin`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(ctx, sdk.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`AccAddress`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(addr.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Bytes`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`()), gasconverter.UnderlyingDenom)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` if`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` !`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`spendable.Amount.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`IsPositive`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` acct`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` aux, overflow `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` uint256.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`FromBig`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(spendable.Amount.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Mul`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(gasconverter.ScalingFactor).`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`BigInt`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`())`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` if`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` overflow {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` acct`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` augmented `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` *`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`acct`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` augmented.Balance `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`=`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` new`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`uint256`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Int`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` if`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` _, overflow `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` augmented.Balance.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`AddOverflow`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(acct.Balance, aux); overflow {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` acct`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` return`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` \u0026`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`augmented`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`mempool `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` evmmempool.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewMempool`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(app.CreateQueryContext, logger,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` convertibleBalanceKeeper`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`{VMKeeperI: app.EVMKeeper, bankKeeper: app.BankKeeper},`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` app.FeeMarketKeeper, app.txConfig, evmRechecker, cosmosRechecker, mpConfig, cosmosPoolMaxTx)`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`registration-and-genesis`,children:`Registration and genesis`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`21`,language:`go`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-high-contrast github-dark-high-contrast`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#0e1116`,\"--shiki-dark\":`#f0f3f6`},language:`go`,children:_jsxs(_components.code,{language:`go`,numberOfLines:`21`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// app.go — register alongside the stock set; the precompile address never`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// touches the library.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`staticPrecompiles `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` precompiletypes.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`DefaultStaticPrecompiles`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`/* stock args */`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`gc `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` gasconverter.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewPrecompile`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(app.BankKeeper)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`staticPrecompiles[gc.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Address`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`()] `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` gc`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`app.EVMKeeper `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` app.EVMKeeper.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`WithStaticPrecompiles`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(staticPrecompiles)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// genesis defaults — the default list ships WITHOUT your address, and a`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// missing entry makes calls no-op silently. 0x…0900 sorts after the stock`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// set, as params validation requires.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`evmGenState.Params.ActiveStaticPrecompiles `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`=`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` append`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` slices.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Clone`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(evmtypes.AvailableStaticPrecompiles), gasconverter.PrecompileAddress)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// blocklist — module accounts are blocked via maccPerms; block the precompile`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// address too, alongside the stock precompiles.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`blockedPrecompilesHex `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` append`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(vmtypes.AvailableStaticPrecompiles, gasconverter.PrecompileAddress)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// power reduction — the evmd example sets AttoPowerReduction (1e18) for its`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// 18-decimal bond denom; with a 6-decimal bond denom every gentx fails at`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// genesis unless this is micro.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`sdk.DefaultPowerReduction `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` utils.MicroPowerReduction `}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// 1e6`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`jsonc`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-high-contrast github-dark-high-contrast`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#0e1116`,\"--shiki-dark\":`#f0f3f6`},language:`jsonc`,children:_jsxs(_components.code,{language:`jsonc`,numberOfLines:`11`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// genesis.json — staking/mint/gov stay on ustake; the EVM runs on astake`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"staking\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: { `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"params\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: { `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"bond_denom\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"ustake\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` } },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"mint\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: { `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"params\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: { `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"mint_denom\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"ustake\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` } },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"evm\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: { `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"params\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: { `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"evm_denom\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"astake\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"extended_denom_options\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`null`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` } },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"feemarket\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: { `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"params\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: { `}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// quoted in astake units: ×10^12 the`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` \"no_base_fee\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`false`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// ustake-equivalent values`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` \"base_fee\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"10000000\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"min_gas_price\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"10000000\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` } },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"bank\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: { `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"denom_metadata\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: [{ `}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// x/vm derives decimals from the`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` \"base\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"astake\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"display\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"gstake\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// display unit's exponent — it must be 18`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` \"denom_units\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: [ { `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"denom\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"astake\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"exponent\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`0`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` { `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"denom\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"gstake\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`\"exponent\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`18`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` } ] }] }`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`caveats`,children:`Caveats`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Balances are split across two denoms permanently: `,_jsx(_components.code,{children:`eth_getBalance`}),` shows only\n`,_jsx(_components.code,{children:`astake`}),`; explorers and wallets should present `,_jsx(_components.code,{children:`ustake + astake/10¹²`}),` as one asset.`]}),`\n`,_jsxs(_components.li,{children:[`MetaMask pre-checks `,_jsx(_components.code,{children:`eth_getBalance ≥ fee + value`}),` locally and blocks zero-`,_jsx(_components.code,{children:`astake`}),`\nsenders regardless of chain rules. The ante + mempool changes cover raw-RPC and dApp\nflows; wallet-first onboarding still needs a Cosmos-side path (fee-granted helper,\nfaucet, or dust airdrop at the upgrade).`]}),`\n`,_jsxs(_components.li,{children:[`Staking/distribution precompiles operate in 6-dec `,_jsx(_components.code,{children:`ustake`}),` while the rest of the EVM\nis 18-dec `,_jsx(_components.code,{children:`astake`}),`; EVM stakers must `,_jsx(_components.code,{children:`withdraw()`}),` first. Rewards arrive in both\ndenoms (EVM fees in `,_jsx(_components.code,{children:`astake`}),`, inflation in `,_jsx(_components.code,{children:`ustake`}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`astake`}),` is IBC-transferable and becomes a distinct voucher from `,_jsx(_components.code,{children:`ustake`}),` on remote\nchains; decide before launch whether to rate-limit or filter it.`]}),`\n`,_jsxs(_components.li,{children:[`Circulating supply is just `,_jsx(_components.code,{children:`supply(ustake)`}),`; adding `,_jsx(_components.code,{children:`supply(astake)/10¹²`}),` double-counts\nthe escrow.`]}),`\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":{"codeStyling":{"theme":{"light":"github-light-high-contrast","dark":"github-dark-high-contrast"}},"config":{},"pageMetadata":{"title":"Migrating off x/precisebank: Gas Converter Precompile","description":"Run an 18-decimal gas token alongside a 6-decimal staking denom using a converter precompile, replacing the deprecated x/precisebank module.","noindex":true,"canonical":"https://docs.cosmos.network/evm/latest/documentation/migrations/gas-converter-migration","href":"/evm/next/documentation/migrations/gas-converter-migration"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Solidity interface","slug":"solidity-interface","depth":2,"children":[]},{"title":"Precompile","slug":"precompile","depth":2,"children":[]},{"title":"Ante handlers: own the chain","slug":"ante-handlers-own-the-chain","depth":2,"children":[{"title":"First gas","slug":"first-gas","depth":3,"children":[]},{"title":"Cosmos tx fees","slug":"cosmos-tx-fees","depth":3,"children":[]}]},{"title":"Mempool: wrap the VM keeper you hand to it","slug":"mempool-wrap-the-vm-keeper-you-hand-to-it","depth":2,"children":[]},{"title":"Registration and genesis","slug":"registration-and-genesis","depth":2,"children":[]},{"title":"Caveats","slug":"caveats","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"cosmos-docs","siteName":"Cosmos Docs","title":"Migrating off x/precisebank: Gas Converter Precompile - Cosmos Docs","navMaps":{"firstHrefInVersion":{"v0.7.0":{"href":"/evm/latest/documentation/migrations/gas-converter-migration","matchLevel":1},"next":{"href":"/evm/next/documentation/migrations/gas-converter-migration","matchLevel":0},"v0.6.0":{"href":"/evm/v0.6.0/documentation/migrations/migration-v0.6-to-v0.7","matchLevel":2},"v0.5.0":{"href":"/evm/v0.5.0/documentation/overview","matchLevel":4},"v0.4.x":{"href":"/evm/v0.4.x/documentation/overview","matchLevel":4},"v0.55":{"href":"/sdk/latest/learn","matchLevel":4},"v0.54":{"href":"/sdk/v0.54/learn","matchLevel":4},"v0.53":{"href":"/sdk/v0.53/learn","matchLevel":4},"v0.50":{"href":"/sdk/v0.50/learn","matchLevel":4},"v0.47":{"href":"/sdk/v0.47/learn","matchLevel":4},"v0.40":{"href":"/cometbft/latest/docs/README","matchLevel":4},"v0.39":{"href":"/cometbft/v0.39/docs/README","matchLevel":4},"v0.38":{"href":"/cometbft/v0.38/docs/README","matchLevel":4},"v0.37":{"href":"/cometbft/v0.37/docs/README","matchLevel":4},"Latest":{"href":"/hub/latest","matchLevel":4},"v25":{"href":"/hub/v25/index","matchLevel":4}},"firstHrefInLanguage":{}},"lastModified":"2026-07-13T13:32:01.703Z","originalFileLocation":"evm/next/documentation/migrations/gas-converter-migration.mdx"},"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=\"Run an 18-decimal gas token alongside a 6-decimal staking denom using a converter precompile, replacing the deprecated x/precisebank module.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Cosmos Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"noindex\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cosmos-docs/48l-dIoPdyiiCW5H/_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/cosmos-docs/48l-dIoPdyiiCW5H/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cosmos-docs/48l-dIoPdyiiCW5H/_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/cosmos-docs/48l-dIoPdyiiCW5H/_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/cosmos-docs/48l-dIoPdyiiCW5H/_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/cosmos-docs/48l-dIoPdyiiCW5H/_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/cosmos-docs/48l-dIoPdyiiCW5H/_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/cosmos-docs/48l-dIoPdyiiCW5H/_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/cosmos-docs/48l-dIoPdyiiCW5H/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Migrating off x/precisebank: Gas Converter Precompile - Cosmos Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Developer documentation for the Cosmos stack. Build secure, reliable, and high-performance blockchains.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Cosmos Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.cosmos.network/evm/latest/documentation/migrations/gas-converter-migration\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cosmos-docs.mintlify.app/_mintlify/api/og/v2?division=Migrations\u0026amp;title=Migrating+off+x%2Fprecisebank%3A+Gas+Converter+Precompile\u0026amp;description=Run+an+18-decimal+gas+token+alongside+a+6-decimal+staking+denom+using+a+converter+precompile%2C+replacing+the+deprecated+x%2Fprecisebank+module.\u0026amp;theme=fcf436d6188c17e0fd925a75\u0026amp;signature=d9b78bfaeba1147bb18482ca2b9bc37f0f129bc4bfc7569c48d3b78bfbf60eff\">\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=\"Migrating off x/precisebank: Gas Converter Precompile - Cosmos Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Developer documentation for the Cosmos stack. Build secure, reliable, and high-performance blockchains.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cosmos-docs.mintlify.app/_mintlify/api/og/v2?division=Migrations\u0026amp;title=Migrating+off+x%2Fprecisebank%3A+Gas+Converter+Precompile\u0026amp;description=Run+an+18-decimal+gas+token+alongside+a+6-decimal+staking+denom+using+a+converter+precompile%2C+replacing+the+deprecated+x%2Fprecisebank+module.\u0026amp;theme=fcf436d6188c17e0fd925a75\u0026amp;signature=d9b78bfaeba1147bb18482ca2b9bc37f0f129bc4bfc7569c48d3b78bfbf60eff\">\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/cosmos-docs/48l-dIoPdyiiCW5H/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Cosmos Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#000000\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.cosmos.network/evm/latest/documentation/migrations/gas-converter-migration\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/evm/next/documentation/migrations/gas-converter-migration.md\">","siteName":"Cosmos Docs","nav":{"global":null,"dropdowns":[{"dropdown":"Home","pages":[{"title":"Cosmos Developer Documentation","mode":"custom","href":""}]},{"dropdown":"Cosmos SDK","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cosmos-docs/assets/icons/cosmos-sdk.svg","versions":[{"version":"v0.55","default":true,"tag":"Latest","pages":[{"title":"v0.55","href":"/sdk/latest/learn"}]},{"version":"next","tag":"Unreleased","tabs":[{"tab":"Cosmos SDK","groups":[{"group":"Intro","icon":"earth","pages":[{"title":"Cosmos SDK Docs","href":"/sdk/next/learn"},{"title":"Start Here","icon":"play","href":"/sdk/next/learn/start-here"}]},{"group":"Overview","icon":"book-open","pages":[{"title":"The Cosmos Stack","href":"/sdk/next/learn/intro/cosmos-stack"},{"title":"What is the Cosmos SDK","href":"/sdk/next/learn/intro/overview"},{"title":"Blockchain Basics","href":"/sdk/next/learn/intro/blockchain-basics"},{"title":"Cosmos Architecture","href":"/sdk/next/learn/intro/sdk-app-architecture"}]},{"group":"Concepts","icon":"graduation-cap","pages":[{"group":"Fundamentals","pages":[{"title":"Accounts","href":"/sdk/next/learn/concepts/accounts"},{"title":"Transactions, Messages, and Queries","href":"/sdk/next/learn/concepts/transactions"},{"title":"Transaction Lifecycle","href":"/sdk/next/learn/concepts/lifecycle"}]},{"group":"Modules","pages":[{"title":"Intro to Modules","href":"/sdk/next/learn/concepts/modules"},{"title":"State, Storage, and Genesis","href":"/sdk/next/learn/concepts/store"},{"title":"Protobuf and Signing","href":"/sdk/next/learn/concepts/encoding"},{"title":"Execution Context, Gas, and Events","href":"/sdk/next/learn/concepts/context-gas-events"}]},{"group":"Cosmos SDK Internals","pages":[{"title":"Cosmos Blockchain Structure","href":"/sdk/next/learn/concepts/sdk-structure"},{"title":"BaseApp Overview","href":"/sdk/next/learn/concepts/baseapp"},{"title":"app.go Overview","href":"/sdk/next/learn/concepts/app-go"},{"title":"CLI, gRPC, and REST API","href":"/sdk/next/learn/concepts/cli-grpc-rest"},{"title":"Testing in the SDK","href":"/sdk/next/learn/concepts/testing"}]},{"title":"Release Families","href":"/sdk/next/release-family"}]},{"group":"Build a Chain","icon":"hammer","pages":[{"title":"Tutorial Intro","href":"/sdk/next/tutorials/example/00-overview"},{"title":"Prerequisites","href":"/sdk/next/tutorials/example/01-prerequisites"},{"title":"Chain Quickstart","href":"/sdk/next/tutorials/example/02-quickstart"},{"title":"Build a Module from Scratch","href":"/sdk/next/tutorials/example/03-build-a-module"},{"title":"Full Counter Module Walkthrough","href":"/sdk/next/tutorials/example/04-counter-walkthrough"},{"title":"Run, Test, and Configure","href":"/sdk/next/tutorials/example/05-run-and-test"}]},{"group":"Run a Node","icon":"server","pages":[{"title":"Node Tutorial","href":"/sdk/next/tutorials"},{"group":"Get Started","pages":[{"title":"Prerequisites","href":"/sdk/next/node/prerequisites"},{"title":"Setting up the keyring","href":"/sdk/next/node/keyring"},{"title":"Running a Node","href":"/sdk/next/node/run-node"},{"title":"Interacting with a Node","href":"/sdk/next/node/interact-node"},{"title":"Generating, Signing and Broadcasting Transactions","href":"/sdk/next/node/txs"}]},{"group":"Testnet \u0026 Production","pages":[{"title":"Running a Testnet","href":"/sdk/next/node/run-testnet"},{"title":"Running in Production","href":"/sdk/next/node/run-production"}]},{"group":"Key Rotation","pages":[{"title":"Key rotation","href":"/sdk/next/keys/key-rotation"},{"title":"Rotate a consensus key, Staking","href":"/sdk/next/keys/rotate-validator-key"},{"title":"Rotate a consensus key, PoA","href":"/sdk/next/keys/rotate-validator-key-poa"}]},{"group":"Post-quantum Keys","pages":[{"title":"Post-quantum keys","href":"/sdk/next/keys/post-quantum-keys"},{"title":"Enable ML-DSA keys","href":"/sdk/next/keys/enable-ml-dsa-keys"},{"title":"Migrate a validator to ML-DSA","href":"/sdk/next/keys/migrate-validator-ml-dsa"},{"title":"Create an ML-DSA account","href":"/sdk/next/keys/create-ml-dsa-account"}]},{"group":"Remote Signing: Cosmos-KMS","pages":[{"title":"Overview","href":"/sdk/next/kms/remote-signing"},{"title":"Remote signing tutorial","href":"/sdk/next/kms/tutorial-file-backend"},{"title":"Configure a signing backend","href":"/sdk/next/kms/configure-backend"},{"title":"Rotate a consensus key held in Cosmos-KMS","href":"/sdk/next/kms/rotate-key-remote-signer"},{"title":"Migrate from TMKMS","href":"/sdk/next/kms/migrate-from-tmkms"},{"title":"Cosmos-KMS configuration reference","href":"/sdk/next/kms/configuration-reference"},{"title":"Remote signing best practices","href":"/sdk/next/kms/best-practices"}]}]},{"group":"v0.55 Upgrade","icon":"upload","pages":[{"title":"v0.55 Release Notes","href":"/sdk/next/upgrade/v0.55-release"},{"title":"v0.55 Upgrade Guide","href":"/sdk/next/upgrade/v0.55"},{"title":"Changelog","mode":"wide","href":"/sdk/next/changelog/release-notes"},{"group":"Previous versions","pages":[{"title":"v0.54 Release Notes","href":"/sdk/next/upgrade/v0.54-release"},{"title":"v0.54 Upgrade Guide","href":"/sdk/next/upgrade/v0.54"}]}]},{"group":"In-depth Guides","icon":"map","pages":[{"title":"Guides Overview","href":"/sdk/next/guides/guides"},{"group":"Module Design","pages":[{"title":"Module Design Considerations","href":"/sdk/next/guides/module-design/module-design-considerations"},{"title":"Object-Capability Model","href":"/sdk/next/guides/module-design/ocap"}]},{"group":"ABCI","pages":[{"title":"ABCI Overview","href":"/sdk/next/guides/abci/abci"},{"title":"Application Mempool","href":"/sdk/next/guides/abci/app-mempool"},{"title":"Vote Extensions","href":"/sdk/next/guides/abci/vote-extensions"},{"title":"Block-STM: Parallel Transaction Execution","href":"/sdk/next/experimental/blockstm"}]},{"group":"Tooling \u0026 CLI","pages":[{"title":"Tool Guide","href":"/sdk/next/guides/tooling/tool-guide"},{"title":"Writing CLI Commands","href":"/sdk/next/guides/tooling/autocli"},{"title":"Confix","href":"/sdk/next/guides/tooling/confix"}]},{"group":"State","pages":[{"title":"Module Store Internals","href":"/sdk/next/guides/state/store"},{"title":"Collections API","href":"/sdk/next/guides/state/collections"}]},{"group":"Upgrades \u0026 Migrations","pages":[{"title":"Upgrades and Store Migrations","href":"/sdk/next/guides/upgrades/upgrade"},{"title":"Cosmovisor","href":"/sdk/next/guides/upgrades/cosmovisor"}]},{"group":"Testing and Observability","pages":[{"title":"Module Simulation","href":"/sdk/next/guides/testing/simulator"},{"title":"Telemetry","href":"/sdk/next/guides/testing/telemetry"},{"title":"Log v2","href":"/sdk/next/guides/testing/log"}]}]},{"group":"Developer Reference","icon":"code","pages":[{"title":"SDK Go Packages","href":"/sdk/next/guides/reference/packages"},{"title":"Address Encoding","href":"/sdk/next/guides/reference/bech32"},{"title":"Protobuf Annotations","href":"/sdk/next/guides/reference/protobuf-annotations"},{"title":"Cosmos Protobuf Docs","url":"https://buf.build/cosmos/cosmos-sdk/docs/main","href":"/sdk/next/guides/reference/proto-docs"},{"title":"Cosmos SDK Repository","url":"https://github.com/cosmos/cosmos-sdk","href":"/sdk/next/reference/cosmos-sdk-repo"},{"title":"Tutorial Example Repository","url":"https://github.com/cosmos/example","href":"/sdk/next/reference/example-repo"}]},{"group":"Modules","icon":"puzzle","pages":[{"title":"Module Directory","href":"/sdk/next/modules/modules"},{"group":"Open-source Modules","pages":[{"group":"x/auth","pages":[{"title":"x/auth","href":"/sdk/next/modules/auth/auth"},{"title":"x/auth/vesting","href":"/sdk/next/modules/auth/vesting"},{"title":"x/auth/tx","href":"/sdk/next/modules/auth/tx"}]},{"title":"x/authz","href":"/sdk/next/modules/authz/README"},{"title":"x/bank","href":"/sdk/next/modules/bank/README"},{"title":"x/consensus","href":"/sdk/next/modules/consensus/README"},{"title":"x/crisis","href":"/sdk/next/modules/crisis/README"},{"title":"x/distribution","href":"/sdk/next/modules/distribution/README"},{"title":"x/epochs","href":"/sdk/next/modules/epochs/README"},{"title":"x/evidence","href":"/sdk/next/modules/evidence/README"},{"title":"x/feegrant","href":"/sdk/next/modules/feegrant/README"},{"title":"x/gov","href":"/sdk/next/modules/gov/README"},{"title":"x/group","href":"/sdk/next/modules/group/README"},{"title":"x/mint","href":"/sdk/next/modules/mint/README"},{"title":"x/nft","href":"/sdk/next/modules/nft/README"},{"title":"x/params","href":"/sdk/next/modules/params/README"},{"title":"x/slashing","href":"/sdk/next/modules/slashing/README"},{"title":"x/staking","href":"/sdk/next/modules/staking/README"},{"title":"x/upgrade","href":"/sdk/next/modules/upgrade/README"},{"title":"x/circuit","href":"/sdk/next/modules/circuit/README"},{"title":"x/genutil","href":"/sdk/next/modules/genutil/README"}]},{"group":"Cosmos Enterprise Modules","pages":[{"title":"Overview","href":"/sdk/next/enterprise/overview"},{"group":"Permissioned Consensus","pages":[{"title":"Overview","href":"/sdk/next/enterprise/poa/overview"},{"title":"Architecture","href":"/sdk/next/enterprise/poa/architecture"},{"title":"Governance Integration","href":"/sdk/next/enterprise/poa/governance"},{"title":"API Reference","href":"/sdk/next/enterprise/poa/api"},{"title":"Fee Distribution","href":"/sdk/next/enterprise/poa/distribution"}]},{"group":"Multi-sig","pages":[{"title":"Overview","href":"/sdk/next/enterprise/group/overview"},{"title":"Architecture","href":"/sdk/next/enterprise/group/architecture"},{"title":"API Reference","href":"/sdk/next/enterprise/group/api"}]}]}]},{"group":"Architecture Reference","icon":"building-2","pages":[{"group":"ADRs","pages":[{"title":"Architecture Decision Records (ADR)","href":"/sdk/next/reference/architecture/README"},{"title":"ADR Creation Process","href":"/sdk/next/reference/architecture/PROCESS"},{"title":"ADR 002: SDK Documentation Structure","href":"/sdk/next/reference/architecture/adr-002-docs-structure"},{"title":"ADR 003: Dynamic Capability Store","href":"/sdk/next/reference/architecture/adr-003-dynamic-capability-store"},{"title":"ADR 004: Split Denomination Keys","href":"/sdk/next/reference/architecture/adr-004-split-denomination-keys"},{"title":"ADR 006: Secret Store Replacement","href":"/sdk/next/reference/architecture/adr-006-secret-store-replacement"},{"title":"ADR 007: Specialization Groups","href":"/sdk/next/reference/architecture/adr-007-specialization-groups"},{"title":"ADR 008: Decentralized Computer Emergency Response Team (dCERT) Group","href":"/sdk/next/reference/architecture/adr-008-dCERT-group"},{"title":"ADR 009: Evidence Module","href":"/sdk/next/reference/architecture/adr-009-evidence-module"},{"title":"ADR 010: Modular AnteHandler","href":"/sdk/next/reference/architecture/adr-010-modular-antehandler"},{"title":"ADR 011: Generalize Genesis Accounts","href":"/sdk/next/reference/architecture/adr-011-generalize-genesis-accounts"},{"title":"ADR 012: State Accessors","href":"/sdk/next/reference/architecture/adr-012-state-accessors"},{"title":"ADR 013: Observability","href":"/sdk/next/reference/architecture/adr-013-metrics"},{"title":"ADR 14: Proportional Slashing","href":"/sdk/next/reference/architecture/adr-014-proportional-slashing"},{"title":"ADR 016: Validator Consensus Key Rotation","href":"/sdk/next/reference/architecture/adr-016-validator-consensus-key-rotation"},{"title":"ADR 17: Historical Header Module","href":"/sdk/next/reference/architecture/adr-017-historical-header-module"},{"title":"ADR 18: Extendable Voting Periods","href":"/sdk/next/reference/architecture/adr-018-extendable-voting-period"},{"title":"ADR 019: Protocol Buffer State Encoding","href":"/sdk/next/reference/architecture/adr-019-protobuf-state-encoding"},{"title":"ADR 020: Protocol Buffer Transaction Encoding","href":"/sdk/next/reference/architecture/adr-020-protobuf-transaction-encoding"},{"title":"ADR 021: Protocol Buffer Query Encoding","href":"/sdk/next/reference/architecture/adr-021-protobuf-query-encoding"},{"title":"ADR 022: Custom BaseApp panic handling","href":"/sdk/next/reference/architecture/adr-022-custom-panic-handling"},{"title":"ADR 023: Protocol Buffer Naming and Versioning Conventions","href":"/sdk/next/reference/architecture/adr-023-protobuf-naming"},{"title":"ADR 024: Coin Metadata","href":"/sdk/next/reference/architecture/adr-024-coin-metadata"},{"title":"ADR 027: Deterministic Protobuf Serialization","href":"/sdk/next/reference/architecture/adr-027-deterministic-protobuf-serialization"},{"title":"ADR 028: Public Key Addresses","href":"/sdk/next/reference/architecture/adr-028-public-key-addresses"},{"title":"ADR 029: Fee Grant Module","href":"/sdk/next/reference/architecture/adr-029-fee-grant-module"},{"title":"ADR 030: Authorization Module","href":"/sdk/next/reference/architecture/adr-030-authz-module"},{"title":"ADR 031: Protobuf Msg Services","href":"/sdk/next/reference/architecture/adr-031-msg-service"},{"title":"ADR 032: Typed Events","href":"/sdk/next/reference/architecture/adr-032-typed-events"},{"title":"ADR 033: Protobuf-based Inter-Module Communication","href":"/sdk/next/reference/architecture/adr-033-protobuf-inter-module-comm"},{"title":"ADR 034: Account Rekeying","href":"/sdk/next/reference/architecture/adr-034-account-rekeying"},{"title":"ADR 035: Rosetta API Support","href":"/sdk/next/reference/architecture/adr-035-rosetta-api-support"},{"title":"ADR 036: Arbitrary Message Signature Specification","href":"/sdk/next/reference/architecture/adr-036-arbitrary-signature"},{"title":"ADR 037: Governance split votes","href":"/sdk/next/reference/architecture/adr-037-gov-split-vote"},{"title":"ADR 038: KVStore state listening","href":"/sdk/next/reference/architecture/adr-038-state-listening"},{"title":"ADR 039: Epoched Staking","href":"/sdk/next/reference/architecture/adr-039-epoched-staking"},{"title":"ADR 040: Storage and SMT State Commitments","href":"/sdk/next/reference/architecture/adr-040-storage-and-smt-state-commitments"},{"title":"ADR 041: In-Place Store Migrations","href":"/sdk/next/reference/architecture/adr-041-in-place-store-migrations"},{"title":"ADR 042: Group Module","href":"/sdk/next/reference/architecture/adr-042-group-module"},{"title":"ADR 43: NFT Module","href":"/sdk/next/reference/architecture/adr-043-nft-module"},{"title":"ADR 044: Guidelines for Updating Protobuf Definitions","href":"/sdk/next/reference/architecture/adr-044-protobuf-updates-guidelines"},{"title":null,"href":"/sdk/next/reference/architecture/adr-045-check-delivertx-middlewares"},{"title":"ADR 046: Module Params","href":"/sdk/next/reference/architecture/adr-046-module-params"},{"title":"ADR 047: Extend Upgrade Plan","href":"/sdk/next/reference/architecture/adr-047-extend-upgrade-plan"},{"title":"ADR 048: Multi Tire Gas Price System","href":"/sdk/next/reference/architecture/adr-048-consensus-fees"},{"title":"ADR 049: State Sync Hooks","href":"/sdk/next/reference/architecture/adr-049-state-sync-hooks"},{"title":"ADR 050: SIGN_MODE_TEXTUAL: Annex 1 Value Renderers","href":"/sdk/next/reference/architecture/adr-050-sign-mode-textual-annex1"},{"title":"ADR 050: SIGN_MODE_TEXTUAL: Annex 2 Device Rendering","href":"/sdk/next/reference/architecture/adr-050-sign-mode-textual-annex2"},{"title":"ADR 050: SIGN_MODE_TEXTUAL","href":"/sdk/next/reference/architecture/adr-050-sign-mode-textual"},{"title":"ADR 053: Go Module Refactoring","href":"/sdk/next/reference/architecture/adr-053-go-module-refactoring"},{"title":"ADR 054: Semver Compatible SDK Modules","href":"/sdk/next/reference/architecture/adr-054-semver-compatible-modules"},{"title":"ADR 055: ORM","href":"/sdk/next/reference/architecture/adr-055-orm"},{"title":"ADR 057: App Wiring","href":"/sdk/next/reference/architecture/adr-057-app-wiring"},{"title":"ADR 058: Auto-Generated CLI","href":"/sdk/next/reference/architecture/adr-058-auto-generated-cli"},{"title":"ADR 059: Test Scopes","href":"/sdk/next/reference/architecture/adr-059-test-scopes"},{"title":"ADR 60: ABCI 1.0 Integration (Phase I)","href":"/sdk/next/reference/architecture/adr-060-abci-1.0"},{"title":"ADR ADR-061: Liquid Staking","href":"/sdk/next/reference/architecture/adr-061-liquid-staking"},{"title":"ADR 062: Collections, a simplified storage layer for cosmos-sdk modules.","href":"/sdk/next/reference/architecture/adr-062-collections-state-layer"},{"title":"ADR 063: Core Module API","href":"/sdk/next/reference/architecture/adr-063-core-module-api"},{"title":"ADR 64: ABCI 2.0 Integration (Phase II)","href":"/sdk/next/reference/architecture/adr-064-abci-2.0"},{"title":"ADR-065: Store V2","href":"/sdk/next/reference/architecture/adr-065-store-v2"},{"title":"ADR 068: Preblock","href":"/sdk/next/reference/architecture/adr-068-preblock"},{"title":"ADR 070: Unordered Transactions","href":"/sdk/next/reference/architecture/adr-070-unordered-account"},{"title":"Cosmos SDK Transaction Malleability Risk Review and Recommendations","href":"/sdk/next/reference/architecture/adr-076-tx-malleability"}]},{"group":"RFCs","pages":[{"title":"Requests for Comments","href":"/sdk/next/reference/rfc/README"},{"title":"RFC Creation Process","href":"/sdk/next/reference/rfc/PROCESS"},{"title":"RFC 001: Transaction Validation","href":"/sdk/next/reference/rfc/rfc-001-tx-validation"}]},{"group":"Specifications","pages":[{"title":"Specifications","href":"/sdk/next/reference/spec/README"},{"title":"Specification of Modules","href":"/sdk/next/reference/spec/SPEC_MODULE"},{"title":"What is an SDK standard?","href":"/sdk/next/reference/spec/SPEC_STANDARD"}]}]},{"group":"Security","icon":"shield","pages":[{"title":"Security and Maintenance Policy","href":"/sdk/next/security/security-policy"},{"title":"Bug Bounty Program","href":"/sdk/next/security/bug-bounty"},{"group":"Audits","pages":[{"title":"Security Audits","href":"/sdk/next/security/audits"},{"title":"Internal Audit Process","href":"/sdk/next/security/internal-audits"}]}]}]},{"tab":"Release Notes","pages":[{"title":"v0.55 Release Notes","href":"/sdk/next/upgrade/v0.55-release"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API Reference","href":"/sdk/next/api-reference/index"},{"title":"Sending Transactions","href":"/sdk/next/api-reference/transactions"}]},{"group":"gRPC Services","pages":[{"title":"gRPC Services","href":"/sdk/next/api-reference/grpc/index"},{"title":"Auth","href":"/sdk/next/api-reference/grpc/auth"},{"title":"Authz","href":"/sdk/next/api-reference/grpc/authz"},{"title":"Autocli","href":"/sdk/next/api-reference/grpc/autocli"},{"title":"Bank","href":"/sdk/next/api-reference/grpc/bank"},{"title":"Base","href":"/sdk/next/api-reference/grpc/base"},{"title":"Consensus","href":"/sdk/next/api-reference/grpc/consensus"},{"title":"Counter","href":"/sdk/next/api-reference/grpc/counter"},{"title":"Distribution","href":"/sdk/next/api-reference/grpc/distribution"},{"title":"Epochs","href":"/sdk/next/api-reference/grpc/epochs"},{"title":"Evidence","href":"/sdk/next/api-reference/grpc/evidence"},{"title":"Feegrant","href":"/sdk/next/api-reference/grpc/feegrant"},{"title":"Gov","href":"/sdk/next/api-reference/grpc/gov"},{"title":"Mint","href":"/sdk/next/api-reference/grpc/mint"},{"title":"Reflection","href":"/sdk/next/api-reference/grpc/reflection"},{"title":"Slashing","href":"/sdk/next/api-reference/grpc/slashing"},{"title":"Staking","href":"/sdk/next/api-reference/grpc/staking"},{"title":"Store","href":"/sdk/next/api-reference/grpc/store"},{"title":"Tx","href":"/sdk/next/api-reference/grpc/tx"},{"title":"Upgrade","href":"/sdk/next/api-reference/grpc/upgrade"},{"title":"Vesting","href":"/sdk/next/api-reference/grpc/vesting"}]},{"group":"REST (gRPC Gateway)","pages":[{"group":"auth","pages":[{"title":"AccountInfo","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/account_info/{address}","href":"/sdk/next/api-reference/rest/auth/accountinfo"},{"title":"Accounts","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/accounts","href":"/sdk/next/api-reference/rest/auth/accounts"},{"title":"Account","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/accounts/{address}","href":"/sdk/next/api-reference/rest/auth/account"},{"title":"AccountAddressByID","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/address_by_id/{accountId}","href":"/sdk/next/api-reference/rest/auth/accountaddressbyid"},{"title":"Bech32Prefix","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/bech32","href":"/sdk/next/api-reference/rest/auth/bech32prefix"},{"title":"AddressBytesToString","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/bech32/{addressBytes}","href":"/sdk/next/api-reference/rest/auth/addressbytestostring"},{"title":"ModuleAccounts","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/module_accounts","href":"/sdk/next/api-reference/rest/auth/moduleaccounts"},{"title":"ModuleAccountByName","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/module_accounts/{name}","href":"/sdk/next/api-reference/rest/auth/moduleaccountbyname"},{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/params","href":"/sdk/next/api-reference/rest/auth/params"}]},{"group":"authz","pages":[{"title":"Grants","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/authz/v1beta1/grants","href":"/sdk/next/api-reference/rest/authz/grants"},{"title":"GranteeGrants","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/authz/v1beta1/grants/grantee/{grantee}","href":"/sdk/next/api-reference/rest/authz/granteegrants"},{"title":"GranterGrants","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/authz/v1beta1/grants/granter/{granter}","href":"/sdk/next/api-reference/rest/authz/grantergrants"}]},{"group":"bank","pages":[{"title":"AllBalances","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/balances/{address}","href":"/sdk/next/api-reference/rest/bank/allbalances"},{"title":"Balance","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/balances/{address}/by_denom","href":"/sdk/next/api-reference/rest/bank/balance"},{"title":"DenomOwners","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/denom_owners/{denom}","href":"/sdk/next/api-reference/rest/bank/denomowners"},{"title":"DenomOwnersByQuery","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/denom_owners_by_query","href":"/sdk/next/api-reference/rest/bank/denomownersbyquery"},{"title":"DenomsMetadata","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/denoms_metadata","href":"/sdk/next/api-reference/rest/bank/denomsmetadata"},{"title":"DenomMetadata","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/denoms_metadata/{denom}","href":"/sdk/next/api-reference/rest/bank/denommetadata"},{"title":"DenomMetadataByQueryString","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/denoms_metadata_by_query_string","href":"/sdk/next/api-reference/rest/bank/denommetadatabyquerystring"},{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/params","href":"/sdk/next/api-reference/rest/bank/params"},{"title":"SendEnabled","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/send_enabled","href":"/sdk/next/api-reference/rest/bank/sendenabled"},{"title":"SpendableBalances","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/spendable_balances/{address}","href":"/sdk/next/api-reference/rest/bank/spendablebalances"},{"title":"SpendableBalanceByDenom","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/spendable_balances/{address}/by_denom","href":"/sdk/next/api-reference/rest/bank/spendablebalancebydenom"},{"title":"TotalSupply","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/supply","href":"/sdk/next/api-reference/rest/bank/totalsupply"},{"title":"SupplyOf","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/supply/by_denom","href":"/sdk/next/api-reference/rest/bank/supplyof"}]},{"group":"base","pages":[{"title":"Config","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/base/node/v1beta1/config","href":"/sdk/next/api-reference/rest/base/config"},{"title":"Status","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/base/node/v1beta1/status","href":"/sdk/next/api-reference/rest/base/status"},{"title":"ABCIQuery","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/abci_query","href":"/sdk/next/api-reference/rest/base/abciquery"},{"title":"GetLatestBlockResults","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/block_results/latest","href":"/sdk/next/api-reference/rest/base/getlatestblockresults"},{"title":"GetBlockResults","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/block_results/{height}","href":"/sdk/next/api-reference/rest/base/getblockresults"},{"title":"GetLatestBlock","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/blocks/latest","href":"/sdk/next/api-reference/rest/base/getlatestblock"},{"title":"GetBlockByHeight","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/blocks/{height}","href":"/sdk/next/api-reference/rest/base/getblockbyheight"},{"title":"GetNodeInfo","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/node_info","href":"/sdk/next/api-reference/rest/base/getnodeinfo"},{"title":"GetSyncing","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/syncing","href":"/sdk/next/api-reference/rest/base/getsyncing"},{"title":"GetLatestValidatorSet","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/validatorsets/latest","href":"/sdk/next/api-reference/rest/base/getlatestvalidatorset"},{"title":"GetValidatorSetByHeight","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/validatorsets/{height}","href":"/sdk/next/api-reference/rest/base/getvalidatorsetbyheight"}]},{"group":"consensus","pages":[{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/consensus/v1/params","href":"/sdk/next/api-reference/rest/consensus/params"}]},{"group":"distribution","pages":[{"title":"CommunityPool","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/community_pool","href":"/sdk/next/api-reference/rest/distribution/communitypool"},{"title":"DelegationTotalRewards","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/delegators/{delegatorAddress}/rewards","href":"/sdk/next/api-reference/rest/distribution/delegationtotalrewards"},{"title":"DelegationRewards","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/delegators/{delegatorAddress}/rewards/{validatorAddress}","href":"/sdk/next/api-reference/rest/distribution/delegationrewards"},{"title":"DelegatorStartingInfo","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/delegators/{delegatorAddress}/starting_info/{validatorAddress}","href":"/sdk/next/api-reference/rest/distribution/delegatorstartinginfo"},{"title":"DelegatorValidators","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/delegators/{delegatorAddress}/validators","href":"/sdk/next/api-reference/rest/distribution/delegatorvalidators"},{"title":"DelegatorWithdrawAddress","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/delegators/{delegatorAddress}/withdraw_address","href":"/sdk/next/api-reference/rest/distribution/delegatorwithdrawaddress"},{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/params","href":"/sdk/next/api-reference/rest/distribution/params"},{"title":"ValidatorDistributionInfo","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/validators/{validatorAddress}","href":"/sdk/next/api-reference/rest/distribution/validatordistributioninfo"},{"title":"ValidatorCommission","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/validators/{validatorAddress}/commission","href":"/sdk/next/api-reference/rest/distribution/validatorcommission"},{"title":"ValidatorCurrentRewards","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/validators/{validatorAddress}/current_rewards","href":"/sdk/next/api-reference/rest/distribution/validatorcurrentrewards"},{"title":"ValidatorHistoricalRewards","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/validators/{validatorAddress}/historical_rewards/{period}","href":"/sdk/next/api-reference/rest/distribution/validatorhistoricalrewards"},{"title":"ValidatorOutstandingRewards","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/validators/{validatorAddress}/outstanding_rewards","href":"/sdk/next/api-reference/rest/distribution/validatoroutstandingrewards"},{"title":"ValidatorSlashes","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/validators/{validatorAddress}/slashes","href":"/sdk/next/api-reference/rest/distribution/validatorslashes"}]},{"group":"epochs","pages":[{"title":"CurrentEpoch","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/epochs/v1beta1/current_epoch","href":"/sdk/next/api-reference/rest/epochs/currentepoch"},{"title":"EpochInfos","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/epochs/v1beta1/epochs","href":"/sdk/next/api-reference/rest/epochs/epochinfos"}]},{"group":"evidence","pages":[{"title":"AllEvidence","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/evidence/v1beta1/evidence","href":"/sdk/next/api-reference/rest/evidence/allevidence"},{"title":"Evidence","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/evidence/v1beta1/evidence/{hash}","href":"/sdk/next/api-reference/rest/evidence/evidence"}]},{"group":"feegrant","pages":[{"title":"Allowance","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}","href":"/sdk/next/api-reference/rest/feegrant/allowance"},{"title":"Allowances","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/feegrant/v1beta1/allowances/{grantee}","href":"/sdk/next/api-reference/rest/feegrant/allowances"},{"title":"AllowancesByGranter","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/feegrant/v1beta1/issued/{granter}","href":"/sdk/next/api-reference/rest/feegrant/allowancesbygranter"}]},{"group":"gov","pages":[{"title":"Constitution","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1/constitution","href":"/sdk/next/api-reference/rest/gov/constitution"},{"title":"Params (v1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1/params/{paramsType}","href":"/sdk/next/api-reference/rest/gov/params-v1"},{"title":"Proposals (v1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals","href":"/sdk/next/api-reference/rest/gov/proposals-v1"},{"title":"Proposal (v1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}","href":"/sdk/next/api-reference/rest/gov/proposal-v1"},{"title":"Deposits (v1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}/deposits","href":"/sdk/next/api-reference/rest/gov/deposits-v1"},{"title":"Deposit (Query, v1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}/deposits/{depositor}","href":"/sdk/next/api-reference/rest/gov/deposit-query-v1"},{"title":"TallyResult (v1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}/tally","href":"/sdk/next/api-reference/rest/gov/tallyresult-v1"},{"title":"Votes (v1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}/votes","href":"/sdk/next/api-reference/rest/gov/votes-v1"},{"title":"Vote (Query, v1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}/votes/{voter}","href":"/sdk/next/api-reference/rest/gov/vote-query-v1"},{"title":"Params (v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/params/{paramsType}","href":"/sdk/next/api-reference/rest/gov/params-v1beta1"},{"title":"Proposals (v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals","href":"/sdk/next/api-reference/rest/gov/proposals-v1beta1"},{"title":"Proposal (v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals/{proposalId}","href":"/sdk/next/api-reference/rest/gov/proposal-v1beta1"},{"title":"Deposits (v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals/{proposalId}/deposits","href":"/sdk/next/api-reference/rest/gov/deposits-v1beta1"},{"title":"Deposit (Query, v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals/{proposalId}/deposits/{depositor}","href":"/sdk/next/api-reference/rest/gov/deposit-query-v1beta1"},{"title":"TallyResult (v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals/{proposalId}/tally","href":"/sdk/next/api-reference/rest/gov/tallyresult-v1beta1"},{"title":"Votes (v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals/{proposalId}/votes","href":"/sdk/next/api-reference/rest/gov/votes-v1beta1"},{"title":"Vote (Query, v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals/{proposalId}/votes/{voter}","href":"/sdk/next/api-reference/rest/gov/vote-query-v1beta1"}]},{"group":"mint","pages":[{"title":"AnnualProvisions","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/mint/v1beta1/annual_provisions","href":"/sdk/next/api-reference/rest/mint/annualprovisions"},{"title":"Inflation","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/mint/v1beta1/inflation","href":"/sdk/next/api-reference/rest/mint/inflation"},{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/mint/v1beta1/params","href":"/sdk/next/api-reference/rest/mint/params"}]},{"group":"slashing","pages":[{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/slashing/v1beta1/params","href":"/sdk/next/api-reference/rest/slashing/params"},{"title":"SigningInfos","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/slashing/v1beta1/signing_infos","href":"/sdk/next/api-reference/rest/slashing/signinginfos"},{"title":"SigningInfo","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/slashing/v1beta1/signing_infos/{consAddress}","href":"/sdk/next/api-reference/rest/slashing/signinginfo"}]},{"group":"staking","pages":[{"title":"DelegatorDelegations","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/delegations/{delegatorAddr}","href":"/sdk/next/api-reference/rest/staking/delegatordelegations"},{"title":"Redelegations","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/delegators/{delegatorAddr}/redelegations","href":"/sdk/next/api-reference/rest/staking/redelegations"},{"title":"DelegatorUnbondingDelegations","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/delegators/{delegatorAddr}/unbonding_delegations","href":"/sdk/next/api-reference/rest/staking/delegatorunbondingdelegations"},{"title":"DelegatorValidators","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/delegators/{delegatorAddr}/validators","href":"/sdk/next/api-reference/rest/staking/delegatorvalidators"},{"title":"DelegatorValidator","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/delegators/{delegatorAddr}/validators/{validatorAddr}","href":"/sdk/next/api-reference/rest/staking/delegatorvalidator"},{"title":"HistoricalInfo","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/historical_info/{height}","href":"/sdk/next/api-reference/rest/staking/historicalinfo"},{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/params","href":"/sdk/next/api-reference/rest/staking/params"},{"title":"Pool","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/pool","href":"/sdk/next/api-reference/rest/staking/pool"},{"title":"Validators","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/validators","href":"/sdk/next/api-reference/rest/staking/validators"},{"title":"Validator","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/validators/{validatorAddr}","href":"/sdk/next/api-reference/rest/staking/validator"},{"title":"ValidatorDelegations","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/validators/{validatorAddr}/delegations","href":"/sdk/next/api-reference/rest/staking/validatordelegations"},{"title":"Delegation","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/validators/{validatorAddr}/delegations/{delegatorAddr}","href":"/sdk/next/api-reference/rest/staking/delegation"},{"title":"UnbondingDelegation","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/validators/{validatorAddr}/delegations/{delegatorAddr}/unbonding_delegation","href":"/sdk/next/api-reference/rest/staking/unbondingdelegation"},{"title":"ValidatorUnbondingDelegations","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/validators/{validatorAddr}/unbonding_delegations","href":"/sdk/next/api-reference/rest/staking/validatorunbondingdelegations"}]},{"group":"tx","pages":[{"title":"TxDecode","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml post /cosmos/tx/v1beta1/decode","href":"/sdk/next/api-reference/rest/tx/txdecode"},{"title":"TxDecodeAmino","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml post /cosmos/tx/v1beta1/decode/amino","href":"/sdk/next/api-reference/rest/tx/txdecodeamino"},{"title":"TxEncode","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml post /cosmos/tx/v1beta1/encode","href":"/sdk/next/api-reference/rest/tx/txencode"},{"title":"TxEncodeAmino","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml post /cosmos/tx/v1beta1/encode/amino","href":"/sdk/next/api-reference/rest/tx/txencodeamino"},{"title":"Simulate","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml post /cosmos/tx/v1beta1/simulate","href":"/sdk/next/api-reference/rest/tx/simulate"},{"title":"GetTxsEvent","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/tx/v1beta1/txs","href":"/sdk/next/api-reference/rest/tx/gettxsevent"},{"title":"BroadcastTx","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml post /cosmos/tx/v1beta1/txs","href":"/sdk/next/api-reference/rest/tx/broadcasttx"},{"title":"GetBlockWithTxs","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/tx/v1beta1/txs/block/{height}","href":"/sdk/next/api-reference/rest/tx/getblockwithtxs"},{"title":"GetTx","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/tx/v1beta1/txs/{hash}","href":"/sdk/next/api-reference/rest/tx/gettx"}]},{"group":"upgrade","pages":[{"title":"AppliedPlan","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/upgrade/v1beta1/applied_plan/{name}","href":"/sdk/next/api-reference/rest/upgrade/appliedplan"},{"title":"Authority","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/upgrade/v1beta1/authority","href":"/sdk/next/api-reference/rest/upgrade/authority"},{"title":"CurrentPlan","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/upgrade/v1beta1/current_plan","href":"/sdk/next/api-reference/rest/upgrade/currentplan"},{"title":"ModuleVersions","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/upgrade/v1beta1/module_versions","href":"/sdk/next/api-reference/rest/upgrade/moduleversions"},{"title":"UpgradedConsensusState","deprecated":null,"version":null,"openapi":"/sdk/next/api-reference/rest/openapi.yaml get /cosmos/upgrade/v1beta1/upgraded_consensus_state/{lastHeight}","href":"/sdk/next/api-reference/rest/upgrade/upgradedconsensusstate"}]}]}]}]},{"version":"v0.54","pages":[{"title":"v0.54","href":"/sdk/v0.54/learn"}]},{"version":"v0.53","pages":[{"title":"v0.53","href":"/sdk/v0.53/learn"}]},{"version":"v0.50","pages":[{"title":"v0.50","href":"/sdk/v0.50/learn"}]},{"version":"v0.47","pages":[{"title":"v0.47","href":"/sdk/v0.47/learn"}]}]},{"dropdown":"Cosmos EVM","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cosmos-docs/assets/icons/cosmos-evm.svg","versions":[{"version":"v0.7.0","default":true,"tag":"Latest","pages":[{"title":"v0.7.0","href":"/evm/latest/documentation/migrations/gas-converter-migration"}]},{"version":"next","tag":"Unreleased","tabs":[{"tab":"Documentation","groups":[{"group":"About","pages":[{"title":"Overview","href":"/evm/next/documentation/overview"},{"title":"EVM Compatibility","href":"/evm/next/documentation/evm-compatibility"},{"title":"Frequently Asked Questions","href":"/evm/next/documentation/getting-started/faq"}]},{"group":"Build","pages":[{"title":"Run an EVM Chain","href":"/evm/next/documentation/getting-started/build-a-chain/quick-start"},{"group":"Additional Configuration","expanded":true,"pages":[{"title":"Mempool Configuration","href":"/evm/next/documentation/getting-started/build-a-chain/additional-configuration/mempool-integration"},{"title":"Predeployed Contracts","href":"/evm/next/documentation/getting-started/build-a-chain/additional-configuration/predeployed-contracts"},{"title":"Precompile Configuration","href":"/evm/next/documentation/getting-started/build-a-chain/additional-configuration/precompiles"},{"title":"Node Configuration","mode":"wide","href":"/evm/next/documentation/getting-started/network-operators/node-configuration"}]},{"title":"Tooling \u0026 Resources","href":"/evm/next/documentation/getting-started/tooling-and-resources"}]},{"group":"Learn","pages":[{"group":"Concepts","pages":[{"title":"Overview","icon":"microchip","href":"/evm/next/documentation/concepts/overview"},{"title":"Accounts","icon":"wallet","href":"/evm/next/documentation/concepts/accounts"},{"title":"Chain ID","icon":"fingerprint","href":"/evm/next/documentation/concepts/chain-id"},{"title":"Encoding","icon":"binary","href":"/evm/next/documentation/concepts/encoding"},{"title":"Gas and Fees","icon":"fuel","href":"/evm/next/documentation/concepts/gas-and-fees"},{"title":"IBC","icon":"network","href":"/evm/next/documentation/concepts/ibc"},{"title":"Mempool","icon":"layers","href":"/evm/next/documentation/concepts/mempool"},{"title":"State Export/Import","icon":"git-branch","href":"/evm/next/documentation/concepts/migrations"},{"title":"Pending State","icon":"hourglass","href":"/evm/next/documentation/concepts/pending-state"},{"title":"EIP-155: Replay Protection","icon":"shield","href":"/evm/next/documentation/concepts/replay-protection"},{"title":"Signing","icon":"pen-tool","href":"/evm/next/documentation/concepts/signing"},{"title":"Single Token Representation","icon":"coins","href":"/evm/next/documentation/concepts/single-token-representation"},{"title":"Tokens","icon":"coins","href":"/evm/next/documentation/concepts/tokens"},{"title":"Transactions","icon":"arrow-up-down","href":"/evm/next/documentation/concepts/transactions"},{"title":"EIP-1559 Fee Market","icon":"chart-line","href":"/evm/next/documentation/concepts/eip-1559-feemarket"}]},{"group":"Precompiles","pages":[{"title":"Overview","icon":"code","href":"/evm/next/documentation/smart-contracts/precompiles/overview"},{"title":"Bank","icon":"vault","href":"/evm/next/documentation/smart-contracts/precompiles/bank"},{"title":"Bech32","icon":"binary","href":"/evm/next/documentation/smart-contracts/precompiles/bech32"},{"title":"Callbacks","icon":"webhook","href":"/evm/next/documentation/smart-contracts/precompiles/callbacks"},{"title":"Distribution","icon":"coins","href":"/evm/next/documentation/smart-contracts/precompiles/distribution"},{"title":"ERC20","icon":"refresh-cw","href":"/evm/next/documentation/smart-contracts/precompiles/erc20"},{"title":"Governance","icon":"scale","href":"/evm/next/documentation/smart-contracts/precompiles/governance"},{"title":"ICS20","icon":"chevrons-left-right-ellipsis","href":"/evm/next/documentation/smart-contracts/precompiles/ics20"},{"title":"P256","icon":"shield-check","href":"/evm/next/documentation/smart-contracts/precompiles/p256"},{"title":"Slashing","icon":"gavel","href":"/evm/next/documentation/smart-contracts/precompiles/slashing"},{"title":"Staking","icon":"coins","href":"/evm/next/documentation/smart-contracts/precompiles/staking"},{"title":"WERC20","icon":"refresh-ccw","href":"/evm/next/documentation/smart-contracts/precompiles/werc20"}]},{"group":"Cosmos SDK","pages":[{"title":"Overview","mode":"wide","href":"/evm/next/documentation/cosmos-sdk/overview"},{"title":"Command Line Interface (CLI)","href":"/evm/next/documentation/cosmos-sdk/cli"},{"title":"Technical Architecture","href":"/evm/next/documentation/cosmos-sdk/protocol"},{"group":"Modules","pages":[{"title":"ERC20","href":"/evm/next/documentation/cosmos-sdk/modules/erc20"},{"title":"Fee Market","href":"/evm/next/documentation/cosmos-sdk/modules/feemarket"},{"title":"IBC","href":"/evm/next/documentation/cosmos-sdk/modules/ibc"},{"title":"PreciseBank","href":"/evm/next/documentation/cosmos-sdk/modules/precisebank"},{"title":"VM","href":"/evm/next/documentation/cosmos-sdk/modules/vm"}]}]}]},{"group":"Migrations","pages":[{"title":"Migration: v0.6.0 to v0.7.0","description":null,"href":"/evm/next/documentation/migrations/migration-v0.6-to-v0.7"},{"title":"Migrating off x/precisebank: Gas Converter Precompile","href":"/evm/next/documentation/migrations/gas-converter-migration"},{"group":"Previous Versions","pages":[{"title":"Migration: v0.5.0 to v0.6.0","description":null,"href":"/evm/next/documentation/migrations/migration-v0.5-to-v0.6"},{"title":"Migration: v0.4.x to v0.5.0","href":"/evm/next/documentation/migrations/migration-v0.4-to-v0.5"},{"title":"Migration: v0.3.0 to v0.4.0","href":"/evm/next/documentation/migrations/migration-v0.3-to-v0.4"},{"title":"ERC20 Precompiles Migration","href":"/evm/next/documentation/migrations/erc20-precompiles-migration"}]},{"group":"Advanced","pages":[{"title":"Upgrade Handlers","href":"/evm/next/documentation/migrations/upgrade-handlers"},{"title":"Custom Improvement Proposals","href":"/evm/next/documentation/custom-improvement-proposals"},{"title":"Adding EVM to an Existing Chain","href":"/evm/next/documentation/migrations/add-evm-to-existing-chain"}]}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/evm/next/api-reference/ethereum-json-rpc"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/evm/next/changelog/release-notes"}]}]},{"version":"v0.6.0","pages":[{"title":"v0.6.0","href":"/evm/v0.6.0/documentation/migrations/migration-v0.6-to-v0.7"}]},{"version":"v0.5.0","pages":[{"title":"v0.5.0","href":"/evm/v0.5.0/documentation/overview"}]},{"version":"v0.4.x","pages":[{"title":"v0.4.x","href":"/evm/v0.4.x/documentation/overview"}]}]},{"dropdown":"CometBFT","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cosmos-docs/assets/icons/comet-bft.svg","versions":[{"version":"v0.40","default":true,"tag":"Latest","pages":[{"title":"v0.40","href":"/cometbft/latest/docs/README"}]},{"version":"next","tag":"Unreleased","tabs":[{"tab":"Learn","groups":[{"group":"CometBFT","pages":[{"title":"CometBFT Documentation","href":"/cometbft/next/docs/README"},{"title":null,"href":"/cometbft/next/docs/introduction/intro"},{"group":"Guides","pages":[{"title":"Quick Start","href":"/cometbft/next/docs/guides/Quick-Start"},{"title":"Install CometBFT","href":"/cometbft/next/docs/guides/Install-CometBFT"},{"title":"Creating an application in Go","href":"/cometbft/next/docs/guides/Creating-an-application-in-Go"},{"title":"Creating a built-in application in Go","href":"/cometbft/next/docs/guides/Creating-a-built-in-application-in-Go"}]},{"group":"Apps","pages":[{"title":"Getting Started","href":"/cometbft/next/docs/app-dev/Getting-Started"},{"title":"Application Architecture Guide","href":"/cometbft/next/docs/app-dev/Application-Architecture-Guide"},{"title":"Using ABCI-CLI","href":"/cometbft/next/docs/app-dev/Using-ABCI-CLI"},{"title":"Indexing Transactions","href":"/cometbft/next/docs/app-dev/Indexing-Transactions"}]},{"group":"Core","pages":[{"title":"Using CometBFT","href":"/cometbft/next/docs/core/Using-CometBFT"},{"title":"Running in production","href":"/cometbft/next/docs/core/Running-in-production"},{"title":"Configuration","href":"/cometbft/next/docs/core/configuration"},{"title":"Mempool","href":"/cometbft/next/docs/core/mempool"},{"title":"Block Sync","href":"/cometbft/next/docs/core/block-sync"},{"title":"State Sync","href":"/cometbft/next/docs/core/state-sync"},{"title":"RPC","href":"/cometbft/next/docs/core/RPC"},{"title":"Subscribing to events via Websocket","href":"/cometbft/next/docs/core/Subscribing-to-events-via-Websocket"},{"title":"Metrics","href":"/cometbft/next/docs/core/metrics"},{"title":"Validators","href":"/cometbft/next/docs/core/Validators"},{"title":"Light Client","href":"/cometbft/next/docs/core/light-client"},{"title":"Block Structure","href":"/cometbft/next/docs/core/block-structure"},{"title":"How to read logs","href":"/cometbft/next/docs/core/how-to-read-logs"},{"group":"Experimental","pages":[{"title":"Lib-P2P Networking","icon":"waypoints","href":"/cometbft/next/docs/experimental/lib-p2p"}]}]},{"group":"Developer Tools","pages":[{"title":"Overview","href":"/cometbft/next/docs/tools/Overview"},{"title":"Debugging","href":"/cometbft/next/docs/tools/debugging"}]},{"group":"Networks","pages":[{"title":"Docker Compose","href":"/cometbft/next/docs/networks/Docker-Compose"}]},{"group":"CometBFT Quality Assurance","pages":[{"title":"CometBFT Quality Assurance","href":"/cometbft/next/docs/qa/CometBFT-qa"},{"title":"Method","href":"/cometbft/next/docs/qa/Method"},{"title":null,"href":"/cometbft/next/docs/qa/CometBFT-QA-38"},{"title":null,"href":"/cometbft/next/docs/qa/CometBFT-QA-37"},{"title":null,"href":"/cometbft/next/docs/qa/CometBFT-QA-34"},{"title":null,"href":"/cometbft/next/docs/qa/TMCore-QA-37"},{"title":null,"href":"/cometbft/next/docs/qa/TMCore-QA-34"}]}]}]},{"tab":"Specification","groups":[{"group":"CometBFT Spec","pages":[{"title":"Overview","href":"/cometbft/next/spec/CometBFT-Spec"},{"group":"Core","pages":[{"title":null,"href":"/cometbft/next/spec/core/Overview"},{"title":"Data Structures","href":"/cometbft/next/spec/core/Data_structures"},{"title":"Encoding","href":"/cometbft/next/spec/core/encoding"},{"title":"Genesis","href":"/cometbft/next/spec/core/genesis"},{"title":"State","href":"/cometbft/next/spec/core/state"}]},{"group":"ABCI++","pages":[{"title":null,"href":"/cometbft/next/spec/abci/Overview"},{"title":"Overview and basic concepts","href":"/cometbft/next/spec/abci/Outline"},{"title":"Methods","href":"/cometbft/next/spec/abci/Methods"},{"title":"Requirements for the Application","href":"/cometbft/next/spec/abci/Requirements-for-the-Application"},{"title":"CometBFT's expected behavior","href":"/cometbft/next/spec/abci/CometBFTs-expected-behavior"},{"title":"Client and Server","href":"/cometbft/next/spec/abci/Client-and-server"},{"title":"ABCI++ extra","href":"/cometbft/next/spec/abci/Introduction"}]},{"group":"Consensus","pages":[{"title":null,"href":"/cometbft/next/spec/consensus/Overview"},{"title":"Consensus Paper","href":"/cometbft/next/spec/consensus/Consensus-Paper"},{"title":"Byzantine Consensus Algorithm","href":"/cometbft/next/spec/consensus/Byzantine-Consensus-Algorithm"},{"title":null,"href":"/cometbft/next/spec/consensus/Light-Client"},{"title":"Creating a proposal","href":"/cometbft/next/spec/consensus/Creating-Proposal"},{"title":"BFT Time","href":"/cometbft/next/spec/consensus/BFT-Time"},{"title":null,"href":"/cometbft/next/spec/consensus/Proposer-Selection"},{"title":"Evidence","href":"/cometbft/next/spec/consensus/Evidence"},{"title":"Validator Signing","href":"/cometbft/next/spec/consensus/Validator-Signing"},{"title":"WAL","href":"/cometbft/next/spec/consensus/WAL"}]},{"group":"Light Client","pages":[{"title":"Light Client Specification","href":"/cometbft/next/spec/light-client/Light-Client-Specification"},{"title":null,"href":"/cometbft/next/spec/light-client/verification"},{"title":null,"href":"/cometbft/next/spec/light-client/Fork-Detection"},{"title":null,"href":"/cometbft/next/spec/light-client/Accountability"}]},{"group":"P2P","pages":[{"title":null,"href":"/cometbft/next/spec/p2p/Peer-to-Peer"},{"title":"Implementation","href":"/cometbft/next/spec/p2p/Implementation-of-the-p2p-layer"},{"group":"Legacy Docs","pages":[{"title":"Legacy Docs","href":"/cometbft/next/spec/p2p/legacy-docs/Overview"},{"group":"Messages","pages":[{"title":null,"href":"/cometbft/next/spec/p2p/legacy-docs/messages/Overview"},{"title":"Block Sync","href":"/cometbft/next/spec/p2p/legacy-docs/messages/block-sync"},{"title":"Evidence","href":"/cometbft/next/spec/p2p/legacy-docs/messages/evidence"},{"title":"Mempool","href":"/cometbft/next/spec/p2p/legacy-docs/messages/mempool"},{"title":"State Sync","href":"/cometbft/next/spec/p2p/legacy-docs/messages/state-sync"},{"title":"Peer Exchange","href":"/cometbft/next/spec/p2p/legacy-docs/messages/Peer-Exchange"},{"title":"Consensus","href":"/cometbft/next/spec/p2p/legacy-docs/messages/consensus"}]},{"title":"P2P Multiplex Connection","href":"/cometbft/next/spec/p2p/legacy-docs/P2P-Multiplex-Connection"},{"title":"Peers","href":"/cometbft/next/spec/p2p/legacy-docs/Peers"},{"title":"P2P Config","href":"/cometbft/next/spec/p2p/legacy-docs/P2P-Config"},{"title":"Peer Discovery","href":"/cometbft/next/spec/p2p/legacy-docs/Peer-Discovery"},{"group":"Reactors","pages":[{"title":"Reactors","href":"/cometbft/next/spec/p2p/reactor-api/Reactors"},{"title":"Reactor API","href":"/cometbft/next/spec/p2p/reactor-api/Reactor-Api"},{"title":"API for Reactors","href":"/cometbft/next/spec/p2p/reactor-api/API-for-Reactors"}]}]}]},{"group":"RPC","pages":[{"title":"RPC spec","href":"/cometbft/next/spec/rpc/Rpc-Spe"}]},{"group":"Blockchain","pages":[{"title":"Blockchain","href":"/cometbft/next/spec/blockchain/Blockchain"}]}]}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"CometBFT RPC","href":"/cometbft/next/api-reference/rpc/index"}]},{"group":"RPC Methods","pages":[{"group":"Tx","pages":[{"title":"broadcast_tx_sync","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /broadcast_tx_sync","href":"/cometbft/next/api-reference/rpc/tx/broadcast_tx_sync"},{"title":"broadcast_tx_async","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /broadcast_tx_async","href":"/cometbft/next/api-reference/rpc/tx/broadcast_tx_async"},{"title":"broadcast_tx_commit","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /broadcast_tx_commit","href":"/cometbft/next/api-reference/rpc/tx/broadcast_tx_commit"},{"title":"check_tx","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /check_tx","href":"/cometbft/next/api-reference/rpc/tx/check_tx"}]},{"group":"Info","pages":[{"title":"health","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /health","href":"/cometbft/next/api-reference/rpc/info/health"},{"title":"status","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /status","href":"/cometbft/next/api-reference/rpc/info/status"},{"title":"net_info","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /net_info","href":"/cometbft/next/api-reference/rpc/info/net_info"},{"title":"blockchain","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /blockchain","href":"/cometbft/next/api-reference/rpc/info/blockchain"},{"title":"header","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /header","href":"/cometbft/next/api-reference/rpc/info/header"},{"title":"header_by_hash","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /header_by_hash","href":"/cometbft/next/api-reference/rpc/info/header_by_hash"},{"title":"block","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /block","href":"/cometbft/next/api-reference/rpc/info/block"},{"title":"block_by_hash","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /block_by_hash","href":"/cometbft/next/api-reference/rpc/info/block_by_hash"},{"title":"block_results","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /block_results","href":"/cometbft/next/api-reference/rpc/info/block_results"},{"title":"commit","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /commit","href":"/cometbft/next/api-reference/rpc/info/commit"},{"title":"validators","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /validators","href":"/cometbft/next/api-reference/rpc/info/validators"},{"title":"genesis","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /genesis","href":"/cometbft/next/api-reference/rpc/info/genesis"},{"title":"genesis_chunked","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /genesis_chunked","href":"/cometbft/next/api-reference/rpc/info/genesis_chunked"},{"title":"dump_consensus_state","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /dump_consensus_state","href":"/cometbft/next/api-reference/rpc/info/dump_consensus_state"},{"title":"consensus_state","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /consensus_state","href":"/cometbft/next/api-reference/rpc/info/consensus_state"},{"title":"consensus_params","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /consensus_params","href":"/cometbft/next/api-reference/rpc/info/consensus_params"},{"title":"unconfirmed_txs","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /unconfirmed_txs","href":"/cometbft/next/api-reference/rpc/info/unconfirmed_txs"},{"title":"num_unconfirmed_txs","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /num_unconfirmed_txs","href":"/cometbft/next/api-reference/rpc/info/num_unconfirmed_txs"},{"title":"tx_search","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /tx_search","href":"/cometbft/next/api-reference/rpc/info/tx_search"},{"title":"block_search","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /block_search","href":"/cometbft/next/api-reference/rpc/info/block_search"},{"title":"tx","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /tx","href":"/cometbft/next/api-reference/rpc/info/tx"},{"title":"broadcast_evidence","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /broadcast_evidence","href":"/cometbft/next/api-reference/rpc/info/broadcast_evidence"}]},{"group":"Unsafe","pages":[{"title":"dial_seeds","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /dial_seeds","href":"/cometbft/next/api-reference/rpc/unsafe/dial_seeds"},{"title":"dial_peers","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /dial_peers","href":"/cometbft/next/api-reference/rpc/unsafe/dial_peers"}]},{"group":"ABCI","pages":[{"title":"abci_info","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /abci_info","href":"/cometbft/next/api-reference/rpc/abci/abci_info"},{"title":"abci_query","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /abci_query","href":"/cometbft/next/api-reference/rpc/abci/abci_query"}]}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","mode":"wide","href":"/cometbft/next/changelog/release-notes"}]}]},{"version":"v0.39","pages":[{"title":"v0.39","href":"/cometbft/v0.39/docs/README"}]},{"version":"v0.38","pages":[{"title":"v0.38","href":"/cometbft/v0.38/docs/README"}]},{"version":"v0.37","pages":[{"title":"v0.37","href":"/cometbft/v0.37/docs/README"}]}]},{"dropdown":"Skip Go","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cosmos-docs/assets/icons/skip-go.svg","hidden":false,"tabs":[{"tab":"Documentation","groups":[{"group":"General API Docs","pages":[{"title":"Introduction","href":"/skip-go/general/getting-started"},{"title":"Quickstart Guide","href":"/skip-go/general/quickstart-guide"},{"title":"Overview \u0026 Common Usage Patterns","href":"/skip-go/general/overview-and-typical-usage"},{"title":"Supported Ecosystems","href":"/skip-go/general/supported-ecosystems-and-bridges"},{"title":"Transaction Tracking","href":"/skip-go/general/multi-chain-realtime-transaction-and-packet-tracking"},{"title":"Skip Explorer Integration","href":"/skip-go/general/explorer-integration"},{"title":"Requesting \u0026 Using API Keys","href":"/skip-go/general/api-keys"},{"title":"Smart Relay","href":"/skip-go/general/smart-relay"},{"title":"Post-Route Actions","href":"/skip-go/general/post-route-actions"},{"title":"Setting Affiliate Fees","href":"/skip-go/general/affiliate-fees"},{"title":"Getting Fee Info","href":"/skip-go/general/fee-info"},{"title":"Transaction Support","href":"/skip-go/general/transaction-support"},{"title":"FAQ","href":"/skip-go/general/faq"}]},{"group":"Skip Go Widget","pages":[{"title":"Getting Started","href":"/skip-go/widget/getting-started"},{"title":"Configuration","href":"/skip-go/widget/configuration"},{"title":"Gas on Receive","href":"/skip-go/widget/gas-on-receive"},{"title":"Web Component","href":"/skip-go/widget/web-component"},{"title":"Migration Guide","href":"/skip-go/widget/migration-guide"},{"title":"FAQ","href":"/skip-go/widget/faq"}]},{"group":"Skip Go Client","pages":[{"title":"Getting Started","href":"/skip-go/client/getting-started"},{"title":"Balances, Gas and Transaction Fee Utilities","href":"/skip-go/client/balance-gas-and-fee-tooling"},{"title":"Executing a route","href":"/skip-go/client/executing-a-route"},{"title":"Gas on Receive with Custom Frontends","href":"/skip-go/client/gas-on-receive"},{"title":"Advanced Features","href":"/skip-go/client/advanced-features"},{"title":"Migration Guide","href":"/skip-go/client/migration-guide"}]},{"group":"Advanced Transfer","pages":[{"title":"Cross-chain Failure Cases","href":"/skip-go/advanced-transfer/handling-cross-chain-failure-cases"},{"title":"Interpreting Transaction \u0026 Transfer Status","href":"/skip-go/advanced-transfer/interpreting-transaction-status"},{"title":"IBC Token Routing: Problem + Skip Go API Routing Algorithm","href":"/skip-go/advanced-transfer/ibc-routing-algorithm"},{"title":"EVM Transactions","href":"/skip-go/advanced-transfer/evm-transactions"},{"title":"SVM Transactions","href":"/skip-go/advanced-transfer/svm-transaction-details"},{"title":"CW20 Tokens \u0026 Their Limitations","href":"/skip-go/advanced-transfer/cw20-swaps"},{"title":"Experimental Features","href":"/skip-go/advanced-transfer/experimental-features"},{"title":"Go Fast","href":"/skip-go/advanced-transfer/go-fast"}]},{"group":"Advanced Swapping","pages":[{"title":"Understanding Quote Quality Metrics","href":"/skip-go/advanced-swapping/understanding-quote-quality-metrics"},{"title":"`allow_unsafe`: Preventing \u0026 Handling Bad Execution","href":"/skip-go/advanced-swapping/allow_unsafe-preventing-handling-bad-execution"},{"title":"SAFE Swapping: How to Protect Users from Bad Trades","href":"/skip-go/advanced-swapping/safe-swapping-how-to-protect-users-from-harming-themselves"},{"title":"Smart Swap","href":"/skip-go/advanced-swapping/smart-swap-options"}]},{"group":"Support Requirements","pages":[{"title":"Chain Support Requirements","href":"/skip-go/support-requirements/chain-support-requirements"},{"title":"Token \u0026 Route Support Requirements","href":"/skip-go/support-requirements/token-support-requirements"},{"title":"Skip Go Asset Registry \u0026 Overrides","href":"/skip-go/support-requirements/asset-registry-overrides"},{"title":"Swap Venue Requirements","href":"/skip-go/support-requirements/swap-venue-requirements"},{"title":"Chain Integration Request","url":"https://42jzxo.share-na2.hsforms.com/2BKju688uROaORNxmEgY2Ug","href":"/skip-go/support-requirements/chain-integration-request"}]},{"group":"Eureka","pages":[{"title":"Overview","href":"/skip-go/eureka/eureka-overview"},{"title":"Technical Overview","href":"/skip-go/eureka/eureka-tech-overview"},{"title":"Integration Guide","href":"/skip-go/eureka/integration-guide"},{"title":"Custom ERC20 Integration","href":"/skip-go/eureka/custom-erc20-integration"},{"title":"Security Properties","href":"/skip-go/eureka/security-properties"},{"title":"Contract Addresses","href":"/skip-go/eureka/contract-addresses"}]}]},{"tab":"API Reference","groups":[{"group":"Prod Endpoints","pages":[{"group":"Info","pages":[{"title":"Get /v2/info/chains","openapi":"swagger get /v2/info/chains","href":"/skip-go/api-reference/prod/info/get-v2infochains"},{"title":"Get /v2/info/bridges","openapi":"swagger get /v2/info/bridges","href":"/skip-go/api-reference/prod/info/get-v2infobridges"},{"title":"Post /v2/info/balances","openapi":"swagger post /v2/info/balances","href":"/skip-go/api-reference/prod/info/post-v2infobalances"}]},{"group":"Fungible","pages":[{"title":"Get /v2/fungible/venues","openapi":"swagger get /v2/fungible/venues","href":"/skip-go/api-reference/prod/fungible/get-v2fungiblevenues"},{"title":"Get /v2/fungible/assets","openapi":"swagger get /v2/fungible/assets","href":"/skip-go/api-reference/prod/fungible/get-v2fungibleassets"},{"title":"Post /v2/fungible/assets_from_source","openapi":"swagger post /v2/fungible/assets_from_source","href":"/skip-go/api-reference/prod/fungible/post-v2fungibleassets_from_source"},{"title":"Post /v2/fungible/route","openapi":"swagger post /v2/fungible/route","href":"/skip-go/api-reference/prod/fungible/post-v2fungibleroute"},{"title":"Post /v2/fungible/msgs","openapi":"swagger post /v2/fungible/msgs","href":"/skip-go/api-reference/prod/fungible/post-v2fungiblemsgs"},{"title":"Post /v2/fungible/msgs_direct","openapi":"swagger post /v2/fungible/msgs_direct","href":"/skip-go/api-reference/prod/fungible/post-v2fungiblemsgs_direct"},{"title":"Post /v2/fungible/ibc_origin_assets","openapi":"swagger post /v2/fungible/ibc_origin_assets","href":"/skip-go/api-reference/prod/fungible/post-v2fungibleibc_origin_assets"},{"title":"Post /v2/fungible/assets_between_chains","openapi":"swagger post /v2/fungible/assets_between_chains","href":"/skip-go/api-reference/prod/fungible/post-v2fungibleassets_between_chains"}]},{"group":"Transaction","pages":[{"title":"Post /v2/tx/submit","openapi":"swagger post /v2/tx/submit","href":"/skip-go/api-reference/prod/transaction/post-v2txsubmit"},{"title":"Post /v2/tx/track","openapi":"swagger post /v2/tx/track","href":"/skip-go/api-reference/prod/transaction/post-v2txtrack"},{"title":"Get /v2/tx/status","openapi":"swagger get /v2/tx/status","href":"/skip-go/api-reference/prod/transaction/get-v2txstatus"}]}]},{"group":"Reference Guides","pages":[{"title":"API Error Codes \u0026 Status Messages","href":"/skip-go/api-reference/error-codes"}]}]}]},{"dropdown":"Cosmos Hub","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cosmos-docs/assets/icons/hub.svg","hidden":false,"versions":[{"version":"Latest","default":true,"tag":"Latest","pages":[{"title":"Latest","href":"/hub/latest"}]},{"version":"next","tag":"Unreleased","tabs":[{"tab":"Documentation","groups":[{"group":"Cosmos Hub","pages":[{"group":"Start here","pages":[{"title":"Cosmos Hub operator docs","href":"/hub/next"},{"title":"What is gaia","href":"/hub/next/getting-started/what-is-gaia"},{"title":"Versions","href":"/hub/next/start/versions"}]},{"group":"Run a node","pages":[{"title":"System requirements","href":"/hub/next/getting-started/system-requirements"},{"title":"Install gaiad","href":"/hub/next/getting-started/installation"},{"title":"Join mainnet","href":"/hub/next/hub-tutorials/join-mainnet"},{"title":"Sync a node","href":"/hub/next/node/sync"},{"title":"Database backends","href":"/hub/next/node/database"},{"title":"Run gaiad as a service","href":"/hub/next/node/service"},{"title":"Join the testnet","href":"/hub/next/hub-tutorials/join-testnet"}]},{"group":"Upgrade a node","pages":[{"title":"Upgrade a node","href":"/hub/next/hub-tutorials/upgrade-node"},{"title":"Upgrade history","href":"/hub/next/upgrade/history"}]},{"group":"Run a validator","pages":[{"title":"Validator overview","href":"/hub/next/validators/overview"},{"title":"Validator onboarding checklist","href":"/hub/next/validators/README"},{"title":"Create and manage a validator","href":"/hub/next/validators/validator-setup"},{"title":"Validator security","href":"/hub/next/validators/security"},{"title":"Remote signing","href":"/hub/next/validators/remote-signing"},{"title":"Monitoring","href":"/hub/next/validators/monitoring"},{"title":"Validator FAQ","href":"/hub/next/validators/validator-faq"}]},{"group":"Run public infrastructure","pages":[{"title":"Run public endpoints","href":"/hub/next/infrastructure/endpoints"},{"title":"Snapshots","href":"/hub/next/infrastructure/snapshots"},{"title":"Peering","href":"/hub/next/infrastructure/peering"},{"title":"Relaying","href":"/hub/next/infrastructure/relaying"},{"title":"Archive nodes and chain archives","href":"/hub/next/resources/archives"}]},{"group":"Delegate and stake","pages":[{"title":"Delegate and stake","href":"/hub/next/delegators/README"},{"title":"Delegator CLI guide","href":"/hub/next/delegators/delegator-guide-cli"},{"title":"Liquid staking module","href":"/hub/next/modules/liquid"},{"title":"Delegator security","href":"/hub/next/delegators/delegator-security"},{"title":"Delegator FAQ","href":"/hub/next/delegators/delegator-faq"}]},{"group":"Governance","pages":[{"title":"Governance process","href":"/hub/next/governance/process"},{"title":"Submitting a proposal","href":"/hub/next/governance/submitting"},{"group":"Proposal types","pages":[{"title":"Proposal types","href":"/hub/next/governance/proposal-types/README"},{"title":"Text proposals","href":"/hub/next/governance/proposal-types/text-prop"},{"title":"Parameter change proposals","href":"/hub/next/governance/proposal-types/param-change"},{"title":"Software upgrade proposals","href":"/hub/next/governance/proposal-types/software-upgrade"},{"title":"Community pool spend","href":"/hub/next/governance/proposal-types/community-pool-spend"}]}]},{"group":"Reference","pages":[{"title":"gaiad reference","href":"/hub/next/hub-tutorials/gaiad"},{"group":"Modules","pages":[{"title":"Modules on the Hub","href":"/hub/next/modules/README"},{"title":"Tokenfactory module","href":"/hub/next/modules/tokenfactory"},{"title":"Fee market module","href":"/hub/next/modules/feemarket"},{"title":"Metaprotocols module","href":"/hub/next/modules/metaprotocols"}]},{"title":"Genesis file","href":"/hub/next/resources/genesis"},{"title":"Build and verify gaiad","href":"/hub/next/resources/reproducible-builds"},{"group":"Wallets","pages":[{"title":"HD wallets","href":"/hub/next/resources/hd-wallets"},{"title":"Ledger hardware wallets","href":"/hub/next/resources/ledger"}]},{"group":"Architecture and ADRs","pages":[{"title":"Architecture Decision Records (ADR)","href":"/hub/next/architecture/README"},{"title":"ADR Creation Process","href":"/hub/next/architecture/PROCESS"},{"title":"Architecture Decision Records (ADR)","href":"/hub/next/architecture/adr/README"},{"title":"ADR Creation Process","href":"/hub/next/architecture/adr/PROCESS"},{"title":"ADR 001: Interchain Accounts","href":"/hub/next/architecture/adr/adr-001-interchain-accounts"},{"title":"ADR 002: Globalfee Module [DEPRECATED]","href":"/hub/next/architecture/adr/adr-002-globalfee"},{"title":"ADR 003: Interchain Accounts Controller Module","href":"/hub/next/architecture/adr/adr-003-ica-controller"},{"title":null,"href":"/hub/next/architecture/templates/adr-template"}]}]}]}]}]},{"version":"v25","pages":[{"title":"v25","href":"/hub/v25/index"}]}]}]},"basePath":"","title":"Migrating off x/precisebank: Gas Converter Precompile - Cosmos Docs","buildId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","deploymentId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","dynamics":[],"chunks":[]}