智能合约验证不了web3EIP标准的签名

我想在前端页面用web3对一些数据做签名,然后在智能合约里验证,但是一直不成功。

前端代码如下:一开始想用web.eth.sign,但是现在他不能用了,就用了EIPv1中的eth_signTypedData,后来发现personal_sign的签名直接和V1的不一样。但是都验证不了。

const data=[
      {
        type: 'bytes32',      // Any valid solidity type
        name: 'Message',     // Any string label you want
        value: 'zaijian'  // The value to sign
      }
    ]
web3.currentProvider.sendAsync({
      // method:'eth_signTypedData',
      method:'personal_sign',
      params:[data,web3.eth.defaultAccount],
      from:web3.eth.defaultAccount,
    }, function (err, result) {
        if (err) return console.dir(err)
        if (result.error) {
          alert(result.error.message);
          return console.error(result)
        }
        $("#InfoSign").val(result.result);
}

而且solidity现在也不能直接对数据keccak256了,需要用abi.encode打包一下,在前端也不知道怎么实现他那个编码,人直接傻掉。有大佬救救孩子吗

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。