使用 SMN 套件的简单 Demo
此部分以一个实际案例介绍如何集成 Safeheron MPC Node 产品套件。假设业务场景为一个面向 C 端用户的钱包,门限为 2/3,其中开发者服务器持有一个私钥分片 A,开发者的浏览器应用/手机应用中持有两个私钥分片 B 和 C。
| 文件夹 | 说明 |
| ios | iOS 中运行两个租户(Party ID 2 和 Party ID 3)的示例工程 |
| android | Android 中运行两个租户(Party ID 2 和 Party ID 3)的示例工程 |
| browser | Browser 中 Web 页面运行两个租户(Party ID 2 和 Party ID 3)的示例工程 |
| backend | 后端服务示例工程,协调 sessionId 的生成和调用 MPC Node Service 启动 MPC 任务 |
租户的分布

Demo 中开发者可以部署一个 SMN Service,配置租户的 Party ID 为 1。在 iOS、Android 和 Browser Demo 中集成 Embedded MPC Node,创建两个租户,Party ID 为 2 和 3。
使用 Android/iOS/Browser Demo 可以创建一组私钥分片 A、B、C,得到一个 KeyId,并且可以使用服务端私钥分片 A 和 Demo 应用中的私钥分片 B 进行签名。
部署架构

部署架构示意图中黑色部分为开发者需要部署 Safeheron 提供的 Docker 镜像,白色部分为 Safeheron 提供的 Demo 项目。
开发者需要先按照部署文档部署完成 smn-relayer、smn-ca 和 smn-service,然后将 backend demo 部署到和 smn-service 同一台服务器中。
调用流程

Demo 中的调用流程如图所示,其中 App 表示 iOS/Android/Browser 示例应用。核心的调用流程如下:
(S1)App 点击按钮触发向 Backend 发起 keygen 请求
(S2)Backend 收到请求后随机生成 UUID 作为 sessionId
(S3)Backend 生成 sessionId 后使用该 sessionId 异步调用 MPC Node Service keygen 接口(服务端租户 1 keygen 接口)
(S4)Backend 将该 sessionId 返回给 App
(S5)App 收到该 sessionId 后使用该 sessionId 异步调用本地租户 2 keygen 接口
(S6)App 收到该 sessionId 后使用该 sessionId 异步调用本地租户 3 keygen 接口
当 keygen 协议执行完成后,App 可以得到两个私钥分片,Backend 可以得到一个私钥分片。
签名、刷新和恢复协议的流程和上图一致,此处不再赘述。
部署 Demo
在部署 demo 前,开发者需要收集以下信息用于 demo 配置:
| Item | 说明 | 示例 |
| smn-relayer 地址 | Relayer 通信地址 | ws://10.11.1.5:9001/websocket |
| smn-service 地址 | MPC Node Service API 地址 | http://10.11.1.6:8080 |
| smn-service 租户信息 | MPC Node Service 的 Party ID 和公钥 | Party ID = 1 PublicKey = 040ad492d08ba2f34e8bdf44a079694b47374f89c74265700a57888ea2437ee1f4167f98fa232d33daf24440726b03a08476cd1ef697d4b0a6a145dccbea732202 |
| smn-service JWT 私钥 | smn-service 接口调用时需要使用 JWT 鉴权,需要准备 JWT pkcs8 格式的私钥 | mpcnode_secret_pkcs8.pem |
准备好以上配置后,请参考以下文档部署 Backend 以及运行 Android、iOS 和 Browser Demo: