All flows described here are happy flows and error cases are not considered for sake of simplicity.
In the flows below, the user doesn't have a wallet in the first session and only one wallet on the second app session.
User goal: setup new standard wallet, run a local p2p node and sync it with the network, and setup smeshing.
- App displays the
wallet configscreen (wallet+node or wallet only). - User selects to set up a wallet+node (and not just wallet).
- App displays the
wallet setupscreen (standard or Ledger). - User selects to set up a standard wallet.
- App displays the
set wallet passwordscreen. - User sets a password for the new wallet.
- App starts the smeshing setup flow.
- User sets up smeshing.
User goal: setup new wallet that is using his Ledger wallet, run a local p2p node and sync it with the network, and setup smeshing.
- App displays the
wallet configscreen (wallet+node or wallet only). - User selects to setup a wallet+node (and not just wallet).
- App displays the
wallet setupscreen (standard or Ledger). - User selects to setup a Ledger wallet.
- App displays the
connect Ledger screenuntil theSpacemesh Ledger Appis open on a usb-connected Ledger device to the user's computer. - App displays the
set wallet passwordscreen. - User sets a password for the new wallet.
- App starts the smeshing setup flow.
- User sets up smeshing.
User goal: setup a standard wallet without running a local node.
- App displays the
wallet setupscreen. (wallet+node or wallet). - User selects to set up the wallet only.
- App displays the
network selectionscreen. - User selects a public Spacemesh API web service to use with the wallet.
- App displays the
wallet setupscreen. (standard or Ledger). - User selects to set up a standard wallet.
- App displays the
set wallet passwordscreen. - User sets a password for the new wallet.
- App gets wallet balance, transaction history, and network status via the API and presents it to the user in the
wallet screenand in thenetworkscreen. - User checks his balance, incoming transactions and executes transactions.
User goal: setup a standard wallet without running a local node.
- App displays the
wallet setupscreen. (wallet+node or wallet). - User selects to set up wallet only.
- App displays the
network selectionscreen. - User selects a public Spacemesh API web service to use with the wallet.
- App displays the
wallet setupscreen. (standard or Ledger). - User selects to set up a Ledger wallet.
- App displays the
connect Ledger screenuntil theSpacemesh Ledger Appis open on a usb-connected Ledger device to the user's computer. - App displays the
set wallet passwordscreen. - User sets a password for the new wallet.
- App displays the main wallet screen.
User goal: check smeshing rewards, use wallet.
- App starts local node and if smeshing is set up, configures it to smesh.
- App displays the
unlock walletscreen. - User enters the wallet’s password to access it.
- App displays the
main walletscreen and syncs the mesh in the background. - User uses the wallet screen features.
- User switches to
smeshing screento view smeshing status.
User is only prompted to connect the Ledger device to his computer and open the Spacemesh Ledger App on it, when the user needs to sign a new transaction or when user selects to add a new account, and the wallet is a ledger wallet and not a standard one.
User goal: Work with a wallet without running a full node.
- App displays the
unlock walletscreen. - User enters the wallet’s password to access it.
- App displays the
walletscreen and updates wallet data via the API, - User uses the
walletscreen features - User switches to the
networkscreen to view network status.
User is only prompted to connect the ledger device and open the Spacemesh Ledger App on it, when the user needs to sign a new transaction or when the user selects to add a new account, and the wallet is a ledger wallet and not a standard one.
User goal: User has a standard wallet. He likes to use a Ledger device so sign spacemesh transactions. To achieve this he needs to create a new Ledger wallet.
- App displays an
add new walletcommand in theunlock walletscreen. - User clicks on the
add new walletcommand. - App displays the
network selectionscreen (local node or public api). - User chooses one of the options for the wallet (local or public).
- App displays the
wallet setupscreen. - User selects to set up a ledger wallet.
- App attempts to connect to ledger device using the sm ledger sdk.
- If the App can't connect to Spacemesh App on a usb-connected ledger device, then it displays the
connect ledger devicescreen and provides instructions on how to use ledger with spacemesh. - User opens the Spacemesh app on his ledger device and usb connects it to his computer.
- App connects to the Spacemesh app on ledger via the sm ledger sdk.
- App connects to a Spacemesh network via public api or starts a local node based on user selection above.
- App displays the
walletscreen.
User goal: Setup a new standard (hot) wallet to manage funds and vaults seperately than an existing wallet.
- App displays an
add new walletcommand in theuncock walletscreen. - User clicks on the
add new walletcommand. - App displays the
wallet setupscreen (wallet+node or public api). - User chooses one of the options for the wallet (local or public).
- App displays the
wallet setupscreen (standard or ledger). - User selects to set up a standard wallet.
- App connects to a Spacemesh network via public api or starts a local node based on user selection above.
- App displays the
walletscreen.
In the flows below, the user has set up more than one wallet in previous app sessions.
User goal: Access one of his previously created wallets and optionally start local node and smeshing.
This flow happens when more than one wallet was used in the App in a previous session.
- App displays the
open walletscreen. It lists all available wallets. - User selects a wallet from the screen.
- If the wallet was configured to use a public API then the app configures itself to use this api.
- If the wallet was configured to use a local node then the app configures itself to use a local node and starts it. If the user has setup smeshing then the app starts smeshing.
- App opens the wallet and displays it on the
wallet screen.
User goal: quickly access one of the wallets he'd previously created.
- User clicks on log-out in the main screen.
New App Sessionflow runs (above) from step 1.
User goal: Create a new vault to safely store funds via multisig and ledger wallet support, and optionally set daily spending.
- App displays drop-down next to wallet name in
walletscreen with wallet commands. - User selects the
Add new Vaultcommand from the drop-down. - App starts the
new vaultflow (see Figma).
New vault is added as an account to the wallet that the user is using in the
walletscreen. It can be added to a standard or a Ledger wallets.
User goal: Use an existing vault that may have been created by another wallet, by another user or by a Spacemesh network genesis flow.
- User selects the 'Add existing Vault' command from the wallet's settings commands.
- App starts the
add existing vaultflow (see figma).
User goal: view vault's state (balance, pending transactions, etc...) and execute vault transactions.
- App displays an entry for each wallet's vault in the accounts drop down on the
walletscreen. - User selects a vault from the drop-down.
- App displays the vault's main screen and state.
- User executes vault commands from the vault's screen.
For this and the following interactions, we assume the user has accessed a vault (see Flow 13 above) and it is displayed in the wallet screen.
User goal: send coins from a vault to another account.
- User clicks on the
Sendbutton in the wallet screen. - App displays the
Send SMHscreen with thefrom fieldset to the vault's single master account. App displays the amount available for Withdrawing - it is the vault's balance. - User specifies the destination account address, the coin amount, the transaction fee (gas units and gas unit price).
- App validates that the amount to send + the transaction fees are equal or smaller than the vault's balance.
- User clicks 'Send'
- App displays the transaction summary screen.
- User clicks 'Send'
- App sends the transaction and displays the transaction sent screen.
User goal: send coins from a vault to another account.
- User clicks on the
Sendbutton in the wallet screen. - App displays the select account screen. (See vault interactions figma page, screen #4).
- User clicks on the
master accountbutton. - Flow continues from Flow 14, step 2.
User goal: send coins from a vault to another account.
- User clicks on the
Sendbutton in the wallet screen. - App displays the
Send SMHscreen with thefrom fieldset to the vault's single master account. App displays the amount available for Withdrawing - it is the vault's balance. - App displays a note regarding the required approval of one of the other master accounts owners (See vault interactions figma page, screen #5). User is encouraged to notify one of the other master accounts owner about the transaction.
- User specifies the destination account address, the coin amount, the transaction fee (gas units and gas unit price).
- App validates that the amount to send + the transaction fee are equal or smaller than the vault's balance.
- User clicks 'Send'
- App displays the transaction summary screen.
- User clicks 'Send'
- App submits the transaction to the transactions pool for processing, and displays the transaction sent screen.
The flow continues on instances of Smapp in which the same vault has been added to a wallet. For multisig vaults, this will happen in Smapp of the 2 other master account owners.
- User accesses the vault's account in the wallet screen.
- App displays a
pending approval request(see left side of screen #6 in Vault Interactions figma page). - User clicks on the 'review' button.
- App displays the Send SMH review screen (Screen #6 in Vault Interactions figma page).)
- User reviews the transaction and clicks 'Approve'.
- App displays an approval transaction screen where the user can modify transaction fee (gas units and gas unit price).
- User clicks 'Approve'
- App submits the user-signed approval transactions to the transactions pool for processing and displays the transaction sent screen.
User goal: send coins from a vault to another account.
- User clicks on the
Sendbutton in the wallet screen. - App displays the select account screen. (See vault interactions figma page, screen #4).
- User clicks on the
master accountbutton. - Flow continues from Flow 16, step 2.
This flow assumes the user has set up daily spending on a simple or a MultiSig vault.
User goal: Send coins from daily spending account to any other account.
- User clicks on the
Sendbutton in the wallet screen. - App displays the select account screen. (See vault interactions figma page, screen #4).
- User clicks on the
Use daily spendingbutton. - App verifies that the wallet has the user's daily spending account (he needs to sign with that account in order to spend).
- Flow continues from Flow 14, step 2 with the from account set to the daily spending account, and in the transaction screen the app validates that the amount that the user inputs is available for withdrawal in the current day. (User can only spend up to the daily spend amount every 24 hours).
Note that if the user's daily spending account is specified in another wallet, then to daily spend, the user needs to add the vault to that wallet. In this flow we assumed that the current wallet has that account.
User goal: Change the daily spending amount.
- User views a vault on the wallet's screen.
- App is displaying the
editbutton in theDaily spending limitsection if the wallet includes the vault's master key. - User clicks on
editin theDaily spending limitrow. - App displays the
Daily Spending Limitscreen (screen 8 in figma).
Note that the authorization info is not displayed as no authorization is required in a single vault.
- User sets a new spending amount, provides gas units, gas unit price and clicks
next. - App displays a confirmation screen with the transaction details (missing mock in figma - needs to be added).
- User clicks
Approve. - The app signs the change daily spending amount vault transactions and submits it to the network for processing.
User goal: Change the daily spend amount.
- User views a vault on the wallet's screen.
- App is displaying the
editbutton in theDaily spending limitsection if the wallet includes the vault's master key. - User clicks on
editin theDaily spending limitrow. - App displays the
Daily Spending Limitscreen (screen 8 in figma). - User sets a new spending amount, provides gas units, gas unit price and clicks
next. - App displays a confirmation screen with the transaction details (missing mock in figma - needs to be added).
- User clicks
approve. - The app signs the change daily spending amount vault transactions and submits it to the network for processing.
The flow now continues on one of the other 2 master account holders' wallets in smapp.
- User accesses a wallet with the vault's account in smapp.
- App displays a
Pending approval requestbutton on the wallet's screen. - User clicks on
reviewto display the request. - App displays the request (Screen #11 in figma).
- User reviews the requests and clicks
approve. - App signs the approval transaction, submits it to the network for processing and displays a transaction submitted notification in the status.
User goal: Change the daily spend account.
- User views a vault on the wallet's screen.
- App is displaying the
editbutton in theDaily spending accountsection if the wallet includes the vault's master key. - User clicks on
editin theDaily spending accountrow. - App displays the
Daily Spending Accountscreen (screen #10 in figma).
Note that the authorization info is not displayed as no authorization is required in a single vault.
- User sets up a new spending account, provides gas units, gas unit price and clicks
next. - App displays a confirmation screen with the transaction details (missing mock in figma - needs to be added).
- User clicks
Approve. - The app signs the change daily spending amount vault transactions and submits it to the network for processing.
User goal: Change the daily spend account.
- User views a vault on the wallet's screen.
- App is displaying the
editbutton in theDaily spending accountsection if the wallet includes the vault's master key. - User clicks on
editin theDaily spending accountrow. - App displays the
Daily Spending Accountscreen (screen #10 in figma). - User sets up a new spending amount, provides gas units, gas unit price and clicks
next. - App displays a confirmation screen with the transaction details (missing mock in figma - needs to be added).
- User clicks
approve. - The app signs the change daily spending amount vault transactions and submits it to the network for processing.
The flow now continues on one of the other 2 master account holders' wallets in smapp.
- User accesses a wallet with the vault's account in smapp.
- App displays a
Pending approval requestbutton on the wallet's screen. - User clicks on
reviewto display the request. - App displays the request (Screen #11 in figma).
- User reviews the requests and clicks
approve. - App signs the approval transaction, submits it to the network for processing and displays a transaction submitted notification in the status.
A full node config file describing a Spacemesh Testnet. Required to connect to a testnet. Currently 1 config file embedded in Smapp. We'd like to enable users to use Smapp to connect to different Testnets without having to use a new version of Smapp. The config file specifies a network unique id. To connect to a Testnet, a user needs to obtain its config file and save it in a designated location for Smapp to be able to identify it on startup.
A minimal config file which includes mainnet network id. It is used to create wallets for use on mainnet pre-genesis. Before genesis, a mainnet full config file will be provided and users need to download it and use it to connect to the Mainnet. The full config file will replace the minimal one.
A wallet data file. Includes wallet and contacts information. Used by both hot wallets and ledger wallets. Private data in this file is always encrypted with the user's provided password. Each wallet must have a data file that specifies it. So users will have a wallet file for each wallet they create in smapp.
A simple data file which contains a list of user's wallet data files and the location of the data file for each such wallet. This enables users to access any wallet in Smapp. Smapp can only work with one wallet at a time. If this file is getting corrupted or deleted then the user will just need to restore wallets (from paper backup or backup file) to be able to work with them. Path to a restored wallet's data file is added to the Wallets file.
A web service providing the Spacemesh API over the Internet. The service is using its own managed nodes to connect to the Spacemesh network. A wallet can use this API instead of using an API provided by a local running node.
