6 releases (breaking)
0.8.0 | Oct 14, 2024 |
---|---|
0.7.0 | Jul 5, 2024 |
0.4.0 | May 14, 2024 |
0.3.0 | May 3, 2024 |
0.1.0 | Jan 26, 2024 |
#3 in #uniffi
198 downloads per month
95KB
2K
SLoC
Contains (JAR file, 60KB) gradle-wrapper.jar
Bindings
To generate bindings the projects use Mozilla uniffi giving support for: Kotlin, Swift, Python, Ruby and also third party support for Kotlin multiplatform, Go, C++, C# and Dart.
There is an architectural refactor already planned for the crates the bindings are created on, this initial version is for experimentation only, expect breaking changes in the API
Most of the rust types in this crate are wrappers on types in lwk_wollet
and lwk_signer
which satisfy uniffi requirements such as:
- Methods on types support only
&self
, thus if the inner type needs mutability, it is usually enclosed in astd::sync::Mutex
. - Returned values must be wrapped in
std::sync::Arc
so that there aren't issue in memory management.
Host & Requirements
Build supported on Mac and Linux.
Note the following commands requires some env var defined in ../context/env.sh
. If you use direnv
and allowed the .envrc
file they are automatically evaluated when entering the dir, otherwise launch manually via . ./context/env.sh
For android build you need the NDK greater than r23 in ${PROJECT_DIR}/bin/android-ndk
, if you already have it elsewhere just symlink your path.
Building bindings requires launching commands with many arguments, just tool is used for that. It's a simple make-like tool, you can either install the tool or copy-paste the shell commands inside it.
Python
Examples
- List transactions of a wpkh/slip77 wallet
- Send transaction of a wpkh/slip77 wallet in a regtest environment
- Send asset of a wpkh/slip77 wallet in a regtest environment
- Custom persister, the caller code provide how the wallet updates are persisted
Build Python wheel
First, create a virtual env, skip the step if you already created it.
cd lwk/lwk_bindings
virtualenv venv
source venv/bin/activate
pip install maturin maturin[patchelf] uniffi-bindgen==0.26.1
Then build the wheel
cd lwk/lwk_bindings
maturin develop
Try it (note there is still an issue in how we import the package when using the wheel):
import lwk
str(lwk.Network.mainnet())
Publish Python wheel
Download artifacts from CI:
- github ci for windows and mac
- gitlab ci for linux
$ twine upload *.whl
Test
cargo test -p lwk_bindings --features foreign_bindings --test bindings -- py
Live environment
just python-env-bindings
Kotlin
Example
- List transactions of a wpkh/slip77 wallet
Build
This will build the bindings library in debug mode and generate the kotlin file
just kotlin
Create android bindings library libs, 4 architectures in release mode
just android
Swift
Example
- List transactions of a wpkh/slip77 wallet
Dependencies
~53MB
~778K SLoC