novasamatech / nova-spektr Goto Github PK
View Code? Open in Web Editor NEWNova Spektr — All-in-one Polkadot desktop wallet supporting multisigs, staking, light clients, and more
Home Page: https://novaspektr.io
License: Apache License 2.0
Nova Spektr — All-in-one Polkadot desktop wallet supporting multisigs, staking, light clients, and more
Home Page: https://novaspektr.io
License: Apache License 2.0
As a developer I'm getting too much notification from the metadata portal
I'd like to get only critical notifications or call to actions.
Job
Where event may happen
Error code
What does it mean
ASIS notification
TOBE notification
update&sign
Any fault
0
Some unexpected error
❌️ Error updating metadata! ❌
❌️ Error updating metadata! ❌
update&sign/update
Update QRs from RPC nodes
12
Some of networks were not checked for updates
Some networks were not available! Please, check the log!
Some networks were not available! Please, check the log!
update&sign/update
Run collector
12
Some of network RPC node were not added to the data.json
file. This file is required for the deployment only.
Some networks were not available! Redeployment required!
May be removed
update&sign/check-deployment
Check existing deployment
12
Some of networks metadata is outdated
Redeployment required!
May be removed
update&sign/check-deployment
Run collector
12
Some of network RPC node were not added to the data.json
file. This file is required for the deployment only.
Some networks were not available! Redeployment required!
May be removed
deploy
Run verifier
0
Bad meetadata signature
❌️ Error deploying metadata! ❌
❌️ Error deploying metadata! ❌
deploy
Run collector
12
Some of network RPC node were not added to the data.json
file. This file is required for the deployment only.
Warning metadata deployed but should be updated one more time!
Warning metadata deployed but should be updated one more time!
deploy
Any fault
0
Some unexpected error
❌️ Error deploying metadata! ❌
❌️ Error deploying metadata! ❌
According to the table below notifications will be sent only if:
Some of networks were not available during the update and Metadata PR preparation
Metadata signature verification error
If network is not available during the deployment and it's out of data.json , as a result it won't be added to the UI
Unexpected errors
If you paste an address without entering a wallet name - continue button will show wrong error "Type or paste an address..."
Case:
Go to onboarding via Watch Only flow
Paste an address
Actual result:
Final button show wrong message (also looks like it is wrong state, as address icon shows like address isn't correct)
Expected result:
Final button shows hint:
"Type a name to finish..."
As a user I'd like to be able to find the asset/network on the balances page
Pre-requisites:
Omni application is running
The user is on the balances page
Valid scenario:
User types something in the search field
The Omni application show search results based on Search rules on the balances page
Alternative scenarios:
n/a
Error scenarios:
n/a
Search algorithm:
Search should compare token name or ticker or network name with the search string
Given that:
== is equals ignore case
a contains b mean that string a contains substring b ignoring the case
if search string == ticker then added the token to the search result go to 1.a
For all other tickers check if search string == ticker then added the token to the search result end.
if token name contains search string then add token to the search result go to 3
if network name contains search string then add whole network with all tokens to the search result end.
Search by token name or ticker or network
If network match search criteria then show the network and all it's tokens
If ticker match search criteria then show the network and token(s) that matches the ticker
If token name match search criteria then show the network and token(s) that match the token name
The search not case sensitive
The search should work by substring ( like in SQL). if user sta then Astar should be found.
The search shows tokens with zero balance even if Hide zero balances is on
The example for search by Astar word.
DOD:
Search implementation
Unit tests
Network connection type selector component that will allow to:
Switch between radio buttons items
Navigate to edit or remove some items
Add new items
The Disable network button
Open pop up with warnings where user will be able to proceed or not
Open pop up with add/edit dialogue
As a metadata portal developer I'd like to get notification about CI and CD updates in the telegram
Pre-requisites:
Metadata portal CI or CD is running
Valid scenario:
Metadata portal QR codes updated
Send message to the Telegram
Alternative scenarios:
n/a
Error scenarios:
Error updating QR codes 2.a ➝ Send message to the telegram
Pre-requisites:
Metadata portal CI or CD is running
Valid scenario:
Metadata portal was deployed
Send message to the Telegram
Alternative scenarios:
n/a
Error scenarios:
Error on deployment 2.a ➝ Send message to the telegram
DOD:
Add env variable for turn on/off Telegram notifications
Add Telegram bot credentials
Configure notifications for deploy and update&sign actions
Turn off matrix notification
The account address is too long sometime. It should be shortened for some screens (like Onboarding with derived accounts).
As a User I'd like to be able to show zero balances on the Balances page
Pre-requisites:
The Omni application is running
The User has opened the Balances page
Valid scenario:
The user toggles the "Hide zero balances" to off
The Omni application show the list of all supported networks and tokens even if the token balance is 0
Alternative scenarios:
n/a
Error scenarios:
n/a
As a User I'd like to be able to hide zero balances on the Balances page
Pre-requisites:
The Omni application is running
The User has opened the Balances page
The "Hide zero balances" toggled to off
Valid scenario:
By default (after the application installed) the zero balances are hided (toggle is in on state)
The user toggles the "Hide zero balances" to on
The Omni application hides the list of tokens where user's balance is 0
If the balance of all tokens from the same chain is 0 then the network should be hided too
Alternative scenarios:
n/a
Error scenarios:
n/a
Wallet service implementation.
Wallet services should:
Save wallet into the DB
Read wallets from the DB
Read wallet from the DB
Save the list of the selected wallet
Save the wallet type (WATCH_ONLY, PARITY_SIGNER)
As a user I'd like to get the latest metadata even if some network metadata wasn't updated
Pre-requisites:
The Metadata portal metadata was updated and merged
Some of the networks has performed the runtime upgrade
The Metadata portal upgrade was started
Valid scenario:
The Metadata portal checks if the Metadata is up to date
The Metadata portal runs the deployment
Alternative scenarios:
2.a the Metadata is not up to date ➝ Send the notification to the Matrix chat and proceed the deployment
Error scenarios:
n/a
DOD:
Update the check deployment process in order not to fail if the metadata is not updated
Send the notification to the Matrix if Metadata is not updated
Some times there is a problem with getting Kusama transferable balance part through LIGHT_CLIENT which lead to infinity loading state.
Wallet address field, crash when type "0x20" after address.
https://t24368000.p.clickup-attachments.com/t24368000/a38cd0bc-0ac6-4977-8dc9-d3de17bc0758_large.png
Case:
Start adding wallet via watch-only flow
Paste address in field, for example - r4SoBpxKYpUpXGTGtNpTzcP2L8faPD8xQExZG6vj55Q94SZ
Add space after that address
Actual result:
App will crash
Expected result:
Special symbols process right, without some errors.
Also, it would be nice to trim symbols like:
space - " "
tab - " "
line break - "
"
Example:
https://github.com/nova-wallet/metadata-portal/runs/7970793348?check_suite_focus=true
There are no error on update stage, but have on the check-deployment and notification was not sent.
As a user I'd like to see the onboarding screen with onboarding options
Pre-requisites:
The Omni application is installed
db.wallets is empty (the user hasn't added a wallet yet)
Valid scenario:
The User runs the Omni application
The Omni application shows the welcome screen
There are 3 options for the onboarding:
Watch only (enabled)
Parity signer (enabled)
Ledger (disabled)
Alternative scenarios:
n/a
Error scenarios:
n/a
Cannot read properties of undefined (reading 'free')
Case:
Start app
When balances page will available immediately toggle "Hide zero balances"
Actual result:
It will lead to crash
Scroll bar overlapping the Hide zero balances toggle:
Change link to the Nova github https://github.com/nova-wallet/metadata-portal
Change link to the Terms and Conditions https://novawallet.io/terms
Language switcher UI component.
There should be 2 options: small (with language code) and big (with language name).
There should be:
Non-active state
Active state (with list of supported languages shown)
Selector opening should be customisable (from top to bottom or from bottom to top)
RU and EN are supported.
Create drop down component
Hover/focus effects
Open component up and down
If you will open Receive window on network without explorers it will lead to error:
Case:
Try to open Receive button on Rococo Testnet
Actual result:
Error here:
https://github.com/nova-wallet/omni-enterprise/blob/88c30fc147bdcff559c9f00b33754fb9cfb17660/src/renderer/screens/Balances/ReceiveModal/ReceiveModal.tsx#L65
There are some problems with balance:
Looks like we store free balance in reserved part instead of "reserved" our implementation which is has in FrameSystemAccountInfo object
The miscFrozen part is not processed (balance describe - https://wiki.polkadot.network/docs/learn-accounts#balance-types) example on NovaWallet iOS
Typo in getting orml balance - https://github.com/nova-wallet/omni-enterprise/blob/dev/src/renderer/services/balance/balanceService.ts#L114
Case for reserved part of balance:
Actual result:
assetId: "0"
chainId: "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3"
free: "23408486631710"
frozen: "23234599283358"
publicKey: "0x7a28037947ecebe0dd86dc0e910911cb33185fd0714b37b75943f67dcf9b6e7c"
reserved: "23408486631710"
verified: true
https://t24368000.p.clickup-attachments.com/t24368000/e3ed5b96-c0cc-4c61-adbb-037a06d95338_large.png
Expected result:
reserved = 0
https://t24368000.p.clickup-attachments.com/t24368000/5f343de1-ffe3-4c5b-81d2-ae5dca24b88c_large.png
Frozen balance case:
It should be sum of all elements in balance.locks
Actual result:
frozen = 23234599283358
Expected result:
frozen = 23_234_599_283_358 + 10_000_000_000
Also, it would be nice to store all part of frozen amount with special ID for processing it in future.
Metadata portal network search works wrong
Valid scenario
Type the network name in the search string
Expected result:
If network name matches then it will be in the search result
Actual result:
Network appear even if it's name doesn't match
For example type node in the search.
Valid scenario
Open the metadata portal
Expected result:
Networks are sorted by title in alphabet order
Actual result:
Networks aren't sorted by title in alphabet order
Root-cause analysis: The metadata portal searches by network spec name, but should search by network title.
IF you leave from balances page - hide zero balances state updates to default.
Case:
Run app
Switch Hide zero balances on
Reload/leave balances page
Return back
Actual result:
Hide zero balances status return to default value
Expected result:
If user has switched to hide zero balances "on", this should be retained regardless of leaving the page or restarting the app.
As a User I'd like to be able to get balances for all connected networks
Pre-requisites:
The Omni application is running
The user has at least 1 wallet with main and chain accounts
Valid scenario:
User clicks to the Balances menu item
In the background the Omni application keep network connection
If the Omni application loads balances for the wallet for the 1st time (cache is empty):
The Omni application shows the loading state of the balances page
In the background the Omni application loads the balances cache with the Balances service
The Omni application gets the balance from the network
The Omni application stops showing the loading effect
If the Omni application loads balances for the wallet not for the 1st time (cache is not empty):
The Omni application shows the balance from the cache with the loading state
In the background the Omni application updates the balances with the Balances service
The Omni application gets the balance from the network
The Omni application stops showing the loading effect
The Omni application shows balances from the Balances service storage for the selected wallet
Alternative scenarios:
on 2.c and 2.d user specified chain accounts for some chains ➝ load the data for chain accounts for networks there theses accounts were specified
Error scenarios:
Error on 2.c
Error on 2.d
Important:
Filter, Hide zero balances toggle, Fiat values, Balance breakdown, send and receive buttons is not a part of this task
Keep in mind that the balances page will contain fiat values, balances breakdown, send/receive buttons
DOD:
Balances page with assets balances
Network sorting rules:
Polkadot
Kusama
Production (Live) networks (parachains) with fiat ordered by fiat equivalent (from high to low)
Production (Live) networks (parachains) without fiat ordered by token amount (from high to low)
Production (Live) networks (parachains) ordered by natural alphabet order
Test networks (parachains) ordered by token amount (from high to low)
Test networks (parachains) ordered by natural alphabet order
Token sorting rules (inside each network):
ordered by fiat equivalent (from high to low)
ordered by token amount (from high to low)
ordered by id as Omni gets from the network
As a user I'd like new networks will be turned on automatically
Pre-requisites:
The Omni application is running
New networks were added to the chains.json file
Valid scenario:
The Omni application reads the chains.json file
The Omni application identifies new networks
The Omni application adds networks and turns them on
The Omni application tries to connect to networks
Alternative scenarios:
n/a
Error scenarios:
n/a
DOD:
Turn on new networks in the chains.json file when it changes
Existing networks should be kept in the existing state
After creation via Parity Signer the wallet type should be set as PARITY:
https://github.com/nova-wallet/omni-enterprise/blob/dev/src/renderer/domain/wallet.ts#L22
Creation flow:
Actual result:
Expected result:
type: 1 (based on WalletType enum)
IMPORTANT: Reset database before testing
After starting the app will create 4 wss connection for each network, but one is enough.
https://t24368000.p.clickup-attachments.com/t24368000/ffc174f4-af18-48c9-bd8b-e5858c7f15f6_large.png
Case:
Clear all app data
Run app
Go to the network dev-tools
Actual result:
App create 4 connections for each network
Expected result:
One connection for each network
Add Final page for the Onboarding flow
When user start app first time and get on balances page it should has shimmering effect till all part of balance will be downloaded.
Case:
Clean app
Run app
Add watch only wallet
Go to balances page
Actual result:
When user came on balances page happens:
Shimmering all balances
Show a lot of "zero" balances when it connected
Wait a few time
Show all actual balances
Expected result:
Shimmering should keep till we will ready to show all actual balances.
The problem
The chain configuration is used by Nova Wallet, Omni Enterprise and Metadata portal. Keeping it in mind it will be good to keep the same naming for common parameters. The Metadata portal uses the logo name when the Nova Wallet and Omni enterprise use the icon name. Also the format is different: Metadata portal saves only the image name in config when Omni and Nova Wallet use the full URL.
The solution
Rename the logo param to the icon the Metadata portal
Replace images name with full url in config.toml
Remove the icon path builder from the UI in the Metadata portal
The example
Here is the example for Omni and Nova https://github.com/nova-wallet/nova-utils/blob/master/chains/v5/chains.json#L54
Update the list of derived accounts on the Onboarding flow according to the updated design.
Update logos for the Metadata portal
DOD:
Update logos (take them from here https://github.com/nova-wallet/nova-utils/tree/master/icons/chains/gradient)
Check if names of files match names in config.toml
User selection rules for components.
It would be nice to switch off user-select for some components, like Language switcher for example and buttons.
Case:
Open Language drop-down
Hold left button and select language
Actual result:
The text will be highlighted
https://t24368000.p.clickup-attachments.com/t24368000/e173b373-ba25-4bcc-a241-696001e98840/user_select.mp4
Expected result:
User selection is disabled for some special components as buttons and drop-downs as it is like anti-pattern.
Сomponents those text cannot be randomly selected - feel more pleasing.
Discussion:
https://stackoverflow.com/questions/826782/how-to-disable-text-selection-highlighting
As a user I'd like amounts (balances) to be formatted according the selected locale
Pre-requisites:
Omni application is running
Valid scenario:
User opens some page with balances (fiat or tokens). For example Balances screen, History screen, Create transaction screen.
The balances are formatted according the Selected locale
Alternative scenarios:
n/a
Error scenarios:
n/a
DOD:
Supported locales: RU, EN
Add settings for each locale where the amount format will be stored
Implement component that format amount (token amount or fiat) according to the selected locale
User the component on the balances page
Links:
Decimal separator https://en.wikipedia.org/wiki/Decimal_separator (dot for US, EN, comma for RU)
Styles https://en.wikipedia.org/wiki/Decimal_separator 1,234,567.89 for US, EN; 1234567,89 for RU
When we enter incorrect address in watch-only flow, then will show error:
Error: Decoding 5C5BDLw8tzzWB6XQbVPuzeL34d6GmPYPH1NaqsWBaJWzz42a: Invalid decoded address checksum
instead of showing near the field (it would be add in mockups soon):
As a user I'd like to be able to add a watch-only wallet by blockchain address so that I'll be able to track the account activity.
Pre-requisites:
The user has selected the onboarding with the watch-only wallet
Valid scenario:
The User enters the address of the wallet
The Omni application checks if the address is a valid SS58 address
The User enters the wallet name and clicks Continue
The Omni application saves the wallet
Alternative scenarios:
On each step user is able to go back to the Onboarding screen
Error scenarios:
on 2.b the address is not a valid SS58 address ➝ The Omni application show the error message
on 2.c the wallet name is not valid ➝ The Omni application show the error message
Wallet name validation:
Wallet name shouldn't be longer then 256 chars
As a user I'd like to get the information about transferable, locked (staked, reserved, redeemable, unstaking) balances
Pre-requisites:
The Omni application is running
The user has opened the Balances page
Valid scenario:
The user clicks on the token balance line
The Omni application loads the token breakdown from the Balances service
The Omni application shows the token breakdown
Alternative scenarios:
n/a
Error scenarios:
n/a
Steps component should:
Show completed step
Show step in progress
Show upcoming step
As a user I'd like to see tutorial in order to understand what to do during the Parity Signer onboarding
Pre-requisites:
The user is on the Parity Signer onboarding flow
Valid scenario:
The Omni application shows to the user how to generate and scan QR code
If user clicks on the arrow the tutorial shows the next step
The Omni application shows how to scan the QR code
Alternative scenarios:
n/a
Error scenarios:
n/a
When user runs app he can saw a blanc screen in unexpected case.
It would be nice to cover such case with loading screen.
Example:
As a user I'd like to be able to switch language in order to understand the text in the application
Pre-requisites:
The Omni application is up and running
Valid scenario:
The user changes the Language with the Language UI switcher component
The Omni application changes the language to the language that the user has selected
Alternative scenarios:
n/a
Error scenarios:
n/a
DOD:
Implement the language service that stores the selected language
Work with the application context that sets the language
The use case
As a user I'd like to be able to see the list of networks grouped by the connection status
Pre-requisites:
The Omni application is running
Valid scenario:
The user opens the Network management settings
The user sees the list of Enabled networks and Disabled networks:
Enabled networks are in status: CONNECTED , CONNECTING , ERROR
Disabled networks are in status: DISABLED
Disabled networks list is collapsed by default.
For each group there is a counter with number of networks in each state
For each network there is
status of the connection for Enabled networks
status of the data verification for Enabled networks
drop down for connection selector (out of the scope)
For each network there is a turn-off button (out of the scope)
Alternative scenarios:
n/a
Error scenarios:
n/a
Network sorting algorithm:
In each group and sub-group network should be in the following order:
Polkadot
Kusama
Natural alphabet order
There are 2 groups:
Disabled networks (DISABLED state)
Active networks (CONNECTED , CONNECTING , ERROR states)
Active networks has 3 sub-groups:
networks in ERROR state
networks in CONNECTING state
networks in CONNECTED state
DOD:
Extend the connection table in the IndexDB in order to save the custom nodes, selected node or connection type
Implement the layout
Load network information from the database and group networks according the connection status
Reflect the connection status change on the layout
Show the state for the networks on the screen
As a user I'd like to be able to add a wallet by scanning a QR code with Parity signer so that I'll be able to make transactions in the Omni application.
Pre-requisites:
The user has selected the onboarding with the Parity Signer
The User has the Parity Signer installed on his phone
The User has an account in the Parity signer
Valid scenario:
The User generates the address QR code in the Parity Signer
The User scans the QR code with the Omni application
The Omni application validates that the QR code contains valid SS58 address
The Omni application shows the address that was scanned
The User enters the wallet name and clicks Continue
The Omni application saves the wallet
Alternative scenarios:
on 2.d the address doesn't match the address that user would like to import ➝ User clicks the Rescan QR code button and goes back to the scanning screen.
on every step user is able to go back to the Onboarding screen
Error scenarios:
on 2.b the camera is not available ➝ Omni application shows the error message
on 2.c the address is not valid SS58 address ➝ The Omni application shows the error under the QR code scanning placeholder.
on 2.e the wallet name is not valid ➝ The Omni application shows the error for the wallet name
Wallet name validation:
Wallet name shouldn't be longer then 256 chars
Onboarding. Wallet name input doesn't allow to enter space char.
Also there is some lagging when enter the Wallet name
As a user I'd like to be able to see the actual state of the network connection
Pre-requisites:
The Omni application is Running
The User is watching the Network management screen
The Network connection status is changing
Valid scenario:
The Network connection status should be updated on the Network management screen
For custom node, auto balance, rpc node that Omni application should show the address of the node it's connected
For Light client Omni application should show that it's running Light Client
Alternative scenarios:
n/a
Error scenarios:
n/a
DOD:
Update the network connection status for the network in case of network connection change
Update the connection status on the Network management screen
Actual statuses are DISABLED , CONNECTING , CONNECTED , ERROR according to the https://app.diagrams.net/#G1aeafOwvVE-4DxdIPxGx2NPf3TT2B8P6e
Add global network connection status listener in order to notify the user in future about it (maybe NetworkContext will be good for it)
Show the RPC node to which the node is connected or that Light client is running
Review if there is a component already implemented like https://www.npmjs.com/package/react-responsive-carousel
There should be option to change carousel step manually
The carousel step should be also changed automatically
Carousel automatic change configuration
As a User I'd like to see the balances page after the onboarding so that I'll be able to check the balances
Pre-requisites:
The user has Onboarded to the Omni application
Valid scenario:
The small animation takes place
The Omni application shows the Balances page for the wallet that was entered by the use during the onboarding
Alternative scenarios:
n/a
Error scenarios:
n/a
As a user I'd like to be able to see all the derived accounts after entering or scanning address
Pre-requisites:
The user has entered his address in watch-only or Parity Signer mode
Valid scenario:
The Omni application generated the SS58 for all supported chains and show it to the user with block explorer links
Alternative scenarios:
n/a
Error scenarios:
n/a
Also the empty state for the list of derived addresses should be implemented for the watch-only onboarding.
How to generate block explorer links for account:
find the network in the chains (https://github.com/nova-wallet/nova-utils/blob/master/chains/v5/chains.json) file
find the list of explorers and get the "account" url
Replace the {address} with user's main or chain address in SS58 format for the specific network
Add the logo with the link to the user interface
Sub.id is not available for the MST account
As a user I'd like to be able to get metadata even if some of the chain nodes is not available
Pre-requisites:
The Metadata portal QR codes are updating
Valid scenario:
The Metadata portal start collecting new QR codes
The Metadata portal gets the node information from the config.toml file
The Metadata portal reads the metadata from the node
Alternative scenarios:
Error on the 2.c ➝ The Metadata portal switches to the next node from the config.toml file for the network and proceed with 2.c
Error scenarios:
Error on 2.c and all the nodes were listed ➝ Proceed with the next network and send the notification to the Matrix.
DOD:
Update the config.toml file so that it contains the list of nodes.
Update update and sign and collector job so that it will switch to node if previous attempt fails
Send the Matrix chat notification if all nodes fail for the network.
The name field shouldn't be longer then 256 chars.
Actual result:
It can be any length
Expected result:
Can't enter additional symbols after 256 character.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.