{"id":15653127,"url":"https://github.com/coreyphillips/rn-bitcoinjs-lib","last_synced_at":"2025-10-19T13:32:31.950Z","repository":{"id":83985875,"uuid":"122774355","full_name":"coreyphillips/rn-bitcoinjs-lib","owner":"coreyphillips","description":"A React Native compatible implementation of bitcoinjs-lib","archived":false,"fork":false,"pushed_at":"2019-08-07T13:33:36.000Z","size":389,"stargazers_count":31,"open_issues_count":0,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-26T14:12:41.078Z","etag":null,"topics":["bitcoin","bitcoinjs-lib","javascript","litecoin","react-native"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coreyphillips.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-02-24T19:52:53.000Z","updated_at":"2024-10-09T09:54:22.000Z","dependencies_parsed_at":"2023-03-12T20:14:59.477Z","dependency_job_id":null,"html_url":"https://github.com/coreyphillips/rn-bitcoinjs-lib","commit_stats":{"total_commits":26,"total_committers":2,"mean_commits":13.0,"dds":"0.15384615384615385","last_synced_commit":"04a0fbc6c72efc1e1e235166fded937c4acf01a0"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coreyphillips%2Frn-bitcoinjs-lib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coreyphillips%2Frn-bitcoinjs-lib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coreyphillips%2Frn-bitcoinjs-lib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coreyphillips%2Frn-bitcoinjs-lib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coreyphillips","download_url":"https://codeload.github.com/coreyphillips/rn-bitcoinjs-lib/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251684693,"owners_count":21627173,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitcoin","bitcoinjs-lib","javascript","litecoin","react-native"],"created_at":"2024-10-03T12:44:46.235Z","updated_at":"2025-10-19T13:32:31.875Z","avatar_url":"https://github.com/coreyphillips.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RN-BitcoinJS (rn-bitcoinjs-lib)\n\n#### Note: Great news! This library is no longer required for bitcoinjs-lib versions 5.1 and up. [Please use this Gist instead to get your RN project up and running.](https://gist.github.com/coreyphillips/4d45160fed016417a5f583f179c2cbdb)\n\nThis is a React Native compatible version of [bitcoinjs-lib](https://github.com/bitcoinjs/bitcoinjs-lib), a javascript Bitcoin library for node.js and browsers.  Written in TypeScript, but committing the JS files to verify.\n\nReleased under the terms of the [MIT LICENSE](LICENSE).\n\n## Should I use this in production?\nIf you are thinking of using the *master* branch of this library in production, **stop**.\nMaster is not stable; it is our development branch, and [only tagged releases may be classified as stable](https://github.com/coreyphillips/rn-bitcoinjs-lib/tags).\n\n\n## Can I trust this code?\n\u003e Don't trust. Verify.\n\nYou shouldn't trust or rely on this repo for anything other than testing. To setup bitcoinjs-lib (5.0.5) in your RN project, please follow the how-to below:\n[RN BitcoinJS-Lib (5.0.5) Setup](https://gist.github.com/coreyphillips/9719d7e4b1f6042b993f548d2083cee8)\n\nIf you have any difficulty with the setup instructions below and need a repo for reference, feel free to clone, review and experiment with the pre-built RN repo here: [RNBitcoinJS](https://github.com/coreyphillips/RNBitcoinJS)\n\nWe recommend every user of this library and the [bitcoinjs](https://github.com/bitcoinjs) ecosystem audit and verify any underlying code for its validity and suitability.\n\nMistakes and bugs happen, but with your help in resolving and reporting [issues](https://github.com/bitcoinjs/bitcoinjs-lib/issues), together we can produce open source software that is:\n\n- Easy to audit and verify,\n- Tested, with test coverage \u003e95%,\n- Advanced and feature rich,\n- Standardized, using [prettier](https://github.com/prettier/prettier) and Node `Buffer`'s throughout, and\n- Friendly, with a strong and helpful community, ready to answer questions.\n\n## Documentation\nPresently,  we do not have any formal documentation other than our [examples](https://github.com/bitcoinjs/bitcoinjs-lib#examples), please [ask for help](https://github.com/bitcoinjs/bitcoinjs-lib/issues/new) if our examples aren't enough to guide you.\n\n\n## Installation\n``` bash\nyarn add rn-bitcoinjs-lib\n```\n\nTypically we support the [Node Maintenance LTS version](https://github.com/nodejs/Release).\nIf in doubt, see the [.travis.yml](.travis.yml) for what versions are used by our continuous integration tests.\n\n**WARNING**: We presently don't provide any tooling to verify that the release on `npm` matches GitHub.  As such, you should verify anything downloaded by `npm` against your own verified copy.\n\n\n## Setup\n\n### React Native\nInstall the following dependencies:\n``` bash\nyarn add buffer-reverse react-native-randombytes crypto buffer@5\nyarn add --dev rn-nodeify\nreact-native link react-native-randombytes\n```\nAdd the following to your script in package.json: \n\n``` javascript\n\"postinstall\": \"rn-nodeify --install buffer,stream,assert,events,crypto,vm --hack \u0026\u0026 cd node_modules/bs58 \u0026\u0026 yarn add base-x@3.0.4 \u0026\u0026 cd ../../\"\n```\n\nInstall any remaining dependencies and run postinstall.\n NOTE: (If you receive an error about \"shim.js\" not existing just run `yarn install` again): \n\n``` bash\nyarn install\n```\n\nAdd the following to shim.js:\n``` javascript\nif (typeof Buffer.prototype.reverse === 'undefined') {\n  var bufferReverse = require('buffer-reverse');\n\n  Buffer.prototype.reverse = function () {\n    return bufferReverse(this);\n  };\n}\n```\n\nAdd/Uncomment \"require('crypto')\" at the bottom of shim.js: \n\n``` javascript\nrequire('crypto')\n```\n\nFinally:\n\n``` bash\nyarn install\n```\n\n**Usage**\n``` javascript\nimport \"./shim\";\nconst bitcoin = require(\"rn-bitcoinjs-lib\");\nconst keyPair = bitcoin.ECPair.makeRandom();\nconst { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey });\nconsole.log(address);\n```\n\nCrypto is hard.\n\nWhen working with private keys, the random number generator is fundamentally one of the most important parts of any software you write.\nFor random number generation, we *default* to the [`randombytes`](https://github.com/crypto-browserify/randombytes) module, which uses [`window.crypto.getRandomValues`](https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues) in the browser, or Node js' [`crypto.randomBytes`](https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback), depending on your build system.\nAlthough this default is ~OK, there is no simple way to detect if the underlying RNG provided is good enough, or if it is **catastrophically bad**.\nYou should always verify this yourself to your own standards.\n\nThis library uses [tiny-secp256k1](https://github.com/bitcoinjs/tiny-secp256k1), which uses [RFC6979](https://tools.ietf.org/html/rfc6979) to help prevent `k` re-use and exploitation.\nUnfortunately, this isn't a silver bullet.\nOften, Javascript itself is working against us by bypassing these counter-measures.\n\nProblems in [`Buffer (UInt8Array)`](https://github.com/feross/buffer), for example, can trivially result in **catastrophic fund loss** without any warning.\nIt can do this through undermining your random number generation, accidentally producing a [duplicate `k` value](https://www.nilsschneider.net/2013/01/28/recovering-bitcoin-private-keys.html), sending Bitcoin to a malformed output script, or any of a million different ways.\nRunning tests in your target environment is important and a recommended step to verify continuously.\n\nFinally, **adhere to best practice**.\nWe are not an authorative source of best practice, but, at the very least:\n\n* [Don't re-use addresses](https://en.bitcoin.it/wiki/Address_reuse).\n* Don't share BIP32 extended public keys ('xpubs'). [They are a liability](https://bitcoin.stackexchange.com/questions/56916/derivation-of-parent-private-key-from-non-hardened-child), and it only takes 1 misplaced private key (or a buggy implementation!) and you are vulnerable to **catastrophic fund loss**.\n* [Don't use `Math.random`](https://security.stackexchange.com/questions/181580/why-is-math-random-not-designed-to-be-cryptographically-secure) - in any way - don't.\n* Enforce that users always verify (manually) a freshly-decoded human-readable version of their intended transaction before broadcast.\n* Don't *ask* users to generate mnemonics, or 'brain wallets',  humans are terrible random number generators.\n* Lastly, if you can, use [Typescript](https://www.typescriptlang.org/) or similar.\n\n\n\n### Node.js\nUse [bitcoinjs-lib](https://github.com/bitcoinjs/bitcoinjs-lib)\n\n### Browser\nUse [bitcoinjs-lib](https://github.com/bitcoinjs/bitcoinjs-lib)\n\n### Typescript or VSCode users\nType declarations for Typescript are included in this library. Normal installation should include all the needed type information.\n\n## Examples\nThe below examples are implemented as integration tests, they should be very easy to understand.\nOtherwise, pull requests are appreciated.\nSome examples interact (via HTTPS) with a 3rd Party Blockchain Provider (3PBP).\n\n- [Generate a random address](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/addresses.js)\n- [Import an address via WIF](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/addresses.js)\n- [Generate a 2-of-3 P2SH multisig address](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/addresses.js)\n- [Generate a SegWit address](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/addresses.js)\n- [Generate a SegWit P2SH address](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/addresses.js)\n- [Generate a SegWit 3-of-4 multisig address](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/addresses.js)\n- [Generate a SegWit 2-of-2 P2SH multisig address](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/addresses.js)\n- [Support the retrieval of transactions for an address (3rd party blockchain)](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/addresses.js)\n- [Generate a Testnet address](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/addresses.js)\n- [Generate a Litecoin address](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/addresses.js)\n- [Create a 1-to-1 Transaction](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/transactions.js)\n- [Create a 2-to-2 Transaction](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/transactions.js)\n- [Create (and broadcast via 3PBP) a typical Transaction](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/transactions.js)\n- [Create (and broadcast via 3PBP) a Transaction with an OP\\_RETURN output](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/transactions.js)\n- [Create (and broadcast via 3PBP) a Transaction with a 2-of-4 P2SH(multisig) input](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/transactions.js)\n- [Create (and broadcast via 3PBP) a Transaction with a SegWit P2SH(P2WPKH) input](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/transactions.js)\n- [Create (and broadcast via 3PBP) a Transaction with a SegWit P2WPKH input](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/transactions.js)\n- [Create (and broadcast via 3PBP) a Transaction with a SegWit P2PK input](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/transactions.js)\n- [Create (and broadcast via 3PBP) a Transaction with a SegWit 3-of-4 P2SH(P2WSH(multisig)) input](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/transactions.js)\n- [Verify a Transaction signature](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/transactions.js)\n- [Import a BIP32 testnet xpriv and export to WIF](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/bip32.js)\n- [Export a BIP32 xpriv, then import it](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/bip32.js)\n- [Export a BIP32 xpub](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/bip32.js)\n- [Create a BIP32, bitcoin, account 0, external address](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/bip32.js)\n- [Create a BIP44, bitcoin, account 0, external address](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/bip32.js)\n- [Create a BIP49, bitcoin testnet, account 0, external address](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/bip32.js)\n- [Use BIP39 to generate BIP32 addresses](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/bip32.js)\n- [Create (and broadcast via 3PBP) a Transaction where Alice can redeem the output after the expiry (in the past)](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/cltv.js)\n- [Create (and broadcast via 3PBP) a Transaction where Alice can redeem the output after the expiry (in the future)](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/cltv.js)\n- [Create (and broadcast via 3PBP) a Transaction where Alice and Bob can redeem the output at any time](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/cltv.js)\n- [Create (but fail to broadcast via 3PBP) a Transaction where Alice attempts to redeem before the expiry](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/cltv.js)\n- [Create (and broadcast via 3PBP) a Transaction where Alice can redeem the output after the expiry (in the future) (simple CHECKSEQUENCEVERIFY)](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/csv.js)\n- [Create (but fail to broadcast via 3PBP) a Transaction where Alice attempts to redeem before the expiry (simple CHECKSEQUENCEVERIFY)](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/csv.js)\n- [Create (and broadcast via 3PBP) a Transaction where Bob and Charles can send (complex CHECKSEQUENCEVERIFY)](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/csv.js)\n- [Create (and broadcast via 3PBP) a Transaction where Alice (mediator) and Bob can send after 2 blocks (complex CHECKSEQUENCEVERIFY)](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/csv.js)\n- [Create (and broadcast via 3PBP) a Transaction where Alice (mediator) can send after 5 blocks (complex CHECKSEQUENCEVERIFY)](https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/csv.js)\n\nIf you have a use case that you feel could be listed here, please [ask for it](https://github.com/bitcoinjs/bitcoinjs-lib/issues/new)!\n\n\n## Contributing\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n\n### Running the test suite\n\n``` bash\nnpm test\nnpm run-script coverage\n```\n\n## Complementing Libraries\n- [BIP21](https://github.com/bitcoinjs/bip21) - A BIP21 compatible URL encoding library\n- [BIP38](https://github.com/bitcoinjs/bip38) - Passphrase-protected private keys\n- [BIP39](https://github.com/bitcoinjs/bip39) - Mnemonic generation for deterministic keys\n- [BIP32-Utils](https://github.com/bitcoinjs/bip32-utils) - A set of utilities for working with BIP32\n- [BIP66](https://github.com/bitcoinjs/bip66) - Strict DER signature decoding\n- [BIP68](https://github.com/bitcoinjs/bip68) - Relative lock-time encoding library\n- [BIP69](https://github.com/bitcoinjs/bip69) - Lexicographical Indexing of Transaction Inputs and Outputs\n- [Base58](https://github.com/cryptocoinjs/bs58) - Base58 encoding/decoding\n- [Base58 Check](https://github.com/bitcoinjs/bs58check) - Base58 check encoding/decoding\n- [Bech32](https://github.com/bitcoinjs/bech32) - A BIP173 compliant Bech32 encoding library\n- [coinselect](https://github.com/bitcoinjs/coinselect) - A fee-optimizing, transaction input selection module for bitcoinjs-lib.\n- [merkle-lib](https://github.com/bitcoinjs/merkle-lib) - A performance conscious library for merkle root and tree calculations.\n- [minimaldata](https://github.com/bitcoinjs/minimaldata) - A module to check bitcoin policy: SCRIPT_VERIFY_MINIMALDATA\n\n\n## Alternatives\n- [BCoin](https://github.com/indutny/bcoin)\n- [Bitcore](https://github.com/bitpay/bitcore)\n- [Cryptocoin](https://github.com/cryptocoinjs/cryptocoin)\n\n\n## LICENSE [MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoreyphillips%2Frn-bitcoinjs-lib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoreyphillips%2Frn-bitcoinjs-lib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoreyphillips%2Frn-bitcoinjs-lib/lists"}