Announcing the NEM Meteor Wallet

Yes, we are working on this. We have a localization bug, so any where outside of US it is formatting improperly and causing issues. we should have a update in the next few days. Thanks for info.

Alpha testing update v 0.07(1)- DELETE current app before installing, if you need your test account just make sure you back it up from the settings before updating.

Fixed Bugs

  1. Sending TX’s bug
  2. Error handling added
  3. Fee divisibility
  4. Blockchain connectivity
  5. Flickering on home screen
  6. back up wallet
  7. Request and receive funds via text link
  8. explorer in TX details
  9. TX details formatted
  10. QR code can now scan address from nano wallet
  11. BTC price vs XEM displays properly
  12. sender won’t receive notifications
  13. camera auth alert
  14. dismiss send animation with a tap
  15. various improvements
  16. TX history reloads and updates
  17. Push notifications
  18. Fixed localization for formatting outside of U.S. region

Known bugs

  1. Dashes and special characters not allowed in wallet name
  2. Integer overflow on send mosaic if you put in very large value

Version 0.08(4) update. This version will be submitted to the App Store after our external testers and QA process are completed. Again, we will be releasing it to the App Store but calling it beta until multi-sig functionality is completely in.

New Features

  1. Show and copy private key in settings menu
  2. Switch between test and main net
  3. Importing duplicate wallet not allowed
  4. Ability to delete wallets added
  5. Added fee amount in tx details

Known bugs

  1. Dashes and special characters not allowed in wallet name
  2. Integer overflow on send mosaic if you put in very large value
1 Like

Info on architecture.

NEM Meteor Wallet Promo Image

NEM Meteor Wallet

The NEM Meteor Wallet is a powerful wallet for managing XEM and NEM-based tokens known as Mosaics.

After spending many weeks prototyping this wallet using React Native and Ionic we could not achieve the desire performance needed for a high-quality application. We went back to the drawing board to figure out a way to interface with the NEM blockchain using native Swift for iOS and native Kotlin for Android.

We accomplished what we set out to achieve and NEM Meteor Wallet was born.

App Features

  • Send and receive XEM

  • Send and receive any Mosaic

  • Import wallets from Nano Wallet

  • Export wallets

  • Send money requests to other people

  • Switch between NEM Main Net and NEM Test Net

  • Fun animations and slick UX

  • Displays current XEM price and includes currency conversions

  • Built in support for localization

  • Push notifications for incoming & confirmed transactions

  • Supports multiple wallets

Note: Multi Signature is coming soon and NOT yet included in the code

NEM Meteor Phone Images

App Architecture

NEM Meteor Wallet uses NEM Library to communicate with the NEM blockchain.

Unfortunately NEM Library was not built to support mobile web-based applications (Like React Native and Ionic) and requires a C++ Node runtime for some of the features such as CryptoJS and Node’s fs. This caused problems supporting React Native and Ionic. Aside from those issues, React Native and Ionic both use web components to interface with native elements on iOS and Android which causes performance issues.

  1. The app user interface is all built using native Swift or Kotlin

  2. The app has a built in C++ Node runtime that acts as an interal intermediary server

  3. We have a REST API that sits on top of the runtime and utilizes NEM Library to communicate with NEM blockchain

  4. Mobile apps in their native language make HTTP requests and web sockets to communicate with intermediary API

  5. The API and NEM Library is compiled into a single file using Webpack and that file is added to mobile project

NEM meteor bundlejs

  1. Xcode will automatically build API and load bundle.js each time you build the project

The best part is the API code and C++ Node runtime is 100% re-useable between iOS and Android. This means that the only work to do is build user interface on each platform!

1 Like

Strange, we managed to have mobile and web applications.

Two mobile applications:

I didn’t find any of those apps having performance issues either :confused:

Seeds are outdated but worked:

And, afaik (otherwise @marc0o correct me if I’m wrong), is done using React and nem-library too.

Am I missing something about your problem?

The CryptoJS library has features that require C++ Node runtime instead of web runtime. Also nem-sdk uses fs and some other node features not available on web. You can use browserify but still has compatibility issues. Performance is ALWAYS an issue on Ionic and React Native vs native Swift/Kotlin.

Also were nearing completion of Swift SDK for catapult which falls nicely in place with our native app.

I cannot argue on which feature of CryptoJS library you are using, but I found it strange that NEMPay didn’t use the feature that uses CryptoJS (requiring C++ NodeJS runtime) and Meteor yes. Which feature is in particular?

About Hybrid vs Native apps, it’s a huge topic aside and it’s very dependent on the project requirements.

I found it strange because NEMPay uses the wallets, signs transactions & encrypted messages. That’s the only parts I think CryptoJS is used.

On the other side, using Ionic 1 I remember there were performance issues, but after updating to Ionic v3 with the nem-library most of the performance issues disappeared due to non-blocking calls using Observables.

Hello @Mark_Price
Nanowallet is web application which you run in browser and it uses nem-sdk (nem-sdk was created for nanowallet by QM).
Could you explain what your wallet does and nanowallet not?
Or C++ NodeJS runtime is only to not write same code for Android and IOS and build native apps (not use react native or ionic)? I agree that mostly native apps are more responsible.

I realize I said “web applications” when I meant to say “mobile web applications”.

NodeJS is built in C++ and ships with some really cool features such as fs which let’s you work with a file system. Node is really meant to be run on platforms that support C++ like Desktop - or in our case native iOS and native Android support C++ runtimes (which is how we built our app). Chrome web browser uses Chrome’s V8 JavaScript browser and so you may never have had any problems before because it supports the Node C++ libraries.

Those features like fs or some of the built in crypto features const crypto = require('crypto'); are actually created in C++.

Frameworks like Ionic/React Native tend to use JavaScriptCore which can only run JavaScript frameworks and libraries.

So what does this mean exactly? It means that if I’m building a wallet app in React Native, and am using nem-sdk (or any SDK) that uses native Node modules such as fs or crypto the JavaScriptCore engine will not be able to compile/interpret the code.

If there are only a few native C++ features being used, you might get lucky finding node module polyfills (which is basically code recreated in Javascript by someone). But most of these polyfills are created by random people and in my opinion the code you are using becomes less trustworthy.

You could eventually find all of the necessary replacements, but we didn’t feel like that was a good solution.

One important thing an SDK developer should do is make sure that if they want to support all web platforms (mobile and otherwise), to try not to use NodeJS native C++ libraries (such as fs).

If you need some guidance on replacing the C++ modules you can take a look at this:

To answer your question about Nano Wallet vs Meteor - ours is a mobile app. The point of the app is to have a great user experience. It wont have all of the features that nano wallet does (ie voting).

Last note:
One good way to build SDKs with the most platform support is by doing checks like this:

let crypto;
try {
  crypto = require('crypto');
} catch (err) {
  console.log('crypto support is disabled!');

In the catch statement you could set the crypto library to a polyfill instead if on a platform like React Native.

I’m familiar with that, and nem-sdk does handle the environment, source code reference to require(‘crypto’), it handles the case of browser & nodejs. It should work on mobile apps as well.

On the other hand, crypto-js is nodejs and browser compatible. Otherwise, the apps I shared won’t be possible to build or being used.

In summary, I wanted to share that people have been able to create mobile apps using nem-library (and in consequence nem-sdk), it should not have been an obstacle. Regarding performance issues, I cannot tell. It does depend on your requirements.

Is the code open source?