Integrate
web、原生 Android iOS 如何集成
以下内容参照@privy-io/expo,通过 ReactNative 集成这个库的过程,可以推测出来是 ReactNative UI + react-native-webview 方案方案一:通过 webview 与 iframe-wallet 交互
特点
- 没有授权相关的交互和 UI 渲染,
- iframe-wallet 是一个网页(只有 JS 内容没有 HTML)提供核心的密钥管理功能
- 交易这块是有一个 wallet provider 层
web 端直接集成@next-wallet/provider
原生端与 webview 通信
原生端通过一个 webview,与 webview 通信,原生本身支持 webview,原生 webview(也就是前端运行容器)加载 iframe wallet 的核心内容到 webview 中,之后原生可以与之交互,也就是相当于原生要实现@next-wallet/provider 的功能(代码量很少,另外为了方便原生开发最好可以实现 async 工具调用,使用工具与 iframe 通信,@next-wallet/provider 是调用@next-wallet/iframe 内实现的工具,这个工具原生用不了),原生直接与 wallet iframe 交互
主要技术实现:
- 原生集成 webview 与之通信,需要 webview 不可见,并且随时可以进行交互
- 原生需要对应到 iframe 的 action 操作上,action 是一个枚举值,@next-wallet/iframe 中使用 switch case 进行处理
参考其他集成方案
- privy iOS 如何集成
- coinbaseSDK
TODO
助记词处理
1.助记词用私钥加密后存储在服务器上 2.导出助记词,需要先生成私钥,然后用私钥解密助记词 不同链上资产是否联通 以太坊钱包协议 安全
-
服务端渲染就可以拿到会话公钥,用于客户端与服务端数据加密,无需客户端重新获取,
-
数据库
- 库 1: APP 表,域名表,用户表 salt,助记词表
- 库 2:auth 密钥份额表
- 库 3:recover 密钥份额表
# database1
# app 表
id
app_id
name
domains: 关联domain的id
# domain 表
id
domain
# user 表
id
auth_salt
recover_salt
# wallet 表
id
user_id
public
private
# private 表
id
auth_share_id 查database2的share
recover_share_id 查database3的share
wallets 关联wallet的id
# database2
# auth 表
id
share
# database3
# recover 表
id
share
存储私钥 第 1 步:获取 user 的 auth_salt 和 recover_salt 存储私钥 第 2 步:对 authShare 加密存储到 database2 auth 表中,对 recoverShare 加密存储到 database3 recover 表中 存储私钥 第 3 步:更新 private 表的 auth_share_id、recover_share_id 存储私钥 第 3 步:更新 wallet 表的 user_id、public、private