Skip to content

LtbLightning/bdk-rn

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 } 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: 100,
  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:


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

Thanks for taking a look!