Grin++ (mobile) - Progress update thread by @davidtavarez

grab a :popcorn: and take a :chair: 'cause this may take a while :grin:

welcome to my latest progress update, this time I want to present not just the UI but also I want to explain the user flow to give a better look on where the mobile application is right now.

booting up: after opening the application, the node is also opened in the background, it shows the progress until the node is fully synced, then the user is redirected to the login screen after syncing the node.

the first time the application runs, it could take a while… like, honestly, a lot… maybe… between 25 to 40 minutes depending on the device, but for a full node on a mobile phone I personally don’t think that is too much.

open, create or restore wallet: with grin++ users can manage multiple accounts (or wallets), this is possible also in the mobile version; from this screen users could either, open an existing wallet, create a new one or restore a wallet using a wallet seed.

if the fingerprint is available, the user should use their fingerprint to fully open the wallet after writing the password.

wallet: now, the user wallet is opened; the first tab shows the basic information of the wallet’s balance: spendable coins, immature, unconfirmed and locked, and below that table, the in progress transactions are listed.

from the second tab, users can, first, see and share their slatepack address, but more important, the user can check the availability of the wallet through tor, where green means that the wallet is reachable, of course, orange means that the wallet is not reachable at that moment and white means: I don’t know yet :man_shrugging:; this check is performed every 10 seconds.

to check the wallet availability I’m utilizing the hidden grinaddresschecker tor service and using tor as a socks5 proxy; the hidden service is hosted on a provider with 0 logs policy, therefore no ip, no request and no address is registered… also this service is paid in advanced for at least a year thanks to the donations of our beloved and wonderful grin++ users.

history: maybe the most boring screen, from here the user can see the transaction history grouped by date, click on a transaction and see the details:

status: I regret, this is the most boring one… as you can see, some basic information is displayed, including the connected peers; this information is also periodically updated.

you see? it is just another screen :sweat_smile:

now… let’s go to the main dish: sending, receiving and finalizing… grab another :popcorn:… and a :beer: or maybe :beers:… salud!

sending: after clicking on send from the first tab, a screen is displayed where the user sets the amount to send (also the max button can be used to send the maximum spendable available)

the next step is to enter the address by typing in the box or scanning a qr code.

after setting the amount, the receiver’s address and an optional message, the user confirms the transaction details and can send the transaction or cancel it, not starting the transaction.

after confirming the details, the wallet attempts to send the transaction through tor:

if it succeeds, the screen is closed, otherwise, a slatepack message is returned:

as you can see in the image above, the slatepack message can be copied to the phone clipboard or share it directly through another application… most people will say that the receiver could also read the generated qr code, but, no, the receiver won’t be able to read it correctly because that qr code isn’t properly rendered on a small screen since the slatepack message isn’t short at all (and technical details that are not worth mentioning).

scanning the qr from a desktop works perfectly, and this leads us to the next step: finalizing the transaction, which can be done from screen above.

before the sender can finalize the transaction, the receiver needs to actually receive the transaction… because the receiver’s wallet was not reachable while the sender tried to send the first time(or because of another reason), the receiver can also use grin++ to receive the transaction using the slatepack message:

from here, the receiver can paste the slatepack message from the clipboard, scan a qr code with the encoded message or type it manually (yeah, good luck with that!).

after receiving the slatepack message, the application will show the slatepack message that should be shared with the sender:

the receiver can, from here, copy the slatepack message and share it with the sender.

the sender can finalize the transaction from their screen where the first slatepack message can be shared or, by swiping to the left on the box displaying the transaction like this:

the sender could also cancel the started transaction by swiping to the right on the same box:

the transaction is then sent to the transaction history.

the end :movie_camera:

.
.
.

now… the credits:

  • Minimum version required: Android 9.0 (API Level 28).
  • Architecture supported: 64bit.
  • ARM: AArch64 or ARM64.
  • Minimum RAM recommended: 4GB.
  • Programming Language: C#.
  • Framework: Xamarin.Forms.
  • Source Code: GitHub - GrinPlusPlus/GrinPlusPlusMobile

known bugs: there is a bug while trying the restore a wallet from the apk, the embedded node closes itself due (probably) to memory consumption… this bug is currently being tracked.

release date: december 2020 after fixing the bug above and some other minor details.

19 Likes