License gating is enforced by theDocumentation Index
Fetch the complete documentation index at: https://docs.autheo.com/llms.txt
Use this file to discover all available pages before exploring further.
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 inBOUND status on the validator address being created.
MsgEditValidator
Only the validator operator can edit. Requires a non-revoked Sovereign license on the operator address.MsgDelegate (self-delegation)
Requires anACTIVE or BOUND Sovereign license on the delegator’s own validator address.
MsgDelegate (external delegation)
Requires aBOUND 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
MsgCancelUnbondingDelegation
RestoresBOUND 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
License transfers
Transfers are permitted only forISSUED 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
REVOKEDlicense toISSUED. 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 |