Trinity Update: Feb 1st

Update: The IOTA Trinity wallet is deprecated with the Chrysalis upgrade and will be replaced by the new Firefly wallet. You can easily transfer your tokens following these instructions.


Last week we released Trinity Mobile 0.6.0 beta. This was a substantial step forward for the mobile version, including a number of considerable changes and improvements. The addition of node quorum vastly improves the wallet’s security when interfacing with the Tangle, by requiring a consensus between multiple nodes before a response is considered valid. The mobile UI has also undergone a complete UI overhaul with updated modals, fancy animations, and refinements throughout. Join the beta and try it out for yourself here.  

In the last update we announced our plans to submit both Trinity Mobile and Desktop for a second audit. The apps will be audited by a leading security firm so as to ensure they are as secure as possible when released in full. Accordingly, work has been focussed primarily on preparing for the audit. That means reviewing our security features, core logic and storage methodologies. Of course, the more cosmetic changes can wait, but core functionalities must be ready to go.

One significant feature we have been working on for a while is porting storage to Realm database. This has some advantages over the previously-used AsyncStorage. Namely, Realm allows for improved performance, stability and scalability. With the introduction of Local Snapshots, users become increasingly reliant on their local state. If you query a node for past transactional information there is a reasonable chance it will no longer store that information. Realm will allow us to implement a convenient way to import and export state further down the line, so that users can retain their seed’s full transaction history when transitioning between devices. Realm also has benefits for privacy — by way of state encryption. The Tangle’s inherent structure makes it extremely difficult to piece together the addresses belonging to a single user. However if your wallet state is left anywhere unencrypted you become a potential target for attackers. By leveraging Realm, we can encrypt users’ transaction history — both on device, and later, in state backups, when state import/export is added.  

App performance has been a notable focus in recent weeks. Within React Native pure JavaScript relies on a single-threaded environment; where any heavy lifting will operate on the same thread as UI components. We are aware of some bottlenecks that can affect weaker Android devices in particular. It therefore makes sense to move any heavy lifting native and thereby have it execute on a separate thread. Accordingly we are working on moving signature generation native and batching Proof of Work requests(where currently PoW is executed in series — with each set of transaction trytes passed one by one back and forth across the JS bridge). Conveniently, we can make use of the the IOTA Foundation’s C-based monorepo Entangled here. The longer term plans are to gradually move all transaction logic native, to free up as much of the main js thread as possible and yield a smoother user experience. As we look towards Trinity V2, and with the future release of the updated client libraries, this will become an area of increasing focus.  

In addition to security and performance considerations, we have also been working on increasing test coverage. We have mainly been adding unit tests for desktop UI components and Native library wrappers. We will also be adding integration tests surrounding core IOTA protocol functionality before we submit the builds for audit. These tests would not only ensure fewer bugs but will also improve the overall workflow of the Trinity project as we enter V2 development.

As ever, if you are interested in following Trinity’s progress you can do so by monitoring the repo or joining our Discord server.  

We’d also like to express our thanks to community members delki8, Thoralf, Marco Geier, W1ndChaser and carlosfromnewyork-heyheyhey for their recent contributions to the project.

Here are some of the PRs that have recently been completed or are currently being worked on:

Desktop- [WIP] Add unit test coverage (#994)- [WIP] Create Realm migration component (#857)Mobile:- Mobile 0.6.0 release (#983)- Fix iOS zoom calculation (#995)- Fix issues with dimensions related to Status Bar (#980)- Android build fixes (#969)- Fix modal rerendering bug (#959)Shared:- [WIP] Implement Realm database and encrypt state (#375)- Remove unresponsive nodes from default nodes list (#970)- Increase timeout for attachToTangle network requests (#980, #982)