A Flutter library for the Bitcoin Development Kit. The bdk library aims to be the core building block for Bitcoin Applications of any kind.
- Flutter : 3.0 or higher
- Android minSdkVersion. : API 23 or higher.
- Deployment target : iOS 12.0 or greater.
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
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:https://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 );
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);
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']}");
}
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());
The latest API documentation is available here
- *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.
- Setting up a local Esplora instance for testing: https://bitcoin.stackexchange.com/questions/116937/how-do-i-setup-an-esplora-instance-for-local-testing/116938#116938
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!