如何在Hedera中从Key对象获取公钥?前端多签设置遇阻
从Hedera Key对象中提取公钥(前端场景)
Hedera JS SDK里的Key是抽象父类,实际拿到的实例会是具体的公钥类型(比如Ed25519PublicKey、ECDSAsecp256k1PublicKey)或者多签用的KeyList,得先判断类型再提取公钥,具体操作如下:
单个公钥的提取
如果你的Key对象是单个公钥实例,直接调用SDK提供的方法即可获取字符串格式的公钥:
// 假设key是从查询或其他方式拿到的Key对象 import { Ed25519PublicKey, ECDSAsecp256k1PublicKey } from "@hashgraph/sdk"; if (key instanceof Ed25519PublicKey || key instanceof ECDSAsecp256k1PublicKey) { // 获取DER编码的公钥字符串(多签配置常用格式) const publicKeyStr = key.toString(); // 若需要原始字节数组,用toRawBytes() const publicKeyBytes = key.toRawBytes(); }
多签KeyList的处理
如果Key是KeyList类型(对应多签账户的密钥集合),遍历集合里的每个子Key提取即可:
import { KeyList } from "@hashgraph/sdk"; if (key instanceof KeyList) { const publicKeys = key.keys.map(subKey => { if (subKey instanceof Ed25519PublicKey || subKey instanceof ECDSAsecp256k1PublicKey) { return subKey.toString(); } throw new Error("KeyList中包含不支持的密钥类型"); }); // publicKeys数组就是多签配置所需的所有公钥字符串 }
常见误区
- 不要直接用
JSON.stringify()序列化Key对象,SDK的Key内部结构无法通过普通序列化保留有效信息,必须用上述SDK提供的方法转换。 - 从
AccountInfo/ContractInfo中获取密钥时,务必先判断类型再处理,避免类型错误。
内容的提问来源于stack exchange,提问作者Mulders Michiel
相关产品推荐
相关产品推荐

