Account Creation

As was covered in the section on Account Architecture an Account is just a single smart-contract that can act as a wallet. This means that creating an Account is as simple as instantiating a smart-contract.

Account Parameters

Accounts are created by instantiating an Account contract that has been registered with the registry contract. The registry contract is a contract that keeps track of all the modules and account code-ids and addresses on the Abstract platform.

The Account contract takes the following parameters:

pub struct InstantiateMsg<Authenticator = Empty> {
    /// Code id of the account
    pub code_id: u64,
    /// The ownership structure of the Account.
    pub owner: GovernanceDetails<String>,
    /// Optionally specify an account-id for this account.
    /// If provided must be between (u32::MAX/2)..u32::MAX range.
    pub account_id: Option<AccountId>,
    /// Optional authenticator for use with the `abstractaccount` cosmos-sdk module.
    pub authenticator: Option<Authenticator>,
    /// Optionally claim a namespace on instantiation.
    /// Any fees will be deducted from the account and should be provided on instantiation.
    pub namespace: Option<String>,
    /// Optionally install modules on instantiation.
    /// Any fees will be deducted from the account and should be provided on instantiation.
    #[serde(default)]
    pub install_modules: Vec<ModuleInstallConfig>,
    /// Optional account name.
    pub name: Option<String>,
    /// Optional account description.
    pub description: Option<String>,
    /// Optional account link.
    pub link: Option<String>,
}

The account can be instantiated using the normal instantiate function or instantiate2, which allows you to claim deterministic addresses.

During the instantiation process the account will self-register on the registry contract, making it queryable by its account-id.