The workspace in this repository creates the libbdkffi
multi-language library for the rust based
bdk library from the Bitcoin Dev Kit project. The bdk-ffi-bindgen
package builds a tool for
generating the actual language binding code used to access the libbdkffi
library.
Each supported language has its own repository that includes this project as a git submodule. The rust code in this project is a wrapper around the bdk library to expose it's APIs in a uniform way using the mozilla/uniffi-rs bindings generator for each supported target language.
The below repositories include instructions for using, building, and publishing the native language binding for bdk supported by this project.
Language | Platform | Repository |
---|---|---|
Kotlin | jvm | bdk-kotlin |
Kotlin | android | bdk-kotlin |
Swift | iOS, macOS | bdk-swift |
Python | linux, macOS | bdk-python |
Use the bdk-ffi-bindgen
tool to generate language binding code for the above supported languages.
To run bdk-ffi-bindgen
and see the available options use the command:
cargo run -p bdk-ffi-bindgen -- --help
See the UniFFI User Guide
- create new rust struct with only fields that are supported UniFFI types
- update mapping
bdk.udl
file with newdictionary
- create wrapper rust struct/impl with only fields that are
Sync + Send
- update mapping
bdk.udl
file with newinterface
- Language bindings should feel idiomatic in target languages/platforms
- Adding new targets should be easy
- Getting up and running should be easy
- Contributing should be easy
- Get it right, then automate
This project is made possible thanks to the wonderful work by the mozilla/uniffi-rs team.