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 config
screen (wallet+node or wallet only). - User selects to set up a wallet+node (and not just wallet).
- App displays the
wallet setup
screen (standard or Ledger). - User selects to set up a standard wallet.
- App displays the
set wallet password
screen. - 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 config
screen (wallet+node or wallet only). - User selects to setup a wallet+node (and not just wallet).
- App displays the
wallet setup
screen (standard or Ledger). - User selects to setup a Ledger wallet.
- App displays the
connect Ledger screen
until theSpacemesh Ledger App
is open on a usb-connected Ledger device to the user's computer. - App displays the
set wallet password
screen. - 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 setup
screen. (wallet+node or wallet). - User selects to set up the wallet only.
- App displays the
network selection
screen. - User selects a public Spacemesh API web service to use with the wallet.
- App displays the
wallet setup
screen. (standard or Ledger). - User selects to set up a standard wallet.
- App displays the
set wallet password
screen. - 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 screen
and in thenetwork
screen. - User checks his balance, incoming transactions and executes transactions.
User goal: setup a standard wallet without running a local node.
- App displays the
wallet setup
screen. (wallet+node or wallet). - User selects to set up wallet only.
- App displays the
network selection
screen. - User selects a public Spacemesh API web service to use with the wallet.
- App displays the
wallet setup
screen. (standard or Ledger). - User selects to set up a Ledger wallet.
- App displays the
connect Ledger screen
until theSpacemesh Ledger App
is open on a usb-connected Ledger device to the user's computer. - App displays the
set wallet password
screen. - 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 wallet
screen. - User enters the wallet’s password to access it.
- App displays the
main wallet
screen and syncs the mesh in the background. - User uses the wallet screen features.
- User switches to
smeshing screen
to 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 wallet
screen. - User enters the wallet’s password to access it.
- App displays the
wallet
screen and updates wallet data via the API, - User uses the
wallet
screen features - User switches to the
network
screen 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 wallet
command in theunlock wallet
screen. - User clicks on the
add new wallet
command. - App displays the
network selection
screen (local node or public api). - User chooses one of the options for the wallet (local or public).
- App displays the
wallet setup
screen. - 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 device
screen 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
wallet
screen.
User goal: Setup a new standard (hot) wallet to manage funds and vaults seperately than an existing wallet.
- App displays an
add new wallet
command in theuncock wallet
screen. - User clicks on the
add new wallet
command. - App displays the
wallet setup
screen (wallet+node or public api). - User chooses one of the options for the wallet (local or public).
- App displays the
wallet setup
screen (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
wallet
screen.
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 wallet
screen. 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 Session
flow 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
wallet
screen with wallet commands. - User selects the
Add new Vault
command from the drop-down. - App starts the
new vault
flow (see Figma).
New vault is added as an account to the wallet that the user is using in the
wallet
screen. 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 vault
flow (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
wallet
screen. - 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
Send
button in the wallet screen. - App displays the
Send SMH
screen with thefrom field
set 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
Send
button in the wallet screen. - App displays the select account screen. (See vault interactions figma page, screen #4).
- User clicks on the
master account
button. - Flow continues from Flow 14, step 2.
User goal: send coins from a vault to another account.
- User clicks on the
Send
button in the wallet screen. - App displays the
Send SMH
screen with thefrom field
set 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
Send
button in the wallet screen. - App displays the select account screen. (See vault interactions figma page, screen #4).
- User clicks on the
master account
button. - 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
Send
button in the wallet screen. - App displays the select account screen. (See vault interactions figma page, screen #4).
- User clicks on the
Use daily spending
button. - 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
edit
button in theDaily spending limit
section if the wallet includes the vault's master key. - User clicks on
edit
in theDaily spending limit
row. - App displays the
Daily Spending Limit
screen (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
edit
button in theDaily spending limit
section if the wallet includes the vault's master key. - User clicks on
edit
in theDaily spending limit
row. - App displays the
Daily Spending Limit
screen (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 request
button on the wallet's screen. - User clicks on
review
to 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
edit
button in theDaily spending account
section if the wallet includes the vault's master key. - User clicks on
edit
in theDaily spending account
row. - App displays the
Daily Spending Account
screen (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
edit
button in theDaily spending account
section if the wallet includes the vault's master key. - User clicks on
edit
in theDaily spending account
row. - App displays the
Daily Spending Account
screen (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 request
button on the wallet's screen. - User clicks on
review
to 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.