Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/margelo/react-native-bignumber

๐Ÿ”ข The fastest Big Number library for React Native
https://github.com/margelo/react-native-bignumber

app big bignumber crypto cryptography jsi library math native number react react-native wallet

Last synced: 2 days ago
JSON representation

๐Ÿ”ข The fastest Big Number library for React Native

Awesome Lists containing this project

README

        



# ๐Ÿ”ข 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](https://github.com/indutny/bn.js/)

## Installation


React Native ย 

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


Expo ย 

```sh
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.

```ts
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](https://github.com/indutny/bn.js/#instructions) for a full API reference and usage guide.

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

```ts
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](https://github.com/ethers-io/ethers.js/) or [elliptic](https://github.com/indutny/elliptic) use [BN.js](https://github.com/indutny/bn.js/) under the hood, react-native-bignumber exposes exactly the same API as [BN.js](https://github.com/indutny/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`:

```diff
+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](https://discord.gg/6CSHz2qAvA) to chat about react-native-bignumber or other Margelo libraries.

## Sponsors


Exodus

This library is supported by [**Exodus**](https://exodus.com).
Send, receive, and exchange Bitcoin and 160+ cryptocurrencies with ease on the world's leading Desktop, Mobile and Hardware crypto wallets: [exodus.com](https://www.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]!