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

以太坊私钥需32字节报错求助:签名交易时如何修正?

解决以太坊签名交易时的「Private key must be 32 bytes in length」错误

错误原因

以太坊私钥本质是32字节的二进制数据,对应64个十六进制字符(1字节=2个十六进制字符)。你当前的问题是转成十六进制字符串时,可能因为原始Buffer包含前导零被省略,导致字符串长度不足64位,触发了web3.js的参数校验错误。

另外需要明确:以太坊地址是42字符(0x前缀+20字节的十六进制表示),和私钥的32字节长度没有关联,不要混淆两者的规格。

解决方案

方案1:直接传递Buffer类型的私钥(推荐)

web3.js的signTransaction方法支持直接传入Buffer类型的私钥,无需转成十六进制字符串,从根源避免长度问题:

var signed = await this.web3.eth.accounts.signTransaction(rawData, this.wallet.privateKey);

方案2:确保十六进制字符串为64位长度

如果必须使用十六进制字符串,需要补全前导零保证长度为64位:

// 补全前导零,确保十六进制字符串长度为64
var privateKeyHex = this.wallet.privateKey.toString("Hex").padStart(64, '0');
var signed = await this.web3.eth.accounts.signTransaction(rawData, privateKeyHex);

内容的提问来源于stack exchange,提问作者Arrakasta Lasai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:45:45