Point Cosmos-KMS at the custodian holding the consensus key: AWS KMS, a PKCS#11 HSM, or a file.
A signing backend is the custodian that holds the validator’s consensus key and signs with it. Cosmos-KMS supports three: AWS KMS, a PKCS#11 hardware module, and a file on disk. The keys block in kms.yaml selects one, and this guide configures each in turn.
A running signer and node, which Remote signing tutorial sets up. Between backends only the keys block changes in kms.yaml. The file backend reuses the tutorial’s existing key, but the AWS KMS and PKCS#11 backends hold a new consensus key the validator must adopt first. See Adopt the key on a validator.
Per backend: the AWS CLI and an AWS account for AWS KMS; your HSM’s tooling plus OpenSC’s pkcs11-tool for PKCS#11, with SoftHSM2 as a local test rig.
The chain’s binary; the examples use simd. To build it and run a node, see Run a node.
AWS KMS caps messages it signs in raw form at 4096 bytes. This binds ed25519 and secp256k1, which send the raw consensus message, so be careful with features that enlarge it, such as vote extensions. The signer checks the size itself and fails before calling AWS. mldsa65 and secp256k1eth are not bound by the cap.
AWS Key Management Service (KMS) is a managed service that stores cryptographic keys and signs with them on request. With this backend, the consensus key lives in KMS and never leaves it. The signer calls the KMS Sign API to produce each signature. Credentials come from the standard AWS default chain: environment, shared config, SSO, or an IAM role. No secrets enter kms.yaml.This backend signs with any key type Cosmos-KMS supports: ed25519, secp256k1, secp256k1eth, and post-quantum mldsa65. Provision the AWS key with the key spec that matches the algorithm, such as ECC_NIST_EDWARDS25519 for ed25519 or ML_DSA_65 for mldsa65.Create an ML-DSA-65 signing key and give it an alias (or skip these and point key_id at a key you already have):
The key_id accepts a key ID, a full ARN, or an alias. region is optional and falls back to the AWS default chain. Two more optional fields, not shown above, are profile (a named shared-config profile) and endpoint (for LocalStack-style testing only).The signer needs only two IAM permissions on the key: kms:GetPublicKey, called once at startup, and kms:Sign, called per block. kms:DescribeKey is not required. Attach a least-privilege policy scoped to the key ARN, not the alias; AWS resolves the alias to the key server-side:
A freshly created KMS key is a new consensus key. To move an existing validator onto it, rotate the validator to the new key; to stand up a new validator, register it with the new key’s public key. See Rotate a consensus key held in Cosmos-KMS. Creating the key inside KMS keeps it from ever leaving the service.
The PKCS#11 backend keeps the consensus key on a hardware security module (HSM) or token and signs on the device through PKCS#11, the standard interface for cryptographic hardware. The key never leaves the module. The signer uses an existing key only, so provision one with your HSM tooling first. The example commands below show how to provision an ed25519 key with SoftHSM2 for testing:
The --module path is platform-specific: Linux uses /usr/lib/softhsm/libsofthsm2.so, and macOS Homebrew uses /opt/homebrew/lib/softhsm/libsofthsm2.so (/usr/local/lib/softhsm/... on Intel). Use the same path for the module field below.Then bind it:
Select the token with exactly one of token_label or slot.
Select the key with key_label, key_id (the hex CKA_ID), or both.
Supply the PIN through exactly one of pin, pin_env, or pin_file.
Prefer pin_env or pin_file. An inline pin puts the PIN in the config file.Set the PIN in the environment the signer runs in so it matches pin_env: export KMS_PIN=<pin>. If you are using SoftHSM2 as the test rig, also export SOFTHSM2_CONF=<path-to-softhsm2.conf> so the module can find the token.As with AWS KMS, a key generated in the HSM is a new consensus key. Move an existing validator onto it by rotation, or register a new validator with its public key. See Rotate a consensus key held in Cosmos-KMS.
The file backend reads the consensus key from a file on the signer’s disk into memory. It is the development and testing backend. The key sits in plaintext, so it is not production custody. The Remote signing tutorial covers it end to end:
The key_file accepts a CometBFT priv_validator_key.json or a raw base64-encoded private key. The file backend also signs post-quantum consensus keys. Generate the key with simd init <moniker> --consensus-key-algo ml_dsa_65 and bind it:
The AWS KMS and PKCS#11 backends generate the key inside the custodian, so it is a new consensus key, not the one your validator already runs. Do not just repoint an existing validator’s signer at a fresh key. The node finds its consensus key absent from the validator set and demotes itself, so it never proposes and there is no signature error to look for. The symptom is This node is not a validator in the node log and a chain that does not advance. Only the file backend, pointed at the validator’s existing priv_validator_key.json, skips this step.Adopt the key one of two ways:
Existing validator: rotate its consensus key to the new one, which derives the new public key from a shadow node and swaps it in with no downtime. See Rotate a consensus key held in Cosmos-KMS.
New validator: register it with the new key’s consensus public key using gentx --pubkey (or the pubkey field of create-validator’s validator.json). Read the public key from the custodian itself, since gentx runs before the chain exists and there is no node to query. For PKCS#11, read the object and strip the DER wrapper, leaving the raw 32 bytes to base64:
Verification is the same regardless of custodian. Start the signer, start the node, and confirm blocks flow, exactly as in the tutorial.If this key has never signed on the chain, the signer’s first start needs --allow-fresh-state <chain-id> to write the height-0 double-sign floor, otherwise it exits with sign-state file ... is missing or empty; refusing to start at height 0. Pass it only on that first start. See Start the signer in the tutorial for the full explanation, and the configuration reference for kms state init.
The signer rejects the config at startup: both token_label and slot set, or more than one PIN source. The error names the offending field. A missing algorithm on the file backend instead fails with the less specific file: unknown key type.
The signer starts but cannot reach the key: wrong module path, wrong key_id or alias, or AWS credentials with no permission (denied kms:GetPublicKey fails at kms start with awskms: get public key for "<key_id>": <AccessDeniedException>). These also fail at startup.
The node exits with a pubkey timeout: the signer is not running or not reachable. Start the signer first. It dials and retries.
{"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":"/ibc/latest/intro","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":"/ibc"},{"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":"6adba38ae12431dd3d60bd71","collectionId":"b4abdae4-2406-40ac-9f54-d1a649194d75","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adba38ae12431dd3d60bd71"},"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":"6adba38ae12431dd3d60bd71","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"Cosmos SDK","count":629},{"language":"default","tag":"API Reference","count":401},{"language":"default","tag":"Documentation","count":288},{"language":"default","tag":"CometBFT","count":236},{"language":"default","tag":"REST (gRPC Gateway)","count":216},{"language":"default","tag":"IBC Protocol","count":193},{"language":"default","tag":"RPC Methods","count":120},{"language":"default","tag":"Cosmos Hub","count":108},{"language":"default","tag":"Info","count":91},{"language":"default","tag":"ADRs","count":80}]},"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":"editor-v7-file-tree","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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"editor-agent-model-picker","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":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/next/kms/configure-backend","slug":"/sdk/next/kms/configure-backend","pageMetadata":{"noindex":true,"title":"Configure a signing backend","description":"Point Cosmos-KMS at the custodian holding the consensus key: AWS KMS, a PKCS#11 HSM, or a file.","href":"/sdk/next/kms/configure-backend"},"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: \"Point Cosmos-KMS at the custodian holding the consensus key: AWS KMS, a PKCS#11 HSM, or a file.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A signing backend is the custodian that holds the validator’s consensus key and signs with it. Cosmos-KMS supports three: AWS KMS, a PKCS#11 hardware module, and a file on disk. The `,_jsx(_components.code,{children:`keys`}),` block in `,_jsx(_components.code,{children:`kms.yaml`}),` selects one, and this guide configures each in turn.`]}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A running signer and node, which `,_jsx(_components.a,{href:`/sdk/next/kms/tutorial-file-backend`,children:`Remote signing tutorial`}),` sets up. Between backends only the `,_jsx(_components.code,{children:`keys`}),` block changes in `,_jsx(_components.code,{children:`kms.yaml`}),`. The file backend reuses the tutorial’s existing key, but the AWS KMS and PKCS#11 backends hold a new consensus key the validator must adopt first. See `,_jsx(_components.a,{href:`#adopt-the-key-on-a-validator`,children:`Adopt the key on a validator`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Per backend: the `,_jsx(_components.a,{href:`https://aws.amazon.com/cli/`,children:`AWS CLI`}),` and an AWS account for AWS KMS; your HSM’s tooling plus `,_jsx(_components.a,{href:`https://github.com/OpenSC/OpenSC`,children:`OpenSC`}),`’s `,_jsx(_components.code,{children:`pkcs11-tool`}),` for PKCS#11, with `,_jsx(_components.a,{href:`https://www.opendnssec.org/softhsm/`,children:`SoftHSM2`}),` as a local test rig.`]}),`\n`,_jsxs(_components.li,{children:[`The chain’s binary; the examples use `,_jsx(_components.code,{children:`simd`}),`. To build it and run a node, see `,_jsx(_components.a,{href:`/sdk/next/node/run-node`,children:`Run a node`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`algorithm`}),` field is required for all backends.`]}),`\n`,_jsx(Heading,{level:`2`,id:`aws-kms`,children:`AWS KMS`}),`\n`,_jsxs(Warning,{children:[`AWS KMS caps messages it signs in raw form at 4096 bytes. This binds `,_jsx(_components.code,{children:`ed25519`}),` and `,_jsx(_components.code,{children:`secp256k1`}),`, which send the raw consensus message, so be careful with features that enlarge it, such as vote extensions. The signer checks the size itself and fails before calling AWS. `,_jsx(_components.code,{children:`mldsa65`}),` and `,_jsx(_components.code,{children:`secp256k1eth`}),` are not bound by the cap.`]}),`\n`,_jsxs(_components.p,{children:[`AWS Key Management Service (KMS) is a managed service that stores cryptographic keys and signs with them on request. With this backend, the consensus key lives in KMS and never leaves it. The signer calls the KMS Sign API to produce each signature. Credentials come from the standard AWS default chain: environment, shared config, SSO, or an IAM role. No secrets enter `,_jsx(_components.code,{children:`kms.yaml`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`This backend signs with any key type Cosmos-KMS supports: `,_jsx(_components.code,{children:`ed25519`}),`, `,_jsx(_components.code,{children:`secp256k1`}),`, `,_jsx(_components.code,{children:`secp256k1eth`}),`, and post-quantum `,_jsx(_components.code,{children:`mldsa65`}),`. Provision the AWS key with the key spec that matches the algorithm, such as `,_jsx(_components.code,{children:`ECC_NIST_EDWARDS25519`}),` for `,_jsx(_components.code,{children:`ed25519`}),` or `,_jsx(_components.code,{children:`ML_DSA_65`}),` for `,_jsx(_components.code,{children:`mldsa65`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Create an ML-DSA-65 signing key and give it an alias (or skip these and point `,_jsx(_components.code,{children:`key_id`}),` at a key you already have):`]}),`\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:`aws`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` kms`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` create-key`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --key-spec`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` ML_DSA_65`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --key-usage`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` SIGN_VERIFY`})]}),`\n`]})})}),`\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:`aws`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` kms`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` create-alias`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --alias-name`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` alias/validator`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --target-key-id`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`key-i`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`d`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`>`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Then bind it in the `,_jsx(_components.code,{children:`keys`}),` block:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`yaml`,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:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`keys`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` - `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`chain_ids`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: [`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`my-chain-1`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` backend`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`awskms`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` algorithm`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`mldsa65`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` key_id`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`alias/validator`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` region`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`us-east-1`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`key_id`}),` accepts a key ID, a full ARN, or an alias. `,_jsx(_components.code,{children:`region`}),` is optional and falls back to the AWS default chain. Two more optional fields, not shown above, are `,_jsx(_components.code,{children:`profile`}),` (a named shared-config profile) and `,_jsx(_components.code,{children:`endpoint`}),` (for LocalStack-style testing only).`]}),`\n`,_jsxs(_components.p,{children:[`The signer needs only two IAM permissions on the key: `,_jsx(_components.code,{children:`kms:GetPublicKey`}),`, called once at startup, and `,_jsx(_components.code,{children:`kms:Sign`}),`, called per block. `,_jsx(_components.code,{children:`kms:DescribeKey`}),` is not required. Attach a least-privilege policy scoped to the key ARN, not the alias; AWS resolves the alias to the key server-side:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`json`,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:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`10`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` \"Version\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"2012-10-17\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` \"Statement\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` \"Effect\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"Allow\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` \"Action\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: [`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"kms:GetPublicKey\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`, `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"kms:Sign\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` \"Resource\"`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`\"arn:aws:kms:\u003cregion>:\u003caccount-id>:key/\u003ckey-id>\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`A freshly created KMS key is a new consensus key. To move an existing validator onto it, rotate the validator to the new key; to stand up a new validator, register it with the new key’s public key. See `,_jsx(_components.a,{href:`/sdk/next/kms/rotate-key-remote-signer`,children:`Rotate a consensus key held in Cosmos-KMS`}),`. Creating the key inside KMS keeps it from ever leaving the service.`]}),`\n`,_jsx(Heading,{level:`2`,id:`pkcs#11`,children:_jsx(_components.code,{children:`PKCS#11`})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`PKCS#11`}),` backend keeps the consensus key on a hardware security module (HSM) or token and signs on the device through `,_jsx(_components.code,{children:`PKCS#11`}),`, the standard interface for cryptographic hardware. The key never leaves the module. The signer uses an existing key only, so provision one with your HSM tooling first. The example commands below show how to provision an ed25519 key with SoftHSM2 for testing:`]}),`\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:`softhsm2-util`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --init-token`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --free`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --label`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` validator-token`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --pin`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` 1234`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --so-pin`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` 4321`})]}),`\n`]})})}),`\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:`pkcs11-tool`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --module`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` /usr/lib/softhsm/libsofthsm2.so`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --login`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --pin`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` 1234`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --keypairgen`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --key-type`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` EC:edwards25519`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --label`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` validator`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --id`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` 01`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`--module`}),` path is platform-specific: Linux uses `,_jsx(_components.code,{children:`/usr/lib/softhsm/libsofthsm2.so`}),`, and macOS Homebrew uses `,_jsx(_components.code,{children:`/opt/homebrew/lib/softhsm/libsofthsm2.so`}),` (`,_jsx(_components.code,{children:`/usr/local/lib/softhsm/...`}),` on Intel). Use the same path for the `,_jsx(_components.code,{children:`module`}),` field below.`]}),`\n`,_jsx(_components.p,{children:`Then bind it:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`yaml`,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:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`keys`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` - `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`chain_ids`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: [`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`my-chain-1`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` backend`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`pkcs11`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` algorithm`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`ed25519`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` module`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`/usr/lib/softhsm/libsofthsm2.so`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` token_label`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`validator-token`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` key_label`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`validator`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` pin_env`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`KMS_PIN`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The signer enforces three field rules at startup:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Select the token with exactly one of `,_jsx(_components.code,{children:`token_label`}),` or `,_jsx(_components.code,{children:`slot`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select the key with `,_jsx(_components.code,{children:`key_label`}),`, `,_jsx(_components.code,{children:`key_id`}),` (the hex `,_jsx(_components.code,{children:`CKA_ID`}),`), or both.`]}),`\n`,_jsxs(_components.li,{children:[`Supply the PIN through exactly one of `,_jsx(_components.code,{children:`pin`}),`, `,_jsx(_components.code,{children:`pin_env`}),`, or `,_jsx(_components.code,{children:`pin_file`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Prefer `,_jsx(_components.code,{children:`pin_env`}),` or `,_jsx(_components.code,{children:`pin_file`}),`. An inline `,_jsx(_components.code,{children:`pin`}),` puts the PIN in the config file.`]}),`\n`,_jsxs(_components.p,{children:[`Set the PIN in the environment the signer runs in so it matches `,_jsx(_components.code,{children:`pin_env`}),`: `,_jsx(_components.code,{children:`export KMS_PIN=\u003cpin>`}),`. If you are using SoftHSM2 as the test rig, also `,_jsx(_components.code,{children:`export SOFTHSM2_CONF=\u003cpath-to-softhsm2.conf>`}),` so the module can find the token.`]}),`\n`,_jsxs(_components.p,{children:[`As with AWS KMS, a key generated in the HSM is a new consensus key. Move an existing validator onto it by rotation, or register a new validator with its public key. See `,_jsx(_components.a,{href:`/sdk/next/kms/rotate-key-remote-signer`,children:`Rotate a consensus key held in Cosmos-KMS`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`file`,children:`File`}),`\n`,_jsxs(_components.p,{children:[`The file backend reads the consensus key from a file on the signer’s disk into memory. It is the development and testing backend. The key sits in plaintext, so it is not production custody. The `,_jsx(_components.a,{href:`/sdk/next/kms/tutorial-file-backend`,children:`Remote signing tutorial`}),` covers it end to end:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`yaml`,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:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`keys`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` - `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`chain_ids`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: [`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`my-chain-1`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` backend`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`file`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` algorithm`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`ed25519`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` key_file`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`priv_validator_key.json`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`key_file`}),` accepts a CometBFT `,_jsx(_components.code,{children:`priv_validator_key.json`}),` or a raw base64-encoded private key. The file backend also signs post-quantum consensus keys. Generate the key with `,_jsx(_components.code,{children:`simd init \u003cmoniker> --consensus-key-algo ml_dsa_65`}),` and bind it:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`yaml`,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:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`keys`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:` - `}),_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:`chain_ids`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: [`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`my-chain-1`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` backend`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`file`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` algorithm`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`mldsa65`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#024C1A`,\"--shiki-dark\":`#72F088`},children:` key_file`}),_jsx(_components.span,{style:{color:`#0E1116`,\"--shiki-dark\":`#F0F3F6`},children:`: `}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`priv_validator_key.json`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`adopt-the-key-on-a-validator`,children:`Adopt the key on a validator`}),`\n`,_jsxs(_components.p,{children:[`The AWS KMS and PKCS#11 backends generate the key inside the custodian, so it is a new consensus key, not the one your validator already runs. Do not just repoint an existing validator’s signer at a fresh key. The node finds its consensus key absent from the validator set and demotes itself, so it never proposes and there is no signature error to look for. The symptom is `,_jsx(_components.code,{children:`This node is not a validator`}),` in the node log and a chain that does not advance. Only the file backend, pointed at the validator’s existing `,_jsx(_components.code,{children:`priv_validator_key.json`}),`, skips this step.`]}),`\n`,_jsx(_components.p,{children:`Adopt the key one of two ways:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Existing validator: rotate its consensus key to the new one, which derives the new public key from a shadow node and swaps it in with no downtime. See `,_jsx(_components.a,{href:`/sdk/next/kms/rotate-key-remote-signer`,children:`Rotate a consensus key held in Cosmos-KMS`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`New validator: register it with the new key’s consensus public key using `,_jsx(_components.code,{children:`gentx --pubkey`}),` (or the `,_jsx(_components.code,{children:`pubkey`}),` field of `,_jsx(_components.code,{children:`create-validator`}),`’s validator.json). Read the public key from the custodian itself, since `,_jsx(_components.code,{children:`gentx`}),` runs before the chain exists and there is no node to query. For PKCS#11, read the object and strip the DER wrapper, leaving the raw 32 bytes to base64:`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,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:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:`pkcs11-tool`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --module`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`modul`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`e`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`>`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --login`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --pin`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`pi`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:`n`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:`>`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --read-object`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --type`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` pubkey`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` --label`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` validator`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` |`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` xxd`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` -p`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` |`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` tr`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` -d`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` '\\\\n'`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` |`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` sed`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` 's/^302a300506032b6570032100//'`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` |`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` xxd`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` -r`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` -p`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` |`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` base64`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For AWS KMS, `,_jsx(_components.code,{children:`aws kms get-public-key`}),` returns a DER `,_jsx(_components.code,{children:`SubjectPublicKeyInfo`}),`; strip the same wrapper before encoding.`]}),`\n`,_jsx(Heading,{level:`2`,id:`verify-any-backend`,children:`Verify any backend`}),`\n`,_jsxs(_components.p,{children:[`Verification is the same regardless of custodian. Start the signer, start the node, and confirm blocks flow, exactly as in `,_jsx(_components.a,{href:`/sdk/next/kms/tutorial-file-backend`,children:`the tutorial`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`If this key has never signed on the chain, the signer’s first start needs `,_jsx(_components.code,{children:`--allow-fresh-state \u003cchain-id>`}),` to write the height-0 double-sign floor, otherwise it exits with `,_jsx(_components.code,{children:`sign-state file ... is missing or empty; refusing to start at height 0`}),`. Pass it only on that first start. See `,_jsx(_components.a,{href:`/sdk/next/kms/tutorial-file-backend`,children:`Start the signer`}),` in the tutorial for the full explanation, and the `,_jsx(_components.a,{href:`/sdk/next/kms/configuration-reference`,children:`configuration reference`}),` for `,_jsx(_components.code,{children:`kms state init`}),`.`]}),`\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:`curl`}),_jsx(_components.span,{style:{color:`#023B95`,\"--shiki-dark\":`#91CBFF`},children:` -s`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` localhost:26657/status`}),_jsx(_components.span,{style:{color:`#A0111F`,\"--shiki-dark\":`#FF9492`},children:` |`}),_jsx(_components.span,{style:{color:`#702C00`,\"--shiki-dark\":`#FFB757`},children:` jq`}),_jsx(_components.span,{style:{color:`#032563`,\"--shiki-dark\":`#ADDCFF`},children:` '.result.sync_info.latest_block_height'`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`what-can-go-wrong`,children:`What can go wrong`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The signer rejects the config at startup: both `,_jsx(_components.code,{children:`token_label`}),` and `,_jsx(_components.code,{children:`slot`}),` set, or more than one PIN source. The error names the offending field. A missing `,_jsx(_components.code,{children:`algorithm`}),` on the file backend instead fails with the less specific `,_jsx(_components.code,{children:`file: unknown key type`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`The signer starts but cannot reach the key: wrong `,_jsx(_components.code,{children:`module`}),` path, wrong `,_jsx(_components.code,{children:`key_id`}),` or alias, or AWS credentials with no permission (denied `,_jsx(_components.code,{children:`kms:GetPublicKey`}),` fails at `,_jsx(_components.code,{children:`kms start`}),` with `,_jsx(_components.code,{children:`awskms: get public key for \"\u003ckey_id>\": \u003cAccessDeniedException>`}),`). These also fail at startup.`]}),`\n`,_jsx(_components.li,{children:`The node exits with a pubkey timeout: the signer is not running or not reachable. Start the signer first. It dials and retries.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Look up any config field, its type, and its constraints. See the `,_jsx(_components.a,{href:`/sdk/next/kms/configuration-reference`,children:`configuration reference`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Run the whole flow once with the file backend. See `,_jsx(_components.a,{href:`/sdk/next/kms/tutorial-file-backend`,children:`Remote signing tutorial`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Move an existing validator onto a key in a new backend by rotation. See `,_jsx(_components.a,{href:`/sdk/next/kms/rotate-key-remote-signer`,children:`Rotate a consensus key held in Cosmos-KMS`}),`.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light-high-contrast","dark":"github-dark-high-contrast"}},"config":{},"pageMetadata":{"noindex":true,"title":"Configure a signing backend","description":"Point Cosmos-KMS at the custodian holding the consensus key: AWS KMS, a PKCS#11 HSM, or a file.","href":"/sdk/next/kms/configure-backend"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"AWS KMS","slug":"aws-kms","depth":2,"children":[]},{"title":"PKCS#11","slug":"pkcs#11","depth":2,"children":[]},{"title":"File","slug":"file","depth":2,"children":[]},{"title":"Adopt the key on a validator","slug":"adopt-the-key-on-a-validator","depth":2,"children":[]},{"title":"Verify any backend","slug":"verify-any-backend","depth":2,"children":[]},{"title":"What can go wrong","slug":"what-can-go-wrong","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"cosmos-docs","siteName":"Cosmos Docs","title":"Configure a signing backend - Cosmos Docs","navMaps":{"firstHrefInVersion":{"v0.55":{"href":"/sdk/latest/kms/configure-backend","matchLevel":1},"next":{"href":"/sdk/next/kms/configure-backend","matchLevel":0},"v0.54":{"href":"/sdk/v0.54/tutorials","matchLevel":2},"v0.53":{"href":"/sdk/v0.53/tutorials","matchLevel":2},"v0.50":{"href":"/sdk/v0.50/learn","matchLevel":4},"v0.47":{"href":"/sdk/v0.47/learn","matchLevel":4},"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},"v11.x.x":{"href":"/ibc/latest/intro","matchLevel":4},"v10.1.x":{"href":"/ibc/v10.1.x/intro","matchLevel":4},"v8.5.x":{"href":"/ibc/v8.5.x/intro","matchLevel":4},"v7.8.x":{"href":"/ibc/v7.8.x/intro","matchLevel":4},"v6.3.x":{"href":"/ibc/v6.3.x/intro","matchLevel":4},"v5.4.x":{"href":"/ibc/v5.4.x/intro","matchLevel":4},"v4.6.x":{"href":"/ibc/v4.6.x/intro","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","matchLevel":4}},"firstHrefInLanguage":{}},"lastModified":"2026-08-25T13:39:57.034Z","originalFileLocation":"sdk/next/kms/configure-backend.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=\"Point Cosmos-KMS at the custodian holding the consensus key: AWS KMS, a PKCS#11 HSM, or a file.\">\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=\"Configure a signing backend - 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/next/kms/configure-backend\">\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=Remote+Signing%3A+Cosmos-KMS\u0026amp;title=Configure+a+signing+backend\u0026amp;description=Point+Cosmos-KMS+at+the+custodian+holding+the+consensus+key%3A+AWS+KMS%2C+a+PKCS%2311+HSM%2C+or+a+file.\u0026amp;theme=fcf436d6188c17e0fd925a75\u0026amp;signature=5c4fd55e50260bbec4dce49378b3068006655c1c018a91bdb939c26dd6db0348\">\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=\"Configure a signing backend - 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=Remote+Signing%3A+Cosmos-KMS\u0026amp;title=Configure+a+signing+backend\u0026amp;description=Point+Cosmos-KMS+at+the+custodian+holding+the+consensus+key%3A+AWS+KMS%2C+a+PKCS%2311+HSM%2C+or+a+file.\u0026amp;theme=fcf436d6188c17e0fd925a75\u0026amp;signature=5c4fd55e50260bbec4dce49378b3068006655c1c018a91bdb939c26dd6db0348\">\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/next/kms/configure-backend\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/sdk/next/kms/configure-backend.md\">","siteName":"Cosmos Docs","nav":{"global":null,"dropdowns":[{"dropdown":"Home","pages":[{"title":"Cosmos Developer Documentation","mode":"custom","href":""}]},{"dropdown":"Cosmos SDK","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cosmos-docs/assets/icons/cosmos-sdk.svg","versions":[{"version":"v0.55","default":true,"tag":"Latest","pages":[{"title":"v0.55","href":"/sdk/latest/kms/configure-backend"}]},{"version":"next","tag":"Unreleased","tabs":[{"tab":"Cosmos SDK","groups":[{"group":"Intro","icon":"earth","pages":[{"title":"Cosmos SDK Docs","href":"/sdk/next/learn"},{"title":"Start Here","icon":"play","href":"/sdk/next/learn/start-here"}]},{"group":"Overview","icon":"book-open","pages":[{"title":"The Cosmos Stack","href":"/sdk/next/learn/intro/cosmos-stack"},{"title":"What is the Cosmos SDK","href":"/sdk/next/learn/intro/overview"},{"title":"Blockchain Basics","href":"/sdk/next/learn/intro/blockchain-basics"},{"title":"Cosmos Architecture","href":"/sdk/next/learn/intro/sdk-app-architecture"}]},{"group":"Concepts","icon":"graduation-cap","pages":[{"group":"Fundamentals","pages":[{"title":"Accounts","href":"/sdk/next/learn/concepts/accounts"},{"title":"Transactions, Messages, and Queries","href":"/sdk/next/learn/concepts/transactions"},{"title":"Transaction Lifecycle","href":"/sdk/next/learn/concepts/lifecycle"}]},{"group":"Modules","pages":[{"title":"Intro to Modules","href":"/sdk/next/learn/concepts/modules"},{"title":"State, Storage, and Genesis","href":"/sdk/next/learn/concepts/store"},{"title":"Protobuf and Signing","href":"/sdk/next/learn/concepts/encoding"},{"title":"Execution Context, Gas, and Events","href":"/sdk/next/learn/concepts/context-gas-events"}]},{"group":"Cosmos SDK Internals","pages":[{"title":"Cosmos Blockchain Structure","href":"/sdk/next/learn/concepts/sdk-structure"},{"title":"BaseApp Overview","href":"/sdk/next/learn/concepts/baseapp"},{"title":"app.go Overview","href":"/sdk/next/learn/concepts/app-go"},{"title":"CLI, gRPC, and REST API","href":"/sdk/next/learn/concepts/cli-grpc-rest"},{"title":"Testing in the SDK","href":"/sdk/next/learn/concepts/testing"}]},{"title":"Release Families","href":"/sdk/next/release-family"}]},{"group":"Build a Chain","icon":"hammer","pages":[{"title":"Tutorial Intro","href":"/sdk/next/tutorials/example/00-overview"},{"title":"Prerequisites","href":"/sdk/next/tutorials/example/01-prerequisites"},{"title":"Chain Quickstart","href":"/sdk/next/tutorials/example/02-quickstart"},{"title":"Build a Module from Scratch","href":"/sdk/next/tutorials/example/03-build-a-module"},{"title":"Full Counter Module Walkthrough","href":"/sdk/next/tutorials/example/04-counter-walkthrough"},{"title":"Run, Test, and Configure","href":"/sdk/next/tutorials/example/05-run-and-test"}]},{"group":"Run a Node","icon":"server","pages":[{"title":"Node Tutorial","href":"/sdk/next/tutorials"},{"group":"Get Started","pages":[{"title":"Prerequisites","href":"/sdk/next/node/prerequisites"},{"title":"Setting up the keyring","href":"/sdk/next/node/keyring"},{"title":"Running a Node","href":"/sdk/next/node/run-node"},{"title":"Interacting with a Node","href":"/sdk/next/node/interact-node"},{"title":"Generating, Signing and Broadcasting Transactions","href":"/sdk/next/node/txs"}]},{"group":"Testnet \u0026 Production","pages":[{"title":"Running a Testnet","href":"/sdk/next/node/run-testnet"},{"title":"Running in Production","href":"/sdk/next/node/run-production"}]},{"group":"Key Rotation","pages":[{"title":"Key rotation","href":"/sdk/next/keys/key-rotation"},{"title":"Rotate a consensus key, Staking","href":"/sdk/next/keys/rotate-validator-key"},{"title":"Rotate a consensus key, PoA","href":"/sdk/next/keys/rotate-validator-key-poa"}]},{"group":"Post-quantum Keys","pages":[{"title":"Post-quantum keys","href":"/sdk/next/keys/post-quantum-keys"},{"title":"Enable ML-DSA keys","href":"/sdk/next/keys/enable-ml-dsa-keys"},{"title":"Migrate a validator to ML-DSA","href":"/sdk/next/keys/migrate-validator-ml-dsa"},{"title":"Create an ML-DSA account","href":"/sdk/next/keys/create-ml-dsa-account"}]},{"group":"Remote Signing: Cosmos-KMS","pages":[{"title":"Overview","href":"/sdk/next/kms/remote-signing"},{"title":"Remote signing tutorial","description":"Tutorial: stand up a local chain whose validator signs through Cosmos-KMS, using the file backend.","href":"/sdk/next/kms/tutorial-file-backend"},{"title":"Configure a signing backend","href":"/sdk/next/kms/configure-backend"},{"title":"Rotate a consensus key held in Cosmos-KMS","description":"Rotate a validator's consensus key when the current key lives in a remote signer: new key in the backend, a second node and signer, rotate, cut over.","href":"/sdk/next/kms/rotate-key-remote-signer"},{"title":"Migrate from TMKMS","href":"/sdk/next/kms/migrate-from-tmkms"},{"title":"Cosmos-KMS configuration reference","href":"/sdk/next/kms/configuration-reference"},{"title":"Remote signing best practices","href":"/sdk/next/kms/best-practices"}]}]},{"group":"v0.55 Upgrade","icon":"upload","pages":[{"title":"v0.55 Release Notes","href":"/sdk/next/upgrade/v0.55-release"},{"title":"v0.55 Upgrade Guide","href":"/sdk/next/upgrade/v0.55"},{"title":"Changelog","mode":"wide","href":"/sdk/next/changelog/release-notes"},{"group":"Previous versions","pages":[{"title":"v0.54 Release Notes","href":"/sdk/next/upgrade/v0.54-release"},{"title":"v0.54 Upgrade Guide","href":"/sdk/next/upgrade/v0.54"}]}]},{"group":"In-depth Guides","icon":"map","pages":[{"title":"Guides Overview","href":"/sdk/next/guides/guides"},{"group":"Module Design","pages":[{"title":"Module Design Considerations","href":"/sdk/next/guides/module-design/module-design-considerations"},{"title":"Object-Capability Model","href":"/sdk/next/guides/module-design/ocap"}]},{"group":"ABCI","pages":[{"title":"ABCI Overview","href":"/sdk/next/guides/abci/abci"},{"title":"Application Mempool","href":"/sdk/next/guides/abci/app-mempool"},{"title":"Vote Extensions","href":"/sdk/next/guides/abci/vote-extensions"},{"title":"Block-STM: Parallel Transaction Execution","href":"/sdk/next/experimental/blockstm"}]},{"group":"Tooling \u0026 CLI","pages":[{"title":"Tool Guide","href":"/sdk/next/guides/tooling/tool-guide"},{"title":"Writing CLI Commands","href":"/sdk/next/guides/tooling/autocli"},{"title":"Confix","href":"/sdk/next/guides/tooling/confix"}]},{"group":"State","pages":[{"title":"Module Store Internals","href":"/sdk/next/guides/state/store"},{"title":"Collections API","href":"/sdk/next/guides/state/collections"}]},{"group":"Upgrades \u0026 Migrations","pages":[{"title":"Upgrades and Store Migrations","href":"/sdk/next/guides/upgrades/upgrade"},{"title":"Cosmovisor","href":"/sdk/next/guides/upgrades/cosmovisor"}]},{"group":"Testing and Observability","pages":[{"title":"Module Simulation","href":"/sdk/next/guides/testing/simulator"},{"title":"Telemetry","href":"/sdk/next/guides/testing/telemetry"},{"title":"Log v2","href":"/sdk/next/guides/testing/log"}]}]},{"group":"Developer Reference","icon":"code","pages":[{"title":"SDK Go Packages","href":"/sdk/next/guides/reference/packages"},{"title":"Address Encoding","href":"/sdk/next/guides/reference/bech32"},{"title":"Protobuf Annotations","href":"/sdk/next/guides/reference/protobuf-annotations"},{"title":"Cosmos Protobuf Docs","url":"https://buf.build/cosmos/cosmos-sdk/docs/main","href":"/sdk/next/guides/reference/proto-docs"},{"title":"Cosmos SDK Repository","url":"https://github.com/cosmos/cosmos-sdk","href":"/sdk/next/reference/cosmos-sdk-repo"},{"title":"Tutorial Example Repository","url":"https://github.com/cosmos/example","href":"/sdk/next/reference/example-repo"}]},{"group":"Modules","icon":"puzzle","pages":[{"title":"Module Directory","href":"/sdk/next/modules/modules"},{"group":"Open-source Modules","pages":[{"group":"x/auth","pages":[{"title":"x/auth","href":"/sdk/next/modules/auth/auth"},{"title":"x/auth/vesting","href":"/sdk/next/modules/auth/vesting"},{"title":"x/auth/tx","href":"/sdk/next/modules/auth/tx"}]},{"title":"x/authz","href":"/sdk/next/modules/authz/README"},{"title":"x/bank","href":"/sdk/next/modules/bank/README"},{"title":"x/consensus","href":"/sdk/next/modules/consensus/README"},{"title":"x/crisis","href":"/sdk/next/modules/crisis/README"},{"title":"x/distribution","href":"/sdk/next/modules/distribution/README"},{"title":"x/epochs","href":"/sdk/next/modules/epochs/README"},{"title":"x/evidence","href":"/sdk/next/modules/evidence/README"},{"title":"x/feegrant","href":"/sdk/next/modules/feegrant/README"},{"title":"x/gov","href":"/sdk/next/modules/gov/README"},{"title":"x/group","href":"/sdk/next/modules/group/README"},{"title":"x/mint","href":"/sdk/next/modules/mint/README"},{"title":"x/nft","href":"/sdk/next/modules/nft/README"},{"title":"x/params","href":"/sdk/next/modules/params/README"},{"title":"x/slashing","href":"/sdk/next/modules/slashing/README"},{"title":"x/staking","href":"/sdk/next/modules/staking/README"},{"title":"x/upgrade","href":"/sdk/next/modules/upgrade/README"},{"title":"x/circuit","href":"/sdk/next/modules/circuit/README"},{"title":"x/genutil","href":"/sdk/next/modules/genutil/README"}]},{"group":"Cosmos Enterprise Modules","pages":[{"title":"Overview","href":"/sdk/next/enterprise/overview"},{"group":"Permissioned Consensus","pages":[{"title":"Overview","href":"/sdk/next/enterprise/poa/overview"},{"title":"Architecture","href":"/sdk/next/enterprise/poa/architecture"},{"title":"Governance Integration","href":"/sdk/next/enterprise/poa/governance"},{"title":"API Reference","href":"/sdk/next/enterprise/poa/api"},{"title":"Fee Distribution","href":"/sdk/next/enterprise/poa/distribution"}]},{"group":"Multi-sig","pages":[{"title":"Overview","href":"/sdk/next/enterprise/group/overview"},{"title":"Architecture","href":"/sdk/next/enterprise/group/architecture"},{"title":"API Reference","href":"/sdk/next/enterprise/group/api"}]}]}]},{"group":"Architecture Reference","icon":"building-2","pages":[{"group":"ADRs","pages":[{"title":"Architecture Decision Records (ADR)","href":"/sdk/next/reference/architecture/README"},{"title":"ADR Creation Process","href":"/sdk/next/reference/architecture/PROCESS"},{"title":"ADR 002: SDK Documentation Structure","href":"/sdk/next/reference/architecture/adr-002-docs-structure"},{"title":"ADR 003: Dynamic Capability Store","href":"/sdk/next/reference/architecture/adr-003-dynamic-capability-store"},{"title":"ADR 004: Split Denomination Keys","href":"/sdk/next/reference/architecture/adr-004-split-denomination-keys"},{"title":"ADR 006: Secret Store Replacement","href":"/sdk/next/reference/architecture/adr-006-secret-store-replacement"},{"title":"ADR 007: Specialization Groups","href":"/sdk/next/reference/architecture/adr-007-specialization-groups"},{"title":"ADR 008: Decentralized Computer Emergency Response Team (dCERT) Group","href":"/sdk/next/reference/architecture/adr-008-dCERT-group"},{"title":"ADR 009: Evidence Module","href":"/sdk/next/reference/architecture/adr-009-evidence-module"},{"title":"ADR 010: Modular AnteHandler","href":"/sdk/next/reference/architecture/adr-010-modular-antehandler"},{"title":"ADR 011: Generalize Genesis Accounts","href":"/sdk/next/reference/architecture/adr-011-generalize-genesis-accounts"},{"title":"ADR 012: State Accessors","href":"/sdk/next/reference/architecture/adr-012-state-accessors"},{"title":"ADR 013: Observability","href":"/sdk/next/reference/architecture/adr-013-metrics"},{"title":"ADR 14: Proportional Slashing","href":"/sdk/next/reference/architecture/adr-014-proportional-slashing"},{"title":"ADR 016: Validator Consensus Key Rotation","href":"/sdk/next/reference/architecture/adr-016-validator-consensus-key-rotation"},{"title":"ADR 17: Historical Header Module","href":"/sdk/next/reference/architecture/adr-017-historical-header-module"},{"title":"ADR 18: Extendable Voting Periods","href":"/sdk/next/reference/architecture/adr-018-extendable-voting-period"},{"title":"ADR 019: Protocol Buffer State Encoding","href":"/sdk/next/reference/architecture/adr-019-protobuf-state-encoding"},{"title":"ADR 020: Protocol Buffer Transaction Encoding","href":"/sdk/next/reference/architecture/adr-020-protobuf-transaction-encoding"},{"title":"ADR 021: Protocol Buffer Query Encoding","href":"/sdk/next/reference/architecture/adr-021-protobuf-query-encoding"},{"title":"ADR 022: Custom BaseApp panic handling","href":"/sdk/next/reference/architecture/adr-022-custom-panic-handling"},{"title":"ADR 023: Protocol Buffer Naming and Versioning Conventions","href":"/sdk/next/reference/architecture/adr-023-protobuf-naming"},{"title":"ADR 024: Coin Metadata","href":"/sdk/next/reference/architecture/adr-024-coin-metadata"},{"title":"ADR 027: Deterministic Protobuf Serialization","href":"/sdk/next/reference/architecture/adr-027-deterministic-protobuf-serialization"},{"title":"ADR 028: Public Key Addresses","href":"/sdk/next/reference/architecture/adr-028-public-key-addresses"},{"title":"ADR 029: Fee Grant Module","href":"/sdk/next/reference/architecture/adr-029-fee-grant-module"},{"title":"ADR 030: Authorization Module","href":"/sdk/next/reference/architecture/adr-030-authz-module"},{"title":"ADR 031: Protobuf Msg Services","href":"/sdk/next/reference/architecture/adr-031-msg-service"},{"title":"ADR 032: Typed Events","href":"/sdk/next/reference/architecture/adr-032-typed-events"},{"title":"ADR 033: Protobuf-based Inter-Module Communication","href":"/sdk/next/reference/architecture/adr-033-protobuf-inter-module-comm"},{"title":"ADR 034: Account Rekeying","href":"/sdk/next/reference/architecture/adr-034-account-rekeying"},{"title":"ADR 035: Rosetta API Support","href":"/sdk/next/reference/architecture/adr-035-rosetta-api-support"},{"title":"ADR 036: Arbitrary Message Signature Specification","href":"/sdk/next/reference/architecture/adr-036-arbitrary-signature"},{"title":"ADR 037: Governance split votes","href":"/sdk/next/reference/architecture/adr-037-gov-split-vote"},{"title":"ADR 038: KVStore state listening","href":"/sdk/next/reference/architecture/adr-038-state-listening"},{"title":"ADR 039: Epoched Staking","href":"/sdk/next/reference/architecture/adr-039-epoched-staking"},{"title":"ADR 040: Storage and SMT State Commitments","href":"/sdk/next/reference/architecture/adr-040-storage-and-smt-state-commitments"},{"title":"ADR 041: In-Place Store Migrations","href":"/sdk/next/reference/architecture/adr-041-in-place-store-migrations"},{"title":"ADR 042: Group Module","href":"/sdk/next/reference/architecture/adr-042-group-module"},{"title":"ADR 43: NFT Module","href":"/sdk/next/reference/architecture/adr-043-nft-module"},{"title":"ADR 044: Guidelines for Updating Protobuf Definitions","href":"/sdk/next/reference/architecture/adr-044-protobuf-updates-guidelines"},{"title":null,"href":"/sdk/next/reference/architecture/adr-045-check-delivertx-middlewares"},{"title":"ADR 046: Module Params","href":"/sdk/next/reference/architecture/adr-046-module-params"},{"title":"ADR 047: Extend Upgrade Plan","href":"/sdk/next/reference/architecture/adr-047-extend-upgrade-plan"},{"title":"ADR 048: Multi Tire Gas Price System","href":"/sdk/next/reference/architecture/adr-048-consensus-fees"},{"title":"ADR 049: State Sync Hooks","href":"/sdk/next/reference/architecture/adr-049-state-sync-hooks"},{"title":"ADR 050: SIGN_MODE_TEXTUAL: Annex 1 Value Renderers","href":"/sdk/next/reference/architecture/adr-050-sign-mode-textual-annex1"},{"title":"ADR 050: SIGN_MODE_TEXTUAL: Annex 2 Device Rendering","href":"/sdk/next/reference/architecture/adr-050-sign-mode-textual-annex2"},{"title":"ADR 050: SIGN_MODE_TEXTUAL","href":"/sdk/next/reference/architecture/adr-050-sign-mode-textual"},{"title":"ADR 053: Go Module Refactoring","href":"/sdk/next/reference/architecture/adr-053-go-module-refactoring"},{"title":"ADR 054: Semver Compatible SDK Modules","href":"/sdk/next/reference/architecture/adr-054-semver-compatible-modules"},{"title":"ADR 055: ORM","href":"/sdk/next/reference/architecture/adr-055-orm"},{"title":"ADR 057: App Wiring","href":"/sdk/next/reference/architecture/adr-057-app-wiring"},{"title":"ADR 058: Auto-Generated CLI","href":"/sdk/next/reference/architecture/adr-058-auto-generated-cli"},{"title":"ADR 059: Test Scopes","href":"/sdk/next/reference/architecture/adr-059-test-scopes"},{"title":"ADR 60: ABCI 1.0 Integration (Phase I)","href":"/sdk/next/reference/architecture/adr-060-abci-1.0"},{"title":"ADR ADR-061: Liquid Staking","href":"/sdk/next/reference/architecture/adr-061-liquid-staking"},{"title":"ADR 062: Collections, a simplified storage layer for cosmos-sdk modules.","href":"/sdk/next/reference/architecture/adr-062-collections-state-layer"},{"title":"ADR 063: Core Module API","href":"/sdk/next/reference/architecture/adr-063-core-module-api"},{"title":"ADR 64: ABCI 2.0 Integration (Phase II)","href":"/sdk/next/reference/architecture/adr-064-abci-2.0"},{"title":"ADR-065: Store V2","href":"/sdk/next/reference/architecture/adr-065-store-v2"},{"title":"ADR 068: Preblock","href":"/sdk/next/reference/architecture/adr-068-preblock"},{"title":"ADR 070: Unordered Transactions","href":"/sdk/next/reference/architecture/adr-070-unordered-account"},{"title":"Cosmos SDK Transaction Malleability Risk Review and Recommendations","href":"/sdk/next/reference/architecture/adr-076-tx-malleability"}]},{"group":"RFCs","pages":[{"title":"Requests for Comments","href":"/sdk/next/reference/rfc/README"},{"title":"RFC Creation Process","href":"/sdk/next/reference/rfc/PROCESS"},{"title":"RFC 001: Transaction Validation","href":"/sdk/next/reference/rfc/rfc-001-tx-validation"}]},{"group":"Specifications","pages":[{"title":"Specifications","href":"/sdk/next/reference/spec/README"},{"title":"Specification of Modules","href":"/sdk/next/reference/spec/SPEC_MODULE"},{"title":"What is an SDK standard?","href":"/sdk/next/reference/spec/SPEC_STANDARD"}]}]},{"group":"Security","icon":"shield","pages":[{"title":"Security and Maintenance Policy","href":"/sdk/next/security/security-policy"},{"title":"Bug Bounty Program","href":"/sdk/next/security/bug-bounty"},{"group":"Audits","pages":[{"title":"Security Audits","href":"/sdk/next/security/audits"},{"title":"Internal Audit Process","href":"/sdk/next/security/internal-audits"}]}]}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/sdk/next/upgrade/v0.55-release"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/sdk/next/api-reference"}]}]},{"version":"v0.54","pages":[{"title":"v0.54","href":"/sdk/v0.54/tutorials"}]},{"version":"v0.53","pages":[{"title":"v0.53","href":"/sdk/v0.53/tutorials"}]},{"version":"v0.50","pages":[{"title":"v0.50","href":"/sdk/v0.50/learn"}]},{"version":"v0.47","pages":[{"title":"v0.47","href":"/sdk/v0.47/learn"}]}]},{"dropdown":"Cosmos EVM","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cosmos-docs/assets/icons/cosmos-evm.svg","versions":[{"version":"v0.7.0","default":true,"tag":"Latest","pages":[{"title":"v0.7.0","href":"/evm/latest/documentation/overview"}]},{"version":"next","tag":"Unreleased","tabs":[{"tab":"Documentation","groups":[{"group":"About","pages":[{"title":"Overview","href":"/evm/next/documentation/overview"},{"title":"EVM Compatibility","href":"/evm/next/documentation/evm-compatibility"},{"title":"Frequently Asked Questions","href":"/evm/next/documentation/getting-started/faq"}]},{"group":"Build","pages":[{"title":"Run an EVM Chain","href":"/evm/next/documentation/getting-started/build-a-chain/quick-start"},{"group":"Additional Configuration","expanded":true,"pages":[{"title":"Mempool Configuration","href":"/evm/next/documentation/getting-started/build-a-chain/additional-configuration/mempool-integration"},{"title":"Predeployed Contracts","href":"/evm/next/documentation/getting-started/build-a-chain/additional-configuration/predeployed-contracts"},{"title":"Precompile Configuration","href":"/evm/next/documentation/getting-started/build-a-chain/additional-configuration/precompiles"},{"title":"Node Configuration","mode":"wide","href":"/evm/next/documentation/getting-started/network-operators/node-configuration"}]},{"title":"Tooling \u0026 Resources","href":"/evm/next/documentation/getting-started/tooling-and-resources"}]},{"group":"Learn","pages":[{"group":"Concepts","pages":[{"title":"Overview","icon":"microchip","href":"/evm/next/documentation/concepts/overview"},{"title":"Accounts","icon":"wallet","href":"/evm/next/documentation/concepts/accounts"},{"title":"Chain ID","icon":"fingerprint","href":"/evm/next/documentation/concepts/chain-id"},{"title":"Encoding","icon":"binary","href":"/evm/next/documentation/concepts/encoding"},{"title":"Gas and Fees","icon":"fuel","href":"/evm/next/documentation/concepts/gas-and-fees"},{"title":"IBC","icon":"network","href":"/evm/next/documentation/concepts/ibc"},{"title":"Mempool","icon":"layers","href":"/evm/next/documentation/concepts/mempool"},{"title":"State Export/Import","icon":"git-branch","href":"/evm/next/documentation/concepts/migrations"},{"title":"Pending State","icon":"hourglass","href":"/evm/next/documentation/concepts/pending-state"},{"title":"EIP-155: Replay Protection","icon":"shield","href":"/evm/next/documentation/concepts/replay-protection"},{"title":"Signing","icon":"pen-tool","href":"/evm/next/documentation/concepts/signing"},{"title":"Single Token Representation","icon":"coins","href":"/evm/next/documentation/concepts/single-token-representation"},{"title":"Tokens","icon":"coins","href":"/evm/next/documentation/concepts/tokens"},{"title":"Transactions","icon":"arrow-up-down","href":"/evm/next/documentation/concepts/transactions"},{"title":"EIP-1559 Fee Market","icon":"chart-line","href":"/evm/next/documentation/concepts/eip-1559-feemarket"}]},{"group":"Precompiles","pages":[{"title":"Overview","icon":"code","href":"/evm/next/documentation/smart-contracts/precompiles/overview"},{"title":"Bank","icon":"vault","href":"/evm/next/documentation/smart-contracts/precompiles/bank"},{"title":"Bech32","icon":"binary","href":"/evm/next/documentation/smart-contracts/precompiles/bech32"},{"title":"Callbacks","icon":"webhook","href":"/evm/next/documentation/smart-contracts/precompiles/callbacks"},{"title":"Distribution","icon":"coins","href":"/evm/next/documentation/smart-contracts/precompiles/distribution"},{"title":"ERC20","icon":"refresh-cw","href":"/evm/next/documentation/smart-contracts/precompiles/erc20"},{"title":"Governance","icon":"scale","href":"/evm/next/documentation/smart-contracts/precompiles/governance"},{"title":"ICS20","icon":"chevrons-left-right-ellipsis","href":"/evm/next/documentation/smart-contracts/precompiles/ics20"},{"title":"P256","icon":"shield-check","href":"/evm/next/documentation/smart-contracts/precompiles/p256"},{"title":"Slashing","icon":"gavel","href":"/evm/next/documentation/smart-contracts/precompiles/slashing"},{"title":"Staking","icon":"coins","href":"/evm/next/documentation/smart-contracts/precompiles/staking"},{"title":"WERC20","icon":"refresh-ccw","href":"/evm/next/documentation/smart-contracts/precompiles/werc20"}]},{"group":"Cosmos SDK","pages":[{"title":"Overview","mode":"wide","href":"/evm/next/documentation/cosmos-sdk/overview"},{"title":"Command Line Interface (CLI)","href":"/evm/next/documentation/cosmos-sdk/cli"},{"title":"Technical Architecture","href":"/evm/next/documentation/cosmos-sdk/protocol"},{"group":"Modules","pages":[{"title":"ERC20","href":"/evm/next/documentation/cosmos-sdk/modules/erc20"},{"title":"Fee Market","href":"/evm/next/documentation/cosmos-sdk/modules/feemarket"},{"title":"IBC","href":"/evm/next/documentation/cosmos-sdk/modules/ibc"},{"title":"PreciseBank","href":"/evm/next/documentation/cosmos-sdk/modules/precisebank"},{"title":"VM","href":"/evm/next/documentation/cosmos-sdk/modules/vm"}]}]}]},{"group":"Migrations","pages":[{"title":"Migration: v0.6.0 to v0.7.0","href":"/evm/next/documentation/migrations/migration-v0.6-to-v0.7"},{"title":"Migrating off x/precisebank: Gas Converter Precompile","href":"/evm/next/documentation/migrations/gas-converter-migration"},{"group":"Previous Versions","pages":[{"title":"Migration: v0.5.0 to v0.6.0","href":"/evm/next/documentation/migrations/migration-v0.5-to-v0.6"},{"title":"Migration: v0.4.x to v0.5.0","href":"/evm/next/documentation/migrations/migration-v0.4-to-v0.5"},{"title":"Migration: v0.3.0 to v0.4.0","href":"/evm/next/documentation/migrations/migration-v0.3-to-v0.4"},{"title":"ERC20 Precompiles Migration","href":"/evm/next/documentation/migrations/erc20-precompiles-migration"}]},{"group":"Advanced","pages":[{"title":"Upgrade Handlers","href":"/evm/next/documentation/migrations/upgrade-handlers"},{"title":"Custom Improvement Proposals","href":"/evm/next/documentation/custom-improvement-proposals"},{"title":"Adding EVM to an Existing Chain","href":"/evm/next/documentation/migrations/add-evm-to-existing-chain"}]}]}]},{"tab":"API Reference","pages":[{"title":"Ethereum JSON-RPC","href":"/evm/next/api-reference/ethereum-json-rpc"},{"title":"Methods","href":"/evm/next/api-reference/ethereum-json-rpc/methods"},{"title":"JSON-RPC Explorer","mode":"custom","href":"/evm/next/api-reference/ethereum-json-rpc/rpc-explorer"}]},{"tab":"Changelog","pages":[{"title":"Changelog","mode":"wide","href":"/evm/next/changelog/release-notes"}]}]},{"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":"IBC Protocol","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cosmos-docs/assets/icons/ibc-protocol.svg","versions":[{"version":"v11.x.x","default":true,"tag":"Latest","pages":[{"title":"v11.x.x","href":"/ibc/latest/intro"}]},{"version":"next","tag":"Unreleased","tabs":[{"tab":"Documentation","groups":[{"group":"Learn","pages":[{"title":"IBC Documentation","href":"/ibc/next/intro"},{"title":"What is IBC?","href":"/ibc/next/learn/overview"},{"title":"How IBC Works","href":"/ibc/next/learn/how-ibc-works"},{"title":"IBC Lifecycle","href":"/ibc/next/learn/ibc-lifecycle"}]},{"group":"Cosmos ↔ EVM Interoperability","pages":[{"title":"Architecture Overview","href":"/ibc/next/cosmos-evm/overview"},{"group":"Cosmos ↔ EVM Tutorial","pages":[{"title":"Tutorial Intro","href":"/ibc/next/cosmos-evm/tutorial/introduction"},{"title":"Quickstart","href":"/ibc/next/cosmos-evm/tutorial/quickstart"},{"group":"Walkthrough","pages":[{"title":"Step 1: Start the Chains","href":"/ibc/next/cosmos-evm/tutorial/walkthrough/01-chains"},{"title":"Step 2: Deploy EVM Contracts","href":"/ibc/next/cosmos-evm/tutorial/walkthrough/02-deploy"},{"title":"Step 3: Create Attestation Light Clients","href":"/ibc/next/cosmos-evm/tutorial/walkthrough/03-clients"},{"title":"Step 4: Wire the IFT Bridge","href":"/ibc/next/cosmos-evm/tutorial/walkthrough/04-wire"},{"title":"Step 5: Configure and Start Attestors","href":"/ibc/next/cosmos-evm/tutorial/walkthrough/05-attestors"},{"title":"Step 6: Configure and Start the Relayer and Proof API","href":"/ibc/next/cosmos-evm/tutorial/walkthrough/06-relayer"},{"title":"Step 7: Run a Transfer","href":"/ibc/next/cosmos-evm/tutorial/walkthrough/07-transfer"}]}]}]},{"group":"Infrastructure","pages":[{"group":"Relayer","pages":[{"title":"Relayer Overview","href":"/ibc/next/infra/relayer/overview"},{"title":"Relayer Guide","href":"/ibc/next/infra/relayer/relayer-guide"},{"title":"Proof API","href":"/ibc/next/infra/relayer/proof-api"}]},{"group":"Attestor","pages":[{"title":"Attestor Overview","href":"/ibc/next/infra/attestor/overview"},{"title":"Attestor Guide","href":"/ibc/next/infra/attestor/attestor-guide"}]}]},{"group":"IBC Core","pages":[{"title":"Overview","href":"/ibc/next/ibc/overview"},{"group":"Core Concepts","pages":[{"title":"Best Practices","href":"/ibc/next/ibc/best-practices"},{"title":"Integration","href":"/ibc/next/ibc/integration"},{"title":"Permissioning","href":"/ibc/next/ibc/permissioning"},{"title":"Relayer","href":"/ibc/next/ibc/relayer"}]},{"group":"Apps","pages":[{"title":"IBC v2 Applications","href":"/ibc/next/ibc/apps/ibcv2apps"},{"title":"IBC Applications","href":"/ibc/next/ibc/apps/apps"},{"title":"Implement IBCModule interface and callbacks","href":"/ibc/next/ibc/apps/ibcmodule"},{"title":"Bind ports","href":"/ibc/next/ibc/apps/bindports"},{"title":"Keeper","href":"/ibc/next/ibc/apps/keeper"},{"title":"Define packets and acks","href":"/ibc/next/ibc/apps/packets_acks"},{"title":"Routing","href":"/ibc/next/ibc/apps/routing"},{"title":"Custom Address Codec","href":"/ibc/next/ibc/apps/address-codec"}]},{"group":"Middleware","pages":[{"title":"IBC middleware","href":"/ibc/next/ibc/middleware/overview"},{"title":"Create a custom IBC middleware","href":"/ibc/next/ibc/middleware/develop"},{"title":"Create and integrate IBC v2 middleware","href":"/ibc/next/ibc/middleware/developIBCv2"},{"title":"Integrating IBC middleware into a chain","href":"/ibc/next/ibc/middleware/integration"}]},{"group":"Upgrades","pages":[{"title":"Upgrading IBC Chains Overview","href":"/ibc/next/ibc/upgrades/intro"},{"title":"How to Upgrade IBC Chains and their Clients","href":"/ibc/next/ibc/upgrades/quick-guide"},{"title":"IBC Client Developer Guide to Upgrades","href":"/ibc/next/ibc/upgrades/developer-guide"},{"title":"Genesis Restart Upgrades","href":"/ibc/next/ibc/upgrades/genesis-restart"}]}]},{"group":"IBC Migrations","pages":[{"group":"Version Upgrades","pages":[{"title":"IBC-Go v11.0 to v11.1","href":"/ibc/next/migrations/v11-to-v11-1"},{"title":"IBC-Go v10 to v11.1","href":"/ibc/next/migrations/v10-to-v11-1"},{"title":"IBC-Go v10 to v11","href":"/ibc/next/migrations/v10-to-v11"},{"title":"IBC-Go v8.1 to v10","href":"/ibc/next/migrations/v8_1-to-v10"},{"title":"IBC-Go v8 to v8.1","href":"/ibc/next/migrations/v8-to-v8_1"},{"title":"IBC-Go v7 to v8","href":"/ibc/next/migrations/v7-to-v8"},{"title":"IBC-Go v7.2 to v7.3","href":"/ibc/next/migrations/v7_2-to-v7_3"},{"title":"IBC-Go v7 to v7.1","href":"/ibc/next/migrations/v7-to-v7_1"},{"title":"IBC-Go v6 to v7","href":"/ibc/next/migrations/v6-to-v7"},{"title":"IBC-Go v5 to v6","href":"/ibc/next/migrations/v5-to-v6"},{"title":"IBC-Go v4 to v5","href":"/ibc/next/migrations/v4-to-v5"},{"title":"IBC-Go v3 to v4","href":"/ibc/next/migrations/v3-to-v4"},{"title":"IBC-Go v2 to v3","href":"/ibc/next/migrations/v2-to-v3"},{"title":"IBC-Go v1 to v2","href":"/ibc/next/migrations/v1-to-v2"}]},{"group":"Additional Migration Guides","pages":[{"title":"SDK v0.43 to IBC-Go v1","href":"/ibc/next/migrations/sdk-to-v1"},{"title":"Support transfer of coins whose base denom contains slashes","href":"/ibc/next/migrations/support-denoms-with-slashes"},{"title":"Support the new StackBuilder primitive for Wiring Middlewares in the chain application","href":"/ibc/next/migrations/support-stackbuilder"}]}]},{"group":"IBC Light Clients","pages":[{"group":"Attestation","pages":[{"title":"Attestation Light Client","href":"/ibc/next/light-clients/attestation/attestation-light-client"}]},{"group":"Developer Guide","pages":[{"title":"Overview","href":"/ibc/next/light-clients/developer-guide/overview"},{"title":"Light Client Module interface","href":"/ibc/next/light-clients/developer-guide/light-client-module"},{"title":"Client State interface","href":"/ibc/next/light-clients/developer-guide/client-state"},{"title":"Consensus State interface","href":"/ibc/next/light-clients/developer-guide/consensus-state"},{"title":"Handling Updates and Misbehaviour","href":"/ibc/next/light-clients/developer-guide/updates-and-misbehaviour"},{"title":"Handling Upgrades","href":"/ibc/next/light-clients/developer-guide/upgrades"},{"title":"Existence/Non-Existence Proofs","href":"/ibc/next/light-clients/developer-guide/proofs"},{"title":"Handling Proposals","href":"/ibc/next/light-clients/developer-guide/proposals"},{"title":"Setup","href":"/ibc/next/light-clients/developer-guide/setup"},{"title":"Governance Proposals","href":"/ibc/next/light-clients/proposals"}]},{"group":"Localhost","pages":[{"title":"Overview","href":"/ibc/next/light-clients/localhost/overview"},{"title":"Integration","href":"/ibc/next/light-clients/localhost/integration"},{"title":"ClientState","href":"/ibc/next/light-clients/localhost/client-state"},{"title":"Connection","href":"/ibc/next/light-clients/localhost/connection"},{"title":"State Verification","href":"/ibc/next/light-clients/localhost/state-verification"}]},{"group":"Solo Machine","pages":[{"title":"Solomachine","href":"/ibc/next/light-clients/solomachine/solomachine"},{"title":"Concepts","href":"/ibc/next/light-clients/solomachine/concepts"},{"title":"State","href":"/ibc/next/light-clients/solomachine/state"},{"title":"State Transitions","href":"/ibc/next/light-clients/solomachine/state_transitions"}]},{"group":"Tendermint","pages":[{"title":"Overview","href":"/ibc/next/light-clients/tendermint/overview"}]},{"group":"WASM","pages":[{"title":"Overview","href":"/ibc/next/light-clients/wasm/overview"},{"title":"Concepts","href":"/ibc/next/light-clients/wasm/concepts"},{"title":"Integration","href":"/ibc/next/light-clients/wasm/integration"},{"title":"Messages","href":"/ibc/next/light-clients/wasm/messages"},{"title":"Governance","href":"/ibc/next/light-clients/wasm/governance"},{"title":"Events","href":"/ibc/next/light-clients/wasm/events"},{"title":"Contracts","href":"/ibc/next/light-clients/wasm/contracts"},{"title":"Client","href":"/ibc/next/light-clients/wasm/client"},{"title":"Migrations","href":"/ibc/next/light-clients/wasm/migrations"}]}]},{"group":"IBC Apps","pages":[{"group":"GMP","pages":[{"title":"General Message Passing (GMP)","href":"/ibc/next/apps/gmp/gmp"}]},{"group":"IFT","pages":[{"title":"Interchain Fungible Token (IFT)","href":"/ibc/next/apps/ift/ift"}]},{"group":"Interchain Accounts","pages":[{"title":"Overview","href":"/ibc/next/apps/interchain-accounts/overview"},{"title":"Development Use Cases","href":"/ibc/next/apps/interchain-accounts/development"},{"title":"Authentication Modules","href":"/ibc/next/apps/interchain-accounts/auth-modules"},{"title":"Integration","href":"/ibc/next/apps/interchain-accounts/integration"},{"title":"Messages","href":"/ibc/next/apps/interchain-accounts/messages"},{"title":"Parameters","href":"/ibc/next/apps/interchain-accounts/parameters"},{"title":"Transaction Encoding","href":"/ibc/next/apps/interchain-accounts/tx-encoding"},{"title":"Client","href":"/ibc/next/apps/interchain-accounts/client"},{"title":"Active Channels","href":"/ibc/next/apps/interchain-accounts/active-channels"},{"group":"Legacy","pages":[{"title":"Authentication Modules","href":"/ibc/next/apps/interchain-accounts/legacy/auth-modules"},{"title":"Integration","href":"/ibc/next/apps/interchain-accounts/legacy/integration"},{"title":"Keeper API","href":"/ibc/next/apps/interchain-accounts/legacy/keeper-api"}]}]},{"group":"Transfer","pages":[{"title":"Overview","href":"/ibc/next/apps/transfer/overview"},{"title":"State","href":"/ibc/next/apps/transfer/state"},{"title":"State Transitions","href":"/ibc/next/apps/transfer/state-transitions"},{"title":"Messages","href":"/ibc/next/apps/transfer/messages"},{"title":"Events","href":"/ibc/next/apps/transfer/events"},{"title":"Metrics","href":"/ibc/next/apps/transfer/metrics"},{"title":"Params","href":"/ibc/next/apps/transfer/params"},{"title":"Authorizations","href":"/ibc/next/apps/transfer/authorizations"},{"title":"Client","href":"/ibc/next/apps/transfer/client"},{"title":"IBC v2 Transfer","href":"/ibc/next/apps/transfer/IBCv2-transfer"}]}]},{"group":"IBC Middleware","pages":[{"group":"Callbacks","pages":[{"title":"Overview","href":"/ibc/next/middleware/callbacks/overview"},{"title":"Integration","href":"/ibc/next/middleware/callbacks/integration"},{"title":"Interfaces","href":"/ibc/next/middleware/callbacks/interfaces"},{"title":"Events","href":"/ibc/next/middleware/callbacks/events"},{"title":"End Users","href":"/ibc/next/middleware/callbacks/end-users"},{"title":"Gas Management","href":"/ibc/next/middleware/callbacks/gas"},{"title":"Callbacks with IBC v2","href":"/ibc/next/middleware/callbacks/callbacks-IBCv2"}]},{"group":"Packet Forward Middleware","pages":[{"title":"Overview","href":"/ibc/next/middleware/packet-forward-middleware/overview"},{"title":"Integration","href":"/ibc/next/middleware/packet-forward-middleware/integration"},{"title":"Example Flows","href":"/ibc/next/middleware/packet-forward-middleware/example-usage"}]},{"group":"Rate Limit Middleware","pages":[{"title":"Overview","href":"/ibc/next/middleware/rate-limit-middleware/overview"},{"title":"Integration","href":"/ibc/next/middleware/rate-limit-middleware/integration"},{"title":"Setting Rate Limits","href":"/ibc/next/middleware/rate-limit-middleware/setting-limits"},{"title":"Migration","href":"/ibc/next/middleware/rate-limit-middleware/migration"}]}]},{"group":"Security","pages":[{"title":"Security Audits","href":"/ibc/next/security-audits"}]}]},{"tab":"ADRs","groups":[{"group":"Architecture Decision Records","pages":[{"title":null,"href":"/ibc/next/architecture/README"},{"title":"ADR 001: Coin Source Tracing","href":"/ibc/next/architecture/adr-001-coin-source-tracing"},{"title":"ADR 002: Go Module Versioning","href":"/ibc/next/architecture/adr-002-go-module-versioning"},{"title":"ADR 003: ICS-27 Acknowledgement Format","href":"/ibc/next/architecture/adr-003-ics27-acknowledgement"},{"title":"ADR 004: Lock Fee Module Upon Escrow Out Of Balance","href":"/ibc/next/architecture/adr-004-ics29-lock-fee-module"},{"title":"ADR 005: UpdateClient Events ClientState Consensus Heights","href":"/ibc/next/architecture/adr-005-consensus-height-events"},{"title":"ADR 006: 02-Client Refactor","href":"/ibc/next/architecture/adr-006-02-client-refactor"},{"title":"ADR 007: Solo Machine Sign Bytes","href":"/ibc/next/architecture/adr-007-solomachine-signbytes"},{"title":"ADR 008: Callback to IBC Actors","href":"/ibc/next/architecture/adr-008-app-caller-cbs"},{"title":"ADR 009: ICS27 Message Server Addition","href":"/ibc/next/architecture/adr-009-v6-ics27-msgserver"},{"title":"ADR 010: IBC Light Clients As SDK Modules","href":"/ibc/next/architecture/adr-010-light-clients-as-sdk-modules"},{"title":"ADR 011: ICS-20 Transfer State Entry For Total Amount Of Tokens In Escrow","href":"/ibc/next/architecture/adr-011-transfer-total-escrow-state-entry"},{"title":"ADR 015: IBC Packet Receiver","href":"/ibc/next/architecture/adr-015-ibc-packet-receiver"},{"title":"ADR 025: IBC Passive Channels","href":"/ibc/next/architecture/adr-025-ibc-passive-channels"},{"title":"ADR 026: IBC Client Recovery Mechanisms","href":"/ibc/next/architecture/adr-026-ibc-client-recovery-mechanisms"},{"title":"ADR 27: Add Support For Wasm Based Light Client","href":"/ibc/next/architecture/adr-027-ibc-wasm"}]}]},{"tab":"Specs","groups":[{"group":"IBC Specs (v1)","pages":[{"group":"App","pages":[{"group":"ics-020-fungible-token-transfer","pages":[{"title":"Fungible Token Transfer","version":1,"href":"/ibc/next/spec/app/ics-020-fungible-token-transfer/README"},{"group":"deprecated","pages":[{"title":"Fungible Token Transfer","version":2,"href":"/ibc/next/spec/app/ics-020-fungible-token-transfer/deprecated/README"}]}]},{"group":"ics-027-interchain-accounts","pages":[{"title":"Interchain Accounts","href":"/ibc/next/spec/app/ics-027-interchain-accounts/README"}]},{"group":"ics-028-cross-chain-validation","pages":[{"title":"Cross-Chain Validation","href":"/ibc/next/spec/app/ics-028-cross-chain-validation/README"},{"title":"CCV: Technical Specification - Data Structures","href":"/ibc/next/spec/app/ics-028-cross-chain-validation/data_structures"},{"title":"CCV: Technical Specification - Methods","href":"/ibc/next/spec/app/ics-028-cross-chain-validation/methods"},{"title":"CCV: Overview and Basic Concepts","href":"/ibc/next/spec/app/ics-028-cross-chain-validation/overview_and_basic_concepts"},{"title":"CCV: System Model and Properties","href":"/ibc/next/spec/app/ics-028-cross-chain-validation/system_model_and_properties"},{"title":"CCV: Technical Specification","href":"/ibc/next/spec/app/ics-028-cross-chain-validation/technical_specification"}]},{"group":"ics-029-fee-payment","pages":[{"title":"General Fee Payment","href":"/ibc/next/spec/app/ics-029-fee-payment/README"}]},{"group":"ics-030-middleware","pages":[{"title":"IBC Middleware","href":"/ibc/next/spec/app/ics-030-middleware/README"}]},{"group":"ics-031-crosschain-queries","pages":[{"title":"Cross-chain Queries","href":"/ibc/next/spec/app/ics-031-crosschain-queries/README"}]},{"group":"ics-100-atomic-swap","pages":[{"title":"Atomic Swap","href":"/ibc/next/spec/app/ics-100-atomic-swap/README"}]},{"group":"ics-721-nft-transfer","pages":[{"title":"Non-Fungible Token Transfer","href":"/ibc/next/spec/app/ics-721-nft-transfer/README"}]}]},{"group":"Client","pages":[{"title":"Rollup Integration Guide","href":"/ibc/next/spec/client/Rollup-Integration-guide"},{"group":"ics-006-solo-machine-client","pages":[{"title":"Solo Machine Client","href":"/ibc/next/spec/client/ics-006-solo-machine-client/README"}]},{"group":"ics-007-tendermint-client","pages":[{"title":"Tendermint Client","href":"/ibc/next/spec/client/ics-007-tendermint-client/README"}]},{"group":"ics-008-wasm-client","pages":[{"title":"Wasm Client","href":"/ibc/next/spec/client/ics-008-wasm-client/README"}]},{"group":"ics-009-loopback-cilent","pages":[{"title":"Loopback Client","href":"/ibc/next/spec/client/ics-009-loopback-cilent/README"}]},{"group":"ics-010-grandpa-client","pages":[{"title":"GRANDPA Client","href":"/ibc/next/spec/client/ics-010-grandpa-client/README"}]}]},{"group":"Core","pages":[{"group":"ics-002-client-semantics","pages":[{"title":"Client Semantics","href":"/ibc/next/spec/core/ics-002-client-semantics/README"}]},{"group":"ics-003-connection-semantics","pages":[{"title":"Connection Semantics","href":"/ibc/next/spec/core/ics-003-connection-semantics/README"},{"title":"Client Validation Removal","href":"/ibc/next/spec/core/ics-003-connection-semantics/client-validation-removal"}]},{"group":"ics-004-channel-and-packet-semantics","pages":[{"title":"Channel \u0026 Packet Semantics","href":"/ibc/next/spec/core/ics-004-channel-and-packet-semantics/README"},{"title":"Upgrading Channels","href":"/ibc/next/spec/core/ics-004-channel-and-packet-semantics/UPGRADES"}]},{"group":"ics-005-port-allocation","pages":[{"title":"Port Allocation","href":"/ibc/next/spec/core/ics-005-port-allocation/README"}]},{"group":"ics-023-vector-commitments","pages":[{"title":"Vector Commitments","href":"/ibc/next/spec/core/ics-023-vector-commitments/README"}]},{"group":"ics-024-host-requirements","pages":[{"title":"Host State Machine Requirements","href":"/ibc/next/spec/core/ics-024-host-requirements/README"}]},{"group":"ics-025-handler-interface","pages":[{"title":"Handler Interface","href":"/ibc/next/spec/core/ics-025-handler-interface/README"}]},{"group":"ics-026-routing-module","pages":[{"title":"Routing Module","href":"/ibc/next/spec/core/ics-026-routing-module/README"},{"title":"Application Upgrade Callbacks","href":"/ibc/next/spec/core/ics-026-routing-module/UPGRADES"}]},{"group":"ics-033-multi-hop","pages":[{"title":"Multi-hop Channel","href":"/ibc/next/spec/core/ics-033-multi-hop/README"}]}]},{"group":"Ics-001-ics-standard","pages":[{"title":"ICS Specification Standard","href":"/ibc/next/spec/ics-001-ics-standard/README"}]},{"group":"Relayer","pages":[{"group":"ics-018-relayer-algorithms","pages":[{"title":"Relayer Algorithms","href":"/ibc/next/spec/relayer/ics-018-relayer-algorithms/README"}]}]}]},{"group":"IBC Specs (v2)","pages":[{"title":"IBC v2","href":"/ibc/next/spec/IBC_V2/README"},{"group":"Core","pages":[{"group":"ics-002-client-semantics","pages":[{"title":"Client Semantics","href":"/ibc/next/spec/IBC_V2/core/ics-002-client-semantics/README"}]},{"group":"ics-004-packet-semantics","pages":[{"title":"IBC Packet Handler","href":"/ibc/next/spec/IBC_V2/core/ics-004-packet-semantics/PACKET_HANDLER"},{"title":"Packet Structure and Provable Commitment Specification","href":"/ibc/next/spec/IBC_V2/core/ics-004-packet-semantics/PACKET"}]},{"group":"ics-005-port-allocation","pages":[{"title":"Port Allocation","href":"/ibc/next/spec/IBC_V2/core/ics-005-port-allocation/README"}]},{"group":"ics-024-host-requirements","pages":[{"title":"Host State Machine Requirements","href":"/ibc/next/spec/IBC_V2/core/ics-024-host-requirements/README"}]},{"group":"ics-026-application-callbacks","pages":[{"title":"IBC Application Callbacks","href":"/ibc/next/spec/IBC_V2/core/ics-026-application-callbacks/README"}]}]}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","mode":"wide","href":"/ibc/next/changelog/release-notes"}]}]},{"version":"v10.1.x","pages":[{"title":"v10.1.x","href":"/ibc/v10.1.x/intro"}]},{"version":"v8.5.x","pages":[{"title":"v8.5.x","href":"/ibc/v8.5.x/intro"}]},{"version":"v7.8.x","pages":[{"title":"v7.8.x","href":"/ibc/v7.8.x/intro"}]},{"version":"v6.3.x","pages":[{"title":"v6.3.x","href":"/ibc/v6.3.x/intro"}]},{"version":"v5.4.x","pages":[{"title":"v5.4.x","href":"/ibc/v5.4.x/intro"}]},{"version":"v4.6.x","pages":[{"title":"v4.6.x","href":"/ibc/v4.6.x/intro"}]}]},{"dropdown":"CometBFT","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cosmos-docs/assets/icons/comet-bft.svg","versions":[{"version":"v0.40","default":true,"tag":"Latest","pages":[{"title":"v0.40","href":"/cometbft/latest/docs/README"}]},{"version":"next","tag":"Unreleased","tabs":[{"tab":"Learn","groups":[{"group":"CometBFT","pages":[{"title":"CometBFT Documentation","href":"/cometbft/next/docs/README"},{"title":null,"href":"/cometbft/next/docs/introduction/intro"},{"group":"Guides","pages":[{"title":"Quick Start","href":"/cometbft/next/docs/guides/Quick-Start"},{"title":"Install CometBFT","href":"/cometbft/next/docs/guides/Install-CometBFT"},{"title":"Creating an application in Go","href":"/cometbft/next/docs/guides/Creating-an-application-in-Go"},{"title":"Creating a built-in application in Go","href":"/cometbft/next/docs/guides/Creating-a-built-in-application-in-Go"}]},{"group":"Apps","pages":[{"title":"Getting Started","href":"/cometbft/next/docs/app-dev/Getting-Started"},{"title":"Application Architecture Guide","href":"/cometbft/next/docs/app-dev/Application-Architecture-Guide"},{"title":"Using ABCI-CLI","href":"/cometbft/next/docs/app-dev/Using-ABCI-CLI"},{"title":"Indexing Transactions","href":"/cometbft/next/docs/app-dev/Indexing-Transactions"}]},{"group":"Core","pages":[{"title":"Using CometBFT","href":"/cometbft/next/docs/core/Using-CometBFT"},{"title":"Running in production","href":"/cometbft/next/docs/core/Running-in-production"},{"title":"Configuration","href":"/cometbft/next/docs/core/configuration"},{"title":"Mempool","href":"/cometbft/next/docs/core/mempool"},{"title":"Block Sync","href":"/cometbft/next/docs/core/block-sync"},{"title":"State Sync","href":"/cometbft/next/docs/core/state-sync"},{"title":"RPC","href":"/cometbft/next/docs/core/RPC"},{"title":"Subscribing to events via Websocket","href":"/cometbft/next/docs/core/Subscribing-to-events-via-Websocket"},{"title":"Metrics","href":"/cometbft/next/docs/core/metrics"},{"title":"Validators","href":"/cometbft/next/docs/core/Validators"},{"title":"Light Client","href":"/cometbft/next/docs/core/light-client"},{"title":"Block Structure","href":"/cometbft/next/docs/core/block-structure"},{"title":"How to read logs","href":"/cometbft/next/docs/core/how-to-read-logs"},{"group":"Experimental","pages":[{"title":"Lib-P2P Networking","icon":"waypoints","href":"/cometbft/next/docs/experimental/lib-p2p"}]}]},{"group":"Developer Tools","pages":[{"title":"Overview","href":"/cometbft/next/docs/tools/Overview"},{"title":"Debugging","href":"/cometbft/next/docs/tools/debugging"}]},{"group":"Networks","pages":[{"title":"Docker Compose","href":"/cometbft/next/docs/networks/Docker-Compose"}]},{"group":"CometBFT Quality Assurance","pages":[{"title":"CometBFT Quality Assurance","href":"/cometbft/next/docs/qa/CometBFT-qa"},{"title":"Method","href":"/cometbft/next/docs/qa/Method"},{"title":null,"href":"/cometbft/next/docs/qa/CometBFT-QA-38"},{"title":null,"href":"/cometbft/next/docs/qa/CometBFT-QA-37"},{"title":null,"href":"/cometbft/next/docs/qa/CometBFT-QA-34"},{"title":null,"href":"/cometbft/next/docs/qa/TMCore-QA-37"},{"title":null,"href":"/cometbft/next/docs/qa/TMCore-QA-34"}]}]}]},{"tab":"Specification","groups":[{"group":"CometBFT Spec","pages":[{"title":"Overview","href":"/cometbft/next/spec/CometBFT-Spec"},{"group":"Core","pages":[{"title":null,"href":"/cometbft/next/spec/core/Overview"},{"title":"Data Structures","href":"/cometbft/next/spec/core/Data_structures"},{"title":"Encoding","href":"/cometbft/next/spec/core/encoding"},{"title":"Genesis","href":"/cometbft/next/spec/core/genesis"},{"title":"State","href":"/cometbft/next/spec/core/state"}]},{"group":"ABCI++","pages":[{"title":null,"href":"/cometbft/next/spec/abci/Overview"},{"title":"Overview and basic concepts","href":"/cometbft/next/spec/abci/Outline"},{"title":"Methods","href":"/cometbft/next/spec/abci/Methods"},{"title":"Requirements for the Application","href":"/cometbft/next/spec/abci/Requirements-for-the-Application"},{"title":"CometBFT's expected behavior","href":"/cometbft/next/spec/abci/CometBFTs-expected-behavior"},{"title":"Client and Server","href":"/cometbft/next/spec/abci/Client-and-server"},{"title":"ABCI++ extra","href":"/cometbft/next/spec/abci/Introduction"}]},{"group":"Consensus","pages":[{"title":null,"href":"/cometbft/next/spec/consensus/Overview"},{"title":"Consensus Paper","href":"/cometbft/next/spec/consensus/Consensus-Paper"},{"title":"Byzantine Consensus Algorithm","href":"/cometbft/next/spec/consensus/Byzantine-Consensus-Algorithm"},{"title":null,"href":"/cometbft/next/spec/consensus/Light-Client"},{"title":"Creating a proposal","href":"/cometbft/next/spec/consensus/Creating-Proposal"},{"title":"BFT Time","href":"/cometbft/next/spec/consensus/BFT-Time"},{"title":null,"href":"/cometbft/next/spec/consensus/Proposer-Selection"},{"title":"Evidence","href":"/cometbft/next/spec/consensus/Evidence"},{"title":"Validator Signing","href":"/cometbft/next/spec/consensus/Validator-Signing"},{"title":"WAL","href":"/cometbft/next/spec/consensus/WAL"}]},{"group":"Light Client","pages":[{"title":"Light Client Specification","href":"/cometbft/next/spec/light-client/Light-Client-Specification"},{"title":null,"href":"/cometbft/next/spec/light-client/verification"},{"title":null,"href":"/cometbft/next/spec/light-client/Fork-Detection"},{"title":null,"href":"/cometbft/next/spec/light-client/Accountability"}]},{"group":"P2P","pages":[{"title":null,"href":"/cometbft/next/spec/p2p/Peer-to-Peer"},{"title":"Implementation","href":"/cometbft/next/spec/p2p/Implementation-of-the-p2p-layer"},{"group":"Legacy Docs","pages":[{"title":"Legacy Docs","href":"/cometbft/next/spec/p2p/legacy-docs/Overview"},{"group":"Messages","pages":[{"title":null,"href":"/cometbft/next/spec/p2p/legacy-docs/messages/Overview"},{"title":"Block Sync","href":"/cometbft/next/spec/p2p/legacy-docs/messages/block-sync"},{"title":"Evidence","href":"/cometbft/next/spec/p2p/legacy-docs/messages/evidence"},{"title":"Mempool","href":"/cometbft/next/spec/p2p/legacy-docs/messages/mempool"},{"title":"State Sync","href":"/cometbft/next/spec/p2p/legacy-docs/messages/state-sync"},{"title":"Peer Exchange","href":"/cometbft/next/spec/p2p/legacy-docs/messages/Peer-Exchange"},{"title":"Consensus","href":"/cometbft/next/spec/p2p/legacy-docs/messages/consensus"}]},{"title":"P2P Multiplex Connection","href":"/cometbft/next/spec/p2p/legacy-docs/P2P-Multiplex-Connection"},{"title":"Peers","href":"/cometbft/next/spec/p2p/legacy-docs/Peers"},{"title":"P2P Config","href":"/cometbft/next/spec/p2p/legacy-docs/P2P-Config"},{"title":"Peer Discovery","href":"/cometbft/next/spec/p2p/legacy-docs/Peer-Discovery"},{"group":"Reactors","pages":[{"title":"Reactors","href":"/cometbft/next/spec/p2p/reactor-api/Reactors"},{"title":"Reactor API","href":"/cometbft/next/spec/p2p/reactor-api/Reactor-Api"},{"title":"API for Reactors","href":"/cometbft/next/spec/p2p/reactor-api/API-for-Reactors"}]}]}]},{"group":"RPC","pages":[{"title":"RPC spec","href":"/cometbft/next/spec/rpc/Rpc-Spe"}]},{"group":"Blockchain","pages":[{"title":"Blockchain","href":"/cometbft/next/spec/blockchain/Blockchain"}]}]}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"CometBFT RPC","href":"/cometbft/next/api-reference/rpc/index"}]},{"group":"RPC Methods","pages":[{"group":"Tx","pages":[{"title":"broadcast_tx_sync","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /broadcast_tx_sync","href":"/cometbft/next/api-reference/rpc/tx/broadcast_tx_sync"},{"title":"broadcast_tx_async","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /broadcast_tx_async","href":"/cometbft/next/api-reference/rpc/tx/broadcast_tx_async"},{"title":"broadcast_tx_commit","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /broadcast_tx_commit","href":"/cometbft/next/api-reference/rpc/tx/broadcast_tx_commit"},{"title":"check_tx","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /check_tx","href":"/cometbft/next/api-reference/rpc/tx/check_tx"}]},{"group":"Info","pages":[{"title":"health","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /health","href":"/cometbft/next/api-reference/rpc/info/health"},{"title":"status","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /status","href":"/cometbft/next/api-reference/rpc/info/status"},{"title":"net_info","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /net_info","href":"/cometbft/next/api-reference/rpc/info/net_info"},{"title":"blockchain","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /blockchain","href":"/cometbft/next/api-reference/rpc/info/blockchain"},{"title":"header","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /header","href":"/cometbft/next/api-reference/rpc/info/header"},{"title":"header_by_hash","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /header_by_hash","href":"/cometbft/next/api-reference/rpc/info/header_by_hash"},{"title":"block","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /block","href":"/cometbft/next/api-reference/rpc/info/block"},{"title":"block_by_hash","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /block_by_hash","href":"/cometbft/next/api-reference/rpc/info/block_by_hash"},{"title":"block_results","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /block_results","href":"/cometbft/next/api-reference/rpc/info/block_results"},{"title":"commit","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /commit","href":"/cometbft/next/api-reference/rpc/info/commit"},{"title":"validators","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /validators","href":"/cometbft/next/api-reference/rpc/info/validators"},{"title":"genesis","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /genesis","href":"/cometbft/next/api-reference/rpc/info/genesis"},{"title":"genesis_chunked","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /genesis_chunked","href":"/cometbft/next/api-reference/rpc/info/genesis_chunked"},{"title":"dump_consensus_state","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /dump_consensus_state","href":"/cometbft/next/api-reference/rpc/info/dump_consensus_state"},{"title":"consensus_state","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /consensus_state","href":"/cometbft/next/api-reference/rpc/info/consensus_state"},{"title":"consensus_params","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /consensus_params","href":"/cometbft/next/api-reference/rpc/info/consensus_params"},{"title":"unconfirmed_txs","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /unconfirmed_txs","href":"/cometbft/next/api-reference/rpc/info/unconfirmed_txs"},{"title":"num_unconfirmed_txs","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /num_unconfirmed_txs","href":"/cometbft/next/api-reference/rpc/info/num_unconfirmed_txs"},{"title":"tx_search","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /tx_search","href":"/cometbft/next/api-reference/rpc/info/tx_search"},{"title":"block_search","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /block_search","href":"/cometbft/next/api-reference/rpc/info/block_search"},{"title":"tx","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /tx","href":"/cometbft/next/api-reference/rpc/info/tx"},{"title":"broadcast_evidence","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /broadcast_evidence","href":"/cometbft/next/api-reference/rpc/info/broadcast_evidence"}]},{"group":"Unsafe","pages":[{"title":"dial_seeds","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /dial_seeds","href":"/cometbft/next/api-reference/rpc/unsafe/dial_seeds"},{"title":"dial_peers","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /dial_peers","href":"/cometbft/next/api-reference/rpc/unsafe/dial_peers"}]},{"group":"ABCI","pages":[{"title":"abci_info","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /abci_info","href":"/cometbft/next/api-reference/rpc/abci/abci_info"},{"title":"abci_query","deprecated":null,"version":null,"openapi":"/cometbft/next/api-reference/rpc/openapi.yaml get /abci_query","href":"/cometbft/next/api-reference/rpc/abci/abci_query"}]}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","mode":"wide","href":"/cometbft/next/changelog/release-notes"}]}]},{"version":"v0.39","pages":[{"title":"v0.39","href":"/cometbft/v0.39/docs/README"}]},{"version":"v0.38","pages":[{"title":"v0.38","href":"/cometbft/v0.38/docs/README"}]},{"version":"v0.37","pages":[{"title":"v0.37","href":"/cometbft/v0.37/docs/README"}]}]},{"dropdown":"Skip Go","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cosmos-docs/assets/icons/skip-go.svg","hidden":false,"tabs":[{"tab":"Documentation","groups":[{"group":"General API Docs","pages":[{"title":"Introduction","href":"/skip-go/general/getting-started"},{"title":"Quickstart Guide","href":"/skip-go/general/quickstart-guide"},{"title":"Overview \u0026 Common Usage Patterns","href":"/skip-go/general/overview-and-typical-usage"},{"title":"Supported Ecosystems","href":"/skip-go/general/supported-ecosystems-and-bridges"},{"title":"Transaction Tracking","href":"/skip-go/general/multi-chain-realtime-transaction-and-packet-tracking"},{"title":"Skip Explorer Integration","href":"/skip-go/general/explorer-integration"},{"title":"Requesting \u0026 Using API Keys","href":"/skip-go/general/api-keys"},{"title":"Smart Relay","href":"/skip-go/general/smart-relay"},{"title":"Post-Route Actions","href":"/skip-go/general/post-route-actions"},{"title":"Setting Affiliate Fees","href":"/skip-go/general/affiliate-fees"},{"title":"Getting Fee Info","href":"/skip-go/general/fee-info"},{"title":"Transaction Support","href":"/skip-go/general/transaction-support"},{"title":"FAQ","href":"/skip-go/general/faq"}]},{"group":"Skip Go Widget","pages":[{"title":"Getting Started","href":"/skip-go/widget/getting-started"},{"title":"Configuration","href":"/skip-go/widget/configuration"},{"title":"Gas on Receive","href":"/skip-go/widget/gas-on-receive"},{"title":"Web Component","href":"/skip-go/widget/web-component"},{"title":"Migration Guide","href":"/skip-go/widget/migration-guide"},{"title":"FAQ","href":"/skip-go/widget/faq"}]},{"group":"Skip Go Client","pages":[{"title":"Getting Started","href":"/skip-go/client/getting-started"},{"title":"Balances, Gas and Transaction Fee Utilities","href":"/skip-go/client/balance-gas-and-fee-tooling"},{"title":"Executing a route","href":"/skip-go/client/executing-a-route"},{"title":"Gas on Receive with Custom Frontends","href":"/skip-go/client/gas-on-receive"},{"title":"Advanced Features","href":"/skip-go/client/advanced-features"},{"title":"Migration Guide","href":"/skip-go/client/migration-guide"}]},{"group":"Advanced Transfer","pages":[{"title":"Cross-chain Failure Cases","href":"/skip-go/advanced-transfer/handling-cross-chain-failure-cases"},{"title":"Interpreting Transaction \u0026 Transfer Status","href":"/skip-go/advanced-transfer/interpreting-transaction-status"},{"title":"IBC Token Routing: Problem + Skip Go API Routing Algorithm","href":"/skip-go/advanced-transfer/ibc-routing-algorithm"},{"title":"EVM Transactions","href":"/skip-go/advanced-transfer/evm-transactions"},{"title":"SVM Transactions","href":"/skip-go/advanced-transfer/svm-transaction-details"},{"title":"CW20 Tokens \u0026 Their Limitations","href":"/skip-go/advanced-transfer/cw20-swaps"},{"title":"Experimental Features","href":"/skip-go/advanced-transfer/experimental-features"},{"title":"Go Fast","href":"/skip-go/advanced-transfer/go-fast"}]},{"group":"Advanced Swapping","pages":[{"title":"Understanding Quote Quality Metrics","href":"/skip-go/advanced-swapping/understanding-quote-quality-metrics"},{"title":"`allow_unsafe`: Preventing \u0026 Handling Bad Execution","href":"/skip-go/advanced-swapping/allow_unsafe-preventing-handling-bad-execution"},{"title":"SAFE Swapping: How to Protect Users from Bad Trades","href":"/skip-go/advanced-swapping/safe-swapping-how-to-protect-users-from-harming-themselves"},{"title":"Smart Swap","href":"/skip-go/advanced-swapping/smart-swap-options"}]},{"group":"Support Requirements","pages":[{"title":"Chain Support Requirements","href":"/skip-go/support-requirements/chain-support-requirements"},{"title":"Token \u0026 Route Support Requirements","href":"/skip-go/support-requirements/token-support-requirements"},{"title":"Skip Go Asset Registry \u0026 Overrides","href":"/skip-go/support-requirements/asset-registry-overrides"},{"title":"Swap Venue Requirements","href":"/skip-go/support-requirements/swap-venue-requirements"},{"title":"Chain Integration Request","url":"https://42jzxo.share-na2.hsforms.com/2BKju688uROaORNxmEgY2Ug","href":"/skip-go/support-requirements/chain-integration-request"}]},{"group":"Eureka","pages":[{"title":"Overview","href":"/skip-go/eureka/eureka-overview"},{"title":"Technical Overview","href":"/skip-go/eureka/eureka-tech-overview"},{"title":"Integration Guide","href":"/skip-go/eureka/integration-guide"},{"title":"Custom ERC20 Integration","href":"/skip-go/eureka/custom-erc20-integration"},{"title":"Security Properties","href":"/skip-go/eureka/security-properties"},{"title":"Contract Addresses","href":"/skip-go/eureka/contract-addresses"}]}]},{"tab":"API Reference","groups":[{"group":"Prod Endpoints","pages":[{"group":"Info","pages":[{"title":"Get /v2/info/chains","openapi":"swagger get /v2/info/chains","href":"/skip-go/api-reference/prod/info/get-v2infochains"},{"title":"Get /v2/info/bridges","openapi":"swagger get /v2/info/bridges","href":"/skip-go/api-reference/prod/info/get-v2infobridges"},{"title":"Post /v2/info/balances","openapi":"swagger post /v2/info/balances","href":"/skip-go/api-reference/prod/info/post-v2infobalances"}]},{"group":"Fungible","pages":[{"title":"Get /v2/fungible/venues","openapi":"swagger get /v2/fungible/venues","href":"/skip-go/api-reference/prod/fungible/get-v2fungiblevenues"},{"title":"Get /v2/fungible/assets","openapi":"swagger get /v2/fungible/assets","href":"/skip-go/api-reference/prod/fungible/get-v2fungibleassets"},{"title":"Post /v2/fungible/assets_from_source","openapi":"swagger post /v2/fungible/assets_from_source","href":"/skip-go/api-reference/prod/fungible/post-v2fungibleassets_from_source"},{"title":"Post /v2/fungible/route","openapi":"swagger post /v2/fungible/route","href":"/skip-go/api-reference/prod/fungible/post-v2fungibleroute"},{"title":"Post /v2/fungible/msgs","openapi":"swagger post /v2/fungible/msgs","href":"/skip-go/api-reference/prod/fungible/post-v2fungiblemsgs"},{"title":"Post /v2/fungible/msgs_direct","openapi":"swagger post /v2/fungible/msgs_direct","href":"/skip-go/api-reference/prod/fungible/post-v2fungiblemsgs_direct"},{"title":"Post /v2/fungible/ibc_origin_assets","openapi":"swagger post /v2/fungible/ibc_origin_assets","href":"/skip-go/api-reference/prod/fungible/post-v2fungibleibc_origin_assets"},{"title":"Post /v2/fungible/assets_between_chains","openapi":"swagger post /v2/fungible/assets_between_chains","href":"/skip-go/api-reference/prod/fungible/post-v2fungibleassets_between_chains"}]},{"group":"Transaction","pages":[{"title":"Post /v2/tx/submit","openapi":"swagger post /v2/tx/submit","href":"/skip-go/api-reference/prod/transaction/post-v2txsubmit"},{"title":"Post /v2/tx/track","openapi":"swagger post /v2/tx/track","href":"/skip-go/api-reference/prod/transaction/post-v2txtrack"},{"title":"Get /v2/tx/status","openapi":"swagger get /v2/tx/status","href":"/skip-go/api-reference/prod/transaction/get-v2txstatus"}]}]},{"group":"Reference Guides","pages":[{"title":"API Error Codes \u0026 Status Messages","href":"/skip-go/api-reference/error-codes"}]}]}]},{"dropdown":"Cosmos Hub","icon":"https://mintlify.s3.us-west-1.amazonaws.com/cosmos-docs/assets/icons/hub.svg","hidden":false,"versions":[{"version":"Latest","default":true,"tag":"Latest","pages":[{"title":"Latest","href":"/hub/latest"}]},{"version":"next","tag":"Unreleased","tabs":[{"tab":"Documentation","groups":[{"group":"Cosmos Hub","pages":[{"title":"Introduction","href":"/hub/next"},{"group":"Getting Started","pages":[{"title":"Getting Started","href":"/hub/next/getting-started/README"},{"title":"What is Gaia?","href":"/hub/next/getting-started/what-is-gaia"},{"title":"Installing Gaia","href":"/hub/next/getting-started/installation"},{"title":"Quick Start - Join Mainnet","href":"/hub/next/getting-started/quickstart"},{"title":"System requirements","href":"/hub/next/getting-started/system-requirements"}]},{"group":"Hub Tutorials","pages":[{"title":"Interacting with Gaiad (CLI)","href":"/hub/next/hub-tutorials/gaiad"},{"title":"Joining Mainnet","href":"/hub/next/hub-tutorials/join-mainnet"},{"title":"Joining Testnet","href":"/hub/next/hub-tutorials/join-testnet"},{"title":"Upgrading the Chain","href":"/hub/next/hub-tutorials/live-upgrade-tutorial"},{"title":"Gaia Tutorials","href":"/hub/next/hub-tutorials/README"},{"title":"Upgrading Your Node","href":"/hub/next/hub-tutorials/upgrade-node"}]},{"group":"Validators","pages":[{"title":"Validator Overview","href":"/hub/next/validators/overview"},{"title":"Validators","href":"/hub/next/validators/README"},{"title":"Validator Security","href":"/hub/next/validators/security"},{"title":"Validator FAQ","href":"/hub/next/validators/validator-faq"},{"title":"Running a Validator","href":"/hub/next/validators/validator-setup"},{"title":"Setting up Tendermint KMS + Ledger","href":"/hub/next/validators/kms/kms_ledger"},{"title":"KMS - Key Management System","href":"/hub/next/validators/kms/kms"}]},{"group":"Delegators","pages":[{"title":"Delegator FAQ","href":"/hub/next/delegators/delegator-faq"},{"title":"Delegator Guide (CLI)","href":"/hub/next/delegators/delegator-guide-cli"},{"title":"Delegator Security","href":"/hub/next/delegators/delegator-security"},{"title":"Delegators","href":"/hub/next/delegators/README"}]},{"group":"Governance","pages":[{"title":"Off-Chain Proposal Process","href":"/hub/next/governance/best-practices"},{"title":"Formatting a Proposal","href":"/hub/next/governance/formatting"},{"title":"On-Chain Proposal Process","href":"/hub/next/governance/process"},{"title":"Governance Overview","href":"/hub/next/governance/README"},{"title":"Submitting a Proposal","href":"/hub/next/governance/submitting"},{"title":"Community Pool Spend","href":"/hub/next/governance/proposal-types/community-pool-spend"},{"title":"Parameter Changes","href":"/hub/next/governance/proposal-types/param-change"},{"title":"Proposal Types","href":"/hub/next/governance/proposal-types/README"},{"title":"Software Upgrade","href":"/hub/next/governance/proposal-types/software-upgrade"},{"title":"Text (Signaling)","href":"/hub/next/governance/proposal-types/text-prop"}]},{"group":"Interchain Security","pages":[{"title":"Interchain Security","href":"/hub/next/interchain-security/README"}]},{"group":"Modules","pages":[{"title":"x/liquid","href":"/hub/next/modules/liquid"},{"title":"Cosmos SDK LSM","href":"/hub/next/modules/lsm-migration"},{"title":"Metaprotocol","href":"/hub/next/modules/metaprotocols"},{"title":"Gaia Modules","href":"/hub/next/modules/README"}]},{"group":"Architecture","pages":[{"title":"ADR Creation Process","href":"/hub/next/architecture/PROCESS"},{"title":"Architecture Decision Records (ADR)","href":"/hub/next/architecture/README"},{"title":"ADR 001: Interchain Accounts","href":"/hub/next/architecture/adr/adr-001-interchain-accounts"},{"title":null,"href":"/hub/next/architecture/templates/adr-template"},{"title":"ADR 002: Globalfee Module [DEPRECATED]","href":"/hub/next/architecture/adr/adr-002-globalfee"},{"title":"ADR 003: Interchain Accounts Controller Module","href":"/hub/next/architecture/adr/adr-003-ica-controller"},{"title":"ADR Creation Process","href":"/hub/next/architecture/adr/PROCESS"},{"title":"Architecture Decision Records (ADR)","href":"/hub/next/architecture/adr/README"}]},{"group":"Resources","pages":[{"title":"Cosmos Hub Archives","href":"/hub/next/resources/archives"},{"title":"The Genesis File","href":"/hub/next/resources/genesis"},{"title":"HD Wallets","href":"/hub/next/resources/hd-wallets"},{"title":"Ledger Nano Support","href":"/hub/next/resources/ledger"},{"title":"Resources","href":"/hub/next/resources/README"},{"title":"Building Gaia Deterministically","href":"/hub/next/resources/reproducible-builds"},{"title":"Service Providers","href":"/hub/next/resources/service-providers"}]},{"group":"Telemetry","pages":[{"title":"Gaia Telemetry","href":"/hub/next/telemetry/telemetry"}]}]}]}]},{"version":"v25","pages":[{"title":"v25","href":"/hub/v25"}]}]}]},"title":"Configure a signing backend - Cosmos Docs","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":[],"chunks":[]}