패키지, 저장소 및 앱 카테고리 검색

패키지 상세v0.31.3

bdk_flutter

비트코인 개발 키트(bdk) (https://bitcoindevkit.org/)용 플러터 라이브러리

AndroidiOSmacOS
30일 다운로드
589
좋아요
36
Pub 점수
140

패키지 설치

flutter pub add bdk_flutter

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

bdk_flutter는 Flutter 애플리케이션에 비트코인 개발 키트(bdk)를 통합하는 Flutter 라이브러리로, 개발자가 키 관리, 거래 생성 및 블록체인 상호작용을 완전히 제어할 수 있는 안전한 네이티브 비트코인 지갑을 구축할 수 있도록 합니다. 강력한 Rust 기반 백엔드와의 연결을 제공하며, HD 지갑 지원, PSBT 처리, 블록체인 동기화 등의 기능을 제공합니다. Web3, 암호화폐 및 블록체인 앱을 위해 설계되었으며, Android, iOS, macOS 플랫폼에서 가볍고 프라이버시 중심의 비트코인 솔루션을 개발자에게 제공합니다.

사용 사례

  • Flutter 앱에서 비트코인 지갑 만들기
  • 다중 서명 거래를 위한 PSBT 생성
  • 비트코인 블록체인 동기화 통합
  • BIP39 및 BIP44를 사용하여 HD 지갑 관리
  • 오프라인 서명 워크플로우 활성화

주요 기능

  • 비트코인 개발 키트와의 네이티브 통합
  • HD 지갑 및 BIP 표준 지원
  • PSBT 생성 및 서명 기능
  • 크로스 플랫폼 호환성 (Android, iOS, macOS)
  • 보안 키 관리 및 지갑 운영

적합한 대상

  • 플러터 개발자가 비트코인 지갑을 만들고 있습니다
  • 비트코인 기능이 필요한 웹3 프로젝트
  • 오프라인 거래 서명이 필요한 앱
  • Rust 기반의 bdk 백엔드를 사용하는 개발자
  • 코인 기반 모바일 애플리케이션

고려 사항

  • 비트코인의 기본 사항을 이해해야 합니다
  • 성숙한 라이브러리에 비해 문서가 제한적
  • 저사양 기기에서 성능 오버헤드 가능성
  • bdk의 네이티브 플랫폼 설정에 의존
  • 생산 배포를 위해 추가 구성이 필요할 수 있습니다

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

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.3
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 externalPublicDescriptor = await Descriptor.create( descriptor: externalDescriptor.toString(),
                                                    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 =  address.scriptPubkey();
final feeRate = await blockchain.estimateFee(target: 25);

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

final serializedPsbt =  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 =
         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 =
         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 =
        bdkWallet.getAddress(addressIndex: const AddressIndex.increase());
final internalAddress =
        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:
  • 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

Thanks for taking a look!

카테고리

의존성

의존성 목록 6 개

소스 저장소

이 패키지를 사용하는 프로젝트