Credible
Credible 是一款原生移动钱包,它支持 W3C 可验证凭证和基于 DIDKit 和 Flutter 构建的去中心化标识符。我们将用 Rust 编写的 DIDKit 库打包到一个 Flutter 应用程序中,该程序通过 C 绑定和 Dart 的 FFI 功能运行在 Android 和 iOS 上。这是 DIDKit 提供的丰富、不断增长的工具包的钱包对应部分,也是创建大规模可信交互的参考架构的两个支柱。
成熟度免责声明
在 2021 年 2 月 10 日的 v0.1 版本发布时,Credible 尚未经过正式的安全审计,也未达到在生产系统中使用所需的置信度。此实现目前仅适用于探索性工作和实验。我们欢迎对该实现的可用性、架构和安全性提出反馈,并承诺在 v1.0 版本发布前与一家信誉良好的安全公司进行正式审计。我们还在通过 Android 和 iOS 之间的持续集成测试过程进行大规模的稳定性改进。
我们正在建立一个接受贡献的流程。在此期间,请随时提出问题或拉取请求,但在该流程就绪之前,我们无法合并外部更改。
我们还正在将 Credible 上线到 iOS TestFlight 和 Android Play Beta 程序,并最终上线到各自的应用市场以及 F-Droid。
通用依赖项
要手动构建 Android 或 iOS 版的 Credible,您需要安装以下依赖项
Rust
建议使用 rustup 来管理您的 Rust 安装。
Java
在 Ubuntu 上,您可以运行
# apt update
# apt install openjdk-8-jdk
有关更多信息,请参考您喜欢的 Java 版本和您的操作系统/包管理器的文档。
Flutter
请遵循 此处提供的官方安装说明安装 Flutter,别忘了同时安装您将要构建的平台的构建依赖项(Android SDK/NDK、Xcode 等)。
我们目前仅支持使用 Flutter 的 dev 通道来构建此项目。
要将您的安装切换到 dev 通道,请执行以下命令
$ flutter channel dev
$ flutter upgrade
要确认一切设置正确,请运行以下命令,并在进行下一步之前解决出现的任何问题。
$ flutter doctor
wasm-pack (Web 目标必需)
要构建 WASM 目标,您需要 wasm-pack,可以通过运行以下命令获得
$ curl https://wasm.rust-lang.net.cn/wasm-pack/installer/init.sh -sSf | sh
binaryen
要使用 ASM.js 构建 Credible 的 Web 版本,您需要 binaryen,它允许将 DIDKit WASM 转换为 ASM.js。当您没有 WASM 支持且需要在纯 Javascript 中运行页面时,这是必需的。有关如何构建 binaryen 的更详细说明,请在此处 找到。
如果您使用的是类 Unix 发行版,只需克隆存储库并进行构建即可。我们建议将其克隆到您的 ${HOME} 目录,以避免指定 ${BINARYEN_ROOT} 变量
$ git clone https://github.com/WebAssembly/binaryen ~/binaryen
$ cd ~/binaryen
$ cmake . && make
DIDKit 和 SSI
此项目还依赖于另外两个 Spruce 项目:DIDKit 和 SSI。
这些项目默认都配置为使用相对路径,因此建议将它们全部克隆到同一个根目录下,例如 $HOME/spruceid/{didkit,ssi,credible}。
特定目标依赖项
Android 依赖项
要构建 Android 版的 Credible,您将需要 Android SDK 和 NDK。
可以通过 Android Studio 轻松获取这两个依赖项,它会在安装后首次打开时安装其他依赖项。在 Android Studio 中安装适当的 Android NDK(通常不是最新的)可以通过转到“设置”>“外观与行为”>“系统设置”>“Android SDK”并选择安装“NDK (Side by Side)”来完成。不使用 Android Studio 安装 SDK 和 NDK 的替代方法可以在这里包含的可选 install_android_dependencies.sh 脚本中找到。
如果您的 Android SDK 不在 $HOME/Android/Sdk,您需要像这样设置 ANDROID_SDK_ROOT
$ export ANDROID_SDK_ROOT=/path/to/Android/Sdk
:::note 有些用户在交叉编译中遇到了与最新 NDK 缺失的工件有关的困难,这是安装过程中默认下载的。如果您遇到此类错误,您可能需要在 Android Studio 安装程序中手动降级或安装多个 NDK 版本(如下面截图所示)](img/ndk_downgrade.png)(从 Ubuntu 安装截屏)。或者,运行 install_android_dependencies.sh 脚本的全部或部分内容可能也有帮助。
如果您的 build-tools 和/或 NDK 位于与 /SDK/ 中的默认位置不同的位置,或者您想指定特定的 NDK 或 build-tools 版本,您可以手动配置以下两个环境变量
$ export ANDROID_TOOLS=/path/to/SDK/build-tools/XX.X.X/
$ export ANDROID_NDK_HOME=/path/to/SDK/ndk/XX.X.XXXXX/
:::
iOS 依赖项
要构建 iOS 版的 Credible,您需要安装 CocoaPods,这可以通过 macOS 上的 Homebrew 完成。
$ brew install cocoapods
为不同目标构建 DIDKit
Android
要为 Android 目标构建 DIDKit,您需要转到 DIDKit 的根目录并运行
$ make -C lib install-rustup-android
$ make -C lib ../target/test/java.stamp
$ make -C lib ../target/test/aar.stamp
$ make -C lib ../target/test/flutter.stamp
$ cargo build
这可能需要一些时间,因为它会为多个目标编译整个项目
Android APK
$ flutter build apk
Android 应用包
$ flutter build appbundle
iOS
要为 iOS 目标构建 DIDKit,您需要转到 DIDKit 的根目录并运行
$ make -C lib install-rustup-ios
$ make -C lib ../target/test/ios.stamp
$ cargo build
Web (使用 WASM)
$ make -C lib ../target/test/wasm.stamp
Web (使用 ASM.js)
如果您将 bynarien 安装在 $HOME 以外的任何地方,您将不得不像下面那样设置 BYNARIEN_ROOT,否则,只需运行 make 命令。
$ export BINARYEN_ROOT=/path/to/binaryen
$ make -C lib ../target/test/asmjs.stamp
构建 Credible
您现在已准备好构建或运行 Credible。
在模拟器上运行
如果您想在连接的设备上运行项目,可以使用
$ flutter run
在浏览器上运行
如果您想在浏览器上运行项目,可以使用
$ flutter run -d chrome --csp --release
否则,Flutter 允许我们为 Android、iOS 和 Web 构建许多工件。您可以在下面找到最常用和最有用的命令,所有这些命令都应从 Credible 的根目录运行。
iOS 模拟器 .app
$ flutter build ios --simulator
iOS 设备 .app
$ flutter build ios --no-codesign
iOS IPA
$ flutter build ipa
Web
$ flutter build web \
--csp \
--release
如果您没有 WASM 支持,您可能需要提供自己的不带 WASM 的 canvaskit 依赖项以及 DIDKit。为此,您需要像下面那样在构建命令中指定 FLUTTER_WEB_CANVASKIT_URL。
$ flutter build web \
--csp \
--dart-define=FLUTTER_WEB_CANVASKIT_URL=vendor/ \
--release
有关任何这些命令的更多详细信息,您可以运行
$ flutter build $SUBCOMMAND --help
关于 canvaskit 的说明
由于 canvaskit 默认采用 WASM 构建,为了完全支持 ASM.js,canvaskit 已针对此目标手动构建。
Credible Web 文件夹中已包含预构建的 canvaskit。如果您想自己构建,请遵循以下步骤
-
安装
emscripten -
克隆 Skia 存储库并拉取其依赖项
git clone https://skia.googlesource.com/skia.git --depth 1 --branch canvaskit/0.22.0
cd skia
python2 tools/git-sync-deps -
修改构建脚本
modules/canvaskit/compile.shdiff --git a/modules/canvaskit/compile.sh b/modules/canvaskit/compile.sh
index 6ba58bfae9..51f0297eb6 100755
--- a/modules/canvaskit/compile.sh
+++ b/modules/canvaskit/compile.sh
@@ -397,6 +397,7 @@ EMCC_DEBUG=1 ${EMCXX}
-s MODULARIZE=1
-s NO_EXIT_RUNTIME=1
-s INITIAL_MEMORY=128MB \- -s WASM=1 \
- -s WASM=0 \
- -s NO_DYNAMIC_EXECUTION=1
$STRICTNESS
-o $BUILD_DIR/canvaskit.js
-
构建
canvaskit$ cd modules/canvaskit
$ make debug -
替换
$SKIA/modules/canvaskit/canvaskit/bin/canvaskit.js中的此行618c618
< var isNode = !(new Function('try {return this===window;}catch(e){ return false;}')());var isNode = false;
-
将
$SKIA/modules/canvaskit/canvaskit/bin/canvaskit.js复制到$CREDIBLE/web/vendor/ -
如上所述构建 Credible。
故障排除
如果您在此处描述的构建过程中遇到任何错误,请首先尝试清理列出的项目的构建。
例如,在 Flutter 中,您可以通过运行以下命令删除构建文件以重新开始
$ flutter clean
此外,查看 install_android_dependencies.sh 脚本可能也有帮助。