Skip to content
 
 

Repository files navigation

bdk-rn

BDK RN is released under the MIT license. Docs Current npm package version. Issues Stars Forks Demo App

A React Native version of the Bitcoin Development Kit (https://bitcoindevkit.org/) bdk aims to be the core building block for Bitcoin Applications of any kind.

Installation

Using npm:

npm i --save bdk-rn

Using yarn:

yarn add bdk-rn

[IOS Only] Install pods:

npx pod-install
or
cd ios && pod install

Examples

Create a Wallet & sync the balance of a descriptor

import { DescriptorSecretKey, Mnemonic, Blockchain, Wallet, DatabaseConfig, Descriptor } from 'bdk-rn';
import { WordCount, Network, KeychainKind } from 'bdk-rn/lib/lib/enums';

// ....

const mnemonic = await new Mnemonic().create(WordCount.WORDS12);
const descriptorSecretKey = await new DescriptorSecretKey().create(Network.Testnet, mnemonic);
const externalDescriptor = await new Descriptor().newBip84(descriptorSecretKey, KeychainKind.External, Network.Testnet);
const internalDescriptor = await new Descriptor().newBip84(descriptorSecretKey, KeychainKind.Internal, Network.Testnet);

const config: BlockchainElectrumConfig = {
  url: 'ssl://electrum.blockstream.info:60002',
  sock5: null,
  retry: 5,
  timeout: 5,
  stopGap: 500,
  validateDomain: false,
};

const blockchain = await new Blockchain().create(config);
const dbConfig = await new DatabaseConfig().memory();

const wallet = await new Wallet().create(externalDescriptor, internalDescriptor, Network.Testnet, dbConfig);
await wallet.sync(blockchain);

Create a public wallet descriptor

import { DescriptorSecretKey, Mnemonic, Descriptor } from 'bdk-rn';
import { WordCount, Network, KeychainKind } from 'bdk-rn/lib/lib/enums';

// ....

const mnemonic = await new Mnemonic().create(WordCount.WORDS12);
const descriptorSecretKey = await new DescriptorSecretKey().create(Network.Testnet, mnemonic);
const descriptorPublicKey = await descriptorSecretKey.asPublic();
const fingerprint = 'd1d04177';
const externalPublicDescriptor = await new Descriptor().newBip84Public(
  descriptorPublicKey,
  fingerprint,
  KeychainKind.External,
  Network.Testnet
);

Store wallet data persistently

import RNFS from 'react-native-fs'
import { DatabaseConfig, ... } from 'bdk-rn';

// create sqlite database config with rn document directory path
const dbConfig = await new DatabaseConfig().sqlite(`${RNFS.DocumentDirectoryPath}/bdk-wallet`)

References:

Android / Google Play: “16 KB memory page sizes”

Google Play can reject uploads when any 64-bit native library (.so under arm64-v8a / x86_64) is linked with 4 KB ELF segment alignment instead of 16 KB. See the official guide: Support 16 KB page sizes.

This library: bdk-rn pulls bdk-android, which ships libbdkffi.so. From bdk-android 2.2.0 onward those binaries are built with 16 KB page compatibility (bitcoindevkit bdk-ffi CHANGELOG v2.2.0, PR #865).

If Play Console still reports the error:

  1. Confirm the resolved version — run ./gradlew :app:dependencies --configuration releaseRuntimeClasspath (adjust :app if needed) and check that org.bitcoindevkit:bdk-android is ≥ 2.2.0 (this repo pins 2.3.x). Force a resolution if another dependency downgrades it.
  2. Upgrade your app project — Android Gradle Plugin 8.5.1+, and preferably NDK r28+ when you build your own native code (developer guidance).
  3. gradle.properties (application root) — many teams add android.bundle.enable16KbPageSupport=true while migrating (release notes / tooling).
  4. Other .so files — React Native, Hermes, Firebase, ads SDKs, etc. often cause this error before BDK. Use Android Studio → Build → Analyze APK… (or your merged AAB) and inspect lib/**/*.so alignments, or run scripts/check-apk-native-page-alignment.sh on a release APK.

Note: Caution this is an Alpha at this stage Please consider reviewing, experimenting and contributing ⚡️

Thanks for taking a look!

About

Bitcoin Development Kit - React Native Module

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages