Implementation
Last updated
Last updated
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 .
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. An Executable
hot potato ensuring proper execution is returned.
Actions are executed sequentially by passing the Executable
hot potato to execute_intentname()
.
The Executable
hot potato must be destroyed via account::confirm_execution()
.
Optionally, if there is no "execution_times" left, the intent can be removed with account::destroy_empty_intent()
that returns an Expired
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.