Implementation
In the following sections, we detail how to implement your own smart account type as well as your own intents and actions using our macros.
Smart accounts can power virtually any kind of application. We have implemented Multisig and DAO versions, but the possibilities are endless! Consider AI agents, shops, gaming accounts—account.tech provides predefined building primitives that you can leverage in your own Move packages.
In addition to making our new Account
standard modular (use the Config you want), we have also made it easily extensible (add any functionality). We demonstrate how this is accomplished in the following sections.
If you want to use or fork one of the existing implementations, you can find them in our move-registry.

Intent Flow
User must authenticate by getting an
Auth
instance in the account config module.Then an empty
Outcome
can be initialized for the intent.A new
Params
struct must be instantiated with the common intent arguments.An intent can then be created via
request_intentname()
functions within intent modules.The intent must be resolved by validating the
Outcome
as defined in the account config module. (e.g. approving the intent to reach a threshold for a multisig)Once the conditions are met, the intent is executed by calling the
execute_intent()
function defined in the config module. AnExecutable
hot potato ensuring proper execution is returned.Actions are executed sequentially by passing the
Executable
hot potato toexecute_intentname()
.The
Executable
hot potato must be destroyed viaaccount::confirm_execution()
.Optionally, if there is no "execution_times" left, the intent can be removed with
account::destroy_empty_intent()
that returns anExpired
hot potato.This hot potato must be passed to all the delete functions of the matching actions in order to empty the action bag.
Finally,
intents::destroy_empty_expired()
can be called.
Last updated