React Native
The React Native environment has a lot of little quirks, so this documentation is aimed at helping smooth those over.
Please feel free to create issues on GitHub for recommendations and additions to this document.
Shims
There are several pieces of functionality missing from the current version of React-Native. Here is a list of functionality the ethers/dist/shims
will provide if unavailable:
Importing into React-Native
ArrayBuffer.isView
atob
andbtoa
nextTick
Promise
String.prototype.normalize
// Import the required shims import 'ethers/dist/shims.js'; // Import the ethers library import { ethers } from 'ethers';
- Note
This file must be minified, since the React-Native
require
seems to hijack the variable namerequire
, even when encapsulated inside a closure. The minification process replaces therequire
with a mangled name, so that there is no collision. This is hacky and in the future a better method would be preferred. Suggestions?- Note
As we find additional features not generally available, they will be added to this shim file. It is targetted toward platforms where build-size is not critical, so functionality is favored over keeping the size small.
Wordlists
React-Native will pull in the browser version of ethers, which does not have all the additional word lists, by default. Each desired wordlist must be separately imported.
Importing languages into React-Nativeimport { es, // Spanish fr, // French it, // Italian ja, // Japanese ko, // Korean zh_ch, // Chinese (simplified) zh_tw // Chinese (tranditional) } from 'ethers/wordlists';
Other Notes
- console.log
The use of
console.log
in React Native can substantially impact performance. For this reason, you may wish to reduce the log level to not show info and warnings.
// The default is "info"; other options // "debug", "info", "warn", "error", "off" ethers.errors.setLogLevel("error");
TODO: Include instructions on installing crypto performance
scrypt (it is VERY slow in React Native; too slow to be functional)