TypeScript版BitClout交易签名转Golang后运行异常,如何排查错误?
你的Go代码存在以下核心错误:
- 变量名笔误
解码交易十六进制串时,你写的hex.DecodeString(hexString)中hexString是不存在的变量,应该传入参数transactionHex,否则解码得到的交易字节完全错误。 - 交易哈希处理错误
TS版本中直接使用双重SHA256得到的二进制字节数组做签名,而你将哈希结果格式化为十六进制字符串后,再将字符串转为字节数组传入签名方法,相当于用哈希的ASCII表示做签名,和原始逻辑完全不符。正确写法是直接取双重SHA256的结果字节:first := sha256.Sum256(transactionBytes) transactionHash := sha256.Sum256(first[:]) // 签名时直接传transactionHash[:]即可 signature, err := privateKey.Sign(transactionHash[:]) - 签名长度编码错误
TS版本中用的uvarint64ToBuf是无符号变长整数编码,不是你写的固定8字节小端编码。你用binary.LittleEndian.PutUint64生成的长度字节和原始逻辑不匹配,正确写法是用Go标准库的binary.PutUvarint处理:signatureLength := make([]byte, binary.MaxVarintLen64) n := binary.PutUvarint(signatureLength, uint64(len(signatureBytes))) // 只取实际用到的变长编码字节 signatureLength = signatureLength[:n] - 错误未处理
你忽略了hex.DecodeString、privateKey.Sign等方法的错误返回,调试阶段建议先加上错误判断,避免其他隐性问题。
内容的提问来源于stack exchange,提问作者Andrew Arrow
相关产品推荐
相关产品推荐

