我正在做一个来自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");
});
型
我已经尝试了不同的东西和转换类型,但我认为我错过了一些东西,或者我对我正在做的事情根本错误。
1条答案
按热度按时间brqmpdu11#
From mdn doc:
当使用BigInt()函数将一个值转换为BigInt时,该值将首先被转换为一个原语。然后,如果它不是BigInt、string、number和boolean中的一个,则会抛出错误。
看起来只有
BigInt, string, number, and boolean
类型可以转换。不应该对整个对象进行字符串化,而应该对要传递的对象键的值进行字符串化