Spark签名器接口
Spark签名器实现和使用的完整指南,用于加密操作
概述
Spark SDK 提供了 SparkSigner
接口,以支持灵活的签名操作实现。此抽象允许您自定义加密操作的执行方式,并支持不同的签名策略,包括多重签名配置、硬件钱包和其他专门的密钥管理系统。
SDK 包含一个默认实现(DefaultSparkSigner
),用于处理标准的单签名操作。这可以作为实现支持多重签名、硬件钱包或其他高级签名方案的自定义签名器的参考。
核心概念
密钥类型
- 身份密钥(Identity Key): 用于身份验证的主要钱包标识符
- 签名密钥(Signing Keys): 为特定交易输出派生的密钥
- 存款密钥(Deposit Keys): 用于接收 L1 比特币存款的密钥
- 静态存款密钥(Static Deposit Keys): 用于存款操作的可重复使用密钥
安全模型
所有私钥都使用 BIP32 分层确定性密钥派生从主种子派生。签名器维护公钥与其对应私钥之间的内部映射,确保安全的访问控制。
接口方法
钱包初始化
generateMnemonic()
生成用于钱包创建的新 BIP39 助记词短语。
返回值:
Promise<string>
: 12 个单词的 BIP39 助记词短语
示例:
mnemonicToSeed(mnemonic: string)
将 BIP39 助记词短语转换为加密种子。
参数:
mnemonic
: 有效的 BIP39 助记词短语
返回值:
Promise<Uint8Array>
: 从助记词派生的 64 字节种子
createSparkWalletFromSeed(seed, accountNumber?)
使用主种子初始化签名器并派生所有必要的密钥。
参数:
seed
: 主种子(字节数组或十六进制字符串)accountNumber
: (可选,默认值:0)用于密钥派生的账户索引
返回值:
Promise<string>
: 十六进制编码的身份公钥
示例:
密钥管理
getIdentityPublicKey()
检索钱包的身份公钥。
返回值:
Promise<Uint8Array>
: 身份公钥
getMasterPublicKey()
检索主公钥。
返回值:
Promise<Uint8Array>
: 主公钥
generatePublicKey(hash?)
生成新的签名密钥对并返回公钥。
参数:
hash
: (可选)用于密钥派生的确定性哈希
返回值:
Promise<Uint8Array>
: 生成的公钥
removePublicKey(publicKey)
从签名器的跟踪密钥中移除公钥。
参数:
publicKey
: 要移除的公钥
getTrackedPublicKeys()
返回当前跟踪的所有公钥。
返回值:
Promise<Uint8Array[]>
: 跟踪的公钥数组
存款地址管理
getDepositSigningKey()
检索存款签名公钥。
返回值:
Promise<Uint8Array>
: 存款签名公钥
generateStaticDepositKey(idx)
通过索引生成或检索静态存款密钥。
参数:
idx
: 静态存款密钥的索引
返回值:
Promise<Uint8Array>
: 静态存款公钥
getStaticDepositSigningKey(idx)
通过索引检索静态存款签名密钥。
参数:
idx
: 静态存款密钥的索引
返回值:
Promise<Uint8Array>
: 静态存款签名公钥
getStaticDepositSecretKey(idx)
通过索引检索静态存款私钥。
参数:
idx
: 静态存款密钥的索引
返回值:
Promise<Uint8Array>
: 静态存款私钥
数字签名
signMessageWithIdentityKey(message, compact?)
使用钱包的身份密钥签名消息。
参数:
message
: 要签名的消息compact
: (可选,默认值:false)使用紧凑签名格式
返回值:
Promise<Uint8Array>
: ECDSA 签名(DER 或紧凑格式)
signMessageWithPublicKey(message, publicKey, compact?)
使用特定公钥签名消息。
参数:
message
: 要签名的消息publicKey
: 用于签名的公钥compact
: (可选,默认值:false)使用紧凑签名格式
返回值:
Promise<Uint8Array>
: ECDSA 签名(DER 或紧凑格式)
validateMessageWithIdentityKey(message, signature)
验证针对身份密钥的签名。
参数:
message
: 原始消息signature
: 要验证的签名
返回值:
Promise<boolean>
: 如果签名有效则返回 true
Schnorr 签名
getSchnorrPublicKey(publicKey)
将 secp256k1 公钥转换为 Schnorr 格式。
参数:
publicKey
: secp256k1 公钥
返回值:
Promise<Uint8Array>
: Schnorr 公钥
signSchnorr(message, publicKey)
为消息创建 Schnorr 签名。
参数:
message
: 要签名的消息publicKey
: 用于签名的公钥
返回值:
Promise<Uint8Array>
: Schnorr 签名
signSchnorrWithIdentityKey(message)
使用身份密钥创建 Schnorr 签名。
参数:
message
: 要签名的消息
返回值:
Promise<Uint8Array>
: Schnorr 签名
高级加密操作
restoreSigningKeysFromLeafs(leafs)
从一组树叶节点恢复签名密钥。
参数:
leafs
: 树叶节点数组
subtractPrivateKeysGivenPublicKeys(first, second)
执行私钥减法并返回结果公钥。
参数:
first
: 第一个公钥second
: 第二个公钥
返回值:
Promise<Uint8Array>
: 减法后的结果公钥
splitSecretWithProofs(params)
实现带有可验证证明的 Shamir 秘密共享。
参数:
params
: 秘密共享参数
返回值:
Promise<VerifiableSecretShare[]>
: 可验证秘密份额数组
FROST 协议(门限签名)
getRandomSigningCommitment()
为 FROST 协议生成随机签名承诺。
返回值:
Promise<SigningCommitment>
: 随机签名承诺
signFrost(params)
执行 FROST 签名操作。
参数:
params
: FROST 签名参数
返回值:
Promise<Uint8Array>
: FROST 签名份额
aggregateFrost(params)
将 FROST 签名份额聚合为最终签名。
参数:
params
: FROST 聚合参数
返回值:
Promise<Uint8Array>
: 最终聚合签名
加密
encryptLeafPrivateKeyEcies(receiverPublicKey, publicKey)
使用 ECIES 加密叶私钥。
参数:
receiverPublicKey
: 接收方的公钥publicKey
: 要加密其私钥的公钥
返回值:
Promise<Uint8Array>
: 加密的私钥
decryptEcies(ciphertext)
使用身份密钥解密 ECIES 加密的数据。
参数:
ciphertext
: 加密的数据
返回值:
Promise<Uint8Array>
: 解密的公钥
实用函数
hashRandomPrivateKey()
生成随机私钥的哈希。
返回值:
Promise<Uint8Array>
: 随机私钥的 SHA256 哈希
generateAdaptorFromSignature(signature)
从常规签名生成适配器签名。
参数:
signature
: 原始签名
返回值:
- 包含以下内容的 Promise:
adaptorSignature
: 适配器签名adaptorPublicKey
: 适配器公钥