smartaccount module replaces the default Cosmos SDK signature ante handler with an opt-in pluggable system. Each account can register one or more authenticators — signature verifiers, message filters, spend-limit contracts, or composite logic — that execute on every transaction the account opts in to. If no authenticators are selected, transactions fall back to the standard Cosmos SDK signature flow.
Before you start
You need:- An IXO account with
uixofor fees on the network you target — see Networks and endpoints. - An offline signer — see the SDK README.
- An authenticator type and config payload to register. The supported types are defined in the smartaccount types proto.
Add an authenticator
id to each authenticator on success. Read it from transaction events to reference the authenticator in subsequent transactions.
Remove an authenticator
Pause the module (governance)
MsgSetActiveState is the circuit breaker — only the module’s gov authority can broadcast it.
active is false, the smart-account ante handler is skipped and all transactions use the default Cosmos SDK signature path.
Use authenticators on a transaction
A transaction opts in to specific authenticators via theAuthenticatorTxExtension TX extension. The full pattern depends on your signing flow — see the smartaccount module README and the README for the IXO MultiClient SDK for current helpers. The extension carries the list of authenticator IDs to use for each signer.
Composite authenticators
Composite authenticators combine sub-authenticators using boolean logic.AllOf
AllOf
Approves only when every sub-authenticator approves:
auth(a) && auth(b) && ....AnyOf
AnyOf
Approves when at least one sub-authenticator approves:
auth(a) || auth(b) || ....PartitionedAllOf
PartitionedAllOf
Multi-signature where signatures are split across sub-authenticators (one signer per sub-authenticator).
Authentication phases
Each authenticator runs through a three-phase lifecycle on every transaction:- Authenticate — verify the transaction is authorized.
- Track — record any state changes the authenticator needs (committed regardless of transaction outcome).
- Confirm execution — validate the post-execution effects.
Verify the result
Query an account’s authenticators through theixo.smartaccount.v1beta1.Query/AccountAuthenticators endpoint on the gRPC gateway API. Module params (including is_smart_account_active) are read from Query/Params.
Troubleshooting
unknown authenticator type
unknown authenticator type
authenticatorType must match one of the registered types in the chain’s smartaccount module. Check Query/Params.maximum_unauthenticated_gas and the module’s registered types.authenticator id not found
authenticator id not found
MsgRemoveAuthenticator fails when id does not exist for sender. Query AccountAuthenticators to confirm the id.module inactive
module inactive
When
is_smart_account_active is false, MsgAddAuthenticator and MsgRemoveAuthenticator are rejected. The module is gated by gov via MsgSetActiveState.signature verification failed
signature verification failed
Ensure the TX extension lists the correct authenticator IDs in the order matching the signer set, and that the data payload registered with
MsgAddAuthenticator is the canonical encoding for that authenticator type.Next steps
IXO MultiClient SDK
Module-level features and types.
Smart account proto
Source of truth for smart-account messages.
Session keys
Issue scoped session keys backed by smart-account authenticators.
Manage authorization
Use Cosmos authz alongside smart-account authenticators.