TPWallet签名验证失败:一次NFT铸造的链ID排查

用户用TPWallet签名铸造NFT,DApp报验证失败。排查发现chainId与nonce配置错误,调整后交易成功。签名验证需关注消息编码与链ID。

上周,朋友在一个新NFT项目里用TPWallet扫码签名。页面弹窗“签名验证失败”,连试三次都卡住的。钱包余额够,Gas也调了。DApp后台就是认不了这个签名。他把截图发我了,我让他先贴出签名后的原始数据。tpwallet 签名验证,本质是DApp用钱包公钥去校验一段消息或交易哈希。

用户私钥在本地签名了,钱包把签名结果和公钥一起返回。DApp用同样算法还原,对比地址。

chainId不对的,或者签名时的消息格式多了空格、换行,验证就会挂。朋友的案例里。DApp要求chainId=56了,他的TPWallet连的是BSC主网,按理没错。签名请求里带了一个自定义nonce,DApp没同步更新了。我让他打开TPWallet的“签名详情”,把那串十六进制复制出来,跟DApp文档示例比对。发现签名数据末尾少了一个字节是项目方前端对消息做了UTF-8编码,但TPWallet按十六进制字符串直接签。两边处理方式不一致,验证自然过不了。他换成手动输入消息,或者让项目方改回标准personal_sign,问题就解决了。

细节。文档里一般不写。

签名验证失败。九成就是两端对“签什么”理解不同啊?TPWallet的报错信息很模糊,只给一个false。得自己拿签名数据去比对。遇到类似情况,先看chainId、nonce、消息编码,再检查钱包版本。

不要急着换钱包,换一个可能还是一样。

本文来自网络,不代表本站立场,转载请注明出处: https://www.17181game.com/article/637.html
返回顶部