javascript 如何使用以太坊加密将签名从React应用程序发送到Node JS服务器

jgwigjjp  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(100)

我正在做一个来自Alchemy的练习,我需要在将交易发送到服务器之前对交易进行签名。然后在服务器端验证交易。我使用一个脚本,我输入私钥和消息来生成签名使用这里:
注意,我需要将signMessage转换为字符串,否则我会得到一个由于“BigInt”引起的TypeError。

async function transfer(evt) {
    evt.preventDefault();
    const signMessage = {
      r: 36691152806955910003274360488470766136656266395316605280087404244279825225745n,
      s: 25775843654993118241418850103739194190473898130155752009759534141754021856163n,
      recovery: 0,
    };

    try {
      const {
        data: { balance },
      } = await server.post(`send`, {
        signature: signMessage.toString(),
      });
    } catch (ex) {
      console.log(ex);
      alert(ex.response.data.message);
    }
  }

字符串
然后我在服务器端使用了这段代码,但它不起作用,我无法将字符串转换回bigint,因为错误'SyntaxError:Cannot convert [object Object] to a BigIn'

app.post("/send", (req, res) => {
  // TODO: get a signature from the client-side app
  // recover the public address from the signature

  const { signature } = req.body;

  // Convert the strings back to BigInt and Buffer
  const signatureBigInt = BigInt(signature);
  console.log({ signatureBigInt });

  res.send("testing");
  
});


我已经尝试了不同的东西和转换类型,但我认为我错过了一些东西,或者我对我正在做的事情根本错误。

brqmpdu1

brqmpdu11#

From mdn doc:
当使用BigInt()函数将一个值转换为BigInt时,该值将首先被转换为一个原语。然后,如果它不是BigInt、string、number和boolean中的一个,则会抛出错误。
看起来只有BigInt, string, number, and boolean类型可以转换。
不应该对整个对象进行字符串化,而应该对要传递的对象键的值进行字符串化

相关问题