5个版本 (破坏性更新)

0.7.0 2024年7月5日
0.4.0 2024年5月14日
0.3.0 2024年5月3日
0.2.0 2024年3月20日
0.1.0 2024年1月26日

#4 in #uniffi

每月35次下载

MIT OR BSD-2-Clause

80KB
2K SLoC

包含 (JAR文件,60KB) gradle-wrapper.jar

绑定

为了生成绑定,项目使用 Mozilla uniffi,为 Kotlin、Swift、Python、Ruby 提供支持,同时也支持第三方对 Kotlin 多平台、Go、C++、C# 和 Dart 的支持。

已经计划对创建绑定的 crates 进行架构重构,这个初始版本仅用于实验,预期 API 将会有 破坏性更改

这个 crate 中的大多数 Rust 类型都是对 lwk_wolletlwk_signer 中类型的封装,以满足 uniffi 的要求,例如

  • 类型上的方法只支持 &self,因此如果内部类型需要可变性,通常将其封装在 std::sync::Mutex 中。
  • 返回值必须封装在 std::sync::Arc 中,以避免内存管理问题。

主机 & 要求

支持在 Mac 和 Linux 上构建。

注意以下命令需要定义在 ../context/env.sh 中的某些环境变量。如果你使用 direnv 并且允许了 .envrc 文件,它们会在进入目录时自动评估,否则请手动通过 . ./context/env.sh 运行。

对于Android构建,您需要在 ${PROJECT_DIR}/bin/android-ndk 中使用大于r23的NDK,如果您已经在其他地方有了,只需创建符号链接到您的路径。

构建绑定需要启动带有许多参数的命令,使用 just 工具。这是一个简单的类似于make的工具,您可以选择安装此工具或复制粘贴其中的shell命令。

Python

示例

构建Python wheel

首先,创建一个虚拟环境,如果您已经创建了,则跳过此步骤。

cd lwk/lwk_bindings
virtualenv venv
source venv/bin/activate
pip install maturin maturin[patchelf] uniffi-bindgen==0.26.1

然后构建wheel

cd lwk/lwk_bindings
maturin develop

尝试它(请注意,当我们使用wheel导入包时,仍然存在一些问题)

import lwk
str(lwk.Network.mainnet())

发布Python wheel

从CI下载工件

  • github ci for windows and mac
  • gitlab ci for linux
$ twine upload *.whl

测试

cargo test -p lwk_bindings --features foreign_bindings --test bindings -- py

实时环境

just python-env-bindings

Kotlin

示例

构建

这将以调试模式构建绑定库并生成kotlin文件

just kotlin

创建android绑定库库,以发布模式生成4个架构

just android

Swift

示例

依赖关系

~55MB
~803K SLoC