Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.autheo.com/llms.txt

Use this file to discover all available pages before exploring further.

Every license on Autheo Chain moves through a four-state machine managed by the x/license keeper.

The four states

StatusDescription
ISSUEDLicense minted and owned. Not yet attached to any validator. Can be bound or transferred (if policy allows). Does not earn rewards.
BOUNDLicense attached to a validator. No active delegation yet. Cannot be transferred. Does not earn NFT emission rewards.
ACTIVELicense attached to a validator with a live delegation that has positive token value. Earns per-block NFT emission rewards.
REVOKEDGovernance-suspended. No staking operations permitted. Only MsgReinstateLicense (governance only) can restore it.

State transitions

ISSUED → BOUND

Triggered by MsgBindLicense. Requirements:
  • License status must be ISSUED
  • Category policy must permit the binding
  • Any cooldown from a prior unbind must have elapsed
  • For Sovereign: binding target must be the owner’s own validator address
  • For Prime/Core: target validator must exist, be bonded, and not be jailed

BOUND → ACTIVE

Triggered automatically when delegation is created or increased on the bound validator:
TriggerDescription
MsgDelegateOwner delegates tokens to the bound validator
MsgCreateValidatorSDK self-delegates on validator creation
MsgCancelUnbondingDelegationOwner cancels unbonding and restores delegation
MsgUnjail (post-call)Validator unjailed with owner’s live delegation

ACTIVE → BOUND

A license moves back to BOUND when:
  • Owner fully undelegates from the bound validator
  • Validator is jailed (JailInterceptor fires)
  • Governance revokes the license
Partial undelegation does not change license status. The license remains ACTIVE as long as any delegation with positive token value exists.

BOUND → ISSUED (unbinding)

Triggered by MsgUnbindLicense. Requirements:
  • No active delegation to the bound validator
  • Cooldown period from any prior unbind must have elapsed
After unbinding, a cooldown timer starts. The license cannot be re-bound until the CooldownPeriod in the category policy has elapsed.
autheod query license category-policy 1   # SOVEREIGN
autheod query license category-policy 2   # PRIME
autheod query license category-policy 3   # CORE

Any → REVOKED

Triggered only by MsgRevokeLicense via governance proposal. For Sovereign revocations, the validator is immediately jailed. For Prime/Core revocations, only same-owner sibling licenses are affected.

REVOKED → ISSUED

Triggered only by MsgReinstateLicense via governance. The owner must complete the full recovery sequence manually:
1

Governance reinstates

MsgReinstateLicense → license status: ISSUED
2

Owner binds

MsgBindLicense → license status: BOUND
3

Operator unjails

MsgUnjail — JailInterceptor allows because Sovereign license is no longer REVOKED
4

Owner delegates

MsgDelegate → license status: ACTIVE

Transfer restrictions

Only ISSUED licenses can be transferred. The category policy must have Transferable = true. Transferring a license does not clear the unbind cooldown timer — the new owner inherits it.

Edge cases

ScenarioBehavior
Double-sign / tombstoneLicense can get stuck in BOUND if validator is tombstoned (cannot be unjailed)
Dust sharesZero-token shares from repeated slashing are excluded from reward accrual and treated as fully removed during undelegation
IBC delegationsIBC-sourced delegate/undelegate messages do not trigger license transitions
RedelegationPermanently disabled; cannot trigger license transitions