bdk_flutter 0.31.1-dev copy "bdk_flutter: ^0.31.1-dev" to clipboard
bdk_flutter: ^0.31.1-dev copied to clipboard

A Flutter library for the Bitcoin Development Kit(bdk) (https://bitcoindevkit.org/)

Bdk Flutter #

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

A Flutter library for the Bitcoin Development Kit. The bdk library aims to be the core building block for Bitcoin Applications of any kind.

Requirements #

  • Flutter : 3.0 or higher
  • Android minSdkVersion. : API 23 or higher.
  • Deployment target : iOS 12.0 or greater.

How to Use #

To use the bdk_flutter package in your project, add it as a dependency in your project's pubspec.yaml:

dependencies:
  bdk_flutter: ^0.31.1-dev

Examples #

Create a Wallet & sync the balance of a descriptor #

import 'package:bdk_flutter/bdk_flutter.dart';

// ....

final mnemonic = await Mnemonic.create(WordCount.words12);
final descriptorSecretKey = await DescriptorSecretKey.create( network: Network.testnet,
                                                              mnemonic: mnemonic );
final externalDescriptor = await Descriptor.newBip44( secretKey: descriptorSecretKey,
                                                      network: Network.testnet,
                                                      keychain: KeychainKind.externalChain );
final internalDescriptor = await Descriptor.newBip44( secretKey: descriptorSecretKey,
                                                      network: Network.testnet,
                                                      keychain: KeyChainKind.internalChain );
final blockchain = await Blockchain.create( config: BlockchainConfig.electrum(
                                                                        config: ElectrumConfig(
                                                                            stopGap: 10,
                                                                            timeout: 5,
                                                                            retry: 5,
                                                                            url: "ssl://electrum.blockstream.info:60002" )));
final wallet = await Wallet.create( descriptor: externalDescriptor,
                                    changeDescriptor: internalDescriptor,
                                    network: Network.testnet,
                                    databaseConfig: const DatabaseConfig.memory() );
final _ = await wallet.sync( blockchain );

Create a public wallet descriptor #

import 'package:bdk_flutter/bdk_flutter.dart';

// ....

final mnemonic = await Mnemonic.create(WordCount.words12);
final descriptorSecretKey = await DescriptorSecretKey.create( network: Network.testnet,
                                                              mnemonic: mnemonic );
final externalDescriptor = await Descriptor.newBip44( secretKey: descriptorSecretKey,
                                                      network: Network.testnet,
                                                      keychain: KeychainKind.externalChain  );
final externalPublicDescriptorStr = await externalDescriptor.asString();
final externalPublicDescriptor = await Descriptor.( descriptor: externalPublicDescriptorStr,
                                                    network: Network.testnet);

Get the transaction details #

import 'package:bdk_flutter/bdk_flutter.dart';

final bdkWallet = .....

// ....

final txBuilder  = TxBuilder();
final address = await Address.fromString(s: "mv4rnyY3Su5gjcDNzbMLKBQkBicCtHUtFB", network: Network.testnet);

final script = await address.scriptPubkey();
final feeRate = await blockchain.estimateFee(target: 25);

final (psbt, transactionDetails) = await txBuilder.feeRate( feeRate.satPerVb )
                                       .addRecipient( script, 2000 )
                                       .finish( bdkWallet );

final serializedPsbt = await psbt.jsonSerialize();
final jsonObject = json.decode(serializedPsbt);
final outputs = jsonObject['unsigned_tx']['output'] as List;
final inputs = jsonObject['inputs'][0]['non_witness_utxo']['output'] as List;

debugPrint("=========Inputs=====");
    for (var e in inputs) {
      debugPrint("amount: ${e['value']}");
      debugPrint("script_pubkey: ${e['script_pubkey']}");
    }

debugPrint("=========Outputs=====");
    for (var e in outputs) {
      debugPrint("amount: ${e['value']}");
      debugPrint("script_pubkey: ${e['script_pubkey']}");
    }

Create an internal and extarnal wallet descriptors from derivation path. #

import 'package:bdk_flutter/bdk_flutter.dart';


final mnemonic = await Mnemonic.create(WordCount.words12);
final descriptorSecretKey = await DescriptorSecretKey.create(
        network: Network.testnet, mnemonic: mnemonic);

// create external descriptor
final derivationPath = await DerivationPath.create(path: "m/44h/1h/0h/0");
final descriptorPrivateKey =
        await descriptorSecretKey.derive(derivationPath);
final Descriptor descriptorPrivate = await Descriptor.create(
      descriptor: "pkh(${descriptorPrivateKey.toString()})",
      network: Network.testnet,
    );

// create internal descriptor
final derivationPathInt =
        await DerivationPath.create(path: "m/44h/1h/0h/1");
final descriptorPrivateKeyInt =
        await descriptorSecretKey.derive(derivationPathInt);
final Descriptor descriptorPrivateInt = await Descriptor.create(
      descriptor: "pkh(${descriptorPrivateKeyInt.toString()})",
      network: Network.testnet,
    );

final bdkWallet = await Wallet.create(
      descriptor: descriptorPrivate,
      changeDescriptor: descriptorPrivateInt,
      network: Network.testnet,
      databaseConfig: const DatabaseConfig.memory(),
    );

final address =
        await bdkWallet.getAddress(addressIndex: const AddressIndex.increase());
final internalAddress =
        await bdkWallet.getInternalAddress(addressIndex: const AddressIndex.increase());

API Documentation #

The latest API documentation is available here

Example Projects #

  • *BDK Flutter Demo App: The BDK Flutter Demo App is a simple bitcoin app built in flutter to serve as a reference app to demonstrate bdk-flutter api usage.

References: #

Note: This Flutter plugin is currently in its development (dev) stage and has been released for community review and experimentation. We warmly welcome feedback, bug reports, and contributions from developers and enthusiasts alike ⚡️

Thanks for taking a look!

33
likes
0
pub points
83%
popularity

Publisher

verified publisherltbl.io

A Flutter library for the Bitcoin Development Kit(bdk) (https://bitcoindevkit.org/)

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

collection, ffi, flutter, flutter_rust_bridge, freezed_annotation, meta, mockito, uuid

More

Packages that depend on bdk_flutter