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

This is really great! Congrats on such results so quickly! I’m looking forward to make Ironbelly and Grin++ Mobile to work together seamlessly!


It’s the other way around, coinbase company name comes from the fact that newly minted coins are called coinbase. Users who are confused by that will have to learn the terminology or something. If the mobile wallet will have coin control it will be important to know which outputs are coinbase. Maybe it can be an advanced feature that gets toggled on though

Awesome! I got two feature requests, if you find the time:

  • Add option to send max amount of coins, as I outlined here.
  • Not directly related to the mobile app; Add a Scan button to manually rescan for outputs. Currently Grin++ requires to resync the chain if there’s a discrepancy in balance (happens quite often). I don’t remember if the back-end for this has been implemented by davidb yet or not, but this is probably the biggest thing missing in Grin++ a the moment.



  • Option to connect wallet to a remote node.

Now there is two more post to follow the process:


I will keep this thread exclusively for the updates and the app itself.


moved topic to #techtalk .

Some updates.

In short words: now, I will be focused on bringing the mobile app into life! even if I’m not able to deliver all the features that I want for the first release, I’m still very confident we will have a fully functional Grin++ mobile app for December.


Some screenshots now.


Looking great!
Gotta love that 〜(ᵐ‿ʷ)〜 touch at the end (thanks to @grn I guess).


Yes, thanks to @grn I will try to use the Some Grin Emoticons instead of the classic emoticons.


Thanks for using them. I love to see them in the wild.

To me it looks great. I only noticed one thing: I confused the account list items in the first screen with action buttons when I looked first at it. It may help to say “Wallets” above them. And maybe a more list-like look?

Username and Password in a crypto wallet ?

mmmm with Grin++ you can create multiple accounts, maybe “username” isn’t the proper word, maybe “account” is more explicit; you can read more information about grin++ here:

1 Like

This Grin++ wallet for android is app?

Nice, you’re making great progress on this :+1:

I would assume that may confuse people into thinking this a custodian service.
Plus, it’s somewhat different from other wallets that allow you to create multiple accounts under one seed instead of creating and backing up new seeds for each account.


Is it possible to run a full node on mobile(no root) at the moment?

Nice! I installed the apk and it works really well. Very rapid responsiveness. It would be cool if the blinking | that indicates where text entry is occurring could be changed from the default of black to yellow or something. I needed to edit a password and couldn’t figure out where I was typing or if the text box was even selected. Really great work!

I’ve been working on the mobile with good progress so far, now it is possible to create wallets, restore it, view transactions history, view details of a transaction, the wallet balance, address, QR code and copy/ share that information. Next steps for Mobile:

  • Finalize the Sending and Receiving features.
  • Polish the UI a bit more.
  • Try to Downgrade at least API level to 28 (right now the minimum required version is 29 or Android 10).
  • Clean the code base.
  • Publish v0.1 for everyone.

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:

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.