Embedded MPC Node API

概述

Embedded MPC Node 提供 iOS(Object-C & Swift)、Android 和 WASM 原生支持,接口设计几乎完全一致,方便开发者各端快速集成。API 主要通过 SMNTenantClientSMNECDSAClientSMNEdDSAClientSMNSchnorrClient 四个类提供。

💡
请勿使用此文档中未提及的方法

SMNTenantClient

SMNTenantClient 类,主要处理租户维度相关逻辑,如获取 SDK 版本信息、通信、本地私钥分片存储等。

创建 SMNTenantClient 实例

功能概述

初始化 SMNTenantClient 对象。如果参数符合要求,将会初始化并返回 一个 SMNTenantClient 实例,否则会抛出异常。

接口

SDKAPI方法类型
JSasync create静态方法
iOSinitWithConfig实例方法
AndroidnewEmbeddedTenantClient静态方法

参数

字段类型说明
configobject | stringEmbedded MPC Node 配置数据,JS 中为 JSON 对象,其他 SDK 中为 TOML 格式字符串。参考

《Browser 集成 Embedded MPC Node》《Android 集成 Embedded MPC Node》《iOS 集成 Embedded MPC Node》中提供的配置模板
tenantNamestring当前租户的名称,租户的数据存储路径和此参数强相关,用于隔离不同租户的数据,主要是私钥分片数据。长度不能超过 200 个 UTF-8 字符
encryptionKeystring当前租户的数据加密密钥,建议不同租户使用不同的密钥,参数值为 64 个字符长度的 16 进制字符串,例如: 47dbd298a3756e28632fdfcd9f54f8035efd0a37d13ca1f4eb756ace05b1948d。如果在初始化 SMNTenantClient 时,提供的 encryptionKey 不符合格式要求或者与之前不一致,将初始化失败,抛出异常。
dbPathstring

有效的数据库存储路径,仅 Android 和 iOS 需要此参数

返回值

SMNTenantClient 类的实例

查看 SDK 版本号

功能概述

获取 Embedded MPC Node SDK 的版本号。

由于 MPC 计算需要多方参与,当其中一方协议出现不兼容更新时,开发者就需要考虑不同版本嵌入式 SDK 之间以及与服务端MPC Node Service 之间的兼容性问题,建议开发者在执行 MPC 协议时上报 SDK 版本号用于将来兼容性升级。

接口

API方法类型
getSDKVersion静态方法

参数

返回值

字段类型说明
versionstringSDK 版本,格式为 x.y.z,如 1.0.0
versionCodenumberSDK 版本号,如 10000,计算方式为 x * 10000 + y * 100 + z

查看 Tenant 配置信息

功能概述

获取当前 SMNTenantClient 的基本配置信息。

接口

API方法类型
getInfo实例方法

参数

返回值

字段类型说明
localPartyobject本地 Party 相关信息
└─idnumber当前节点的 ID,iOS SDK 此字段名称为 partyId
└─tpkstring公钥,不包含 0x 前缀的十六进制字符串
relayerobjectRelayer 相关配置
└─addressstringRelayer 连接地址
remotePartiesarray其他参与方 Party 信息
└─idnumber其他参与方的 Party ID,iOS SDK 此字段名称为 partyId
└─tpkstring公钥,不包含 0x 前缀的十六进制字符串

查看 Tenant 的 Party ID

功能概述

获取当前 SMNTenantClient 的 Party ID。该 ID 源自于首次创建 SMNTenantClient 对象的配置文件中的配置。

接口

API方法类型
getPartyId实例方法

参数

返回值

number

查看 Tenant 的 TPK

功能概述

获取当前 SMNTenantClient 的 Tenant Public Key(TPK)。在创建 SMNTenantClient 对象实例时,随机生成一个非对称密钥对(即 Tenant Private Key 与 Tenant Public Key)。在 MPC 计算过程中以及和 Relayer 通信鉴权时会使用此密钥对。

接口

API方法类型
getTpk实例方法

参数

返回值

string

查看 Tenant 本地 Party

功能概述

获取当前 SMNTenantClient 的 Party 信息,包含 Party ID 和 TPK。

接口

API方法类型
getParty实例方法

参数

返回值

字段类型说明
idnumber本地 Party 的 ID
tpkstring本地 Party 的 Tenant Public Key(TPK)

修改本地数据密钥

功能概述

修改加密本地数据的密钥,该加密密钥为不包含 0x 前缀的 64 位十六进制字符串。修改成功后, 后续初始化 SMNTenantClient 需要使用新密钥,否则初始化失败。

接口

API方法类型
changeEncryptionKey实例方法

参数

字段类型说明
encryptionKeystring新的加密密钥,需要满足:不包含 0x 开头的 64 位十六进制字符串

返回值

SDK返回值说明
JS如果修改失败将会抛出异常,异常信息中包含具体的错误原因。
iOSBOOLTRUE:表示修改成功; FALSE: 表示修改失败,需要在 Error 信息中查看具体的错误原因。
Android如果修改失败将会抛出异常,异常信息中包含具体的错误原因。

设置 Relayer Token 回调函数

功能概述

设置获取 Relayer Token(OTT)的回调函数。当 Embedded MPC Node 参与 MPC 计算时,需要与 SMN Relayer 建立网络连接,和其他参与方实时通信。SDK 自动调用此函数获取一次性 Token(OTT), 在与 SMN Relayer 连接认证时使用。

接口

API方法类型
async-in-js setRelayerTokenCallback实例方法

参数

SDK参数
JSfunction(partyId, tpk): Promise<string[]>
iOSSMNRelayerTokenCallback(partyId, tpk)
Androidcom.smn.sdk.tenant.SMNRelayerTokenCallback.getRelayerToken(partyId, tpk)

其中:

返回值

SDK返回值
JSPromise<boolean>
iOS
Android

自定义 MPC 消息通信方式

功能概述

默认情况下,在进行 MPC 计算的过程中, Embedded MPC Node 和其他参与方通过 SMN Relayer 进行通信,同时可使用此方法设置自定义通信方式,如同一个应用终端内集成两个及以上的 SMNTenantClient 时, 可配合 postMessage 接口,实现多个 SMNTenantClient 直接通信,以提升 MPC 协议执行速度。

💡
该方法在参数格式不符合要求的情况下会抛出异常,需做好参数校验和异常捕获。

接口

API方法类型
async addSendMessageCallback实例方法

参数

字段类型说明
idnumber接收方的 Party ID,iOS SDK 此参数名称为 partyId
tpkstring接收方的 TPK
callbackfunction处理消息的回调函数,将 MPC 计算过程的消息数据传递给此回调函数

返回值

SMNTenantClient 间直接通信

功能概述

一般情况下,此方法与 addSendMessageCallback 配合使用。当一个应用终端内集成两个及以上的 SMNTenantClient 时,这些 SMNTenantClient 之间无需通过 Relayer 通信。

💡
该方法在参数格式不符合要求的情况下会抛出异常,需做好参数校验和异常捕获。

接口

API方法类型
async-in-js postMessage实例方法

参数

参数名类型说明
messagestring需要发送的消息,可以直接使用 addSendMessageCallbackcallback 的入参 message

返回值

算法 API

创建算法 Client 实例

功能概述

创建一个算法的 Client 实例,使用该实例完成特定算法的 MPC 计算。

接口

SDK算法 ClientAPI方法类型
JS、AndroidSMNECDSAClient构造方法 new-
JS、AndroidSMNEdDSAClient构造方法 new -
JS、AndroidSMNSchnorrClient构造方法 new-
iOSSMNECDSAClientinitWithTenant实例方法
iOSSMNEdDSAClientinitWithTenant实例方法
iOSSMNSchnorrClientinitWithTenant实例方法

参数

参数名类型说明
tenantClientSMNTenantClientSMNTenantClient 实例对象,使用该实例完成通信、存储等功能。

返回值

object - 算法 Client 实例对象,类型为 SMNECDSAClient、SMNEdDSAClient 或者 SMNSchnorrClient

获取本地 Party

功能概述

获取本地 Party 信息,包含 Party ID 和 TPK。

接口

算法 ClientAPI
SMNECDSAClientgetParty
SMNEdDSAClientgetParty
SMNSchnorrClientgetParty

参数

返回值

字段类型说明
idint本地 Party 的 ID
tpkstring本地 Party 的 Tenant Public Key(TPK)

generatePreKeygenData

功能概述

生成本地私钥分片对应的预计算数据,该方法为静态方法,不需要初始化 SMNECDSAClient 实例。主要应对用户的租户尚未初始化的情况下,需要生成预生成数据的场景,返回预计算数据字符串。此方法与 addPreKeygenData 搭配使用。仅 ECDSA-CMP 算法支持此接口

💡
注意:为了确保 MPC 私钥分片的安全性,预计算数据只能被使用一次,并且不要其将泄漏。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jsgeneratePreKeygenData静态方法

参数

仅 JS SDK 需要以下参数,Android 和 iOS SDK 无参数

参数名类型说明
smnMPCWorkerJSPathstring交付产物中的 mpcWorker.global.js 的 URL
smnAlgoWasmPathstring交付产物中的 safeheron-crypto-sdk-wasm.wasm 的 URL

返回值

string - 生成的预计算数据

addPreKeygenData

功能概述

SMNECDSAClient 对应的 SMNTenantClient 存储中添加 MPC 预计算生成的数据。仅 ECDSA-CMP 算法支持此接口。

💡
注意:为了确保 MPC 私钥分片的安全性,预计算数据只能被使用一次,并且不要其将泄漏。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jsaddPreKeygenData实例方法

参数

参数名类型说明
preKeygenDatastring预生成数据,该参数为可 SMNECDSAClient.generatePreKeygenData 接口返回的数据

返回值

boolean 是否添加成功

preKeygen

功能概述

在分布式私钥生成的过程中,各方 Party 在本地创建私钥分片时会进行大量耗时计算,调用本接口后会预生成一个本地私钥分片对应的预计算数据,从而减少执行 keygen/recover/refresh 时的耗时。该方法需要在 keygen/recover/refresh 创建私钥分片之前调用,并且返回 true 为预计算成功。该方法可以执行多次,每次执行成功都会加密存储一份预计算数据。每次执行 keygen/recover/refresh,无论协议计算成功失败都会消耗一份存储的预计算数据。仅 ECDSA-CMP 算法支持此接口。

💡
此接口与 generatePreKeygenData 接口功能类似,均是为了提升 MPC 计算效率,区别是,此接口是实例方法,需要实例化 SMNECDSAClient 后使用;后者是静态方法,需要与 addPreKeygenData 接口配合使用;

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jspreKeygen实例方法

参数

返回值

boolean

getPartyId

功能概述

获取当前 SMNTenantClient 的 Party ID。

接口

算法 ClientAPI方法类型
SMNECDSAClientgetPartyId实例方法
SMNEdDSAClientgetPartyId实例方法
SMNSchnorrClientgetPartyId实例方法

参数

返回值

number

getTpk

功能概述

获取当前 SMNTenantClient 的 TPK。

接口

算法 ClientAPI方法类型
SMNECDSAClientgetTpk实例方法
SMNEdDSAClientgetTpk实例方法
SMNSchnorrClientgetTpk实例方法

参数

返回值

string

keygen

功能概述

该方法用于分布式私钥分片生成,需要所有参与方 MPC Node 同时调用 keygen 方法,MPC Node 接收到 keygen 指令后,根据 sessionId  和远程参与方启动本次 MPC 任务,如果 MPC 计算执行成功,则返回 keyId 和 xPub,其中 keyId 为私钥分片的标识,xPub 为扩展公钥。如果计算失败,则抛出错误信息。

注意:

例如:手机端和服务端构建 MPC 钱包,服务端收到 keyId 和 xPub 后判定私钥分片创建成功,进入后续创建钱包逻辑,此时客户端由于网络问题最后一轮计算失败,本地未得到私钥分片。如果此时钱包功能正常,用户使用钱包进行转入操作,转出时由于本地私钥分片不存在造成无法签名转账,从而造成用户资产损失。

💡
运行时出现错误会抛出异常信息,使用时请捕获异常。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jskeygen实例方法
SMNEdDSAClientasync-in-jskeygen实例方法
SMNSchnorrClientasync-in-jskeygen实例方法

参数

参数名类型说明
sessionIdstringMPC Session ID,唯一标识一个 MPC 任务,所有 Party 在计算同一个任务时, sessionId 必须一致。sessionId 推荐使用 UUIDv4
thresholdnumber签名门限,需要满足 1 < threshold <= totalPartyNum。所有 Party 在计算同一个任务时, threshold 必须一致
totalPartyNumnumberMPC 计算参与方总数,需要满足 1 < threshold <= totalPartyNum。所有 Party 在计算同一个任务时, totalPartyNum 必须一致
curvenumber签名算法需要的曲线名称,开发者可以使用已经定义好的枚举值
ECDSA 算法支持的曲线为: Secp256k1
EdDSA 算法支持的曲线为:Ed25519
Schnorr 算法支持的曲线为:Secp256k1
remotePartiesarray参与本次 MPC 计算任务的其他方, 不包含自己 ,数组长度值应为 totalPartyNum - 1
└─idnumber参与方 Party 的 ID,iOS SDK 此参数名称为 partyId
└─tpkstring参与方 Party 的 Tenant Public Key (TPK)
lifecyclefunction可选参数,MPC 协议的生命周期和进度回调,参数类型说明如下:
JS:
(progress: number, lifecycle: LifecycleEnum, currentRound: number)⇒void
Android:
com.smn.sdk.common.SMNLifecycle
iOS:
SMNProgress

返回值

字段类型说明
keyIdstringMPC Session 计算成功,每个参与方会返回相同的 Key ID
xPubstring扩展公钥,以 xpub 开头,每个参与方会返回相同的 xPub
signKeyVersionstring私钥分片数据结构版本

sign

功能概述

该方法用于私钥分片的分布式签名,需要所有签名参与方 MPC Node 同时调用 sign 方法,如果 MPC 任务执行成功,则返回对应响应参数,如果计算失败,抛出具体的错误信息。

注意:

💡
运行时出现错误会抛出异常信息,使用时请捕获异常。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jssign实例方法
SMNEdDSAClientasync-in-jssign实例方法
SMNSchnorrClientasync-in-jssign实例方法

参数

参数名类型说明
sessionIdstringMPC Session ID,唯一标识一个 MPC 任务,所有 Party 在计算同一个任务时, sessionId 必须一致。sessionId 推荐使用 UUIDv4
keyIdstring需要使用的私钥分片 ID
algoTypestring仅 Schnorr 算法签名时需要此参数,该参数支持 LEGACY 和 BIP340 两种类型,参数值不区分大小写;LEGACY 适用于 BCH,BIP340 适用于 BTC
digestsarray需要签名的消息摘要列表,类型为数组
└─pathstring签名使用的 BIP44 路径,不可为空,输入示例:m/44/60/1/0/0。格式为必须 m 开头,/ 分割路径,每段中间必须整数,整数范围为 [0, 2^32),不能带 ',数字部分字段只能包含 5 段
└─digeststring要签名的数据,使用 16 进制字符串表示,不包含 0x。其中 ECDSA 算法要求此参数大小为 32 字节,EdDSA 和 Schnorr 算法要求此参数大于等于 32 字节,小于等于 1M 字节
remotePartiesarrayMPC Session 的参与方信息,不包含自己,数组长度值应为 threshold - 1,其中 threshold 的值为生成 keyId 对应的私钥分片时传入的 threshold 参数
└─idnumber参与方 Party 的 ID,iOS SDK 此参数名称为 partyId
└─tpkstring参与方 Party 的 Tenant Public Key(TPK)
lifecyclefunction可选参数,MPC 协议的生命周期和进度回调,参数类型说明如下:
JS:
(progress: number, lifecycle: LifecycleEnum, currentRound: number)⇒void
Android:
com.smn.sdk.common.SMNLifecycle
iOS:
SMNProgress

返回值

Array<object>

字段类型说明
pathstring签名使用的 BIP44 路径
digeststring与请求参数对应的 16 进制格式的待签名数据,字母全小写
signaturestring签名结果 16 进制字符串表示
recoveryIdnumberEVM 公链签名中的 v,值为 0 或者 1。仅当使用 ECDSA 算法及 Secp256k1 曲线签名时,返回该字段

refresh

功能概述

该方法用于私钥分片的分布式刷新。

示例说明:对于 2/3 门限,需要 3 方同时调用 refresh 方法,当 MPC Node 收到 refresh 指令后,3 方的私钥分片全部都会刷新,得到一组新的私钥分片和对应新的 keyId。如果刷新失败,则抛出异常,需要重新触发刷新。老的私钥分片依然可用,开发者根据自己的业务决定禁用或者删除老的私钥分片。

注意:

💡
运行时出现错误会抛出异常信息,使用时请捕获异常。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jsrefresh实例方法
SMNEdDSAClientasync-in-jsrefresh实例方法
SMNSchnorrClientasync-in-jsrefresh实例方法

参数

参数名类型说明
sessionIdstringMPC Session ID,唯一标识一个 MPC 任务,所有 Party 在计算同一个任务时, sessionId 必须一致。sessionId 推荐使用 UUIDv4
keyIdstring私钥分片 ID
remotePartiesarrayMPC Session 的参与方信息,不包含自己。数组长度值应为 totalPartyNum - 1,其中 totalPartyNum 的值为生成 keyId 对应的私钥分片时传入的 totalPartyNum 参数。
└─idnumber参与方 Party 的 ID,iOS SDK 此参数名称为 partyId
└─tpkstring参与方 Party 的 Tenant Public Key(TPK)
lifecyclefunction可选参数,MPC 协议的生命周期和进度回调,参数类型说明如下:
JS:
(progress: number, lifecycle: LifecycleEnum, currentRound: number)⇒void
Android:
com.smn.sdk.common.SMNLifecycle
iOS:
SMNProgress

返回值

字段类型说明
keyIdstringMPC Session 计算成功,每个参与方会返回相同的新 keyId
xPubstring扩展公钥,和刷新前私钥分片的扩展公钥一致
signKeyVersionstring私钥分片数据结构版本

recover

功能概述

该方法用于私钥分片的分布式恢复,仅支持 2/3 门限场景。对于 2/3 门限,使用其中两个私钥分片恢复另外一个私钥分片,需要 3 方同时调用 recover 方法。根据输入的 sessionId 对当前计算任务达成共识,所有的参与方都必须输入 keyId,即使本地私钥分片不存在的的参与方,也需要输入 keyId。其中 recoveredParty 表示需要恢复私钥分片的一方。恢复成功后得到一组新的私钥分片和对应新的 keyId,老的私钥分片依然可用,开发者根据自己的业务决定禁用或者删除老的私钥分片。

注意:

💡
运行时出现错误会抛出异常信息,使用时请捕获异常。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jsrecover实例方法
SMNEdDSAClientasync-in-jsrecover实例方法
SMNSchnorrClientasync-in-jsrecover实例方法

参数

参数名类型说明
sessionIdstringMPC Session ID,唯一标识一个 MPC 任务,所有 Party 在计算同一个任务时, sessionId 必须一致。sessionId 推荐使用 UUIDv4
keyIdstring私钥分片 ID
remotePartiesarray所有其他的 MPC Session 参与方,不包含自己。数组长度值应为 totalPartyNum - 1,其中 totalPartyNum 的值为生成 keyId 对应的私钥分片时传入的 totalPartyNum 参数
└─idnumber参与方 Party 的 ID,iOS SDK 此参数名称为 partyId
└─tpkstring参与方 Party 的 Tenant Public Key(TPK)
recoveredPartyarray被恢复的一方的 Party 信息
└─idnumber被恢复方 Party 的 ID,iOS SDK 此参数名称为 partyId
└─tpkstring被恢复方 Tenant Public Key(TPK)
lifecyclefunction可选参数,MPC 协议的生命周期和进度回调,参数类型说明如下:
JS:
(progress: number, lifecycle: LifecycleEnum, currentRound: number)⇒void
Android:
com.smn.sdk.common.SMNLifecycle
iOS:
SMNProgress

返回值

字段类型说明
keyIdstring recover 后生成新的一组私钥分片的 keyId
xPubstring扩展公钥,和恢复前私钥分片的扩展公钥一致
signKeyVersionstring私钥分片数据结构版本

verify

功能概述

给定公钥、消息摘要、签名,验证签名是否是一个有效的签名。如果验证有效返回 true,否则返回 false。

💡
运行时出现错误会抛出异常信息,使用时请捕获异常。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jsverify实例方法
SMNEdDSAClientasync-in-jsverify实例方法
SMNSchnorrClientasync-in-jsverify实例方法

参数

参数名类型说明
curvenumber椭圆曲线类型,可选 CurveTypeEnum.Secp256k1
algoTypestring SMNSchnorrClient 需要此参数,需要与签名时所使用的 algoType 参数值保持一致
publicKeystring公钥
digeststring开发者对消息 hash 后的摘要,16 进制字符串
signaturestring签名内容,签名接口返回的 16 进制字符串

返回值

boolean 代表是否验证成功

derivePublicKeys

功能概述

扩展公钥派生子公钥。当创建钱包时,需要使用子公钥根据不同公链的地址生成算法计算地址。

💡
运行时出现错误会抛出异常信息,使用时请捕获异常。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jsderivePublicKeys实例方法
SMNEdDSAClientasync-in-jsderivePublicKeys实例方法
SMNSchnorrClientasync-in-jsderivePublicKeys实例方法

参数

参数名类型说明
keyIdstring指定需要使用的私钥分片
compressedboolean是否返回压缩公钥,true 是,返回压缩公钥,false 返回未压缩公钥。仅 SMNECDSAClient 和 SMNSchnorrClient 需要此参数
pathsstring[]BIP44 路径数组

返回值

Array<object>

字段类型说明
pathstringBIP44 路径
publicKeystringBIP44 路径对应的公钥

recoverPublicKey

功能概述

给定摘要、签名和 recoveryId,恢复公钥。仅 ECDAS-CMP 算法支持此接口

💡
运行时出现错误会抛出异常信息,使用时请捕获异常。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jsrecoverPublicKey实例方法

参数

参数名类型说明
curveenum签名时所使用的曲线
digeststring开发者对消息 hash 后的摘要,16 进制字符串
signaturestring消息摘要对应的签名
recoveryIdnumberECDSA 签名返回的 recoveryId,0 或者 1
compressedboolean指定返回的公钥格式,true 返回压缩公钥,false 返回未压缩公钥

返回值

string 恢复出来的公钥

recoverPrivateKeys

功能概述

输入私钥分片数组和指定的 BIP44 路径数组,恢复出对应的原始私钥和公钥,其中输入的私钥分片数量需要等于签名门限,否则无法恢复私钥。需要特别注意,输入的分片数组仅支持以下场景:

假设签名门限 2/3,一组私钥分片 KeyId 为 1,三个参与方 Party 1、2、3 分别对应的私钥分片为 A、B、C;使用 A、B 执行分布式恢复协议,得到一组新的 KeyId 为 2,三个私钥分片为 A'、B'、C';使用 A、B、C 执行分布式刷新协议,得到一组新的 KeyId 为 3,得到 A*、B*、C*

(1)支持使用 A、B、C 中任意两个参与方的私钥分片

(2)支持使用 A'、B'、C' 中任意两个参与方的私钥分片

(3)支持使用 A*、B*、C* 中任意两个参与方私钥分片

(4)支持  A、B、C 和  A'、B'、C' 中任意两个参与方私钥分片,比如 A 和 B' 、A 和 C' 、B 和 A' 、B 和 C' 、B 和 A'、C 和 A'、C 和 B'

(5)不支持经过分布式刷新后的私钥分片和其他 KeyId 私钥分片合成原始私钥

💡
运行时出现错误会抛出异常信息,使用时请捕获异常。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jsrecoverPrivateKeys实例方法
SMNEdDSAClientasync-in-jsrecoverPrivateKeys实例方法
SMNSchnorrClientasync-in-jsrecoverPrivateKeys实例方法

参数

字段类型说明
keySharesstring[]私钥分片数组,数组长度为签名门限,数组元素为 backup 接口返回的 keyShareBase64 字段值
pathsstring[]BIP44 路径数组
compressedboolean指定返回的公钥格式,true 返回压缩公钥,false 返回未压缩公钥

返回值

Array<object>

字段类型说明
pathstringBIP44 路径数
curveenum椭圆曲线类型
privateKeystring原始私钥的 16 进制字符串编码
publicKeystring原始私钥对应的公钥 16 进制字符串编码

backup

功能概述

备份私钥分片,该方法返回未加密的私钥分片内容,开发者在使用和存储时应注意安全。强烈建议开发者备份私钥分片时加密存储,避免私钥分片数据泄漏。

💡
运行时出现错误会抛出异常信息,使用时请捕获异常。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jsbackup实例方法
SMNEdDSAClientasync-in-jsbackup实例方法
SMNSchnorrClientasync-in-jsbackup实例方法

参数

参数名类型说明
keyIdstring指定要备份的私钥分片

返回值

字段参数类型说明
curveenum椭圆曲线类型
signKeyVersionstring私钥分片数据结构版本
keyShareBase64string私钥分片数据,restore 和 recoverPrivateKeys 时使用

restore

功能概述

恢复私钥分片,该方法将私钥分片明文导入到 SMNTenantClient 实例内。

💡
运行时出现错误会抛出异常信息,使用时请捕获异常。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jsrestore实例方法
SMNEdDSAClientasync-in-jsrestore实例方法
SMNSchnorrClientasync-in-jsrestore实例方法

参数

参数名类型说明
keySharestringbackup 方法返回结果中的 keyShareBase64 字段值

返回值

字段类型说明
keyIdString导入私钥分片的 keyId
curveenum曲线类型
xPubstring扩展公钥
signKeyVersionstring私钥分片数据版本
parentKeyIdstring父私钥分片 keyId:如果私钥分片由 refresh 或者 recover 得到,这里为父私钥分片的 keyId,如果 keygen 得到,这里为空字符串
parentTypestring生成类型 refresh/recover:如果存在 parentKeyId,那么这里为 refresh/recover,如果不存在 parentKeyId,这里为空
createdTimestampnumber私钥分片的 restore 时间,格式为毫秒级时间戳
thresholdnumber签名门限
totalPartyNumnumberMPC 总参与方个数

keyInfo

给定私钥分片 keyId,获取私钥分片的可公开部分信息。

💡
运行时出现错误会抛出异常信息,使用时请捕获异常。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jskeyInfo实例方法
SMNEdDSAClientasync-in-jskeyInfo实例方法
SMNSchnorrClientasync-in-jskeyInfo实例方法

参数

参数名类型说明
keyIdstring指定的私钥分片

返回值

字段类型说明
keyIdstring私钥分片的 keyId
curveenum椭圆曲线类型
xPubstring扩展公钥
signKeyVersionstring私钥分片数据和数据结构版本
parentKeyIdstring父私钥分片 keyId:如果私钥分片由 refresh 或者 recover 得到,这里为父私钥分片的 keyId,如果 keygen 得到,这里为空字符串
parentTypestring生成类型 refresh/recover:如果存在 parentKeyId,那么这里为 refresh/recover,如果不存在 parentKeyId,这里为空
createdTimestampnumber私钥分片的创建时间或通过 restore 接口导入的时间,格式为毫秒级时间戳
thresholdnumber签名门限
totalPartyNumnumberMPC 总参与方个数

listKeys

功能概述

查询 keyId 列表,默认按照创建时间降序查询。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jslistKeys实例方法
SMNEdDSAClientasync-in-jslistKeys实例方法
SMNSchnorrClientasync-in-jslistKeys实例方法

参数

返回值

Array<object>

keyIdstring私钥分片的 keyId
curveenum曲线类型
xPubstring扩展公钥
signKeyVersionstring私钥分片数据版本
parentKeyIdstring父私钥分片 keyId:如果私钥分片由 refresh 或者 recover 得到,这里为父私钥分片的 keyId,如果 keygen 得到,这里为空字符串
parentTypestring生成类型 refresh/recover:如果存在 parentKeyId,那么这里为 refresh/recover,如果不存在 parentKeyId,这里为空
createdTimestampnumber私钥分片的创建时间或通过 restore 接口导入的时间,格式为毫秒级时间戳
thresholdnumber签名门限
totalPartyNumnumberMPC 总参与方总数

deleteKey

功能概述

指定 keyId,物理删除指定的私钥分片,一旦删除不可恢复。删除成功返回 true,失败返回 false。

💡
运行时出现错误会抛出异常信息,使用时请捕获异常。

接口

算法 ClientAPI方法类型
SMNECDSAClientasync-in-jsdeleteKey实例方法
SMNEdDSAClientasync-in-jsdeleteKey实例方法
SMNSchnorrClientasync-in-jsdeleteKey实例方法

参数

参数名类型说明
keyIdstring指定的私钥分片

返回值

boolean 是否删除成功

文档变更记录

2024-07-04 1.2.0 版本更新