You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solana交易签名报unexpected type, use Uint8Array错误如何解决?

错误原因
  • 该错误由tweetnacl库的类型校验触发:nacl.sign.detached()方法要求传入的待签名数据和签名私钥两个参数必须是Uint8Array类型,只要其中任意一个参数为Buffer、普通数组、十六进制/Base64字符串等其他类型,就会抛出该异常。
  • 结合调用栈判断,问题大概率出在传入partialSign方法的签名者signer的secretKey不符合类型要求:常见场景包括私钥被存储为字符串格式、使用Node.js独有的Buffer类型未做转换、密钥导入/生成时类型处理错误。
解决方案
  1. 私钥传入签名方法前强制转换为Uint8Array类型:
    • 若私钥当前为十六进制字符串:
      const uint8SecretKey = new Uint8Array(Buffer.from(hexPrivateKeyStr, 'hex'))
      
    • 若私钥当前为Base64字符串:
      const uint8SecretKey = new Uint8Array(Buffer.from(base64PrivateKeyStr, 'base64'))
      
    • 若私钥当前为Node.js Buffer类型:
      const uint8SecretKey = new Uint8Array(nodeBufferSecretKey)
      
  2. 可选校验待签名数据类型,避免signData异常:
    const signData = new Uint8Array(message.serialize())
    
  3. 如果使用@solana/web3.js的Keypair生成签名者,keypair.secretKey本身就是Uint8Array类型,无需额外转换,确认传入partialSign的是完整的Keypair实例,而非自行构造的携带错误类型secretKey的对象。

内容的提问来源于stack exchange,提问作者Krishna Satya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:09:03