Skip to content

πŸ”’ The fastest Big Number library for React Native

License

Notifications You must be signed in to change notification settings

margelo/react-native-bignumber

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ”’ react-native-bignumber

The fastest Big Number library for React Native.

  • 🏎️ Up to 300x faster than all other solutions
  • ⚑️ Lightning fast implementation with pure C++ and JSI
  • πŸ§ͺ Well tested in JS and C++ (OpenSSL)
  • πŸ’° Made for crypto apps and Wallets
  • 🀌 Up to 5x smaller in JS-bundle size
  • πŸ”’ Store numbers as big as your Phone's RAM can store
  • πŸ” Easy drop-in replacement for BN.js

Installation

React Native Β 

yarn add react-native-bignumber
cd ios && pod install

Expo Β 

expo install react-native-bignumber
expo prebuild

Usage

..as a normal library

The exposed BN class is used to create new BigNumber instances from strings (binary, hex, decimal), ArrayBuffers, Buffers, numbers, or other BigNumber instances.

import { BN } from 'react-native-bignumber'

const a = new BN(3274556)
const b = new BN(9856712)
const c = a.mul(b) // 32.276.355.419.872

Refer to BN.js' documentation for a full API reference and usage guide.

For example, this is how you calculate large Fibonacci numbers:

function fibonacci(n: number): BN {
  let prev = new BN(0)
  let prevPrev = new BN(1)
  let number = new BN(1)

  for (let i = 1; i < n; i++) {
    prevPrev = prev
    prev = number
    number = prevPrev.add(prev)
  }

  return number
}

const f = fibonacci(50) // 12.586.269.025

..as a drop-in replacement

Since popular libraries like ethers.js or elliptic use BN.js under the hood, react-native-bignumber exposes exactly the same API as BN.js so it can be used as a drop-in replacement and promises much greater speed at common crypto operations.

In your babel.config.js, add a module resolver to replace bn.js with react-native-bignumber:

+const path = require('path');

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
  plugins: [
+   [
+     'module-resolver',
+     {
+       alias: {
+         'bn.js': 'react-native-bignumber',
+       },
+     },
+   ],
    ...
  ],
};

Now, all imports for bn.js will be resolved as react-native-bignumber instead.

In the Exodus app, this single line change reduced app launch time by 4 seconds! πŸš€

Community Discord

Join the Margelo Community Discord to chat about react-native-bignumber or other Margelo libraries.

Sponsors

Exodus

This library is supported by Exodus. Send, receive, and exchange Bitcoin and 160+ cryptocurrencies with ease on the world's leading Desktop, Mobile and Hardware crypto wallets: exodus.com

Adopting at scale

react-native-bignumber was built at Margelo, an elite app development agency. For enterprise support or other business inquiries, contact us at [email protected]!