Skip to content

Latest commit

 

History

History
110 lines (71 loc) · 3.29 KB

meta-accounts-design.md

File metadata and controls

110 lines (71 loc) · 3.29 KB

Meta Accounts Design

Overview

XION’s modular meta accounts introduce a highly adaptable and secure account creation & management framework.

Built at the protocol-level, meta accounts have a host of benefits over traditional crypto wallets and enable novel Web3 application use-cases. See generalized-chain-abstraction.md for more information around use cases and features.

Components

Identity Provider

In the case of social login an identity provider is used to handle the confirmation of identity.

Account API

A set of services used to assist and sponsor new meta account creation.

Abstraxion Library

This frontend library aids in integration with your react front end.

See the repo

Meta Account

This contract along with a custom XION module represent the core of the meta account functionality.

See the repo

UserSessionKey

The temporary key generated on the DAPP side which is granted ContractExecutionAuthorization by the user's Meta Account on a temporary basis.

FeeGrantTreasury

A account a dapp may user to sponsor transactions submitted by the UserSessionKey.

Supported Authentication Methods

  • Email login
  • (MetaMask, biometrics, and many more coming soon)

Workflows

sequenceDiagram
    Actor User
    participant DAPP
    participant AbstraxionLibrary as Abstraxion Library
    participant AccountManagementDashboard as Account Management Dashboard
    participant XionChain as Xion Chain
    User->>DAPP: Load Dapp
    User->>DAPP: Clicks 'Mint NFT'
    DAPP->>AbstraxionLibrary: connect()
    AbstraxionLibrary->>AbstraxionLibrary: Check for Dapp UserSessionKey 
    AbstraxionLibrary->>AbstraxionLibrary: Check Dapp UserSessionKey Authz Expiry
    Note right of AbstraxionLibrary: Note: Authz grants are a "session"
    alt no active Dapp UserSessionKey
        AbstraxionLibrary->>AbstraxionLibrary: Generate one time private UserSessionKey
        AbstraxionLibrary->>AccountManagementDashboard: Redirect user along with permission scope 
        AccountManagementDashboard->>AccountManagementDashboard: Check for an active connection
        alt no active connection
            AccountManagementDashboard->>User: Initiate and complete connect flow
        end
        AccountManagementDashboard->>User: Show authz permission dialog
    end
    User->>AccountManagementDashboard: Accept permissions
    AccountManagementDashboard->>XionChain: Submit transaction with authz grants
    alt transaction successful
        XionChain->>DAPP: Notify transaction success
        DAPP->>User: Return user to dapp
    else transaction failed
        XionChain->>AccountManagementDashboard: Notify transaction failure
        AccountManagementDashboard->>User: Show error modal
    end
    User->>DAPP: Clicks 'Mint NFT'
    DAPP->>AbstraxionLibrary: Locally sourced transaction
    AbstraxionLibrary->>AbstraxionLibrary: Autosigned using Dapp UserSessionKey  
    AbstraxionLibrary->>XionChain: Submitted 
Loading