How x/licensedstaking enforces NFT license preconditions on all staking operations, including pre-checks and post-call hooks.
License gating is enforced by the x/licensedstaking module, which wraps the standard staking MsgServer. Every staking operation runs through a two-phase check: a pre-check that validates license state before the operation executes, and a post-call hook that updates license status afterward.
Operation requirements
MsgCreateValidator
Requires a Sovereign license in BOUND status on the validator address being created.
Only the validator operator can edit. Requires a non-revoked Sovereign license on the operator address.
MsgDelegate (self-delegation)
Requires an ACTIVE or BOUND Sovereign license on the delegator’s own validator address.
MsgDelegate (external delegation)
Requires a BOUND or ACTIVE Prime or Core license owned by the delegator, bound to the target validator.
MsgUndelegate
No license pre-checks. Post-call logic handles delegation removal, implicit jails, and dust shares.
MsgBeginRedelegate
Redelegation is permanently disabled. Submitting MsgBeginRedelegate returns ErrRedelegateDisabled. Use undelegate followed by delegate instead.
MsgCancelUnbondingDelegation
Restores BOUND licenses to ACTIVE if the delegation criteria are met after the post-call hook fires.
License binding
To bind a license, the following conditions must all be true:
License status is ISSUED
The category policy permits the binding operation
Any cooldown period from a prior unbind has elapsed
Sovereign licenses can only bind to the owner’s own validator address.
# Bind a Sovereign licenseautheod tx license bind <license-id> \ --from <owner-key> \ --chain-id autheo_2127-1 \ --keyring-backend file# Bind a Prime or Core license to a specific validatorautheod tx license bind <license-id> \ --validator-address <autheovaloper-address> \ --from <owner-key> \ --chain-id autheo_2127-1 \ --keyring-backend file
License transfers
Transfers are permitted only for ISSUED licenses when the category policy has Transferable = true. BOUND and ACTIVE licenses cannot be transferred directly — you must undelegate and unbind first.
Governance operations
RevokeLicense — Transitions the license to REVOKED, auto-undelegates the owner’s stake (best-effort), jails the validator (for Sovereign revocations), and deletes the binding.
ReinstateLicense — Restores a REVOKED license to ISSUED. Does not rebind, unjail, or restore delegation.
Common errors
Error
Cause
Resolution
ErrLicenseAlreadyBound
License already bound
Unbind first, wait for cooldown
ErrPolicyNotFound
No category policy configured
Governance must submit MsgUpsertLicensePolicy
ErrNotInActiveValidatorSet
Target validator is jailed or unbonded
Wait for unjail or choose a bonded validator
ErrDelegationStillActive
Active delegation blocks unbind
Fully undelegate first
ErrRedelegateDisabled
Redelegation blocked
Use undelegate then delegate
ErrCannotBindToOtherValidator
Sovereign license bound to wrong validator
Sovereign licenses bind only to owner’s own validator
ErrCooldownNotElapsed
Cooldown after unbind still active
Wait until cooldown duration elapses
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Autheo documentation","colors":{"primary":"#007262","light":"#00FED9","dark":"#00A88F"},"logo":{"light":"https://mintcdn.com/autheo/Anmz1CmPS72LUXN4/logo/light.svg?fit=max\u0026auto=format\u0026n=Anmz1CmPS72LUXN4\u0026q=85\u0026s=e1cf2c25fddacc0621c3ca2ddc9c5853","dark":"https://mintcdn.com/autheo/Anmz1CmPS72LUXN4/logo/dark.svg?fit=max\u0026auto=format\u0026n=Anmz1CmPS72LUXN4\u0026q=85\u0026s=5440b5cb830a38a1eabbfb647a288fbe"},"favicon":"https://mintcdn.com/autheo/0JlETvy4cHvGL7cO/favicon.ico?fit=max\u0026auto=format\u0026n=0JlETvy4cHvGL7cO\u0026q=85\u0026s=688b139bf8bf492cbe8f2b2f6dc67b23","navbar":{"links":[{"href":"mailto:info@autheo.com","label":"Support"}],"primary":{"type":"button","label":"autheo.com","href":"https://www.autheo.com/"}},"footer":{"socials":{"x":"https://x.com/Autheo_Network","linkedin":"https://www.linkedin.com/company/autheo/posts?feedView=all","discord":"https://discord.gg/McEEeXGGya","telegram":"https://t.me/autheo/1"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"autheo","hasAudioNarration":false,"actualSubdomain":"autheo","customDomains":["docs.autheo.com"],"gitSource":{"type":"github","owner":"autheo-organization","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"entitlements":{},"buildId":"6ac003bbaa30b8dba727eb84","clientVersion":"0.0.4138","searchFilterCounts":[{"language":"default","tag":"Node operations","count":38},{"language":"default","tag":"APIs","count":24},{"language":"default","tag":"Nodes","count":23},{"language":"default","tag":"Web Apps","count":18},{"language":"default","tag":"Developers","count":15},{"language":"default","tag":"JSON-RPC","count":12},{"language":"default","tag":"REST","count":11},{"language":"default","tag":"Methods","count":8},{"language":"default","tag":"Getting Started","count":8},{"language":"default","tag":"SDKs","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"nodes/architecture/license-gating","slug":"/nodes/architecture/license-gating","pageMetadata":{"title":"License gating","description":"How x/licensedstaking enforces NFT license preconditions on all staking operations, including pre-checks and post-call hooks.","keywords":["license gating","x/licensedstaking","sovereign","prime","core","staking","validation"],"href":"/nodes/architecture/license-gating"},"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: \"How x/licensedstaking enforces NFT license preconditions on all staking operations, including pre-checks and post-call hooks.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`License gating is enforced by the `,_jsx(_components.code,{children:`x/licensedstaking`}),` module, which wraps the standard staking `,_jsx(_components.code,{children:`MsgServer`}),`. Every staking operation runs through a two-phase check: a pre-check that validates license state before the operation executes, and a post-call hook that updates license status afterward.`]}),`\n`,_jsx(Heading,{level:`2`,id:`operation-requirements`,children:`Operation requirements`}),`\n`,_jsx(Heading,{level:`3`,id:`msgcreatevalidator`,children:`MsgCreateValidator`}),`\n`,_jsxs(_components.p,{children:[`Requires a Sovereign license in `,_jsx(_components.code,{children:`BOUND`}),` status on the validator address being created.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`autheod`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` query`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` license`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` licenses-by-owner`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`cosmos-addres`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`s`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`msgeditvalidator`,children:`MsgEditValidator`}),`\n`,_jsx(_components.p,{children:`Only the validator operator can edit. Requires a non-revoked Sovereign license on the operator address.`}),`\n`,_jsx(Heading,{level:`3`,id:`msgdelegate-self-delegation`,children:`MsgDelegate (self-delegation)`}),`\n`,_jsxs(_components.p,{children:[`Requires an `,_jsx(_components.code,{children:`ACTIVE`}),` or `,_jsx(_components.code,{children:`BOUND`}),` Sovereign license on the delegator’s own validator address.`]}),`\n`,_jsx(Heading,{level:`3`,id:`msgdelegate-external-delegation`,children:`MsgDelegate (external delegation)`}),`\n`,_jsxs(_components.p,{children:[`Requires a `,_jsx(_components.code,{children:`BOUND`}),` or `,_jsx(_components.code,{children:`ACTIVE`}),` Prime or Core license owned by the delegator, bound to the target validator.`]}),`\n`,_jsx(Heading,{level:`3`,id:`msgundelegate`,children:`MsgUndelegate`}),`\n`,_jsx(_components.p,{children:`No license pre-checks. Post-call logic handles delegation removal, implicit jails, and dust shares.`}),`\n`,_jsx(Heading,{level:`3`,id:`msgbeginredelegate`,children:`MsgBeginRedelegate`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Redelegation is permanently disabled. Submitting `,_jsx(_components.code,{children:`MsgBeginRedelegate`}),` returns `,_jsx(_components.code,{children:`ErrRedelegateDisabled`}),`. Use undelegate followed by delegate instead.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`msgcancelunbondingdelegation`,children:`MsgCancelUnbondingDelegation`}),`\n`,_jsxs(_components.p,{children:[`Restores `,_jsx(_components.code,{children:`BOUND`}),` licenses to `,_jsx(_components.code,{children:`ACTIVE`}),` if the delegation criteria are met after the post-call hook fires.`]}),`\n`,_jsx(Heading,{level:`2`,id:`license-binding`,children:`License binding`}),`\n`,_jsx(_components.p,{children:`To bind a license, the following conditions must all be true:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`License status is `,_jsx(_components.code,{children:`ISSUED`})]}),`\n`,_jsx(_components.li,{children:`The category policy permits the binding operation`}),`\n`,_jsx(_components.li,{children:`Any cooldown period from a prior unbind has elapsed`}),`\n`]}),`\n`,_jsx(_components.p,{children:`Sovereign licenses can only bind to the owner’s own validator address.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`12`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Bind a Sovereign license`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`autheod`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` tx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` license`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` bind`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`license-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --from`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`owner-ke`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`y`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --chain-id`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` autheo_2127-1`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --keyring-backend`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` file`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Bind a Prime or Core license to a specific validator`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`autheod`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` tx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` license`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` bind`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`license-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --validator-address`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`autheovaloper-addres`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`s`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --from`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`owner-ke`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`y`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --chain-id`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` autheo_2127-1`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --keyring-backend`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` file`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`license-transfers`,children:`License transfers`}),`\n`,_jsxs(_components.p,{children:[`Transfers are permitted only for `,_jsx(_components.code,{children:`ISSUED`}),` licenses when the category policy has `,_jsx(_components.code,{children:`Transferable = true`}),`. BOUND and ACTIVE licenses cannot be transferred directly — you must undelegate and unbind first.`]}),`\n`,_jsx(Heading,{level:`2`,id:`governance-operations`,children:`Governance operations`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`RevokeLicense`}),` — Transitions the license to `,_jsx(_components.code,{children:`REVOKED`}),`, auto-undelegates the owner’s stake (best-effort), jails the validator (for Sovereign revocations), and deletes the binding.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`ReinstateLicense`}),` — Restores a `,_jsx(_components.code,{children:`REVOKED`}),` license to `,_jsx(_components.code,{children:`ISSUED`}),`. Does not rebind, unjail, or restore delegation.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`common-errors`,children:`Common errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Error`}),_jsx(_components.th,{children:`Cause`}),_jsx(_components.th,{children:`Resolution`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ErrLicenseAlreadyBound`})}),_jsx(_components.td,{children:`License already bound`}),_jsx(_components.td,{children:`Unbind first, wait for cooldown`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ErrPolicyNotFound`})}),_jsx(_components.td,{children:`No category policy configured`}),_jsxs(_components.td,{children:[`Governance must submit `,_jsx(_components.code,{children:`MsgUpsertLicensePolicy`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ErrNotInActiveValidatorSet`})}),_jsx(_components.td,{children:`Target validator is jailed or unbonded`}),_jsx(_components.td,{children:`Wait for unjail or choose a bonded validator`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ErrDelegationStillActive`})}),_jsx(_components.td,{children:`Active delegation blocks unbind`}),_jsx(_components.td,{children:`Fully undelegate first`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ErrRedelegateDisabled`})}),_jsx(_components.td,{children:`Redelegation blocked`}),_jsx(_components.td,{children:`Use undelegate then delegate`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ErrCannotBindToOtherValidator`})}),_jsx(_components.td,{children:`Sovereign license bound to wrong validator`}),_jsx(_components.td,{children:`Sovereign licenses bind only to owner’s own validator`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ErrCooldownNotElapsed`})}),_jsx(_components.td,{children:`Cooldown after unbind still active`}),_jsx(_components.td,{children:`Wait until cooldown duration elapses`})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"License gating","description":"How x/licensedstaking enforces NFT license preconditions on all staking operations, including pre-checks and post-call hooks.","keywords":["license gating","x/licensedstaking","sovereign","prime","core","staking","validation"],"href":"/nodes/architecture/license-gating"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Operation requirements","slug":"operation-requirements","depth":2,"children":[{"title":"MsgCreateValidator","slug":"msgcreatevalidator","depth":3,"children":[]},{"title":"MsgEditValidator","slug":"msgeditvalidator","depth":3,"children":[]},{"title":"MsgDelegate (self-delegation)","slug":"msgdelegate-self-delegation","depth":3,"children":[]},{"title":"MsgDelegate (external delegation)","slug":"msgdelegate-external-delegation","depth":3,"children":[]},{"title":"MsgUndelegate","slug":"msgundelegate","depth":3,"children":[]},{"title":"MsgBeginRedelegate","slug":"msgbeginredelegate","depth":3,"children":[]},{"title":"MsgCancelUnbondingDelegation","slug":"msgcancelunbondingdelegation","depth":3,"children":[]}]},{"title":"License binding","slug":"license-binding","depth":2,"children":[]},{"title":"License transfers","slug":"license-transfers","depth":2,"children":[]},{"title":"Governance operations","slug":"governance-operations","depth":2,"children":[]},{"title":"Common errors","slug":"common-errors","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"autheo","siteName":"Autheo documentation","title":"License gating - Autheo documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-15T15:53:54.093Z","originalFileLocation":"nodes/architecture/license-gating.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=\"How x/licensedstaking enforces NFT license preconditions on all staking operations, including pre-checks and post-call hooks.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Autheo documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/autheo/B9qtwfZ_VB1YKB9V/_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/autheo/B9qtwfZ_VB1YKB9V/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/autheo/B9qtwfZ_VB1YKB9V/_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/autheo/B9qtwfZ_VB1YKB9V/_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/autheo/B9qtwfZ_VB1YKB9V/_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/autheo/B9qtwfZ_VB1YKB9V/_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/autheo/B9qtwfZ_VB1YKB9V/_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/autheo/B9qtwfZ_VB1YKB9V/_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/autheo/B9qtwfZ_VB1YKB9V/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"License gating - Autheo documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"How x/licensedstaking enforces NFT license preconditions on all staking operations, including pre-checks and post-call hooks.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Autheo documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.autheo.com/nodes/architecture/license-gating\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://autheo.mintlify.site/_mintlify/api/og/v2?division=Architecture\u0026amp;title=License+gating\u0026amp;description=How+x%2Flicensedstaking+enforces+NFT+license+preconditions+on+all+staking+operations%2C+including+pre-checks+and+post-call+hooks.\u0026amp;theme=e3e81a05ab46e08b91b13b4a\u0026amp;signature=184c2e3f66529c1eac5b1ebcd56beae7e2d73ea0cdf19dfa6928ec99900f6978\">\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=\"License gating - Autheo documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How x/licensedstaking enforces NFT license preconditions on all staking operations, including pre-checks and post-call hooks.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://autheo.mintlify.site/_mintlify/api/og/v2?division=Architecture\u0026amp;title=License+gating\u0026amp;description=How+x%2Flicensedstaking+enforces+NFT+license+preconditions+on+all+staking+operations%2C+including+pre-checks+and+post-call+hooks.\u0026amp;theme=e3e81a05ab46e08b91b13b4a\u0026amp;signature=184c2e3f66529c1eac5b1ebcd56beae7e2d73ea0cdf19dfa6928ec99900f6978\">\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/autheo/B9qtwfZ_VB1YKB9V/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Autheo documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#007262\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.autheo.com/nodes/architecture/license-gating\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/nodes/architecture/license-gating.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.autheo.com/#organization\",\"name\":\"Autheo documentation\",\"url\":\"https://docs.autheo.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/autheo/Anmz1CmPS72LUXN4/logo/light.svg?fit=max\u0026auto=format\u0026n=Anmz1CmPS72LUXN4\u0026q=85\u0026s=e1cf2c25fddacc0621c3ca2ddc9c5853\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.autheo.com#website\",\"name\":\"Autheo documentation\",\"url\":\"https://docs.autheo.com\",\"publisher\":{\"@id\":\"https://docs.autheo.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.autheo.com/nodes/architecture/license-gating#webpage\",\"url\":\"https://docs.autheo.com/nodes/architecture/license-gating\",\"name\":\"License gating\",\"description\":\"How x/licensedstaking enforces NFT license preconditions on all staking operations, including pre-checks and post-call hooks.\",\"dateModified\":\"2026-05-15T15:53:54.093Z\",\"isPartOf\":{\"@id\":\"https://docs.autheo.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.autheo.com/nodes/architecture/license-gating#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.autheo.com/nodes/architecture/license-gating#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Node operations\",\"item\":\"https://docs.autheo.com/nodes/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Nodes\",\"item\":\"https://docs.autheo.com/nodes/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Architecture\",\"item\":\"https://docs.autheo.com/nodes/architecture/overview\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"License gating\",\"item\":\"https://docs.autheo.com/nodes/architecture/license-gating\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.autheo.com/nodes/architecture/license-gating#article\",\"headline\":\"License gating\",\"name\":\"License gating\",\"description\":\"How x/licensedstaking enforces NFT license preconditions on all staking operations, including pre-checks and post-call hooks.\",\"url\":\"https://docs.autheo.com/nodes/architecture/license-gating\",\"mainEntityOfPage\":{\"@id\":\"https://docs.autheo.com/nodes/architecture/license-gating#webpage\"},\"dateModified\":\"2026-05-15T15:53:54.093Z\",\"keywords\":\"license gating, x/licensedstaking, sovereign, prime, core, staking, validation\",\"publisher\":{\"@id\":\"https://docs.autheo.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.autheo.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Autheo documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Autheo documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/nodes/architecture/license-gating.md","siteName":"Autheo documentation","nav":{"global":null,"groups":[{"group":"Start Here","icon":"play","pages":[{"title":"Autheo OS model","href":"/start-here/autheo-os-model"},{"title":"Choose your path","href":"/start-here/your-path"},{"title":"Architecture at a glance","href":"/start-here/architecture-at-a-glance"},{"title":"Components map","href":"/start-here/components-map"},{"title":"Terminology","href":"/start-here/terminology"},{"title":"Glossary","href":"/start-here/glossary"}]},{"group":"Getting Started","pages":[{"title":"Quickstart","href":"/getting-started/quickstart"},{"group":"Wallets","expanded":false,"pages":[{"title":"MetaMask browser wallet installation","href":"/getting-started/wallets/metamask-install"},{"title":"Connect To Testnet","href":"/getting-started/wallets/connect-to-testnet"},{"title":"Autheo account creation","href":"/getting-started/wallets/account-basics"}]},{"group":"Network","expanded":false,"pages":[{"title":"Network endpoints","href":"/getting-started/network/endpoints"},{"title":"Testnet faucet","href":"/getting-started/network/faucet"},{"title":"Network troubleshooting","href":"/getting-started/network/troubleshooting"}]},{"title":"FAQ","href":"/getting-started/faq"}]},{"group":"Web Apps","pages":[{"title":"Web apps","href":"/web-apps/overview"},{"group":"Node Sale","expanded":false,"pages":[{"title":"Node Sale Platform","href":"/web-apps/node-sale/overview"},{"title":"Purchasing a license","href":"/web-apps/node-sale/purchasing-a-license"},{"title":"Referral program","href":"/web-apps/node-sale/referral-program"},{"title":"Order history and NFT import","href":"/web-apps/node-sale/order-history"}]},{"group":"Bridge","expanded":false,"pages":[{"title":"Autheo Bridge","href":"/web-apps/bridge/overview"},{"title":"Connecting wallets","href":"/web-apps/bridge/connecting-wallets"},{"title":"Making a transfer","href":"/web-apps/bridge/making-a-transfer"},{"title":"Transfer history","href":"/web-apps/bridge/transfer-history"},{"title":"Bridging THEO from Autheo Mainnet to Base","href":"/web-apps/bridge/bridging-theo-to-base"},{"title":"Bridging THEO from Autheo Mainnet to Robinhood Chain","href":"/web-apps/bridge/bridging-theo-to-robinhood-chain"}]},{"group":"Validator Portal","expanded":false,"pages":[{"title":"Validator Portal","href":"/web-apps/validator-portal/overview"},{"title":"Validator dashboard","href":"/web-apps/validator-portal/dashboard"},{"title":"Deploying a node","href":"/web-apps/validator-portal/deploying-a-node"},{"title":"Delegation","href":"/web-apps/validator-portal/delegation"},{"title":"Rewards and unstaking","href":"/web-apps/validator-portal/rewards-and-unstaking"},{"title":"Activity history","href":"/web-apps/validator-portal/activity-history"},{"title":"Re-add Autheo Mainnet on Keplr","href":"/re-add-autheo-mainnet-on-keplr"}]}]},{"group":"Developers","pages":[{"title":"Developers","href":"/developers/overview"},{"group":"Setup","expanded":false,"pages":[{"title":"Development environment setup","href":"/developers/setup/dev-environment"},{"title":"Autheo CLI installation","href":"/developers/setup/cli-installation"},{"title":"Project scaffolding","href":"/developers/setup/project-scaffolding"}]},{"group":"Tutorials","expanded":false,"pages":[{"title":"Deploying a smart contract on the Autheo blockchain","href":"/developers/tutorials/deploy-smart-contract"},{"title":"Interact with deployed contracts","href":"/developers/tutorials/interact-with-contracts"},{"title":"Events and logs","href":"/developers/tutorials/events-and-logs"},{"title":"Token contracts","href":"/developers/tutorials/token-contracts"},{"title":"Indexing and analytics","href":"/developers/tutorials/indexing-and-analytics"}]},{"group":"Guides","expanded":false,"pages":[{"title":"Key management","href":"/developers/guides/key-management"},{"title":"Security best practices","href":"/developers/guides/security-best-practices"},{"title":"Gas fees and transaction lifecycle","href":"/developers/guides/gas-fees-and-tx-lifecycle"},{"title":"Deployment checklist","href":"/developers/guides/deployment-checklist"}]},{"group":"Troubleshooting","expanded":false,"pages":[{"title":"Common errors","href":"/developers/troubleshooting/common-errors"},{"title":"RPC issues","href":"/developers/troubleshooting/rpc-issues"}]}]},{"group":"APIs","pages":[{"title":"APIs overview","href":"/apis/overview"},{"group":"JSON-RPC","expanded":false,"pages":[{"title":"Overview","href":"/apis/json-rpc/overview"},{"title":"Authentication","href":"/apis/json-rpc/authentication"},{"title":"JSON-RPC error codes","href":"/apis/json-rpc/errors"},{"title":"Rate limits","href":"/apis/json-rpc/rate-limits"},{"group":"Methods","expanded":false,"pages":[{"group":"ETH","expanded":false,"pages":[{"title":"ETH","href":"/apis/json-rpc/methods/eth/eth"},{"title":"Block methods","href":"/apis/json-rpc/methods/eth/eth_block_methods"},{"title":"Gas methods","href":"/apis/json-rpc/methods/eth/eth_gas_methods"},{"title":"Transaction methods","href":"/apis/json-rpc/methods/eth/eth_transaction_methods"},{"title":"Uncle methods","href":"/apis/json-rpc/methods/eth/eth_uncle_methods"},{"title":"Filter methods","href":"/apis/json-rpc/methods/eth/eth_filter_methods"}]},{"group":"net","expanded":false,"pages":[{"title":"Net version","href":"/apis/json-rpc/methods/net/net_version"}]},{"group":"web3","expanded":false,"pages":[{"title":"Web3 client version","href":"/apis/json-rpc/methods/web3/web3_clientVersion"}]}]}]},{"group":"REST","expanded":false,"pages":[{"title":"Overview","href":"/apis/rest/overview"},{"title":"Pagination","href":"/apis/rest/pagination"},{"title":"REST API errors","href":"/apis/rest/errors"},{"group":"Resources","expanded":false,"pages":[{"title":"Main page methods","href":"/apis/rest/resources/main-page-stats"},{"title":"Address methods","href":"/apis/rest/resources/addresses"},{"title":"Block methods","href":"/apis/rest/resources/blocks"},{"title":"Transaction methods","href":"/apis/rest/resources/transactions"},{"title":"Token methods","href":"/apis/rest/resources/tokens"},{"title":"Smart contract methods","href":"/apis/rest/resources/smart-contracts"}]},{"group":"Examples","expanded":false,"pages":[{"title":"cURL examples","href":"/apis/rest/examples/curl"},{"title":"JavaScript examples","href":"/apis/rest/examples/javascript"}]}]}]},{"group":"Node operations","pages":[{"group":"Nodes","expanded":false,"pages":[{"title":"Overview","href":"/nodes/overview"},{"group":"Architecture","expanded":false,"pages":[{"title":"Architecture overview","href":"/nodes/architecture/overview"},{"title":"System architecture","href":"/nodes/architecture/system-architecture"},{"title":"Module overview","description":"The six custom Cosmos SDK modules that implement Autheo Chain's NFT license gating, dual-stream emissions, and EVM integration.","href":"/nodes/architecture/module-overview"},{"title":"License gating","href":"/nodes/architecture/license-gating"},{"title":"License lifecycle","description":"The four-state license system on Autheo Chain: ISSUED, BOUND, ACTIVE, and REVOKED — with all transition triggers and edge cases.","href":"/nodes/architecture/license-lifecycle"},{"title":"NFT rewards","href":"/nodes/architecture/nft-rewards"},{"title":"EVM integration","href":"/nodes/architecture/evm-integration"}]},{"group":"Node Setup","pages":[{"title":"Validator setup checklist","href":"/nodes/node-setup/validator-checklist"},{"title":"Prerequisites","href":"/nodes/node-setup/node-setup"},{"title":"Installation","href":"/nodes/node-setup/installation"},{"title":"License setup","href":"/nodes/node-setup/license-setup"},{"title":"Production deployment","href":"/nodes/node-setup/configuration"},{"title":"Node upgrades","href":"/nodes/node-setup/upgrades"},{"title":"Node troubleshooting","href":"/nodes/node-setup/troubleshooting"}]},{"group":"operations","expanded":false,"pages":[{"title":"Monitoring","href":"/nodes/operations/monitoring"},{"title":"Security hardening","href":"/nodes/operations/security-hardening"},{"title":"Backups and restore","href":"/nodes/operations/backups-and-restore"},{"title":"Incident response","href":"/nodes/operations/incident-response"}]},{"group":"Validator Lifecycle","expanded":false,"pages":[{"title":"Register validator","href":"/nodes/validator-lifecycle/register-validator"},{"title":"Consensus key rotation","href":"/nodes/validator-lifecycle/key-rotation"},{"title":"Pause and resume a validator","href":"/nodes/validator-lifecycle/pause-resume"},{"title":"Remove validator node","href":"/nodes/validator-lifecycle/remove-validator"}]}]},{"group":"Validator Program","expanded":false,"pages":[{"title":"Validator program overview","href":"/validator-program/overview"},{"title":"Autheo node sale brochure","href":"/validator-program/brochure"},{"title":"Hosting a validator node","href":"/validator-program/hosting-options"},{"title":"Self-hosting guide","href":"/validator-program/self-hosting-guide"},{"title":"Activation and timeline","href":"/validator-program/activation-and-timeline"},{"title":"Validator economics","href":"/validator-program/economics"},{"title":"Compliance","href":"/validator-program/compliance"}]},{"group":"Token","expanded":false,"pages":[{"title":"THEO token overview","href":"/token/overview"},{"title":"Utility and fees","href":"/token/utility-and-fees"},{"title":"Staking and rewards","href":"/token/staking-and-rewards"},{"title":"Allocations and emissions","href":"/token/allocations-and-emissions"},{"title":"Vesting schedules","href":"/token/vesting"},{"title":"Buying and trading THEO on Hydrex","href":"/token/buying-and-trading-theo"},{"title":"Risks and disclaimers","href":"/token/risks-and-disclaimers"},{"title":"Tokenomics paper v1.3","href":"/token/tokenomics-paper-v1-2"}]}]},{"group":"SDKs","pages":[{"title":"SDKs overview","hidden":true,"href":"/sdks/overview"},{"group":"Go","expanded":false,"pages":[{"title":"Go SDK - Overview","href":"/sdks/go/overview"},{"title":"Install","href":"/sdks/go/install"},{"title":"Quickstart","href":"/sdks/go/quickstart"},{"title":"Methods","href":"/sdks/go/methods"},{"title":"Reference","href":"/sdks/go/reference"},{"group":"Examples","expanded":false,"pages":[{"title":"Contract interaction","href":"/sdks/go/examples/contract-interaction"},{"title":"Query balance","href":"/sdks/go/examples/query-balance"},{"title":"Send transaction","href":"/sdks/go/examples/send-transaction"}]}]}]},{"group":"Papers","pages":[{"title":"Papers and research","href":"/papers/overview"},{"group":"Litepaper","expanded":false,"pages":[{"title":"Litepaper V1.5","href":"/papers/litepaper/v1-5"}]}]}]},"basePath":"","title":"License gating - Autheo documentation","buildId":"dpl_715YoAgvjTGBDdo8RtXmHKM22b5p","deploymentId":"dpl_715YoAgvjTGBDdo8RtXmHKM22b5p","dynamics":[],"chunks":[]}