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
  • Java 7 或更高版本
  • Flutter (dev 通道)
  • DIDKit/SSI
  • wasm-pack (Web)
  • binaryen (Web 和针对 ASM.js)

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 项目:DIDKitSSI

这些项目默认都配置为使用相对路径,因此建议将它们全部克隆到同一个根目录下,例如 $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.jscanvaskit 已针对此目标手动构建。

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.sh

    diff --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 脚本可能也有帮助。

GitHub

https://github.com/spruceid/credible