Trinity wallet — Summer Update
The full article was originally published by Charlie Varley on Medium. Read the full article here.
Approaching a more or less bug-free app, the Trinity Mobile team has had more time to explore new features, revisit existing ones and refine general performance. The last week or two have been spent on a few key areas. These changes will be available in the next update.
Snapshot transition — Snapshot transition will now attach addresses one by one, allowing the user to start again where they left off in case of failure. A progress bar with the number of remaining to-be-attached addresses will also be displayed. It is recommended that users perform a Snapshot Transition once per account following a snapshot.
Storing transaction trytes locally — Trinity will now store signed inputs for transactions, so that in the event of network interruption a transaction can simply be rebroadcasted, rather than repeating the whole process. While convenient, this also has important security benefits, by mitigating the risk of a rogue node owner making you resign inputs and revealing more of your private key.
Receive page — The (ugly) Receive page has been shown some love with a complete UI/UX overhaul. The functionality remains largely unchanged, but the page is now much more intuitive. We have also added transaction amount to the QR code (one of the more commonly-requested features).
Performance — Proof of Work can be quite resource heavy and affect performance, particularly on Android. By leveraging asynchronicity and moving more code native, Proof of Work will no longer cause any performance issues. The same approach has also been applied to address generation, allowing us to maintain an up-to-date unused receive address without any user action.
Beta is a useful phase of app development. It allows for an app to be out in the wild despite some of its finer details not being 100% production-ready. The period during which an app is in beta affords a development team invaluable time to refine everything, down to the more minute details. However, although useful, the beta tag is fairly limiting. It prevents an app from reaching a wider audience and may restrict the level of confidence its users have in it. Accordingly, the main priority of the Trinity Mobile team is to ensure the app is production-ready for full release. A number of remaining features deemed necessary for full release have been identified. What follows is a brief description of those remaining tasks.
N.B. Much of Trinity’s codebase is shared between desktop and mobile. This means that many of the features described below can be added to both platforms at once with minimal additional outlay.
Features needed for full release
Node quorum — In a distributed computing environment, a single source of information is ultimately fallible. The implication of this — when applied to a wallet — is a limit to the level of confidence we can have in the responses of a single node. This is where node quorum becomes important. Confidence increases when responses of multiple nodes are considered in tandem. With 2/3 of a pool of nodes in agreement, we can be confident that the information returned is correct. And in the case where the nodes fail to agree, we fallback to a safe result. The team has already implemented node quorum, but it requires additional testing and sign off from the Foundation’s research team before public release.
Seed back up options — When interfacing between multiple apps, Android’s security can be poor. Indeed those with both Android and iOS will have noticed that printing a filled paper wallet and copying your seed to clipboard have been removed from Android altogether. The remaining seed back up options for Android users are somewhat cumbersome at present. There is clearly a need for improvement here and we have devised two new back-up options:
- SeedVault — A password-protected KeePass file (.kdbx) containing your seed(s). By offering an inhouse solution for encrypted seed back up, we hope that community seed storage practices will improve significantly. Your seed is the master key to your funds; storing it anywhere unencrypted introduces unnecessary risk. SeedVault should become the standardised way to back up seeds digitally. It has already been implemented in Trinity Desktop.
- Password-protected QR Code — Storing a paper wallet is a good way to back up a seed. However as more people become familiar with IOTA, plain text paper wallets become a target for thieves. With a QR-encoded seed, encrypted behind a secure password, a paper wallet becomes useless to a thief.
Password strength requirements — Currently the only restriction on password selection is to exceed 11 characters. Trinity Desktop has already implemented stricter password requirements following Dropbox’s zxcvbn. A sufficiently strong password is essential in ensuring the safety of your seed.
Nice to have
A number of nice-to-have features have also been identified. While not essential for full release, these will be implemented beforehand should time permit doing so.
Background processes — At the moment, the Trinity Mobile app must be in the foreground for processes to execute. It would be so much smoother if you could send a transaction, and minimise, while auto-promotion continues in the background, and you receive a push notification when the transaction has confirmed. Owing to some limitations in React Native, this has proved a more tricky task than would initially appear. Nevertheless, background processes are currently under development, but require further testing to ensure that battery life is conserved.
Dealing with funds at spent addresses — Trinity does not allow users to spend from addresses that have already been spent from. This is an important security feature but creates a roadblock for many users, forcing them to find an alternative way to transfer their funds to an unused address (e.g. through the CLI wallet). The team is looking at a solution for securely moving funds from spent addresses within Trinity. To minimise risk during this process we plan to implement something similar to Eric Hop’s double spend proposal.
Password manager integration for iOS — Trinity does not currently have direct integration with a password manager on iOS. 1Password has APIs that would allow you to store seed(s) in your 1Password vault, and then use 1Password to fill in the seed confirmation input field during setup. In iOS 12, Apple introduced Autofill support for third-party password managers, which would allow Trinity to support a number of password managers. Support for 1Password and other third-party password managers will be explored in the coming months.
Deep-linking — Deep-linking is an important feature for IOTA’s adoption in e-commerce. It would allow vendors to provide a URI on their website that opens pre-filled transaction details directly in Trinity (i.e. iota:<address>[?amount=<amount>][?tag=<tag>][?message=<message>]). Implementation is complete on both mobile and desktop but some security concerns have prevented release. To circumvent the risk of malicious apps tricking users through deep-linking, the team would first like to add a user-specific recognisable image (similar to that used by banking apps). This would mean users can guarantee they have opened Trinity and not inadvertently a malicious app.
Custom Keyboard — Keyloggers present a serious risk on desktop and Android. If a user accidentally installs some malware, it is important that Trinity makes every effort to protect your seed(s) and password from prying eyes. With a custom on-screen keyboard, with an option to randomise letter positioning, we can help to protect against this type of attack.
Trinity Desktop has been in alpha for a few months now, with around 500 community members meticulously testing and diligently reporting any bugs. If you are enjoying Trinity Mobile you will certainly be impressed by Rihards Gravis’ (AKA iota.dance) work on Trinity Desktop. It is a fully-feature laden app, with a fancy UI, that makes seed-generation, seed storage and sending IOTA back and forth a seamless and secure process. With the last of the security features (SeedVault) implemented, we can now submit the app for its second audit (which will be conducted by Accessec GmbH).
Feature-complete against Trinity Mobile — Desktop development began later than mobile, and understandably, its feature set has lagged behind its mobile counterpart for a number of months. However, with the latest feature addition — Expert mode — Trinity Desktop is now feature complete against Trinity Mobile. This is an important milestone and is the realisation of this project’s original aim — to have a truly cross-platform wallet application.
SeedVault — As mentioned above, SeedVault has recently been implemented on desktop. It provides a way to securely backup your seeds to a password-protected encrypted file. The .kdbx format is also used by the open source KeePass password manager (with variants available for free on all mobile and desktop platforms). This would allow you to manage single or multi-seed SeedVault files directly from within the password manager.
Additional security improvements — Security is a wallet’s most important attribute, and the Trinity team looks to exceed industry standards at every possible opportunity. We have recently designed a complete overhaul of the processes involved in seed memory storage, encryption and keychain storage. These behind-the-scenes security improvements are complemented by user-facing changes, including an option to obscure seed input fields, and of course, SeedVault import/export.
Beta preparations — As with any project, the final 10% can take much longer than the preceding 90%. Fixing the bugs identified by alpha testers is an ongoing process. In addition to any remaining bugs, other peripheral tasks still to be completed include in-app updates, UX/UI improvements, codebase documentation and continuous integration setup.
Ledger Nano S integration — The community Ledger team (comprised of @diskings, @peterwilli and @wollac) has done an incredible job with IOTA Ledger Nano S implementation. We will be working with them closely as soon as the desktop beta is released. The Trinity team has plans to support other hardware wallets and U2F solutions. Ledger Nano S will be the first to be officially supported with other options to be explored further down the line.
All in all, Trinity development is moving along very smoothly. We are actively working on preparing the mobile app for full release, and the desktop app for beta release, with several new features being worked on across both platforms. We look forward to sharing the Trinity Desktop beta with everyone soon. As always, if you have any questions please feel free to ask away in the #trinity-discussion channel on Discord.