This guide provides instructions for upgrading to specific versions of Cosmos SDK. Note, always read the SimApp section for more information on application wiring updates.
This guide provides instructions for upgrading to specific versions of Cosmos SDK.
Note, always read the SimApp section for more information on application wiring updates.
The Cosmos SDK has migrated in its previous versions, to CometBFT.
Some functions have been renamed to reflect the naming change.Following an exhaustive list:
Additionally, the commands and flags mentioning tendermint have been renamed to comet.
These commands and flags are still supported for backward compatibility.For backward compatibility, the **/tendermint/** gRPC services are still supported.Additionally, the SDK is starting its abstraction from CometBFT Go types through the codebase:
The usage of the CometBFT logger has been replaced by the Cosmos SDK logger interface (cosmossdk.io/log.Logger).
The usage of github.com/cometbft/cometbft/libs/bytes.HexByte has been replaced by []byte.
This is an optional feature that is disabled by default.
Once all the code changes required to implement Vote Extensions are in place,
they can be enabled by setting the consensus param Abci.VoteExtensionsEnableHeight
to a value greater than zero.In a new chain, this can be done in the genesis.json file.For existing chains this can be done in two ways:
During an upgrade the value is set in an upgrade handler.
A governance proposal that changes the consensus param after a coordinated upgrade has taken place.
All ABCI methods now accept a pointer to the request and response types defined
by CometBFT. In addition, they also return errors. An ABCI method should only
return errors in cases where a catastrophic failure has occurred and the application
should halt. However, this is abstracted away from the application developer. Any
handler that an application can define or set that returns an error, will gracefully
by handled by BaseApp on behalf of the application.BaseApp calls of BeginBlock & Endblock are now private but are still exposed
to the application to define via the Manager type. FinalizeBlock is public
and should be used in order to test and run operations. This means that although
BeginBlock & Endblock no longer exist in the ABCI interface, they are automatically
called by BaseApp during FinalizeBlock. Specifically, the order of operations
is BeginBlock -> DeliverTx (for all txs) -> EndBlock.ABCI++ 2.0 also brings ExtendVote and VerifyVoteExtension ABCI methods. These
methods allow applications to extend and verify pre-commit votes. The Cosmos SDK
allows an application to define handlers for these methods via ExtendVoteHandler
and VerifyVoteExtensionHandler respectively. Please see here
for more info.
A SetPreBlocker method has been added to BaseApp. This is essential for BaseApp to run PreBlock which runs before begin blocker other modules, and allows to modify consensus parameters, and the changes are visible to the following state machine logics.
Read more about other use cases here.depinject / app di users need to add x/upgrade in their app_config.go / app.yml:
The log section of abci.TxResult is not populated in the case of successful
msg(s) execution. Instead a new attribute is added to all messages indicating
the msg_index which identifies which events and attributes relate the same
transaction.BeginBlock & EndBlock Events are now emitted through FinalizeBlock but have
an added attribute, mode=BeginBlock|EndBlock, to identify if the event belongs
to BeginBlock or EndBlock.
Confix is a new SDK tool for modifying and migrating configuration of the SDK.
It is the replacement of the config.Cmd command from the client/config package.Use the following command to migrate your configuration:
simd config migrate v0.50
If you were using <appd> config [key] or <appd> config [key] [value] to set and get values from the client.toml, replace it with <appd> config get client [key] and <appd> config set client [key] [value]. The extra verbosity is due to the extra functionalities added in config.More information about confix and how to add it in your application binary in the documentation.
gRPC-Web is now listening to the same address and port as the gRPC Gateway API server (default: localhost:1317).
The possibility to listen to a different address has been removed, as well as its settings.
Use confix to clean-up your app.toml. A nginx (or alike) reverse-proxy can be set to keep the previous behavior.
ClevelDB, BoltDB and BadgerDB are not supported anymore. To migrate from a unsupported database to a supported database please use a database migration tool.
With the deprecation of the Amino JSON codec defined in cosmos/gogoproto in favor of the protoreflect powered x/tx/aminojson codec, module developers are encouraged verify that their messages have the correct protobuf annotations to deterministically produce identical output from both codecs.For core SDK types equivalence is asserted by generative testing of SignableTypes in TestAminoJSON_Equivalence.TODO: summarize proto annotation requirements.
The gogoproto.goproto_stringer = false annotation has been removed from most proto files. This means that the String() method is being generated for types that previously had this annotation. The generated String() method uses proto.CompactTextString for stringifying structs.
Verify the usage of the modified String() methods and double-check that they are not used in state-machine code.
Previously, all modules were required to be set in OrderBeginBlockers, OrderEndBlockers and OrderInitGenesis / OrderExportGenesis in app.go / app_config.go. This is no longer the case, the assertion has been loosened to only require modules implementing, respectively, the appmodule.HasBeginBlocker, appmodule.HasEndBlocker and appmodule.HasGenesis / module.HasGenesis interfaces.
The following modules NewKeeper function now take a KVStoreService instead of a StoreKey:
x/auth
x/authz
x/bank
x/consensus
x/crisis
x/distribution
x/evidence
x/feegrant
x/gov
x/mint
x/nft
x/slashing
x/upgrade
Users using depinject / app di do not need any changes, this is abstracted for them.Users manually wiring their chain need to use the runtime.NewKVStoreService method to create a KVStoreService from a StoreKey:
Replace all your CometBFT logger imports by cosmossdk.io/log.Additionally, depinject / app di users must now supply a logger through the main depinject.Supply function instead of passing it to appBuilder.Build.
Previously, the ModuleBasics was a global variable that was used to register all modules’ AppModuleBasic implementation.
The global variable has been removed and the basic module manager can be now created from the module manager.This is automatically done for depinject / app di users, however for supplying different app module implementation, pass them via depinject.Supply in the main AppConfig (app_config.go):
Users manually wiring their chain need to use the new module.NewBasicManagerFromManager function, after the module manager creation, and pass a map[string]module.AppModuleBasic as argument for optionally overriding some module’s AppModuleBasic.
AutoCLI has been implemented by the SDK for all its module CLI queries. This means chains must add the following in their root.go to enable AutoCLI in their application:
if err := autoCliOpts.EnhanceRootCommand(rootCmd); err != nil { panic(err)}
Where autoCliOpts is the autocli options of the app, containing all modules and codecs.
That value can injected by depinject (see root_v2.go) or manually provided by the app (see legacy app.go).
Not doing this will result in all core SDK modules queries not to be included in the binary.
Additionally AutoCLI automatically adds the custom modules commands to the root command for all modules implementing the appmodule.AppModule interface.
This means, after ensuring all the used modules implement this interface, the following can be removed from your root.go:
References to types/math.go which contained aliases for math types aliasing the cosmossdk.io/math package have been removed.
Import directly the cosmossdk.io/math package instead.
References to types/store.go which contained aliases for store types have been remapped to point to appropriate store/types, hence the types/store.go file is no longer needed and has been removed.
Extract Store to a standalone module
The store module is extracted to have a separate go.mod file which allows it be a standalone module.
All the store imports are now renamed to use cosmossdk.io/store instead of github.com/cosmos/cosmos-sdk/store across the SDK.
Streaming
ADR-38 has been implemented in the SDK.To continue using state streaming, replace streaming.LoadStreamingServices by the following in your app.go:
if err := app.RegisterStreamingServices(appOpts, app.kvStoreKeys()); err != nil { panic(err)}
The return type of the interface method TxConfig.SignModeHandler() has been changed from x/auth/signing.SignModeHandler to x/tx/signing.HandlerMap. This change is transparent to most users as the TxConfig interface is typically implemented by private x/auth/tx.config struct (as returned by auth.NewTxConfig) which has been updated to return the new type. If users have implemented their own TxConfig interface, they will need to update their implementation to return the new type.
Textual sign mode
A new sign mode is available in the SDK that produces more human readable output, currently only available on Ledger
devices but soon to be implemented in other UIs.
This sign mode does not allow offline signing
When using (legacy) application wiring, the following must be added to app.go after setting the app’s bank keeper:
enabledSignModes := append(tx.DefaultSignModes, sigtypes.SignMode_SIGN_MODE_TEXTUAL) txConfigOpts := tx.ConfigOptions{ EnabledSignModes: enabledSignModes, TextualCoinMetadataQueryFn: txmodule.NewBankKeeperCoinMetadataQueryFn(app.BankKeeper),}txConfig, err := tx.NewTxConfigWithOptions( appCodec, txConfigOpts, ) if err != nil { log.Fatalf("Failed to create new TxConfig with options: %v", err)}app.txConfig = txConfig
When using depinject / app di, it’s enabled by default if there’s a bank keeper present.And in the application client (usually root.go):
When using depinject / app di, the a tx config should be recreated from the txConfigOpts to use NewGRPCCoinMetadataQueryFn instead of depending on the bank keeper (that is used in the server).To learn more see the docs and the ADR-050.
RFC 001 has defined a simplification of the message validation process for modules.
The sdk.Msg interface has been updated to not require the implementation of the ValidateBasic method.
It is now recommended to validate message directly in the message server. When the validation is performed in the message server, the ValidateBasic method on a message is no longer required and can be removed.
Messages no longer need to implement the LegacyMsg interface and implementations of GetSignBytes can be deleted. Because of this change, global legacy Amino codec definitions and their registration in init() can safely be removed as well.
The AppModuleBasic interface has been simplified. Defining GetTxCmd() *cobra.Command and GetQueryCmd() *cobra.Command is no longer required. The module manager detects when module commands are defined. If AutoCLI is enabled, EnhanceRootCommand() will add the auto-generated commands to the root command, unless a custom module command is defined and register that one instead.
The following modules’ Keeper methods now take in a context.Context instead of sdk.Context. Any module that has an interfaces for them (like “expected keepers”) will need to update and re-generate mocks if needed:
x/authz
x/bank
x/mint
x/crisis
x/distribution
x/evidence
x/gov
x/slashing
x/upgrade
BeginBlock and EndBlock have changed their signature, so it is important that any module implementing them are updated accordingly.
GetSigners() is no longer required to be implemented on Msg types. The SDK will automatically infer the signers from the Signer field on the message. The signer field is required on all messages unless using a custom signer function.
To find out more please read the signer field & here documentation.
For ante handler construction via ante.NewAnteHandler, the field ante.HandlerOptions.SignModeHandler has been updated to x/tx/signing/HandlerMap from x/auth/signing/SignModeHandler. Callers typically fetch this value from client.TxConfig.SignModeHandler() (which is also changed) so this change should be transparent to most users.
The capability module has been moved to cosmos/ibc-go. IBC v8 will contain the necessary changes to incorporate the new module location. In your app.go, you must import the capability module from the new location:
The Cosmos SDK has migrated from a CometBFT genesis to a application managed genesis file.
The genesis is now fully handled by x/genutil. This has no consequences for running chains:
Importing a CometBFT genesis is still supported.
Exporting a genesis now exports the genesis as an application genesis.
When needing to read an application genesis, use the following helpers from the x/genutil/types package:
// AppGenesisFromReader reads the AppGenesis from the reader.func AppGenesisFromReader(reader io.Reader) (*AppGenesis, error)// AppGenesisFromFile reads the AppGenesis from the provided file.func AppGenesisFromFile(genFile string) (*AppGenesis, error)
The gov v1 module now supports expedited governance proposals. When a proposal is expedited, the voting period will be shortened to ExpeditedVotingPeriod parameter. An expedited proposal must have an higher voting threshold than a classic proposal, that threshold is defined with the ExpeditedThreshold parameter.
Cancelling Proposals
The gov module now supports cancelling governance proposals. When a proposal is canceled, all the deposits of the proposal are either burnt or sent to ProposalCancelDest address. The deposits burn rate will be determined by a new parameter called ProposalCancelRatio parameter.
1. deposits * proposal_cancel_ratio will be burned or sent to `ProposalCancelDest` address , if `ProposalCancelDest` is empty then deposits will be burned.2. deposits * (1 - proposal_cancel_ratio) will be sent to depositors.
By default, the new ProposalCancelRatio parameter is set to 0.5 during migration and ProposalCancelDest is set to empty string (i.e. burnt).
The x/evidence module is extracted to have a separate go.mod file which allows it be a standalone module.
All the evidence imports are now renamed to use cosmossdk.io/x/evidence instead of github.com/cosmos/cosmos-sdk/x/evidence across the SDK.
The x/nft module is extracted to have a separate go.mod file which allows it to be a standalone module.
All the evidence imports are now renamed to use cosmossdk.io/x/nft instead of github.com/cosmos/cosmos-sdk/x/nft across the SDK.
The x/feegrant module is extracted to have a separate go.mod file which allows it to be a standalone module.
All the feegrant imports are now renamed to use cosmossdk.io/x/feegrant instead of github.com/cosmos/cosmos-sdk/x/feegrant across the SDK.
The x/upgrade module is extracted to have a separate go.mod file which allows it to be a standalone module.
All the upgrade imports are now renamed to use cosmossdk.io/x/upgrade instead of github.com/cosmos/cosmos-sdk/x/upgrade across the SDK.
Rosetta has moved to it’s own repo and not imported by the Cosmos SDK SimApp by default.
Any user who is interested on using the tool can connect it standalone to any node without the need to add it as part of the node binary.The rosetta tool also allows multi chain connections.
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.4043","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":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"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:#fff}.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) #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),body:has(#custom-index-content) button#search-bar-entry,body:has(#custom-index-content) button#search-bar-entry-mobile,body:has(#custom-index-content) header,body:has(#custom-index-content) nav[aria-label]{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,body:has(#custom-index-content) #custom-index-content a,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{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 .callout a,.prose .info a,.prose .note a,.prose .step a,.prose .steps a,.prose .tip a,.prose .warning a,.prose [role=listitem] a,.prose div[data-callout-type] a,.prose li a,.prose p a,.prose span a,.prose ul a{border-bottom-color:#0e0e0e!important;text-decoration-color:#0e0e0e!important}.dark .prose .callout a,.dark .prose .info a,.dark .prose .note a,.dark .prose .step a,.dark .prose .steps a,.dark .prose .tip a,.dark .prose .warning a,.dark .prose [role=listitem] a,.dark .prose div[data-callout-type] a,.dark .prose li a,.dark .prose p a,.dark .prose span a,.dark .prose ul a{border-bottom-color:#ccc!important;text-decoration-color:#ccc!important}.highlighted-card-bg{background-color:#ffb84d;position:relative;overflow:hidden;transition:box-shadow .3s ease-in-out}.highlighted-card-bg:hover{box-shadow:0 0 30px rgba(255,184,77,.5),0 0 60px rgba(255,184,77,.3),0 10px 40px rgba(255,184,77,.2)}.highlighted-card-bg::before{content:'';position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:linear-gradient(45deg,transparent 30%,rgba(255,255,255,.4) 50%,transparent 70%);transform:translateX(-100%) translateY(-100%) rotate(45deg);transition:transform .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}}code,pre,pre code{font-family:'Fira Code','Cascadia Code','JetBrains Mono',monospace!important}"}],"page":{"pagePath":"sdk/v0.50/build/migrations/upgrading","slug":"/sdk/v0.50/build/migrations/upgrading","pageMetadata":{"noindex":true,"canonical":"https://docs.cosmos.network/sdk/latest/","title":"Upgrading Cosmos SDK","description":"This guide provides instructions for upgrading to specific versions of Cosmos SDK. Note, always read the SimApp section for more information on application wiring updates.","href":"/sdk/v0.50/build/migrations/upgrading"},"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: \"This guide provides instructions for upgrading to specific versions of Cosmos SDK. Note, always read the SimApp section for more information on application wiring updates.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,h5:`h5`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`This guide provides instructions for upgrading to specific versions of Cosmos SDK.\nNote, always read the `,_jsx(_components.strong,{children:`SimApp`}),` section for more information on application wiring updates.`]}),`\n`,_jsx(Heading,{level:`2`,id:`v0-50-x`,children:_jsx(_components.a,{href:`https://github.com/cosmos/cosmos-sdk/releases/tag/v0.50.0`,children:`v0.50.x`})}),`\n`,_jsx(Heading,{level:`3`,id:`migration-to-cometbft-part-2`,children:`Migration to CometBFT (Part 2)`}),`\n`,_jsx(_components.p,{children:`The Cosmos SDK has migrated in its previous versions, to CometBFT.\nSome functions have been renamed to reflect the naming change.`}),`\n`,_jsx(_components.p,{children:`Following an exhaustive list:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`client.TendermintRPC`}),` -> `,_jsx(_components.code,{children:`client.CometRPC`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`clitestutil.MockTendermintRPC`}),` -> `,_jsx(_components.code,{children:`clitestutil.MockCometRPC`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`clitestutilgenutil.CreateDefaultTendermintConfig`}),` -> `,_jsx(_components.code,{children:`clitestutilgenutil.CreateDefaultCometConfig`})]}),`\n`,_jsxs(_components.li,{children:[`Package `,_jsx(_components.code,{children:`client/grpc/tmservice`}),` -> `,_jsx(_components.code,{children:`client/grpc/cmtservice`})]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Additionally, the commands and flags mentioning `,_jsx(_components.code,{children:`tendermint`}),` have been renamed to `,_jsx(_components.code,{children:`comet`}),`.\nThese commands and flags are still supported for backward compatibility.`]}),`\n`,_jsxs(_components.p,{children:[`For backward compatibility, the `,_jsx(_components.code,{children:`**/tendermint/**`}),` gRPC services are still supported.`]}),`\n`,_jsx(_components.p,{children:`Additionally, the SDK is starting its abstraction from CometBFT Go types through the codebase:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The usage of the CometBFT logger has been replaced by the Cosmos SDK logger interface (`,_jsx(_components.code,{children:`cosmossdk.io/log.Logger`}),`).`]}),`\n`,_jsxs(_components.li,{children:[`The usage of `,_jsx(_components.code,{children:`github.com/cometbft/cometbft/libs/bytes.HexByte`}),` has been replaced by `,_jsx(_components.code,{children:`[]byte`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Usage of an application genesis (see `,_jsx(_components.a,{href:`#xgenutil`,children:`genutil`}),`).`]}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`enable-vote-extensions`,children:`Enable Vote Extensions`}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`This is an optional feature that is disabled by default.`})}),`\n`,_jsxs(_components.p,{children:[`Once all the code changes required to implement Vote Extensions are in place,\nthey can be enabled by setting the consensus param `,_jsx(_components.code,{children:`Abci.VoteExtensionsEnableHeight`}),`\nto a value greater than zero.`]}),`\n`,_jsxs(_components.p,{children:[`In a new chain, this can be done in the `,_jsx(_components.code,{children:`genesis.json`}),` file.`]}),`\n`,_jsx(_components.p,{children:`For existing chains this can be done in two ways:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`During an upgrade the value is set in an upgrade handler.`}),`\n`,_jsxs(_components.li,{children:[`A governance proposal that changes the consensus param `,_jsx(_components.strong,{children:`after a coordinated upgrade has taken place`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`baseapp`,children:`BaseApp`}),`\n`,_jsxs(_components.p,{children:[`All ABCI methods now accept a pointer to the request and response types defined\nby CometBFT. In addition, they also return errors. An ABCI method should only\nreturn errors in cases where a catastrophic failure has occurred and the application\nshould halt. However, this is abstracted away from the application developer. Any\nhandler that an application can define or set that returns an error, will gracefully\nby handled by `,_jsx(_components.code,{children:`BaseApp`}),` on behalf of the application.`]}),`\n`,_jsxs(_components.p,{children:[`BaseApp calls of `,_jsx(_components.code,{children:`BeginBlock`}),` \u0026 `,_jsx(_components.code,{children:`Endblock`}),` are now private but are still exposed\nto the application to define via the `,_jsx(_components.code,{children:`Manager`}),` type. `,_jsx(_components.code,{children:`FinalizeBlock`}),` is public\nand should be used in order to test and run operations. This means that although\n`,_jsx(_components.code,{children:`BeginBlock`}),` \u0026 `,_jsx(_components.code,{children:`Endblock`}),` no longer exist in the ABCI interface, they are automatically\ncalled by `,_jsx(_components.code,{children:`BaseApp`}),` during `,_jsx(_components.code,{children:`FinalizeBlock`}),`. Specifically, the order of operations\nis `,_jsx(_components.code,{children:`BeginBlock`}),` -> `,_jsx(_components.code,{children:`DeliverTx`}),` (for all txs) -> `,_jsx(_components.code,{children:`EndBlock`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`ABCI++ 2.0 also brings `,_jsx(_components.code,{children:`ExtendVote`}),` and `,_jsx(_components.code,{children:`VerifyVoteExtension`}),` ABCI methods. These\nmethods allow applications to extend and verify pre-commit votes. The Cosmos SDK\nallows an application to define handlers for these methods via `,_jsx(_components.code,{children:`ExtendVoteHandler`}),`\nand `,_jsx(_components.code,{children:`VerifyVoteExtensionHandler`}),` respectively. Please see `,_jsx(_components.a,{href:`/sdk/v0.50/build/building-apps/vote-extensions`,children:`here`}),`\nfor more info.`]}),`\n`,_jsx(Heading,{level:`4`,id:`set-preblocker`,children:`Set PreBlocker`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`SetPreBlocker`}),` method has been added to BaseApp. This is essential for BaseApp to run `,_jsx(_components.code,{children:`PreBlock`}),` which runs before begin blocker other modules, and allows to modify consensus parameters, and the changes are visible to the following state machine logics.\nRead more about other use cases `,_jsx(_components.a,{href:`https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-068-preblock.md`,children:`here`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`depinject`}),` / app di users need to add `,_jsx(_components.code,{children:`x/upgrade`}),` in their `,_jsx(_components.code,{children:`app_config.go`}),` / `,_jsx(_components.code,{children:`app.yml`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`diff`,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:`diff`,children:_jsxs(_components.code,{language:`diff`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+ PreBlockers: []string{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+\tupgradetypes.ModuleName,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+ },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`BeginBlockers: []string{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E011A`,\"--shiki-dark\":`#FFB1AF`},children:`-\tupgradetypes.ModuleName,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\tminttypes.ModuleName,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`When using (legacy) application wiring, the following must be added to `,_jsx(_components.code,{children:`app.go`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`15`,language:`diff`,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:`diff`,children:_jsxs(_components.code,{language:`diff`,numberOfLines:`15`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+app.ModuleManager.SetOrderPreBlockers(`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+\tupgradetypes.ModuleName,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`app.ModuleManager.SetOrderBeginBlockers(`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E011A`,\"--shiki-dark\":`#FFB1AF`},children:`-\tupgradetypes.ModuleName,`})}),`\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:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+ app.SetPreBlocker(app.PreBlocker)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},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:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+func (app *SimApp) PreBlocker(ctx sdk.Context, req *abci.RequestFinalizeBlock) (*sdk.ResponsePreBlock, error) {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+\treturn app.ModuleManager.PreBlock(ctx, req)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`events`,children:`Events`}),`\n`,_jsxs(_components.p,{children:[`The log section of `,_jsx(_components.code,{children:`abci.TxResult`}),` is not populated in the case of successful\nmsg(s) execution. Instead a new attribute is added to all messages indicating\nthe `,_jsx(_components.code,{children:`msg_index`}),` which identifies which events and attributes relate the same\ntransaction.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`BeginBlock`}),` \u0026 `,_jsx(_components.code,{children:`EndBlock`}),` Events are now emitted through `,_jsx(_components.code,{children:`FinalizeBlock`}),` but have\nan added attribute, `,_jsx(_components.code,{children:`mode=BeginBlock|EndBlock`}),`, to identify if the event belongs\nto `,_jsx(_components.code,{children:`BeginBlock`}),` or `,_jsx(_components.code,{children:`EndBlock`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`config-files`,children:`Config files`}),`\n`,_jsxs(_components.p,{children:[`Confix is a new SDK tool for modifying and migrating configuration of the SDK.\nIt is the replacement of the `,_jsx(_components.code,{children:`config.Cmd`}),` command from the `,_jsx(_components.code,{children:`client/config`}),` package.`]}),`\n`,_jsx(_components.p,{children:`Use the following command to migrate your configuration:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`simd`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` config`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` migrate`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` v0.50`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If you were using `,_jsx(_components.code,{children:`\u003cappd> config [key]`}),` or `,_jsx(_components.code,{children:`\u003cappd> config [key] [value]`}),` to set and get values from the `,_jsx(_components.code,{children:`client.toml`}),`, replace it with `,_jsx(_components.code,{children:`\u003cappd> config get client [key]`}),` and `,_jsx(_components.code,{children:`\u003cappd> config set client [key] [value]`}),`. The extra verbosity is due to the extra functionalities added in config.`]}),`\n`,_jsxs(_components.p,{children:[`More information about `,_jsx(_components.a,{href:`/sdk/v0.53/build/tooling/confix`,children:`confix`}),` and how to add it in your application binary in the `,_jsx(_components.a,{href:`/sdk/v0.53/build/tooling/confix`,children:`documentation`}),`.`]}),`\n`,_jsx(Heading,{level:`4`,id:`grpc-web`,children:`gRPC-Web`}),`\n`,_jsxs(_components.p,{children:[`gRPC-Web is now listening to the same address and port as the gRPC Gateway API server (default: `,_jsx(_components.code,{children:`localhost:1317`}),`).\nThe possibility to listen to a different address has been removed, as well as its settings.\nUse `,_jsx(_components.code,{children:`confix`}),` to clean-up your `,_jsx(_components.code,{children:`app.toml`}),`. A nginx (or alike) reverse-proxy can be set to keep the previous behavior.`]}),`\n`,_jsx(Heading,{level:`4`,id:`database-support`,children:`Database Support`}),`\n`,_jsx(_components.p,{children:`ClevelDB, BoltDB and BadgerDB are not supported anymore. To migrate from a unsupported database to a supported database please use a database migration tool.`}),`\n`,_jsx(Heading,{level:`3`,id:`protobuf`,children:`Protobuf`}),`\n`,_jsxs(_components.p,{children:[`With the deprecation of the Amino JSON codec defined in `,_jsx(_components.a,{href:`https://github.com/cosmos/gogoproto`,children:`cosmos/gogoproto`}),` in favor of the protoreflect powered x/tx/aminojson codec, module developers are encouraged verify that their messages have the correct protobuf annotations to deterministically produce identical output from both codecs.`]}),`\n`,_jsxs(_components.p,{children:[`For core SDK types equivalence is asserted by generative testing of `,_jsx(_components.a,{href:`https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-beta.0/tests/integration/rapidgen/rapidgen.go#L102`,children:`SignableTypes`}),` in `,_jsx(_components.a,{href:`https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-beta.0/tests/integration/tx/aminojson/aminojson_test.go#L94`,children:`TestAminoJSON_Equivalence`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`TODO: summarize proto annotation requirements.`})}),`\n`,_jsx(Heading,{level:`4`,id:`stringer`,children:`Stringer`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`gogoproto.goproto_stringer = false`}),` annotation has been removed from most proto files. This means that the `,_jsx(_components.code,{children:`String()`}),` method is being generated for types that previously had this annotation. The generated `,_jsx(_components.code,{children:`String()`}),` method uses `,_jsx(_components.code,{children:`proto.CompactTextString`}),` for `,_jsx(_components.em,{children:`stringifying`}),` structs.\n`,_jsx(_components.a,{href:`https://github.com/cosmos/cosmos-sdk/pull/13850#issuecomment-1328889651`,children:`Verify`}),` the usage of the modified `,_jsx(_components.code,{children:`String()`}),` methods and double-check that they are not used in state-machine code.`]}),`\n`,_jsx(Heading,{level:`3`,id:`simapp`,children:`SimApp`}),`\n`,_jsxs(_components.p,{children:[`In this section we describe the changes made in Cosmos SDK’ SimApp.\n`,_jsx(_components.strong,{children:`These changes are directly applicable to your application wiring.`})]}),`\n`,_jsx(Heading,{level:`4`,id:`module-assertions`,children:`Module Assertions`}),`\n`,_jsxs(_components.p,{children:[`Previously, all modules were required to be set in `,_jsx(_components.code,{children:`OrderBeginBlockers`}),`, `,_jsx(_components.code,{children:`OrderEndBlockers`}),` and `,_jsx(_components.code,{children:`OrderInitGenesis / OrderExportGenesis`}),` in `,_jsx(_components.code,{children:`app.go`}),` / `,_jsx(_components.code,{children:`app_config.go`}),`. This is no longer the case, the assertion has been loosened to only require modules implementing, respectively, the `,_jsx(_components.code,{children:`appmodule.HasBeginBlocker`}),`, `,_jsx(_components.code,{children:`appmodule.HasEndBlocker`}),` and `,_jsx(_components.code,{children:`appmodule.HasGenesis`}),` / `,_jsx(_components.code,{children:`module.HasGenesis`}),` interfaces.`]}),`\n`,_jsx(Heading,{level:`4`,id:`module-wiring`,children:`Module wiring`}),`\n`,_jsxs(_components.p,{children:[`The following modules `,_jsx(_components.code,{children:`NewKeeper`}),` function now take a `,_jsx(_components.code,{children:`KVStoreService`}),` instead of a `,_jsx(_components.code,{children:`StoreKey`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/auth`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/authz`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/bank`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/consensus`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/crisis`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/distribution`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/evidence`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/feegrant`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/gov`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/mint`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/nft`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/slashing`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/upgrade`})}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.strong,{children:[`Users using `,_jsx(_components.code,{children:`depinject`}),` / app di do not need any changes, this is abstracted for them.`]})}),`\n`,_jsxs(_components.p,{children:[`Users manually wiring their chain need to use the `,_jsx(_components.code,{children:`runtime.NewKVStoreService`}),` method to create a `,_jsx(_components.code,{children:`KVStoreService`}),` from a `,_jsx(_components.code,{children:`StoreKey`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`diff`,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:`diff`,children:_jsxs(_components.code,{language:`diff`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper(`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` appCodec,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E011A`,\"--shiki-dark\":`#FFB1AF`},children:`- keys[consensusparamtypes.StoreKey]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+ runtime.NewKVStoreService(keys[consensusparamtypes.StoreKey]),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` authtypes.NewModuleAddress(govtypes.ModuleName).String(),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`)`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`logger`,children:`Logger`}),`\n`,_jsxs(_components.p,{children:[`Replace all your CometBFT logger imports by `,_jsx(_components.code,{children:`cosmossdk.io/log`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Additionally, `,_jsx(_components.code,{children:`depinject`}),` / app di users must now supply a logger through the main `,_jsx(_components.code,{children:`depinject.Supply`}),` function instead of passing it to `,_jsx(_components.code,{children:`appBuilder.Build`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`diff`,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:`diff`,children:_jsxs(_components.code,{language:`diff`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`appConfig = depinject.Configs(`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\tAppConfig,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\tdepinject.Supply(`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t\t// supply the application options`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t\tappOpts,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+\t\tlogger,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t...`})}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`diff`,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:`diff`,children:_jsxs(_components.code,{language:`diff`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E011A`,\"--shiki-dark\":`#FFB1AF`},children:`- app.App = appBuilder.Build(logger, db, traceStore, baseAppOptions...)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+ app.App = appBuilder.Build(db, traceStore, baseAppOptions...)`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`User manually wiring their chain need to add the logger argument when creating the `,_jsx(_components.code,{children:`x/bank`}),` keeper.`]}),`\n`,_jsx(Heading,{level:`4`,id:`module-basics`,children:`Module Basics`}),`\n`,_jsxs(_components.p,{children:[`Previously, the `,_jsx(_components.code,{children:`ModuleBasics`}),` was a global variable that was used to register all modules’ `,_jsx(_components.code,{children:`AppModuleBasic`}),` implementation.\nThe global variable has been removed and the basic module manager can be now created from the module manager.`]}),`\n`,_jsxs(_components.p,{children:[`This is automatically done for `,_jsx(_components.code,{children:`depinject`}),` / app di users, however for supplying different app module implementation, pass them via `,_jsx(_components.code,{children:`depinject.Supply`}),` in the main `,_jsx(_components.code,{children:`AppConfig`}),` (`,_jsx(_components.code,{children:`app_config.go`}),`):`]}),`\n`,_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`11`,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:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`depinject.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Supply`}),_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:`\t\t\t// supply custom module basics`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`\t\t\tmap`}),_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:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`module`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AppModuleBasic`}),_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:` genutiltypes.ModuleName: genutil.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewAppModuleBasic`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(genutiltypes.DefaultMessageValidator),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t\t\t\tgovtypes.ModuleName: gov.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewAppModuleBasic`}),_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:`\t\t\t\t\t[]`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`govclient`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`ProposalHandler`}),_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:` paramsclient.ProposalHandler,`})}),`\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:`\t\t\t\t),`})}),`\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:`\t\t)`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Users manually wiring their chain need to use the new `,_jsx(_components.code,{children:`module.NewBasicManagerFromManager`}),` function, after the module manager creation, and pass a `,_jsx(_components.code,{children:`map[string]module.AppModuleBasic`}),` as argument for optionally overriding some module’s `,_jsx(_components.code,{children:`AppModuleBasic`}),`.`]}),`\n`,_jsx(Heading,{level:`4`,id:`autocli`,children:`AutoCLI`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/sdk/v0.53/learn/advanced/autocli`,children:_jsx(_components.code,{children:`AutoCLI`})}),` has been implemented by the SDK for all its module CLI queries. This means chains must add the following in their `,_jsx(_components.code,{children:`root.go`}),` to enable `,_jsx(_components.code,{children:`AutoCLI`}),` in their application:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,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:`3`,children:[_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:` autoCliOpts.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`EnhanceRootCommand`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(rootCmd); 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:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` panic`}),_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`]})})}),`\n`,_jsxs(_components.p,{children:[`Where `,_jsx(_components.code,{children:`autoCliOpts`}),` is the autocli options of the app, containing all modules and codecs.\nThat value can injected by depinject (`,_jsx(_components.a,{href:`https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-beta.0/simapp/simd/cmd/root_v2.go#L49-L67`,children:`see root_v2.go`}),`) or manually provided by the app (`,_jsx(_components.a,{href:`https://github.com/cosmos/cosmos-sdk/blob/v0.50.0-beta.0/simapp/app.go#L636-L655`,children:`see legacy app.go`}),`).`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Not doing this will result in all core SDK modules queries not to be included in the binary.`})}),`\n`,_jsxs(_components.p,{children:[`Additionally `,_jsx(_components.code,{children:`AutoCLI`}),` automatically adds the custom modules commands to the root command for all modules implementing the `,_jsx(_components.a,{href:`https://pkg.go.dev/cosmossdk.io/core/appmodule#AppModule`,children:_jsx(_components.code,{children:`appmodule.AppModule`})}),` interface.\nThis means, after ensuring all the used modules implement this interface, the following can be removed from your `,_jsx(_components.code,{children:`root.go`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`diff`,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:`diff`,children:_jsxs(_components.code,{language:`diff`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`func txCommand() *cobra.Command {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t....`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E011A`,\"--shiki-dark\":`#FFB1AF`},children:`- appd.ModuleBasics.AddTxCommands(cmd)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`diff`,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:`diff`,children:_jsxs(_components.code,{language:`diff`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`func queryCommand() *cobra.Command {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t....`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E011A`,\"--shiki-dark\":`#FFB1AF`},children:`- appd.ModuleBasics.AddQueryCommands(cmd)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`packages`,children:`Packages`}),`\n`,_jsx(Heading,{level:`4`,id:`math`,children:`Math`}),`\n`,_jsxs(_components.p,{children:[`References to `,_jsx(_components.code,{children:`types/math.go`}),` which contained aliases for math types aliasing the `,_jsx(_components.code,{children:`cosmossdk.io/math`}),` package have been removed.\nImport directly the `,_jsx(_components.code,{children:`cosmossdk.io/math`}),` package instead.`]}),`\n`,_jsx(Heading,{level:`4`,id:`store`,children:`Store`}),`\n`,_jsxs(_components.p,{children:[`References to `,_jsx(_components.code,{children:`types/store.go`}),` which contained aliases for store types have been remapped to point to appropriate `,_jsx(_components.code,{children:`store/types`}),`, hence the `,_jsx(_components.code,{children:`types/store.go`}),` file is no longer needed and has been removed.`]}),`\n`,_jsx(_components.h5,{children:`Extract Store to a standalone module`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`store`}),` module is extracted to have a separate go.mod file which allows it be a standalone module.\nAll the store imports are now renamed to use `,_jsx(_components.code,{children:`cosmossdk.io/store`}),` instead of `,_jsx(_components.code,{children:`github.com/cosmos/cosmos-sdk/store`}),` across the SDK.`]}),`\n`,_jsx(_components.h5,{children:`Streaming`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/sdk/v0.53/build/architecture/adr-038-state-listening`,children:`ADR-38`}),` has been implemented in the SDK.`]}),`\n`,_jsxs(_components.p,{children:[`To continue using state streaming, replace `,_jsx(_components.code,{children:`streaming.LoadStreamingServices`}),` by the following in your `,_jsx(_components.code,{children:`app.go`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,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:`3`,children:[_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:` app.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`RegisterStreamingServices`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(appOpts, app.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`kvStoreKeys`}),_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:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:` panic`}),_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`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`client`,children:`Client`}),`\n`,_jsxs(_components.p,{children:[`The return type of the interface method `,_jsx(_components.code,{children:`TxConfig.SignModeHandler()`}),` has been changed from `,_jsx(_components.code,{children:`x/auth/signing.SignModeHandler`}),` to `,_jsx(_components.code,{children:`x/tx/signing.HandlerMap`}),`. This change is transparent to most users as the `,_jsx(_components.code,{children:`TxConfig`}),` interface is typically implemented by private `,_jsx(_components.code,{children:`x/auth/tx.config`}),` struct (as returned by `,_jsx(_components.code,{children:`auth.NewTxConfig`}),`) which has been updated to return the new type. If users have implemented their own `,_jsx(_components.code,{children:`TxConfig`}),` interface, they will need to update their implementation to return the new type.`]}),`\n`,_jsx(_components.h5,{children:`Textual sign mode`}),`\n`,_jsx(_components.p,{children:`A new sign mode is available in the SDK that produces more human readable output, currently only available on Ledger\ndevices but soon to be implemented in other UIs.`}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`This sign mode does not allow offline signing`})}),`\n`,_jsxs(_components.p,{children:[`When using (legacy) application wiring, the following must be added to `,_jsx(_components.code,{children:`app.go`}),` after setting the app’s bank keeper:`]}),`\n`,_jsx(CodeBlock,{filename:``,expandable:`true`,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:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`enabledSignModes `}),_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:`(tx.DefaultSignModes, sigtypes.SignMode_SIGN_MODE_TEXTUAL)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` txConfigOpts `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},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:`ConfigOptions`}),_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:` EnabledSignModes: enabledSignModes,`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` TextualCoinMetadataQueryFn: txmodule.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewBankKeeperCoinMetadataQueryFn`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(app.BankKeeper),`})]}),`\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:`txConfig, err `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` tx.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewTxConfigWithOptions`}),_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:`\t\tappCodec,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t\ttxConfigOpts,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t)`})}),`\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:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` log.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`Fatalf`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"Failed to create new TxConfig with options: `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`%v`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"`}),_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`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`app.txConfig `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` txConfig`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`When using `,_jsx(_components.code,{children:`depinject`}),` / `,_jsx(_components.code,{children:`app di`}),`, `,_jsx(_components.strong,{children:`it’s enabled by default`}),` if there’s a bank keeper present.`]}),`\n`,_jsxs(_components.p,{children:[`And in the application client (usually `,_jsx(_components.code,{children:`root.go`}),`):`]}),`\n`,_jsx(CodeBlock,{filename:``,expandable:`true`,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:[_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:`clientCtx.Offline {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` txConfigOpts.EnabledSignModes `}),_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:`(txConfigOpts.EnabledSignModes, signing.SignMode_SIGN_MODE_TEXTUAL)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`txConfigOpts.TextualCoinMetadataQueryFn `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` txmodule.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewGRPCCoinMetadataQueryFn`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(clientCtx)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`txConfigWithTextual, err `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`:=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` tx.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewTxConfigWithOptions`}),_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:`\t\t\tcodec.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewProtoCodec`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(clientCtx.InterfaceRegistry),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t\t\ttxConfigOpts,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t\t)`})}),`\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:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` err`})]}),`\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:`clientCtx `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` clientCtx.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`WithTxConfig`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(txConfigWithTextual)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`When using `,_jsx(_components.code,{children:`depinject`}),` / `,_jsx(_components.code,{children:`app di`}),`, the a tx config should be recreated from the `,_jsx(_components.code,{children:`txConfigOpts`}),` to use `,_jsx(_components.code,{children:`NewGRPCCoinMetadataQueryFn`}),` instead of depending on the bank keeper (that is used in the server).`]}),`\n`,_jsxs(_components.p,{children:[`To learn more see the `,_jsx(_components.a,{href:`/sdk/v0.53/learn/advanced/transactions#sign_mode_textual`,children:`docs`}),` and the `,_jsx(_components.a,{href:`/sdk/v0.53/build/architecture/adr-050-sign-mode-textual`,children:`ADR-050`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`modules`,children:`Modules`}),`\n`,_jsx(Heading,{level:`4`,id:`all`,children:_jsx(_components.code,{children:`**all**`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/sdk/v0.50/learn/advanced/baseapp`,children:`RFC 001`}),` has defined a simplification of the message validation process for modules.\nThe `,_jsx(_components.code,{children:`sdk.Msg`}),` interface has been updated to not require the implementation of the `,_jsx(_components.code,{children:`ValidateBasic`}),` method.\nIt is now recommended to validate message directly in the message server. When the validation is performed in the message server, the `,_jsx(_components.code,{children:`ValidateBasic`}),` method on a message is no longer required and can be removed.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Messages no longer need to implement the `,_jsx(_components.code,{children:`LegacyMsg`}),` interface and implementations of `,_jsx(_components.code,{children:`GetSignBytes`}),` can be deleted. Because of this change, global legacy Amino codec definitions and their registration in `,_jsx(_components.code,{children:`init()`}),` can safely be removed as well.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`AppModuleBasic`}),` interface has been simplified. Defining `,_jsx(_components.code,{children:`GetTxCmd() *cobra.Command`}),` and `,_jsx(_components.code,{children:`GetQueryCmd() *cobra.Command`}),` is no longer required. The module manager detects when module commands are defined. If AutoCLI is enabled, `,_jsx(_components.code,{children:`EnhanceRootCommand()`}),` will add the auto-generated commands to the root command, unless a custom module command is defined and register that one instead.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`The following modules’ `,_jsx(_components.code,{children:`Keeper`}),` methods now take in a `,_jsx(_components.code,{children:`context.Context`}),` instead of `,_jsx(_components.code,{children:`sdk.Context`}),`. Any module that has an interfaces for them (like “expected keepers”) will need to update and re-generate mocks if needed:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/authz`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/bank`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/mint`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/crisis`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/distribution`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/evidence`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/gov`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/slashing`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`x/upgrade`})}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`BeginBlock`}),` and `,_jsx(_components.code,{children:`EndBlock`}),` have changed their signature, so it is important that any module implementing them are updated accordingly.`]}),`\n`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`diff`,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:`diff`,children:_jsxs(_components.code,{language:`diff`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E011A`,\"--shiki-dark\":`#FFB1AF`},children:`- BeginBlock(sdk.Context, abci.RequestBeginBlock)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+ BeginBlock(context.Context) error`})}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`diff`,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:`diff`,children:_jsxs(_components.code,{language:`diff`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E011A`,\"--shiki-dark\":`#FFB1AF`},children:`- EndBlock(sdk.Context, abci.RequestEndBlock) []abci.ValidatorUpdate`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+ EndBlock(context.Context) error`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`In case a module requires to return `,_jsx(_components.code,{children:`abci.ValidatorUpdate`}),` from `,_jsx(_components.code,{children:`EndBlock`}),`, it can use the `,_jsx(_components.code,{children:`HasABCIEndBlock`}),` interface instead.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`diff`,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:`diff`,children:_jsxs(_components.code,{language:`diff`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E011A`,\"--shiki-dark\":`#FFB1AF`},children:`- EndBlock(sdk.Context, abci.RequestEndBlock) []abci.ValidatorUpdate`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+ EndBlock(context.Context) ([]abci.ValidatorUpdate, error)`})}),`\n`]})})}),`\n`,_jsxs(Tip,{children:[_jsxs(_components.p,{children:[`It is possible to ensure that a module implements the correct interfaces by using compiler assertions in your `,_jsx(_components.code,{children:`x/{moduleName}/module.go`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`10`,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:`10`,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:` (`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t_ `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`module`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AppModuleBasic`}),_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:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`*`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AppModule`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},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:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t_ `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`module`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AppModuleSimulation`}),_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:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`*`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AppModule`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},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:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t_ `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`module`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`HasGenesis`}),_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:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`*`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AppModule`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`)(`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`nil`}),_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:`\t_ `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`appmodule`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AppModule`}),_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:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`*`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AppModule`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},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:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t_ `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`appmodule`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`HasBeginBlocker`}),_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:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`*`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AppModule`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},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:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`\t_ `}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`appmodule`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`HasEndBlocker`}),_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:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`*`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AppModule`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`)(`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`nil`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`\t...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`)`})}),`\n`]})})}),_jsxs(_components.p,{children:[`Read more on those interfaces `,_jsx(_components.a,{href:`/sdk/v0.50/build/building-modules/module-manager#application-module-interfaces`,children:`here`}),`.`]})]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`GetSigners()`}),` is no longer required to be implemented on `,_jsx(_components.code,{children:`Msg`}),` types. The SDK will automatically infer the signers from the `,_jsx(_components.code,{children:`Signer`}),` field on the message. The signer field is required on all messages unless using a custom signer function.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`To find out more please read the `,_jsx(_components.a,{href:`/sdk/v0.50/build/building-modules/protobuf-annotations#signer`,children:`signer field`}),` \u0026 `,_jsx(_components.a,{href:`https://github.com/cosmos/cosmos-sdk/blob/7352d0bce8e72121e824297df453eb1059c28da8/docs/docs/build/building-modules/02-messages-and-queries.md#L40`,children:`here`}),` documentation.`]}),`\n`,_jsx(Heading,{level:`4`,id:`x/auth`,children:_jsx(_components.code,{children:`x/auth`})}),`\n`,_jsxs(_components.p,{children:[`For ante handler construction via `,_jsx(_components.code,{children:`ante.NewAnteHandler`}),`, the field `,_jsx(_components.code,{children:`ante.HandlerOptions.SignModeHandler`}),` has been updated to `,_jsx(_components.code,{children:`x/tx/signing/HandlerMap`}),` from `,_jsx(_components.code,{children:`x/auth/signing/SignModeHandler`}),`. Callers typically fetch this value from `,_jsx(_components.code,{children:`client.TxConfig.SignModeHandler()`}),` (which is also changed) so this change should be transparent to most users.`]}),`\n`,_jsx(Heading,{level:`4`,id:`x/capability`,children:_jsx(_components.code,{children:`x/capability`})}),`\n`,_jsxs(_components.p,{children:[`The capability module has been moved to `,_jsx(_components.a,{href:`https://github.com/cosmos/ibc-go`,children:`cosmos/ibc-go`}),`. IBC v8 will contain the necessary changes to incorporate the new module location. In your `,_jsx(_components.code,{children:`app.go`}),`, you must import the capability module from the new location:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`diff`,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:`diff`,children:_jsxs(_components.code,{language:`diff`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+\t\"github.com/cosmos/ibc-go/modules/capability\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+\tcapabilitykeeper \"github.com/cosmos/ibc-go/modules/capability/keeper\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`+\tcapabilitytypes \"github.com/cosmos/ibc-go/modules/capability/types\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E011A`,\"--shiki-dark\":`#FFB1AF`},children:`-\t\"github.com/cosmos/cosmos-sdk/x/capability/types\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E011A`,\"--shiki-dark\":`#FFB1AF`},children:`-\tcapabilitykeeper \"github.com/cosmos/cosmos-sdk/x/capability/keeper\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E011A`,\"--shiki-dark\":`#FFB1AF`},children:`-\tcapabilitytypes \"github.com/cosmos/cosmos-sdk/x/capability/types\"`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Similar to previous versions, your module manager must include the capability module.`}),`\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:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`app.ModuleManager `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`=`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` module.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewManager`}),_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:`\tcapability.`}),_jsx(_components.span,{style:{color:`#622CBC`,\"--shiki-dark\":`#DBB7FF`},children:`NewAppModule`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(encodingConfig.Codec, `}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`*`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`app.CapabilityKeeper, `}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:`true`}),_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:`\t// remaining modules`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`)`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`x/genutil`,children:_jsx(_components.code,{children:`x/genutil`})}),`\n`,_jsxs(_components.p,{children:[`The Cosmos SDK has migrated from a CometBFT genesis to a application managed genesis file.\nThe genesis is now fully handled by `,_jsx(_components.code,{children:`x/genutil`}),`. This has no consequences for running chains:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Importing a CometBFT genesis is still supported.`}),`\n`,_jsx(_components.li,{children:`Exporting a genesis now exports the genesis as an application genesis.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`When needing to read an application genesis, use the following helpers from the `,_jsx(_components.code,{children:`x/genutil/types`}),` package:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,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:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// AppGenesisFromReader reads the AppGenesis from the reader.`})}),`\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:` AppGenesisFromReader`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`reader`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` io`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`.`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`Reader`}),_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:`AppGenesis`}),_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`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#66707B`,\"--shiki-dark\":`#BDC4CC`},children:`// AppGenesisFromFile reads the AppGenesis from the provided file.`})}),`\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:` AppGenesisFromFile`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`(`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`genFile`}),_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:`*`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`AppGenesis`}),_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`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`x/gov`,children:_jsx(_components.code,{children:`x/gov`})}),`\n`,_jsx(_components.h5,{children:`Expedited Proposals`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`gov`}),` v1 module now supports expedited governance proposals. When a proposal is expedited, the voting period will be shortened to `,_jsx(_components.code,{children:`ExpeditedVotingPeriod`}),` parameter. An expedited proposal must have an higher voting threshold than a classic proposal, that threshold is defined with the `,_jsx(_components.code,{children:`ExpeditedThreshold`}),` parameter.`]}),`\n`,_jsx(_components.h5,{children:`Cancelling Proposals`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`gov`}),` module now supports cancelling governance proposals. When a proposal is canceled, all the deposits of the proposal are either burnt or sent to `,_jsx(_components.code,{children:`ProposalCancelDest`}),` address. The deposits burn rate will be determined by a new parameter called `,_jsx(_components.code,{children:`ProposalCancelRatio`}),` parameter.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,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:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:\"1. deposits * proposal_cancel_ratio will be burned or sent to `ProposalCancelDest` address , if `ProposalCancelDest` is empty then deposits will be burned.\"})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`2. deposits * (1 - proposal_cancel_ratio) will be sent to depositors.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`By default, the new `,_jsx(_components.code,{children:`ProposalCancelRatio`}),` parameter is set to `,_jsx(_components.code,{children:`0.5`}),` during migration and `,_jsx(_components.code,{children:`ProposalCancelDest`}),` is set to empty string (i.e. burnt).`]}),`\n`,_jsx(Heading,{level:`4`,id:`x/evidence`,children:_jsx(_components.code,{children:`x/evidence`})}),`\n`,_jsx(_components.h5,{children:`Extract evidence to a standalone module`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`x/evidence`}),` module is extracted to have a separate go.mod file which allows it be a standalone module.\nAll the evidence imports are now renamed to use `,_jsx(_components.code,{children:`cosmossdk.io/x/evidence`}),` instead of `,_jsx(_components.code,{children:`github.com/cosmos/cosmos-sdk/x/evidence`}),` across the SDK.`]}),`\n`,_jsx(Heading,{level:`4`,id:`x/nft`,children:_jsx(_components.code,{children:`x/nft`})}),`\n`,_jsx(_components.h5,{children:`Extract nft to a standalone module`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`x/nft`}),` module is extracted to have a separate go.mod file which allows it to be a standalone module.\nAll the evidence imports are now renamed to use `,_jsx(_components.code,{children:`cosmossdk.io/x/nft`}),` instead of `,_jsx(_components.code,{children:`github.com/cosmos/cosmos-sdk/x/nft`}),` across the SDK.`]}),`\n`,_jsx(Heading,{level:`4`,id:`x/feegrant`,children:`x/feegrant`}),`\n`,_jsx(_components.h5,{children:`Extract feegrant to a standalone module`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`x/feegrant`}),` module is extracted to have a separate go.mod file which allows it to be a standalone module.\nAll the feegrant imports are now renamed to use `,_jsx(_components.code,{children:`cosmossdk.io/x/feegrant`}),` instead of `,_jsx(_components.code,{children:`github.com/cosmos/cosmos-sdk/x/feegrant`}),` across the SDK.`]}),`\n`,_jsx(Heading,{level:`4`,id:`x/upgrade`,children:_jsx(_components.code,{children:`x/upgrade`})}),`\n`,_jsx(_components.h5,{children:`Extract upgrade to a standalone module`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`x/upgrade`}),` module is extracted to have a separate go.mod file which allows it to be a standalone module.\nAll the upgrade imports are now renamed to use `,_jsx(_components.code,{children:`cosmossdk.io/x/upgrade`}),` instead of `,_jsx(_components.code,{children:`github.com/cosmos/cosmos-sdk/x/upgrade`}),` across the SDK.`]}),`\n`,_jsx(Heading,{level:`3`,id:`tooling`,children:`Tooling`}),`\n`,_jsx(Heading,{level:`4`,id:`rosetta`,children:`Rosetta`}),`\n`,_jsxs(_components.p,{children:[`Rosetta has moved to it’s own `,_jsx(_components.a,{href:`https://github.com/cosmos/rosetta`,children:`repo`}),` and not imported by the Cosmos SDK SimApp by default.\nAny user who is interested on using the tool can connect it standalone to any node without the need to add it as part of the node binary.`]}),`\n`,_jsx(_components.p,{children:`The rosetta tool also allows multi chain connections.`})]})}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":{"noindex":true,"canonical":"https://docs.cosmos.network/sdk/latest/","title":"Upgrading Cosmos SDK","description":"This guide provides instructions for upgrading to specific versions of Cosmos SDK. Note, always read the SimApp section for more information on application wiring updates.","href":"/sdk/v0.50/build/migrations/upgrading"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"v0.50.x","slug":"v0-50-x","depth":2,"children":[{"title":"Migration to CometBFT (Part 2)","slug":"migration-to-cometbft-part-2","depth":3,"children":[]},{"title":"Enable Vote Extensions","slug":"enable-vote-extensions","depth":4,"children":[]},{"title":"BaseApp","slug":"baseapp","depth":3,"children":[]},{"title":"Set PreBlocker","slug":"set-preblocker","depth":4,"children":[]},{"title":"Events","slug":"events","depth":4,"children":[]},{"title":"Config files","slug":"config-files","depth":3,"children":[]},{"title":"gRPC-Web","slug":"grpc-web","depth":4,"children":[]},{"title":"Database Support","slug":"database-support","depth":4,"children":[]},{"title":"Protobuf","slug":"protobuf","depth":3,"children":[]},{"title":"Stringer","slug":"stringer","depth":4,"children":[]},{"title":"SimApp","slug":"simapp","depth":3,"children":[]},{"title":"Module Assertions","slug":"module-assertions","depth":4,"children":[]},{"title":"Module wiring","slug":"module-wiring","depth":4,"children":[]},{"title":"Logger","slug":"logger","depth":4,"children":[]},{"title":"Module Basics","slug":"module-basics","depth":4,"children":[]},{"title":"AutoCLI","slug":"autocli","depth":4,"children":[]},{"title":"Packages","slug":"packages","depth":3,"children":[]},{"title":"Math","slug":"math","depth":4,"children":[]},{"title":"Store","slug":"store","depth":4,"children":[]},{"title":"Client","slug":"client","depth":4,"children":[]},{"title":"Modules","slug":"modules","depth":3,"children":[]},{"title":"**all**","slug":"all","depth":4,"children":[]},{"title":"x/auth","slug":"x/auth","depth":4,"children":[]},{"title":"x/capability","slug":"x/capability","depth":4,"children":[]},{"title":"x/genutil","slug":"x/genutil","depth":4,"children":[]},{"title":"x/gov","slug":"x/gov","depth":4,"children":[]},{"title":"x/evidence","slug":"x/evidence","depth":4,"children":[]},{"title":"x/nft","slug":"x/nft","depth":4,"children":[]},{"title":"x/feegrant","slug":"x/feegrant","depth":4,"children":[]},{"title":"x/upgrade","slug":"x/upgrade","depth":4,"children":[]},{"title":"Tooling","slug":"tooling","depth":3,"children":[]},{"title":"Rosetta","slug":"rosetta","depth":4,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"cosmos-docs","siteName":"Cosmos Docs","title":"Upgrading Cosmos SDK - Cosmos Docs","navMaps":{"firstHrefInVersion":{"v0.55":{"href":"/sdk/v0.50/build/migrations/upgrading","matchLevel":0},"next":{"href":"/sdk/next/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/build/migrations/upgrading","matchLevel":1,"noindex":true,"canonicalOverride":true},"v0.7.0":{"href":"/evm/latest/documentation/overview","matchLevel":4},"v0.6.0":{"href":"/evm/v0.6.0/documentation/overview","matchLevel":4},"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.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-03-31T20:12:47.981Z","originalFileLocation":"sdk/v0.50/build/migrations/upgrading.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=\"This guide provides instructions for upgrading to specific versions of Cosmos SDK. Note, always read the SimApp section for more information on application wiring updates.\">\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=\"Upgrading Cosmos SDK - 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/sdk/latest/\">\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=Documentation\u0026amp;title=Upgrading+Cosmos+SDK\u0026amp;description=This+guide+provides+instructions+for+upgrading+to+specific+versions+of+Cosmos+SDK.+Note%2C+always+read+the+SimApp+section+for+more+information+on+application+wiri\u0026amp;theme=fcf436d6188c17e0fd925a75\u0026amp;signature=cbf6f925312c5d103bb323a25c9c6c8da4d87fd578cd0a92c8e416ac5a304f13\">\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=\"Upgrading Cosmos SDK - 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=Documentation\u0026amp;title=Upgrading+Cosmos+SDK\u0026amp;description=This+guide+provides+instructions+for+upgrading+to+specific+versions+of+Cosmos+SDK.+Note%2C+always+read+the+SimApp+section+for+more+information+on+application+wiri\u0026amp;theme=fcf436d6188c17e0fd925a75\u0026amp;signature=cbf6f925312c5d103bb323a25c9c6c8da4d87fd578cd0a92c8e416ac5a304f13\">\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/sdk/latest/\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/sdk/v0.50/build/migrations/upgrading.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","tabs":[{"tab":"Cosmos SDK","groups":[{"group":"Intro","icon":"earth","pages":[{"title":"Cosmos SDK Docs","href":"/sdk/latest/learn"},{"title":"Start Here","icon":"play","href":"/sdk/latest/learn/start-here"}]},{"group":"Overview","icon":"book-open","pages":[{"title":"The Cosmos Stack","href":"/sdk/latest/learn/intro/cosmos-stack"},{"title":"What is the Cosmos SDK","href":"/sdk/latest/learn/intro/overview"},{"title":"Blockchain Basics","href":"/sdk/latest/learn/intro/blockchain-basics"},{"title":"Cosmos Architecture","href":"/sdk/latest/learn/intro/sdk-app-architecture"}]},{"group":"Concepts","icon":"graduation-cap","pages":[{"group":"Fundamentals","pages":[{"title":"Accounts","href":"/sdk/latest/learn/concepts/accounts"},{"title":"Transactions, Messages, and Queries","href":"/sdk/latest/learn/concepts/transactions"},{"title":"Transaction Lifecycle","href":"/sdk/latest/learn/concepts/lifecycle"}]},{"group":"Modules","pages":[{"title":"Intro to Modules","href":"/sdk/latest/learn/concepts/modules"},{"title":"State, Storage, and Genesis","href":"/sdk/latest/learn/concepts/store"},{"title":"Protobuf and Signing","href":"/sdk/latest/learn/concepts/encoding"},{"title":"Execution Context, Gas, and Events","href":"/sdk/latest/learn/concepts/context-gas-events"}]},{"group":"Cosmos SDK Internals","pages":[{"title":"Cosmos Blockchain Structure","href":"/sdk/latest/learn/concepts/sdk-structure"},{"title":"BaseApp Overview","href":"/sdk/latest/learn/concepts/baseapp"},{"title":"app.go Overview","href":"/sdk/latest/learn/concepts/app-go"},{"title":"CLI, gRPC, and REST API","href":"/sdk/latest/learn/concepts/cli-grpc-rest"},{"title":"Testing in the SDK","href":"/sdk/latest/learn/concepts/testing"}]},{"title":"Release Families","href":"/sdk/latest/release-family"}]},{"group":"Build a Chain","icon":"hammer","pages":[{"title":"Tutorial Intro","href":"/sdk/latest/tutorials/example/00-overview"},{"title":"Prerequisites","href":"/sdk/latest/tutorials/example/01-prerequisites"},{"title":"Chain Quickstart","href":"/sdk/latest/tutorials/example/02-quickstart"},{"title":"Build a Module from Scratch","href":"/sdk/latest/tutorials/example/03-build-a-module"},{"title":"Full Counter Module Walkthrough","href":"/sdk/latest/tutorials/example/04-counter-walkthrough"},{"title":"Run, Test, and Configure","href":"/sdk/latest/tutorials/example/05-run-and-test"}]},{"group":"Run a Node","icon":"server","pages":[{"title":"Node Tutorial","href":"/sdk/latest/tutorials"},{"group":"Get Started","pages":[{"title":"Prerequisites","href":"/sdk/latest/node/prerequisites"},{"title":"Setting up the keyring","href":"/sdk/latest/node/keyring"},{"title":"Running a Node","href":"/sdk/latest/node/run-node"},{"title":"Interacting with a Node","href":"/sdk/latest/node/interact-node"},{"title":"Generating, Signing and Broadcasting Transactions","href":"/sdk/latest/node/txs"}]},{"group":"Testnet \u0026 Production","pages":[{"title":"Running a Testnet","href":"/sdk/latest/node/run-testnet"},{"title":"Running in Production","href":"/sdk/latest/node/run-production"}]},{"group":"Key Rotation","pages":[{"title":"Key rotation","href":"/sdk/latest/keys/key-rotation"},{"title":"Rotate a consensus key, Staking","href":"/sdk/latest/keys/rotate-validator-key"},{"title":"Rotate a consensus key, PoA","href":"/sdk/latest/keys/rotate-validator-key-poa"}]},{"group":"Post-quantum Keys","pages":[{"title":"Post-quantum keys","href":"/sdk/latest/keys/post-quantum-keys"},{"title":"Enable ML-DSA keys","href":"/sdk/latest/keys/enable-ml-dsa-keys"},{"title":"Migrate a validator to ML-DSA","href":"/sdk/latest/keys/migrate-validator-ml-dsa"},{"title":"Create an ML-DSA account","href":"/sdk/latest/keys/create-ml-dsa-account"}]},{"group":"Remote Signing: Cosmos-KMS","pages":[{"title":"Overview","href":"/sdk/latest/kms/remote-signing"},{"title":"Remote signing tutorial","href":"/sdk/latest/kms/tutorial-file-backend"},{"title":"Configure a signing backend","href":"/sdk/latest/kms/configure-backend"},{"title":"Rotate a consensus key held in Cosmos-KMS","href":"/sdk/latest/kms/rotate-key-remote-signer"},{"title":"Migrate from TMKMS","href":"/sdk/latest/kms/migrate-from-tmkms"},{"title":"Cosmos-KMS configuration reference","href":"/sdk/latest/kms/configuration-reference"},{"title":"Remote signing best practices","href":"/sdk/latest/kms/best-practices"}]}]},{"group":"v0.55 Upgrade","icon":"upload","pages":[{"title":"v0.55 Release Notes","href":"/sdk/latest/upgrade/v0.55-release"},{"title":"v0.55 Upgrade Guide","href":"/sdk/latest/upgrade/v0.55"},{"title":"Changelog","mode":"wide","href":"/sdk/latest/changelog/release-notes"},{"group":"Previous versions","pages":[{"title":"v0.54 Release Notes","href":"/sdk/latest/upgrade/v0.54-release"},{"title":"v0.54 Upgrade Guide","href":"/sdk/latest/upgrade/v0.54"}]}]},{"group":"In-depth Guides","icon":"map","pages":[{"title":"Guides Overview","href":"/sdk/latest/guides/guides"},{"group":"Module Design","pages":[{"title":"Module Design Considerations","href":"/sdk/latest/guides/module-design/module-design-considerations"},{"title":"Object-Capability Model","href":"/sdk/latest/guides/module-design/ocap"}]},{"group":"ABCI","pages":[{"title":"ABCI Overview","href":"/sdk/latest/guides/abci/abci"},{"title":"Application Mempool","href":"/sdk/latest/guides/abci/app-mempool"},{"title":"Vote Extensions","href":"/sdk/latest/guides/abci/vote-extensions"},{"title":"Block-STM: Parallel Transaction Execution","href":"/sdk/latest/experimental/blockstm"}]},{"group":"Tooling \u0026 CLI","pages":[{"title":"Tool Guide","href":"/sdk/latest/guides/tooling/tool-guide"},{"title":"Writing CLI Commands","href":"/sdk/latest/guides/tooling/autocli"},{"title":"Confix","href":"/sdk/latest/guides/tooling/confix"}]},{"group":"State","pages":[{"title":"Module Store Internals","href":"/sdk/latest/guides/state/store"},{"title":"Collections API","href":"/sdk/latest/guides/state/collections"}]},{"group":"Upgrades \u0026 Migrations","pages":[{"title":"Upgrades and Store Migrations","href":"/sdk/latest/guides/upgrades/upgrade"},{"title":"Cosmovisor","href":"/sdk/latest/guides/upgrades/cosmovisor"}]},{"group":"Testing and Observability","pages":[{"title":"Module Simulation","href":"/sdk/latest/guides/testing/simulator"},{"title":"Telemetry","href":"/sdk/latest/guides/testing/telemetry"},{"title":"Log v2","href":"/sdk/latest/guides/testing/log"}]}]},{"group":"Developer Reference","icon":"code","pages":[{"title":"SDK Go Packages","href":"/sdk/latest/guides/reference/packages"},{"title":"Address Encoding","href":"/sdk/latest/guides/reference/bech32"},{"title":"Protobuf Annotations","href":"/sdk/latest/guides/reference/protobuf-annotations"},{"title":"Cosmos Protobuf Docs","url":"https://buf.build/cosmos/cosmos-sdk/docs/main","href":"/sdk/latest/guides/reference/proto-docs"},{"title":"Cosmos SDK Repository","url":"https://github.com/cosmos/cosmos-sdk","href":"/sdk/latest/reference/cosmos-sdk-repo"},{"title":"Tutorial Example Repository","url":"https://github.com/cosmos/example","href":"/sdk/latest/reference/example-repo"}]},{"group":"Modules","icon":"puzzle","pages":[{"title":"Module Directory","href":"/sdk/latest/modules/modules"},{"group":"Open-source Modules","pages":[{"group":"x/auth","pages":[{"title":"x/auth","href":"/sdk/latest/modules/auth/auth"},{"title":"x/auth/vesting","href":"/sdk/latest/modules/auth/vesting"},{"title":"x/auth/tx","href":"/sdk/latest/modules/auth/tx"}]},{"title":"x/authz","href":"/sdk/latest/modules/authz/README"},{"title":"x/bank","href":"/sdk/latest/modules/bank/README"},{"title":"x/consensus","href":"/sdk/latest/modules/consensus/README"},{"title":"x/crisis","href":"/sdk/latest/modules/crisis/README"},{"title":"x/distribution","href":"/sdk/latest/modules/distribution/README"},{"title":"x/epochs","href":"/sdk/latest/modules/epochs/README"},{"title":"x/evidence","href":"/sdk/latest/modules/evidence/README"},{"title":"x/feegrant","href":"/sdk/latest/modules/feegrant/README"},{"title":"x/gov","href":"/sdk/latest/modules/gov/README"},{"title":"x/group","href":"/sdk/latest/modules/group/README"},{"title":"x/mint","href":"/sdk/latest/modules/mint/README"},{"title":"x/nft","href":"/sdk/latest/modules/nft/README"},{"title":"x/params","href":"/sdk/latest/modules/params/README"},{"title":"x/slashing","href":"/sdk/latest/modules/slashing/README"},{"title":"x/staking","href":"/sdk/latest/modules/staking/README"},{"title":"x/upgrade","href":"/sdk/latest/modules/upgrade/README"},{"title":"x/circuit","href":"/sdk/latest/modules/circuit/README"},{"title":"x/genutil","href":"/sdk/latest/modules/genutil/README"}]},{"group":"Cosmos Enterprise Modules","pages":[{"title":"Overview","href":"/sdk/latest/enterprise/overview"},{"group":"Permissioned Consensus","pages":[{"title":"Overview","href":"/sdk/latest/enterprise/poa/overview"},{"title":"Architecture","href":"/sdk/latest/enterprise/poa/architecture"},{"title":"Governance Integration","href":"/sdk/latest/enterprise/poa/governance"},{"title":"API Reference","href":"/sdk/latest/enterprise/poa/api"},{"title":"Fee Distribution","href":"/sdk/latest/enterprise/poa/distribution"}]},{"group":"Multi-sig","pages":[{"title":"Overview","href":"/sdk/latest/enterprise/group/overview"},{"title":"Architecture","href":"/sdk/latest/enterprise/group/architecture"},{"title":"API Reference","href":"/sdk/latest/enterprise/group/api"}]}]}]},{"group":"Architecture Reference","icon":"building-2","pages":[{"group":"ADRs","pages":[{"title":"Architecture Decision Records (ADR)","href":"/sdk/latest/reference/architecture/README"},{"title":"ADR Creation Process","href":"/sdk/latest/reference/architecture/PROCESS"},{"title":"ADR 002: SDK Documentation Structure","href":"/sdk/latest/reference/architecture/adr-002-docs-structure"},{"title":"ADR 003: Dynamic Capability Store","href":"/sdk/latest/reference/architecture/adr-003-dynamic-capability-store"},{"title":"ADR 004: Split Denomination Keys","href":"/sdk/latest/reference/architecture/adr-004-split-denomination-keys"},{"title":"ADR 006: Secret Store Replacement","href":"/sdk/latest/reference/architecture/adr-006-secret-store-replacement"},{"title":"ADR 007: Specialization Groups","href":"/sdk/latest/reference/architecture/adr-007-specialization-groups"},{"title":"ADR 008: Decentralized Computer Emergency Response Team (dCERT) Group","href":"/sdk/latest/reference/architecture/adr-008-dCERT-group"},{"title":"ADR 009: Evidence Module","href":"/sdk/latest/reference/architecture/adr-009-evidence-module"},{"title":"ADR 010: Modular AnteHandler","href":"/sdk/latest/reference/architecture/adr-010-modular-antehandler"},{"title":"ADR 011: Generalize Genesis Accounts","href":"/sdk/latest/reference/architecture/adr-011-generalize-genesis-accounts"},{"title":"ADR 012: State Accessors","href":"/sdk/latest/reference/architecture/adr-012-state-accessors"},{"title":"ADR 013: Observability","href":"/sdk/latest/reference/architecture/adr-013-metrics"},{"title":"ADR 14: Proportional Slashing","href":"/sdk/latest/reference/architecture/adr-014-proportional-slashing"},{"title":"ADR 016: Validator Consensus Key Rotation","href":"/sdk/latest/reference/architecture/adr-016-validator-consensus-key-rotation"},{"title":"ADR 17: Historical Header Module","href":"/sdk/latest/reference/architecture/adr-017-historical-header-module"},{"title":"ADR 18: Extendable Voting Periods","href":"/sdk/latest/reference/architecture/adr-018-extendable-voting-period"},{"title":"ADR 019: Protocol Buffer State Encoding","href":"/sdk/latest/reference/architecture/adr-019-protobuf-state-encoding"},{"title":"ADR 020: Protocol Buffer Transaction Encoding","href":"/sdk/latest/reference/architecture/adr-020-protobuf-transaction-encoding"},{"title":"ADR 021: Protocol Buffer Query Encoding","href":"/sdk/latest/reference/architecture/adr-021-protobuf-query-encoding"},{"title":"ADR 022: Custom BaseApp panic handling","href":"/sdk/latest/reference/architecture/adr-022-custom-panic-handling"},{"title":"ADR 023: Protocol Buffer Naming and Versioning Conventions","href":"/sdk/latest/reference/architecture/adr-023-protobuf-naming"},{"title":"ADR 024: Coin Metadata","href":"/sdk/latest/reference/architecture/adr-024-coin-metadata"},{"title":"ADR 027: Deterministic Protobuf Serialization","href":"/sdk/latest/reference/architecture/adr-027-deterministic-protobuf-serialization"},{"title":"ADR 028: Public Key Addresses","href":"/sdk/latest/reference/architecture/adr-028-public-key-addresses"},{"title":"ADR 029: Fee Grant Module","href":"/sdk/latest/reference/architecture/adr-029-fee-grant-module"},{"title":"ADR 030: Authorization Module","href":"/sdk/latest/reference/architecture/adr-030-authz-module"},{"title":"ADR 031: Protobuf Msg Services","href":"/sdk/latest/reference/architecture/adr-031-msg-service"},{"title":"ADR 032: Typed Events","href":"/sdk/latest/reference/architecture/adr-032-typed-events"},{"title":"ADR 033: Protobuf-based Inter-Module Communication","href":"/sdk/latest/reference/architecture/adr-033-protobuf-inter-module-comm"},{"title":"ADR 034: Account Rekeying","href":"/sdk/latest/reference/architecture/adr-034-account-rekeying"},{"title":"ADR 035: Rosetta API Support","href":"/sdk/latest/reference/architecture/adr-035-rosetta-api-support"},{"title":"ADR 036: Arbitrary Message Signature Specification","href":"/sdk/latest/reference/architecture/adr-036-arbitrary-signature"},{"title":"ADR 037: Governance split votes","href":"/sdk/latest/reference/architecture/adr-037-gov-split-vote"},{"title":"ADR 038: KVStore state listening","href":"/sdk/latest/reference/architecture/adr-038-state-listening"},{"title":"ADR 039: Epoched Staking","href":"/sdk/latest/reference/architecture/adr-039-epoched-staking"},{"title":"ADR 040: Storage and SMT State Commitments","href":"/sdk/latest/reference/architecture/adr-040-storage-and-smt-state-commitments"},{"title":"ADR 041: In-Place Store Migrations","href":"/sdk/latest/reference/architecture/adr-041-in-place-store-migrations"},{"title":"ADR 042: Group Module","href":"/sdk/latest/reference/architecture/adr-042-group-module"},{"title":"ADR 43: NFT Module","href":"/sdk/latest/reference/architecture/adr-043-nft-module"},{"title":"ADR 044: Guidelines for Updating Protobuf Definitions","href":"/sdk/latest/reference/architecture/adr-044-protobuf-updates-guidelines"},{"title":null,"href":"/sdk/latest/reference/architecture/adr-045-check-delivertx-middlewares"},{"title":"ADR 046: Module Params","href":"/sdk/latest/reference/architecture/adr-046-module-params"},{"title":"ADR 047: Extend Upgrade Plan","href":"/sdk/latest/reference/architecture/adr-047-extend-upgrade-plan"},{"title":"ADR 048: Multi Tire Gas Price System","href":"/sdk/latest/reference/architecture/adr-048-consensus-fees"},{"title":"ADR 049: State Sync Hooks","href":"/sdk/latest/reference/architecture/adr-049-state-sync-hooks"},{"title":"ADR 050: SIGN_MODE_TEXTUAL: Annex 1 Value Renderers","href":"/sdk/latest/reference/architecture/adr-050-sign-mode-textual-annex1"},{"title":"ADR 050: SIGN_MODE_TEXTUAL: Annex 2 Device Rendering","href":"/sdk/latest/reference/architecture/adr-050-sign-mode-textual-annex2"},{"title":"ADR 050: SIGN_MODE_TEXTUAL","href":"/sdk/latest/reference/architecture/adr-050-sign-mode-textual"},{"title":"ADR 053: Go Module Refactoring","href":"/sdk/latest/reference/architecture/adr-053-go-module-refactoring"},{"title":"ADR 054: Semver Compatible SDK Modules","href":"/sdk/latest/reference/architecture/adr-054-semver-compatible-modules"},{"title":"ADR 055: ORM","href":"/sdk/latest/reference/architecture/adr-055-orm"},{"title":"ADR 057: App Wiring","href":"/sdk/latest/reference/architecture/adr-057-app-wiring"},{"title":"ADR 058: Auto-Generated CLI","href":"/sdk/latest/reference/architecture/adr-058-auto-generated-cli"},{"title":"ADR 059: Test Scopes","href":"/sdk/latest/reference/architecture/adr-059-test-scopes"},{"title":"ADR 60: ABCI 1.0 Integration (Phase I)","href":"/sdk/latest/reference/architecture/adr-060-abci-1.0"},{"title":"ADR ADR-061: Liquid Staking","href":"/sdk/latest/reference/architecture/adr-061-liquid-staking"},{"title":"ADR 062: Collections, a simplified storage layer for cosmos-sdk modules.","href":"/sdk/latest/reference/architecture/adr-062-collections-state-layer"},{"title":"ADR 063: Core Module API","href":"/sdk/latest/reference/architecture/adr-063-core-module-api"},{"title":"ADR 64: ABCI 2.0 Integration (Phase II)","href":"/sdk/latest/reference/architecture/adr-064-abci-2.0"},{"title":"ADR-065: Store V2","href":"/sdk/latest/reference/architecture/adr-065-store-v2"},{"title":"ADR 068: Preblock","href":"/sdk/latest/reference/architecture/adr-068-preblock"},{"title":"ADR 070: Unordered Transactions","href":"/sdk/latest/reference/architecture/adr-070-unordered-account"},{"title":"Cosmos SDK Transaction Malleability Risk Review and Recommendations","href":"/sdk/latest/reference/architecture/adr-076-tx-malleability"}]},{"group":"RFCs","pages":[{"title":"Requests for Comments","href":"/sdk/latest/reference/rfc/README"},{"title":"RFC Creation Process","href":"/sdk/latest/reference/rfc/PROCESS"},{"title":"RFC 001: Transaction Validation","href":"/sdk/latest/reference/rfc/rfc-001-tx-validation"}]},{"group":"Specifications","pages":[{"title":"Specifications","href":"/sdk/latest/reference/spec/README"},{"title":"Specification of Modules","href":"/sdk/latest/reference/spec/SPEC_MODULE"},{"title":"What is an SDK standard?","href":"/sdk/latest/reference/spec/SPEC_STANDARD"}]}]},{"group":"Security","icon":"shield","pages":[{"title":"Security and Maintenance Policy","href":"/sdk/latest/security/security-policy"},{"title":"Bug Bounty Program","href":"/sdk/latest/security/bug-bounty"},{"group":"Audits","pages":[{"title":"Security Audits","href":"/sdk/latest/security/audits"},{"title":"Internal Audit Process","href":"/sdk/latest/security/internal-audits"}]}]}]},{"tab":"Release Notes","pages":[{"title":"v0.55 Release Notes","href":"/sdk/latest/upgrade/v0.55-release"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API reference","href":"/sdk/latest/api-reference"},{"title":"Sending Transactions","href":"/sdk/latest/api-reference/transactions"}]},{"group":"gRPC Services","pages":[{"title":"gRPC Services","href":"/sdk/latest/api-reference/grpc/index"},{"title":"Auth","href":"/sdk/latest/api-reference/grpc/auth"},{"title":"Authz","href":"/sdk/latest/api-reference/grpc/authz"},{"title":"Autocli","href":"/sdk/latest/api-reference/grpc/autocli"},{"title":"Bank","href":"/sdk/latest/api-reference/grpc/bank"},{"title":"Base","href":"/sdk/latest/api-reference/grpc/base"},{"title":"Consensus","href":"/sdk/latest/api-reference/grpc/consensus"},{"title":"Counter","href":"/sdk/latest/api-reference/grpc/counter"},{"title":"Distribution","href":"/sdk/latest/api-reference/grpc/distribution"},{"title":"Epochs","href":"/sdk/latest/api-reference/grpc/epochs"},{"title":"Evidence","href":"/sdk/latest/api-reference/grpc/evidence"},{"title":"Feegrant","href":"/sdk/latest/api-reference/grpc/feegrant"},{"title":"Gov","href":"/sdk/latest/api-reference/grpc/gov"},{"title":"Mint","href":"/sdk/latest/api-reference/grpc/mint"},{"title":"Reflection","href":"/sdk/latest/api-reference/grpc/reflection"},{"title":"Slashing","href":"/sdk/latest/api-reference/grpc/slashing"},{"title":"Staking","href":"/sdk/latest/api-reference/grpc/staking"},{"title":"Store","href":"/sdk/latest/api-reference/grpc/store"},{"title":"Tx","href":"/sdk/latest/api-reference/grpc/tx"},{"title":"Upgrade","href":"/sdk/latest/api-reference/grpc/upgrade"},{"title":"Vesting","href":"/sdk/latest/api-reference/grpc/vesting"}]},{"group":"REST (gRPC Gateway)","pages":[{"group":"auth","pages":[{"title":"AccountInfo","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/account_info/{address}","href":"/sdk/latest/api-reference/rest/auth/accountinfo"},{"title":"Accounts","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/accounts","href":"/sdk/latest/api-reference/rest/auth/accounts"},{"title":"Account","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/accounts/{address}","href":"/sdk/latest/api-reference/rest/auth/account"},{"title":"AccountAddressByID","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/address_by_id/{accountId}","href":"/sdk/latest/api-reference/rest/auth/accountaddressbyid"},{"title":"Bech32Prefix","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/bech32","href":"/sdk/latest/api-reference/rest/auth/bech32prefix"},{"title":"AddressBytesToString","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/bech32/{addressBytes}","href":"/sdk/latest/api-reference/rest/auth/addressbytestostring"},{"title":"ModuleAccounts","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/module_accounts","href":"/sdk/latest/api-reference/rest/auth/moduleaccounts"},{"title":"ModuleAccountByName","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/module_accounts/{name}","href":"/sdk/latest/api-reference/rest/auth/moduleaccountbyname"},{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/auth/v1beta1/params","href":"/sdk/latest/api-reference/rest/auth/params"}]},{"group":"authz","pages":[{"title":"Grants","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/authz/v1beta1/grants","href":"/sdk/latest/api-reference/rest/authz/grants"},{"title":"GranteeGrants","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/authz/v1beta1/grants/grantee/{grantee}","href":"/sdk/latest/api-reference/rest/authz/granteegrants"},{"title":"GranterGrants","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/authz/v1beta1/grants/granter/{granter}","href":"/sdk/latest/api-reference/rest/authz/grantergrants"}]},{"group":"bank","pages":[{"title":"AllBalances","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/balances/{address}","href":"/sdk/latest/api-reference/rest/bank/allbalances"},{"title":"Balance","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/balances/{address}/by_denom","href":"/sdk/latest/api-reference/rest/bank/balance"},{"title":"DenomOwners","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/denom_owners/{denom}","href":"/sdk/latest/api-reference/rest/bank/denomowners"},{"title":"DenomOwnersByQuery","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/denom_owners_by_query","href":"/sdk/latest/api-reference/rest/bank/denomownersbyquery"},{"title":"DenomsMetadata","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/denoms_metadata","href":"/sdk/latest/api-reference/rest/bank/denomsmetadata"},{"title":"DenomMetadata","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/denoms_metadata/{denom}","href":"/sdk/latest/api-reference/rest/bank/denommetadata"},{"title":"DenomMetadataByQueryString","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/denoms_metadata_by_query_string","href":"/sdk/latest/api-reference/rest/bank/denommetadatabyquerystring"},{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/params","href":"/sdk/latest/api-reference/rest/bank/params"},{"title":"SendEnabled","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/send_enabled","href":"/sdk/latest/api-reference/rest/bank/sendenabled"},{"title":"SpendableBalances","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/spendable_balances/{address}","href":"/sdk/latest/api-reference/rest/bank/spendablebalances"},{"title":"SpendableBalanceByDenom","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/spendable_balances/{address}/by_denom","href":"/sdk/latest/api-reference/rest/bank/spendablebalancebydenom"},{"title":"TotalSupply","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/supply","href":"/sdk/latest/api-reference/rest/bank/totalsupply"},{"title":"SupplyOf","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/bank/v1beta1/supply/by_denom","href":"/sdk/latest/api-reference/rest/bank/supplyof"}]},{"group":"base","pages":[{"title":"Config","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/base/node/v1beta1/config","href":"/sdk/latest/api-reference/rest/base/config"},{"title":"Status","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/base/node/v1beta1/status","href":"/sdk/latest/api-reference/rest/base/status"},{"title":"ABCIQuery","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/abci_query","href":"/sdk/latest/api-reference/rest/base/abciquery"},{"title":"GetLatestBlockResults","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/block_results/latest","href":"/sdk/latest/api-reference/rest/base/getlatestblockresults"},{"title":"GetBlockResults","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/block_results/{height}","href":"/sdk/latest/api-reference/rest/base/getblockresults"},{"title":"GetLatestBlock","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/blocks/latest","href":"/sdk/latest/api-reference/rest/base/getlatestblock"},{"title":"GetBlockByHeight","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/blocks/{height}","href":"/sdk/latest/api-reference/rest/base/getblockbyheight"},{"title":"GetNodeInfo","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/node_info","href":"/sdk/latest/api-reference/rest/base/getnodeinfo"},{"title":"GetSyncing","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/syncing","href":"/sdk/latest/api-reference/rest/base/getsyncing"},{"title":"GetLatestValidatorSet","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/validatorsets/latest","href":"/sdk/latest/api-reference/rest/base/getlatestvalidatorset"},{"title":"GetValidatorSetByHeight","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/base/tendermint/v1beta1/validatorsets/{height}","href":"/sdk/latest/api-reference/rest/base/getvalidatorsetbyheight"}]},{"group":"consensus","pages":[{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/consensus/v1/params","href":"/sdk/latest/api-reference/rest/consensus/params"}]},{"group":"distribution","pages":[{"title":"CommunityPool","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/community_pool","href":"/sdk/latest/api-reference/rest/distribution/communitypool"},{"title":"DelegationTotalRewards","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/delegators/{delegatorAddress}/rewards","href":"/sdk/latest/api-reference/rest/distribution/delegationtotalrewards"},{"title":"DelegationRewards","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/delegators/{delegatorAddress}/rewards/{validatorAddress}","href":"/sdk/latest/api-reference/rest/distribution/delegationrewards"},{"title":"DelegatorStartingInfo","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/delegators/{delegatorAddress}/starting_info/{validatorAddress}","href":"/sdk/latest/api-reference/rest/distribution/delegatorstartinginfo"},{"title":"DelegatorValidators","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/delegators/{delegatorAddress}/validators","href":"/sdk/latest/api-reference/rest/distribution/delegatorvalidators"},{"title":"DelegatorWithdrawAddress","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/delegators/{delegatorAddress}/withdraw_address","href":"/sdk/latest/api-reference/rest/distribution/delegatorwithdrawaddress"},{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/params","href":"/sdk/latest/api-reference/rest/distribution/params"},{"title":"ValidatorDistributionInfo","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/validators/{validatorAddress}","href":"/sdk/latest/api-reference/rest/distribution/validatordistributioninfo"},{"title":"ValidatorCommission","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/validators/{validatorAddress}/commission","href":"/sdk/latest/api-reference/rest/distribution/validatorcommission"},{"title":"ValidatorCurrentRewards","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/validators/{validatorAddress}/current_rewards","href":"/sdk/latest/api-reference/rest/distribution/validatorcurrentrewards"},{"title":"ValidatorHistoricalRewards","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/validators/{validatorAddress}/historical_rewards/{period}","href":"/sdk/latest/api-reference/rest/distribution/validatorhistoricalrewards"},{"title":"ValidatorOutstandingRewards","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/validators/{validatorAddress}/outstanding_rewards","href":"/sdk/latest/api-reference/rest/distribution/validatoroutstandingrewards"},{"title":"ValidatorSlashes","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/distribution/v1beta1/validators/{validatorAddress}/slashes","href":"/sdk/latest/api-reference/rest/distribution/validatorslashes"}]},{"group":"epochs","pages":[{"title":"CurrentEpoch","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/epochs/v1beta1/current_epoch","href":"/sdk/latest/api-reference/rest/epochs/currentepoch"},{"title":"EpochInfos","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/epochs/v1beta1/epochs","href":"/sdk/latest/api-reference/rest/epochs/epochinfos"}]},{"group":"evidence","pages":[{"title":"AllEvidence","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/evidence/v1beta1/evidence","href":"/sdk/latest/api-reference/rest/evidence/allevidence"},{"title":"Evidence","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/evidence/v1beta1/evidence/{hash}","href":"/sdk/latest/api-reference/rest/evidence/evidence"}]},{"group":"feegrant","pages":[{"title":"Allowance","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}","href":"/sdk/latest/api-reference/rest/feegrant/allowance"},{"title":"Allowances","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/feegrant/v1beta1/allowances/{grantee}","href":"/sdk/latest/api-reference/rest/feegrant/allowances"},{"title":"AllowancesByGranter","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/feegrant/v1beta1/issued/{granter}","href":"/sdk/latest/api-reference/rest/feegrant/allowancesbygranter"}]},{"group":"gov","pages":[{"title":"Constitution","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1/constitution","href":"/sdk/latest/api-reference/rest/gov/constitution"},{"title":"Params (v1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1/params/{paramsType}","href":"/sdk/latest/api-reference/rest/gov/params-v1"},{"title":"Proposals (v1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals","href":"/sdk/latest/api-reference/rest/gov/proposals-v1"},{"title":"Proposal (v1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}","href":"/sdk/latest/api-reference/rest/gov/proposal-v1"},{"title":"Deposits (v1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}/deposits","href":"/sdk/latest/api-reference/rest/gov/deposits-v1"},{"title":"Deposit (Query, v1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}/deposits/{depositor}","href":"/sdk/latest/api-reference/rest/gov/deposit-query-v1"},{"title":"TallyResult (v1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}/tally","href":"/sdk/latest/api-reference/rest/gov/tallyresult-v1"},{"title":"Votes (v1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}/votes","href":"/sdk/latest/api-reference/rest/gov/votes-v1"},{"title":"Vote (Query, v1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}/votes/{voter}","href":"/sdk/latest/api-reference/rest/gov/vote-query-v1"},{"title":"Params (v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/params/{paramsType}","href":"/sdk/latest/api-reference/rest/gov/params-v1beta1"},{"title":"Proposals (v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals","href":"/sdk/latest/api-reference/rest/gov/proposals-v1beta1"},{"title":"Proposal (v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals/{proposalId}","href":"/sdk/latest/api-reference/rest/gov/proposal-v1beta1"},{"title":"Deposits (v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals/{proposalId}/deposits","href":"/sdk/latest/api-reference/rest/gov/deposits-v1beta1"},{"title":"Deposit (Query, v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals/{proposalId}/deposits/{depositor}","href":"/sdk/latest/api-reference/rest/gov/deposit-query-v1beta1"},{"title":"TallyResult (v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals/{proposalId}/tally","href":"/sdk/latest/api-reference/rest/gov/tallyresult-v1beta1"},{"title":"Votes (v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals/{proposalId}/votes","href":"/sdk/latest/api-reference/rest/gov/votes-v1beta1"},{"title":"Vote (Query, v1beta1)","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/gov/v1beta1/proposals/{proposalId}/votes/{voter}","href":"/sdk/latest/api-reference/rest/gov/vote-query-v1beta1"}]},{"group":"mint","pages":[{"title":"AnnualProvisions","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/mint/v1beta1/annual_provisions","href":"/sdk/latest/api-reference/rest/mint/annualprovisions"},{"title":"Inflation","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/mint/v1beta1/inflation","href":"/sdk/latest/api-reference/rest/mint/inflation"},{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/mint/v1beta1/params","href":"/sdk/latest/api-reference/rest/mint/params"}]},{"group":"slashing","pages":[{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/slashing/v1beta1/params","href":"/sdk/latest/api-reference/rest/slashing/params"},{"title":"SigningInfos","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/slashing/v1beta1/signing_infos","href":"/sdk/latest/api-reference/rest/slashing/signinginfos"},{"title":"SigningInfo","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/slashing/v1beta1/signing_infos/{consAddress}","href":"/sdk/latest/api-reference/rest/slashing/signinginfo"}]},{"group":"staking","pages":[{"title":"DelegatorDelegations","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/delegations/{delegatorAddr}","href":"/sdk/latest/api-reference/rest/staking/delegatordelegations"},{"title":"Redelegations","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/delegators/{delegatorAddr}/redelegations","href":"/sdk/latest/api-reference/rest/staking/redelegations"},{"title":"DelegatorUnbondingDelegations","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/delegators/{delegatorAddr}/unbonding_delegations","href":"/sdk/latest/api-reference/rest/staking/delegatorunbondingdelegations"},{"title":"DelegatorValidators","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/delegators/{delegatorAddr}/validators","href":"/sdk/latest/api-reference/rest/staking/delegatorvalidators"},{"title":"DelegatorValidator","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/delegators/{delegatorAddr}/validators/{validatorAddr}","href":"/sdk/latest/api-reference/rest/staking/delegatorvalidator"},{"title":"HistoricalInfo","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/historical_info/{height}","href":"/sdk/latest/api-reference/rest/staking/historicalinfo"},{"title":"Params","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/params","href":"/sdk/latest/api-reference/rest/staking/params"},{"title":"Pool","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/pool","href":"/sdk/latest/api-reference/rest/staking/pool"},{"title":"Validators","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/validators","href":"/sdk/latest/api-reference/rest/staking/validators"},{"title":"Validator","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/validators/{validatorAddr}","href":"/sdk/latest/api-reference/rest/staking/validator"},{"title":"ValidatorDelegations","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/validators/{validatorAddr}/delegations","href":"/sdk/latest/api-reference/rest/staking/validatordelegations"},{"title":"Delegation","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/validators/{validatorAddr}/delegations/{delegatorAddr}","href":"/sdk/latest/api-reference/rest/staking/delegation"},{"title":"UnbondingDelegation","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/validators/{validatorAddr}/delegations/{delegatorAddr}/unbonding_delegation","href":"/sdk/latest/api-reference/rest/staking/unbondingdelegation"},{"title":"ValidatorUnbondingDelegations","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/staking/v1beta1/validators/{validatorAddr}/unbonding_delegations","href":"/sdk/latest/api-reference/rest/staking/validatorunbondingdelegations"}]},{"group":"tx","pages":[{"title":"TxDecode","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml post /cosmos/tx/v1beta1/decode","href":"/sdk/latest/api-reference/rest/tx/txdecode"},{"title":"TxDecodeAmino","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml post /cosmos/tx/v1beta1/decode/amino","href":"/sdk/latest/api-reference/rest/tx/txdecodeamino"},{"title":"TxEncode","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml post /cosmos/tx/v1beta1/encode","href":"/sdk/latest/api-reference/rest/tx/txencode"},{"title":"TxEncodeAmino","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml post /cosmos/tx/v1beta1/encode/amino","href":"/sdk/latest/api-reference/rest/tx/txencodeamino"},{"title":"Simulate","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml post /cosmos/tx/v1beta1/simulate","href":"/sdk/latest/api-reference/rest/tx/simulate"},{"title":"GetTxsEvent","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/tx/v1beta1/txs","href":"/sdk/latest/api-reference/rest/tx/gettxsevent"},{"title":"BroadcastTx","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml post /cosmos/tx/v1beta1/txs","href":"/sdk/latest/api-reference/rest/tx/broadcasttx"},{"title":"GetBlockWithTxs","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/tx/v1beta1/txs/block/{height}","href":"/sdk/latest/api-reference/rest/tx/getblockwithtxs"},{"title":"GetTx","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/tx/v1beta1/txs/{hash}","href":"/sdk/latest/api-reference/rest/tx/gettx"}]},{"group":"upgrade","pages":[{"title":"AppliedPlan","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/upgrade/v1beta1/applied_plan/{name}","href":"/sdk/latest/api-reference/rest/upgrade/appliedplan"},{"title":"Authority","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/upgrade/v1beta1/authority","href":"/sdk/latest/api-reference/rest/upgrade/authority"},{"title":"CurrentPlan","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/upgrade/v1beta1/current_plan","href":"/sdk/latest/api-reference/rest/upgrade/currentplan"},{"title":"ModuleVersions","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/upgrade/v1beta1/module_versions","href":"/sdk/latest/api-reference/rest/upgrade/moduleversions"},{"title":"UpgradedConsensusState","deprecated":null,"version":null,"openapi":"/sdk/latest/api-reference/rest/openapi.yaml get /cosmos/upgrade/v1beta1/upgraded_consensus_state/{lastHeight}","href":"/sdk/latest/api-reference/rest/upgrade/upgradedconsensusstate"}]}]}]}]},{"version":"next","tag":"Unreleased","pages":[{"title":"next","href":"/sdk/next/learn"}]},{"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/build/migrations/upgrading"}]}]},{"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","tabs":[{"tab":"Documentation","groups":[{"group":"About","pages":[{"title":"Overview","href":"/evm/latest/documentation/overview"},{"title":"EVM Compatibility","href":"/evm/latest/documentation/evm-compatibility"},{"title":"Frequently Asked Questions","href":"/evm/latest/documentation/getting-started/faq"}]},{"group":"Build","pages":[{"title":"Run an EVM Chain","href":"/evm/latest/documentation/getting-started/build-a-chain/quick-start"},{"group":"Additional Configuration","expanded":true,"pages":[{"title":"Mempool Configuration","href":"/evm/latest/documentation/getting-started/build-a-chain/additional-configuration/mempool-integration"},{"title":"Predeployed Contracts","href":"/evm/latest/documentation/getting-started/build-a-chain/additional-configuration/predeployed-contracts"},{"title":"Precompile Configuration","href":"/evm/latest/documentation/getting-started/build-a-chain/additional-configuration/precompiles"},{"title":"Node Configuration","mode":"wide","href":"/evm/latest/documentation/getting-started/network-operators/node-configuration"}]},{"title":"Tooling \u0026 Resources","href":"/evm/latest/documentation/getting-started/tooling-and-resources"}]},{"group":"Learn","pages":[{"group":"Concepts","pages":[{"title":"Overview","icon":"microchip","href":"/evm/latest/documentation/concepts/overview"},{"title":"Accounts","icon":"wallet","href":"/evm/latest/documentation/concepts/accounts"},{"title":"Chain ID","icon":"fingerprint","href":"/evm/latest/documentation/concepts/chain-id"},{"title":"Encoding","icon":"binary","href":"/evm/latest/documentation/concepts/encoding"},{"title":"Gas and Fees","icon":"fuel","href":"/evm/latest/documentation/concepts/gas-and-fees"},{"title":"IBC","icon":"network","href":"/evm/latest/documentation/concepts/ibc"},{"title":"Mempool","icon":"layers","href":"/evm/latest/documentation/concepts/mempool"},{"title":"State Export/Import","icon":"git-branch","href":"/evm/latest/documentation/concepts/migrations"},{"title":"Pending State","icon":"hourglass","href":"/evm/latest/documentation/concepts/pending-state"},{"title":"EIP-155: Replay Protection","icon":"shield","href":"/evm/latest/documentation/concepts/replay-protection"},{"title":"Signing","icon":"pen-tool","href":"/evm/latest/documentation/concepts/signing"},{"title":"Single Token Representation","icon":"coins","href":"/evm/latest/documentation/concepts/single-token-representation"},{"title":"Tokens","icon":"coins","href":"/evm/latest/documentation/concepts/tokens"},{"title":"Transactions","icon":"arrow-up-down","href":"/evm/latest/documentation/concepts/transactions"},{"title":"EIP-1559 Fee Market","icon":"chart-line","href":"/evm/latest/documentation/concepts/eip-1559-feemarket"}]},{"group":"Precompiles","pages":[{"title":"Overview","icon":"code","href":"/evm/latest/documentation/smart-contracts/precompiles/overview"},{"title":"Bank","icon":"vault","href":"/evm/latest/documentation/smart-contracts/precompiles/bank"},{"title":"Bech32","icon":"binary","href":"/evm/latest/documentation/smart-contracts/precompiles/bech32"},{"title":"Callbacks","icon":"webhook","href":"/evm/latest/documentation/smart-contracts/precompiles/callbacks"},{"title":"Distribution","icon":"coins","href":"/evm/latest/documentation/smart-contracts/precompiles/distribution"},{"title":"ERC20","icon":"refresh-cw","href":"/evm/latest/documentation/smart-contracts/precompiles/erc20"},{"title":"Governance","icon":"scale","href":"/evm/latest/documentation/smart-contracts/precompiles/governance"},{"title":"ICS20","icon":"chevrons-left-right-ellipsis","href":"/evm/latest/documentation/smart-contracts/precompiles/ics20"},{"title":"P256","icon":"shield-check","href":"/evm/latest/documentation/smart-contracts/precompiles/p256"},{"title":"Slashing","icon":"gavel","href":"/evm/latest/documentation/smart-contracts/precompiles/slashing"},{"title":"Staking","icon":"coins","href":"/evm/latest/documentation/smart-contracts/precompiles/staking"},{"title":"WERC20","icon":"refresh-ccw","href":"/evm/latest/documentation/smart-contracts/precompiles/werc20"}]},{"group":"Cosmos SDK","pages":[{"title":"Overview","mode":"wide","href":"/evm/latest/documentation/cosmos-sdk/overview"},{"title":"Command Line Interface (CLI)","href":"/evm/latest/documentation/cosmos-sdk/cli"},{"title":"Technical Architecture","href":"/evm/latest/documentation/cosmos-sdk/protocol"},{"group":"Modules","pages":[{"title":"ERC20","href":"/evm/latest/documentation/cosmos-sdk/modules/erc20"},{"title":"Fee Market","href":"/evm/latest/documentation/cosmos-sdk/modules/feemarket"},{"title":"IBC","href":"/evm/latest/documentation/cosmos-sdk/modules/ibc"},{"title":"PreciseBank","href":"/evm/latest/documentation/cosmos-sdk/modules/precisebank"},{"title":"VM","href":"/evm/latest/documentation/cosmos-sdk/modules/vm"}]}]}]},{"group":"Migrations","pages":[{"title":"Migration: v0.6.0 to v0.7.0","href":"/evm/latest/documentation/migrations/migration-v0.6-to-v0.7"},{"title":"Migrating off x/precisebank: Gas Converter Precompile","href":"/evm/latest/documentation/migrations/gas-converter-migration"},{"group":"Previous Versions","pages":[{"title":"Migration: v0.4.x to v0.5.0","href":"/evm/latest/documentation/migrations/migration-v0.4-to-v0.5"},{"title":"Migration: v0.3.0 to v0.4.0","href":"/evm/latest/documentation/migrations/migration-v0.3-to-v0.4"},{"title":"Migration: v0.5.0 to v0.6.0","href":"/evm/latest/documentation/migrations/migration-v0.5-to-v0.6"},{"title":"ERC20 Precompiles Migration","href":"/evm/latest/documentation/migrations/erc20-precompiles-migration"}]},{"group":"Advanced","pages":[{"title":"Upgrade Handlers","href":"/evm/latest/documentation/migrations/upgrade-handlers"},{"title":"Custom Improvement Proposals","href":"/evm/latest/documentation/custom-improvement-proposals"},{"title":"Adding EVM to an Existing Chain","href":"/evm/latest/documentation/migrations/add-evm-to-existing-chain"}]}]}]},{"tab":"API Reference","pages":[{"title":"Ethereum JSON-RPC","href":"/evm/latest/api-reference/ethereum-json-rpc/index"},{"title":"Methods","href":"/evm/latest/api-reference/ethereum-json-rpc/methods"},{"title":"JSON-RPC Explorer","mode":"custom","href":"/evm/latest/api-reference/ethereum-json-rpc/rpc-explorer"}]},{"tab":"Changelog","pages":[{"title":"Changelog","mode":"wide","href":"/evm/latest/changelog/release-notes"}]}]},{"version":"next","tag":"Unreleased","pages":[{"title":"next","href":"/evm/next/documentation/overview"}]},{"version":"v0.6.0","pages":[{"title":"v0.6.0","href":"/evm/v0.6.0/documentation/overview"}]},{"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","tabs":[{"tab":"Learn","groups":[{"group":"CometBFT","pages":[{"title":"CometBFT Documentation","href":"/cometbft/latest/docs/README"},{"title":null,"href":"/cometbft/latest/docs/introduction/intro"},{"group":"Guides","pages":[{"title":"Quick Start","href":"/cometbft/latest/docs/guides/Quick-Start"},{"title":"Install CometBFT","href":"/cometbft/latest/docs/guides/Install-CometBFT"},{"title":"Creating an application in Go","href":"/cometbft/latest/docs/guides/Creating-an-application-in-Go"},{"title":"Creating a built-in application in Go","href":"/cometbft/latest/docs/guides/Creating-a-built-in-application-in-Go"}]},{"group":"Apps","pages":[{"title":"Getting Started","href":"/cometbft/latest/docs/app-dev/Getting-Started"},{"title":"Application Architecture Guide","href":"/cometbft/latest/docs/app-dev/Application-Architecture-Guide"},{"title":"Using ABCI-CLI","href":"/cometbft/latest/docs/app-dev/Using-ABCI-CLI"},{"title":"Indexing Transactions","href":"/cometbft/latest/docs/app-dev/Indexing-Transactions"}]},{"group":"Core","pages":[{"title":"Using CometBFT","href":"/cometbft/latest/docs/core/Using-CometBFT"},{"title":"Running in production","href":"/cometbft/latest/docs/core/Running-in-production"},{"title":"Configuration","href":"/cometbft/latest/docs/core/configuration"},{"title":"Mempool","href":"/cometbft/latest/docs/core/mempool"},{"title":"Block Sync","href":"/cometbft/latest/docs/core/block-sync"},{"title":"State Sync","href":"/cometbft/latest/docs/core/state-sync"},{"title":"RPC","href":"/cometbft/latest/docs/core/RPC"},{"title":"Subscribing to events via Websocket","href":"/cometbft/latest/docs/core/Subscribing-to-events-via-Websocket"},{"title":"Metrics","href":"/cometbft/latest/docs/core/metrics"},{"title":"Validators","href":"/cometbft/latest/docs/core/Validators"},{"title":"Light Client","href":"/cometbft/latest/docs/core/light-client"},{"title":"Block Structure","href":"/cometbft/latest/docs/core/block-structure"},{"title":"How to read logs","href":"/cometbft/latest/docs/core/how-to-read-logs"},{"group":"Experimental","pages":[{"title":"Lib-P2P Networking","icon":"waypoints","href":"/cometbft/latest/docs/experimental/lib-p2p"}]}]},{"group":"Developer Tools","pages":[{"title":"Overview","href":"/cometbft/latest/docs/tools/Overview"},{"title":"Debugging","href":"/cometbft/latest/docs/tools/debugging"}]},{"group":"Networks","pages":[{"title":"Docker Compose","href":"/cometbft/latest/docs/networks/Docker-Compose"}]},{"group":"CometBFT Quality Assurance","pages":[{"title":"CometBFT Quality Assurance","href":"/cometbft/latest/docs/qa/CometBFT-qa"},{"title":"Method","href":"/cometbft/latest/docs/qa/Method"},{"title":null,"href":"/cometbft/latest/docs/qa/CometBFT-QA-38"},{"title":null,"href":"/cometbft/latest/docs/qa/CometBFT-QA-37"},{"title":null,"href":"/cometbft/latest/docs/qa/CometBFT-QA-34"},{"title":null,"href":"/cometbft/latest/docs/qa/TMCore-QA-37"},{"title":null,"href":"/cometbft/latest/docs/qa/TMCore-QA-34"}]}]}]},{"tab":"Specification","groups":[{"group":"CometBFT Spec","pages":[{"title":"Overview","href":"/cometbft/latest/spec/CometBFT-Spec"},{"group":"Core","pages":[{"title":null,"href":"/cometbft/latest/spec/core/Overview"},{"title":"Data Structures","href":"/cometbft/latest/spec/core/Data_structures"},{"title":"Encoding","href":"/cometbft/latest/spec/core/encoding"},{"title":"Genesis","href":"/cometbft/latest/spec/core/genesis"},{"title":"State","href":"/cometbft/latest/spec/core/state"}]},{"group":"ABCI++","pages":[{"title":null,"href":"/cometbft/latest/spec/abci/Overview"},{"title":"Overview and basic concepts","href":"/cometbft/latest/spec/abci/Outline"},{"title":"Methods","href":"/cometbft/latest/spec/abci/Methods"},{"title":"Requirements for the Application","href":"/cometbft/latest/spec/abci/Requirements-for-the-Application"},{"title":"CometBFT's expected behavior","href":"/cometbft/latest/spec/abci/CometBFTs-expected-behavior"},{"title":"Client and Server","href":"/cometbft/latest/spec/abci/Client-and-server"},{"title":"ABCI++ extra","href":"/cometbft/latest/spec/abci/Introduction"}]},{"group":"Consensus","pages":[{"title":null,"href":"/cometbft/latest/spec/consensus/Overview"},{"title":"Consensus Paper","href":"/cometbft/latest/spec/consensus/Consensus-Paper"},{"title":"Byzantine Consensus Algorithm","href":"/cometbft/latest/spec/consensus/Byzantine-Consensus-Algorithm"},{"title":null,"href":"/cometbft/latest/spec/consensus/Light-Client"},{"title":"Creating a proposal","href":"/cometbft/latest/spec/consensus/Creating-Proposal"},{"title":"BFT Time","href":"/cometbft/latest/spec/consensus/BFT-Time"},{"title":null,"href":"/cometbft/latest/spec/consensus/Proposer-Selection"},{"title":"Evidence","href":"/cometbft/latest/spec/consensus/Evidence"},{"title":"Validator Signing","href":"/cometbft/latest/spec/consensus/Validator-Signing"},{"title":"WAL","href":"/cometbft/latest/spec/consensus/WAL"}]},{"group":"Light Client","pages":[{"title":"Light Client Specification","href":"/cometbft/latest/spec/light-client/Light-Client-Specification"},{"title":null,"href":"/cometbft/latest/spec/light-client/verification"},{"title":null,"href":"/cometbft/latest/spec/light-client/Fork-Detection"},{"title":null,"href":"/cometbft/latest/spec/light-client/Accountability"}]},{"group":"P2P","pages":[{"title":null,"href":"/cometbft/latest/spec/p2p/Peer-to-Peer"},{"title":"Implementation","href":"/cometbft/latest/spec/p2p/Implementation-of-the-p2p-layer"},{"group":"Legacy Docs","pages":[{"title":"Legacy Docs","href":"/cometbft/latest/spec/p2p/legacy-docs/Overview"},{"group":"Messages","pages":[{"title":null,"href":"/cometbft/latest/spec/p2p/legacy-docs/messages/Overview"},{"title":"Block Sync","href":"/cometbft/latest/spec/p2p/legacy-docs/messages/block-sync"},{"title":"Evidence","href":"/cometbft/latest/spec/p2p/legacy-docs/messages/evidence"},{"title":"Mempool","href":"/cometbft/latest/spec/p2p/legacy-docs/messages/mempool"},{"title":"State Sync","href":"/cometbft/latest/spec/p2p/legacy-docs/messages/state-sync"},{"title":"Peer Exchange","href":"/cometbft/latest/spec/p2p/legacy-docs/messages/Peer-Exchange"},{"title":"Consensus","href":"/cometbft/latest/spec/p2p/legacy-docs/messages/consensus"}]},{"title":"P2P Multiplex Connection","href":"/cometbft/latest/spec/p2p/legacy-docs/P2P-Multiplex-Connection"},{"title":"Peers","href":"/cometbft/latest/spec/p2p/legacy-docs/Peers"},{"title":"P2P Config","href":"/cometbft/latest/spec/p2p/legacy-docs/P2P-Config"},{"title":"Peer Discovery","href":"/cometbft/latest/spec/p2p/legacy-docs/Peer-Discovery"},{"group":"Reactors","pages":[{"title":"Reactors","href":"/cometbft/latest/spec/p2p/reactor-api/Reactors"},{"title":"Reactor API","href":"/cometbft/latest/spec/p2p/reactor-api/Reactor-Api"},{"title":"API for Reactors","href":"/cometbft/latest/spec/p2p/reactor-api/API-for-Reactors"}]}]}]},{"group":"RPC","pages":[{"title":"RPC spec","href":"/cometbft/latest/spec/rpc/Rpc-Spe"}]},{"group":"Blockchain","pages":[{"title":"Blockchain","href":"/cometbft/latest/spec/blockchain/Blockchain"}]}]}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"CometBFT RPC","href":"/cometbft/latest/api-reference/rpc/index"}]},{"group":"RPC Methods","pages":[{"group":"Tx","pages":[{"title":"broadcast_tx_sync","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /broadcast_tx_sync","href":"/cometbft/latest/api-reference/rpc/tx/broadcast_tx_sync"},{"title":"broadcast_tx_async","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /broadcast_tx_async","href":"/cometbft/latest/api-reference/rpc/tx/broadcast_tx_async"},{"title":"broadcast_tx_commit","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /broadcast_tx_commit","href":"/cometbft/latest/api-reference/rpc/tx/broadcast_tx_commit"},{"title":"check_tx","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /check_tx","href":"/cometbft/latest/api-reference/rpc/tx/check_tx"}]},{"group":"Info","pages":[{"title":"health","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /health","href":"/cometbft/latest/api-reference/rpc/info/health"},{"title":"status","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /status","href":"/cometbft/latest/api-reference/rpc/info/status"},{"title":"net_info","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /net_info","href":"/cometbft/latest/api-reference/rpc/info/net_info"},{"title":"blockchain","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /blockchain","href":"/cometbft/latest/api-reference/rpc/info/blockchain"},{"title":"header","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /header","href":"/cometbft/latest/api-reference/rpc/info/header"},{"title":"header_by_hash","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /header_by_hash","href":"/cometbft/latest/api-reference/rpc/info/header_by_hash"},{"title":"block","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /block","href":"/cometbft/latest/api-reference/rpc/info/block"},{"title":"block_by_hash","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /block_by_hash","href":"/cometbft/latest/api-reference/rpc/info/block_by_hash"},{"title":"block_results","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /block_results","href":"/cometbft/latest/api-reference/rpc/info/block_results"},{"title":"commit","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /commit","href":"/cometbft/latest/api-reference/rpc/info/commit"},{"title":"validators","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /validators","href":"/cometbft/latest/api-reference/rpc/info/validators"},{"title":"genesis","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /genesis","href":"/cometbft/latest/api-reference/rpc/info/genesis"},{"title":"genesis_chunked","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /genesis_chunked","href":"/cometbft/latest/api-reference/rpc/info/genesis_chunked"},{"title":"dump_consensus_state","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /dump_consensus_state","href":"/cometbft/latest/api-reference/rpc/info/dump_consensus_state"},{"title":"consensus_state","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /consensus_state","href":"/cometbft/latest/api-reference/rpc/info/consensus_state"},{"title":"consensus_params","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /consensus_params","href":"/cometbft/latest/api-reference/rpc/info/consensus_params"},{"title":"unconfirmed_txs","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /unconfirmed_txs","href":"/cometbft/latest/api-reference/rpc/info/unconfirmed_txs"},{"title":"num_unconfirmed_txs","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /num_unconfirmed_txs","href":"/cometbft/latest/api-reference/rpc/info/num_unconfirmed_txs"},{"title":"tx_search","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /tx_search","href":"/cometbft/latest/api-reference/rpc/info/tx_search"},{"title":"block_search","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /block_search","href":"/cometbft/latest/api-reference/rpc/info/block_search"},{"title":"tx","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /tx","href":"/cometbft/latest/api-reference/rpc/info/tx"},{"title":"broadcast_evidence","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /broadcast_evidence","href":"/cometbft/latest/api-reference/rpc/info/broadcast_evidence"}]},{"group":"Unsafe","pages":[{"title":"dial_seeds","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /dial_seeds","href":"/cometbft/latest/api-reference/rpc/unsafe/dial_seeds"},{"title":"dial_peers","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /dial_peers","href":"/cometbft/latest/api-reference/rpc/unsafe/dial_peers"}]},{"group":"ABCI","pages":[{"title":"abci_info","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /abci_info","href":"/cometbft/latest/api-reference/rpc/abci/abci_info"},{"title":"abci_query","deprecated":null,"version":null,"openapi":"/cometbft/latest/api-reference/rpc/openapi.yaml get /abci_query","href":"/cometbft/latest/api-reference/rpc/abci/abci_query"}]}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","mode":"wide","href":"/cometbft/latest/changelog/release-notes"}]}]},{"version":"next","tag":"Unreleased","pages":[{"title":"next","href":"/cometbft/next/docs/README"}]},{"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","tabs":[{"tab":"Documentation","groups":[{"group":"Cosmos Hub","pages":[{"group":"Start here","pages":[{"title":"Cosmos Hub operator docs","href":"/hub/latest"},{"title":"What is gaia","href":"/hub/latest/getting-started/what-is-gaia"},{"title":"Versions","href":"/hub/latest/start/versions"}]},{"group":"Run a node","pages":[{"title":"System requirements","href":"/hub/latest/getting-started/system-requirements"},{"title":"Install gaiad","href":"/hub/latest/getting-started/installation"},{"title":"Join mainnet","href":"/hub/latest/hub-tutorials/join-mainnet"},{"title":"Sync a node","href":"/hub/latest/node/sync"},{"title":"Database backends","href":"/hub/latest/node/database"},{"title":"Run gaiad as a service","href":"/hub/latest/node/service"},{"title":"Join the testnet","href":"/hub/latest/hub-tutorials/join-testnet"}]},{"group":"Upgrade a node","pages":[{"title":"Upgrade a node","href":"/hub/latest/hub-tutorials/upgrade-node"},{"title":"Upgrade history","href":"/hub/latest/upgrade/history"}]},{"group":"Run a validator","pages":[{"title":"Validator overview","href":"/hub/latest/validators/overview"},{"title":"Validator onboarding checklist","href":"/hub/latest/validators/README"},{"title":"Create and manage a validator","href":"/hub/latest/validators/validator-setup"},{"title":"Validator security","href":"/hub/latest/validators/security"},{"title":"Remote signing","href":"/hub/latest/validators/remote-signing"},{"title":"Monitoring","href":"/hub/latest/validators/monitoring"},{"title":"Validator FAQ","href":"/hub/latest/validators/validator-faq"}]},{"group":"Run public infrastructure","pages":[{"title":"Run public endpoints","href":"/hub/latest/infrastructure/endpoints"},{"title":"Snapshots","href":"/hub/latest/infrastructure/snapshots"},{"title":"Peering","href":"/hub/latest/infrastructure/peering"},{"title":"Relaying","href":"/hub/latest/infrastructure/relaying"},{"title":"Archive nodes and chain archives","href":"/hub/latest/resources/archives"}]},{"group":"Delegate and stake","pages":[{"title":"Delegate and stake","href":"/hub/latest/delegators/README"},{"title":"Delegator CLI guide","href":"/hub/latest/delegators/delegator-guide-cli"},{"title":"Liquid staking module","href":"/hub/latest/modules/liquid"},{"title":"Delegator security","href":"/hub/latest/delegators/delegator-security"},{"title":"Delegator FAQ","href":"/hub/latest/delegators/delegator-faq"}]},{"group":"Governance","pages":[{"title":"Governance process","href":"/hub/latest/governance/process"},{"title":"Submitting a proposal","href":"/hub/latest/governance/submitting"},{"group":"Proposal types","pages":[{"title":"Proposal types","href":"/hub/latest/governance/proposal-types/README"},{"title":"Text proposals","href":"/hub/latest/governance/proposal-types/text-prop"},{"title":"Parameter change proposals","href":"/hub/latest/governance/proposal-types/param-change"},{"title":"Software upgrade proposals","href":"/hub/latest/governance/proposal-types/software-upgrade"},{"title":"Community pool spend","href":"/hub/latest/governance/proposal-types/community-pool-spend"}]}]},{"group":"Reference","pages":[{"title":"gaiad reference","href":"/hub/latest/hub-tutorials/gaiad"},{"group":"Modules","pages":[{"title":"Modules on the Hub","href":"/hub/latest/modules/README"},{"title":"Tokenfactory module","href":"/hub/latest/modules/tokenfactory"},{"title":"Fee market module","href":"/hub/latest/modules/feemarket"},{"title":"Metaprotocols module","href":"/hub/latest/modules/metaprotocols"}]},{"title":"Genesis file","href":"/hub/latest/resources/genesis"},{"title":"Build and verify gaiad","href":"/hub/latest/resources/reproducible-builds"},{"group":"Wallets","pages":[{"title":"HD wallets","href":"/hub/latest/resources/hd-wallets"},{"title":"Ledger hardware wallets","href":"/hub/latest/resources/ledger"}]},{"group":"Architecture and ADRs","pages":[{"title":"Architecture Decision Records (ADR)","href":"/hub/latest/architecture/README"},{"title":"ADR Creation Process","href":"/hub/latest/architecture/PROCESS"},{"title":"Architecture Decision Records (ADR)","href":"/hub/latest/architecture/adr/README"},{"title":"ADR Creation Process","href":"/hub/latest/architecture/adr/PROCESS"},{"title":"ADR 001: Interchain Accounts","href":"/hub/latest/architecture/adr/adr-001-interchain-accounts"},{"title":"ADR 002: Globalfee Module [DEPRECATED]","href":"/hub/latest/architecture/adr/adr-002-globalfee"},{"title":"ADR 003: Interchain Accounts Controller Module","href":"/hub/latest/architecture/adr/adr-003-ica-controller"},{"title":null,"href":"/hub/latest/architecture/templates/adr-template"}]}]}]}]}]},{"version":"next","tag":"Unreleased","pages":[{"title":"next","href":"/hub/next/index"}]},{"version":"v25","pages":[{"title":"v25","href":"/hub/v25/index"}]}]}]},"basePath":"","title":"Upgrading Cosmos SDK - Cosmos Docs","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":[],"chunks":[]}