Weekly Project Highlight: Canoe
A fully open source & cross-platform wallet to manage your Nano in a safe and secure way.
This week I talked with Göran and Tyler from Canoe, an open source wallet built for Nano, fresh off of their iOS wallet reaching the app store. As one of the first wallets built for Nano and with a dedicated and diverse team, I was interested to know how Canoe started and their plans for the future.
Not many people know about the origin of the name Canoe, but it’s a great one. Want to fill in those who don’t know?
Tyler: The original name for Nano was Raiblocks and Raiblocks were named after Rai stones which were huge stones the Yap islanders used as currency. Colin named the cryptocurrency Raiblocks ironically since Rai stones were very large and difficult to transfer ownership of. When Rai stones were moved they used canoes to transfer them from one party to another. The Canoe wallet is the tool used to transfer your Raiblocks (Nano) from one user to another.
What led you to build a wallet around Nano?
Göran: I have always viewed Crypto from a distance, understood the basics but never bought any or read up properly on the subject. Then back in november, december last year for some reason… I started looking more closely. And as a developer I tried to find the tech that I believe in. So from the start I felt that I wanted something that was “mining free” because the insanity of burning coal in China to power custom hardware… nah, must be something we move past. And thus I basically ended up looking at Byteball, IOTA, RaiBlocks (Nano). For various reasons I felt RaiBlocks (Nano) had the cleanest focus, a proper distribution story etc. It just ticked most checkboxes for me. Early on I felt that … wait, why is there no good wallet? And since I had looked at Byteball — they have a very good wallet — when I looked a bit closer I realized that the Byteball wallet is a clone of the open source wallet called Copay from Bitpay, one of the strong Bitcoin companies. I started by trying to clone the Byteball wallet, but failed to build it, so after some hours I went upstream and cloned Copay instead. It was easy to build and get hacking on it. And the license is MIT.
Any history on how the canoe team came together?
Göran: I started the Canoe project due to the lack of wallets in the then RaiBlocks community. Eventually I started talking about the Canoe project in the Nano discord under the development channel. Rami, Tyler, Stef, and Nico all got involved in the project and have contributed in their own ways. Canoe is Open Source, both in license (MIT) but perhaps more importantly, in spirit. Anyone can join and help, we build it together. All discussions around development is public on our discord. Joining in is just a matter of doing the walk and not just the talk.
What improvements are you looking at making to the wallet?
Göran: Very soon in v1.0.1 we are going to be adding some new language options such as Simplified Chinese, Brazilian Portuguese, Bulgarian, and Romanian. In v1.1 we are going to add support for people using the same seed in multiple different wallets. Canoe currently stores your blocks locally and doesn’t re-sync with the Nano network unless you do a repair. Larger features we are still planning are Alias support. We actually had aliases fully working but we were not happy with the level of centralization and the possible attack vectors. We wrote up a new plan for a DNS/SMTP model of aliases and some members of the Cryptocurrency community have been building a protocol called opencap around those ideas. We are also looking into scaling our proof of work generation. As more people use Canoe we have to do the work for all these transactions. We are building a prioritized mining pool where anyone can contribute their extra GPU or CPU power. The queue will prioritize the requests to prevent spam.
What makes Canoe unique that allows the team to deploy to so many different platforms such as iOS, Android, MacOS, Windows, and Linux?
Tyler: Canoe is written using web tech, on mobile it uses Cordova and on desktops it runs in NW.js which is similar to Electron. It is the only cross platform single codebase Nano wallet.
Tell us a bit about the Canoe backend server.
Tyler: The Canoe backend with the MQTT backbone is currently used by multiple different wallets. It consists mainly of a main server written in Nodejs (canoed) and another one also in Nodejs for the rateservice. Canoed acts as a frontend for the Nano node and routes a subset of the RPC calls to it. We use Redis to maintain the session state (associations between account numbers and wallet ids) and we use Postgresql to maintain block timestamps and the credentials for connected wallets. Currently Nano Blocks and Pocket Nano both use the Canoe backend. Anyone can run their own Canoe backend and connect to it inside the canoe app. This way you don’t have rely on our servers being up and you can generate your own work. There is a guide to setup your own backend here https://github.com/getcanoe/canoed/wiki/Setting-up-a-canoed-backend
What are some of the features of the Canoe wallet that you are proudest of?
Göran: Canoe has great internationalization support. Canoe has over 120 contributors helping out translating Canoe to 38 languages (and counting). At this moment 20 of those are included in Canoe, including simplified Chinese, and in the upcoming 1.0.1 we will add Brazilian Portuguese and possibly also Romanian and Bulgarian as they reach 90% coverage. If anyone wants to help out check out https://poeditor.com/join/project/cnSZa85DRN
Canoe also has a wallet implementation with local chains. This means Canoe does not need to make network calls to show history or current state of the wallet. This helps us make Canoe a lot faster but also requires the users resync their chain if they use another wallet provider.
We use MQTT over websockets in combination with regular REST RPC calls. MQTT is a pub/sub protocol which means that Canoe wallets never poll the backend for changes, instead blocks are pushed to wallets based on if they are of interest for that specific wallet. The no polling design means the backend scales much better and there are no delays due to polling intervals.
Canoe supports 160 different currency conversions using our rate service. The rate service is an example of an added service that runs as it’s own server process, regularly collects a table of currency conversions to a full range of currencies, and publishes it over MQTT out to all connected wallets. This way we do not overload the APIs available for rates. The design around MQTT makes it very easy to add new such services, that only a subset of wallets may use.
I’d like to thank the Canoe team for chatting with me and for all they have done to support Nano. If you haven’t had a chance to try out their wallet, be sure to visit https://getcanoe.io/.
Nano Foundation does not endorse or approve products and/or services used or developed by third parties. Any links to third party software or sites are for informational purposes only. Nano Foundation bears no responsibility for the operability, accuracy, legality or content of third party products and/or services. Any questions regarding third party material should be directed to that party.