Android 集成 Embedded MPC Node
Embedded MPC Node 是集成在客户端中的 MPC 计算节点,提供 Android Native API 供开发者使用,内部集成了一系列 MPC-TSS 密码学算法。
交付物
| 交付物 | 说明 |
libsmnSDK-Android-vX.Y.Z.tar.gz | Android aar 压缩文件 |
| mpc_node_config.toml | Embedded MPC Node Service 配置文件模版 |
将 libsmnSDK-android-vX.Y.Z.tar.gz 解压后得到 libsmnSDK.aar 放入 Android 工程中即可使用。

💡
Android 最低支持 Android API version 27(Android 8.0.1),支持 arm64-v8a 架构运行。
ProGuard 推荐配置如下:
-keep class smn.go.** { *; }
-keep class com.smn.sdk.** { *; }
-keep class com.safeheron.smn.** { *; }运行环境和依赖
| 类型 | 说明 |
| SMN Service | 运行在服务端的 SMN Service |
| SMN Relayer | 用于 MPC Node 间通信的中间件 |
需要准备 MPC Node Service 的 Party ID 和公钥,在 SMN Service 的配置文件 mpc_node_config.toml 中可以找到。同时需要准备好 Relayer 的连接地址。上述配置信息在 Embedded MPC Node 的配置文件中需要使用。
使用方式
准备配置文件
Embedded MPC Node 需要的配置文件如下:
[MPC]
# 默认 10s,建立 MPC 节点之间连接的等待时间
# 如一个 MPC Session 需要 Party 1,Party 2,Party 3 参与,当前节点为 Party 1,
# 则需要在 10s 内完成收到 Party 2 和 Party 3 的 ReadyMessage,否则响应 ReadyTimeout 错误
ReadyTimeout = '10s'
# 默认 2m,当启动一个计算 Session 后,这个 Session 需要在 2m 内完成,
# 否则响应 SessionTimeout 错误
SessionTimeout = '2m'
[Party]
# Embedded MPC Node 只需要配置 ID 即可,在 Tenant 初始化时,会自动生成公私钥
# 开发者可以通过 Native 接口 getTPK 调用获取 Embedded MPC Node 公钥
ID = 2
[Relayer]
# 必填,通信 Relayer 的地址,必须是 ws 和 wss 开头
Address = 'ws://url:9001'
[[RemoteParty]]
# 远程 SMN Service 的 ID 和 公钥
ID = 1
PublicKey = '040ad492d08ba2f34e8bdf44a079694b47374f89c74265700a57888ea2437ee1f4167f98fa232d33daf24440726b03a08476cd1ef697d4b0a6a145dccbea732202'
[Log]
# 日志级别,支持 Debug、Info、Warning、Error、Off 等级,其中 Off 为不输出日志
Level = 'Off'集成示例
请参考 Demo。
需要注意,MPC 协议计算全部为同步方法,且需要占用较长时间进行计算,因此需要开发者异步调用,并且在使用 Embedded MPC Node 时应当避免在 UI 线程中使用。目前所有 MPC 协议计算方法线程不安全,同一时间同一个协议只可以有一个线程调用。 在调用过程中, Embedded MPC Node 如果计算异常或者错误,会抛出异常,因此需要开发者捕获异常以防止应用异常退出。